diff --git a/.azure-pipelines/windows-release/stage-publish-nugetorg.yml b/.azure-pipelines/windows-release/stage-publish-nugetorg.yml index 5aba048cd72..b78bd493a0f 100644 --- a/.azure-pipelines/windows-release/stage-publish-nugetorg.yml +++ b/.azure-pipelines/windows-release/stage-publish-nugetorg.yml @@ -31,7 +31,7 @@ jobs: buildVersionToDownload: specific buildId: $(BuildToPublish) - - powershell: gci pythonarm*.nupkg | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del + - powershell: 'gci pythonarm*.nupkg | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del' displayName: 'Prevent publishing ARM/ARM64 packages' workingDirectory: '$(Build.BinariesDirectory)\nuget' condition: and(succeeded(), not(variables['PublishArmPackages'])) diff --git a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml index 6c61e9ac3bd..8c95f1b950c 100644 --- a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml +++ b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml @@ -39,7 +39,7 @@ jobs: artifactName: embed downloadPath: $(Build.BinariesDirectory) - - powershell: gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del + - powershell: 'gci *embed-arm*.zip | %{ Write-Host "Not publishing: $($_.Name)"; gi $_ } | del' displayName: 'Prevent publishing ARM/ARM64 packages' workingDirectory: '$(Build.BinariesDirectory)\embed' condition: and(succeeded(), not(variables['PublishArmPackages'])) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0df7b5d28d9..9354cc85d28 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -11,6 +11,7 @@ **/*context* @1st1 **/*genobject* @1st1 **/*hamt* @1st1 +Objects/set* @rhettinger Objects/dict* @methane # Hashing @@ -93,6 +94,7 @@ Include/pytime.h @pganssle @abalkin /Tools/msi/ @python/windows-team /Tools/nuget/ @python/windows-team +# Misc **/*itertools* @rhettinger **/*collections* @rhettinger **/*random* @rhettinger @@ -108,6 +110,15 @@ Include/pytime.h @pganssle @abalkin **/*typing* @gvanrossum @ilevkivskyi +**/*asyncore @giampaolo +**/*asynchat @giampaolo +**/*ftplib @giampaolo +**/*shutil @giampaolo + +**/*enum* @ethanfurman +**/*cgi* @ethanfurman +**/*tarfile* @ethanfurman + # macOS /Mac/ @python/macos-team **/*osx_support* @python/macos-team diff --git a/.gitignore b/.gitignore index b11f72f69fa..8c1f8a43075 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,8 @@ *.iml *.o *.a -*.so* +*.so +*.so.* *.dylib *.dll *.orig diff --git a/Doc/c-api/long.rst b/Doc/c-api/long.rst index 83d59de6a0d..c3601045920 100644 --- a/Doc/c-api/long.rst +++ b/Doc/c-api/long.rst @@ -195,8 +195,8 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate. :meth:`__int__` method (if present) to convert it to a :c:type:`PyLongObject`. - If the value of *obj* is greater than :const:`PY_LLONG_MAX` or less than - :const:`PY_LLONG_MIN`, set *\*overflow* to ``1`` or ``-1``, respectively, + If the value of *obj* is greater than :const:`LLONG_MAX` or less than + :const:`LLONG_MIN`, set *\*overflow* to ``1`` or ``-1``, respectively, and return ``-1``; otherwise, set *\*overflow* to ``0``. If any other exception occurs set *\*overflow* to ``0`` and return ``-1`` as usual. @@ -304,7 +304,7 @@ distinguished from a number. Use :c:func:`PyErr_Occurred` to disambiguate. it to a :c:type:`PyLongObject`. If the value of *obj* is out of range for an :c:type:`unsigned long long`, - return the reduction of that value modulo ``PY_ULLONG_MAX + 1``. + return the reduction of that value modulo ``ULLONG_MAX + 1``. Returns ``(unsigned long long)-1`` on error. Use :c:func:`PyErr_Occurred` to disambiguate. diff --git a/Doc/c-api/sys.rst b/Doc/c-api/sys.rst index d3bbee23f50..c851ff66487 100644 --- a/Doc/c-api/sys.rst +++ b/Doc/c-api/sys.rst @@ -309,7 +309,7 @@ accessible to C code. They all work with the current interpreter thread's .. c:function:: int PySys_Audit(const char *event, const char *format, ...) - Raises an auditing event with any active hooks. Returns zero for success + Raise an auditing event with any active hooks. Return zero for success and non-zero with an exception set on failure. If any hooks have been added, *format* and other arguments will be used @@ -320,18 +320,31 @@ accessible to C code. They all work with the current interpreter thread's arguments to this function will be consumed, using it may cause reference leaks.) + Note that ``#`` format characters should always be treated as + ``Py_ssize_t``, regardless of whether ``PY_SSIZE_T_CLEAN`` was defined. + :func:`sys.audit` performs the same function from Python code. .. versionadded:: 3.8 + .. versionchanged:: 3.8.2 + + Require ``Py_ssize_t`` for ``#`` format characters. Previously, an + unavoidable deprecation warning was raised. + .. c:function:: int PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData) - Adds to the collection of active auditing hooks. Returns zero for success - and non-zero on failure. If the runtime has been initialized, also sets an + Append the callable *hook* to the list of active auditing hooks. + Return zero for success + and non-zero on failure. If the runtime has been initialized, also set an error on failure. Hooks added through this API are called for all interpreters created by the runtime. + The *userData* pointer is passed into the hook function. Since hook + functions may be called from different runtimes, this pointer should not + refer directly to Python state. + This function is safe to call before :c:func:`Py_Initialize`. When called after runtime initialization, existing audit hooks are notified and may silently abort the operation by raising an error subclassed from @@ -342,14 +355,10 @@ accessible to C code. They all work with the current interpreter thread's :c:type:`PyTupleObject`. The hook function is always called with the GIL held by the Python interpreter that raised the event. - The *userData* pointer is passed into the hook function. Since hook - functions may be called from different runtimes, this pointer should not - refer directly to Python state. - - See :pep:`578` for a detailed description of auditing. Functions in the - runtime and standard library that raise events include the details in each - function's documentation and listed in the :ref:`audit events table - `. + See :pep:`578` for a detailed description of auditing. Functions in the + runtime and standard library that raise events are listed in the + :ref:`audit events table `. + Details are in each function's documentation. .. audit-event:: sys.addaudithook "" c.PySys_AddAuditHook diff --git a/Doc/c-api/typeobj.rst b/Doc/c-api/typeobj.rst index b4ffd6b41c6..7b205c04495 100644 --- a/Doc/c-api/typeobj.rst +++ b/Doc/c-api/typeobj.rst @@ -955,7 +955,7 @@ and :c:type:`PyType_Type` effectively act as defaults.) The signature is the same as for :c:func:`PyObject_SetAttr`:: - PyObject *tp_setattro(PyObject *self, PyObject *attr, PyObject *value); + int tp_setattro(PyObject *self, PyObject *attr, PyObject *value); In addition, setting *value* to ``NULL`` to delete an attribute must be supported. It is usually convenient to set this field to diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index 2bf4a0f56bc..77f123cf1f2 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -197,11 +197,6 @@ access internal read-only data of Unicode objects: .. versionadded:: 3.3 -.. c:function:: int PyUnicode_ClearFreeList() - - Clear the free list. Return the total number of freed items. - - .. c:function:: Py_ssize_t PyUnicode_GET_SIZE(PyObject *o) Return the size of the deprecated :c:type:`Py_UNICODE` representation, in diff --git a/Doc/data/refcounts.dat b/Doc/data/refcounts.dat index cfed1bd5031..b55e972d536 100644 --- a/Doc/data/refcounts.dat +++ b/Doc/data/refcounts.dat @@ -3045,8 +3045,6 @@ Py_XINCREF:PyObject*:o:+1:if o is not NULL _PyImport_Fini:void::: -_PyImport_Init:void::: - _PyObject_New:PyObject*::+1: _PyObject_New:PyTypeObject*:type:0: diff --git a/Doc/distutils/apiref.rst b/Doc/distutils/apiref.rst index a42d2d3559f..80136b8a6bc 100644 --- a/Doc/distutils/apiref.rst +++ b/Doc/distutils/apiref.rst @@ -1545,7 +1545,7 @@ Python's own build procedures. ================================================= .. module:: distutils.text_file - :synopsis: provides the TextFile class, a simple interface to text files + :synopsis: Provides the TextFile class, a simple interface to text files This module provides the :class:`TextFile` class, which gives an interface to @@ -1684,7 +1684,7 @@ lines, and joining lines with backslashes. =================================================== .. module:: distutils.version - :synopsis: implements classes that represent module version numbers. + :synopsis: Implements classes that represent module version numbers. .. % todo @@ -1699,7 +1699,7 @@ lines, and joining lines with backslashes. =================================================================== .. module:: distutils.cmd - :synopsis: This module provides the abstract base class Command. This class + :synopsis: Provides the abstract base class :class:`~distutils.cmd.Command`. This class is subclassed by the modules in the distutils.command subpackage. @@ -1792,7 +1792,7 @@ Subclasses of :class:`Command` must define the following methods. ========================================================== .. module:: distutils.command - :synopsis: This subpackage contains one module for each standard Distutils command. + :synopsis: Contains one module for each standard Distutils command. .. % \subsubsection{Individual Distutils commands} @@ -2039,7 +2039,7 @@ This is described in more detail in :pep:`301`. =================================================================== .. module:: distutils.command.check - :synopsis: Check the metadata of a package + :synopsis: Check the meta-data of a package The ``check`` command performs some tests on the meta-data of a package. diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst index fa4b0a96455..c3ff3e607e7 100644 --- a/Doc/library/2to3.rst +++ b/Doc/library/2to3.rst @@ -456,7 +456,7 @@ and off individually. They are described here in more detail. ------------------------------- .. module:: lib2to3 - :synopsis: the 2to3 library + :synopsis: The 2to3 library .. moduleauthor:: Guido van Rossum .. moduleauthor:: Collin Winter diff --git a/Doc/library/array.rst b/Doc/library/array.rst index 2ae2a071262..c9a9b1dabb2 100644 --- a/Doc/library/array.rst +++ b/Doc/library/array.rst @@ -169,11 +169,6 @@ The following data items and methods are also supported: a.append(x)`` except that if there is a type error, the array is unchanged. -.. method:: array.fromstring() - - Deprecated alias for :meth:`frombytes`. - - .. method:: array.fromunicode(s) Extends this array with data from the given unicode string. The array must @@ -231,11 +226,6 @@ The following data items and methods are also supported: Convert the array to an ordinary list with the same items. -.. method:: array.tostring() - - Deprecated alias for :meth:`tobytes`. - - .. method:: array.tounicode() Convert the array to a unicode string. The array must be a type ``'u'`` array; diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst index b468f4235df..a7e0729b902 100644 --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -161,6 +161,19 @@ and classes for traversing abstract syntax trees: Added ``type_comments``, ``mode='func_type'`` and ``feature_version``. +.. function:: unparse(ast_obj) + + Unparse an :class:`ast.AST` object and generate a string with code + that would produce an equivalent :class:`ast.AST` object if parsed + back with :func:`ast.parse`. + + .. warning:: + The produced code string will not necesarily be equal to the original + code that generated the :class:`ast.AST` object. + + .. versionadded:: 3.9 + + .. function:: literal_eval(node_or_string) Safely evaluate an expression node or a string containing a Python literal or diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst index 240d814f13d..d9b1cf7a8d8 100644 --- a/Doc/library/asyncio-eventloop.rst +++ b/Doc/library/asyncio-eventloop.rst @@ -473,6 +473,21 @@ Opening network connections reuse_address=None, reuse_port=None, \ allow_broadcast=None, sock=None) + .. note:: + The parameter *reuse_address* is no longer supported, as using + :py:data:`~sockets.SO_REUSEADDR` poses a significant security concern for + UDP. Explicitly passing ``reuse_address=True`` will raise an exception. + + When multiple processes with differing UIDs assign sockets to an + indentical UDP socket address with ``SO_REUSEADDR``, incoming packets can + become randomly distributed among the sockets. + + For supported platforms, *reuse_port* can be used as a replacement for + similar functionality. With *reuse_port*, + :py:data:`~sockets.SO_REUSEPORT` is used instead, which specifically + prevents processes with differing UIDs from assigning sockets to the same + socket address. + Create a datagram connection. The socket family can be either :py:data:`~socket.AF_INET`, @@ -501,11 +516,6 @@ Opening network connections resolution. If given, these should all be integers from the corresponding :mod:`socket` module constants. - * *reuse_address* tells the kernel to reuse a local socket in - ``TIME_WAIT`` state, without waiting for its natural timeout to - expire. If not specified will automatically be set to ``True`` on - Unix. - * *reuse_port* tells the kernel to allow this endpoint to be bound to the same port as other existing endpoints are bound to, so long as they all set this flag when being created. This option is not supported on Windows @@ -527,6 +537,10 @@ Opening network connections The *family*, *proto*, *flags*, *reuse_address*, *reuse_port, *allow_broadcast*, and *sock* parameters were added. + .. versionchanged:: 3.8.1 + The *reuse_address* parameter is no longer supported due to security + concerns. + .. versionchanged:: 3.8 Added support for Windows. diff --git a/Doc/library/asyncio-protocol.rst b/Doc/library/asyncio-protocol.rst index ffac9018127..3079716f03e 100644 --- a/Doc/library/asyncio-protocol.rst +++ b/Doc/library/asyncio-protocol.rst @@ -588,9 +588,6 @@ Buffered Streaming Protocols ---------------------------- .. versionadded:: 3.7 - **Important:** this has been added to asyncio in Python 3.7 - *on a provisional basis*! This is as an experimental API that - might be changed or removed completely in Python 3.8. Buffered Protocols can be used with any event loop method that supports `Streaming Protocols`_. diff --git a/Doc/library/audit_events.rst b/Doc/library/audit_events.rst index c23b9c61832..3c68a1515b3 100644 --- a/Doc/library/audit_events.rst +++ b/Doc/library/audit_events.rst @@ -7,7 +7,7 @@ Audit events table This table contains all events raised by :func:`sys.audit` or :c:func:`PySys_Audit` calls throughout the CPython runtime and the -standard library. +standard library. These calls were added in 3.8.0 or later. See :func:`sys.addaudithook` and :c:func:`PySys_AddAuditHook` for information on handling these events. diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst index b1e1b25691d..2bd25cc4362 100644 --- a/Doc/library/datetime.rst +++ b/Doc/library/datetime.rst @@ -881,7 +881,7 @@ Other constructors, all class methods: Because naive ``datetime`` objects are treated by many ``datetime`` methods as local times, it is preferred to use aware datetimes to represent times in UTC. As such, the recommended way to create an object representing the - current time in UTC by calling ``datetime.now(timezone.utc)``. + current time in UTC is by calling ``datetime.now(timezone.utc)``. .. classmethod:: datetime.fromtimestamp(timestamp, tz=None) @@ -942,7 +942,7 @@ Other constructors, all class methods: Because naive ``datetime`` objects are treated by many ``datetime`` methods as local times, it is preferred to use aware datetimes to represent times in UTC. As such, the recommended way to create an object representing a - specific timestamp in UTC by calling + specific timestamp in UTC is by calling ``datetime.fromtimestamp(timestamp, tz=timezone.utc)``. .. versionchanged:: 3.3 @@ -2362,7 +2362,7 @@ requires, and these work on all platforms with a standard C implementation. | | string if the object is | +063415, | | | | naive). | -030712.345216 | | +-----------+--------------------------------+------------------------+-------+ -| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | | +| ``%Z`` | Time zone name (empty string | (empty), UTC, GMT | \(6) | | | if the object is naive). | | | +-----------+--------------------------------+------------------------+-------+ | ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) | @@ -2533,9 +2533,18 @@ Notes: In addition, providing ``'Z'`` is identical to ``'+00:00'``. ``%Z`` - If :meth:`tzname` returns ``None``, ``%Z`` is replaced by an empty - string. Otherwise ``%Z`` is replaced by the returned value, which must - be a string. + In :meth:`strftime`, ``%Z`` is replaced by an empty string if + :meth:`tzname` returns ``None``; otherwise ``%Z`` is replaced by the + returned value, which must be a string. + + :meth:`strptime` only accepts certain values for ``%Z``: + + 1. any value in ``time.tzname`` for your machine's locale + 2. the hard-coded values ``UTC`` and ``GMT`` + + So someone living in Japan may have ``JST``, ``UTC``, and ``GMT`` as + valid values, but probably not ``EST``. It will raise ``ValueError`` for + invalid values. .. versionchanged:: 3.2 When the ``%z`` directive is provided to the :meth:`strptime` method, an diff --git a/Doc/library/dis.rst b/Doc/library/dis.rst index b5243d0f364..1f540d95078 100644 --- a/Doc/library/dis.rst +++ b/Doc/library/dis.rst @@ -706,50 +706,21 @@ iterations of the loop. popped values are used to restore the exception state. -.. opcode:: POP_FINALLY (preserve_tos) +.. opcode:: RERAISE - Cleans up the value stack and the block stack. If *preserve_tos* is not - ``0`` TOS first is popped from the stack and pushed on the stack after - performing other stack operations: + Re-raises the exception currently on top of the stack. - * If TOS is ``NULL`` or an integer (pushed by :opcode:`BEGIN_FINALLY` - or :opcode:`CALL_FINALLY`) it is popped from the stack. - * If TOS is an exception type (pushed when an exception has been raised) - 6 values are popped from the stack, the last three popped values are - used to restore the exception state. An exception handler block is - removed from the block stack. - - It is similar to :opcode:`END_FINALLY`, but doesn't change the bytecode - counter nor raise an exception. Used for implementing :keyword:`break`, - :keyword:`continue` and :keyword:`return` in the :keyword:`finally` block. - - .. versionadded:: 3.8 + .. versionadded:: 3.9 -.. opcode:: BEGIN_FINALLY +.. opcode:: WITH_EXCEPT_START - Pushes ``NULL`` onto the stack for using it in :opcode:`END_FINALLY`, - :opcode:`POP_FINALLY`, :opcode:`WITH_CLEANUP_START` and - :opcode:`WITH_CLEANUP_FINISH`. Starts the :keyword:`finally` block. + Calls the function in position 7 on the stack with the top three + items on the stack as arguments. + Used to implement the call ``context_manager.__exit__(*exc_info())`` when an exception + has occurred in a :keyword:`with` statement. - .. versionadded:: 3.8 - - -.. opcode:: END_FINALLY - - Terminates a :keyword:`finally` clause. The interpreter recalls whether the - exception has to be re-raised or execution has to be continued depending on - the value of TOS. - - * If TOS is ``NULL`` (pushed by :opcode:`BEGIN_FINALLY`) continue from - the next instruction. TOS is popped. - * If TOS is an integer (pushed by :opcode:`CALL_FINALLY`), sets the - bytecode counter to TOS. TOS is popped. - * If TOS is an exception type (pushed when an exception has been raised) - 6 values are popped from the stack, the first three popped values are - used to re-raise the exception and the last three popped values are used - to restore the exception state. An exception handler block is removed - from the block stack. + .. versionadded:: 3.9 .. opcode:: LOAD_ASSERTION_ERROR @@ -780,35 +751,6 @@ iterations of the loop. .. versionadded:: 3.2 -.. opcode:: WITH_CLEANUP_START - - Starts cleaning up the stack when a :keyword:`with` statement block exits. - - At the top of the stack are either ``NULL`` (pushed by - :opcode:`BEGIN_FINALLY`) or 6 values pushed if an exception has been - raised in the with block. Below is the context manager's - :meth:`~object.__exit__` or :meth:`~object.__aexit__` bound method. - - If TOS is ``NULL``, calls ``SECOND(None, None, None)``, - removes the function from the stack, leaving TOS, and pushes ``None`` - to the stack. Otherwise calls ``SEVENTH(TOP, SECOND, THIRD)``, - shifts the bottom 3 values of the stack down, replaces the empty spot - with ``NULL`` and pushes TOS. Finally pushes the result of the call. - - -.. opcode:: WITH_CLEANUP_FINISH - - Finishes cleaning up the stack when a :keyword:`with` statement block exits. - - TOS is result of ``__exit__()`` or ``__aexit__()`` function call pushed - by :opcode:`WITH_CLEANUP_START`. SECOND is ``None`` or an exception type - (pushed when an exception has been raised). - - Pops two values from the stack. If SECOND is not None and TOS is true - unwinds the EXCEPT_HANDLER block which was created when the exception - was caught and pushes ``NULL`` to the stack. - - All of the following opcodes use their arguments. .. opcode:: STORE_NAME (namei) @@ -1060,15 +1002,6 @@ All of the following opcodes use their arguments. stack. *delta* points to the finally block or the first except block. -.. opcode:: CALL_FINALLY (delta) - - Pushes the address of the next instruction onto the stack and increments - bytecode counter by *delta*. Used for calling the finally block as a - "subroutine". - - .. versionadded:: 3.8 - - .. opcode:: LOAD_FAST (var_num) Pushes a reference to the local ``co_varnames[var_num]`` onto the stack. diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst index 0bd248c22b1..273b5830e42 100644 --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -199,7 +199,8 @@ Format Paragraph Strip trailing whitespace Remove trailing space and other whitespace characters after the last non-whitespace character of a line by applying str.rstrip to each line, - including lines within multiline strings. + including lines within multiline strings. Except for Shell windows, + remove extra newlines at the end of the file. .. index:: single: Run script diff --git a/Doc/library/json.rst b/Doc/library/json.rst index 23e39e95f78..cfe68c9dd91 100644 --- a/Doc/library/json.rst +++ b/Doc/library/json.rst @@ -732,12 +732,24 @@ Command line options .. versionadded:: 3.5 +.. cmdoption:: --no-ensure-ascii + + Disable escaping of non-ascii characters, see :func:`json.dumps` for more information. + + .. versionadded:: 3.9 + .. cmdoption:: --json-lines Parse every input line as separate JSON object. .. versionadded:: 3.8 +.. cmdoption:: --indent, --tab, --no-indent, --compact + + Mutually exclusive options for whitespace control + + .. versionadded:: 3.9 + .. cmdoption:: -h, --help Show the help message. diff --git a/Doc/library/linecache.rst b/Doc/library/linecache.rst index 9278fc0641f..dd9f4ee45ba 100644 --- a/Doc/library/linecache.rst +++ b/Doc/library/linecache.rst @@ -2,7 +2,7 @@ ================================================ .. module:: linecache - :synopsis: This module provides random access to individual lines from text files. + :synopsis: Provides random access to individual lines from text files. .. sectionauthor:: Moshe Zadka diff --git a/Doc/library/multiprocessing.rst b/Doc/library/multiprocessing.rst index d8182feab96..3c7b5cc1262 100644 --- a/Doc/library/multiprocessing.rst +++ b/Doc/library/multiprocessing.rst @@ -2169,7 +2169,8 @@ with the :class:`Pool` class. .. method:: map(func, iterable[, chunksize]) A parallel equivalent of the :func:`map` built-in function (it supports only - one *iterable* argument though). It blocks until the result is ready. + one *iterable* argument though, for multiple iterables see :meth:`starmap`). + It blocks until the result is ready. This method chops the iterable into a number of chunks which it submits to the process pool as separate tasks. The (approximate) size of these diff --git a/Doc/library/random.rst b/Doc/library/random.rst index 1bd1856937b..933da3f8fcf 100644 --- a/Doc/library/random.rst +++ b/Doc/library/random.rst @@ -165,8 +165,9 @@ Functions for sequences The *weights* or *cum_weights* can use any numeric type that interoperates with the :class:`float` values returned by :func:`random` (that includes - integers, floats, and fractions but excludes decimals). Weights are - assumed to be non-negative. + integers, floats, and fractions but excludes decimals). Behavior is + undefined if any weight is negative. A :exc:`ValueError` is raised if all + weights are zero. For a given seed, the :func:`choices` function with equal weighting typically produces a different sequence than repeated calls to @@ -177,6 +178,9 @@ Functions for sequences .. versionadded:: 3.6 + .. versionchanged:: 3.9 + Raises a :exc:`ValueError` if all weights are zero. + .. function:: shuffle(x[, random]) diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst index 62552bcbe24..2d7ca33f292 100755 --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -1411,9 +1411,9 @@ to sockets. fds = array.array("i") # Array of ints msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize)) for cmsg_level, cmsg_type, cmsg_data in ancdata: - if (cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS): + if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS: # Append data, ignoring any truncated integers at the end. - fds.fromstring(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) + fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) return msg, list(fds) .. availability:: most Unix platforms, possibly others. diff --git a/Doc/library/ssl.rst b/Doc/library/ssl.rst index e2c75bbd0a0..3e5fcab22d0 100644 --- a/Doc/library/ssl.rst +++ b/Doc/library/ssl.rst @@ -1256,6 +1256,9 @@ SSL sockets also have the following additional methods and attributes: The returned dictionary includes additional X509v3 extension items such as ``crlDistributionPoints``, ``caIssuers`` and ``OCSP`` URIs. + .. versionchanged:: 3.9 + IPv6 address strings no longer have a trailing new line. + .. method:: SSLSocket.cipher() Returns a three-value tuple containing the name of the cipher being used, the diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst index a790ed81a56..4c7239c1895 100644 --- a/Doc/library/statistics.rst +++ b/Doc/library/statistics.rst @@ -2,7 +2,7 @@ ======================================================= .. module:: statistics - :synopsis: mathematical statistics functions + :synopsis: Mathematical statistics functions .. moduleauthor:: Steven D'Aprano .. sectionauthor:: Steven D'Aprano diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst index 4b0bcde4a8b..a824fb95e8e 100644 --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -25,7 +25,7 @@ always available. .. function:: addaudithook(hook) - Adds the callable *hook* to the collection of active auditing hooks for the + Append the callable *hook* to the list of active auditing hooks for the current interpreter. When an auditing event is raised through the :func:`sys.audit` function, each @@ -35,14 +35,19 @@ always available. .. audit-event:: sys.addaudithook "" sys.addaudithook - Raises a auditing event ``sys.addaudithook`` with no arguments. If any - existing hooks raise an exception derived from :class:`Exception`, the + Raise an auditing event ``sys.addaudithook`` with no arguments. If any + existing hooks raise an exception derived from :class:`RuntimeError`, the new hook will not be added and the exception suppressed. As a result, callers cannot assume that their hook has been added unless they control all existing hooks. .. versionadded:: 3.8 + .. versionchanged:: 3.8.1 + + Exceptions derived from :class:`Exception` but not :class:`RuntimeError` + are no longer suppressed. + .. impl-detail:: When tracing is enabled (see :func:`settrace`), Python hooks are only @@ -74,7 +79,7 @@ always available. .. index:: single: auditing - Raises an auditing event with any active hooks. The event name is a string + Raise an auditing event with any active hooks. The event name is a string identifying the event and its associated schema, which is the number and types of arguments. The schema for a given event is considered public and stable API and should not be modified between releases. @@ -308,6 +313,15 @@ always available. before the program exits. The handling of such top-level exceptions can be customized by assigning another three-argument function to ``sys.excepthook``. + .. audit-event:: sys.excepthook hook,type,value,traceback sys.excepthook + + Raise an auditing event ``sys.excepthook`` with arguments ``hook``, + ``type``, ``value``, ``traceback`` when an uncaught exception occurs. + If no hook has been set, ``hook`` may be ``None``. If any hook raises + an exception derived from :class:`RuntimeError` the call to the hook will + be suppressed. Otherwise, the audit hook exception will be reported as + unraisable and ``sys.excepthook`` will be called. + .. seealso:: The :func:`sys.unraisablehook` function handles unraisable exceptions @@ -1540,6 +1554,13 @@ always available. See also :func:`excepthook` which handles uncaught exceptions. + .. audit-event:: sys.unraisablehook hook,unraisable sys.unraisablehook + + Raise an auditing event ``sys.unraisablehook`` with arguments + ``hook``, ``unraisable`` when an exception that cannot be handled occurs. + The ``unraisable`` object is the same as what will be passed to the hook. + If no hook has been set, ``hook`` may be ``None``. + .. versionadded:: 3.8 .. data:: version diff --git a/Doc/library/tempfile.rst b/Doc/library/tempfile.rst index fff7a7a03eb..a59817c1039 100644 --- a/Doc/library/tempfile.rst +++ b/Doc/library/tempfile.rst @@ -105,8 +105,8 @@ The module defines the following user-callable items: causes the file to roll over to an on-disk file regardless of its size. The returned object is a file-like object whose :attr:`_file` attribute - is either an :class:`io.BytesIO` or :class:`io.StringIO` object (depending on - whether binary or text *mode* was specified) or a true file + is either an :class:`io.BytesIO` or :class:`io.TextIOWrapper` object + (depending on whether binary or text *mode* was specified) or a true file object, depending on whether :func:`rollover` has been called. This file-like object can be used in a :keyword:`with` statement, just like a normal file. diff --git a/Doc/library/test.rst b/Doc/library/test.rst index 4a61566c223..73b3fe5cf06 100644 --- a/Doc/library/test.rst +++ b/Doc/library/test.rst @@ -686,13 +686,6 @@ The :mod:`test.support` module defines the following functions: ``sys.stdout`` if it's not set. -.. function:: strip_python_strerr(stderr) - - Strip the *stderr* of a Python process from potential debug output - emitted by the interpreter. This will typically be run on the result of - :meth:`subprocess.Popen.communicate`. - - .. function:: args_from_interpreter_flags() Return a list of command line arguments reproducing the current settings @@ -1499,6 +1492,9 @@ script execution tests. in a subprocess. The values can include ``__isolated``, ``__cleanenv``, ``__cwd``, and ``TERM``. + .. versionchanged:: 3.9 + The function no longer strips whitespaces from *stderr*. + .. function:: assert_python_ok(*args, **env_vars) @@ -1512,6 +1508,9 @@ script execution tests. Python is started in isolated mode (command line option ``-I``), except if the ``__isolated`` keyword is set to ``False``. + .. versionchanged:: 3.9 + The function no longer strips whitespaces from *stderr*. + .. function:: assert_python_failure(*args, **env_vars) @@ -1521,6 +1520,9 @@ script execution tests. See :func:`assert_python_ok` for more options. + .. versionchanged:: 3.9 + The function no longer strips whitespaces from *stderr*. + .. function:: spawn_python(*args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw) diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst index 9a68491fbd5..96989bdd525 100644 --- a/Doc/library/threading.rst +++ b/Doc/library/threading.rst @@ -496,6 +496,10 @@ All methods are executed atomically. There is no return value. + .. method:: locked() + Return true if the lock is acquired. + + .. _rlock-objects: diff --git a/Doc/library/time.rst b/Doc/library/time.rst index 65ab679669e..e628ac44e80 100644 --- a/Doc/library/time.rst +++ b/Doc/library/time.rst @@ -42,17 +42,12 @@ An explanation of some terminology and conventions is in order. library; for 32-bit systems, it is typically in 2038. .. index:: - single: Year 2000 - single: Y2K + single: 2-digit years -.. _time-y2kissues: - -* **Year 2000 (Y2K) issues**: Python depends on the platform's C library, which - generally doesn't have year 2000 issues, since all dates and times are - represented internally as seconds since the epoch. Function :func:`strptime` - can parse 2-digit years when given ``%y`` format code. When 2-digit years are - parsed, they are converted according to the POSIX and ISO C standards: values - 69--99 are mapped to 1969--1999, and values 0--68 are mapped to 2000--2068. +* Function :func:`strptime` can parse 2-digit years when given ``%y`` format + code. When 2-digit years are parsed, they are converted according to the POSIX + and ISO C standards: values 69--99 are mapped to 1969--1999, and values 0--68 + are mapped to 2000--2068. .. index:: single: UTC diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst index b29fb3ebb60..5494c0c878b 100644 --- a/Doc/library/venv.rst +++ b/Doc/library/venv.rst @@ -132,7 +132,7 @@ creation according to their needs, the :class:`EnvBuilder` class. .. versionadded:: 3.6 Added the ``prompt`` parameter - .. versionadded:: 3.8 + .. versionadded:: 3.9 Added the ``upgrade_deps`` parameter Creators of third-party virtual environment tools will be free to use the @@ -197,7 +197,7 @@ creation according to their needs, the :class:`EnvBuilder` class. ``setuptools``) in the environment. This is done by shelling out to the ``pip`` executable in the environment. - .. versionadded:: 3.8 + .. versionadded:: 3.9 .. method:: post_setup(context) diff --git a/Doc/library/winreg.rst b/Doc/library/winreg.rst index 5e810680b26..dccb7db27e9 100644 --- a/Doc/library/winreg.rst +++ b/Doc/library/winreg.rst @@ -53,6 +53,8 @@ This module offers the following functions: The return value is the handle of the opened key. If the function fails, an :exc:`OSError` exception is raised. + .. audit-event:: winreg.ConnectRegistry computer_name,key winreg.ConnectRegistry + .. versionchanged:: 3.3 See :ref:`above `. @@ -75,6 +77,10 @@ This module offers the following functions: The return value is the handle of the opened key. If the function fails, an :exc:`OSError` exception is raised. + .. audit-event:: winreg.CreateKey key,sub_key,access winreg.CreateKey + + .. audit-event:: winreg.OpenKey/result key winreg.CreateKey + .. versionchanged:: 3.3 See :ref:`above `. @@ -103,6 +109,10 @@ This module offers the following functions: The return value is the handle of the opened key. If the function fails, an :exc:`OSError` exception is raised. + .. audit-event:: winreg.CreateKey key,sub_key,access winreg.CreateKeyEx + + .. audit-event:: winreg.OpenKey/result key winreg.CreateKeyEx + .. versionadded:: 3.2 .. versionchanged:: 3.3 @@ -124,6 +134,8 @@ This module offers the following functions: If the method succeeds, the entire key, including all of its values, is removed. If the method fails, an :exc:`OSError` exception is raised. + .. audit-event:: winreg.DeleteKey key,sub_key,access winreg.DeleteKey + .. versionchanged:: 3.3 See :ref:`above `. @@ -158,6 +170,8 @@ This module offers the following functions: On unsupported Windows versions, :exc:`NotImplementedError` is raised. + .. audit-event:: winreg.DeleteKey key,sub_key,access winreg.DeleteKeyEx + .. versionadded:: 3.2 .. versionchanged:: 3.3 @@ -173,6 +187,8 @@ This module offers the following functions: *value* is a string that identifies the value to remove. + .. audit-event:: winreg.DeleteValue key,value winreg.DeleteValue + .. function:: EnumKey(key, index) @@ -187,6 +203,8 @@ This module offers the following functions: typically called repeatedly until an :exc:`OSError` exception is raised, indicating, no more values are available. + .. audit-event:: winreg.EnumKey key,index winreg.EnumKey + .. versionchanged:: 3.3 See :ref:`above `. @@ -220,6 +238,8 @@ This module offers the following functions: | | :meth:`SetValueEx`) | +-------+--------------------------------------------+ + .. audit-event:: winreg.EnumValue key,index winreg.EnumValue + .. versionchanged:: 3.3 See :ref:`above `. @@ -235,6 +255,8 @@ This module offers the following functions: >>> ExpandEnvironmentStrings('%windir%') 'C:\\Windows' + .. audit-event:: winreg.ExpandEnvironmentStrings str winreg.ExpandEnvironmentStrings + .. function:: FlushKey(key) @@ -279,6 +301,8 @@ This module offers the following functions: If *key* is a handle returned by :func:`ConnectRegistry`, then the path specified in *file_name* is relative to the remote computer. + .. audit-event:: winreg.LoadKey key,sub_key,file_name winreg.LoadKey + .. function:: OpenKey(key, sub_key, reserved=0, access=KEY_READ) OpenKeyEx(key, sub_key, reserved=0, access=KEY_READ) @@ -300,6 +324,10 @@ This module offers the following functions: If the function fails, :exc:`OSError` is raised. + .. audit-event:: winreg.OpenKey key,sub_key,access winreg.OpenKey + + .. audit-event:: winreg.OpenKey/result key winreg.OpenKey + .. versionchanged:: 3.2 Allow the use of named arguments. @@ -330,6 +358,8 @@ This module offers the following functions: | | nanoseconds since Jan 1, 1601. | +-------+---------------------------------------------+ + .. audit-event:: winreg.QueryInfoKey key winreg.QueryInfoKey + .. function:: QueryValue(key, sub_key) @@ -347,6 +377,8 @@ This module offers the following functions: underlying API call doesn't return the type, so always use :func:`QueryValueEx` if possible. + .. audit-event:: winreg.QueryValue key,sub_key,value_name winreg.QueryValue + .. function:: QueryValueEx(key, value_name) @@ -370,6 +402,8 @@ This module offers the following functions: | | :meth:`SetValueEx`) | +-------+-----------------------------------------+ + .. audit-event:: winreg.QueryValue key,sub_key,value_name winreg.QueryValueEx + .. function:: SaveKey(key, file_name) @@ -393,6 +427,8 @@ This module offers the following functions: This function passes ``NULL`` for *security_attributes* to the API. + .. audit-event:: winreg.SaveKey key,file_name winreg.SaveKey + .. function:: SetValue(key, sub_key, type, value) @@ -419,6 +455,8 @@ This module offers the following functions: The key identified by the *key* parameter must have been opened with :const:`KEY_SET_VALUE` access. + .. audit-event:: winreg.SetValue key,sub_key,type,value winreg.SetValue + .. function:: SetValueEx(key, value_name, reserved, type, value) @@ -447,6 +485,8 @@ This module offers the following functions: bytes) should be stored as files with the filenames stored in the configuration registry. This helps the registry perform efficiently. + .. audit-event:: winreg.SetValue key,sub_key,type,value winreg.SetValueEx + .. function:: DisableReflectionKey(key) @@ -463,6 +503,8 @@ This module offers the following functions: effect. Disabling reflection for a key does not affect reflection of any subkeys. + .. audit-event:: winreg.DisableReflectionKey key winreg.DisableReflectionKey + .. function:: EnableReflectionKey(key) @@ -476,6 +518,8 @@ This module offers the following functions: Restoring reflection for a key does not affect reflection of any subkeys. + .. audit-event:: winreg.EnableReflectionKey key winreg.EnableReflectionKey + .. function:: QueryReflectionKey(key) @@ -489,6 +533,8 @@ This module offers the following functions: Will generally raise :exc:`NotImplementedError` if executed on a 32-bit operating system. + .. audit-event:: winreg.QueryReflectionKey key winreg.QueryReflectionKey + .. _constants: @@ -741,6 +787,9 @@ integer handle, and also disconnect the Windows handle from the handle object. handle is not closed. You would call this function when you need the underlying Win32 handle to exist beyond the lifetime of the handle object. + .. audit-event:: winreg.PyHKEY.Detach key winreg.PyHKEY.Detach + + .. method:: PyHKEY.__enter__() PyHKEY.__exit__(\*exc_info) diff --git a/Doc/library/zipfile.rst b/Doc/library/zipfile.rst index 18d2e9a60a7..e8a2530fb8c 100644 --- a/Doc/library/zipfile.rst +++ b/Doc/library/zipfile.rst @@ -494,7 +494,7 @@ Path objects are traversable using the ``/`` operator. Invoke :meth:`ZipFile.open` on the current path. Accepts the same arguments as :meth:`ZipFile.open`. -.. method:: Path.listdir() +.. method:: Path.iterdir() Enumerate the children of the current directory. diff --git a/Doc/library/zipimport.rst b/Doc/library/zipimport.rst index 2138697ff06..8ac3fb16bdb 100644 --- a/Doc/library/zipimport.rst +++ b/Doc/library/zipimport.rst @@ -2,7 +2,7 @@ ===================================================== .. module:: zipimport - :synopsis: support for importing Python modules from ZIP archives. + :synopsis: Support for importing Python modules from ZIP archives. .. moduleauthor:: Just van Rossum diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst index 76b7035ced9..b22ed92ec96 100644 --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1655,8 +1655,22 @@ class' :attr:`~object.__dict__`. Called at the time the owning class *owner* is created. The descriptor has been assigned to *name*. - .. versionadded:: 3.6 + .. note:: + :meth:`__set_name__` is only called implicitly as part of the + :class:`type` constructor, so it will need to be called explicitly with + the appropriate parameters when a descriptor is added to a class after + initial creation:: + + class A: + pass + descr = custom_descriptor() + A.attr = descr + descr.__set_name__(A, 'attr') + + See :ref:`class-object-creation` for more details. + + .. versionadded:: 3.6 The attribute :attr:`__objclass__` is interpreted by the :mod:`inspect` module as specifying the class where this object was defined (setting this diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv index 7615f24e6cf..5cdfd40f5b0 100644 --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -201,7 +201,7 @@ library/readline,,:bind,"python:bind ^I rl_complete" library/smtplib,,:port,method must support that as well as a regular host:port library/socket,,::,'5aef:2b::8' library/socket,,:can,"return (can_id, can_dlc, data[:can_dlc])" -library/socket,,:len,fds.fromstring(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) +library/socket,,:len,fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)]) library/sqlite3,,:age,"cur.execute(""select * from people where name_last=:who and age=:age"", {""who"": who, ""age"": age})" library/sqlite3,,:memory, library/sqlite3,,:who,"cur.execute(""select * from people where name_last=:who and age=:age"", {""who"": who, ""age"": age})" diff --git a/Doc/using/venv-create.inc b/Doc/using/venv-create.inc index cf5af437d6a..6c6617dc158 100644 --- a/Doc/using/venv-create.inc +++ b/Doc/using/venv-create.inc @@ -104,7 +104,7 @@ directory containing the virtual environment): +=============+=================+=========================================+ | POSIX | bash/zsh | $ source /bin/activate | +-------------+-----------------+-----------------------------------------+ -| | fish | $ . /bin/activate.fish | +| | fish | $ source /bin/activate.fish | +-------------+-----------------+-----------------------------------------+ | | csh/tcsh | $ source /bin/activate.csh | +-------------+-----------------+-----------------------------------------+ diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst index 281173edb89..7cf49bfbb93 100644 --- a/Doc/whatsnew/3.9.rst +++ b/Doc/whatsnew/3.9.rst @@ -121,6 +121,11 @@ Added the *indent* option to :func:`~ast.dump` which allows it to produce a multiline indented output. (Contributed by Serhiy Storchaka in :issue:`37995`.) +Added :func:`ast.unparse` as a function in the :mod:`ast` module that can +be used to unparse an :class:`ast.AST` object and produce a string with code +that would produce an equivalent :class:`ast.AST` object when parsed. +(Contributed by Pablo Galindo and Batuhan Taskaya in :issue:`38870`.) + asyncio ------- @@ -179,8 +184,8 @@ case), and one used ``__VENV_NAME__`` instead. pathlib ------- -Added :meth:`~pathlib.Path.readlink()` which acts similar to -:func:`~os.readlink`. +Added :meth:`pathlib.Path.readlink()` which acts similarly to +:func:`os.readlink`. (Contributed by Girts Folkmanis in :issue:`30618`) pprint @@ -235,6 +240,10 @@ Build and C API Changes functions: the free lists of bound method objects have been removed. (Contributed by Inada Naoki and Victor Stinner in :issue:`37340`.) +* Remove ``PyUnicode_ClearFreeList()`` function: the Unicode free list has been + removed in Python 3.3. + (Contributed by Victor Stinner in :issue:`38896`.) + Deprecated ========== @@ -270,6 +279,11 @@ Deprecated Removed ======= +* :class:`array.array`: ``tostring()`` and ``fromstring()`` methods have been + removed. They were aliases to ``tobytes()`` and ``frombytes()``, deprecated + since Python 3.2. + (Contributed by Victor Stinner in :issue:`38916`.) + * The abstract base classes in :mod:`collections.abc` no longer are exposed in the regular :mod:`collections` module. This will help create a clearer distinction between the concrete classes and the abstract diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h index 6c8d2ae041e..d1792575c97 100644 --- a/Include/cpython/pystate.h +++ b/Include/cpython/pystate.h @@ -147,7 +147,6 @@ struct _ts { The caller must hold the GIL.*/ PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_Get(void); -PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*); PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *); /* Similar to PyThreadState_Get(), but don't issue a fatal error diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h index c837bcdbc03..4e4bbc2bed0 100644 --- a/Include/internal/pycore_pylifecycle.h +++ b/Include/internal/pycore_pylifecycle.h @@ -40,11 +40,9 @@ extern PyObject * _PyBuiltin_Init(PyThreadState *tstate); extern PyStatus _PySys_Create( PyThreadState *tstate, PyObject **sysmod_p); -extern PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict); extern PyStatus _PySys_ReadPreinitWarnOptions(PyWideStringList *options); extern PyStatus _PySys_ReadPreinitXOptions(PyConfig *config); extern int _PySys_InitMain(PyThreadState *tstate); -extern PyStatus _PyImport_Init(PyThreadState *tstate); extern PyStatus _PyExc_Init(void); extern PyStatus _PyErr_Init(void); extern PyStatus _PyBuiltins_AddExceptions(PyObject * bltinmod); @@ -77,7 +75,7 @@ extern void _PyImport_Fini2(void); extern void _PyGC_Fini(PyThreadState *tstate); extern void _PyType_Fini(void); extern void _Py_HashRandomization_Fini(void); -extern void _PyUnicode_Fini(void); +extern void _PyUnicode_Fini(PyThreadState *tstate); extern void _PyLong_Fini(void); extern void _PyFaulthandler_Fini(void); extern void _PyHash_Fini(void); diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h index 936e9cbc65f..aa2103f07c7 100644 --- a/Include/internal/pycore_pystate.h +++ b/Include/internal/pycore_pystate.h @@ -324,6 +324,12 @@ extern void _PyInterpreterState_ClearModules(PyInterpreterState *interp); PyAPI_FUNC(void) _PyGILState_Reinit(_PyRuntimeState *runtime); + +PyAPI_FUNC(int) _PyState_AddModule( + PyThreadState *tstate, + PyObject* module, + struct PyModuleDef* def); + #ifdef __cplusplus } #endif diff --git a/Include/opcode.h b/Include/opcode.h index 95d56014860..712664224dc 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -30,10 +30,11 @@ extern "C" { #define BINARY_TRUE_DIVIDE 27 #define INPLACE_FLOOR_DIVIDE 28 #define INPLACE_TRUE_DIVIDE 29 +#define RERAISE 48 +#define WITH_EXCEPT_START 49 #define GET_AITER 50 #define GET_ANEXT 51 #define BEFORE_ASYNC_WITH 52 -#define BEGIN_FINALLY 53 #define END_ASYNC_FOR 54 #define INPLACE_ADD 55 #define INPLACE_SUBTRACT 56 @@ -59,14 +60,11 @@ extern "C" { #define INPLACE_AND 77 #define INPLACE_XOR 78 #define INPLACE_OR 79 -#define WITH_CLEANUP_START 81 -#define WITH_CLEANUP_FINISH 82 #define RETURN_VALUE 83 #define IMPORT_STAR 84 #define SETUP_ANNOTATIONS 85 #define YIELD_VALUE 86 #define POP_BLOCK 87 -#define END_FINALLY 88 #define POP_EXCEPT 89 #define HAVE_ARGUMENT 90 #define STORE_NAME 90 @@ -127,8 +125,6 @@ extern "C" { #define BUILD_TUPLE_UNPACK_WITH_CALL 158 #define LOAD_METHOD 160 #define CALL_METHOD 161 -#define CALL_FINALLY 162 -#define POP_FINALLY 163 /* EXCEPT_HANDLER is a special, implicit block type which is created when entering an except handler. It is not an opcode but we define it here diff --git a/Include/pythread.h b/Include/pythread.h index f22e8c42c50..569d6964899 100644 --- a/Include/pythread.h +++ b/Include/pythread.h @@ -51,16 +51,16 @@ PyAPI_FUNC(int) PyThread_acquire_lock(PyThread_type_lock, int); #if defined(_POSIX_THREADS) /* PyThread_acquire_lock_timed() uses _PyTime_FromNanoseconds(us * 1000), convert microseconds to nanoseconds. */ -# define PY_TIMEOUT_MAX (PY_LLONG_MAX / 1000) +# define PY_TIMEOUT_MAX (LLONG_MAX / 1000) #elif defined (NT_THREADS) /* In the NT API, the timeout is a DWORD and is expressed in milliseconds */ -# if 0xFFFFFFFFLL * 1000 < PY_LLONG_MAX +# if 0xFFFFFFFFLL * 1000 < LLONG_MAX # define PY_TIMEOUT_MAX (0xFFFFFFFFLL * 1000) # else -# define PY_TIMEOUT_MAX PY_LLONG_MAX +# define PY_TIMEOUT_MAX LLONG_MAX # endif #else -# define PY_TIMEOUT_MAX PY_LLONG_MAX +# define PY_TIMEOUT_MAX LLONG_MAX #endif diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h index 97d8cd12f6d..4dea4942181 100644 --- a/Include/unicodeobject.h +++ b/Include/unicodeobject.h @@ -328,17 +328,6 @@ PyAPI_FUNC(wchar_t*) PyUnicode_AsWideCharString( PyAPI_FUNC(PyObject*) PyUnicode_FromOrdinal(int ordinal); -/* --- Free-list management ----------------------------------------------- */ - -/* Clear the free list used by the Unicode implementation. - - This can be used to release memory used for objects on the free - list back to the Python memory allocator. - -*/ - -PyAPI_FUNC(int) PyUnicode_ClearFreeList(void); - /* === Builtin Codecs ===================================================== Many of these APIs take two arguments encoding and errors. These diff --git a/Lib/argparse.py b/Lib/argparse.py index 5a8eff2f4cc..5d3ce2ad709 100644 --- a/Lib/argparse.py +++ b/Lib/argparse.py @@ -87,7 +87,6 @@ __all__ = [ import os as _os import re as _re -import shutil as _shutil import sys as _sys from gettext import gettext as _, ngettext @@ -167,7 +166,8 @@ class HelpFormatter(object): # default setting for width if width is None: - width = _shutil.get_terminal_size().columns + import shutil + width = shutil.get_terminal_size().columns width -= 2 self._prog = prog @@ -264,7 +264,7 @@ class HelpFormatter(object): invocations.append(get_invocation(subaction)) # update the maximum item length - invocation_length = max([len(s) for s in invocations]) + invocation_length = max(map(len, invocations)) action_length = invocation_length + self._current_indent self._action_max_length = max(self._action_max_length, action_length) diff --git a/Lib/ast.py b/Lib/ast.py index 720dd48a761..77eb24971ed 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -24,6 +24,7 @@ :copyright: Copyright 2008 by Armin Ronacher. :license: Python License. """ +import sys from _ast import * @@ -551,6 +552,704 @@ _const_node_type_names = { type(...): 'Ellipsis', } +# Large float and imaginary literals get turned into infinities in the AST. +# We unparse those infinities to INFSTR. +_INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) + +class _Unparser(NodeVisitor): + """Methods in this class recursively traverse an AST and + output source code for the abstract syntax; original formatting + is disregarded.""" + + def __init__(self): + self._source = [] + self._buffer = [] + self._indent = 0 + + def interleave(self, inter, f, seq): + """Call f on each item in seq, calling inter() in between.""" + seq = iter(seq) + try: + f(next(seq)) + except StopIteration: + pass + else: + for x in seq: + inter() + f(x) + + def fill(self, text=""): + """Indent a piece of text and append it, according to the current + indentation level""" + self.write("\n" + " " * self._indent + text) + + def write(self, text): + """Append a piece of text""" + self._source.append(text) + + def buffer_writer(self, text): + self._buffer.append(text) + + @property + def buffer(self): + value = "".join(self._buffer) + self._buffer.clear() + return value + + class _Block: + """A context manager for preparing the source for blocks. It adds + the character':', increases the indentation on enter and decreases + the indentation on exit.""" + def __init__(self, unparser): + self.unparser = unparser + + def __enter__(self): + self.unparser.write(":") + self.unparser._indent += 1 + + def __exit__(self, exc_type, exc_value, traceback): + self.unparser._indent -= 1 + + def block(self): + return self._Block(self) + + def traverse(self, node): + if isinstance(node, list): + for item in node: + self.traverse(item) + else: + super().visit(node) + + def visit(self, node): + """Outputs a source code string that, if converted back to an ast + (using ast.parse) will generate an AST equivalent to *node*""" + self._source = [] + self.traverse(node) + return "".join(self._source) + + def visit_Module(self, node): + for subnode in node.body: + self.traverse(subnode) + + def visit_Expr(self, node): + self.fill() + self.traverse(node.value) + + def visit_NamedExpr(self, node): + self.write("(") + self.traverse(node.target) + self.write(" := ") + self.traverse(node.value) + self.write(")") + + def visit_Import(self, node): + self.fill("import ") + self.interleave(lambda: self.write(", "), self.traverse, node.names) + + def visit_ImportFrom(self, node): + self.fill("from ") + self.write("." * node.level) + if node.module: + self.write(node.module) + self.write(" import ") + self.interleave(lambda: self.write(", "), self.traverse, node.names) + + def visit_Assign(self, node): + self.fill() + for target in node.targets: + self.traverse(target) + self.write(" = ") + self.traverse(node.value) + + def visit_AugAssign(self, node): + self.fill() + self.traverse(node.target) + self.write(" " + self.binop[node.op.__class__.__name__] + "= ") + self.traverse(node.value) + + def visit_AnnAssign(self, node): + self.fill() + if not node.simple and isinstance(node.target, Name): + self.write("(") + self.traverse(node.target) + if not node.simple and isinstance(node.target, Name): + self.write(")") + self.write(": ") + self.traverse(node.annotation) + if node.value: + self.write(" = ") + self.traverse(node.value) + + def visit_Return(self, node): + self.fill("return") + if node.value: + self.write(" ") + self.traverse(node.value) + + def visit_Pass(self, node): + self.fill("pass") + + def visit_Break(self, node): + self.fill("break") + + def visit_Continue(self, node): + self.fill("continue") + + def visit_Delete(self, node): + self.fill("del ") + self.interleave(lambda: self.write(", "), self.traverse, node.targets) + + def visit_Assert(self, node): + self.fill("assert ") + self.traverse(node.test) + if node.msg: + self.write(", ") + self.traverse(node.msg) + + def visit_Global(self, node): + self.fill("global ") + self.interleave(lambda: self.write(", "), self.write, node.names) + + def visit_Nonlocal(self, node): + self.fill("nonlocal ") + self.interleave(lambda: self.write(", "), self.write, node.names) + + def visit_Await(self, node): + self.write("(") + self.write("await") + if node.value: + self.write(" ") + self.traverse(node.value) + self.write(")") + + def visit_Yield(self, node): + self.write("(") + self.write("yield") + if node.value: + self.write(" ") + self.traverse(node.value) + self.write(")") + + def visit_YieldFrom(self, node): + self.write("(") + self.write("yield from") + if node.value: + self.write(" ") + self.traverse(node.value) + self.write(")") + + def visit_Raise(self, node): + self.fill("raise") + if not node.exc: + if node.cause: + raise ValueError(f"Node can't use cause without an exception.") + return + self.write(" ") + self.traverse(node.exc) + if node.cause: + self.write(" from ") + self.traverse(node.cause) + + def visit_Try(self, node): + self.fill("try") + with self.block(): + self.traverse(node.body) + for ex in node.handlers: + self.traverse(ex) + if node.orelse: + self.fill("else") + with self.block(): + self.traverse(node.orelse) + if node.finalbody: + self.fill("finally") + with self.block(): + self.traverse(node.finalbody) + + def visit_ExceptHandler(self, node): + self.fill("except") + if node.type: + self.write(" ") + self.traverse(node.type) + if node.name: + self.write(" as ") + self.write(node.name) + with self.block(): + self.traverse(node.body) + + def visit_ClassDef(self, node): + self.write("\n") + for deco in node.decorator_list: + self.fill("@") + self.traverse(deco) + self.fill("class " + node.name) + self.write("(") + comma = False + for e in node.bases: + if comma: + self.write(", ") + else: + comma = True + self.traverse(e) + for e in node.keywords: + if comma: + self.write(", ") + else: + comma = True + self.traverse(e) + self.write(")") + + with self.block(): + self.traverse(node.body) + + def visit_FunctionDef(self, node): + self.__FunctionDef_helper(node, "def") + + def visit_AsyncFunctionDef(self, node): + self.__FunctionDef_helper(node, "async def") + + def __FunctionDef_helper(self, node, fill_suffix): + self.write("\n") + for deco in node.decorator_list: + self.fill("@") + self.traverse(deco) + def_str = fill_suffix + " " + node.name + "(" + self.fill(def_str) + self.traverse(node.args) + self.write(")") + if node.returns: + self.write(" -> ") + self.traverse(node.returns) + with self.block(): + self.traverse(node.body) + + def visit_For(self, node): + self.__For_helper("for ", node) + + def visit_AsyncFor(self, node): + self.__For_helper("async for ", node) + + def __For_helper(self, fill, node): + self.fill(fill) + self.traverse(node.target) + self.write(" in ") + self.traverse(node.iter) + with self.block(): + self.traverse(node.body) + if node.orelse: + self.fill("else") + with self.block(): + self.traverse(node.orelse) + + def visit_If(self, node): + self.fill("if ") + self.traverse(node.test) + with self.block(): + self.traverse(node.body) + # collapse nested ifs into equivalent elifs. + while node.orelse and len(node.orelse) == 1 and isinstance(node.orelse[0], If): + node = node.orelse[0] + self.fill("elif ") + self.traverse(node.test) + with self.block(): + self.traverse(node.body) + # final else + if node.orelse: + self.fill("else") + with self.block(): + self.traverse(node.orelse) + + def visit_While(self, node): + self.fill("while ") + self.traverse(node.test) + with self.block(): + self.traverse(node.body) + if node.orelse: + self.fill("else") + with self.block(): + self.traverse(node.orelse) + + def visit_With(self, node): + self.fill("with ") + self.interleave(lambda: self.write(", "), self.traverse, node.items) + with self.block(): + self.traverse(node.body) + + def visit_AsyncWith(self, node): + self.fill("async with ") + self.interleave(lambda: self.write(", "), self.traverse, node.items) + with self.block(): + self.traverse(node.body) + + def visit_JoinedStr(self, node): + self.write("f") + self._fstring_JoinedStr(node, self.buffer_writer) + self.write(repr(self.buffer)) + + def visit_FormattedValue(self, node): + self.write("f") + self._fstring_FormattedValue(node, self.buffer_writer) + self.write(repr(self.buffer)) + + def _fstring_JoinedStr(self, node, write): + for value in node.values: + meth = getattr(self, "_fstring_" + type(value).__name__) + meth(value, write) + + def _fstring_Constant(self, node, write): + if not isinstance(node.value, str): + raise ValueError("Constants inside JoinedStr should be a string.") + value = node.value.replace("{", "{{").replace("}", "}}") + write(value) + + def _fstring_FormattedValue(self, node, write): + write("{") + expr = type(self)().visit(node.value).rstrip("\n") + if expr.startswith("{"): + write(" ") # Separate pair of opening brackets as "{ {" + write(expr) + if node.conversion != -1: + conversion = chr(node.conversion) + if conversion not in "sra": + raise ValueError("Unknown f-string conversion.") + write(f"!{conversion}") + if node.format_spec: + write(":") + meth = getattr(self, "_fstring_" + type(node.format_spec).__name__) + meth(node.format_spec, write) + write("}") + + def visit_Name(self, node): + self.write(node.id) + + def _write_constant(self, value): + if isinstance(value, (float, complex)): + # Substitute overflowing decimal literal for AST infinities. + self.write(repr(value).replace("inf", _INFSTR)) + else: + self.write(repr(value)) + + def visit_Constant(self, node): + value = node.value + if isinstance(value, tuple): + self.write("(") + if len(value) == 1: + self._write_constant(value[0]) + self.write(",") + else: + self.interleave(lambda: self.write(", "), self._write_constant, value) + self.write(")") + elif value is ...: + self.write("...") + else: + if node.kind == "u": + self.write("u") + self._write_constant(node.value) + + def visit_List(self, node): + self.write("[") + self.interleave(lambda: self.write(", "), self.traverse, node.elts) + self.write("]") + + def visit_ListComp(self, node): + self.write("[") + self.traverse(node.elt) + for gen in node.generators: + self.traverse(gen) + self.write("]") + + def visit_GeneratorExp(self, node): + self.write("(") + self.traverse(node.elt) + for gen in node.generators: + self.traverse(gen) + self.write(")") + + def visit_SetComp(self, node): + self.write("{") + self.traverse(node.elt) + for gen in node.generators: + self.traverse(gen) + self.write("}") + + def visit_DictComp(self, node): + self.write("{") + self.traverse(node.key) + self.write(": ") + self.traverse(node.value) + for gen in node.generators: + self.traverse(gen) + self.write("}") + + def visit_comprehension(self, node): + if node.is_async: + self.write(" async for ") + else: + self.write(" for ") + self.traverse(node.target) + self.write(" in ") + self.traverse(node.iter) + for if_clause in node.ifs: + self.write(" if ") + self.traverse(if_clause) + + def visit_IfExp(self, node): + self.write("(") + self.traverse(node.body) + self.write(" if ") + self.traverse(node.test) + self.write(" else ") + self.traverse(node.orelse) + self.write(")") + + def visit_Set(self, node): + if not node.elts: + raise ValueError("Set node should has at least one item") + self.write("{") + self.interleave(lambda: self.write(", "), self.traverse, node.elts) + self.write("}") + + def visit_Dict(self, node): + self.write("{") + + def write_key_value_pair(k, v): + self.traverse(k) + self.write(": ") + self.traverse(v) + + def write_item(item): + k, v = item + if k is None: + # for dictionary unpacking operator in dicts {**{'y': 2}} + # see PEP 448 for details + self.write("**") + self.traverse(v) + else: + write_key_value_pair(k, v) + + self.interleave( + lambda: self.write(", "), write_item, zip(node.keys, node.values) + ) + self.write("}") + + def visit_Tuple(self, node): + self.write("(") + if len(node.elts) == 1: + elt = node.elts[0] + self.traverse(elt) + self.write(",") + else: + self.interleave(lambda: self.write(", "), self.traverse, node.elts) + self.write(")") + + unop = {"Invert": "~", "Not": "not", "UAdd": "+", "USub": "-"} + + def visit_UnaryOp(self, node): + self.write("(") + self.write(self.unop[node.op.__class__.__name__]) + self.write(" ") + self.traverse(node.operand) + self.write(")") + + binop = { + "Add": "+", + "Sub": "-", + "Mult": "*", + "MatMult": "@", + "Div": "/", + "Mod": "%", + "LShift": "<<", + "RShift": ">>", + "BitOr": "|", + "BitXor": "^", + "BitAnd": "&", + "FloorDiv": "//", + "Pow": "**", + } + + def visit_BinOp(self, node): + self.write("(") + self.traverse(node.left) + self.write(" " + self.binop[node.op.__class__.__name__] + " ") + self.traverse(node.right) + self.write(")") + + cmpops = { + "Eq": "==", + "NotEq": "!=", + "Lt": "<", + "LtE": "<=", + "Gt": ">", + "GtE": ">=", + "Is": "is", + "IsNot": "is not", + "In": "in", + "NotIn": "not in", + } + + def visit_Compare(self, node): + self.write("(") + self.traverse(node.left) + for o, e in zip(node.ops, node.comparators): + self.write(" " + self.cmpops[o.__class__.__name__] + " ") + self.traverse(e) + self.write(")") + + boolops = {And: "and", Or: "or"} + + def visit_BoolOp(self, node): + self.write("(") + s = " %s " % self.boolops[node.op.__class__] + self.interleave(lambda: self.write(s), self.traverse, node.values) + self.write(")") + + def visit_Attribute(self, node): + self.traverse(node.value) + # Special case: 3.__abs__() is a syntax error, so if node.value + # is an integer literal then we need to either parenthesize + # it or add an extra space to get 3 .__abs__(). + if isinstance(node.value, Constant) and isinstance(node.value.value, int): + self.write(" ") + self.write(".") + self.write(node.attr) + + def visit_Call(self, node): + self.traverse(node.func) + self.write("(") + comma = False + for e in node.args: + if comma: + self.write(", ") + else: + comma = True + self.traverse(e) + for e in node.keywords: + if comma: + self.write(", ") + else: + comma = True + self.traverse(e) + self.write(")") + + def visit_Subscript(self, node): + self.traverse(node.value) + self.write("[") + self.traverse(node.slice) + self.write("]") + + def visit_Starred(self, node): + self.write("*") + self.traverse(node.value) + + def visit_Ellipsis(self, node): + self.write("...") + + def visit_Index(self, node): + self.traverse(node.value) + + def visit_Slice(self, node): + if node.lower: + self.traverse(node.lower) + self.write(":") + if node.upper: + self.traverse(node.upper) + if node.step: + self.write(":") + self.traverse(node.step) + + def visit_ExtSlice(self, node): + self.interleave(lambda: self.write(", "), self.traverse, node.dims) + + def visit_arg(self, node): + self.write(node.arg) + if node.annotation: + self.write(": ") + self.traverse(node.annotation) + + def visit_arguments(self, node): + first = True + # normal arguments + all_args = node.posonlyargs + node.args + defaults = [None] * (len(all_args) - len(node.defaults)) + node.defaults + for index, elements in enumerate(zip(all_args, defaults), 1): + a, d = elements + if first: + first = False + else: + self.write(", ") + self.traverse(a) + if d: + self.write("=") + self.traverse(d) + if index == len(node.posonlyargs): + self.write(", /") + + # varargs, or bare '*' if no varargs but keyword-only arguments present + if node.vararg or node.kwonlyargs: + if first: + first = False + else: + self.write(", ") + self.write("*") + if node.vararg: + self.write(node.vararg.arg) + if node.vararg.annotation: + self.write(": ") + self.traverse(node.vararg.annotation) + + # keyword-only arguments + if node.kwonlyargs: + for a, d in zip(node.kwonlyargs, node.kw_defaults): + if first: + first = False + else: + self.write(", ") + self.traverse(a), + if d: + self.write("=") + self.traverse(d) + + # kwargs + if node.kwarg: + if first: + first = False + else: + self.write(", ") + self.write("**" + node.kwarg.arg) + if node.kwarg.annotation: + self.write(": ") + self.traverse(node.kwarg.annotation) + + def visit_keyword(self, node): + if node.arg is None: + self.write("**") + else: + self.write(node.arg) + self.write("=") + self.traverse(node.value) + + def visit_Lambda(self, node): + self.write("(") + self.write("lambda ") + self.traverse(node.args) + self.write(": ") + self.traverse(node.body) + self.write(")") + + def visit_alias(self, node): + self.write(node.name) + if node.asname: + self.write(" as " + node.asname) + + def visit_withitem(self, node): + self.traverse(node.context_expr) + if node.optional_vars: + self.write(" as ") + self.traverse(node.optional_vars) + +def unparse(ast_obj): + unparser = _Unparser() + return unparser.visit(ast_obj) + def main(): import argparse diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index 031071281b3..adcdec171b0 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -66,6 +66,10 @@ _HAS_IPv6 = hasattr(socket, 'AF_INET6') # Maximum timeout passed to select to avoid OS limitations MAXIMUM_SELECT_TIMEOUT = 24 * 3600 +# Used for deprecation and removal of `loop.create_datagram_endpoint()`'s +# *reuse_address* parameter +_unset = object() + def _format_handle(handle): cb = handle._callback @@ -1230,7 +1234,7 @@ class BaseEventLoop(events.AbstractEventLoop): async def create_datagram_endpoint(self, protocol_factory, local_addr=None, remote_addr=None, *, family=0, proto=0, flags=0, - reuse_address=None, reuse_port=None, + reuse_address=_unset, reuse_port=None, allow_broadcast=None, sock=None): """Create datagram connection.""" if sock is not None: @@ -1239,7 +1243,7 @@ class BaseEventLoop(events.AbstractEventLoop): f'A UDP Socket was expected, got {sock!r}') if (local_addr or remote_addr or family or proto or flags or - reuse_address or reuse_port or allow_broadcast): + reuse_port or allow_broadcast): # show the problematic kwargs in exception msg opts = dict(local_addr=local_addr, remote_addr=remote_addr, family=family, proto=proto, flags=flags, @@ -1306,8 +1310,18 @@ class BaseEventLoop(events.AbstractEventLoop): exceptions = [] - if reuse_address is None: - reuse_address = os.name == 'posix' and sys.platform != 'cygwin' + # bpo-37228 + if reuse_address is not _unset: + if reuse_address: + raise ValueError("Passing `reuse_address=True` is no " + "longer supported, as the usage of " + "SO_REUSEPORT in UDP poses a significant " + "security concern.") + else: + warnings.warn("The *reuse_address* parameter has been " + "deprecated as of 3.5.10 and is scheduled " + "for removal in 3.11.", DeprecationWarning, + stacklevel=2) for ((family, proto), (local_address, remote_address)) in addr_pairs_info: @@ -1316,9 +1330,6 @@ class BaseEventLoop(events.AbstractEventLoop): try: sock = socket.socket( family=family, type=socket.SOCK_DGRAM, proto=proto) - if reuse_address: - sock.setsockopt( - socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) if reuse_port: _set_reuseport(sock) if allow_broadcast: diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py index 36b7ea307e0..c7343f515ca 100644 --- a/Lib/asyncio/events.py +++ b/Lib/asyncio/events.py @@ -636,7 +636,7 @@ class BaseDefaultEventLoopPolicy(AbstractEventLoopPolicy): """ if (self._local._loop is None and not self._local._set_called and - isinstance(threading.current_thread(), threading._MainThread)): + threading.current_thread() is threading.main_thread()): self.set_event_loop(self.new_event_loop()) if self._local._loop is None: diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py index 9afda220bd7..a3cf379ee81 100644 --- a/Lib/asyncio/futures.py +++ b/Lib/asyncio/futures.py @@ -103,6 +103,9 @@ class Future: context['source_traceback'] = self._source_traceback self._loop.call_exception_handler(context) + def __class_getitem__(cls, type): + return cls + @property def _log_traceback(self): return self.__log_traceback diff --git a/Lib/asyncio/queues.py b/Lib/asyncio/queues.py index 390ae9a6821..cd3f7c6a567 100644 --- a/Lib/asyncio/queues.py +++ b/Lib/asyncio/queues.py @@ -76,6 +76,9 @@ class Queue: def __str__(self): return f'<{type(self).__name__} {self._format()}>' + def __class_getitem__(cls, type): + return cls + def _format(self): result = f'maxsize={self._maxsize!r}' if getattr(self, '_queue', None): diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py index 00e3244bfb2..a05cbb6bdd6 100644 --- a/Lib/asyncio/selector_events.py +++ b/Lib/asyncio/selector_events.py @@ -40,6 +40,11 @@ def _test_selector_event(selector, fd, event): return bool(key.events & event) +def _check_ssl_socket(sock): + if ssl is not None and isinstance(sock, ssl.SSLSocket): + raise TypeError("Socket cannot be of type SSLSocket") + + class BaseSelectorEventLoop(base_events.BaseEventLoop): """Selector event loop. @@ -348,6 +353,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): The maximum amount of data to be received at once is specified by nbytes. """ + _check_ssl_socket(sock) if self._debug and sock.gettimeout() != 0: raise ValueError("the socket must be non-blocking") try: @@ -386,6 +392,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): The received data is written into *buf* (a writable buffer). The return value is the number of bytes written. """ + _check_ssl_socket(sock) if self._debug and sock.gettimeout() != 0: raise ValueError("the socket must be non-blocking") try: @@ -425,6 +432,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): raised, and there is no way to determine how much data, if any, was successfully processed by the receiving end of the connection. """ + _check_ssl_socket(sock) if self._debug and sock.gettimeout() != 0: raise ValueError("the socket must be non-blocking") try: @@ -472,6 +480,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): This method is a coroutine. """ + _check_ssl_socket(sock) if self._debug and sock.gettimeout() != 0: raise ValueError("the socket must be non-blocking") @@ -533,6 +542,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop): object usable to send and receive data on the connection, and address is the address bound to the socket on the other end of the connection. """ + _check_ssl_socket(sock) if self._debug and sock.gettimeout() != 0: raise ValueError("the socket must be non-blocking") fut = self.create_future() diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py index 795530e6f69..3c80bb88925 100644 --- a/Lib/asyncio/streams.py +++ b/Lib/asyncio/streams.py @@ -214,8 +214,7 @@ class StreamReaderProtocol(FlowControlMixin, protocols.Protocol): def __init__(self, stream_reader, client_connected_cb=None, loop=None): super().__init__(loop=loop) if stream_reader is not None: - self._stream_reader_wr = weakref.ref(stream_reader, - self._on_reader_gc) + self._stream_reader_wr = weakref.ref(stream_reader) self._source_traceback = stream_reader._source_traceback else: self._stream_reader_wr = None @@ -231,22 +230,6 @@ class StreamReaderProtocol(FlowControlMixin, protocols.Protocol): self._over_ssl = False self._closed = self._loop.create_future() - def _on_reader_gc(self, wr): - transport = self._transport - if transport is not None: - # connection_made was called - context = { - 'message': ('An open stream object is being garbage ' - 'collected; call "stream.close()" explicitly.') - } - if self._source_traceback: - context['source_traceback'] = self._source_traceback - self._loop.call_exception_handler(context) - transport.abort() - else: - self._reject_connection = True - self._stream_reader_wr = None - @property def _stream_reader(self): if self._stream_reader_wr is None: diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py index 38d982716d4..894d28eb107 100644 --- a/Lib/asyncio/tasks.py +++ b/Lib/asyncio/tasks.py @@ -175,6 +175,9 @@ class Task(futures._PyFuture): # Inherit Python Task implementation self._loop.call_exception_handler(context) super().__del__() + def __class_getitem__(cls, type): + return cls + def _repr_info(self): return base_tasks._task_repr_info(self) diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index 632546ad008..28fb4918645 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -930,9 +930,20 @@ class PidfdChildWatcher(AbstractChildWatcher): def _do_wait(self, pid): pidfd, callback, args = self._callbacks.pop(pid) self._loop._remove_reader(pidfd) - _, status = os.waitpid(pid, 0) + try: + _, status = os.waitpid(pid, 0) + except ChildProcessError: + # The child process is already reaped + # (may happen if waitpid() is called elsewhere). + returncode = 255 + logger.warning( + "child process pid %d exit status already read: " + " will report returncode 255", + pid) + else: + returncode = _compute_returncode(status) + os.close(pidfd) - returncode = _compute_returncode(status) callback(pid, returncode, *args) def remove_child_handler(self, pid): @@ -1406,8 +1417,7 @@ class _UnixDefaultEventLoopPolicy(events.BaseDefaultEventLoopPolicy): with events._lock: if self._watcher is None: # pragma: no branch self._watcher = ThreadedChildWatcher() - if isinstance(threading.current_thread(), - threading._MainThread): + if threading.current_thread() is threading.main_thread(): self._watcher.attach_loop(self._local._loop) def set_event_loop(self, loop): @@ -1421,7 +1431,7 @@ class _UnixDefaultEventLoopPolicy(events.BaseDefaultEventLoopPolicy): super().set_event_loop(loop) if (self._watcher is not None and - isinstance(threading.current_thread(), threading._MainThread)): + threading.current_thread() is threading.main_thread()): self._watcher.attach_loop(loop) def get_child_watcher(self): diff --git a/Lib/codeop.py b/Lib/codeop.py index fc7e1e70cea..082285f94fe 100644 --- a/Lib/codeop.py +++ b/Lib/codeop.py @@ -93,10 +93,13 @@ def _maybe_compile(compiler, source, filename, symbol): except SyntaxError as e: err2 = e - if code: - return code - if not code1 and repr(err1) == repr(err2): - raise err1 + try: + if code: + return code + if not code1 and repr(err1) == repr(err2): + raise err1 + finally: + err1 = err2 = None def _compile(source, filename, symbol): return compile(source, filename, symbol, PyCF_DONT_IMPLY_DEDENT) diff --git a/Lib/ctypes/macholib/dyld.py b/Lib/ctypes/macholib/dyld.py index c158e672f05..9d86b058765 100644 --- a/Lib/ctypes/macholib/dyld.py +++ b/Lib/ctypes/macholib/dyld.py @@ -149,6 +149,8 @@ def framework_find(fn, executable_path=None, env=None): return dyld_find(fn, executable_path=executable_path, env=env) except ValueError: raise error + finally: + error = None def test_dyld_find(): env = {} diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 4f56f61817c..818de95c67b 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -378,23 +378,24 @@ def _create_fn(name, args, body, *, globals=None, locals=None, # worries about external callers. if locals is None: locals = {} - # __builtins__ may be the "builtins" module or - # the value of its "__dict__", - # so make sure "__builtins__" is the module. - if globals is not None and '__builtins__' not in globals: - globals['__builtins__'] = builtins + if 'BUILTINS' not in locals: + locals['BUILTINS'] = builtins return_annotation = '' if return_type is not MISSING: locals['_return_type'] = return_type return_annotation = '->_return_type' args = ','.join(args) - body = '\n'.join(f' {b}' for b in body) + body = '\n'.join(f' {b}' for b in body) # Compute the text of the entire function. - txt = f'def {name}({args}){return_annotation}:\n{body}' + txt = f' def {name}({args}){return_annotation}:\n{body}' - exec(txt, globals, locals) - return locals[name] + local_vars = ', '.join(locals.keys()) + txt = f"def __create_fn__({local_vars}):\n{txt}\n return {name}" + + ns = {} + exec(txt, globals, ns) + return ns['__create_fn__'](**locals) def _field_assign(frozen, name, value, self_name): @@ -405,7 +406,7 @@ def _field_assign(frozen, name, value, self_name): # self_name is what "self" is called in this function: don't # hard-code "self", since that might be a field name. if frozen: - return f'__builtins__.object.__setattr__({self_name},{name!r},{value})' + return f'BUILTINS.object.__setattr__({self_name},{name!r},{value})' return f'{self_name}.{name}={value}' @@ -482,15 +483,18 @@ def _init_param(f): return f'{f.name}:_type_{f.name}{default}' -def _init_fn(fields, frozen, has_post_init, self_name): +def _init_fn(fields, frozen, has_post_init, self_name, globals): # fields contains both real fields and InitVar pseudo-fields. - globals = {'MISSING': MISSING, - '_HAS_DEFAULT_FACTORY': _HAS_DEFAULT_FACTORY} + locals = {f'_type_{f.name}': f.type for f in fields} + locals.update({ + 'MISSING': MISSING, + '_HAS_DEFAULT_FACTORY': _HAS_DEFAULT_FACTORY, + }) body_lines = [] for f in fields: - line = _field_init(f, frozen, globals, self_name) + line = _field_init(f, frozen, locals, self_name) # line is None means that this field doesn't require # initialization (it's a pseudo-field). Just skip it. if line: @@ -520,7 +524,6 @@ def _init_fn(fields, frozen, has_post_init, self_name): args.append("*") args.append(_init_param(f)) - locals = {f'_type_{f.name}': f.type for f in fields} return _create_fn('__init__', args, body_lines, @@ -529,20 +532,19 @@ def _init_fn(fields, frozen, has_post_init, self_name): return_type=None) -def _repr_fn(fields): +def _repr_fn(fields, globals): fn = _create_fn('__repr__', ('self',), ['return self.__class__.__qualname__ + f"(' + ', '.join([f"{f.name}={{self.{f.name}!r}}" for f in fields]) + - ')"']) + ')"'], + globals=globals) return _recursive_repr(fn) -def _frozen_get_del_attr(cls, fields): - # XXX: globals is modified on the first call to _create_fn, then - # the modified version is used in the second call. Is this okay? - globals = {'cls': cls, +def _frozen_get_del_attr(cls, fields, globals): + locals = {'cls': cls, 'FrozenInstanceError': FrozenInstanceError} if fields: fields_str = '(' + ','.join(repr(f.name) for f in fields) + ',)' @@ -554,17 +556,19 @@ def _frozen_get_del_attr(cls, fields): (f'if type(self) is cls or name in {fields_str}:', ' raise FrozenInstanceError(f"cannot assign to field {name!r}")', f'super(cls, self).__setattr__(name, value)'), + locals=locals, globals=globals), _create_fn('__delattr__', ('self', 'name'), (f'if type(self) is cls or name in {fields_str}:', ' raise FrozenInstanceError(f"cannot delete field {name!r}")', f'super(cls, self).__delattr__(name)'), + locals=locals, globals=globals), ) -def _cmp_fn(name, op, self_tuple, other_tuple): +def _cmp_fn(name, op, self_tuple, other_tuple, globals): # Create a comparison function. If the fields in the object are # named 'x' and 'y', then self_tuple is the string # '(self.x,self.y)' and other_tuple is the string @@ -574,14 +578,16 @@ def _cmp_fn(name, op, self_tuple, other_tuple): ('self', 'other'), [ 'if other.__class__ is self.__class__:', f' return {self_tuple}{op}{other_tuple}', - 'return NotImplemented']) + 'return NotImplemented'], + globals=globals) -def _hash_fn(fields): +def _hash_fn(fields, globals): self_tuple = _tuple_str('self', fields) return _create_fn('__hash__', ('self',), - [f'return hash({self_tuple})']) + [f'return hash({self_tuple})'], + globals=globals) def _is_classvar(a_type, typing): @@ -754,14 +760,14 @@ def _set_new_attribute(cls, name, value): # take. The common case is to do nothing, so instead of providing a # function that is a no-op, use None to signify that. -def _hash_set_none(cls, fields): +def _hash_set_none(cls, fields, globals): return None -def _hash_add(cls, fields): +def _hash_add(cls, fields, globals): flds = [f for f in fields if (f.compare if f.hash is None else f.hash)] - return _hash_fn(flds) + return _hash_fn(flds, globals) -def _hash_exception(cls, fields): +def _hash_exception(cls, fields, globals): # Raise an exception. raise TypeError(f'Cannot overwrite attribute __hash__ ' f'in class {cls.__name__}') @@ -803,6 +809,16 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): # is defined by the base class, which is found first. fields = {} + if cls.__module__ in sys.modules: + globals = sys.modules[cls.__module__].__dict__ + else: + # Theoretically this can happen if someone writes + # a custom string to cls.__module__. In which case + # such dataclass won't be fully introspectable + # (w.r.t. typing.get_type_hints) but will still function + # correctly. + globals = {} + setattr(cls, _PARAMS, _DataclassParams(init, repr, eq, order, unsafe_hash, frozen)) @@ -912,6 +928,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): # if possible. '__dataclass_self__' if 'self' in fields else 'self', + globals, )) # Get the fields as a list, and include only real fields. This is @@ -920,7 +937,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): if repr: flds = [f for f in field_list if f.repr] - _set_new_attribute(cls, '__repr__', _repr_fn(flds)) + _set_new_attribute(cls, '__repr__', _repr_fn(flds, globals)) if eq: # Create _eq__ method. There's no need for a __ne__ method, @@ -930,7 +947,8 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): other_tuple = _tuple_str('other', flds) _set_new_attribute(cls, '__eq__', _cmp_fn('__eq__', '==', - self_tuple, other_tuple)) + self_tuple, other_tuple, + globals=globals)) if order: # Create and set the ordering methods. @@ -943,13 +961,14 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): ('__ge__', '>='), ]: if _set_new_attribute(cls, name, - _cmp_fn(name, op, self_tuple, other_tuple)): + _cmp_fn(name, op, self_tuple, other_tuple, + globals=globals)): raise TypeError(f'Cannot overwrite attribute {name} ' f'in class {cls.__name__}. Consider using ' 'functools.total_ordering') if frozen: - for fn in _frozen_get_del_attr(cls, field_list): + for fn in _frozen_get_del_attr(cls, field_list, globals): if _set_new_attribute(cls, fn.__name__, fn): raise TypeError(f'Cannot overwrite attribute {fn.__name__} ' f'in class {cls.__name__}') @@ -962,7 +981,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen): if hash_action: # No need to call _set_new_attribute here, since by the time # we're here the overwriting is unconditional. - cls.__hash__ = hash_action(cls, field_list) + cls.__hash__ = hash_action(cls, field_list, globals) if not getattr(cls, '__doc__'): # Create a class doc-string. diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py index 1668b4a14e9..9c55ef7fb45 100644 --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -850,10 +850,15 @@ class MsgID(TokenList): # message-id tokens may not be folded. return str(self) + policy.linesep + class MessageID(MsgID): token_type = 'message-id' +class InvalidMessageID(MessageID): + token_type = 'invalid-message-id' + + class Header(TokenList): token_type = 'header' @@ -2042,7 +2047,7 @@ def get_msg_id(value): no-fold-literal = "[" *dtext "]" """ msg_id = MsgID() - if value[0] in CFWS_LEADER: + if value and value[0] in CFWS_LEADER: token, value = get_cfws(value) msg_id.append(token) if not value or value[0] != '<': @@ -2110,10 +2115,18 @@ def parse_message_id(value): message_id = MessageID() try: token, value = get_msg_id(value) - except errors.HeaderParseError: - message_id.defects.append(errors.InvalidHeaderDefect( - "Expected msg-id but found {!r}".format(value))) - message_id.append(token) + message_id.append(token) + except errors.HeaderParseError as ex: + token = get_unstructured(value) + message_id = InvalidMessageID(token) + message_id.defects.append( + errors.InvalidHeaderDefect("Invalid msg-id: {!r}".format(ex))) + else: + # Value after parsing a valid msg_id should be None. + if value: + message_id.defects.append(errors.InvalidHeaderDefect( + "Unexpected {!r}".format(value))) + return message_id # diff --git a/Lib/encodings/uu_codec.py b/Lib/encodings/uu_codec.py index 2a5728fb5b7..4e58c62fe9e 100644 --- a/Lib/encodings/uu_codec.py +++ b/Lib/encodings/uu_codec.py @@ -20,6 +20,10 @@ def uu_encode(input, errors='strict', filename='', mode=0o666): read = infile.read write = outfile.write + # Remove newline chars from filename + filename = filename.replace('\n','\\n') + filename = filename.replace('\r','\\r') + # Encode write(('begin %o %s\n' % (mode & 0o777, filename)).encode('ascii')) chunk = read(45) diff --git a/Lib/enum.py b/Lib/enum.py index 06f42a97803..0be1b60cd6d 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -861,28 +861,20 @@ def _decompose(flag, value): # _decompose is only called if the value is not named not_covered = value negative = value < 0 - # issue29167: wrap accesses to _value2member_map_ in a list to avoid race - # conditions between iterating over it and having more pseudo- - # members added to it - if negative: - # only check for named flags - flags_to_check = [ - (m, v) - for v, m in list(flag._value2member_map_.items()) - if m.name is not None - ] - else: - # check for named flags and powers-of-two flags - flags_to_check = [ - (m, v) - for v, m in list(flag._value2member_map_.items()) - if m.name is not None or _power_of_two(v) - ] members = [] - for member, member_value in flags_to_check: + for member in flag: + member_value = member.value if member_value and member_value & value == member_value: members.append(member) not_covered &= ~member_value + if not negative: + tmp = not_covered + while tmp: + flag_value = 2 ** _high_bit(tmp) + if flag_value in flag._value2member_map_: + members.append(flag._value2member_map_[flag_value]) + not_covered &= ~flag_value + tmp &= ~flag_value if not members and value in flag._value2member_map_: members.append(flag._value2member_map_[value]) members.sort(key=lambda m: m._value_, reverse=True) @@ -890,8 +882,3 @@ def _decompose(flag, value): # we have the breakdown, don't need the value member itself members.pop(0) return members, not_covered - -def _power_of_two(value): - if value < 1: - return False - return value == 2 ** _high_bit(value) diff --git a/Lib/http/cookiejar.py b/Lib/http/cookiejar.py index adc7ed62425..47ed5c3d64a 100644 --- a/Lib/http/cookiejar.py +++ b/Lib/http/cookiejar.py @@ -214,10 +214,14 @@ LOOSE_HTTP_DATE_RE = re.compile( (?::(\d\d))? # optional seconds )? # optional clock \s* - ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone + (?: + ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone \s* - (?:\(\w+\))? # ASCII representation of timezone in parens. - \s*$""", re.X | re.ASCII) + )? + (?: + \(\w+\) # ASCII representation of timezone in parens. + \s* + )?$""", re.X | re.ASCII) def http2time(text): """Returns time in seconds since epoch of time represented by a string. @@ -287,9 +291,11 @@ ISO_DATE_RE = re.compile( (?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional) )? # optional clock \s* - ([-+]?\d\d?:?(:?\d\d)? - |Z|z)? # timezone (Z is "zero meridian", i.e. GMT) - \s*$""", re.X | re. ASCII) + (?: + ([-+]?\d\d?:?(:?\d\d)? + |Z|z) # timezone (Z is "zero meridian", i.e. GMT) + \s* + )?$""", re.X | re. ASCII) def iso2time(text): """ As for http2time, but parses the ISO 8601 formats: diff --git a/Lib/http/server.py b/Lib/http/server.py index 005dd824f9a..47a4fcf9a65 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -1014,8 +1014,10 @@ class CGIHTTPRequestHandler(SimpleHTTPRequestHandler): """ collapsed_path = _url_collapse_path(self.path) dir_sep = collapsed_path.find('/', 1) - head, tail = collapsed_path[:dir_sep], collapsed_path[dir_sep+1:] - if head in self.cgi_directories: + while dir_sep > 0 and not collapsed_path[:dir_sep] in self.cgi_directories: + dir_sep = collapsed_path.find('/', dir_sep+1) + if dir_sep > 0: + head, tail = collapsed_path[:dir_sep], collapsed_path[dir_sep+1:] self.cgi_info = head, tail return True return False diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index c6aa00d0d54..304cf6375f7 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,15 @@ Released on 2020-10-05? ====================================== +bpo-38943: Fix autocomplete windows not always appearing on some +systems. Patch by Johnny Najera. + +bpo-38944: Excape key now closes IDLE completion windows. Patch by +Johnny Najera. + +bpo-38862: 'Strip Trailing Whitespace' on the Format menu removes extra +newlines at the end of non-shell files. + bpo-38636: Fix IDLE Format menu tab toggle and file indent width. These functions (default shortcuts Alt-T and Alt-U) were mistakenly disabled in 3.7.5 and 3.8.0. diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py index 5035e067392..0643c092c6e 100644 --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -17,7 +17,7 @@ KEYPRESS_VIRTUAL_EVENT_NAME = "<>" # before the default specific IDLE function KEYPRESS_SEQUENCES = ("", "", "", "", "", "", "", "", - "", "") + "", "", "") KEYRELEASE_VIRTUAL_EVENT_NAME = "<>" KEYRELEASE_SEQUENCE = "" LISTUPDATE_SEQUENCE = "" @@ -257,6 +257,7 @@ class AutoCompleteWindow: # place acw above current line new_y -= acw_height acw.wm_geometry("+%d+%d" % (new_x, new_y)) + acw.update_idletasks() if platform.system().startswith('Windows'): # See issue 15786. When on Windows platform, Tk will misbehave diff --git a/Lib/idlelib/format.py b/Lib/idlelib/format.py index 2b098056573..4b57a182c9a 100644 --- a/Lib/idlelib/format.py +++ b/Lib/idlelib/format.py @@ -408,6 +408,16 @@ class Rstrip: # 'Strip Trailing Whitespace" on "Format" menu. if cut < raw: text.delete('%i.%i' % (cur, cut), '%i.end' % cur) + if (text.get('end-2c') == '\n' # File ends with at least 1 newline; + and not hasattr(self.editwin, 'interp')): # & is not Shell. + # Delete extra user endlines. + while (text.index('end-1c') > '1.0' # Stop if file empty. + and text.get('end-3c') == '\n'): + text.delete('end-3c') + # Because tk indexes are slice indexes and never raise, + # a file with only newlines will be emptied. + # patchcheck.py does the same. + undo.undo_block_stop() diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html index 0754f2453ba..09dc4c57bcd 100644 --- a/Lib/idlelib/help.html +++ b/Lib/idlelib/help.html @@ -4,7 +4,7 @@ - IDLE — Python 3.9.0a0 documentation + IDLE — Python 3.9.0a1 documentation @@ -17,14 +17,14 @@ - + @@ -62,7 +62,7 @@ next |
  • - previous |
  • - 3.9.0a0 Documentation » + 3.9.0a1 Documentation »
  • @@ -240,7 +240,8 @@ paragraph will be formatted to less than N columns, where N defaults to 72.

    Strip trailing whitespace

    Remove trailing space and other whitespace characters after the last non-whitespace character of a line by applying str.rstrip to each line, -including lines within multiline strings.

    +including lines within multiline strings. Except for Shell windows, +remove extra newlines at the end of the file.

    @@ -886,8 +887,8 @@ also used for testing.

    Previous topic

    -

    tkinter.scrolledtext — Scrolled Text Widget

    +

    tkinter.tix — Extension widgets for Tk

    Next topic

    Other Graphical User Interface Packages

    @@ -919,7 +920,7 @@ also used for testing.

    next |
  • - previous |
  • - 3.9.0a0 Documentation » + 3.9.0a1 Documentation »
  • @@ -959,11 +960,11 @@ also used for testing.



    - Last updated on Sep 01, 2019. + Last updated on Nov 24, 2019. Found a bug?
    - Created using Sphinx 2.1.2. + Created using Sphinx 2.1.1. diff --git a/Lib/idlelib/idle_test/mock_idle.py b/Lib/idlelib/idle_test/mock_idle.py index f279a52fd51..71fa480ce4d 100644 --- a/Lib/idlelib/idle_test/mock_idle.py +++ b/Lib/idlelib/idle_test/mock_idle.py @@ -40,8 +40,9 @@ class Func: class Editor: '''Minimally imitate editor.EditorWindow class. ''' - def __init__(self, flist=None, filename=None, key=None, root=None): - self.text = Text() + def __init__(self, flist=None, filename=None, key=None, root=None, + text=None): # Allow real Text with mock Editor. + self.text = text or Text() self.undo = UndoDelegator() def get_selection_indices(self): diff --git a/Lib/idlelib/idle_test/test_format.py b/Lib/idlelib/idle_test/test_format.py index 20b5970f498..a79bb515089 100644 --- a/Lib/idlelib/idle_test/test_format.py +++ b/Lib/idlelib/idle_test/test_format.py @@ -611,37 +611,33 @@ class IndentsTest(unittest.TestCase): class RstripTest(unittest.TestCase): - def test_rstrip_line(self): - editor = MockEditor() - text = editor.text - do_rstrip = ft.Rstrip(editor).do_rstrip - eq = self.assertEqual + @classmethod + def setUpClass(cls): + requires('gui') + cls.root = Tk() + cls.root.withdraw() + cls.text = Text(cls.root) + cls.editor = MockEditor(text=cls.text) + cls.do_rstrip = ft.Rstrip(cls.editor).do_rstrip - do_rstrip() - eq(text.get('1.0', 'insert'), '') - text.insert('1.0', ' ') - do_rstrip() - eq(text.get('1.0', 'insert'), '') - text.insert('1.0', ' \n') - do_rstrip() - eq(text.get('1.0', 'insert'), '\n') + @classmethod + def tearDownClass(cls): + del cls.text, cls.do_rstrip, cls.editor + cls.root.update_idletasks() + cls.root.destroy() + del cls.root - def test_rstrip_multiple(self): - editor = MockEditor() - # Comment above, uncomment 3 below to test with real Editor & Text. - #from idlelib.editor import EditorWindow as Editor - #from tkinter import Tk - #editor = Editor(root=Tk()) - text = editor.text - do_rstrip = ft.Rstrip(editor).do_rstrip + def tearDown(self): + self.text.delete('1.0', 'end-1c') + def test_rstrip_lines(self): original = ( "Line with an ending tab \n" "Line ending in 5 spaces \n" "Linewithnospaces\n" " indented line\n" " indented line with trailing space \n" - " ") + " \n") stripped = ( "Line with an ending tab\n" "Line ending in 5 spaces\n" @@ -649,9 +645,23 @@ class RstripTest(unittest.TestCase): " indented line\n" " indented line with trailing space\n") - text.insert('1.0', original) - do_rstrip() - self.assertEqual(text.get('1.0', 'insert'), stripped) + self.text.insert('1.0', original) + self.do_rstrip() + self.assertEqual(self.text.get('1.0', 'insert'), stripped) + + def test_rstrip_end(self): + text = self.text + for code in ('', '\n', '\n\n\n'): + with self.subTest(code=code): + text.insert('1.0', code) + self.do_rstrip() + self.assertEqual(text.get('1.0','end-1c'), '') + for code in ('a\n', 'a\n\n', 'a\n\n\n'): + with self.subTest(code=code): + text.delete('1.0', 'end-1c') + text.insert('1.0', code) + self.do_rstrip() + self.assertEqual(text.get('1.0','end-1c'), 'a\n') if __name__ == '__main__': diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 825ed77c3d4..d62c6cb77cd 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -272,6 +272,8 @@ _code_type = type(_write_atomic.__code__) # only args in ast.arguments #37593) # Python 3.8b4 3413 (Fix "break" and "continue" in "finally" #37830) # Python 3.9a0 3420 (add LOAD_ASSERTION_ERROR #34880) +# Python 3.9a0 3421 (simplified bytecode for with blocks #32949) +# Python 3.9a0 3422 (remove BEGIN_FINALLY, END_FINALLY, CALL_FINALLY, POP_FINALLY bytecodes #33387) # # MAGIC must change whenever the bytecode emitted by the compiler may no # longer be understood by older implementations of the eval loop (usually @@ -280,7 +282,7 @@ _code_type = type(_write_atomic.__code__) # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3420).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3422).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Lib/inspect.py b/Lib/inspect.py index 3ff395ca333..608ca955116 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -1136,7 +1136,6 @@ def getfullargspec(func): varkw = None posonlyargs = [] kwonlyargs = [] - defaults = () annotations = {} defaults = () kwdefaults = {} diff --git a/Lib/json/tool.py b/Lib/json/tool.py index b3ef9923e31..6d7d9a002e5 100644 --- a/Lib/json/tool.py +++ b/Lib/json/tool.py @@ -20,30 +20,52 @@ def main(): description = ('A simple command line interface for json module ' 'to validate and pretty-print JSON objects.') parser = argparse.ArgumentParser(prog=prog, description=description) - parser.add_argument('infile', nargs='?', type=argparse.FileType(), + parser.add_argument('infile', nargs='?', + type=argparse.FileType(encoding="utf-8"), help='a JSON file to be validated or pretty-printed', default=sys.stdin) - parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'), + parser.add_argument('outfile', nargs='?', + type=argparse.FileType('w', encoding="utf-8"), help='write the output of infile to outfile', default=sys.stdout) parser.add_argument('--sort-keys', action='store_true', default=False, help='sort the output of dictionaries alphabetically by key') + parser.add_argument('--no-ensure-ascii', dest='ensure_ascii', action='store_false', + help='disable escaping of non-ASCII characters') parser.add_argument('--json-lines', action='store_true', default=False, - help='parse input using the jsonlines format') + help='parse input using the JSON Lines format. ' + 'Use with --no-indent or --compact to produce valid JSON Lines output.') + group = parser.add_mutually_exclusive_group() + group.add_argument('--indent', default=4, type=int, + help='separate items with newlines and use this number ' + 'of spaces for indentation') + group.add_argument('--tab', action='store_const', dest='indent', + const='\t', help='separate items with newlines and use ' + 'tabs for indentation') + group.add_argument('--no-indent', action='store_const', dest='indent', + const=None, + help='separate items with spaces rather than newlines') + group.add_argument('--compact', action='store_true', + help='suppress all whitespace separation (most compact)') options = parser.parse_args() - infile = options.infile - outfile = options.outfile - sort_keys = options.sort_keys - json_lines = options.json_lines - with infile, outfile: + dump_args = { + 'sort_keys': options.sort_keys, + 'indent': options.indent, + 'ensure_ascii': options.ensure_ascii, + } + if options.compact: + dump_args['indent'] = None + dump_args['separators'] = ',', ':' + + with options.infile as infile, options.outfile as outfile: try: - if json_lines: + if options.json_lines: objs = (json.loads(line) for line in infile) else: objs = (json.load(infile), ) for obj in objs: - json.dump(obj, outfile, sort_keys=sort_keys, indent=4) + json.dump(obj, outfile, **dump_args) outfile.write('\n') except ValueError as e: raise SystemExit(e) diff --git a/Lib/opcode.py b/Lib/opcode.py index 0ae0068f2f2..1898a38abbb 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -84,10 +84,12 @@ def_op('BINARY_TRUE_DIVIDE', 27) def_op('INPLACE_FLOOR_DIVIDE', 28) def_op('INPLACE_TRUE_DIVIDE', 29) +def_op('RERAISE', 48) +def_op('WITH_EXCEPT_START', 49) def_op('GET_AITER', 50) def_op('GET_ANEXT', 51) def_op('BEFORE_ASYNC_WITH', 52) -def_op('BEGIN_FINALLY', 53) + def_op('END_ASYNC_FOR', 54) def_op('INPLACE_ADD', 55) def_op('INPLACE_SUBTRACT', 56) @@ -115,14 +117,13 @@ def_op('INPLACE_RSHIFT', 76) def_op('INPLACE_AND', 77) def_op('INPLACE_XOR', 78) def_op('INPLACE_OR', 79) -def_op('WITH_CLEANUP_START', 81) -def_op('WITH_CLEANUP_FINISH', 82) + def_op('RETURN_VALUE', 83) def_op('IMPORT_STAR', 84) def_op('SETUP_ANNOTATIONS', 85) def_op('YIELD_VALUE', 86) def_op('POP_BLOCK', 87) -def_op('END_FINALLY', 88) + def_op('POP_EXCEPT', 89) HAVE_ARGUMENT = 90 # Opcodes from here have an argument: @@ -210,7 +211,5 @@ def_op('BUILD_TUPLE_UNPACK_WITH_CALL', 158) name_op('LOAD_METHOD', 160) def_op('CALL_METHOD', 161) -jrel_op('CALL_FINALLY', 162) -def_op('POP_FINALLY', 163) del def_op, name_op, jrel_op, jabs_op diff --git a/Lib/os.py b/Lib/os.py index 52d3f1d7415..c901bd1b8ed 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -1072,6 +1072,9 @@ class PathLike(abc.ABC): def __subclasshook__(cls, subclass): return hasattr(subclass, '__fspath__') + def __class_getitem__(cls, type): + return cls + if name == 'nt': class _AddedDllDirectory: diff --git a/Lib/pathlib.py b/Lib/pathlib.py index d70fde0ea3b..f0537cfea19 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -777,6 +777,9 @@ class PurePath(object): return NotImplemented return self._cparts >= other._cparts + def __class_getitem__(cls, type): + return cls + drive = property(attrgetter('_drv'), doc="""The drive prefix (letter or UNC path), if any.""") diff --git a/Lib/pickle.py b/Lib/pickle.py index 71aa57d500e..01d41422aa4 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -1604,17 +1604,29 @@ class _Unpickler: def load_get(self): i = int(self.readline()[:-1]) - self.append(self.memo[i]) + try: + self.append(self.memo[i]) + except KeyError: + msg = f'Memo value not found at index {i}' + raise UnpicklingError(msg) from None dispatch[GET[0]] = load_get def load_binget(self): i = self.read(1)[0] - self.append(self.memo[i]) + try: + self.append(self.memo[i]) + except KeyError as exc: + msg = f'Memo value not found at index {i}' + raise UnpicklingError(msg) from None dispatch[BINGET[0]] = load_binget def load_long_binget(self): i, = unpack('1: - self.assertRaises(ValueError, b.fromstring, "x") - nb_warnings += 1 - self.assertEqual(len(r), nb_warnings) - def test_tofrombytes(self): a = array.array(self.typecode, 2*self.example) b = array.array(self.typecode) diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py index ca99d5c6c0a..6c0f00dc936 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -1738,10 +1738,6 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): MyDatagramProto, flags=1, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) - fut = self.loop.create_datagram_endpoint( - MyDatagramProto, reuse_address=True, sock=FakeSock()) - self.assertRaises(ValueError, self.loop.run_until_complete, fut) - fut = self.loop.create_datagram_endpoint( MyDatagramProto, reuse_port=True, sock=FakeSock()) self.assertRaises(ValueError, self.loop.run_until_complete, fut) @@ -1752,7 +1748,6 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): def test_create_datagram_endpoint_sockopts(self): # Socket options should not be applied unless asked for. - # SO_REUSEADDR defaults to on for UNIX. # SO_REUSEPORT is not available on all platforms. coro = self.loop.create_datagram_endpoint( @@ -1761,18 +1756,8 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): transport, protocol = self.loop.run_until_complete(coro) sock = transport.get_extra_info('socket') - reuse_address_default_on = ( - os.name == 'posix' and sys.platform != 'cygwin') reuseport_supported = hasattr(socket, 'SO_REUSEPORT') - if reuse_address_default_on: - self.assertTrue( - sock.getsockopt( - socket.SOL_SOCKET, socket.SO_REUSEADDR)) - else: - self.assertFalse( - sock.getsockopt( - socket.SOL_SOCKET, socket.SO_REUSEADDR)) if reuseport_supported: self.assertFalse( sock.getsockopt( @@ -1788,13 +1773,12 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): coro = self.loop.create_datagram_endpoint( lambda: MyDatagramProto(create_future=True, loop=self.loop), local_addr=('127.0.0.1', 0), - reuse_address=True, reuse_port=reuseport_supported, allow_broadcast=True) transport, protocol = self.loop.run_until_complete(coro) sock = transport.get_extra_info('socket') - self.assertTrue( + self.assertFalse( sock.getsockopt( socket.SOL_SOCKET, socket.SO_REUSEADDR)) if reuseport_supported: @@ -1809,6 +1793,29 @@ class BaseEventLoopWithSelectorTests(test_utils.TestCase): self.loop.run_until_complete(protocol.done) self.assertEqual('CLOSED', protocol.state) + def test_create_datagram_endpoint_reuse_address_error(self): + # bpo-37228: Ensure that explicit passing of `reuse_address=True` + # raises an error, as it is not safe to use SO_REUSEADDR when using UDP + + coro = self.loop.create_datagram_endpoint( + lambda: MyDatagramProto(create_future=True, loop=self.loop), + local_addr=('127.0.0.1', 0), + reuse_address=True) + + with self.assertRaises(ValueError): + self.loop.run_until_complete(coro) + + def test_create_datagram_endpoint_reuse_address_warning(self): + # bpo-37228: Deprecate *reuse_address* parameter + + coro = self.loop.create_datagram_endpoint( + lambda: MyDatagramProto(create_future=True, loop=self.loop), + local_addr=('127.0.0.1', 0), + reuse_address=False) + + with self.assertWarns(DeprecationWarning): + self.loop.run_until_complete(coro) + @patch_socket def test_create_datagram_endpoint_nosoreuseport(self, m_socket): del m_socket.SO_REUSEPORT diff --git a/Lib/test/test_asyncio/test_streams.py b/Lib/test/test_asyncio/test_streams.py index b9413ab35fc..12bd536911d 100644 --- a/Lib/test/test_asyncio/test_streams.py +++ b/Lib/test/test_asyncio/test_streams.py @@ -924,59 +924,6 @@ os.close(fd) wr.close() self.loop.run_until_complete(wr.wait_closed()) - def test_del_stream_before_sock_closing(self): - messages = [] - self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx)) - - with test_utils.run_test_server() as httpd: - with self.assertWarns(DeprecationWarning): - rd, wr = self.loop.run_until_complete( - asyncio.open_connection(*httpd.address, loop=self.loop)) - sock = wr.get_extra_info('socket') - self.assertNotEqual(sock.fileno(), -1) - - wr.write(b'GET / HTTP/1.0\r\n\r\n') - f = rd.readline() - data = self.loop.run_until_complete(f) - self.assertEqual(data, b'HTTP/1.0 200 OK\r\n') - - # drop refs to reader/writer - del rd - del wr - gc.collect() - # make a chance to close the socket - test_utils.run_briefly(self.loop) - - self.assertEqual(1, len(messages)) - self.assertEqual(sock.fileno(), -1) - - self.assertEqual(1, len(messages)) - self.assertEqual('An open stream object is being garbage ' - 'collected; call "stream.close()" explicitly.', - messages[0]['message']) - - def test_del_stream_before_connection_made(self): - messages = [] - self.loop.set_exception_handler(lambda loop, ctx: messages.append(ctx)) - - with test_utils.run_test_server() as httpd: - rd = asyncio.StreamReader(loop=self.loop) - pr = asyncio.StreamReaderProtocol(rd, loop=self.loop) - del rd - gc.collect() - tr, _ = self.loop.run_until_complete( - self.loop.create_connection( - lambda: pr, *httpd.address)) - - sock = tr.get_extra_info('socket') - self.assertEqual(sock.fileno(), -1) - - self.assertEqual(1, len(messages)) - self.assertEqual('An open stream was garbage collected prior to ' - 'establishing network connection; ' - 'call "stream.close()" explicitly.', - messages[0]['message']) - def test_async_writer_api(self): async def inner(httpd): rd, wr = await asyncio.open_connection(*httpd.address) diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py index 41f9fae1022..73dd5c5b7db 100644 --- a/Lib/test/test_audit.py +++ b/Lib/test/test_audit.py @@ -24,7 +24,23 @@ class AuditTest(unittest.TestCase): sys.stdout.writelines(p.stdout) sys.stderr.writelines(p.stderr) if p.returncode: - self.fail(''.join(p.stderr)) + self.fail("".join(p.stderr)) + + def run_python(self, *args): + events = [] + with subprocess.Popen( + [sys.executable, "-X utf8", AUDIT_TESTS_PY, *args], + encoding="utf-8", + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) as p: + p.wait() + sys.stderr.writelines(p.stderr) + return ( + p.returncode, + [line.strip().partition(" ") for line in p.stdout], + "".join(p.stderr), + ) def test_basic(self): self.do_test("test_basic") @@ -36,19 +52,11 @@ class AuditTest(unittest.TestCase): self.do_test("test_block_add_hook_baseexception") def test_finalize_hooks(self): - events = [] - with subprocess.Popen( - [sys.executable, "-X utf8", AUDIT_TESTS_PY, "test_finalize_hooks"], - encoding="utf-8", - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - ) as p: - p.wait() - for line in p.stdout: - events.append(line.strip().partition(" ")) - sys.stderr.writelines(p.stderr) - if p.returncode: - self.fail(''.join(p.stderr)) + returncode, events, stderr = self.run_python("test_finalize_hooks") + if stderr: + print(stderr, file=sys.stderr) + if returncode: + self.fail(stderr) firstId = events[0][2] self.assertSequenceEqual( @@ -76,6 +84,40 @@ class AuditTest(unittest.TestCase): def test_mmap(self): self.do_test("test_mmap") + def test_excepthook(self): + returncode, events, stderr = self.run_python("test_excepthook") + if not returncode: + self.fail(f"Expected fatal exception\n{stderr}") + + self.assertSequenceEqual( + [("sys.excepthook", " ", "RuntimeError('fatal-error')")], events + ) + + def test_unraisablehook(self): + returncode, events, stderr = self.run_python("test_unraisablehook") + if returncode: + self.fail(stderr) + + self.assertEqual(events[0][0], "sys.unraisablehook") + self.assertEqual( + events[0][2], + "RuntimeError('nonfatal-error') Exception ignored for audit hook test", + ) + + def test_winreg(self): + support.import_module("winreg") + returncode, events, stderr = self.run_python("test_winreg") + if returncode: + self.fail(stderr) + + self.assertEqual(events[0][0], "winreg.OpenKey") + self.assertEqual(events[1][0], "winreg.OpenKey/result") + expected = events[1][2] + self.assertTrue(expected) + self.assertSequenceEqual(["winreg.EnumKey", " ", f"{expected} 0"], events[2]) + self.assertSequenceEqual(["winreg.EnumKey", " ", f"{expected} 10000"], events[3]) + self.assertSequenceEqual(["winreg.PyHKEY.Detach", " ", expected], events[4]) + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py index 20244351097..e65973c4646 100644 --- a/Lib/test/test_capi.py +++ b/Lib/test/test_capi.py @@ -351,9 +351,11 @@ class CAPITest(unittest.TestCase): for i in range(1000): L = MyList((L,)) + @support.requires_resource('cpu') def test_trashcan_python_class1(self): self.do_test_trashcan_python_class(list) + @support.requires_resource('cpu') def test_trashcan_python_class2(self): from _testcapi import MyList self.do_test_trashcan_python_class(MyList) diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py index 497bfa9eb89..47810020dd3 100644 --- a/Lib/test/test_cmd_line.py +++ b/Lib/test/test_cmd_line.py @@ -332,10 +332,10 @@ class CmdLineTest(unittest.TestCase): if sys.platform == 'win32': self.assertEqual(b'1\r\n2\r\n', out) - self.assertEqual(b'3\r\n4', err) + self.assertEqual(b'3\r\n4\r\n', err) else: self.assertEqual(b'1\n2\n', out) - self.assertEqual(b'3\n4', err) + self.assertEqual(b'3\n4\n', err) def test_unmached_quote(self): # Issue #10206: python program starting with unmatched quote @@ -391,7 +391,7 @@ class CmdLineTest(unittest.TestCase): stderr=subprocess.PIPE, preexec_fn=preexec) out, err = p.communicate() - self.assertEqual(support.strip_python_stderr(err), b'') + self.assertEqual(err, b'') self.assertEqual(p.returncode, 42) def test_no_stdin(self): diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py index 60723078efc..adfb8ce5ed2 100644 --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -223,12 +223,13 @@ class CmdLineTest(unittest.TestCase): def test_script_abspath(self): # pass the script using the relative path, expect the absolute path - # in __file__ and sys.argv[0] + # in __file__ with support.temp_cwd() as script_dir: self.assertTrue(os.path.isabs(script_dir), script_dir) script_name = _make_test_script(script_dir, 'script') - self._check_script(os.path.basename(script_name), script_name, script_name, + relative_name = os.path.basename(script_name) + self._check_script(relative_name, script_name, relative_name, script_dir, None, importlib.machinery.SourceFileLoader) @@ -535,7 +536,7 @@ class CmdLineTest(unittest.TestCase): script_name = _make_test_script(script_dir, 'script', script) exitcode, stdout, stderr = assert_python_failure(script_name) text = stderr.decode('ascii').split('\n') - self.assertEqual(len(text), 4) + self.assertEqual(len(text), 5) self.assertTrue(text[0].startswith('Traceback')) self.assertTrue(text[1].startswith(' File ')) self.assertTrue(text[3].startswith('NameError')) @@ -579,7 +580,7 @@ class CmdLineTest(unittest.TestCase): script_name = _make_test_script(script_dir, 'script', script) exitcode, stdout, stderr = assert_python_failure(script_name) text = stderr.decode('ascii') - self.assertEqual(text, "some text") + self.assertEqual(text.rstrip(), "some text") def test_syntaxerror_unindented_caret_position(self): script = "1 + 1 = 2\n" diff --git a/Lib/test/test_context.py b/Lib/test/test_context.py index efd7319a23a..b9e991a4000 100644 --- a/Lib/test/test_context.py +++ b/Lib/test/test_context.py @@ -38,9 +38,6 @@ class ContextTest(unittest.TestCase): self.assertNotEqual(hash(c), hash('aaa')) - def test_context_var_new_2(self): - self.assertIsNone(contextvars.ContextVar[int]) - @isolated_context def test_context_var_repr_1(self): c = contextvars.ContextVar('a') @@ -361,6 +358,10 @@ class ContextTest(unittest.TestCase): tp.shutdown() self.assertEqual(results, list(range(10))) + def test_contextvar_getitem(self): + clss = contextvars.ContextVar + self.assertEqual(clss[str], clss) + # HAMT Tests diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py index 943b3bb1ae9..cb99263a950 100644 --- a/Lib/test/test_dataclasses.py +++ b/Lib/test/test_dataclasses.py @@ -10,6 +10,7 @@ import builtins import unittest from unittest.mock import Mock from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar, Optional +from typing import get_type_hints from collections import deque, OrderedDict, namedtuple from functools import total_ordering @@ -2983,6 +2984,17 @@ class TestStringAnnotations(unittest.TestCase): # won't exist on the instance. self.assertNotIn('not_iv4', c.__dict__) + def test_text_annotations(self): + from test import dataclass_textanno + + self.assertEqual( + get_type_hints(dataclass_textanno.Bar), + {'foo': dataclass_textanno.Foo}) + self.assertEqual( + get_type_hints(dataclass_textanno.Bar.__init__), + {'foo': dataclass_textanno.Foo, + 'return': type(None)}) + class TestMakeDataclass(unittest.TestCase): def test_simple(self): diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index fecf203cc9b..5c1595268c5 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -278,32 +278,34 @@ dis_traceback = """\ --> 6 BINARY_TRUE_DIVIDE 8 POP_TOP 10 POP_BLOCK - 12 JUMP_FORWARD 40 (to 54) + 12 JUMP_FORWARD 44 (to 58) %3d >> 14 DUP_TOP 16 LOAD_GLOBAL 0 (Exception) 18 COMPARE_OP 10 (exception match) - 20 POP_JUMP_IF_FALSE 52 + 20 POP_JUMP_IF_FALSE 56 22 POP_TOP 24 STORE_FAST 0 (e) 26 POP_TOP - 28 SETUP_FINALLY 10 (to 40) + 28 SETUP_FINALLY 18 (to 48) %3d 30 LOAD_FAST 0 (e) 32 LOAD_ATTR 1 (__traceback__) 34 STORE_FAST 1 (tb) 36 POP_BLOCK - 38 BEGIN_FINALLY - >> 40 LOAD_CONST 0 (None) + 38 POP_EXCEPT + 40 LOAD_CONST 0 (None) 42 STORE_FAST 0 (e) 44 DELETE_FAST 0 (e) - 46 END_FINALLY - 48 POP_EXCEPT - 50 JUMP_FORWARD 2 (to 54) - >> 52 END_FINALLY + 46 JUMP_FORWARD 10 (to 58) + >> 48 LOAD_CONST 0 (None) + 50 STORE_FAST 0 (e) + 52 DELETE_FAST 0 (e) + 54 RERAISE + >> 56 RERAISE -%3d >> 54 LOAD_FAST 1 (tb) - 56 RETURN_VALUE +%3d >> 58 LOAD_FAST 1 (tb) + 60 RETURN_VALUE """ % (TRACEBACK_CODE.co_firstlineno + 1, TRACEBACK_CODE.co_firstlineno + 2, TRACEBACK_CODE.co_firstlineno + 3, @@ -752,7 +754,7 @@ Argument count: 0 Positional-only arguments: 0 Kw-only arguments: 0 Number of locals: 2 -Stack size: 10 +Stack size: 9 Flags: OPTIMIZED, NEWLOCALS, NOFREE, COROUTINE Constants: 0: None @@ -977,10 +979,10 @@ expected_opinfo_jumpy = [ Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=96, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=98, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=100, starts_line=None, is_jump_target=False), - Instruction(opname='SETUP_FINALLY', opcode=122, arg=70, argval=174, argrepr='to 174', offset=102, starts_line=20, is_jump_target=True), + Instruction(opname='SETUP_FINALLY', opcode=122, arg=98, argval=202, argrepr='to 202', offset=102, starts_line=20, is_jump_target=True), Instruction(opname='SETUP_FINALLY', opcode=122, arg=12, argval=118, argrepr='to 118', offset=104, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=1, argrepr='1', offset=106, starts_line=21, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval=0, argrepr='0', offset=108, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval=0, argrepr='0', offset=108, starts_line=None, is_jump_target=False), Instruction(opname='BINARY_TRUE_DIVIDE', opcode=27, arg=None, argval=None, argrepr='', offset=110, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=112, starts_line=None, is_jump_target=False), Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=114, starts_line=None, is_jump_target=False), @@ -993,33 +995,47 @@ expected_opinfo_jumpy = [ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=128, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=130, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=132, starts_line=23, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=9, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=134, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=134, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=136, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=138, starts_line=None, is_jump_target=False), Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=140, starts_line=None, is_jump_target=False), - Instruction(opname='JUMP_FORWARD', opcode=110, arg=26, argval=170, argrepr='to 170', offset=142, starts_line=None, is_jump_target=False), - Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=144, starts_line=None, is_jump_target=True), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=46, argval=190, argrepr='to 190', offset=142, starts_line=None, is_jump_target=False), + Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=144, starts_line=None, is_jump_target=True), Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=146, starts_line=25, is_jump_target=True), - Instruction(opname='SETUP_WITH', opcode=143, arg=14, argval=164, argrepr='to 164', offset=148, starts_line=None, is_jump_target=False), + Instruction(opname='SETUP_WITH', opcode=143, arg=24, argval=174, argrepr='to 174', offset=148, starts_line=None, is_jump_target=False), Instruction(opname='STORE_FAST', opcode=125, arg=1, argval='dodgy', argrepr='dodgy', offset=150, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=152, starts_line=26, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval='Never reach this', argrepr="'Never reach this'", offset=154, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=9, argval='Never reach this', argrepr="'Never reach this'", offset=154, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=156, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=158, starts_line=None, is_jump_target=False), Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=160, starts_line=None, is_jump_target=False), - Instruction(opname='BEGIN_FINALLY', opcode=53, arg=None, argval=None, argrepr='', offset=162, starts_line=None, is_jump_target=False), - Instruction(opname='WITH_CLEANUP_START', opcode=81, arg=None, argval=None, argrepr='', offset=164, starts_line=None, is_jump_target=True), - Instruction(opname='WITH_CLEANUP_FINISH', opcode=82, arg=None, argval=None, argrepr='', offset=166, starts_line=None, is_jump_target=False), - Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=168, starts_line=None, is_jump_target=False), - Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=170, starts_line=None, is_jump_target=True), - Instruction(opname='BEGIN_FINALLY', opcode=53, arg=None, argval=None, argrepr='', offset=172, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=174, starts_line=28, is_jump_target=True), - Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=176, starts_line=None, is_jump_target=False), - Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=178, starts_line=None, is_jump_target=False), - Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=180, starts_line=None, is_jump_target=False), - Instruction(opname='END_FINALLY', opcode=88, arg=None, argval=None, argrepr='', offset=182, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=184, starts_line=None, is_jump_target=False), - Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=162, starts_line=None, is_jump_target=False), + Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=164, starts_line=None, is_jump_target=False), + Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=166, starts_line=None, is_jump_target=False), + Instruction(opname='CALL_FUNCTION', opcode=131, arg=3, argval=3, argrepr='', offset=168, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=170, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=16, argval=190, argrepr='to 190', offset=172, starts_line=None, is_jump_target=False), + Instruction(opname='WITH_EXCEPT_START', opcode=49, arg=None, argval=None, argrepr='', offset=174, starts_line=None, is_jump_target=True), + Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=180, argval=180, argrepr='', offset=176, starts_line=None, is_jump_target=False), + Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=178, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=180, starts_line=None, is_jump_target=True), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=182, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=184, starts_line=None, is_jump_target=False), + Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=188, starts_line=None, is_jump_target=False), + Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=190, starts_line=None, is_jump_target=True), + Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=192, starts_line=28, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=194, starts_line=None, is_jump_target=False), + Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=196, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=198, starts_line=None, is_jump_target=False), + Instruction(opname='JUMP_FORWARD', opcode=110, arg=10, argval=212, argrepr='to 212', offset=200, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=202, starts_line=None, is_jump_target=True), + Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=204, starts_line=None, is_jump_target=False), + Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=206, starts_line=None, is_jump_target=False), + Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=208, starts_line=None, is_jump_target=False), + Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=210, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=212, starts_line=None, is_jump_target=True), + Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=214, starts_line=None, is_jump_target=False) ] # One last piece of inspect fodder to check the default line number handling @@ -1032,6 +1048,10 @@ expected_opinfo_simple = [ class InstructionTests(BytecodeTestCase): + def __init__(self, *args): + super().__init__(*args) + self.maxDiff = None + def test_default_first_line(self): actual = dis.get_instructions(simple) self.assertEqual(list(actual), expected_opinfo_simple) @@ -1063,6 +1083,7 @@ class InstructionTests(BytecodeTestCase): # get_instructions has its own tests above, so can rely on it to validate # the object oriented API class BytecodeTests(unittest.TestCase): + def test_instantiation(self): # Test with function, method, code string and code object for obj in [_f, _C(1).__init__, "a=1", _f.__code__]: diff --git a/Lib/test/test_email/test__header_value_parser.py b/Lib/test/test_email/test__header_value_parser.py index 46d90b38e91..1bdcfa129b4 100644 --- a/Lib/test/test_email/test__header_value_parser.py +++ b/Lib/test/test_email/test__header_value_parser.py @@ -2583,6 +2583,11 @@ class TestParser(TestParserMixin, TestEmailBase): # get_msg_id + def test_get_msg_id_empty(self): + # bpo-38708: Test that HeaderParseError is raised and not IndexError. + with self.assertRaises(errors.HeaderParseError): + parser.get_msg_id('') + def test_get_msg_id_valid(self): msg_id = self._test_get_x( parser.get_msg_id, @@ -2638,6 +2643,46 @@ class TestParser(TestParserMixin, TestEmailBase): ) self.assertEqual(msg_id.token_type, 'msg-id') + def test_get_msg_id_invalid_expected_msg_id_not_found(self): + text = "935-XPB-567:0:45327:9:90305:17843586-40@example.com" + msg_id = parser.parse_message_id(text) + self.assertDefectsEqual( + msg_id.all_defects, + [errors.InvalidHeaderDefect]) + + def test_parse_invalid_message_id(self): + message_id = self._test_parse_x( + parser.parse_message_id, + "935-XPB-567:0:45327:9:90305:17843586-40@example.com", + "935-XPB-567:0:45327:9:90305:17843586-40@example.com", + "935-XPB-567:0:45327:9:90305:17843586-40@example.com", + [errors.InvalidHeaderDefect], + ) + self.assertEqual(message_id.token_type, 'invalid-message-id') + + def test_parse_valid_message_id(self): + message_id = self._test_parse_x( + parser.parse_message_id, + "", + "", + "", + [], + ) + self.assertEqual(message_id.token_type, 'message-id') + + def test_parse_message_id_with_remaining(self): + message_id = self._test_parse_x( + parser.parse_message_id, + "thensomething", + "", + "", + [errors.InvalidHeaderDefect], + [], + ) + self.assertEqual(message_id.token_type, 'message-id') + self.assertEqual(str(message_id.all_defects[0]), + "Unexpected 'thensomething'") + def test_get_msg_id_no_angle_start(self): with self.assertRaises(errors.HeaderParseError): parser.get_msg_id("msgwithnoankle") @@ -2654,6 +2699,7 @@ class TestParser(TestParserMixin, TestEmailBase): self.assertEqual(msg_id.token_type, 'msg-id') + @parameterize class Test_parse_mime_parameters(TestParserMixin, TestEmailBase): diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index b87863a372a..60f7f7a93ea 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -858,10 +858,9 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase): preconfig = { 'allocator': PYMEM_ALLOCATOR_DEBUG, } - script_abspath = os.path.abspath('script.py') config = { - 'argv': [script_abspath], - 'run_filename': script_abspath, + 'argv': ['script.py'], + 'run_filename': os.path.abspath('script.py'), 'dev_mode': 1, 'faulthandler': 1, 'warnoptions': ['default'], diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index a4427a537d1..ac8cf4686bf 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -71,9 +71,8 @@ class FaultHandlerTests(unittest.TestCase): with support.SuppressCrashReport(): process = script_helper.spawn_python('-c', code, pass_fds=pass_fds) with process: - stdout, stderr = process.communicate() + output, stderr = process.communicate() exitcode = process.wait() - output = support.strip_python_stderr(stdout) output = output.decode('ascii', 'backslashreplace') if filename: self.assertEqual(output, '') diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py index fdb8752b668..c0d4a7507ae 100644 --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -1,7 +1,7 @@ import unittest import unittest.mock from test.support import (verbose, refcount_test, run_unittest, - strip_python_stderr, cpython_only, start_threads, + cpython_only, start_threads, temp_dir, requires_type_collecting, TESTFN, unlink, import_module) from test.support.script_helper import assert_python_ok, make_script @@ -671,8 +671,8 @@ class GCTests(unittest.TestCase): p.stdout.close() p.stderr.close() self.assertEqual(p.returncode, 0) - self.assertEqual(stdout.strip(), b"") - return strip_python_stderr(stderr) + self.assertEqual(stdout, b"") + return stderr stderr = run_command(code % "0") self.assertIn(b"ResourceWarning: gc: 2 uncollectable objects at " diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py index ea00367c802..23c108f6e3c 100644 --- a/Lib/test/test_hmac.py +++ b/Lib/test/test_hmac.py @@ -367,7 +367,7 @@ class ConstructorTestCase(unittest.TestCase): digestmod="sha256") except Exception: self.fail("Constructor call with bytearray arguments raised exception.") - self.assertEqual(h.hexdigest(), self.expected) + self.assertEqual(h.hexdigest(), self.expected) @requires_hashdigest('sha256') def test_with_memoryview_msg(self): @@ -375,7 +375,7 @@ class ConstructorTestCase(unittest.TestCase): h = hmac.HMAC(b"key", memoryview(b"hash this!"), digestmod="sha256") except Exception: self.fail("Constructor call with memoryview msg raised exception.") - self.assertEqual(h.hexdigest(), self.expected) + self.assertEqual(h.hexdigest(), self.expected) @requires_hashdigest('sha256') def test_withmodule(self): diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py index 853a4004496..2d7077af6da 100644 --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -123,6 +123,13 @@ class DateTimeTests(unittest.TestCase): "http2time(%s) is not None\n" "http2time(test) %s" % (test, http2time(test))) + def test_http2time_redos_regression_actually_completes(self): + # LOOSE_HTTP_DATE_RE was vulnerable to malicious input which caused catastrophic backtracking (REDoS). + # If we regress to cubic complexity, this test will take a very long time to succeed. + # If fixed, it should complete within a fraction of a second. + http2time("01 Jan 1970{}00:00:00 GMT!".format(" " * 10 ** 5)) + http2time("01 Jan 1970 00:00:00{}GMT!".format(" " * 10 ** 5)) + def test_iso2time(self): def parse_date(text): return time.gmtime(iso2time(text))[:6] @@ -180,6 +187,12 @@ class DateTimeTests(unittest.TestCase): self.assertIsNone(iso2time(test), "iso2time(%r)" % test) + def test_iso2time_performance_regression(self): + # If ISO_DATE_RE regresses to quadratic complexity, this test will take a very long time to succeed. + # If fixed, it should complete within a fraction of a second. + iso2time('1994-02-03{}14:15:29 -0100!'.format(' '*10**6)) + iso2time('1994-02-03 14:15:29{}-0100!'.format(' '*10**6)) + class HeaderTests(unittest.TestCase): diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index 1c980a2fa66..c442f5571a8 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -601,13 +601,20 @@ class CGIHTTPServerTestCase(BaseTestCase): self.parent_dir = tempfile.mkdtemp() self.cgi_dir = os.path.join(self.parent_dir, 'cgi-bin') self.cgi_child_dir = os.path.join(self.cgi_dir, 'child-dir') + self.sub_dir_1 = os.path.join(self.parent_dir, 'sub') + self.sub_dir_2 = os.path.join(self.sub_dir_1, 'dir') + self.cgi_dir_in_sub_dir = os.path.join(self.sub_dir_2, 'cgi-bin') os.mkdir(self.cgi_dir) os.mkdir(self.cgi_child_dir) + os.mkdir(self.sub_dir_1) + os.mkdir(self.sub_dir_2) + os.mkdir(self.cgi_dir_in_sub_dir) self.nocgi_path = None self.file1_path = None self.file2_path = None self.file3_path = None self.file4_path = None + self.file5_path = None # The shebang line should be pure ASCII: use symlink if possible. # See issue #7668. @@ -652,6 +659,11 @@ class CGIHTTPServerTestCase(BaseTestCase): file4.write(cgi_file4 % (self.pythonexe, 'QUERY_STRING')) os.chmod(self.file4_path, 0o777) + self.file5_path = os.path.join(self.cgi_dir_in_sub_dir, 'file5.py') + with open(self.file5_path, 'w', encoding='utf-8') as file5: + file5.write(cgi_file1 % self.pythonexe) + os.chmod(self.file5_path, 0o777) + os.chdir(self.parent_dir) def tearDown(self): @@ -669,8 +681,13 @@ class CGIHTTPServerTestCase(BaseTestCase): os.remove(self.file3_path) if self.file4_path: os.remove(self.file4_path) + if self.file5_path: + os.remove(self.file5_path) os.rmdir(self.cgi_child_dir) os.rmdir(self.cgi_dir) + os.rmdir(self.cgi_dir_in_sub_dir) + os.rmdir(self.sub_dir_2) + os.rmdir(self.sub_dir_1) os.rmdir(self.parent_dir) finally: BaseTestCase.tearDown(self) @@ -789,6 +806,17 @@ class CGIHTTPServerTestCase(BaseTestCase): 'text/html', HTTPStatus.OK), (res.read(), res.getheader('Content-type'), res.status)) + def test_cgi_path_in_sub_directories(self): + try: + CGIHTTPRequestHandler.cgi_directories.append('/sub/dir/cgi-bin') + res = self.request('/sub/dir/cgi-bin/file5.py') + self.assertEqual( + (b'Hello World' + self.linesep, 'text/html', HTTPStatus.OK), + (res.read(), res.getheader('Content-type'), res.status)) + finally: + CGIHTTPRequestHandler.cgi_directories.remove('/sub/dir/cgi-bin') + + class SocketlessRequestHandler(SimpleHTTPRequestHandler): def __init__(self, directory=None): diff --git a/Lib/test/test_json/test_tool.py b/Lib/test/test_json/test_tool.py index 1e95bc79e5d..c9a969b3033 100644 --- a/Lib/test/test_json/test_tool.py +++ b/Lib/test/test_json/test_tool.py @@ -2,7 +2,7 @@ import os import sys import textwrap import unittest -from subprocess import Popen, PIPE +import subprocess from test import support from test.support.script_helper import assert_python_ok @@ -84,16 +84,15 @@ class TestTool(unittest.TestCase): def test_stdin_stdout(self): args = sys.executable, '-m', 'json.tool' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - out, err = proc.communicate(self.data.encode()) - self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=self.data, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, self.expect) + self.assertEqual(process.stderr, '') - def _create_infile(self): + def _create_infile(self, data=None): infile = support.TESTFN - with open(infile, "w") as fp: + with open(infile, "w", encoding="utf-8") as fp: self.addCleanup(os.remove, infile) - fp.write(self.data) + fp.write(data or self.data) return infile def test_infile_stdout(self): @@ -103,6 +102,21 @@ class TestTool(unittest.TestCase): self.assertEqual(out.splitlines(), self.expect.encode().splitlines()) self.assertEqual(err, b'') + def test_non_ascii_infile(self): + data = '{"msg": "\u3053\u3093\u306b\u3061\u306f"}' + expect = textwrap.dedent('''\ + { + "msg": "\\u3053\\u3093\\u306b\\u3061\\u306f" + } + ''').encode() + + infile = self._create_infile(data) + rc, out, err = assert_python_ok('-m', 'json.tool', infile) + + self.assertEqual(rc, 0) + self.assertEqual(out.splitlines(), expect.splitlines()) + self.assertEqual(err, b'') + def test_infile_outfile(self): infile = self._create_infile() outfile = support.TESTFN + '.out' @@ -116,10 +130,9 @@ class TestTool(unittest.TestCase): def test_jsonlines(self): args = sys.executable, '-m', 'json.tool', '--json-lines' - with Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE) as proc: - out, err = proc.communicate(self.jsonlines_raw.encode()) - self.assertEqual(out.splitlines(), self.jsonlines_expect.encode().splitlines()) - self.assertEqual(err, b'') + process = subprocess.run(args, input=self.jsonlines_raw, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, self.jsonlines_expect) + self.assertEqual(process.stderr, '') def test_help_flag(self): rc, out, err = assert_python_ok('-m', 'json.tool', '-h') @@ -134,3 +147,62 @@ class TestTool(unittest.TestCase): self.assertEqual(out.splitlines(), self.expect_without_sort_keys.encode().splitlines()) self.assertEqual(err, b'') + + def test_indent(self): + input_ = '[1, 2]' + expect = textwrap.dedent('''\ + [ + 1, + 2 + ] + ''') + args = sys.executable, '-m', 'json.tool', '--indent', '2' + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') + + def test_no_indent(self): + input_ = '[1,\n2]' + expect = '[1, 2]\n' + args = sys.executable, '-m', 'json.tool', '--no-indent' + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') + + def test_tab(self): + input_ = '[1, 2]' + expect = '[\n\t1,\n\t2\n]\n' + args = sys.executable, '-m', 'json.tool', '--tab' + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') + + def test_compact(self): + input_ = '[ 1 ,\n 2]' + expect = '[1,2]\n' + args = sys.executable, '-m', 'json.tool', '--compact' + process = subprocess.run(args, input=input_, capture_output=True, text=True, check=True) + self.assertEqual(process.stdout, expect) + self.assertEqual(process.stderr, '') + + def test_no_ensure_ascii_flag(self): + infile = self._create_infile('{"key":"💩"}') + outfile = support.TESTFN + '.out' + self.addCleanup(os.remove, outfile) + assert_python_ok('-m', 'json.tool', '--no-ensure-ascii', infile, outfile) + with open(outfile, "rb") as f: + lines = f.read().splitlines() + # asserting utf-8 encoded output file + expected = [b'{', b' "key": "\xf0\x9f\x92\xa9"', b"}"] + self.assertEqual(lines, expected) + + def test_ensure_ascii_default(self): + infile = self._create_infile('{"key":"💩"}') + outfile = support.TESTFN + '.out' + self.addCleanup(os.remove, outfile) + assert_python_ok('-m', 'json.tool', infile, outfile) + with open(outfile, "rb") as f: + lines = f.read().splitlines() + # asserting an ascii encoded output file + expected = [b'{', rb' "key": "\ud83d\udca9"', b"}"] + self.assertEqual(lines, expected) diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py index 53101b3badb..7ce37e8dbd6 100644 --- a/Lib/test/test_long.py +++ b/Lib/test/test_long.py @@ -956,6 +956,14 @@ class LongTest(unittest.TestCase): self.assertEqual(huge >> (sys.maxsize + 1), (1 << 499) + 5) self.assertEqual(huge >> (sys.maxsize + 1000), 0) + @support.cpython_only + def test_small_ints_in_huge_calculation(self): + a = 2 ** 100 + b = -a + 1 + c = a + 1 + self.assertIs(a + b, 1) + self.assertIs(c - a, 1) + def test_small_ints(self): for i in range(-5, 257): self.assertIs(i, i + 0) diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index f832246dda3..5c35c8cff12 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -676,7 +676,6 @@ class MathTests(unittest.TestCase): float.fromhex('0x1.df11f45f4e61ap+2')), ([(-1.)**n/n for n in range(1, 1001)], float.fromhex('-0x1.62a2af1bd3624p-1')), - ([1.7**(i+1)-1.7**i for i in range(1000)] + [-1.7**1000], -1.0), ([1e16, 1., 1e-16], 10000000000000002.0), ([1e16-2., 1.-2.**-53, -(1e16-2.), -(1.-2.**-53)], 0.0), # exercise code for resizing partials array @@ -685,6 +684,13 @@ class MathTests(unittest.TestCase): float.fromhex('0x1.5555555555555p+970')), ] + # Telescoping sum, with exact differences (due to Sterbenz) + terms = [1.7**i for i in range(1001)] + test_values.append(( + [terms[i+1] - terms[i] for i in range(1000)] + [-terms[1000]], + -terms[0] + )) + for i, (vals, expected) in enumerate(test_values): try: actual = math.fsum(vals) diff --git a/Lib/test/test_mimetypes.py b/Lib/test/test_mimetypes.py index bfd5eeedaa7..a5a06b189de 100644 --- a/Lib/test/test_mimetypes.py +++ b/Lib/test/test_mimetypes.py @@ -51,6 +51,21 @@ class MimeTypesTestCase(unittest.TestCase): eq(self.db.guess_type('foo.xul', strict=False), ('text/xul', None)) eq(self.db.guess_extension('image/jpg', strict=False), '.jpg') + def test_filename_with_url_delimiters(self): + # bpo-38449: URL delimiters cases should be handled also. + # They would have different mime types if interpreted as URL as + # compared to when interpreted as filename because of the semicolon. + eq = self.assertEqual + gzip_expected = ('application/x-tar', 'gzip') + eq(self.db.guess_type(";1.tar.gz"), gzip_expected) + eq(self.db.guess_type("?1.tar.gz"), gzip_expected) + eq(self.db.guess_type("#1.tar.gz"), gzip_expected) + eq(self.db.guess_type("#1#.tar.gz"), gzip_expected) + eq(self.db.guess_type(";1#.tar.gz"), gzip_expected) + eq(self.db.guess_type(";&1=123;?.tar.gz"), gzip_expected) + eq(self.db.guess_type("?k1=v1&k2=v2.tar.gz"), gzip_expected) + eq(self.db.guess_type(r" \"\`;b&b&c |.tar.gz"), gzip_expected) + def test_guess_all_types(self): eq = self.assertEqual unless = self.assertTrue diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index bf40cb1e8fa..f44ddbad7d6 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -4048,6 +4048,9 @@ class TestPEP519(unittest.TestCase): self.assertRaises(ZeroDivisionError, self.fspath, FakePath(ZeroDivisionError())) + def test_pathlike_class_getitem(self): + self.assertIs(os.PathLike[bytes], os.PathLike) + class TimesTests(unittest.TestCase): def test_times(self): diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py index 058a201aebc..b8e7fcc2e30 100644 --- a/Lib/test/test_pathlib.py +++ b/Lib/test/test_pathlib.py @@ -2217,6 +2217,9 @@ class _BasePathTest(object): class PathTest(_BasePathTest, unittest.TestCase): cls = pathlib.Path + def test_class_getitem(self): + self.assertIs(self.cls[str], self.cls) + def test_concrete_class(self): p = self.cls('a') self.assertIs(type(p), diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py index 98a39c3f040..4df882b6210 100644 --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -1476,6 +1476,8 @@ class PosixTester(unittest.TestCase): os.pidfd_open(-1) if cm.exception.errno == errno.ENOSYS: self.skipTest("system does not support pidfd_open") + if isinstance(cm.exception, PermissionError): + self.skipTest(f"pidfd_open syscall blocked: {cm.exception!r}") self.assertEqual(cm.exception.errno, errno.EINVAL) os.close(os.pidfd_open(os.getpid(), 0)) diff --git a/Lib/test/test_pty.py b/Lib/test/test_pty.py index 3b448569a2f..ce85f575a08 100644 --- a/Lib/test/test_pty.py +++ b/Lib/test/test_pty.py @@ -66,16 +66,27 @@ def _readline(fd): # XXX(nnorwitz): these tests leak fds when there is an error. class PtyTest(unittest.TestCase): def setUp(self): - # isatty() and close() can hang on some platforms. Set an alarm - # before running the test to make sure we don't hang forever. old_alarm = signal.signal(signal.SIGALRM, self.handle_sig) self.addCleanup(signal.signal, signal.SIGALRM, old_alarm) + + old_sighup = signal.signal(signal.SIGHUP, self.handle_sighup) + self.addCleanup(signal.signal, signal.SIGHUP, old_alarm) + + # isatty() and close() can hang on some platforms. Set an alarm + # before running the test to make sure we don't hang forever. self.addCleanup(signal.alarm, 0) signal.alarm(10) def handle_sig(self, sig, frame): self.fail("isatty hung") + @staticmethod + def handle_sighup(sig, frame): + # if the process is the session leader, os.close(master_fd) + # of "master_fd, slave_name = pty.master_open()" raises SIGHUP + # signal: just ignore the signal. + pass + def test_basic(self): try: debug("Calling master_open()") @@ -122,9 +133,11 @@ class PtyTest(unittest.TestCase): self.assertEqual(b'For my pet fish, Eric.\n', normalize_output(s2)) os.close(slave_fd) + # closing master_fd can raise a SIGHUP if the process is + # the session leader: we installed a SIGHUP signal handler + # to ignore this signal. os.close(master_fd) - def test_fork(self): debug("calling pty.fork()") pid, master_fd = pty.fork() diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py index 4385271cd0f..869799cfa9a 100644 --- a/Lib/test/test_pyclbr.py +++ b/Lib/test/test_pyclbr.py @@ -247,7 +247,7 @@ class ReadmoduleTests(TestCase): # not a package. # # Issue #14798. - self.assertRaises(ImportError, pyclbr.readmodule_ex, 'asyncore.foo') + self.assertRaises(ImportError, pyclbr.readmodule_ex, 'asyncio.foo') def test_module_has_no_spec(self): module_name = "doesnotexist" diff --git a/Lib/test/test_random.py b/Lib/test/test_random.py index f59c5652b5d..2c8c8e88545 100644 --- a/Lib/test/test_random.py +++ b/Lib/test/test_random.py @@ -241,6 +241,11 @@ class TestBasicOps: choices = self.gen.choices choices(population=[1, 2], weights=[1e-323, 1e-323], k=5000) + def test_choices_with_all_zero_weights(self): + # See issue #38881 + with self.assertRaises(ValueError): + self.gen.choices('AB', [0.0, 0.0]) + def test_gauss(self): # Ensure that the seed() method initializes all the hidden state. In # particular, through 2.2.1 it failed to reset a piece of state used diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py index dd5589b2e3a..460b979ba93 100644 --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -727,6 +727,17 @@ class TestCopyTree(BaseTest, unittest.TestCase): rv = shutil.copytree(src_dir, dst_dir) self.assertEqual(['foo'], os.listdir(rv)) + def test_copytree_subdirectory(self): + # copytree where dst is a subdirectory of src, see Issue 38688 + base_dir = self.mkdtemp() + self.addCleanup(shutil.rmtree, base_dir, ignore_errors=True) + src_dir = os.path.join(base_dir, "t", "pg") + dst_dir = os.path.join(src_dir, "somevendor", "1.0") + os.makedirs(src_dir) + src = os.path.join(src_dir, 'pol') + write_file(src, 'pol') + rv = shutil.copytree(src_dir, dst_dir) + self.assertEqual(['pol'], os.listdir(rv)) class TestCopy(BaseTest, unittest.TestCase): diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 3cd6e927a46..4f70799465c 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -488,7 +488,7 @@ class BasicSocketTests(unittest.TestCase): ('email', 'null@python.org\x00user@example.org'), ('URI', 'http://null.python.org\x00http://example.org'), ('IP Address', '192.0.2.1'), - ('IP Address', '2001:DB8:0:0:0:0:0:1\n')) + ('IP Address', '2001:DB8:0:0:0:0:0:1')) else: # OpenSSL 0.9.7 doesn't support IPv6 addresses in subjectAltName san = (('DNS', 'altnull.python.org\x00example.com'), @@ -515,7 +515,7 @@ class BasicSocketTests(unittest.TestCase): (('commonName', 'dirname example'),))), ('URI', 'https://www.python.org/'), ('IP Address', '127.0.0.1'), - ('IP Address', '0:0:0:0:0:0:0:1\n'), + ('IP Address', '0:0:0:0:0:0:0:1'), ('Registered ID', '1.2.3.4.5') ) ) @@ -542,11 +542,11 @@ class BasicSocketTests(unittest.TestCase): # Some sanity checks follow # >= 0.9 self.assertGreaterEqual(n, 0x900000) - # < 3.0 - self.assertLess(n, 0x30000000) + # < 4.0 + self.assertLess(n, 0x40000000) major, minor, fix, patch, status = t - self.assertGreaterEqual(major, 0) - self.assertLess(major, 3) + self.assertGreaterEqual(major, 1) + self.assertLess(major, 4) self.assertGreaterEqual(minor, 0) self.assertLess(minor, 256) self.assertGreaterEqual(fix, 0) @@ -1203,12 +1203,18 @@ class ContextTests(unittest.TestCase): # RHEL 8 uses TLS 1.2 by default ssl.TLSVersion.TLSv1_2 } + maximum_range = { + # stock OpenSSL + ssl.TLSVersion.MAXIMUM_SUPPORTED, + # Fedora 32 uses TLS 1.3 by default + ssl.TLSVersion.TLSv1_3 + } self.assertIn( ctx.minimum_version, minimum_range ) - self.assertEqual( - ctx.maximum_version, ssl.TLSVersion.MAXIMUM_SUPPORTED + self.assertIn( + ctx.maximum_version, maximum_range ) ctx.minimum_version = ssl.TLSVersion.TLSv1_1 diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py index bebd9b5d6f5..a9a427bc8d9 100644 --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -2192,7 +2192,7 @@ class TestQuantiles(unittest.TestCase): quantiles(padded_data, n=n, method='inclusive'), (n, data), ) - # Invariant under tranlation and scaling + # Invariant under translation and scaling def f(x): return 3.5 * x - 1234.675 exp = list(map(f, expected)) @@ -2232,7 +2232,7 @@ class TestQuantiles(unittest.TestCase): result = quantiles(map(datatype, data), n=n, method="inclusive") self.assertTrue(all(type(x) == datatype) for x in result) self.assertEqual(result, list(map(datatype, expected))) - # Invariant under tranlation and scaling + # Invariant under translation and scaling def f(x): return 3.5 * x - 1234.675 exp = list(map(f, expected)) diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py index 97dc09c5649..f806be817b5 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -85,15 +85,6 @@ class BaseTestCase(unittest.TestCase): self.doCleanups() support.reap_children() - def assertStderrEqual(self, stderr, expected, msg=None): - # In a debug build, stuff like "[6580 refs]" is printed to stderr at - # shutdown time. That frustrates tests trying to check stderr produced - # from a spawned Python process. - actual = support.strip_python_stderr(stderr) - # strip_python_stderr also strips whitespace, so we do too. - expected = expected.strip() - self.assertEqual(actual, expected, msg) - class PopenTestException(Exception): pass @@ -547,7 +538,7 @@ class ProcessTestCase(BaseTestCase): 'import sys; sys.stderr.write("strawberry")'], stderr=subprocess.PIPE) with p: - self.assertStderrEqual(p.stderr.read(), b"strawberry") + self.assertEqual(p.stderr.read(), b"strawberry") def test_stderr_filedes(self): # stderr is set to open file descriptor @@ -559,7 +550,7 @@ class ProcessTestCase(BaseTestCase): stderr=d) p.wait() os.lseek(d, 0, 0) - self.assertStderrEqual(os.read(d, 1024), b"strawberry") + self.assertEqual(os.read(d, 1024), b"strawberry") def test_stderr_fileobj(self): # stderr is set to open file object @@ -570,7 +561,7 @@ class ProcessTestCase(BaseTestCase): stderr=tf) p.wait() tf.seek(0) - self.assertStderrEqual(tf.read(), b"strawberry") + self.assertEqual(tf.read(), b"strawberry") def test_stderr_redirect_with_no_stdout_redirect(self): # test stderr=STDOUT while stdout=None (not set) @@ -589,8 +580,8 @@ class ProcessTestCase(BaseTestCase): stderr=subprocess.PIPE) stdout, stderr = p.communicate() #NOTE: stdout should get stderr from grandchild - self.assertStderrEqual(stdout, b'42') - self.assertStderrEqual(stderr, b'') # should be empty + self.assertEqual(stdout, b'42') + self.assertEqual(stderr, b'') # should be empty self.assertEqual(p.returncode, 0) def test_stdout_stderr_pipe(self): @@ -603,7 +594,7 @@ class ProcessTestCase(BaseTestCase): stdout=subprocess.PIPE, stderr=subprocess.STDOUT) with p: - self.assertStderrEqual(p.stdout.read(), b"appleorange") + self.assertEqual(p.stdout.read(), b"appleorange") def test_stdout_stderr_file(self): # capture stdout and stderr to the same open file @@ -618,7 +609,7 @@ class ProcessTestCase(BaseTestCase): stderr=tf) p.wait() tf.seek(0) - self.assertStderrEqual(tf.read(), b"appleorange") + self.assertEqual(tf.read(), b"appleorange") def test_stdout_filedes_of_stdout(self): # stdout is set to 1 (#1531862). @@ -767,7 +758,7 @@ class ProcessTestCase(BaseTestCase): stderr=subprocess.PIPE) (stdout, stderr) = p.communicate() self.assertEqual(stdout, None) - self.assertStderrEqual(stderr, b"pineapple") + self.assertEqual(stderr, b"pineapple") def test_communicate(self): p = subprocess.Popen([sys.executable, "-c", @@ -782,7 +773,7 @@ class ProcessTestCase(BaseTestCase): self.addCleanup(p.stdin.close) (stdout, stderr) = p.communicate(b"banana") self.assertEqual(stdout, b"banana") - self.assertStderrEqual(stderr, b"pineapple") + self.assertEqual(stderr, b"pineapple") def test_communicate_timeout(self): p = subprocess.Popen([sys.executable, "-c", @@ -801,7 +792,7 @@ class ProcessTestCase(BaseTestCase): # after it completes. (stdout, stderr) = p.communicate() self.assertEqual(stdout, "banana") - self.assertStderrEqual(stderr.encode(), b"pineapple\npear\n") + self.assertEqual(stderr.encode(), b"pineapple\npear\n") def test_communicate_timeout_large_output(self): # Test an expiring timeout while the child is outputting lots of data. @@ -887,7 +878,7 @@ class ProcessTestCase(BaseTestCase): p.stdin.write(b"banana") (stdout, stderr) = p.communicate(b"split") self.assertEqual(stdout, b"bananasplit") - self.assertStderrEqual(stderr, b"") + self.assertEqual(stderr, b"") def test_universal_newlines_and_text(self): args = [ @@ -1005,7 +996,6 @@ class ProcessTestCase(BaseTestCase): self.assertEqual("line1\nline2\nline3\nline4\nline5\n", stdout) # Python debug build push something like "[42442 refs]\n" # to stderr at exit of subprocess. - # Don't use assertStderrEqual because it strips CR and LF from output. self.assertTrue(stderr.startswith("eline2\neline6\neline7\n")) def test_universal_newlines_communicate_encodings(self): @@ -2240,13 +2230,13 @@ class POSIXProcessTestCase(BaseTestCase): def test_kill(self): p = self._kill_process('kill') _, stderr = p.communicate() - self.assertStderrEqual(stderr, b'') + self.assertEqual(stderr, b'') self.assertEqual(p.wait(), -signal.SIGKILL) def test_terminate(self): p = self._kill_process('terminate') _, stderr = p.communicate() - self.assertStderrEqual(stderr, b'') + self.assertEqual(stderr, b'') self.assertEqual(p.wait(), -signal.SIGTERM) def test_send_signal_dead(self): @@ -2294,8 +2284,8 @@ class POSIXProcessTestCase(BaseTestCase): stdin=stdin, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate() - err = support.strip_python_stderr(err) - self.assertEqual((out, err), (b'apple', b'orange')) + self.assertEqual(out, b'apple') + self.assertEqual(err, b'orange') finally: self._restore_fds(saved_fds) @@ -2380,7 +2370,7 @@ class POSIXProcessTestCase(BaseTestCase): os.lseek(fd, 0, 0) out = os.read(temp_fds[2], 1024) - err = support.strip_python_stderr(os.read(temp_fds[0], 1024)) + err = os.read(temp_fds[0], 1024).strip() self.assertEqual(out, b"got STDIN") self.assertEqual(err, b"err") @@ -2422,7 +2412,7 @@ class POSIXProcessTestCase(BaseTestCase): os.lseek(fd, 0, 0) out = os.read(stdout_no, 1024) - err = support.strip_python_stderr(os.read(stderr_no, 1024)) + err = os.read(stderr_no, 1024).strip() finally: self._restore_fds(saved_fds) @@ -3338,7 +3328,7 @@ class Win32ProcessTestCase(BaseTestCase): p.stdout.read(1) getattr(p, method)(*args) _, stderr = p.communicate() - self.assertStderrEqual(stderr, b'') + self.assertEqual(stderr, b'') returncode = p.wait() self.assertNotEqual(returncode, 0) @@ -3361,7 +3351,7 @@ class Win32ProcessTestCase(BaseTestCase): # This shouldn't raise even though the child is now dead getattr(p, method)(*args) _, stderr = p.communicate() - self.assertStderrEqual(stderr, b'') + self.assertEqual(stderr, b'') rc = p.wait() self.assertEqual(rc, 42) @@ -3550,7 +3540,7 @@ class ContextManagerTests(BaseTestCase): stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc: self.assertEqual(proc.stdout.read(), b"stdout") - self.assertStderrEqual(proc.stderr.read(), b"stderr") + self.assertEqual(proc.stderr.read(), b"stderr") self.assertTrue(proc.stdout.closed) self.assertTrue(proc.stderr.closed) diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py index e3ce670b843..eb27c0cf866 100644 --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -653,7 +653,6 @@ class TestSupport(unittest.TestCase): # run_doctest # threading_cleanup # reap_threads - # strip_python_stderr # can_symlink # skip_unless_symlink # SuppressCrashReport diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 9961dee754c..947c935f347 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1222,7 +1222,7 @@ class SizeofTest(unittest.TestCase): # list samples = [[], [1,2,3], ['1', '2', '3']] for sample in samples: - check(sample, vsize('Pn') + len(sample)*self.P) + check(list(sample), vsize('Pn') + len(sample)*self.P) # sortwrapper (list) # XXX # cmpwrapper (list) diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py index d4e1ac2c83e..0af015aa56b 100644 --- a/Lib/test/test_sys_settrace.py +++ b/Lib/test/test_sys_settrace.py @@ -1431,7 +1431,7 @@ output.append(4) 1 / 0 @jump_test(3, 2, [2], event='return', error=(ValueError, - "can't jump from a yield statement")) + "can't jump from a 'yield' statement")) def test_no_jump_from_yield(output): def gen(): output.append(2) diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py index f995f6c9bfa..232c5dae10f 100644 --- a/Lib/test/test_tempfile.py +++ b/Lib/test/test_tempfile.py @@ -1114,7 +1114,8 @@ class TestSpooledTemporaryFile(BaseTestCase): def test_text_mode(self): # Creating a SpooledTemporaryFile with a text mode should produce # a file object reading and writing (Unicode) text strings. - f = tempfile.SpooledTemporaryFile(mode='w+', max_size=10) + f = tempfile.SpooledTemporaryFile(mode='w+', max_size=10, + encoding="utf-8") f.write("abc\n") f.seek(0) self.assertEqual(f.read(), "abc\n") @@ -1124,9 +1125,9 @@ class TestSpooledTemporaryFile(BaseTestCase): self.assertFalse(f._rolled) self.assertEqual(f.mode, 'w+') self.assertIsNone(f.name) - self.assertIsNone(f.newlines) - self.assertIsNone(f.encoding) - self.assertIsNone(f.errors) + self.assertEqual(f.newlines, os.linesep) + self.assertEqual(f.encoding, "utf-8") + self.assertEqual(f.errors, "strict") f.write("xyzzy\n") f.seek(0) @@ -1139,8 +1140,8 @@ class TestSpooledTemporaryFile(BaseTestCase): self.assertEqual(f.mode, 'w+') self.assertIsNotNone(f.name) self.assertEqual(f.newlines, os.linesep) - self.assertIsNotNone(f.encoding) - self.assertIsNotNone(f.errors) + self.assertEqual(f.encoding, "utf-8") + self.assertEqual(f.errors, "strict") def test_text_newline_and_encoding(self): f = tempfile.SpooledTemporaryFile(mode='w+', max_size=10, @@ -1152,13 +1153,15 @@ class TestSpooledTemporaryFile(BaseTestCase): self.assertFalse(f._rolled) self.assertEqual(f.mode, 'w+') self.assertIsNone(f.name) - self.assertIsNone(f.newlines) - self.assertIsNone(f.encoding) - self.assertIsNone(f.errors) + self.assertIsNotNone(f.newlines) + self.assertEqual(f.encoding, "utf-8") + self.assertEqual(f.errors, "ignore") - f.write("\u039B" * 20 + "\r\n") + f.write("\u039C" * 10 + "\r\n") + f.write("\u039D" * 20) f.seek(0) - self.assertEqual(f.read(), "\u039B\r\n" + ("\u039B" * 20) + "\r\n") + self.assertEqual(f.read(), + "\u039B\r\n" + ("\u039C" * 10) + "\r\n" + ("\u039D" * 20)) self.assertTrue(f._rolled) self.assertEqual(f.mode, 'w+') self.assertIsNotNone(f.name) diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 49417efe511..5b4916f9c32 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -2778,6 +2778,16 @@ except StopIteration as e: gth = get_type_hints +class ForRefExample: + @ann_module.dec + def func(self: 'ForRefExample'): + pass + + @ann_module.dec + @ann_module.dec + def nested(self: 'ForRefExample'): + pass + class GetTypeHintTests(BaseTestCase): def test_get_type_hints_from_various_objects(self): @@ -2876,6 +2886,11 @@ class GetTypeHintTests(BaseTestCase): 'x': ClassVar[Optional[B]]}) self.assertEqual(gth(G), {'lst': ClassVar[List[T]]}) + def test_get_type_hints_wrapped_decoratored_func(self): + expects = {'self': ForRefExample} + self.assertEqual(gth(ForRefExample.func), expects) + self.assertEqual(gth(ForRefExample.nested), expects) + class GetUtilitiesTestCase(TestCase): def test_get_origin(self): @@ -3726,6 +3741,13 @@ class TypedDictTests(BaseTestCase): self.assertEqual(Options(log_level=2), {'log_level': 2}) self.assertEqual(Options.__total__, False) + def test_optional_keys(self): + class Point2Dor3D(Point2D, total=False): + z: int + + assert Point2Dor3D.__required_keys__ == frozenset(['x', 'y']) + assert Point2Dor3D.__optional_keys__ == frozenset(['z']) + class IOTests(BaseTestCase): diff --git a/Lib/test/test_tools/test_unparse.py b/Lib/test/test_unparse.py similarity index 77% rename from Lib/test/test_tools/test_unparse.py rename to Lib/test/test_unparse.py index a958ebb51cc..45d819f175b 100644 --- a/Lib/test/test_tools/test_unparse.py +++ b/Lib/test/test_unparse.py @@ -2,20 +2,11 @@ import unittest import test.support -import io -import os +import pathlib import random import tokenize import ast -from test.test_tools import basepath, toolsdir, skip_if_missing - -skip_if_missing() - -parser_path = os.path.join(toolsdir, "parser") - -with test.support.DirsOnSysPath(parser_path): - import unparse def read_pyfile(filename): """Read and return the contents of a Python source file (as a @@ -26,6 +17,7 @@ def read_pyfile(filename): source = pyfile.read() return source + for_else = """\ def f(): for x in range(10): @@ -119,18 +111,21 @@ with f() as x, g() as y: suite1 """ + class ASTTestCase(unittest.TestCase): def assertASTEqual(self, ast1, ast2): self.assertEqual(ast.dump(ast1), ast.dump(ast2)) - def check_roundtrip(self, code1, filename="internal"): - ast1 = compile(code1, filename, "exec", ast.PyCF_ONLY_AST) - unparse_buffer = io.StringIO() - unparse.Unparser(ast1, unparse_buffer) - code2 = unparse_buffer.getvalue() - ast2 = compile(code2, filename, "exec", ast.PyCF_ONLY_AST) + def check_roundtrip(self, code1): + ast1 = ast.parse(code1) + code2 = ast.unparse(ast1) + ast2 = ast.parse(code2) self.assertASTEqual(ast1, ast2) + def check_invalid(self, node, raises=ValueError): + self.assertRaises(raises, ast.unparse, node) + + class UnparseTestCase(ASTTestCase): # Tests for specific bugs found in earlier versions of unparse @@ -174,8 +169,8 @@ class UnparseTestCase(ASTTestCase): self.check_roundtrip("-1e1000j") def test_min_int(self): - self.check_roundtrip(str(-2**31)) - self.check_roundtrip(str(-2**63)) + self.check_roundtrip(str(-(2 ** 31))) + self.check_roundtrip(str(-(2 ** 63))) def test_imaginary_literals(self): self.check_roundtrip("7j") @@ -265,54 +260,74 @@ class UnparseTestCase(ASTTestCase): self.check_roundtrip(r"""{**{'y': 2}, 'x': 1}""") self.check_roundtrip(r"""{**{'y': 2}, **{'x': 1}}""") + def test_invalid_raise(self): + self.check_invalid(ast.Raise(exc=None, cause=ast.Name(id="X"))) + + def test_invalid_fstring_constant(self): + self.check_invalid(ast.JoinedStr(values=[ast.Constant(value=100)])) + + def test_invalid_fstring_conversion(self): + self.check_invalid( + ast.FormattedValue( + value=ast.Constant(value="a", kind=None), + conversion=ord("Y"), # random character + format_spec=None, + ) + ) + + def test_invalid_set(self): + self.check_invalid(ast.Set(elts=[])) + class DirectoryTestCase(ASTTestCase): """Test roundtrip behaviour on all files in Lib and Lib/test.""" - NAMES = None - # test directories, relative to the root of the distribution - test_directories = 'Lib', os.path.join('Lib', 'test') + lib_dir = pathlib.Path(__file__).parent / ".." + test_directories = (lib_dir, lib_dir / "test") + skip_files = {"test_fstring.py"} + + _files_to_test = None @classmethod - def get_names(cls): - if cls.NAMES is not None: - return cls.NAMES + def files_to_test(cls): - names = [] - for d in cls.test_directories: - test_dir = os.path.join(basepath, d) - for n in os.listdir(test_dir): - if n.endswith('.py') and not n.startswith('bad'): - names.append(os.path.join(test_dir, n)) + if cls._files_to_test is not None: + return cls._files_to_test + + items = [ + item.resolve() + for directory in cls.test_directories + for item in directory.glob("*.py") + if not item.name.startswith("bad") + ] # Test limited subset of files unless the 'cpu' resource is specified. if not test.support.is_resource_enabled("cpu"): - names = random.sample(names, 10) + items = random.sample(items, 10) + # bpo-31174: Store the names sample to always test the same files. # It prevents false alarms when hunting reference leaks. - cls.NAMES = names - return names + cls._files_to_test = items + + return items def test_files(self): - # get names of files to test - names = self.get_names() - - for filename in names: + for item in self.files_to_test(): if test.support.verbose: - print('Testing %s' % filename) + print(f"Testing {item.absolute()}") # Some f-strings are not correctly round-tripped by - # Tools/parser/unparse.py. See issue 28002 for details. - # We need to skip files that contain such f-strings. - if os.path.basename(filename) in ('test_fstring.py', ): + # Tools/parser/unparse.py. See issue 28002 for details. + # We need to skip files that contain such f-strings. + if item.name in self.skip_files: if test.support.verbose: - print(f'Skipping {filename}: see issue 28002') + print(f"Skipping {item.absolute()}: see issue 28002") continue - with self.subTest(filename=filename): - source = read_pyfile(filename) + with self.subTest(filename=item): + source = read_pyfile(item) self.check_roundtrip(source) -if __name__ == '__main__': +if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_uu.py b/Lib/test/test_uu.py index c9f05e5b760..c8709f7a0d6 100644 --- a/Lib/test/test_uu.py +++ b/Lib/test/test_uu.py @@ -136,6 +136,15 @@ class UUTest(unittest.TestCase): decoded = codecs.decode(encodedtext, "uu_codec") self.assertEqual(decoded, plaintext) + def test_newlines_escaped(self): + # Test newlines are escaped with uu.encode + inp = io.BytesIO(plaintext) + out = io.BytesIO() + filename = "test.txt\n\roverflow.txt" + safefilename = b"test.txt\\n\\roverflow.txt" + uu.encode(inp, out, filename) + self.assertIn(safefilename, out.getvalue()) + class UUStdIOTest(unittest.TestCase): def setUp(self): diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py index 0103de8828d..741ac109bbc 100644 --- a/Lib/test/test_venv.py +++ b/Lib/test/test_venv.py @@ -141,16 +141,18 @@ class BasicTest(BaseTest): def test_upgrade_dependencies(self): builder = venv.EnvBuilder() bin_path = 'Scripts' if sys.platform == 'win32' else 'bin' - pip_exe = 'pip.exe' if sys.platform == 'win32' else 'pip' + python_exe = 'python.exe' if sys.platform == 'win32' else 'python' with tempfile.TemporaryDirectory() as fake_env_dir: def pip_cmd_checker(cmd): self.assertEqual( cmd, [ - os.path.join(fake_env_dir, bin_path, pip_exe), + os.path.join(fake_env_dir, bin_path, python_exe), + '-m', + 'pip', 'install', - '-U', + '--upgrade', 'pip', 'setuptools' ] diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py index d1031829514..3a6d64eaad1 100644 --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -1219,7 +1219,8 @@ class A: a=A() """ rc, out, err = assert_python_ok("-c", code) - self.assertEqual(err.decode(), ':7: UserWarning: test') + self.assertEqual(err.decode().rstrip(), + ':7: UserWarning: test') def test_late_resource_warning(self): # Issue #21925: Emitting a ResourceWarning late during the Python diff --git a/Lib/test/test_xml_etree.py b/Lib/test/test_xml_etree.py index 9fbb4ac1813..09c234ca689 100644 --- a/Lib/test/test_xml_etree.py +++ b/Lib/test/test_xml_etree.py @@ -1668,6 +1668,17 @@ XINCLUDE["default.xml"] = """\ """.format(html.escape(SIMPLE_XMLFILE, True)) +XINCLUDE["include_c1_repeated.xml"] = """\ + + +

    The following is the source code of Recursive1.xml:

    + + + + +
    +""" + # # badly formatted xi:include tags @@ -1688,6 +1699,31 @@ XINCLUDE_BAD["B2.xml"] = """\ """ +XINCLUDE["Recursive1.xml"] = """\ + + +

    The following is the source code of Recursive2.xml:

    + +
    +""" + +XINCLUDE["Recursive2.xml"] = """\ + + +

    The following is the source code of Recursive3.xml:

    + +
    +""" + +XINCLUDE["Recursive3.xml"] = """\ + + +

    The following is the source code of Recursive1.xml:

    + +
    +""" + + class XIncludeTest(unittest.TestCase): def xinclude_loader(self, href, parse="xml", encoding=None): @@ -1789,6 +1825,13 @@ class XIncludeTest(unittest.TestCase): ' \n' '') # C5 + def test_xinclude_repeated(self): + from xml.etree import ElementInclude + + document = self.xinclude_loader("include_c1_repeated.xml") + ElementInclude.include(document, self.xinclude_loader) + self.assertEqual(1+4*2, len(document.findall(".//p"))) + def test_xinclude_failures(self): from xml.etree import ElementInclude @@ -1821,6 +1864,45 @@ class XIncludeTest(unittest.TestCase): "xi:fallback tag must be child of xi:include " "('{http://www.w3.org/2001/XInclude}fallback')") + # Test infinitely recursive includes. + document = self.xinclude_loader("Recursive1.xml") + with self.assertRaises(ElementInclude.FatalIncludeError) as cm: + ElementInclude.include(document, self.xinclude_loader) + self.assertEqual(str(cm.exception), + "recursive include of Recursive2.xml") + + # Test 'max_depth' limitation. + document = self.xinclude_loader("Recursive1.xml") + with self.assertRaises(ElementInclude.FatalIncludeError) as cm: + ElementInclude.include(document, self.xinclude_loader, max_depth=None) + self.assertEqual(str(cm.exception), + "recursive include of Recursive2.xml") + + document = self.xinclude_loader("Recursive1.xml") + with self.assertRaises(ElementInclude.LimitedRecursiveIncludeError) as cm: + ElementInclude.include(document, self.xinclude_loader, max_depth=0) + self.assertEqual(str(cm.exception), + "maximum xinclude depth reached when including file Recursive2.xml") + + document = self.xinclude_loader("Recursive1.xml") + with self.assertRaises(ElementInclude.LimitedRecursiveIncludeError) as cm: + ElementInclude.include(document, self.xinclude_loader, max_depth=1) + self.assertEqual(str(cm.exception), + "maximum xinclude depth reached when including file Recursive3.xml") + + document = self.xinclude_loader("Recursive1.xml") + with self.assertRaises(ElementInclude.LimitedRecursiveIncludeError) as cm: + ElementInclude.include(document, self.xinclude_loader, max_depth=2) + self.assertEqual(str(cm.exception), + "maximum xinclude depth reached when including file Recursive1.xml") + + document = self.xinclude_loader("Recursive1.xml") + with self.assertRaises(ElementInclude.FatalIncludeError) as cm: + ElementInclude.include(document, self.xinclude_loader, max_depth=3) + self.assertEqual(str(cm.exception), + "recursive include of Recursive2.xml") + + # -------------------------------------------------------------------- # reported bugs diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py index 1e1854be710..66f05ac1f3a 100644 --- a/Lib/test/test_zipfile.py +++ b/Lib/test/test_zipfile.py @@ -571,6 +571,20 @@ class StoredTestsWithSourceFile(AbstractTestsWithSourceFile, with open(TESTFN, "rb") as f: self.assertEqual(zipfp.read(TESTFN), f.read()) + def test_io_on_closed_zipextfile(self): + fname = "somefile.txt" + with zipfile.ZipFile(TESTFN2, mode="w") as zipfp: + zipfp.writestr(fname, "bogus") + + with zipfile.ZipFile(TESTFN2, mode="r") as zipfp: + with zipfp.open(fname) as fid: + fid.close() + self.assertRaises(ValueError, fid.read) + self.assertRaises(ValueError, fid.seek, 0) + self.assertRaises(ValueError, fid.tell) + self.assertRaises(ValueError, fid.readable) + self.assertRaises(ValueError, fid.seekable) + def test_write_to_readonly(self): """Check that trying to call write() on a readonly ZipFile object raises a ValueError.""" diff --git a/Lib/typing.py b/Lib/typing.py index 27be37a369a..7de3e346eaa 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -1234,7 +1234,11 @@ def get_type_hints(obj, globalns=None, localns=None): if isinstance(obj, types.ModuleType): globalns = obj.__dict__ else: - globalns = getattr(obj, '__globals__', {}) + nsobj = obj + # Find globalns for the unwrapped object. + while hasattr(nsobj, '__wrapped__'): + nsobj = nsobj.__wrapped__ + globalns = getattr(nsobj, '__globals__', {}) if localns is None: localns = globalns elif localns is None: @@ -1711,9 +1715,20 @@ class _TypedDictMeta(type): anns = ns.get('__annotations__', {}) msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type" anns = {n: _type_check(tp, msg) for n, tp in anns.items()} + required = set(anns if total else ()) + optional = set(() if total else anns) + for base in bases: - anns.update(base.__dict__.get('__annotations__', {})) + base_anns = base.__dict__.get('__annotations__', {}) + anns.update(base_anns) + if getattr(base, '__total__', True): + required.update(base_anns) + else: + optional.update(base_anns) + tp_dict.__annotations__ = anns + tp_dict.__required_keys__ = frozenset(required) + tp_dict.__optional_keys__ = frozenset(optional) if not hasattr(tp_dict, '__total__'): tp_dict.__total__ = total return tp_dict @@ -1740,8 +1755,9 @@ class TypedDict(dict, metaclass=_TypedDictMeta): assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first') - The type info can be accessed via Point2D.__annotations__. TypedDict - supports two additional equivalent forms:: + The type info can be accessed via the Point2D.__annotations__ dict, and + the Point2D.__required_keys__ and Point2D.__optional_keys__ frozensets. + TypedDict supports two additional equivalent forms:: Point2D = TypedDict('Point2D', x=int, y=int, label=str) Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str}) diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index b06e29cf01c..cd5a2aeb608 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -1601,6 +1601,10 @@ def _patch_object( When used as a class decorator `patch.object` honours `patch.TEST_PREFIX` for choosing which methods to wrap. """ + if type(target) is str: + raise TypeError( + f"{target!r} must be the actual object to be patched, not a str" + ) getter = lambda: target return _patch( getter, attribute, new, spec, create, diff --git a/Lib/unittest/test/testmock/testpatch.py b/Lib/unittest/test/testmock/testpatch.py index 0632d95e58f..e065a2c35fb 100644 --- a/Lib/unittest/test/testmock/testpatch.py +++ b/Lib/unittest/test/testmock/testpatch.py @@ -105,6 +105,10 @@ class PatchTest(unittest.TestCase): self.assertEqual(Something.attribute, sentinel.Original, "patch not restored") + def test_patchobject_with_string_as_target(self): + msg = "'Something' must be the actual object to be patched, not a str" + with self.assertRaisesRegex(TypeError, msg): + patch.object('Something', 'do_something') def test_patchobject_with_none(self): class Something(object): diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py index ebc41184f83..39553d809a3 100644 --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -1136,7 +1136,9 @@ class AbstractDigestAuthHandler: A2 = "%s:%s" % (req.get_method(), # XXX selector: what about proxies and full urls req.selector) - if qop == 'auth': + # NOTE: As per RFC 2617, when server sends "auth,auth-int", the client could use either `auth` + # or `auth-int` to the response back. we use `auth` to send the response back. + if 'auth' in qop.split(','): if nonce == self.last_nonce: self.nonce_count += 1 else: @@ -1144,7 +1146,7 @@ class AbstractDigestAuthHandler: self.last_nonce = nonce ncvalue = '%08x' % self.nonce_count cnonce = self.get_cnonce(nonce) - noncebit = "%s:%s:%s:%s:%s" % (nonce, ncvalue, cnonce, qop, H(A2)) + noncebit = "%s:%s:%s:%s:%s" % (nonce, ncvalue, cnonce, 'auth', H(A2)) respdig = KD(H(A1), noncebit) elif qop is None: respdig = KD(H(A1), "%s:%s" % (nonce, H(A2))) diff --git a/Lib/uu.py b/Lib/uu.py index 9b1e5e60720..9f1f37f1a64 100755 --- a/Lib/uu.py +++ b/Lib/uu.py @@ -73,6 +73,13 @@ def encode(in_file, out_file, name=None, mode=None, *, backtick=False): name = '-' if mode is None: mode = 0o666 + + # + # Remove newline chars from name + # + name = name.replace('\n','\\n') + name = name.replace('\r','\\r') + # # Write the data # diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py index 4ab9cc6d6fb..81cb1d13e21 100644 --- a/Lib/venv/__init__.py +++ b/Lib/venv/__init__.py @@ -393,10 +393,10 @@ class EnvBuilder: f'Upgrading {CORE_VENV_DEPS} packages in {context.bin_path}' ) if sys.platform == 'win32': - pip_exe = os.path.join(context.bin_path, 'pip.exe') + python_exe = os.path.join(context.bin_path, 'python.exe') else: - pip_exe = os.path.join(context.bin_path, 'pip') - cmd = [pip_exe, 'install', '-U'] + python_exe = os.path.join(context.bin_path, 'python') + cmd = [python_exe, '-m', 'pip', 'install', '--upgrade'] cmd.extend(CORE_VENV_DEPS) subprocess.check_call(cmd) diff --git a/Lib/venv/scripts/posix/activate.fish b/Lib/venv/scripts/posix/activate.fish index 777d51cb69b..cb1ba1c301e 100644 --- a/Lib/venv/scripts/posix/activate.fish +++ b/Lib/venv/scripts/posix/activate.fish @@ -1,7 +1,7 @@ -# This file must be used with ". bin/activate.fish" *from fish* (http://fishshell.org); -# you cannot run it directly. +# This file must be used with "source /bin/activate.fish" *from fish* +# (http://fishshell.org); you cannot run it directly. -function deactivate -d "Exit virtualenv and return to normal shell environment" +function deactivate -d "Exit virtual environment and return to normal shell environment" # reset old environment variables if test -n "$_OLD_VIRTUAL_PATH" set -gx PATH $_OLD_VIRTUAL_PATH diff --git a/Lib/xml/etree/ElementInclude.py b/Lib/xml/etree/ElementInclude.py index 963470e3b15..5303062716c 100644 --- a/Lib/xml/etree/ElementInclude.py +++ b/Lib/xml/etree/ElementInclude.py @@ -50,18 +50,28 @@ import copy from . import ElementTree +from urllib.parse import urljoin XINCLUDE = "{http://www.w3.org/2001/XInclude}" XINCLUDE_INCLUDE = XINCLUDE + "include" XINCLUDE_FALLBACK = XINCLUDE + "fallback" +# For security reasons, the inclusion depth is limited to this read-only value by default. +DEFAULT_MAX_INCLUSION_DEPTH = 6 + + ## # Fatal include error. class FatalIncludeError(SyntaxError): pass + +class LimitedRecursiveIncludeError(FatalIncludeError): + pass + + ## # Default loader. This loader reads an included resource from disk. # @@ -92,13 +102,33 @@ def default_loader(href, parse, encoding=None): # @param loader Optional resource loader. If omitted, it defaults # to {@link default_loader}. If given, it should be a callable # that implements the same interface as default_loader. +# @param base_url The base URL of the original file, to resolve +# relative include file references. +# @param max_depth The maximum number of recursive inclusions. +# Limited to reduce the risk of malicious content explosion. +# Pass a negative value to disable the limitation. +# @throws LimitedRecursiveIncludeError If the {@link max_depth} was exceeded. # @throws FatalIncludeError If the function fails to include a given # resource, or if the tree contains malformed XInclude elements. -# @throws OSError If the function fails to load a given resource. +# @throws IOError If the function fails to load a given resource. +# @returns the node or its replacement if it was an XInclude node -def include(elem, loader=None): +def include(elem, loader=None, base_url=None, + max_depth=DEFAULT_MAX_INCLUSION_DEPTH): + if max_depth is None: + max_depth = -1 + elif max_depth < 0: + raise ValueError("expected non-negative depth or None for 'max_depth', got %r" % max_depth) + + if hasattr(elem, 'getroot'): + elem = elem.getroot() if loader is None: loader = default_loader + + _include(elem, loader, base_url, max_depth, set()) + + +def _include(elem, loader, base_url, max_depth, _parent_hrefs): # look for xinclude elements i = 0 while i < len(elem): @@ -106,14 +136,24 @@ def include(elem, loader=None): if e.tag == XINCLUDE_INCLUDE: # process xinclude directive href = e.get("href") + if base_url: + href = urljoin(base_url, href) parse = e.get("parse", "xml") if parse == "xml": + if href in _parent_hrefs: + raise FatalIncludeError("recursive include of %s" % href) + if max_depth == 0: + raise LimitedRecursiveIncludeError( + "maximum xinclude depth reached when including file %s" % href) + _parent_hrefs.add(href) node = loader(href, parse) if node is None: raise FatalIncludeError( "cannot load %r as %r" % (href, parse) ) - node = copy.copy(node) + node = copy.copy(node) # FIXME: this makes little sense with recursive includes + _include(node, loader, href, max_depth - 1, _parent_hrefs) + _parent_hrefs.remove(href) if e.tail: node.tail = (node.tail or "") + e.tail elem[i] = node @@ -123,11 +163,13 @@ def include(elem, loader=None): raise FatalIncludeError( "cannot load %r as %r" % (href, parse) ) + if e.tail: + text += e.tail if i: node = elem[i-1] - node.tail = (node.tail or "") + text + (e.tail or "") + node.tail = (node.tail or "") + text else: - elem.text = (elem.text or "") + text + (e.tail or "") + elem.text = (elem.text or "") + text del elem[i] continue else: @@ -139,5 +181,5 @@ def include(elem, loader=None): "xi:fallback tag must be child of xi:include (%r)" % e.tag ) else: - include(e, loader) - i = i + 1 + _include(e, loader, base_url, max_depth, _parent_hrefs) + i += 1 diff --git a/Lib/zipfile.py b/Lib/zipfile.py index b0afb9da942..e1d07f2a523 100644 --- a/Lib/zipfile.py +++ b/Lib/zipfile.py @@ -889,12 +889,16 @@ class ZipExtFile(io.BufferedIOBase): return self._readbuffer[self._offset: self._offset + 512] def readable(self): + if self.closed: + raise ValueError("I/O operation on closed file.") return True def read(self, n=-1): """Read and return up to n bytes. If the argument is omitted, None, or negative, data is read and returned until EOF is reached. """ + if self.closed: + raise ValueError("read from closed file.") if n is None or n < 0: buf = self._readbuffer[self._offset:] self._readbuffer = b'' @@ -1031,9 +1035,13 @@ class ZipExtFile(io.BufferedIOBase): super().close() def seekable(self): + if self.closed: + raise ValueError("I/O operation on closed file.") return self._seekable def seek(self, offset, whence=0): + if self.closed: + raise ValueError("seek on closed file.") if not self._seekable: raise io.UnsupportedOperation("underlying stream is not seekable") curr_pos = self.tell() @@ -1082,6 +1090,8 @@ class ZipExtFile(io.BufferedIOBase): return self.tell() def tell(self): + if self.closed: + raise ValueError("tell on closed file.") if not self._seekable: raise io.UnsupportedOperation("underlying stream is not seekable") filepos = self._orig_file_size - self._left - len(self._readbuffer) + self._offset diff --git a/Misc/ACKS b/Misc/ACKS index 2a1ea32f2e4..31c9fa76dfa 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -22,6 +22,7 @@ Eitan Adler Anton Afanasyev Ali Afshar Nitika Agarwal +Anjani Agrawal Pablo S. Blum de Aguiar Jim Ahlstrom Farhan Ahmad @@ -250,6 +251,7 @@ Zach Byrne Vedran Čačić Nicolas Cadou Jp Calderone +Ben Caller Arnaud Calmettes Daniel Calvelo Tony Campbell @@ -732,6 +734,7 @@ Miro Hrončok Chiu-Hsiang Hsu Chih-Hao Huang Christian Hudon +Benoît Hudson Lawrence Hudson Michael Hudson Jim Hugunin @@ -1898,3 +1901,4 @@ Robert Leenders Tim Hopper Dan Lidral-Porter Ngalim Siregar +Tim Gates diff --git a/Misc/NEWS.d/next/Build/2019-12-01-21-45-24.bpo-37404.cNsA7S.rst b/Misc/NEWS.d/next/Build/2019-12-01-21-45-24.bpo-37404.cNsA7S.rst new file mode 100644 index 00000000000..067fc9d3f18 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2019-12-01-21-45-24.bpo-37404.cNsA7S.rst @@ -0,0 +1,2 @@ +:mod:`asyncio` now raises :exc:`TyperError` when calling incompatible methods +with an :class:`ssl.SSLSocket` socket. Patch by Ido Michael. diff --git a/Misc/NEWS.d/next/C API/2019-11-22-19-43-43.bpo-38896.6wvNMJ.rst b/Misc/NEWS.d/next/C API/2019-11-22-19-43-43.bpo-38896.6wvNMJ.rst new file mode 100644 index 00000000000..c5e108d7693 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2019-11-22-19-43-43.bpo-38896.6wvNMJ.rst @@ -0,0 +1,2 @@ +Remove ``PyUnicode_ClearFreeList()`` function: the Unicode free list has +been removed in Python 3.3. diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-03-13-14-46-03.bpo-32949.v821M7.rst b/Misc/NEWS.d/next/Core and Builtins/2018-03-13-14-46-03.bpo-32949.v821M7.rst new file mode 100644 index 00000000000..16b3058ee68 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2018-03-13-14-46-03.bpo-32949.v821M7.rst @@ -0,0 +1,5 @@ +Removed WITH_CLEANUP_START, WITH_CLEANUP_FINISH, BEGIN_FINALLY, END_FINALLY, CALL_FINALLY and POP_FINALLY bytecodes. +Replaced with RERAISE and WITH_EXCEPT_FINISH bytecodes. +The compiler now generates different code for exceptional and non-exceptional branches for 'with' and 'try-except' +statements. For 'try-finally' statements the 'finally' block is replicated for each exit from the 'try' body. + diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-09-06-16-40-12.bpo-27145.njuCXU.rst b/Misc/NEWS.d/next/Core and Builtins/2019-09-06-16-40-12.bpo-27145.njuCXU.rst new file mode 100644 index 00000000000..229753a3730 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-09-06-16-40-12.bpo-27145.njuCXU.rst @@ -0,0 +1 @@ +int + int and int - int operators can now return small integer singletons. Patch by hongweipeng. diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-11-11-23-44-15.bpo-38328.IFrrjq.rst b/Misc/NEWS.d/next/Core and Builtins/2019-11-11-23-44-15.bpo-38328.IFrrjq.rst new file mode 100644 index 00000000000..e0c5ca7bfe8 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-11-11-23-44-15.bpo-38328.IFrrjq.rst @@ -0,0 +1,2 @@ +Sped up the creation time of constant :class:`list` and :class:`set` displays. +Patch by Brandt Bucher. diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-11-22-09-55-21.bpo-38852.y7oPEa.rst b/Misc/NEWS.d/next/Core and Builtins/2019-11-22-09-55-21.bpo-38852.y7oPEa.rst new file mode 100644 index 00000000000..915a936aae2 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-11-22-09-55-21.bpo-38852.y7oPEa.rst @@ -0,0 +1 @@ +Set the thread stack size to 8 Mb for debug builds on android platforms. diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-11-22-22-18-50.bpo-38892.LS586s.rst b/Misc/NEWS.d/next/Core and Builtins/2019-11-22-22-18-50.bpo-38892.LS586s.rst new file mode 100644 index 00000000000..5df67dcbfea --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-11-22-22-18-50.bpo-38892.LS586s.rst @@ -0,0 +1 @@ +Improve documentation for audit events table and functions. diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-11-26-09-16-47.bpo-38920.Vx__sT.rst b/Misc/NEWS.d/next/Core and Builtins/2019-11-26-09-16-47.bpo-38920.Vx__sT.rst new file mode 100644 index 00000000000..2e9e443dd99 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-11-26-09-16-47.bpo-38920.Vx__sT.rst @@ -0,0 +1,2 @@ +Add audit hooks for when :func:`sys.excepthook` and +:func:`sys.unraisablehook` are invoked diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-11-26-12-20-34.bpo-38922.i6ja-i.rst b/Misc/NEWS.d/next/Core and Builtins/2019-11-26-12-20-34.bpo-38922.i6ja-i.rst new file mode 100644 index 00000000000..a7af652e5a5 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-11-26-12-20-34.bpo-38922.i6ja-i.rst @@ -0,0 +1,2 @@ +Calling ``replace`` on a code object now raises the ``code.__new__`` audit +event. diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-12-01-00-17-44.bpo-38673.K_Tze-.rst b/Misc/NEWS.d/next/Core and Builtins/2019-12-01-00-17-44.bpo-38673.K_Tze-.rst new file mode 100644 index 00000000000..8f8cf88e5e2 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-12-01-00-17-44.bpo-38673.K_Tze-.rst @@ -0,0 +1 @@ +In REPL mode, don't switch to PS2 if the line starts with comment or whitespace. Based on work by Batuhan Taşkaya. diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-12-09-10-38-51.bpo-39008.Rrp6f1.rst b/Misc/NEWS.d/next/Core and Builtins/2019-12-09-10-38-51.bpo-39008.Rrp6f1.rst new file mode 100644 index 00000000000..35237ce2714 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-12-09-10-38-51.bpo-39008.Rrp6f1.rst @@ -0,0 +1,3 @@ +:c:func:`PySys_Audit` now requires ``Py_ssize_t`` to be used for size +arguments in the format string, regardless of whethen ``PY_SSIZE_T_CLEAN`` +was defined at include time. diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-12-09-17-05-53.bpo-20443.8OyT5P.rst b/Misc/NEWS.d/next/Core and Builtins/2019-12-09-17-05-53.bpo-20443.8OyT5P.rst new file mode 100644 index 00000000000..d3855f293b9 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2019-12-09-17-05-53.bpo-20443.8OyT5P.rst @@ -0,0 +1,3 @@ +In Python 3.9.0a1, sys.argv[0] was made an asolute path if a filename was +specified on the command line. Revert this change, since most users expect +sys.argv to be unmodified. diff --git a/Misc/NEWS.d/next/Documentation/2019-10-01-10-53-46.bpo-22377.5ni-iC.rst b/Misc/NEWS.d/next/Documentation/2019-10-01-10-53-46.bpo-22377.5ni-iC.rst new file mode 100644 index 00000000000..d2943f75a84 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2019-10-01-10-53-46.bpo-22377.5ni-iC.rst @@ -0,0 +1,2 @@ +Improves documentation of the values that :meth:`datetime.datetime.strptime` accepts for ``%Z``. +Patch by Karl Dubost. diff --git a/Misc/NEWS.d/next/Documentation/2019-11-22-15-57-29.bpo-38899.4aYPW2.rst b/Misc/NEWS.d/next/Documentation/2019-11-22-15-57-29.bpo-38899.4aYPW2.rst new file mode 100644 index 00000000000..4ee178bfb1b --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2019-11-22-15-57-29.bpo-38899.4aYPW2.rst @@ -0,0 +1,3 @@ +Update documentation to state that to activate virtual environments under +fish one should use `source`, not `.` as documented at +https://fishshell.com/docs/current/commands.html#source. diff --git a/Misc/NEWS.d/next/Documentation/2019-11-27-17-51-27.bpo-38928.AfgvfO.rst b/Misc/NEWS.d/next/Documentation/2019-11-27-17-51-27.bpo-38928.AfgvfO.rst new file mode 100644 index 00000000000..952d4a8664d --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2019-11-27-17-51-27.bpo-38928.AfgvfO.rst @@ -0,0 +1,2 @@ +Correct when venv's ``upgrade_dependencies()`` and ``--upgrade-deps`` are +added. diff --git a/Misc/NEWS.d/next/Documentation/2019-12-09-10-12-00.bpo-39002.AfgvfO.rst b/Misc/NEWS.d/next/Documentation/2019-12-09-10-12-00.bpo-39002.AfgvfO.rst new file mode 100644 index 00000000000..a6dfa22eb7a --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2019-12-09-10-12-00.bpo-39002.AfgvfO.rst @@ -0,0 +1 @@ +Fix simple typo in Lib/test/test_statistics.py. diff --git a/Misc/NEWS.d/next/IDLE/2019-11-23-21-50-57.bpo-38862.KQ9A0m.rst b/Misc/NEWS.d/next/IDLE/2019-11-23-21-50-57.bpo-38862.KQ9A0m.rst new file mode 100644 index 00000000000..14bab9e854b --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2019-11-23-21-50-57.bpo-38862.KQ9A0m.rst @@ -0,0 +1,2 @@ +'Strip Trailing Whitespace' on the Format menu removes extra newlines +at the end of non-shell files. diff --git a/Misc/NEWS.d/next/IDLE/2019-11-29-23-44-11.bpo-38943.8pUKKs.rst b/Misc/NEWS.d/next/IDLE/2019-11-29-23-44-11.bpo-38943.8pUKKs.rst new file mode 100644 index 00000000000..5c9323e2467 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2019-11-29-23-44-11.bpo-38943.8pUKKs.rst @@ -0,0 +1,2 @@ +Fix IDLE autocomplete windows not always appearing on some systems. +Patch by Johnny Najera. diff --git a/Misc/NEWS.d/next/IDLE/2019-11-30-12-10-36.bpo-38944._3xjKG.rst b/Misc/NEWS.d/next/IDLE/2019-11-30-12-10-36.bpo-38944._3xjKG.rst new file mode 100644 index 00000000000..38084fafd2f --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2019-11-30-12-10-36.bpo-38944._3xjKG.rst @@ -0,0 +1 @@ +Excape key now closes IDLE completion windows. Patch by Johnny Najera. diff --git a/Misc/NEWS.d/next/Library/2018-02-22-11-24-33.bpo-29636.ogGRE2.rst b/Misc/NEWS.d/next/Library/2018-02-22-11-24-33.bpo-29636.ogGRE2.rst new file mode 100644 index 00000000000..9f96ed28f92 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-02-22-11-24-33.bpo-29636.ogGRE2.rst @@ -0,0 +1,5 @@ +Add whitespace options for formatting JSON with the ``json.tool`` CLI. The +following mutually exclusive options are now supported: ``--indent`` for +setting the indent level in spaces; ``--tab`` for indenting with tabs; +``--no-indent`` for suppressing newlines; and ``--compact`` for suppressing +all whitespace. The default behavior remains the same as ``--indent=4``. diff --git a/Misc/NEWS.d/next/Library/2018-03-30-16-18-12.bpo-20928.ieXu6I.rst b/Misc/NEWS.d/next/Library/2018-03-30-16-18-12.bpo-20928.ieXu6I.rst new file mode 100644 index 00000000000..25854009077 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-03-30-16-18-12.bpo-20928.ieXu6I.rst @@ -0,0 +1 @@ +ElementTree supports recursive XInclude processing. Patch by Stefan Behnel. diff --git a/Misc/NEWS.d/next/Library/2018-09-23-14-24-37.bpo-34776.1SrQe3.rst b/Misc/NEWS.d/next/Library/2018-09-23-14-24-37.bpo-34776.1SrQe3.rst new file mode 100644 index 00000000000..815a4876e0b --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-09-23-14-24-37.bpo-34776.1SrQe3.rst @@ -0,0 +1 @@ +Fix dataclasses to support forward references in type annotations diff --git a/Misc/NEWS.d/next/Library/2019-05-06-15-34-17.bpo-36820.Eh5mIB.rst b/Misc/NEWS.d/next/Library/2019-05-06-15-34-17.bpo-36820.Eh5mIB.rst new file mode 100644 index 00000000000..82f6635c815 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-05-06-15-34-17.bpo-36820.Eh5mIB.rst @@ -0,0 +1,3 @@ +Break cycle generated when saving an exception in socket.py, codeop.py and +dyld.py as they keep alive not only the exception but user objects through +the ``__traceback__`` attribute. Patch by Mario Corchero. diff --git a/Misc/NEWS.d/next/Library/2019-09-30-12-09-41.bpo-38045.VDRtd3.rst b/Misc/NEWS.d/next/Library/2019-09-30-12-09-41.bpo-38045.VDRtd3.rst new file mode 100644 index 00000000000..e7e515f5c25 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-09-30-12-09-41.bpo-38045.VDRtd3.rst @@ -0,0 +1 @@ +Improve the performance of :func:`enum._decompose` in :mod:`enum`. Patch by hongweipeng. diff --git a/Misc/NEWS.d/next/Library/2019-10-02-02-55-37.bpo-37523.GguwJ6.rst b/Misc/NEWS.d/next/Library/2019-10-02-02-55-37.bpo-37523.GguwJ6.rst new file mode 100644 index 00000000000..5711969ff38 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-10-02-02-55-37.bpo-37523.GguwJ6.rst @@ -0,0 +1 @@ +Change :class:`zipfile.ZipExtFile` to raise ``ValueError`` when trying to access the underlying file object after it has been closed. This new behavior is consistent with how accessing closed files is handled in other parts of Python. \ No newline at end of file diff --git a/Misc/NEWS.d/next/Library/2019-11-06-15-26-15.bpo-38686.HNFBce.rst b/Misc/NEWS.d/next/Library/2019-11-06-15-26-15.bpo-38686.HNFBce.rst new file mode 100644 index 00000000000..7a419ff1e33 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-06-15-26-15.bpo-38686.HNFBce.rst @@ -0,0 +1 @@ +Added support for multiple ``qop`` values in :class:`urllib.request.AbstractDigestAuthHandler`. \ No newline at end of file diff --git a/Misc/NEWS.d/next/Library/2019-11-16-16-09-07.bpo-38820.ivhUSV.rst b/Misc/NEWS.d/next/Library/2019-11-16-16-09-07.bpo-38820.ivhUSV.rst new file mode 100644 index 00000000000..2c6a6e853c2 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-16-16-09-07.bpo-38820.ivhUSV.rst @@ -0,0 +1,2 @@ +Make Python compatible with OpenSSL 3.0.0. :func:`ssl.SSLSocket.getpeercert` +no longer returns IPv6 addresses with a trailing new line. diff --git a/Misc/NEWS.d/next/Library/2019-11-18-17-08-23.bpo-38834.abcdef.rst b/Misc/NEWS.d/next/Library/2019-11-18-17-08-23.bpo-38834.abcdef.rst new file mode 100644 index 00000000000..af108b1efbc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-18-17-08-23.bpo-38834.abcdef.rst @@ -0,0 +1,3 @@ +:class:`typing.TypedDict` subclasses now track which keys are optional using +the ``__required_keys__`` and ``__optional_keys__`` attributes, to enable +runtime validation by downstream projects. Patch by Zac Hatfield-Dodds. diff --git a/Misc/NEWS.d/next/Library/2019-11-20-22-43-48.bpo-38870.rLVZEv.rst b/Misc/NEWS.d/next/Library/2019-11-20-22-43-48.bpo-38870.rLVZEv.rst new file mode 100644 index 00000000000..61af368ba55 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-20-22-43-48.bpo-38870.rLVZEv.rst @@ -0,0 +1,4 @@ +Expose :func:`ast.unparse` as a function of the :mod:`ast` module that can +be used to unparse an :class:`ast.AST` object and produce a string with code +that would produce an equivalent :class:`ast.AST` object when parsed. Patch +by Pablo Galindo and Batuhan Taskaya. diff --git a/Misc/NEWS.d/next/Library/2019-11-21-11-39-17.bpo-37838.lRFcEC.rst b/Misc/NEWS.d/next/Library/2019-11-21-11-39-17.bpo-37838.lRFcEC.rst new file mode 100644 index 00000000000..96d804addeb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-21-11-39-17.bpo-37838.lRFcEC.rst @@ -0,0 +1 @@ +:meth:`typing.get_type_hints` properly handles functions decorated with :meth:`functools.wraps`. diff --git a/Misc/NEWS.d/next/Library/2019-11-21-16-30-00.bpo-38863.RkdTjf.rst b/Misc/NEWS.d/next/Library/2019-11-21-16-30-00.bpo-38863.RkdTjf.rst new file mode 100644 index 00000000000..6b621eeea2f --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-21-16-30-00.bpo-38863.RkdTjf.rst @@ -0,0 +1,2 @@ +Improve :func:`is_cgi` function in :mod:`http.server`, which enables processing +the case that cgi directory is a child of another directory other than root. diff --git a/Misc/NEWS.d/next/Library/2019-11-22-10-45-03.bpo-38668.iKx23z.rst b/Misc/NEWS.d/next/Library/2019-11-22-10-45-03.bpo-38668.iKx23z.rst new file mode 100644 index 00000000000..28b82ab1619 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-22-10-45-03.bpo-38668.iKx23z.rst @@ -0,0 +1,5 @@ +Calling func:`shutil.copytree` to copy a directory tree from one directory +to another subdirectory resulted in an endless loop and a RecursionError. A +fix was added to consume an iterator and create the list of the entries to +be copied, avoiding the recursion for newly created directories. Patch by +Bruno P. Kinoshita. diff --git a/Misc/NEWS.d/next/Library/2019-11-22-10-58-58.bpo-38876.qqy1Vp.rst b/Misc/NEWS.d/next/Library/2019-11-22-10-58-58.bpo-38876.qqy1Vp.rst new file mode 100644 index 00000000000..43b25acc39d --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-22-10-58-58.bpo-38876.qqy1Vp.rst @@ -0,0 +1,9 @@ +Raise pickle.UnpicklingError when loading an item from memo for invalid +input + +The previous code was raising a `KeyError` for both the Python and C +implementation. This was caused by the specified index of an invalid input +which did not exist in the memo structure, where the pickle stores what +objects it has seen. The malformed input would have caused either a `BINGET` +or `LONG_BINGET` load from the memo, leading to a `KeyError` as the +determined index was bogus. Patch by Claudiu Popa diff --git a/Misc/NEWS.d/next/Library/2019-11-22-20-03-46.bpo-38881.7HV1Q0.rst b/Misc/NEWS.d/next/Library/2019-11-22-20-03-46.bpo-38881.7HV1Q0.rst new file mode 100644 index 00000000000..9f4a27db452 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-22-20-03-46.bpo-38881.7HV1Q0.rst @@ -0,0 +1 @@ +random.choices() now raises a ValueError when all the weights are zero. diff --git a/Misc/NEWS.d/next/Library/2019-11-27-16-30-02.bpo-26730.56cdBn.rst b/Misc/NEWS.d/next/Library/2019-11-27-16-30-02.bpo-26730.56cdBn.rst new file mode 100644 index 00000000000..a92b90a4956 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-27-16-30-02.bpo-26730.56cdBn.rst @@ -0,0 +1,2 @@ +Fix ``SpooledTemporaryFile.rollover()`` might corrupt the file when it is in +text mode. Patch by Serhiy Storchaka. diff --git a/Misc/NEWS.d/next/Library/2019-11-27-17-47-00.bpo-38927.qT7xKY.rst b/Misc/NEWS.d/next/Library/2019-11-27-17-47-00.bpo-38927.qT7xKY.rst new file mode 100644 index 00000000000..ca6ed63e5cc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-11-27-17-47-00.bpo-38927.qT7xKY.rst @@ -0,0 +1 @@ +Use ``python -m pip`` instead of ``pip`` to upgrade dependencies in venv. diff --git a/Misc/NEWS.d/next/Library/2019-12-02-10-35-19.bpo-38698.WZnAPQ.rst b/Misc/NEWS.d/next/Library/2019-12-02-10-35-19.bpo-38698.WZnAPQ.rst new file mode 100644 index 00000000000..e606acb5dcf --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-02-10-35-19.bpo-38698.WZnAPQ.rst @@ -0,0 +1,5 @@ +Prevent UnboundLocalError to pop up in parse_message_id + +parse_message_id() was improperly using a token defined inside an exception +handler, which was raising `UnboundLocalError` on parsing an invalid value. +Patch by Claudiu Popa. diff --git a/Misc/NEWS.d/next/Library/2019-12-04-15-28-40.bpo-33684.QeSmQP.rst b/Misc/NEWS.d/next/Library/2019-12-04-15-28-40.bpo-33684.QeSmQP.rst new file mode 100644 index 00000000000..107f9bb0083 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-04-15-28-40.bpo-33684.QeSmQP.rst @@ -0,0 +1,2 @@ +Fix ``json.tool`` failed to read a JSON file with non-ASCII characters when +locale encoding is not UTF-8. diff --git a/Misc/NEWS.d/next/Library/2019-12-04-15-56-28.bpo-38634.pq0ZWa.rst b/Misc/NEWS.d/next/Library/2019-12-04-15-56-28.bpo-38634.pq0ZWa.rst new file mode 100644 index 00000000000..d60c3172c2e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-04-15-56-28.bpo-38634.pq0ZWa.rst @@ -0,0 +1,2 @@ +The :mod:`readline` module now detects if Python is linked to libedit at runtime +on all platforms. Previously, the check was only done on macOS. diff --git a/Misc/NEWS.d/next/Library/2019-12-05-02-02-58.bpo-27413.212Th2.rst b/Misc/NEWS.d/next/Library/2019-12-05-02-02-58.bpo-27413.212Th2.rst new file mode 100644 index 00000000000..0116b8c2813 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-05-02-02-58.bpo-27413.212Th2.rst @@ -0,0 +1,2 @@ +Added ability to pass through ``ensure_ascii`` options to json.dumps in the +``json.tool`` command-line interface. diff --git a/Misc/NEWS.d/next/Library/2019-12-05-16-13-25.bpo-38529.yvQgx3.rst b/Misc/NEWS.d/next/Library/2019-12-05-16-13-25.bpo-38529.yvQgx3.rst new file mode 100644 index 00000000000..c688926b4a4 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-05-16-13-25.bpo-38529.yvQgx3.rst @@ -0,0 +1,2 @@ +Drop too noisy asyncio warning about deletion of a stream without explicit +``.close()`` call. diff --git a/Misc/NEWS.d/next/Library/2019-12-05-18-21-26.bpo-38982.W3u-03.rst b/Misc/NEWS.d/next/Library/2019-12-05-18-21-26.bpo-38982.W3u-03.rst new file mode 100644 index 00000000000..b591209ea06 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-05-18-21-26.bpo-38982.W3u-03.rst @@ -0,0 +1,5 @@ +Fix asyncio ``PidfdChildWatcher``: handle ``waitpid()`` error. If +``waitpid()`` is called elsewhere, ``waitpid()`` call fails with +:exc:`ChildProcessError`: use return code 255 in this case, and log a +warning. It ensures that the pidfd file descriptor is closed if this error +occurs. diff --git a/Misc/NEWS.d/next/Library/2019-12-06-15-11-42.bpo-38986.bg6iZt.rst b/Misc/NEWS.d/next/Library/2019-12-06-15-11-42.bpo-38986.bg6iZt.rst new file mode 100644 index 00000000000..777535299be --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-06-15-11-42.bpo-38986.bg6iZt.rst @@ -0,0 +1,2 @@ +Make repr of C accelerated TaskWakeupMethWrapper the same as of pure Python +version. diff --git a/Misc/NEWS.d/next/Library/2019-12-06-18-47-56.bpo-38916.K-raU8.rst b/Misc/NEWS.d/next/Library/2019-12-06-18-47-56.bpo-38916.K-raU8.rst new file mode 100644 index 00000000000..cb4c4c03c12 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-06-18-47-56.bpo-38916.K-raU8.rst @@ -0,0 +1,3 @@ +:class:`array.array`: Remove ``tostring()`` and ``fromstring()`` methods. +They were aliases to ``tobytes()`` and ``frombytes()``, deprecated since +Python 3.2. diff --git a/Misc/NEWS.d/next/Library/2019-12-07-13-40-52.bpo-38978.R3gHZI.rst b/Misc/NEWS.d/next/Library/2019-12-07-13-40-52.bpo-38978.R3gHZI.rst new file mode 100644 index 00000000000..8b2eab0d52a --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-07-13-40-52.bpo-38978.R3gHZI.rst @@ -0,0 +1,2 @@ +Implement ``__class_getitem__`` on asyncio objects (Future, Task, Queue). +Patch by Batuhan Taskaya. diff --git a/Misc/NEWS.d/next/Library/2019-12-07-16-32-42.bpo-38979.q0sIHy.rst b/Misc/NEWS.d/next/Library/2019-12-07-16-32-42.bpo-38979.q0sIHy.rst new file mode 100644 index 00000000000..6a91a12e493 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-07-16-32-42.bpo-38979.q0sIHy.rst @@ -0,0 +1 @@ +Return class from ``ContextVar.__class_getitem__`` to simplify subclassing. diff --git a/Misc/NEWS.d/next/Library/2019-12-07-18-58-44.bpo-38994.IJYhz_.rst b/Misc/NEWS.d/next/Library/2019-12-07-18-58-44.bpo-38994.IJYhz_.rst new file mode 100644 index 00000000000..b9cb4176350 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-07-18-58-44.bpo-38994.IJYhz_.rst @@ -0,0 +1 @@ +Implement ``__class_getitem__`` for ``os.PathLike``, ``pathlib.Path`` diff --git a/Misc/NEWS.d/next/Library/2019-12-07-21-49-50.bpo-38698.HxoSym.rst b/Misc/NEWS.d/next/Library/2019-12-07-21-49-50.bpo-38698.HxoSym.rst new file mode 100644 index 00000000000..b930dea0fa7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-07-21-49-50.bpo-38698.HxoSym.rst @@ -0,0 +1,3 @@ +Add a new ``InvalidMessageID`` token to email parser to represent invalid +Message-ID headers. Also, add defects when there is remaining value after +parsing the header. diff --git a/Misc/NEWS.d/next/Library/2019-12-07-22-25-39.bpo-38708.rZTUfk.rst b/Misc/NEWS.d/next/Library/2019-12-07-22-25-39.bpo-38708.rZTUfk.rst new file mode 100644 index 00000000000..23a0a46d1fe --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-07-22-25-39.bpo-38708.rZTUfk.rst @@ -0,0 +1 @@ +Fix a potential IndexError in email parser when parsing an empty msg-id. diff --git a/Misc/NEWS.d/next/Library/2019-12-09-14-40-09.bpo-39006.v4VsPg.rst b/Misc/NEWS.d/next/Library/2019-12-09-14-40-09.bpo-39006.v4VsPg.rst new file mode 100644 index 00000000000..8402845a5a0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-12-09-14-40-09.bpo-39006.v4VsPg.rst @@ -0,0 +1,2 @@ +Fix asyncio when the ssl module is missing: only check for ssl.SSLSocket +instance if the ssl module is available. diff --git a/Misc/NEWS.d/next/Security/2019-11-15-00-54-42.bpo-38804.vjbM8V.rst b/Misc/NEWS.d/next/Security/2019-11-15-00-54-42.bpo-38804.vjbM8V.rst new file mode 100644 index 00000000000..1f45142d9f7 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2019-11-15-00-54-42.bpo-38804.vjbM8V.rst @@ -0,0 +1 @@ +Fixes a ReDoS vulnerability in :mod:`http.cookiejar`. Patch by Ben Caller. diff --git a/Misc/NEWS.d/next/Security/2019-11-21-21-36-54.bpo-37228.yBZnFG.rst b/Misc/NEWS.d/next/Security/2019-11-21-21-36-54.bpo-37228.yBZnFG.rst new file mode 100644 index 00000000000..0fafb63402e --- /dev/null +++ b/Misc/NEWS.d/next/Security/2019-11-21-21-36-54.bpo-37228.yBZnFG.rst @@ -0,0 +1,6 @@ +Due to significant security concerns, the *reuse_address* parameter of +:meth:`asyncio.loop.create_datagram_endpoint` is no longer supported. This is +because of the behavior of ``SO_REUSEADDR`` in UDP. For more details, see the +documentation for ``loop.create_datagram_endpoint()``. +(Contributed by Kyle Stanley, Antoine Pitrou, and Yury Selivanov in +:issue:`37228`.) diff --git a/Misc/NEWS.d/next/Security/2019-12-01-22-44-40.bpo-38945.ztmNXc.rst b/Misc/NEWS.d/next/Security/2019-12-01-22-44-40.bpo-38945.ztmNXc.rst new file mode 100644 index 00000000000..1bf6ed567b2 --- /dev/null +++ b/Misc/NEWS.d/next/Security/2019-12-01-22-44-40.bpo-38945.ztmNXc.rst @@ -0,0 +1 @@ +Newline characters have been escaped when performing uu encoding to prevent them from overflowing into to content section of the encoded file. This prevents malicious or accidental modification of data during the decoding process. \ No newline at end of file diff --git a/Misc/NEWS.d/next/Tests/2019-11-04-02-54-16.bpo-38669.pazXZ8.rst b/Misc/NEWS.d/next/Tests/2019-11-04-02-54-16.bpo-38669.pazXZ8.rst new file mode 100644 index 00000000000..5060ecf2dc5 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-11-04-02-54-16.bpo-38669.pazXZ8.rst @@ -0,0 +1 @@ +Raise :exc:`TypeError` when passing target as a string with :meth:`unittest.mock.patch.object`. \ No newline at end of file diff --git a/Misc/NEWS.d/next/Tests/2019-11-20-15-42-06.bpo-38692.aqAvyF.rst b/Misc/NEWS.d/next/Tests/2019-11-20-15-42-06.bpo-38692.aqAvyF.rst new file mode 100644 index 00000000000..fa2056632ba --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-11-20-15-42-06.bpo-38692.aqAvyF.rst @@ -0,0 +1,3 @@ +Skip the test_posix.test_pidfd_open() test if ``os.pidfd_open()`` fails with a +:exc:`PermissionError`. This situation can happen in a Linux sandbox using a +syscall whitelist which doesn't allow the ``pidfd_open()`` syscall yet. diff --git a/Misc/NEWS.d/next/Tests/2019-11-21-09-11-06.bpo-38875.wSZJal.rst b/Misc/NEWS.d/next/Tests/2019-11-21-09-11-06.bpo-38875.wSZJal.rst new file mode 100644 index 00000000000..3f6c86d3226 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-11-21-09-11-06.bpo-38875.wSZJal.rst @@ -0,0 +1 @@ +test_capi: trashcan tests now require the test "cpu" resource. diff --git a/Misc/NEWS.d/next/Tests/2019-12-04-17-08-55.bpo-38965.yqax3m.rst b/Misc/NEWS.d/next/Tests/2019-12-04-17-08-55.bpo-38965.yqax3m.rst new file mode 100644 index 00000000000..517a1371eac --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-12-04-17-08-55.bpo-38965.yqax3m.rst @@ -0,0 +1,3 @@ +Fix test_faulthandler on GCC 10. Use the "volatile" keyword in +``faulthandler._stack_overflow()`` to prevent tail call optimization on any +compiler, rather than relying on compiler specific pragma. diff --git a/Misc/NEWS.d/next/Tests/2019-12-07-00-52-09.bpo-38991.JE3_o-.rst b/Misc/NEWS.d/next/Tests/2019-12-07-00-52-09.bpo-38991.JE3_o-.rst new file mode 100644 index 00000000000..cff5a656465 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-12-07-00-52-09.bpo-38991.JE3_o-.rst @@ -0,0 +1,5 @@ +:mod:`test.support`: :func:`~test.support.run_python_until_end`, +:func:`~test.support.assert_python_ok` and +:func:`~test.support.assert_python_failure` functions no longer strip +whitespaces from stderr. Remove ``test.support.strip_python_stderr()`` +function. diff --git a/Misc/NEWS.d/next/Tests/2019-12-08-15-11-06.bpo-38992.cVoHOZ.rst b/Misc/NEWS.d/next/Tests/2019-12-08-15-11-06.bpo-38992.cVoHOZ.rst new file mode 100644 index 00000000000..815ae0f65c8 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-12-08-15-11-06.bpo-38992.cVoHOZ.rst @@ -0,0 +1 @@ +Fix a test for :func:`math.fsum` that was failing due to constant folding. diff --git a/Misc/NEWS.d/next/Tests/2019-12-09-11-32-34.bpo-38547.Juw54e.rst b/Misc/NEWS.d/next/Tests/2019-12-09-11-32-34.bpo-38547.Juw54e.rst new file mode 100644 index 00000000000..10f3cc08511 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2019-12-09-11-32-34.bpo-38547.Juw54e.rst @@ -0,0 +1,3 @@ +Fix test_pty: if the process is the session leader, closing the master file +descriptor raises a SIGHUP signal: simply ignore SIGHUP when running the +tests. diff --git a/Misc/NEWS.d/next/Windows/2019-12-09-10-40-34.bpo-39007.vtarxo.rst b/Misc/NEWS.d/next/Windows/2019-12-09-10-40-34.bpo-39007.vtarxo.rst new file mode 100644 index 00000000000..f2f72f9dad3 --- /dev/null +++ b/Misc/NEWS.d/next/Windows/2019-12-09-10-40-34.bpo-39007.vtarxo.rst @@ -0,0 +1 @@ +Add auditing events to functions in :mod:`winreg`. diff --git a/Misc/NEWS.d/next/macOS/2019-08-23-12-14-34.bpo-37931.goYgQj.rst b/Misc/NEWS.d/next/macOS/2019-08-23-12-14-34.bpo-37931.goYgQj.rst new file mode 100644 index 00000000000..45b54e89cb8 --- /dev/null +++ b/Misc/NEWS.d/next/macOS/2019-08-23-12-14-34.bpo-37931.goYgQj.rst @@ -0,0 +1,3 @@ +Fixed a crash on OSX dynamic builds that occurred when re-initializing the +posix module after a Py_Finalize if the environment had changed since the +previous `import posix`. Patch by Benoît Hudson. diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c index aa46e3cf564..70da40a8a3b 100644 --- a/Modules/_asynciomodule.c +++ b/Modules/_asynciomodule.c @@ -1381,6 +1381,12 @@ finally: PyErr_Restore(error_type, error_value, error_traceback); } +static PyObject * +future_cls_getitem(PyObject *cls, PyObject *type) +{ + Py_INCREF(cls); + return cls; +} static PyAsyncMethods FutureType_as_async = { (unaryfunc)future_new_iter, /* am_await */ @@ -1400,6 +1406,7 @@ static PyMethodDef FutureType_methods[] = { _ASYNCIO_FUTURE_DONE_METHODDEF _ASYNCIO_FUTURE_GET_LOOP_METHODDEF _ASYNCIO_FUTURE__REPR_INFO_METHODDEF + {"__class_getitem__", future_cls_getitem, METH_O|METH_CLASS, NULL}, {NULL, NULL} /* Sentinel */ }; @@ -1808,6 +1815,21 @@ TaskWakeupMethWrapper_dealloc(TaskWakeupMethWrapper *o) Py_TYPE(o)->tp_free(o); } +static PyObject * +TaskWakeupMethWrapper_get___self__(TaskWakeupMethWrapper *o, void *Py_UNUSED(ignored)) +{ + if (o->ww_task) { + Py_INCREF(o->ww_task); + return (PyObject*)o->ww_task; + } + Py_RETURN_NONE; +} + +static PyGetSetDef TaskWakeupMethWrapper_getsetlist[] = { + {"__self__", (getter)TaskWakeupMethWrapper_get___self__, NULL, NULL}, + {NULL} /* Sentinel */ +}; + static PyTypeObject TaskWakeupMethWrapper_Type = { PyVarObject_HEAD_INIT(NULL, 0) "TaskWakeupMethWrapper", @@ -1819,6 +1841,7 @@ static PyTypeObject TaskWakeupMethWrapper_Type = { .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, .tp_traverse = (traverseproc)TaskWakeupMethWrapper_traverse, .tp_clear = (inquiry)TaskWakeupMethWrapper_clear, + .tp_getset = TaskWakeupMethWrapper_getsetlist, }; static PyObject * @@ -2429,6 +2452,13 @@ done: FutureObj_finalize((FutureObj*)task); } +static PyObject * +task_cls_getitem(PyObject *cls, PyObject *type) +{ + Py_INCREF(cls); + return cls; +} + static void TaskObj_dealloc(PyObject *); /* Needs Task_CheckExact */ static PyMethodDef TaskType_methods[] = { @@ -2449,6 +2479,7 @@ static PyMethodDef TaskType_methods[] = { _ASYNCIO_TASK_GET_NAME_METHODDEF _ASYNCIO_TASK_SET_NAME_METHODDEF _ASYNCIO_TASK_GET_CORO_METHODDEF + {"__class_getitem__", task_cls_getitem, METH_O|METH_CLASS, NULL}, {NULL, NULL} /* Sentinel */ }; @@ -3251,7 +3282,7 @@ module_init(void) } if (module_initialized != 0) { return 0; - } + } else { module_initialized = 1; } diff --git a/Modules/_pickle.c b/Modules/_pickle.c index 7370be59388..baa0a274196 100644 --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -6174,8 +6174,10 @@ load_get(UnpicklerObject *self) value = _Unpickler_MemoGet(self, idx); if (value == NULL) { - if (!PyErr_Occurred()) - PyErr_SetObject(PyExc_KeyError, key); + if (!PyErr_Occurred()) { + PickleState *st = _Pickle_GetGlobalState(); + PyErr_Format(st->UnpicklingError, "Memo value not found at index %ld", idx); + } Py_DECREF(key); return -1; } @@ -6201,7 +6203,8 @@ load_binget(UnpicklerObject *self) if (value == NULL) { PyObject *key = PyLong_FromSsize_t(idx); if (key != NULL) { - PyErr_SetObject(PyExc_KeyError, key); + PickleState *st = _Pickle_GetGlobalState(); + PyErr_Format(st->UnpicklingError, "Memo value not found at index %ld", idx); Py_DECREF(key); } return -1; @@ -6227,7 +6230,8 @@ load_long_binget(UnpicklerObject *self) if (value == NULL) { PyObject *key = PyLong_FromSsize_t(idx); if (key != NULL) { - PyErr_SetObject(PyExc_KeyError, key); + PickleState *st = _Pickle_GetGlobalState(); + PyErr_Format(st->UnpicklingError, "Memo value not found at index %ld", idx); Py_DECREF(key); } return -1; diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 6f1f9c88153..43b236c2121 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1410,6 +1410,54 @@ _get_peer_alt_names (X509 *certificate) { PyTuple_SET_ITEM(t, 1, v); break; + case GEN_IPADD: + /* OpenSSL < 3.0.0 adds a trailing \n to IPv6. 3.0.0 removed + * the trailing newline. Remove it in all versions + */ + t = PyTuple_New(2); + if (t == NULL) + goto fail; + + v = PyUnicode_FromString("IP Address"); + if (v == NULL) { + Py_DECREF(t); + goto fail; + } + PyTuple_SET_ITEM(t, 0, v); + + if (name->d.ip->length == 4) { + unsigned char *p = name->d.ip->data; + v = PyUnicode_FromFormat( + "%d.%d.%d.%d", + p[0], p[1], p[2], p[3] + ); + } else if (name->d.ip->length == 16) { + /* PyUnicode_FromFormat() does not support %X */ + unsigned char *p = name->d.ip->data; + len = sprintf( + buf, + "%X:%X:%X:%X:%X:%X:%X:%X", + p[0] << 8 | p[1], + p[2] << 8 | p[3], + p[4] << 8 | p[5], + p[6] << 8 | p[7], + p[8] << 8 | p[9], + p[10] << 8 | p[11], + p[12] << 8 | p[13], + p[14] << 8 | p[15] + ); + v = PyUnicode_FromStringAndSize(buf, len); + } else { + v = PyUnicode_FromString(""); + } + + if (v == NULL) { + Py_DECREF(t); + goto fail; + } + PyTuple_SET_ITEM(t, 1, v); + break; + default: /* for everything else, we use the OpenSSL print form */ switch (gntype) { @@ -1417,7 +1465,6 @@ _get_peer_alt_names (X509 *certificate) { case GEN_OTHERNAME: case GEN_X400: case GEN_EDIPARTY: - case GEN_IPADD: case GEN_RID: break; default: diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c index baa6907b7e4..943bee6e21e 100644 --- a/Modules/_testcapimodule.c +++ b/Modules/_testcapimodule.c @@ -639,7 +639,7 @@ test_long_long_and_overflow(PyObject *self, PyObject *Py_UNUSED(ignored)) int overflow; /* Test that overflow is set properly for a large value. */ - /* num is a number larger than PY_LLONG_MAX on a typical machine. */ + /* num is a number larger than LLONG_MAX on a typical machine. */ num = PyLong_FromString("FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16); if (num == NULL) return NULL; @@ -655,8 +655,8 @@ test_long_long_and_overflow(PyObject *self, PyObject *Py_UNUSED(ignored)) return raiseTestError("test_long_long_and_overflow", "overflow was not set to 1"); - /* Same again, with num = PY_LLONG_MAX + 1 */ - num = PyLong_FromLongLong(PY_LLONG_MAX); + /* Same again, with num = LLONG_MAX + 1 */ + num = PyLong_FromLongLong(LLONG_MAX); if (num == NULL) return NULL; one = PyLong_FromLong(1L); @@ -683,7 +683,7 @@ test_long_long_and_overflow(PyObject *self, PyObject *Py_UNUSED(ignored)) "overflow was not set to 1"); /* Test that overflow is set properly for a large negative value. */ - /* num is a number smaller than PY_LLONG_MIN on a typical platform */ + /* num is a number smaller than LLONG_MIN on a typical platform */ num = PyLong_FromString("-FFFFFFFFFFFFFFFFFFFFFFFF", NULL, 16); if (num == NULL) return NULL; @@ -699,8 +699,8 @@ test_long_long_and_overflow(PyObject *self, PyObject *Py_UNUSED(ignored)) return raiseTestError("test_long_long_and_overflow", "overflow was not set to -1"); - /* Same again, with num = PY_LLONG_MIN - 1 */ - num = PyLong_FromLongLong(PY_LLONG_MIN); + /* Same again, with num = LLONG_MIN - 1 */ + num = PyLong_FromLongLong(LLONG_MIN); if (num == NULL) return NULL; one = PyLong_FromLong(1L); @@ -757,7 +757,7 @@ test_long_long_and_overflow(PyObject *self, PyObject *Py_UNUSED(ignored)) return raiseTestError("test_long_long_and_overflow", "overflow was set incorrectly"); - num = PyLong_FromLongLong(PY_LLONG_MAX); + num = PyLong_FromLongLong(LLONG_MAX); if (num == NULL) return NULL; overflow = 1234; @@ -765,14 +765,14 @@ test_long_long_and_overflow(PyObject *self, PyObject *Py_UNUSED(ignored)) Py_DECREF(num); if (value == -1 && PyErr_Occurred()) return NULL; - if (value != PY_LLONG_MAX) + if (value != LLONG_MAX) return raiseTestError("test_long_long_and_overflow", - "expected return value PY_LLONG_MAX"); + "expected return value LLONG_MAX"); if (overflow != 0) return raiseTestError("test_long_long_and_overflow", "overflow was not cleared"); - num = PyLong_FromLongLong(PY_LLONG_MIN); + num = PyLong_FromLongLong(LLONG_MIN); if (num == NULL) return NULL; overflow = 0; @@ -780,9 +780,9 @@ test_long_long_and_overflow(PyObject *self, PyObject *Py_UNUSED(ignored)) Py_DECREF(num); if (value == -1 && PyErr_Occurred()) return NULL; - if (value != PY_LLONG_MIN) + if (value != LLONG_MIN) return raiseTestError("test_long_long_and_overflow", - "expected return value PY_LLONG_MIN"); + "expected return value LLONG_MIN"); if (overflow != 0) return raiseTestError("test_long_long_and_overflow", "overflow was not cleared"); @@ -6710,9 +6710,9 @@ PyInit__testcapi(void) PyModule_AddObject(m, "FLT_MIN", PyFloat_FromDouble(FLT_MIN)); PyModule_AddObject(m, "DBL_MAX", PyFloat_FromDouble(DBL_MAX)); PyModule_AddObject(m, "DBL_MIN", PyFloat_FromDouble(DBL_MIN)); - PyModule_AddObject(m, "LLONG_MAX", PyLong_FromLongLong(PY_LLONG_MAX)); - PyModule_AddObject(m, "LLONG_MIN", PyLong_FromLongLong(PY_LLONG_MIN)); - PyModule_AddObject(m, "ULLONG_MAX", PyLong_FromUnsignedLongLong(PY_ULLONG_MAX)); + PyModule_AddObject(m, "LLONG_MAX", PyLong_FromLongLong(LLONG_MAX)); + PyModule_AddObject(m, "LLONG_MIN", PyLong_FromLongLong(LLONG_MIN)); + PyModule_AddObject(m, "ULLONG_MAX", PyLong_FromUnsignedLongLong(ULLONG_MAX)); PyModule_AddObject(m, "PY_SSIZE_T_MAX", PyLong_FromSsize_t(PY_SSIZE_T_MAX)); PyModule_AddObject(m, "PY_SSIZE_T_MIN", PyLong_FromSsize_t(PY_SSIZE_T_MIN)); PyModule_AddObject(m, "SIZEOF_PYGC_HEAD", PyLong_FromSsize_t(sizeof(PyGC_Head))); @@ -6721,11 +6721,14 @@ PyInit__testcapi(void) PyModule_AddObject(m, "instancemethod", (PyObject *)&PyInstanceMethod_Type); PyModule_AddIntConstant(m, "the_number_three", 3); + PyObject *v; #ifdef WITH_PYMALLOC - PyModule_AddObject(m, "WITH_PYMALLOC", Py_True); + v = Py_True; #else - PyModule_AddObject(m, "WITH_PYMALLOC", Py_False); + v = Py_False; #endif + Py_INCREF(v); + PyModule_AddObject(m, "WITH_PYMALLOC", v); TestError = PyErr_NewException("_testcapi.error", NULL, NULL); Py_INCREF(TestError); diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 1ceba9e63cb..edb56ab6e18 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1623,27 +1623,6 @@ frombytes(arrayobject *self, Py_buffer *buffer) Py_RETURN_NONE; } -/*[clinic input] -array.array.fromstring - - buffer: Py_buffer(accept={str, buffer}) - / - -Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method). - -This method is deprecated. Use frombytes instead. -[clinic start generated code]*/ - -static PyObject * -array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer) -/*[clinic end generated code: output=31c4baa779df84ce input=a3341a512e11d773]*/ -{ - if (PyErr_WarnEx(PyExc_DeprecationWarning, - "fromstring() is deprecated. Use frombytes() instead.", 2) != 0) - return NULL; - return frombytes(self, buffer); -} - /*[clinic input] array.array.frombytes @@ -1678,24 +1657,6 @@ array_array_tobytes_impl(arrayobject *self) } } -/*[clinic input] -array.array.tostring - -Convert the array to an array of machine values and return the bytes representation. - -This method is deprecated. Use tobytes instead. -[clinic start generated code]*/ - -static PyObject * -array_array_tostring_impl(arrayobject *self) -/*[clinic end generated code: output=7d6bd92745a2c8f3 input=b6c0ddee7b30457e]*/ -{ - if (PyErr_WarnEx(PyExc_DeprecationWarning, - "tostring() is deprecated. Use tobytes() instead.", 2) != 0) - return NULL; - return array_array_tobytes_impl(self); -} - /*[clinic input] array.array.fromunicode @@ -2283,7 +2244,6 @@ static PyMethodDef array_methods[] = { ARRAY_ARRAY_EXTEND_METHODDEF ARRAY_ARRAY_FROMFILE_METHODDEF ARRAY_ARRAY_FROMLIST_METHODDEF - ARRAY_ARRAY_FROMSTRING_METHODDEF ARRAY_ARRAY_FROMBYTES_METHODDEF ARRAY_ARRAY_FROMUNICODE_METHODDEF ARRAY_ARRAY_INDEX_METHODDEF @@ -2294,7 +2254,6 @@ static PyMethodDef array_methods[] = { ARRAY_ARRAY_REVERSE_METHODDEF ARRAY_ARRAY_TOFILE_METHODDEF ARRAY_ARRAY_TOLIST_METHODDEF - ARRAY_ARRAY_TOSTRING_METHODDEF ARRAY_ARRAY_TOBYTES_METHODDEF ARRAY_ARRAY_TOUNICODE_METHODDEF ARRAY_ARRAY___SIZEOF___METHODDEF diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h index 33f82d4da8b..e1f4b0397b9 100644 --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -312,54 +312,6 @@ array_array_tolist(arrayobject *self, PyObject *Py_UNUSED(ignored)) return array_array_tolist_impl(self); } -PyDoc_STRVAR(array_array_fromstring__doc__, -"fromstring($self, buffer, /)\n" -"--\n" -"\n" -"Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method).\n" -"\n" -"This method is deprecated. Use frombytes instead."); - -#define ARRAY_ARRAY_FROMSTRING_METHODDEF \ - {"fromstring", (PyCFunction)array_array_fromstring, METH_O, array_array_fromstring__doc__}, - -static PyObject * -array_array_fromstring_impl(arrayobject *self, Py_buffer *buffer); - -static PyObject * -array_array_fromstring(arrayobject *self, PyObject *arg) -{ - PyObject *return_value = NULL; - Py_buffer buffer = {NULL, NULL}; - - if (PyUnicode_Check(arg)) { - Py_ssize_t len; - const char *ptr = PyUnicode_AsUTF8AndSize(arg, &len); - if (ptr == NULL) { - goto exit; - } - PyBuffer_FillInfo(&buffer, arg, (void *)ptr, len, 1, 0); - } - else { /* any bytes-like object */ - if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) { - goto exit; - } - if (!PyBuffer_IsContiguous(&buffer, 'C')) { - _PyArg_BadArgument("fromstring", "argument", "contiguous buffer", arg); - goto exit; - } - } - return_value = array_array_fromstring_impl(self, &buffer); - -exit: - /* Cleanup for buffer */ - if (buffer.obj) { - PyBuffer_Release(&buffer); - } - - return return_value; -} - PyDoc_STRVAR(array_array_frombytes__doc__, "frombytes($self, buffer, /)\n" "--\n" @@ -414,26 +366,6 @@ array_array_tobytes(arrayobject *self, PyObject *Py_UNUSED(ignored)) return array_array_tobytes_impl(self); } -PyDoc_STRVAR(array_array_tostring__doc__, -"tostring($self, /)\n" -"--\n" -"\n" -"Convert the array to an array of machine values and return the bytes representation.\n" -"\n" -"This method is deprecated. Use tobytes instead."); - -#define ARRAY_ARRAY_TOSTRING_METHODDEF \ - {"tostring", (PyCFunction)array_array_tostring, METH_NOARGS, array_array_tostring__doc__}, - -static PyObject * -array_array_tostring_impl(arrayobject *self); - -static PyObject * -array_array_tostring(arrayobject *self, PyObject *Py_UNUSED(ignored)) -{ - return array_array_tostring_impl(self); -} - PyDoc_STRVAR(array_array_fromunicode__doc__, "fromunicode($self, ustr, /)\n" "--\n" @@ -599,4 +531,4 @@ PyDoc_STRVAR(array_arrayiterator___setstate____doc__, #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=6aa421571e2c0756 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f649fc0bc9f6b13a input=a9049054013a1b77]*/ diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index d1280532ae2..b19401e94d8 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -1161,18 +1161,14 @@ faulthandler_fatal_error_py(PyObject *self, PyObject *args) #if defined(FAULTHANDLER_USE_ALT_STACK) #define FAULTHANDLER_STACK_OVERFLOW -#ifdef __INTEL_COMPILER - /* Issue #23654: Turn off ICC's tail call optimization for the - * stack_overflow generator. ICC turns the recursive tail call into - * a loop. */ -# pragma intel optimization_level 0 -#endif -static -uintptr_t +static uintptr_t stack_overflow(uintptr_t min_sp, uintptr_t max_sp, size_t *depth) { - /* allocate 4096 bytes on the stack at each call */ - unsigned char buffer[4096]; + /* Allocate (at least) 4096 bytes on the stack at each call. + + bpo-23654, bpo-38965: use volatile keyword to prevent tail call + optimization. */ + volatile unsigned char buffer[4096]; uintptr_t sp = (uintptr_t)&buffer; *depth += 1; if (sp < min_sp || max_sp < sp) diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index d232179a11c..64afe831c84 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1031,7 +1031,6 @@ clear_freelists(void) { (void)PyFrame_ClearFreeList(); (void)PyTuple_ClearFreeList(); - (void)PyUnicode_ClearFreeList(); (void)PyFloat_ClearFreeList(); (void)PyList_ClearFreeList(); (void)PyDict_ClearFreeList(); diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index f7386300c56..322c2159812 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1402,7 +1402,6 @@ win32_get_reparse_tag(HANDLE reparse_point_handle, ULONG *reparse_tag) ** man environ(7). */ #include -static char **environ; #elif !defined(_MSC_VER) && (!defined(__WATCOMC__) || defined(__QNX__) || defined(__VXWORKS__)) extern char **environ; #endif /* !_MSC_VER */ @@ -1420,15 +1419,16 @@ convertenviron(void) d = PyDict_New(); if (d == NULL) return NULL; -#if defined(WITH_NEXT_FRAMEWORK) || (defined(__APPLE__) && defined(Py_ENABLE_SHARED)) - if (environ == NULL) - environ = *_NSGetEnviron(); -#endif #ifdef MS_WINDOWS /* _wenviron must be initialized in this way if the program is started through main() instead of wmain(). */ _wgetenv(L""); e = _wenviron; +#elif defined(WITH_NEXT_FRAMEWORK) || (defined(__APPLE__) && defined(Py_ENABLE_SHARED)) + /* environ is not accessible as an extern in a shared object on OSX; use + _NSGetEnviron to resolve it. The value changes if you add environment + variables between calls to Py_Initialize, so don't cache the value. */ + e = *_NSGetEnviron(); #else e = environ; #endif @@ -7589,6 +7589,7 @@ wait_helper(pid_t pid, int status, struct rusage *ru) /* XXX(nnorwitz): Copied (w/mods) from resource.c, there should be only one. */ result = PyStructSequence_New((PyTypeObject*) struct_rusage); + Py_DECREF(struct_rusage); if (!result) return NULL; diff --git a/Modules/readline.c b/Modules/readline.c index b76861f7b04..27a993f449f 100644 --- a/Modules/readline.c +++ b/Modules/readline.c @@ -45,14 +45,14 @@ extern char **completion_matches(char *, CPFunction *); #endif #endif -#ifdef __APPLE__ /* * It is possible to link the readline module to the readline * emulation library of editline/libedit. * - * On OSX this emulation library is not 100% API compatible - * with the "real" readline and cannot be detected at compile-time, - * hence we use a runtime check to detect if we're using libedit + * This emulation library is not 100% API compatible with the "real" readline + * and cannot be detected at compile-time, + * hence we use a runtime check to detect if the Python readlinke module is + * linked to libedit. * * Currently there is one known API incompatibility: * - 'get_history' has a 1-based index with GNU readline, and a 0-based @@ -64,7 +64,6 @@ static int using_libedit_emulation = 0; static const char libedit_version_tag[] = "EditLine wrapper"; static int libedit_history_start = 0; -#endif /* __APPLE__ */ #ifdef HAVE_RL_COMPLETION_DISPLAY_MATCHES_HOOK static void @@ -693,7 +692,6 @@ get_history_item(PyObject *self, PyObject *args) if (!PyArg_ParseTuple(args, "i:get_history_item", &idx)) return NULL; -#ifdef __APPLE__ if (using_libedit_emulation) { /* Older versions of libedit's readline emulation * use 0-based indexes, while readline and newer @@ -713,7 +711,6 @@ get_history_item(PyObject *self, PyObject *args) Py_RETURN_NONE; } } -#endif /* __APPLE__ */ if ((hist_ent = history_get(idx))) return decode(hist_ent->line); else { @@ -1081,7 +1078,6 @@ setup_readline(readlinestate *mod_state) /* The name must be defined before initialization */ rl_readline_name = "python"; -#ifdef __APPLE__ /* the libedit readline emulation resets key bindings etc * when calling rl_initialize. So call it upfront */ @@ -1098,7 +1094,6 @@ setup_readline(readlinestate *mod_state) libedit_history_start = 1; } clear_history(); -#endif /* __APPLE__ */ using_history(); @@ -1127,9 +1122,7 @@ setup_readline(readlinestate *mod_state) mod_state->begidx = PyLong_FromLong(0L); mod_state->endidx = PyLong_FromLong(0L); -#ifdef __APPLE__ if (!using_libedit_emulation) -#endif { if (!isatty(STDOUT_FILENO)) { /* Issue #19884: stdout is not a terminal. Disable meta modifier @@ -1149,11 +1142,9 @@ setup_readline(readlinestate *mod_state) * XXX: A bug in the readline-2.2 library causes a memory leak * inside this function. Nothing we can do about it. */ -#ifdef __APPLE__ if (using_libedit_emulation) rl_read_init_file(NULL); else -#endif /* __APPLE__ */ rl_initialize(); RESTORE_LOCALE(saved_locale) @@ -1283,12 +1274,10 @@ call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt) int length = _py_get_history_length(); if (length > 0) { HIST_ENTRY *hist_ent; -#ifdef __APPLE__ if (using_libedit_emulation) { /* handle older 0-based or newer 1-based indexing */ hist_ent = history_get(length + libedit_history_start - 1); } else -#endif /* __APPLE__ */ hist_ent = history_get(length); line = hist_ent ? hist_ent->line : ""; } else @@ -1316,10 +1305,8 @@ call_readline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt) PyDoc_STRVAR(doc_module, "Importing this module enables command line editing using GNU readline."); -#ifdef __APPLE__ PyDoc_STRVAR(doc_module_le, "Importing this module enables command line editing using libedit readline."); -#endif /* __APPLE__ */ static struct PyModuleDef readlinemodule = { PyModuleDef_HEAD_INIT, @@ -1340,7 +1327,6 @@ PyInit_readline(void) PyObject *m; readlinestate *mod_state; -#ifdef __APPLE__ if (strncmp(rl_library_version, libedit_version_tag, strlen(libedit_version_tag)) == 0) { using_libedit_emulation = 1; } @@ -1348,7 +1334,6 @@ PyInit_readline(void) if (using_libedit_emulation) readlinemodule.m_doc = doc_module_le; -#endif /* __APPLE__ */ m = PyModule_Create(&readlinemodule); diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 39bf6fc6f22..f0b62ec9414 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -641,6 +641,13 @@ code_replace_impl(PyCodeObject *self, int co_argcount, #undef CHECK_INT_ARG + if (PySys_Audit("code.__new__", "OOOiiiiii", + co_code, co_filename, co_name, co_argcount, + co_posonlyargcount, co_kwonlyargcount, co_nlocals, + co_stacksize, co_flags) < 0) { + return NULL; + } + return (PyObject *)PyCode_NewWithPosOnlyArgs( co_argcount, co_posonlyargcount, co_kwonlyargcount, co_nlocals, co_stacksize, co_flags, (PyObject*)co_code, co_consts, co_names, diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 27ef9ff2590..d7acb41f7a3 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -66,6 +66,285 @@ get_arg(const _Py_CODEUNIT *codestr, Py_ssize_t i) return oparg; } +typedef struct _codetracker { + unsigned char *code; + Py_ssize_t code_len; + unsigned char *lnotab; + Py_ssize_t lnotab_len; + int start_line; + int offset; + int line; + int addr; + int line_addr; +} codetracker; + +/* Reset the mutable parts of the tracker */ +static void +reset(codetracker *tracker) +{ + tracker->offset = 0; + tracker->addr = 0; + tracker->line_addr = 0; + tracker->line = tracker->start_line; +} + +/* Initialise the tracker */ +static void +init_codetracker(codetracker *tracker, PyCodeObject *code_obj) +{ + PyBytes_AsStringAndSize(code_obj->co_code, + (char **)&tracker->code, &tracker->code_len); + PyBytes_AsStringAndSize(code_obj->co_lnotab, + (char **)&tracker->lnotab, &tracker->lnotab_len); + tracker->start_line = code_obj->co_firstlineno; + reset(tracker); +} + +static void +advance_tracker(codetracker *tracker) +{ + tracker->addr += sizeof(_Py_CODEUNIT); + if (tracker->offset >= tracker->lnotab_len) { + return; + } + while (tracker->offset < tracker->lnotab_len && + tracker->addr >= tracker->line_addr + tracker->lnotab[tracker->offset]) { + tracker->line_addr += tracker->lnotab[tracker->offset]; + tracker->line += (signed char)tracker->lnotab[tracker->offset+1]; + tracker->offset += 2; + } +} + + +static void +retreat_tracker(codetracker *tracker) +{ + tracker->addr -= sizeof(_Py_CODEUNIT); + while (tracker->addr < tracker->line_addr) { + tracker->offset -= 2; + tracker->line_addr -= tracker->lnotab[tracker->offset]; + tracker->line -= (signed char)tracker->lnotab[tracker->offset+1]; + } +} + +static int +move_to_addr(codetracker *tracker, int addr) +{ + while (addr > tracker->addr) { + advance_tracker(tracker); + if (tracker->addr >= tracker->code_len) { + return -1; + } + } + while (addr < tracker->addr) { + retreat_tracker(tracker); + if (tracker->addr < 0) { + return -1; + } + } + return 0; +} + +static int +first_line_not_before(codetracker *tracker, int line) +{ + int result = INT_MAX; + reset(tracker); + while (tracker->addr < tracker->code_len) { + if (tracker->line == line) { + return line; + } + if (tracker->line > line && tracker->line < result) { + result = tracker->line; + } + advance_tracker(tracker); + } + if (result == INT_MAX) { + return -1; + } + return result; +} + +static int +move_to_nearest_start_of_line(codetracker *tracker, int line) +{ + if (line > tracker->line) { + while (line != tracker->line) { + advance_tracker(tracker); + if (tracker->addr >= tracker->code_len) { + return -1; + } + } + } + else { + while (line != tracker->line) { + retreat_tracker(tracker); + if (tracker->addr < 0) { + return -1; + } + } + while (tracker->addr > tracker->line_addr) { + retreat_tracker(tracker); + } + } + return 0; +} + +typedef struct _blockitem +{ + unsigned char kind; + int end_addr; + int start_line; +} blockitem; + +typedef struct _blockstack +{ + blockitem stack[CO_MAXBLOCKS]; + int depth; +} blockstack; + + +static void +init_blockstack(blockstack *blocks) +{ + blocks->depth = 0; +} + +static void +push_block(blockstack *blocks, unsigned char kind, + int end_addr, int start_line) +{ + assert(blocks->depth < CO_MAXBLOCKS); + blocks->stack[blocks->depth].kind = kind; + blocks->stack[blocks->depth].end_addr = end_addr; + blocks->stack[blocks->depth].start_line = start_line; + blocks->depth++; +} + +static unsigned char +pop_block(blockstack *blocks) +{ + assert(blocks->depth > 0); + blocks->depth--; + return blocks->stack[blocks->depth].kind; +} + +static blockitem * +top_block(blockstack *blocks) +{ + assert(blocks->depth > 0); + return &blocks->stack[blocks->depth-1]; +} + +static inline int +is_try_except(unsigned char op, int target_op) +{ + return op == SETUP_FINALLY && (target_op == DUP_TOP || target_op == POP_TOP); +} + +static inline int +is_async_for(unsigned char op, int target_op) +{ + return op == SETUP_FINALLY && target_op == END_ASYNC_FOR; +} + +static inline int +is_try_finally(unsigned char op, int target_op) +{ + return op == SETUP_FINALLY && !is_try_except(op, target_op) && !is_async_for(op, target_op); +} + +/* Kind for finding except blocks in the jump to line code */ +#define TRY_EXCEPT 250 + +static int +block_stack_for_line(codetracker *tracker, int line, blockstack *blocks) +{ + if (line < tracker->start_line) { + return -1; + } + init_blockstack(blocks); + reset(tracker); + while (tracker->addr < tracker->code_len) { + if (tracker->line == line) { + return 0; + } + if (blocks->depth > 0 && tracker->addr == top_block(blocks)->end_addr) { + unsigned char kind = pop_block(blocks); + assert(kind != SETUP_FINALLY); + if (kind == TRY_EXCEPT) { + push_block(blocks, POP_EXCEPT, -1, tracker->line); + } + if (kind == SETUP_WITH || kind == SETUP_ASYNC_WITH) { + push_block(blocks, WITH_EXCEPT_START, -1, tracker->line); + } + } + unsigned char op = tracker->code[tracker->addr]; + if (op == SETUP_FINALLY || op == SETUP_ASYNC_WITH || op == SETUP_WITH || op == FOR_ITER) { + unsigned int oparg = get_arg((const _Py_CODEUNIT *)tracker->code, + tracker->addr / sizeof(_Py_CODEUNIT)); + int target_addr = tracker->addr + oparg + sizeof(_Py_CODEUNIT); + int target_op = tracker->code[target_addr]; + if (is_async_for(op, target_op)) { + push_block(blocks, FOR_ITER, target_addr, tracker->line); + } + else if (op == FOR_ITER) { + push_block(blocks, FOR_ITER, target_addr-sizeof(_Py_CODEUNIT), tracker->line); + } + else if (is_try_except(op, target_op)) { + push_block(blocks, TRY_EXCEPT, target_addr-sizeof(_Py_CODEUNIT), tracker->line); + } + else if (is_try_finally(op, target_op)) { + int addr = tracker->addr; + // Skip over duplicate 'finally' blocks if line is after body. + move_to_addr(tracker, target_addr); + if (tracker->line > line) { + // Target is in body, rewind to start. + move_to_addr(tracker, addr); + push_block(blocks, op, target_addr, tracker->line); + } + else { + // Now in finally block. + push_block(blocks, RERAISE, -1, tracker->line); + } + } + else { + push_block(blocks, op, target_addr, tracker->line); + } + } + else if (op == RERAISE) { + assert(blocks->depth > 0); + unsigned char kind = top_block(blocks)->kind; + if (kind == RERAISE || kind == WITH_EXCEPT_START || kind == POP_EXCEPT) { + pop_block(blocks); + } + + } + advance_tracker(tracker); + } + return -1; +} + +static void +frame_stack_pop(PyFrameObject *f) +{ + PyObject *v = (*--f->f_stacktop); + Py_DECREF(v); +} + +static void +frame_block_unwind(PyFrameObject *f) +{ + assert(f->f_iblock > 0); + f->f_iblock--; + PyTryBlock *b = &f->f_blockstack[f->f_iblock]; + int delta = (f->f_stacktop - f->f_valuestack) - b->b_level; + while (delta > 0) { + frame_stack_pop(f); + delta--; + } +} + /* Setter for f_lineno - you can set f_lineno from within a trace function in * order to jump to a given line of code, subject to some restrictions. Most @@ -77,7 +356,8 @@ get_arg(const _Py_CODEUNIT *codestr, Py_ssize_t i) * o Lines with an 'except' statement on them can't be jumped to, because * they expect an exception to be on the top of the stack. * o Lines that live in a 'finally' block can't be jumped from or to, since - * the END_FINALLY expects to clean up the stack after the 'try' block. + * we cannot be sure which state the interpreter was in or would be in + * during execution of the finally block. * o 'try', 'with' and 'async with' blocks can't be jumped into because * the blockstack needs to be set up before their code runs. * o 'for' and 'async for' loops can't be jumped into because the @@ -89,22 +369,6 @@ get_arg(const _Py_CODEUNIT *codestr, Py_ssize_t i) static int frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignored)) { - int new_lineno = 0; /* The new value of f_lineno */ - long l_new_lineno; - int overflow; - int new_lasti = 0; /* The new value of f_lasti */ - unsigned char *code = NULL; /* The bytecode for the frame... */ - Py_ssize_t code_len = 0; /* ...and its length */ - unsigned char *lnotab = NULL; /* Iterating over co_lnotab */ - Py_ssize_t lnotab_len = 0; /* (ditto) */ - int offset = 0; /* (ditto) */ - int line = 0; /* (ditto) */ - int addr = 0; /* (ditto) */ - int delta_iblock = 0; /* Scanning the SETUPs and POPs */ - int delta = 0; - int blockstack[CO_MAXBLOCKS]; /* Walking the 'finally' blocks */ - int blockstack_top = 0; /* (ditto) */ - if (p_new_lineno == NULL) { PyErr_SetString(PyExc_AttributeError, "cannot delete attribute"); return -1; @@ -145,189 +409,131 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore return -1; } - /* Fail if the line comes before the start of the code block. */ - l_new_lineno = PyLong_AsLongAndOverflow(p_new_lineno, &overflow); - if (overflow -#if SIZEOF_LONG > SIZEOF_INT - || l_new_lineno > INT_MAX - || l_new_lineno < INT_MIN -#endif - ) { - PyErr_SetString(PyExc_ValueError, - "lineno out of range"); - return -1; - } - new_lineno = (int)l_new_lineno; - if (new_lineno < f->f_code->co_firstlineno) { - PyErr_Format(PyExc_ValueError, - "line %d comes before the current code block", - new_lineno); - return -1; - } - else if (new_lineno == f->f_code->co_firstlineno) { - new_lasti = 0; - new_lineno = f->f_code->co_firstlineno; - } - else { - /* Find the bytecode offset for the start of the given - * line, or the first code-owning line after it. */ - char *tmp; - PyBytes_AsStringAndSize(f->f_code->co_lnotab, - &tmp, &lnotab_len); - lnotab = (unsigned char *) tmp; - addr = 0; - line = f->f_code->co_firstlineno; - new_lasti = -1; - for (offset = 0; offset < lnotab_len; offset += 2) { - addr += lnotab[offset]; - line += (signed char)lnotab[offset+1]; - if (line >= new_lineno) { - new_lasti = addr; - new_lineno = line; - break; - } + codetracker tracker; + init_codetracker(&tracker, f->f_code); + move_to_addr(&tracker, f->f_lasti); + int current_line = tracker.line; + assert(current_line >= 0); + int new_lineno; + + { + /* Fail if the line falls outside the code block and + select first line with actual code. */ + int overflow; + long l_new_lineno = PyLong_AsLongAndOverflow(p_new_lineno, &overflow); + if (overflow +#if SIZEOF_LONG > SIZEOF_INT + || l_new_lineno > INT_MAX + || l_new_lineno < INT_MIN +#endif + ) { + PyErr_SetString(PyExc_ValueError, + "lineno out of range"); + return -1; + } + new_lineno = (int)l_new_lineno; + + if (new_lineno < f->f_code->co_firstlineno) { + PyErr_Format(PyExc_ValueError, + "line %d comes before the current code block", + new_lineno); + return -1; + } + + new_lineno = first_line_not_before(&tracker, new_lineno); + if (new_lineno < 0) { + PyErr_Format(PyExc_ValueError, + "line %d comes after the current code block", + (int)l_new_lineno); + return -1; } } - /* If we didn't reach the requested line, return an error. */ - if (new_lasti == -1) { - PyErr_Format(PyExc_ValueError, - "line %d comes after the current code block", - new_lineno); + if (tracker.code[f->f_lasti] == YIELD_VALUE || tracker.code[f->f_lasti] == YIELD_FROM) { + PyErr_SetString(PyExc_ValueError, + "can't jump from a 'yield' statement"); return -1; } - /* We're now ready to look at the bytecode. */ - PyBytes_AsStringAndSize(f->f_code->co_code, (char **)&code, &code_len); + /* Find block stack for current line and target line. */ + blockstack current_stack, new_stack; + block_stack_for_line(&tracker, new_lineno, &new_stack); + block_stack_for_line(&tracker, current_line, ¤t_stack); /* The trace function is called with a 'return' trace event after the * execution of a yield statement. */ - assert(f->f_lasti != -1); - if (code[f->f_lasti] == YIELD_VALUE || code[f->f_lasti] == YIELD_FROM) { - PyErr_SetString(PyExc_ValueError, - "can't jump from a yield statement"); - return -1; - } - - /* You can't jump onto a line with an 'except' statement on it - - * they expect to have an exception on the top of the stack, which - * won't be true if you jump to them. They always start with code - * that either pops the exception using POP_TOP (plain 'except:' - * lines do this) or duplicates the exception on the stack using - * DUP_TOP (if there's an exception type specified). See compile.c, - * 'com_try_except' for the full details. There aren't any other - * cases (AFAIK) where a line's code can start with DUP_TOP or - * POP_TOP, but if any ever appear, they'll be subject to the same - * restriction (but with a different error message). */ - if (code[new_lasti] == DUP_TOP || code[new_lasti] == POP_TOP) { + if (tracker.code[tracker.addr] == DUP_TOP || tracker.code[tracker.addr] == POP_TOP) { PyErr_SetString(PyExc_ValueError, "can't jump to 'except' line as there's no exception"); return -1; } - /* You can't jump into or out of a 'finally' block because the 'try' - * block leaves something on the stack for the END_FINALLY to clean up. - * So we walk the bytecode, maintaining a simulated blockstack. - * 'blockstack' is a stack of the bytecode addresses of the starts of - * the 'finally' blocks. */ - memset(blockstack, '\0', sizeof(blockstack)); - blockstack_top = 0; - unsigned char prevop = NOP; - for (addr = 0; addr < code_len; addr += sizeof(_Py_CODEUNIT)) { - unsigned char op = code[addr]; - switch (op) { + /* Validate change of block stack. */ + if (new_stack.depth > 0) { + blockitem *current_block_at_new_depth = &(current_stack.stack[new_stack.depth-1]); + if (new_stack.depth > current_stack.depth || + top_block(&new_stack)->start_line != current_block_at_new_depth->start_line) { + unsigned char target_kind = top_block(&new_stack)->kind; + char *msg; + if (target_kind == POP_EXCEPT) { + msg = "can't jump into an 'except' block as there's no exception"; + } + else if (target_kind == RERAISE) { + msg = "can't jump into a 'finally' block"; + } + else { + msg = "can't jump into the middle of a block"; + } + PyErr_SetString(PyExc_ValueError, msg); + return -1; + } + } + + /* Check for illegal jumps out of finally or except blocks. */ + for (int depth = new_stack.depth; depth < current_stack.depth; depth++) { + switch(current_stack.stack[depth].kind) { + case RERAISE: + PyErr_SetString(PyExc_ValueError, + "can't jump out of a 'finally' block"); + return -1; + case POP_EXCEPT: + PyErr_SetString(PyExc_ValueError, + "can't jump out of an 'except' block"); + return -1; + } + } + + /* Unwind block stack. */ + while (current_stack.depth > new_stack.depth) { + unsigned char kind = pop_block(¤t_stack); + switch(kind) { + case FOR_ITER: + frame_stack_pop(f); + break; case SETUP_FINALLY: + case TRY_EXCEPT: + frame_block_unwind(f); + break; case SETUP_WITH: case SETUP_ASYNC_WITH: - case FOR_ITER: { - unsigned int oparg = get_arg((const _Py_CODEUNIT *)code, - addr / sizeof(_Py_CODEUNIT)); - int target_addr = addr + oparg + sizeof(_Py_CODEUNIT); - assert(target_addr < code_len); - /* Police block-jumping (you can't jump into the middle of a block) - * and ensure that the blockstack finishes up in a sensible state (by - * popping any blocks we're jumping out of). We look at all the - * blockstack operations between the current position and the new - * one, and keep track of how many blocks we drop out of on the way. - * By also keeping track of the lowest blockstack position we see, we - * can tell whether the jump goes into any blocks without coming out - * again - in that case we raise an exception below. */ - int first_in = addr < f->f_lasti && f->f_lasti < target_addr; - int second_in = addr < new_lasti && new_lasti < target_addr; - if (!first_in && second_in) { - PyErr_SetString(PyExc_ValueError, - "can't jump into the middle of a block"); - return -1; - } - int in_for_loop = op == FOR_ITER || code[target_addr] == END_ASYNC_FOR; - if (first_in && !second_in) { - if (!delta_iblock) { - if (in_for_loop) { - /* Pop the iterators of any 'for' and 'async for' loop - * we're jumping out of. */ - delta++; - } - else if (prevop == LOAD_CONST) { - /* Pops None pushed before SETUP_FINALLY. */ - delta++; - } - } - if (!in_for_loop) { - delta_iblock++; - } - } - if (!in_for_loop) { - blockstack[blockstack_top++] = target_addr; - } + frame_block_unwind(f); + // Pop the exit function + frame_stack_pop(f); break; - } - - case END_FINALLY: { - assert(blockstack_top > 0); - int target_addr = blockstack[--blockstack_top]; - assert(target_addr <= addr); - int first_in = target_addr <= f->f_lasti && f->f_lasti <= addr; - int second_in = target_addr <= new_lasti && new_lasti <= addr; - if (first_in != second_in) { - op = code[target_addr]; - PyErr_Format(PyExc_ValueError, - "can't jump %s %s block", - second_in ? "into" : "out of", - (op == DUP_TOP || op == POP_TOP) ? - "an 'except'" : "a 'finally'"); - return -1; - } - break; - } - } - prevop = op; - } - - /* Verify that the blockstack tracking code didn't get lost. */ - assert(blockstack_top == 0); - - /* Pop any blocks that we're jumping out of. */ - if (delta_iblock > 0) { - f->f_iblock -= delta_iblock; - PyTryBlock *b = &f->f_blockstack[f->f_iblock]; - delta += (int)(f->f_stacktop - f->f_valuestack) - b->b_level; - if (b->b_type == SETUP_FINALLY && - code[b->b_handler] == WITH_CLEANUP_START) - { - /* Pop the exit function. */ - delta++; + default: + PyErr_SetString(PyExc_SystemError, + "unexpected block kind"); + return -1; } } - while (delta > 0) { - PyObject *v = (*--f->f_stacktop); - Py_DECREF(v); - delta--; - } + + move_to_addr(&tracker, f->f_lasti); + move_to_nearest_start_of_line(&tracker, new_lineno); /* Finally set the new f_lineno and f_lasti and return OK. */ f->f_lineno = new_lineno; - f->f_lasti = new_lasti; + f->f_lasti = tracker.addr; return 0; } diff --git a/Objects/longobject.c b/Objects/longobject.c index 2b57ea18666..bc87fb2bd65 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -40,7 +40,7 @@ PyObject *_PyLong_One = NULL; The integers that are preallocated are those in the range -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive). */ -static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS]; +static PyLongObject* small_ints[NSMALLNEGINTS + NSMALLPOSINTS] = {0}; #define IS_SMALL_INT(ival) (-NSMALLNEGINTS <= (ival) && (ival) < NSMALLPOSINTS) #define IS_SMALL_UINT(ival) ((ival) < NSMALLPOSINTS) @@ -52,9 +52,8 @@ Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs; static PyObject * get_small_int(sdigit ival) { - PyObject *v; assert(IS_SMALL_INT(ival)); - v = (PyObject *)&small_ints[ival + NSMALLNEGINTS]; + PyObject *v = (PyObject*)small_ints[ival + NSMALLNEGINTS]; Py_INCREF(v); #ifdef COUNT_ALLOCS if (ival >= 0) @@ -1159,7 +1158,7 @@ PyLong_AsVoidPtr(PyObject *vv) * rewritten to use the newer PyLong_{As,From}ByteArray API. */ -#define PY_ABS_LLONG_MIN (0-(unsigned long long)PY_LLONG_MIN) +#define PY_ABS_LLONG_MIN (0-(unsigned long long)LLONG_MIN) /* Create a new int object from a C long long int. */ @@ -1463,11 +1462,11 @@ PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow) /* Haven't lost any bits, but casting to long requires extra * care (see comment above). */ - if (x <= (unsigned long long)PY_LLONG_MAX) { + if (x <= (unsigned long long)LLONG_MAX) { res = (long long)x * sign; } else if (sign < 0 && x == PY_ABS_LLONG_MIN) { - res = PY_LLONG_MIN; + res = LLONG_MIN; } else { *overflow = sign; @@ -3207,7 +3206,7 @@ x_sub(PyLongObject *a, PyLongObject *b) if (sign < 0) { Py_SIZE(z) = -Py_SIZE(z); } - return long_normalize(z); + return maybe_small_long(long_normalize(z)); } static PyObject * @@ -3255,13 +3254,15 @@ long_sub(PyLongObject *a, PyLongObject *b) return PyLong_FromLong(MEDIUM_VALUE(a) - MEDIUM_VALUE(b)); } if (Py_SIZE(a) < 0) { - if (Py_SIZE(b) < 0) - z = x_sub(a, b); - else + if (Py_SIZE(b) < 0) { + z = x_sub(b, a); + } + else { z = x_add(a, b); - if (z != NULL) { - assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1); - Py_SIZE(z) = -(Py_SIZE(z)); + if (z != NULL) { + assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1); + Py_SIZE(z) = -(Py_SIZE(z)); + } } } else { @@ -5019,7 +5020,7 @@ simple: /* a fits into a long, so b must too */ x = PyLong_AsLong((PyObject *)a); y = PyLong_AsLong((PyObject *)b); -#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT +#elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT x = PyLong_AsLongLong((PyObject *)a); y = PyLong_AsLongLong((PyObject *)b); #else @@ -5038,7 +5039,7 @@ simple: } #if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT return PyLong_FromLong(x); -#elif PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT +#elif LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT return PyLong_FromLongLong(x); #else # error "_PyLong_GCD" @@ -5784,40 +5785,30 @@ int _PyLong_Init(void) { #if NSMALLNEGINTS + NSMALLPOSINTS > 0 - int ival, size; - PyLongObject *v = small_ints; + for (Py_ssize_t i=0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++) { + sdigit ival = (sdigit)i - NSMALLNEGINTS; + int size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1); - for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) { - size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1); - if (Py_TYPE(v) == &PyLong_Type) { - /* The element is already initialized, most likely - * the Python interpreter was initialized before. - */ - Py_ssize_t refcnt; - PyObject* op = (PyObject*)v; + PyLongObject *v = _PyLong_New(1); + if (!v) { + return -1; + } - refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op); - _Py_NewReference(op); - /* _Py_NewReference sets the ref count to 1 but - * the ref count might be larger. Set the refcnt - * to the original refcnt + 1 */ - Py_REFCNT(op) = refcnt + 1; - assert(Py_SIZE(op) == size); - assert(v->ob_digit[0] == (digit)abs(ival)); - } - else { - (void)PyObject_INIT(v, &PyLong_Type); - } Py_SIZE(v) = size; v->ob_digit[0] = (digit)abs(ival); + + small_ints[i] = v; } #endif _PyLong_Zero = PyLong_FromLong(0); - if (_PyLong_Zero == NULL) + if (_PyLong_Zero == NULL) { return 0; + } + _PyLong_One = PyLong_FromLong(1); - if (_PyLong_One == NULL) + if (_PyLong_One == NULL) { return 0; + } /* initialize int_info */ if (Int_InfoType.tp_name == NULL) { @@ -5832,17 +5823,11 @@ _PyLong_Init(void) void _PyLong_Fini(void) { - /* Integers are currently statically allocated. Py_DECREF is not - needed, but Python must forget about the reference or multiple - reinitializations will fail. */ Py_CLEAR(_PyLong_One); Py_CLEAR(_PyLong_Zero); #if NSMALLNEGINTS + NSMALLPOSINTS > 0 - int i; - PyLongObject *v = small_ints; - for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) { - _Py_DEC_REFTOTAL; - _Py_ForgetReference((PyObject*)v); + for (Py_ssize_t i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++) { + Py_CLEAR(small_ints[i]); } #endif } diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 5ae0af8ea33..1ec2accdb09 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -15332,14 +15332,6 @@ _PyUnicode_Init(void) return _PyStatus_OK(); } -/* Finalize the Unicode implementation */ - -int -PyUnicode_ClearFreeList(void) -{ - return 0; -} - void PyUnicode_InternInPlace(PyObject **p) @@ -15929,34 +15921,36 @@ _PyUnicode_EnableLegacyWindowsFSEncoding(void) void -_PyUnicode_Fini(void) +_PyUnicode_Fini(PyThreadState *tstate) { + if (_Py_IsMainInterpreter(tstate)) { #if defined(WITH_VALGRIND) || defined(__INSURE__) - /* Insure++ is a memory analysis tool that aids in discovering - * memory leaks and other memory problems. On Python exit, the - * interned string dictionaries are flagged as being in use at exit - * (which it is). Under normal circumstances, this is fine because - * the memory will be automatically reclaimed by the system. Under - * memory debugging, it's a huge source of useless noise, so we - * trade off slower shutdown for less distraction in the memory - * reports. -baw - */ - unicode_release_interned(); + /* Insure++ is a memory analysis tool that aids in discovering + * memory leaks and other memory problems. On Python exit, the + * interned string dictionaries are flagged as being in use at exit + * (which it is). Under normal circumstances, this is fine because + * the memory will be automatically reclaimed by the system. Under + * memory debugging, it's a huge source of useless noise, so we + * trade off slower shutdown for less distraction in the memory + * reports. -baw + */ + unicode_release_interned(); #endif /* __INSURE__ */ - Py_CLEAR(unicode_empty); + Py_CLEAR(unicode_empty); - for (Py_ssize_t i = 0; i < 256; i++) { - Py_CLEAR(unicode_latin1[i]); + for (Py_ssize_t i = 0; i < 256; i++) { + Py_CLEAR(unicode_latin1[i]); + } + _PyUnicode_ClearStaticStrings(); } - _PyUnicode_ClearStaticStrings(); - (void)PyUnicode_ClearFreeList(); PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE(); PyMem_RawFree(interp->fs_codec.encoding); interp->fs_codec.encoding = NULL; PyMem_RawFree(interp->fs_codec.errors); interp->fs_codec.errors = NULL; + interp->config.filesystem_errors = (wchar_t *)_Py_ERROR_UNKNOWN; } diff --git a/PC/layout/support/appxmanifest.py b/PC/layout/support/appxmanifest.py index 9e008f793cf..9a7439d0271 100644 --- a/PC/layout/support/appxmanifest.py +++ b/PC/layout/support/appxmanifest.py @@ -339,7 +339,17 @@ def _get_registry_entries(ns, root="", d=None): for key, value in d.items(): if key == "_condition": continue - elif isinstance(value, dict): + if value is SPECIAL_LOOKUP: + if key == "SysArchitecture": + value = { + "win32": "32bit", + "amd64": "64bit", + "arm32": "32bit", + "arm64": "64bit", + }[ns.arch] + else: + raise ValueError(f"Key '{key}' unhandled for special lookup") + if isinstance(value, dict): cond = value.get("_condition") if cond and not cond(ns): continue @@ -349,16 +359,6 @@ def _get_registry_entries(ns, root="", d=None): if len(fullkey.parts) > 1: yield str(fullkey), None, None yield from _get_registry_entries(ns, fullkey, value) - elif value is SPECIAL_LOOKUP: - if key == "SysArchitecture": - return { - "win32": "32bit", - "amd64": "64bit", - "arm32": "32bit", - "arm64": "64bit", - }[ns.arch] - else: - raise ValueError(f"Key '{key}' unhandled for special lookup") elif len(r.parts) > 1: yield str(r), key, value diff --git a/PC/python3.def b/PC/python3.def index 1f355bffc9b..4689b777a69 100644 --- a/PC/python3.def +++ b/PC/python3.def @@ -649,7 +649,6 @@ EXPORTS PyUnicode_AsWideChar=python39.PyUnicode_AsWideChar PyUnicode_AsWideCharString=python39.PyUnicode_AsWideCharString PyUnicode_BuildEncodingMap=python39.PyUnicode_BuildEncodingMap - PyUnicode_ClearFreeList=python39.PyUnicode_ClearFreeList PyUnicode_Compare=python39.PyUnicode_Compare PyUnicode_CompareWithASCIIString=python39.PyUnicode_CompareWithASCIIString PyUnicode_Concat=python39.PyUnicode_Concat diff --git a/PC/winreg.c b/PC/winreg.c index 72a7c380bee..5dff7deadf7 100644 --- a/PC/winreg.c +++ b/PC/winreg.c @@ -293,6 +293,9 @@ winreg_HKEYType_Detach_impl(PyHKEYObject *self) /*[clinic end generated code: output=dda5a9e1a01ae78f input=dd2cc09e6c6ba833]*/ { void* ret; + if (PySys_Audit("winreg.PyHKEY.Detach", "n", (Py_ssize_t)self->hkey) < 0) { + return NULL; + } ret = (void*)self->hkey; self->hkey = 0; return PyLong_FromVoidPtr(ret); @@ -397,15 +400,15 @@ BOOL PyHKEY_Close(PyObject *ob_handle) { LONG rc; - PyHKEYObject *key; + HKEY key; - if (!PyHKEY_Check(ob_handle)) { - PyErr_SetString(PyExc_TypeError, "bad operand type"); + if (!PyHKEY_AsHKEY(ob_handle, &key, TRUE)) { return FALSE; } - key = (PyHKEYObject *)ob_handle; - rc = key->hkey ? RegCloseKey((HKEY)key->hkey) : ERROR_SUCCESS; - key->hkey = 0; + if (PyHKEY_Check(ob_handle)) { + ((PyHKEYObject*)ob_handle)->hkey = 0; + } + rc = key ? RegCloseKey(key) : ERROR_SUCCESS; if (rc != ERROR_SUCCESS) PyErr_SetFromWindowsErrWithFunction(rc, "RegCloseKey"); return rc == ERROR_SUCCESS; @@ -841,6 +844,10 @@ winreg_ConnectRegistry_impl(PyObject *module, { HKEY retKey; long rc; + if (PySys_Audit("winreg.ConnectRegistry", "un", + computer_name, (Py_ssize_t)key) < 0) { + return NULL; + } Py_BEGIN_ALLOW_THREADS rc = RegConnectRegistryW(computer_name, key, &retKey); Py_END_ALLOW_THREADS @@ -878,11 +885,20 @@ winreg_CreateKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key) HKEY retKey; long rc; + if (PySys_Audit("winreg.CreateKey", "nun", + (Py_ssize_t)key, sub_key, + (Py_ssize_t)KEY_WRITE) < 0) { + return NULL; + } rc = RegCreateKeyW(key, sub_key, &retKey); if (rc != ERROR_SUCCESS) { PyErr_SetFromWindowsErrWithFunction(rc, "CreateKey"); return NULL; } + if (PySys_Audit("winreg.OpenKey/result", "n", + (Py_ssize_t)retKey) < 0) { + return NULL; + } return retKey; } @@ -919,12 +935,21 @@ winreg_CreateKeyEx_impl(PyObject *module, HKEY key, HKEY retKey; long rc; + if (PySys_Audit("winreg.CreateKey", "nun", + (Py_ssize_t)key, sub_key, + (Py_ssize_t)access) < 0) { + return NULL; + } rc = RegCreateKeyExW(key, sub_key, reserved, NULL, 0, access, NULL, &retKey, NULL); if (rc != ERROR_SUCCESS) { PyErr_SetFromWindowsErrWithFunction(rc, "CreateKeyEx"); return NULL; } + if (PySys_Audit("winreg.OpenKey/result", "n", + (Py_ssize_t)retKey) < 0) { + return NULL; + } return retKey; } @@ -951,6 +976,11 @@ winreg_DeleteKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key) /*[clinic end generated code: output=d2652a84f70e0862 input=b31d225b935e4211]*/ { long rc; + if (PySys_Audit("winreg.DeleteKey", "nun", + (Py_ssize_t)key, sub_key, + (Py_ssize_t)0) < 0) { + return NULL; + } rc = RegDeleteKeyW(key, sub_key ); if (rc != ERROR_SUCCESS) return PyErr_SetFromWindowsErrWithFunction(rc, "RegDeleteKey"); @@ -992,13 +1022,17 @@ winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, RDKEFunc pfn = NULL; long rc; + if (PySys_Audit("winreg.DeleteKey", "nun", + (Py_ssize_t)key, sub_key, + (Py_ssize_t)access) < 0) { + return NULL; + } /* Only available on 64bit platforms, so we must load it dynamically. */ Py_BEGIN_ALLOW_THREADS hMod = GetModuleHandleW(L"advapi32.dll"); if (hMod) - pfn = (RDKEFunc)GetProcAddress(hMod, - "RegDeleteKeyExW"); + pfn = (RDKEFunc)GetProcAddress(hMod, "RegDeleteKeyExW"); Py_END_ALLOW_THREADS if (!pfn) { PyErr_SetString(PyExc_NotImplementedError, @@ -1031,6 +1065,10 @@ winreg_DeleteValue_impl(PyObject *module, HKEY key, const Py_UNICODE *value) /*[clinic end generated code: output=56fa9d21f3a54371 input=a78d3407a4197b21]*/ { long rc; + if (PySys_Audit("winreg.DeleteValue", "nu", + (Py_ssize_t)key, value) < 0) { + return NULL; + } Py_BEGIN_ALLOW_THREADS rc = RegDeleteValueW(key, value); Py_END_ALLOW_THREADS @@ -1063,6 +1101,10 @@ winreg_EnumKey_impl(PyObject *module, HKEY key, int index) long rc; PyObject *retStr; + if (PySys_Audit("winreg.EnumKey", "ni", + (Py_ssize_t)key, index) < 0) { + return NULL; + } /* The Windows docs claim that the max key name length is 255 * characters, plus a terminating nul character. However, * empirical testing demonstrates that it is possible to @@ -1121,6 +1163,10 @@ winreg_EnumValue_impl(PyObject *module, HKEY key, int index) PyObject *obData; PyObject *retVal; + if (PySys_Audit("winreg.EnumValue", "ni", + (Py_ssize_t)key, index) < 0) { + return NULL; + } if ((rc = RegQueryInfoKeyW(key, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &retValueSize, &retDataSize, NULL, NULL)) @@ -1204,6 +1250,11 @@ winreg_ExpandEnvironmentStrings_impl(PyObject *module, DWORD rc; PyObject *o; + if (PySys_Audit("winreg.ExpandEnvironmentStrings", "u", + string) < 0) { + return NULL; + } + retValueSize = ExpandEnvironmentStringsW(string, retValue, 0); if (retValueSize == 0) { return PyErr_SetFromWindowsErrWithFunction(retValueSize, @@ -1295,6 +1346,10 @@ winreg_LoadKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key, { long rc; + if (PySys_Audit("winreg.LoadKey", "nuu", + (Py_ssize_t)key, sub_key, file_name) < 0) { + return NULL; + } Py_BEGIN_ALLOW_THREADS rc = RegLoadKeyW(key, sub_key, file_name ); Py_END_ALLOW_THREADS @@ -1330,6 +1385,11 @@ winreg_OpenKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key, HKEY retKey; long rc; + if (PySys_Audit("winreg.OpenKey", "nun", + (Py_ssize_t)key, sub_key, + (Py_ssize_t)access) < 0) { + return NULL; + } Py_BEGIN_ALLOW_THREADS rc = RegOpenKeyExW(key, sub_key, reserved, access, &retKey); Py_END_ALLOW_THREADS @@ -1337,6 +1397,10 @@ winreg_OpenKey_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key, PyErr_SetFromWindowsErrWithFunction(rc, "RegOpenKeyEx"); return NULL; } + if (PySys_Audit("winreg.OpenKey/result", "n", + (Py_ssize_t)retKey) < 0) { + return NULL; + } return retKey; } @@ -1377,25 +1441,30 @@ static PyObject * winreg_QueryInfoKey_impl(PyObject *module, HKEY key) /*[clinic end generated code: output=dc657b8356a4f438 input=c3593802390cde1f]*/ { - long rc; - DWORD nSubKeys, nValues; - FILETIME ft; - LARGE_INTEGER li; - PyObject *l; - PyObject *ret; + long rc; + DWORD nSubKeys, nValues; + FILETIME ft; + LARGE_INTEGER li; + PyObject *l; + PyObject *ret; - if ((rc = RegQueryInfoKey(key, NULL, NULL, 0, &nSubKeys, NULL, NULL, - &nValues, NULL, NULL, NULL, &ft)) - != ERROR_SUCCESS) - return PyErr_SetFromWindowsErrWithFunction(rc, "RegQueryInfoKey"); - li.LowPart = ft.dwLowDateTime; - li.HighPart = ft.dwHighDateTime; - l = PyLong_FromLongLong(li.QuadPart); - if (l == NULL) - return NULL; - ret = Py_BuildValue("iiO", nSubKeys, nValues, l); - Py_DECREF(l); - return ret; + if (PySys_Audit("winreg.QueryInfoKey", "n", (Py_ssize_t)key) < 0) { + return NULL; + } + if ((rc = RegQueryInfoKey(key, NULL, NULL, 0, &nSubKeys, NULL, NULL, + &nValues, NULL, NULL, NULL, &ft)) + != ERROR_SUCCESS) { + return PyErr_SetFromWindowsErrWithFunction(rc, "RegQueryInfoKey"); + } + li.LowPart = ft.dwLowDateTime; + li.HighPart = ft.dwHighDateTime; + l = PyLong_FromLongLong(li.QuadPart); + if (l == NULL) { + return NULL; + } + ret = Py_BuildValue("iiO", nSubKeys, nValues, l); + Py_DECREF(l); + return ret; } /*[clinic input] @@ -1430,6 +1499,10 @@ winreg_QueryValue_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key) DWORD retSize = 0; wchar_t *tmp; + if (PySys_Audit("winreg.QueryValue", "nuu", + (Py_ssize_t)key, sub_key, NULL) < 0) { + return NULL; + } rc = RegQueryValueW(key, sub_key, NULL, &retSize); if (rc == ERROR_MORE_DATA) retSize = 256; @@ -1497,6 +1570,10 @@ winreg_QueryValueEx_impl(PyObject *module, HKEY key, const Py_UNICODE *name) PyObject *obData; PyObject *result; + if (PySys_Audit("winreg.QueryValue", "nuu", + (Py_ssize_t)key, NULL, name) < 0) { + return NULL; + } rc = RegQueryValueExW(key, name, NULL, NULL, NULL, &bufSize); if (rc == ERROR_MORE_DATA) bufSize = 256; @@ -1570,6 +1647,10 @@ winreg_SaveKey_impl(PyObject *module, HKEY key, const Py_UNICODE *file_name) if (!PyWinObject_AsSECURITY_ATTRIBUTES(obSA, &pSA, TRUE)) return NULL; */ + if (PySys_Audit("winreg.SaveKey", "nu", + (Py_ssize_t)key, file_name) < 0) { + return NULL; + } Py_BEGIN_ALLOW_THREADS rc = RegSaveKeyW(key, file_name, pSA ); Py_END_ALLOW_THREADS @@ -1622,6 +1703,12 @@ winreg_SetValue_impl(PyObject *module, HKEY key, const Py_UNICODE *sub_key, return NULL; } + if (PySys_Audit("winreg.SetValue", "nunu#", + (Py_ssize_t)key, sub_key, (Py_ssize_t)type, + value, value_length) < 0) { + return NULL; + } + Py_BEGIN_ALLOW_THREADS rc = RegSetValueW(key, sub_key, REG_SZ, value, (DWORD)(value_length + 1)); Py_END_ALLOW_THREADS @@ -1692,6 +1779,11 @@ winreg_SetValueEx_impl(PyObject *module, HKEY key, "Could not convert the data to the specified type."); return NULL; } + if (PySys_Audit("winreg.SetValue", "nunO", + (Py_ssize_t)key, value_name, (Py_ssize_t)type, + value) < 0) { + return NULL; + } Py_BEGIN_ALLOW_THREADS rc = RegSetValueExW(key, value_name, 0, type, data, len); Py_END_ALLOW_THREADS @@ -1727,6 +1819,10 @@ winreg_DisableReflectionKey_impl(PyObject *module, HKEY key) RDRKFunc pfn = NULL; LONG rc; + if (PySys_Audit("winreg.DisableReflectionKey", "n", (Py_ssize_t)key) < 0) { + return NULL; + } + /* Only available on 64bit platforms, so we must load it dynamically.*/ Py_BEGIN_ALLOW_THREADS @@ -1772,6 +1868,10 @@ winreg_EnableReflectionKey_impl(PyObject *module, HKEY key) RERKFunc pfn = NULL; LONG rc; + if (PySys_Audit("winreg.EnableReflectionKey", "n", (Py_ssize_t)key) < 0) { + return NULL; + } + /* Only available on 64bit platforms, so we must load it dynamically.*/ Py_BEGIN_ALLOW_THREADS @@ -1816,6 +1916,10 @@ winreg_QueryReflectionKey_impl(PyObject *module, HKEY key) BOOL result; LONG rc; + if (PySys_Audit("winreg.QueryReflectionKey", "n", (Py_ssize_t)key) < 0) { + return NULL; + } + /* Only available on 64bit platforms, so we must load it dynamically.*/ Py_BEGIN_ALLOW_THREADS diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 5763e47c4b0..f84093dae5b 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1148,6 +1148,12 @@ tok_get(struct tok_state *tok, char **p_start, char **p_end) if (col == 0 && c == '\n' && tok->prompt != NULL) { blankline = 0; /* Let it through */ } + else if (tok->prompt != NULL && tok->lineno == 1) { + /* In interactive mode, if the first line contains + only spaces and/or a comment, let it through. */ + blankline = 0; + col = altcol = 0; + } else { blankline = 1; /* Ignore completely */ } diff --git a/Python/ceval.c b/Python/ceval.c index ee13fd1ad70..96ed329b0d9 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -79,7 +79,7 @@ static PyObject * unicode_concatenate(PyThreadState *, PyObject *, PyObject *, static PyObject * special_lookup(PyThreadState *, PyObject *, _Py_Identifier *); static int check_args_iterable(PyThreadState *, PyObject *func, PyObject *vararg); static void format_kwargs_error(PyThreadState *, PyObject *func, PyObject *kwargs); -static void format_awaitable_error(PyThreadState *, PyTypeObject *, int); +static void format_awaitable_error(PyThreadState *, PyTypeObject *, int, int); #define NAME_ERROR_MSG \ "name '%.200s' is not defined" @@ -2017,7 +2017,12 @@ main_loop: PyObject *iter = _PyCoro_GetAwaitableIter(iterable); if (iter == NULL) { + int opcode_at_minus_3 = 0; + if ((next_instr - first_instr) > 2) { + opcode_at_minus_3 = _Py_OPCODE(next_instr[-3]); + } format_awaitable_error(tstate, Py_TYPE(iterable), + opcode_at_minus_3, _Py_OPCODE(next_instr[-2])); } @@ -2128,104 +2133,13 @@ main_loop: DISPATCH(); } - case TARGET(POP_FINALLY): { - /* If oparg is 0 at the top of the stack are 1 or 6 values: - Either: - - TOP = NULL or an integer - or: - - (TOP, SECOND, THIRD) = exc_info() - - (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER - - If oparg is 1 the value for 'return' was additionally pushed - at the top of the stack. - */ - PyObject *res = NULL; - if (oparg) { - res = POP(); - } + case TARGET(RERAISE): { PyObject *exc = POP(); - if (exc == NULL || PyLong_CheckExact(exc)) { - Py_XDECREF(exc); - } - else { - Py_DECREF(exc); - Py_DECREF(POP()); - Py_DECREF(POP()); - - PyObject *type, *value, *traceback; - _PyErr_StackItem *exc_info; - PyTryBlock *b = PyFrame_BlockPop(f); - if (b->b_type != EXCEPT_HANDLER) { - _PyErr_SetString(tstate, PyExc_SystemError, - "popped block is not an except handler"); - Py_XDECREF(res); - goto error; - } - assert(STACK_LEVEL() == (b)->b_level + 3); - exc_info = tstate->exc_info; - type = exc_info->exc_type; - value = exc_info->exc_value; - traceback = exc_info->exc_traceback; - exc_info->exc_type = POP(); - exc_info->exc_value = POP(); - exc_info->exc_traceback = POP(); - Py_XDECREF(type); - Py_XDECREF(value); - Py_XDECREF(traceback); - } - if (oparg) { - PUSH(res); - } - DISPATCH(); - } - - case TARGET(CALL_FINALLY): { - PyObject *ret = PyLong_FromLong(INSTR_OFFSET()); - if (ret == NULL) { - goto error; - } - PUSH(ret); - JUMPBY(oparg); - FAST_DISPATCH(); - } - - case TARGET(BEGIN_FINALLY): { - /* Push NULL onto the stack for using it in END_FINALLY, - POP_FINALLY, WITH_CLEANUP_START and WITH_CLEANUP_FINISH. - */ - PUSH(NULL); - FAST_DISPATCH(); - } - - case TARGET(END_FINALLY): { - PREDICTED(END_FINALLY); - /* At the top of the stack are 1 or 6 values: - Either: - - TOP = NULL or an integer - or: - - (TOP, SECOND, THIRD) = exc_info() - - (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER - */ - PyObject *exc = POP(); - if (exc == NULL) { - FAST_DISPATCH(); - } - else if (PyLong_CheckExact(exc)) { - int ret = _PyLong_AsInt(exc); - Py_DECREF(exc); - if (ret == -1 && _PyErr_Occurred(tstate)) { - goto error; - } - JUMPTO(ret); - FAST_DISPATCH(); - } - else { - assert(PyExceptionClass_Check(exc)); - PyObject *val = POP(); - PyObject *tb = POP(); - _PyErr_Restore(tstate, exc, val, tb); - goto exception_unwind; - } + PyObject *val = POP(); + PyObject *tb = POP(); + assert(PyExceptionClass_Check(exc)); + PyErr_Restore(exc, val, tb); + goto exception_unwind; } case TARGET(END_ASYNC_FOR): { @@ -3302,111 +3216,31 @@ main_loop: DISPATCH(); } - case TARGET(WITH_CLEANUP_START): { - /* At the top of the stack are 1 or 6 values indicating - how/why we entered the finally clause: - - TOP = NULL + case TARGET(WITH_EXCEPT_START): { + /* At the top of the stack are 7 values: - (TOP, SECOND, THIRD) = exc_info() - (FOURTH, FITH, SIXTH) = previous exception for EXCEPT_HANDLER - Below them is EXIT, the context.__exit__ or context.__aexit__ - bound method. - In the first case, we must call - EXIT(None, None, None) - otherwise we must call - EXIT(TOP, SECOND, THIRD) - - In the first case, we remove EXIT from the - stack, leaving TOP, and push TOP on the stack. - Otherwise we shift the bottom 3 values of the - stack down, replace the empty spot with NULL, and push - None on the stack. - - Finally we push the result of the call. + - (FOURTH, FIFTH, SIXTH) = previous exception for EXCEPT_HANDLER + - SEVENTH: the context.__exit__ bound method + We call SEVENTH(TOP, SECOND, THIRD). + Then we push again the TOP exception and the __exit__ + return value. */ PyObject *exit_func; PyObject *exc, *val, *tb, *res; - val = tb = Py_None; exc = TOP(); - if (exc == NULL) { - STACK_SHRINK(1); - exit_func = TOP(); - SET_TOP(exc); - exc = Py_None; - } - else { - assert(PyExceptionClass_Check(exc)); - PyObject *tp2, *exc2, *tb2; - PyTryBlock *block; - val = SECOND(); - tb = THIRD(); - tp2 = FOURTH(); - exc2 = PEEK(5); - tb2 = PEEK(6); - exit_func = PEEK(7); - SET_VALUE(7, tb2); - SET_VALUE(6, exc2); - SET_VALUE(5, tp2); - /* UNWIND_EXCEPT_HANDLER will pop this off. */ - SET_FOURTH(NULL); - /* We just shifted the stack down, so we have - to tell the except handler block that the - values are lower than it expects. */ - assert(f->f_iblock > 0); - block = &f->f_blockstack[f->f_iblock - 1]; - assert(block->b_type == EXCEPT_HANDLER); - assert(block->b_level > 0); - block->b_level--; - } - + val = SECOND(); + tb = THIRD(); + assert(exc != Py_None); + assert(!PyLong_Check(exc)); + exit_func = PEEK(7); PyObject *stack[4] = {NULL, exc, val, tb}; res = _PyObject_Vectorcall(exit_func, stack + 1, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL); - Py_DECREF(exit_func); if (res == NULL) goto error; - Py_INCREF(exc); /* Duplicating the exception on the stack */ - PUSH(exc); PUSH(res); - PREDICT(WITH_CLEANUP_FINISH); - DISPATCH(); - } - - case TARGET(WITH_CLEANUP_FINISH): { - PREDICTED(WITH_CLEANUP_FINISH); - /* TOP = the result of calling the context.__exit__ bound method - SECOND = either None or exception type - - If SECOND is None below is NULL or the return address, - otherwise below are 7 values representing an exception. - */ - PyObject *res = POP(); - PyObject *exc = POP(); - int err; - - if (exc != Py_None) - err = PyObject_IsTrue(res); - else - err = 0; - - Py_DECREF(res); - Py_DECREF(exc); - - if (err < 0) - goto error; - else if (err > 0) { - /* There was an exception and a True return. - * We must manually unwind the EXCEPT_HANDLER block - * which was created when the exception was caught, - * otherwise the stack will be in an inconsistent state. - */ - PyTryBlock *b = PyFrame_BlockPop(f); - assert(b->b_type == EXCEPT_HANDLER); - UNWIND_EXCEPT_HANDLER(b); - PUSH(NULL); - } - PREDICT(END_FINALLY); DISPATCH(); } @@ -3776,6 +3610,10 @@ exception_unwind: PUSH(val); PUSH(exc); JUMPTO(handler); + if (_Py_TracingPossible(ceval)) { + /* Make sure that we trace line after exception */ + instr_prev = INT_MAX; + } /* Resume normal execution */ goto main_loop; } @@ -5477,7 +5315,7 @@ format_exc_unbound(PyThreadState *tstate, PyCodeObject *co, int oparg) } static void -format_awaitable_error(PyThreadState *tstate, PyTypeObject *type, int prevopcode) +format_awaitable_error(PyThreadState *tstate, PyTypeObject *type, int prevprevopcode, int prevopcode) { if (type->tp_as_async == NULL || type->tp_as_async->am_await == NULL) { if (prevopcode == BEFORE_ASYNC_WITH) { @@ -5486,7 +5324,7 @@ format_awaitable_error(PyThreadState *tstate, PyTypeObject *type, int prevopcode "that does not implement __await__: %.100s", type->tp_name); } - else if (prevopcode == WITH_CLEANUP_START) { + else if (prevopcode == WITH_EXCEPT_START || (prevopcode == CALL_FUNCTION && prevprevopcode == DUP_TOP)) { _PyErr_Format(tstate, PyExc_TypeError, "'async with' received an object from __aexit__ " "that does not implement __await__: %.100s", diff --git a/Python/compile.c b/Python/compile.c index f26ad3c7752..98a4afa168c 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -81,14 +81,16 @@ It's called a frame block to distinguish it from a basic block in the compiler IR. */ -enum fblocktype { WHILE_LOOP, FOR_LOOP, EXCEPT, FINALLY_TRY, FINALLY_TRY2, FINALLY_END, - WITH, ASYNC_WITH, HANDLER_CLEANUP }; +enum fblocktype { WHILE_LOOP, FOR_LOOP, EXCEPT, FINALLY_TRY, FINALLY_END, + WITH, ASYNC_WITH, HANDLER_CLEANUP, POP_VALUE }; struct fblockinfo { enum fblocktype fb_type; basicblock *fb_block; /* (optional) type-specific exit or cleanup block */ basicblock *fb_exit; + /* (optional) additional information required for unwinding */ + void *fb_datum; }; enum { @@ -195,6 +197,7 @@ static int compiler_visit_slice(struct compiler *, slice_ty, expr_context_ty); static int inplace_binop(struct compiler *, operator_ty); +static int are_all_items_const(asdl_seq *, Py_ssize_t, Py_ssize_t); static int expr_constant(expr_ty); static int compiler_with(struct compiler *, stmt_ty, int); @@ -960,12 +963,6 @@ stack_effect(int opcode, int oparg, int jump) * Restore the stack position and push 6 values before jumping to * the handler if an exception be raised. */ return jump ? 6 : 1; - case WITH_CLEANUP_START: - return 2; /* or 1, depending on TOS */ - case WITH_CLEANUP_FINISH: - /* Pop a variable number of values pushed by WITH_CLEANUP_START - * + __exit__ or __aexit__. */ - return -3; case RETURN_VALUE: return -1; case IMPORT_STAR: @@ -980,10 +977,6 @@ stack_effect(int opcode, int oparg, int jump) return 0; case POP_EXCEPT: return -3; - case END_FINALLY: - case POP_FINALLY: - /* Pop 6 values when an exception was raised. */ - return -6; case STORE_NAME: return -1; @@ -1056,14 +1049,11 @@ stack_effect(int opcode, int oparg, int jump) * Restore the stack position and push 6 values before jumping to * the handler if an exception be raised. */ return jump ? 6 : 0; - case BEGIN_FINALLY: - /* Actually pushes 1 value, but count 6 for balancing with - * END_FINALLY and POP_FINALLY. - * This is the main reason of using this opcode instead of - * "LOAD_CONST None". */ - return 6; - case CALL_FINALLY: - return jump ? 1 : 0; + case RERAISE: + return -3; + + case WITH_EXCEPT_START: + return 1; case LOAD_FAST: return 1; @@ -1629,7 +1619,7 @@ find_ann(asdl_seq *stmts) static int compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b, - basicblock *exit) + basicblock *exit, void *datum) { struct fblockinfo *f; if (c->u->u_nfblocks >= CO_MAXBLOCKS) { @@ -1641,6 +1631,7 @@ compiler_push_fblock(struct compiler *c, enum fblocktype t, basicblock *b, f->fb_type = t; f->fb_block = b; f->fb_exit = exit; + f->fb_datum = datum; return 1; } @@ -1654,8 +1645,19 @@ compiler_pop_fblock(struct compiler *c, enum fblocktype t, basicblock *b) assert(u->u_fblock[u->u_nfblocks].fb_block == b); } +static int +compiler_call_exit_with_nones(struct compiler *c) { + ADDOP_O(c, LOAD_CONST, Py_None, consts); + ADDOP(c, DUP_TOP); + ADDOP(c, DUP_TOP); + ADDOP_I(c, CALL_FUNCTION, 3); + return 1; +} + /* Unwind a frame block. If preserve_tos is true, the TOS before - * popping the blocks will be restored afterwards. + * popping the blocks will be restored afterwards, unless another + * return, break or continue is found. In which case, the TOS will + * be popped. */ static int compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, @@ -1665,15 +1667,6 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, case WHILE_LOOP: return 1; - case FINALLY_END: - info->fb_exit = NULL; - ADDOP_I(c, POP_FINALLY, preserve_tos); - if (preserve_tos) { - ADDOP(c, ROT_TWO); - } - ADDOP(c, POP_TOP); - return 1; - case FOR_LOOP: /* Pop the iterator */ if (preserve_tos) { @@ -1687,22 +1680,30 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, return 1; case FINALLY_TRY: - ADDOP(c, POP_BLOCK); - ADDOP_JREL(c, CALL_FINALLY, info->fb_exit); - return 1; - - case FINALLY_TRY2: ADDOP(c, POP_BLOCK); if (preserve_tos) { - ADDOP(c, ROT_TWO); - ADDOP(c, POP_TOP); - ADDOP_JREL(c, CALL_FINALLY, info->fb_exit); + if (!compiler_push_fblock(c, POP_VALUE, NULL, NULL, NULL)) { + return 0; + } } - else { - ADDOP_JREL(c, CALL_FINALLY, info->fb_exit); - ADDOP(c, POP_TOP); + VISIT_SEQ(c, stmt, info->fb_datum); + if (preserve_tos) { + compiler_pop_fblock(c, POP_VALUE, NULL); } return 1; + + case FINALLY_END: + if (preserve_tos) { + ADDOP(c, ROT_FOUR); + } + ADDOP(c, POP_TOP); + ADDOP(c, POP_TOP); + ADDOP(c, POP_TOP); + if (preserve_tos) { + ADDOP(c, ROT_FOUR); + } + ADDOP(c, POP_EXCEPT); + return 1; case WITH: case ASYNC_WITH: @@ -1710,34 +1711,66 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info, if (preserve_tos) { ADDOP(c, ROT_TWO); } - ADDOP(c, BEGIN_FINALLY); - ADDOP(c, WITH_CLEANUP_START); + if(!compiler_call_exit_with_nones(c)) { + return 0; + } if (info->fb_type == ASYNC_WITH) { ADDOP(c, GET_AWAITABLE); ADDOP_LOAD_CONST(c, Py_None); ADDOP(c, YIELD_FROM); } - ADDOP(c, WITH_CLEANUP_FINISH); - ADDOP_I(c, POP_FINALLY, 0); + ADDOP(c, POP_TOP); return 1; case HANDLER_CLEANUP: + if (info->fb_datum) { + ADDOP(c, POP_BLOCK); + } if (preserve_tos) { ADDOP(c, ROT_FOUR); } - if (info->fb_exit) { - ADDOP(c, POP_BLOCK); - ADDOP(c, POP_EXCEPT); - ADDOP_JREL(c, CALL_FINALLY, info->fb_exit); + ADDOP(c, POP_EXCEPT); + if (info->fb_datum) { + ADDOP_LOAD_CONST(c, Py_None); + compiler_nameop(c, info->fb_datum, Store); + compiler_nameop(c, info->fb_datum, Del); } - else { - ADDOP(c, POP_EXCEPT); + return 1; + + case POP_VALUE: + if (preserve_tos) { + ADDOP(c, ROT_TWO); } + ADDOP(c, POP_TOP); return 1; } Py_UNREACHABLE(); } +/** Unwind block stack. If loop is not NULL, then stop when the first loop is encountered. */ +static int +compiler_unwind_fblock_stack(struct compiler *c, int preserve_tos, struct fblockinfo **loop) { + if (c->u->u_nfblocks == 0) { + return 1; + } + struct fblockinfo *top = &c->u->u_fblock[c->u->u_nfblocks-1]; + if (loop != NULL && (top->fb_type == WHILE_LOOP || top->fb_type == FOR_LOOP)) { + *loop = top; + return 1; + } + struct fblockinfo copy = *top; + c->u->u_nfblocks--; + if (!compiler_unwind_fblock(c, ©, preserve_tos)) { + return 0; + } + if (!compiler_unwind_fblock_stack(c, preserve_tos, loop)) { + return 0; + } + c->u->u_fblock[c->u->u_nfblocks] = copy; + c->u->u_nfblocks++; + return 1; +} + /* Compile a sequence of statements, checking for a docstring and for annotations. */ @@ -2634,10 +2667,12 @@ compiler_if(struct compiler *c, stmt_ty s) if (next == NULL) return 0; } - else + else { next = end; - if (!compiler_jump_if(c, s->v.If.test, next, 0)) + } + if (!compiler_jump_if(c, s->v.If.test, next, 0)) { return 0; + } VISIT_SEQ(c, stmt, s->v.If.body); if (asdl_seq_LEN(s->v.If.orelse)) { ADDOP_JREL(c, JUMP_FORWARD, end); @@ -2657,12 +2692,12 @@ compiler_for(struct compiler *c, stmt_ty s) start = compiler_new_block(c); cleanup = compiler_new_block(c); end = compiler_new_block(c); - if (start == NULL || end == NULL || cleanup == NULL) + if (start == NULL || end == NULL || cleanup == NULL) { return 0; - - if (!compiler_push_fblock(c, FOR_LOOP, start, end)) + } + if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) { return 0; - + } VISIT(c, expr, s->v.For.iter); ADDOP(c, GET_ITER); compiler_use_next_block(c, start); @@ -2694,16 +2729,16 @@ compiler_async_for(struct compiler *c, stmt_ty s) except = compiler_new_block(c); end = compiler_new_block(c); - if (start == NULL || except == NULL || end == NULL) + if (start == NULL || except == NULL || end == NULL) { return 0; - + } VISIT(c, expr, s->v.AsyncFor.iter); ADDOP(c, GET_AITER); compiler_use_next_block(c, start); - if (!compiler_push_fblock(c, FOR_LOOP, start, end)) + if (!compiler_push_fblock(c, FOR_LOOP, start, end, NULL)) { return 0; - + } /* SETUP_FINALLY to guard the __anext__ call */ ADDOP_JREL(c, SETUP_FINALLY, except); ADDOP(c, GET_ANEXT); @@ -2741,7 +2776,7 @@ compiler_while(struct compiler *c, stmt_ty s) // Push a dummy block so the VISIT_SEQ knows that we are // inside a while loop so it can correctly evaluate syntax // errors. - if (!compiler_push_fblock(c, WHILE_LOOP, NULL, NULL)) { + if (!compiler_push_fblock(c, WHILE_LOOP, NULL, NULL, NULL)) { return 0; } VISIT_SEQ(c, stmt, s->v.While.body); @@ -2771,7 +2806,7 @@ compiler_while(struct compiler *c, stmt_ty s) orelse = NULL; compiler_use_next_block(c, loop); - if (!compiler_push_fblock(c, WHILE_LOOP, loop, end)) + if (!compiler_push_fblock(c, WHILE_LOOP, loop, end, NULL)) return 0; if (constant == -1) { if (!compiler_jump_if(c, s->v.While.test, anchor, 0)) @@ -2811,12 +2846,8 @@ compiler_return(struct compiler *c, stmt_ty s) if (preserve_tos) { VISIT(c, expr, s->v.Return.value); } - for (int depth = c->u->u_nfblocks; depth--;) { - struct fblockinfo *info = &c->u->u_fblock[depth]; - - if (!compiler_unwind_fblock(c, info, preserve_tos)) - return 0; - } + if (!compiler_unwind_fblock_stack(c, preserve_tos, NULL)) + return 0; if (s->v.Return.value == NULL) { ADDOP_LOAD_CONST(c, Py_None); } @@ -2831,33 +2862,32 @@ compiler_return(struct compiler *c, stmt_ty s) static int compiler_break(struct compiler *c) { - for (int depth = c->u->u_nfblocks; depth--;) { - struct fblockinfo *info = &c->u->u_fblock[depth]; - - if (!compiler_unwind_fblock(c, info, 0)) - return 0; - if (info->fb_type == WHILE_LOOP || info->fb_type == FOR_LOOP) { - ADDOP_JABS(c, JUMP_ABSOLUTE, info->fb_exit); - return 1; - } + struct fblockinfo *loop = NULL; + if (!compiler_unwind_fblock_stack(c, 0, &loop)) { + return 0; } - return compiler_error(c, "'break' outside loop"); + if (loop == NULL) { + return compiler_error(c, "'break' outside loop"); + } + if (!compiler_unwind_fblock(c, loop, 0)) { + return 0; + } + ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_exit); + return 1; } static int compiler_continue(struct compiler *c) { - for (int depth = c->u->u_nfblocks; depth--;) { - struct fblockinfo *info = &c->u->u_fblock[depth]; - - if (info->fb_type == WHILE_LOOP || info->fb_type == FOR_LOOP) { - ADDOP_JABS(c, JUMP_ABSOLUTE, info->fb_block); - return 1; - } - if (!compiler_unwind_fblock(c, info, 0)) - return 0; + struct fblockinfo *loop = NULL; + if (!compiler_unwind_fblock_stack(c, 0, &loop)) { + return 0; } - return compiler_error(c, "'continue' not properly in loop"); + if (loop == NULL) { + return compiler_error(c, "'continue' not properly in loop"); + } + ADDOP_JABS(c, JUMP_ABSOLUTE, loop->fb_block); + return 1; } @@ -2866,10 +2896,11 @@ compiler_continue(struct compiler *c) SETUP_FINALLY L POP_BLOCK - BEGIN_FINALLY + + JUMP E L: - END_FINALLY + E: The special instructions use the block stack. Each block stack entry contains the instruction that created it (here @@ -2881,11 +2912,6 @@ compiler_continue(struct compiler *c) onto the block stack. POP_BLOCK: Pops en entry from the block stack. - BEGIN_FINALLY - Pushes NULL onto the value stack. - END_FINALLY: - Pops 1 (NULL or int) or 6 entries from the *value* stack and restore - the raised and the caught exceptions they specify. The block stack is unwound when an exception is raised: when a SETUP_FINALLY entry is found, the raised and the caught @@ -2897,47 +2923,18 @@ compiler_continue(struct compiler *c) static int compiler_try_finally(struct compiler *c, stmt_ty s) { - basicblock *start, *newcurblock, *body, *end; - int break_finally = 1; + basicblock *body, *end, *exit; body = compiler_new_block(c); end = compiler_new_block(c); - if (body == NULL || end == NULL) + exit = compiler_new_block(c); + if (body == NULL || end == NULL || exit == NULL) return 0; - start = c->u->u_curblock; - - /* `finally` block. Compile it first to determine if any of "break", - "continue" or "return" are used in it. */ - compiler_use_next_block(c, end); - if (!compiler_push_fblock(c, FINALLY_END, end, end)) - return 0; - VISIT_SEQ(c, stmt, s->v.Try.finalbody); - ADDOP(c, END_FINALLY); - break_finally = (c->u->u_fblock[c->u->u_nfblocks - 1].fb_exit == NULL); - if (break_finally) { - /* Pops a placeholder. See below */ - ADDOP(c, POP_TOP); - } - compiler_pop_fblock(c, FINALLY_END, end); - - newcurblock = c->u->u_curblock; - c->u->u_curblock = start; - start->b_next = NULL; - /* `try` block */ - c->u->u_lineno_set = 0; - c->u->u_lineno = s->lineno; - c->u->u_col_offset = s->col_offset; - if (break_finally) { - /* Pushes a placeholder for the value of "return" in the "try" block - to balance the stack for "break", "continue" and "return" in - the "finally" block. */ - ADDOP_LOAD_CONST(c, Py_None); - } ADDOP_JREL(c, SETUP_FINALLY, end); compiler_use_next_block(c, body); - if (!compiler_push_fblock(c, break_finally ? FINALLY_TRY2 : FINALLY_TRY, body, end)) + if (!compiler_push_fblock(c, FINALLY_TRY, body, end, s->v.Try.finalbody)) return 0; if (s->v.Try.handlers && asdl_seq_LEN(s->v.Try.handlers)) { if (!compiler_try_except(c, s)) @@ -2947,12 +2944,17 @@ compiler_try_finally(struct compiler *c, stmt_ty s) VISIT_SEQ(c, stmt, s->v.Try.body); } ADDOP(c, POP_BLOCK); - ADDOP(c, BEGIN_FINALLY); - compiler_pop_fblock(c, break_finally ? FINALLY_TRY2 : FINALLY_TRY, body); - - c->u->u_curblock->b_next = end; - c->u->u_curblock = newcurblock; - + compiler_pop_fblock(c, FINALLY_TRY, body); + VISIT_SEQ(c, stmt, s->v.Try.finalbody); + ADDOP_JREL(c, JUMP_FORWARD, exit); + /* `finally` block */ + compiler_use_next_block(c, end); + if (!compiler_push_fblock(c, FINALLY_END, end, NULL, NULL)) + return 0; + VISIT_SEQ(c, stmt, s->v.Try.finalbody); + compiler_pop_fblock(c, FINALLY_END, end); + ADDOP(c, RERAISE); + compiler_use_next_block(c, exit); return 1; } @@ -2981,7 +2983,7 @@ compiler_try_finally(struct compiler *c, stmt_ty s) [tb, val, exc] L2: DUP .............................etc....................... - [tb, val, exc] Ln+1: END_FINALLY # re-raise exception + [tb, val, exc] Ln+1: RERAISE # re-raise exception [] L0: @@ -3001,7 +3003,7 @@ compiler_try_except(struct compiler *c, stmt_ty s) return 0; ADDOP_JREL(c, SETUP_FINALLY, except); compiler_use_next_block(c, body); - if (!compiler_push_fblock(c, EXCEPT, body, NULL)) + if (!compiler_push_fblock(c, EXCEPT, body, NULL, NULL)) return 0; VISIT_SEQ(c, stmt, s->v.Try.body); ADDOP(c, POP_BLOCK); @@ -3053,28 +3055,29 @@ compiler_try_except(struct compiler *c, stmt_ty s) /* second try: */ ADDOP_JREL(c, SETUP_FINALLY, cleanup_end); compiler_use_next_block(c, cleanup_body); - if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, cleanup_end)) + if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, handler->v.ExceptHandler.name)) return 0; /* second # body */ VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body); - ADDOP(c, POP_BLOCK); - ADDOP(c, BEGIN_FINALLY); compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body); + ADDOP(c, POP_BLOCK); + ADDOP(c, POP_EXCEPT); + /* name = None; del name */ + ADDOP_LOAD_CONST(c, Py_None); + compiler_nameop(c, handler->v.ExceptHandler.name, Store); + compiler_nameop(c, handler->v.ExceptHandler.name, Del); + ADDOP_JREL(c, JUMP_FORWARD, end); - /* finally: */ + /* except: */ compiler_use_next_block(c, cleanup_end); - if (!compiler_push_fblock(c, FINALLY_END, cleanup_end, NULL)) - return 0; /* name = None; del name */ ADDOP_LOAD_CONST(c, Py_None); compiler_nameop(c, handler->v.ExceptHandler.name, Store); compiler_nameop(c, handler->v.ExceptHandler.name, Del); - ADDOP(c, END_FINALLY); - ADDOP(c, POP_EXCEPT); - compiler_pop_fblock(c, FINALLY_END, cleanup_end); + ADDOP(c, RERAISE); } else { basicblock *cleanup_body; @@ -3086,16 +3089,16 @@ compiler_try_except(struct compiler *c, stmt_ty s) ADDOP(c, POP_TOP); ADDOP(c, POP_TOP); compiler_use_next_block(c, cleanup_body); - if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL)) + if (!compiler_push_fblock(c, HANDLER_CLEANUP, cleanup_body, NULL, NULL)) return 0; VISIT_SEQ(c, stmt, handler->v.ExceptHandler.body); - ADDOP(c, POP_EXCEPT); compiler_pop_fblock(c, HANDLER_CLEANUP, cleanup_body); + ADDOP(c, POP_EXCEPT); + ADDOP_JREL(c, JUMP_FORWARD, end); } - ADDOP_JREL(c, JUMP_FORWARD, end); compiler_use_next_block(c, except); } - ADDOP(c, END_FINALLY); + ADDOP(c, RERAISE); compiler_use_next_block(c, orelse); VISIT_SEQ(c, stmt, s->v.Try.orelse); compiler_use_next_block(c, end); @@ -3653,6 +3656,27 @@ starunpack_helper(struct compiler *c, asdl_seq *elts, { Py_ssize_t n = asdl_seq_LEN(elts); Py_ssize_t i, nsubitems = 0, nseen = 0; + if (n > 2 && are_all_items_const(elts, 0, n)) { + PyObject *folded = PyTuple_New(n); + if (folded == NULL) { + return 0; + } + PyObject *val; + for (i = 0; i < n; i++) { + val = ((expr_ty)asdl_seq_GET(elts, i))->v.Constant.value; + Py_INCREF(val); + PyTuple_SET_ITEM(folded, i, val); + } + if (outer_op == BUILD_SET_UNPACK) { + Py_SETREF(folded, PyFrozenSet_New(folded)); + if (folded == NULL) { + return 0; + } + } + ADDOP_LOAD_CONST_NEW(c, folded); + ADDOP_I(c, outer_op, 1); + return 1; + } for (i = 0; i < n; i++) { expr_ty elt = asdl_seq_GET(elts, i); if (elt->kind == Starred_kind) { @@ -4630,6 +4654,22 @@ expr_constant(expr_ty e) return -1; } +static int +compiler_with_except_finish(struct compiler *c) { + basicblock *exit; + exit = compiler_new_block(c); + if (exit == NULL) + return 0; + ADDOP_JABS(c, POP_JUMP_IF_TRUE, exit); + ADDOP(c, RERAISE); + compiler_use_next_block(c, exit); + ADDOP(c, POP_TOP); + ADDOP(c, POP_TOP); + ADDOP(c, POP_TOP); + ADDOP(c, POP_EXCEPT); + ADDOP(c, POP_TOP); + return 1; +} /* Implements the async with statement. @@ -4658,7 +4698,7 @@ expr_constant(expr_ty e) static int compiler_async_with(struct compiler *c, stmt_ty s, int pos) { - basicblock *block, *finally; + basicblock *block, *final, *exit; withitem_ty item = asdl_seq_GET(s->v.AsyncWith.items, pos); assert(s->kind == AsyncWith_kind); @@ -4669,8 +4709,9 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) } block = compiler_new_block(c); - finally = compiler_new_block(c); - if (!block || !finally) + final = compiler_new_block(c); + exit = compiler_new_block(c); + if (!block || !final || !exit) return 0; /* Evaluate EXPR */ @@ -4681,11 +4722,11 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) ADDOP_LOAD_CONST(c, Py_None); ADDOP(c, YIELD_FROM); - ADDOP_JREL(c, SETUP_ASYNC_WITH, finally); + ADDOP_JREL(c, SETUP_ASYNC_WITH, final); /* SETUP_ASYNC_WITH pushes a finally block. */ compiler_use_next_block(c, block); - if (!compiler_push_fblock(c, ASYNC_WITH, block, finally)) { + if (!compiler_push_fblock(c, ASYNC_WITH, block, final, NULL)) { return 0; } @@ -4704,76 +4745,80 @@ compiler_async_with(struct compiler *c, stmt_ty s, int pos) else if (!compiler_async_with(c, s, pos)) return 0; - /* End of try block; start the finally block */ - ADDOP(c, POP_BLOCK); - ADDOP(c, BEGIN_FINALLY); compiler_pop_fblock(c, ASYNC_WITH, block); + ADDOP(c, POP_BLOCK); + /* End of body; start the cleanup */ - compiler_use_next_block(c, finally); - if (!compiler_push_fblock(c, FINALLY_END, finally, NULL)) + /* For successful outcome: + * call __exit__(None, None, None) + */ + if(!compiler_call_exit_with_nones(c)) return 0; + ADDOP(c, GET_AWAITABLE); + ADDOP_O(c, LOAD_CONST, Py_None, consts); + ADDOP(c, YIELD_FROM); - /* Finally block starts; context.__exit__ is on the stack under - the exception or return information. Just issue our magic - opcode. */ - ADDOP(c, WITH_CLEANUP_START); + ADDOP(c, POP_TOP); + ADDOP_JABS(c, JUMP_ABSOLUTE, exit); + + /* For exceptional outcome: */ + compiler_use_next_block(c, final); + + ADDOP(c, WITH_EXCEPT_START); ADDOP(c, GET_AWAITABLE); ADDOP_LOAD_CONST(c, Py_None); ADDOP(c, YIELD_FROM); + compiler_with_except_finish(c); - ADDOP(c, WITH_CLEANUP_FINISH); - - /* Finally block ends. */ - ADDOP(c, END_FINALLY); - compiler_pop_fblock(c, FINALLY_END, finally); +compiler_use_next_block(c, exit); return 1; } /* Implements the with statement from PEP 343. - - The semantics outlined in that PEP are as follows: - with EXPR as VAR: BLOCK - - It is implemented roughly as: - - context = EXPR - exit = context.__exit__ # not calling it - value = context.__enter__() - try: - VAR = value # if VAR present in the syntax - BLOCK - finally: - if an exception was raised: - exc = copy of (exception, instance, traceback) - else: - exc = (None, None, None) - exit(*exc) + is implemented as: + + SETUP_WITH E + or POP_TOP + + LOAD_CONST (None, None, None) + CALL_FUNCTION_EX 0 + JUMP_FORWARD EXIT + E: WITH_EXCEPT_START (calls EXPR.__exit__) + POP_JUMP_IF_TRUE T: + RERAISE + T: POP_TOP * 3 (remove exception from stack) + POP_EXCEPT + POP_TOP + EXIT: */ + static int compiler_with(struct compiler *c, stmt_ty s, int pos) { - basicblock *block, *finally; + basicblock *block, *final, *exit; withitem_ty item = asdl_seq_GET(s->v.With.items, pos); assert(s->kind == With_kind); block = compiler_new_block(c); - finally = compiler_new_block(c); - if (!block || !finally) + final = compiler_new_block(c); + exit = compiler_new_block(c); + if (!block || !final || !exit) return 0; /* Evaluate EXPR */ VISIT(c, expr, item->context_expr); - ADDOP_JREL(c, SETUP_WITH, finally); + /* Will push bound __exit__ */ + ADDOP_JREL(c, SETUP_WITH, final); /* SETUP_WITH pushes a finally block. */ compiler_use_next_block(c, block); - if (!compiler_push_fblock(c, WITH, block, finally)) { + if (!compiler_push_fblock(c, WITH, block, final, NULL)) { return 0; } @@ -4792,24 +4837,26 @@ compiler_with(struct compiler *c, stmt_ty s, int pos) else if (!compiler_with(c, s, pos)) return 0; - /* End of try block; start the finally block */ ADDOP(c, POP_BLOCK); - ADDOP(c, BEGIN_FINALLY); compiler_pop_fblock(c, WITH, block); - - compiler_use_next_block(c, finally); - if (!compiler_push_fblock(c, FINALLY_END, finally, NULL)) + + /* End of body; start the cleanup. */ + + /* For successful outcome: + * call __exit__(None, None, None) + */ + if (!compiler_call_exit_with_nones(c)) return 0; + ADDOP(c, POP_TOP); + ADDOP_JREL(c, JUMP_FORWARD, exit); - /* Finally block starts; context.__exit__ is on the stack under - the exception or return information. Just issue our magic - opcode. */ - ADDOP(c, WITH_CLEANUP_START); - ADDOP(c, WITH_CLEANUP_FINISH); + /* For exceptional outcome: */ + compiler_use_next_block(c, final); - /* Finally block ends. */ - ADDOP(c, END_FINALLY); - compiler_pop_fblock(c, FINALLY_END, finally); + ADDOP(c, WITH_EXCEPT_START); + compiler_with_except_finish(c); + + compiler_use_next_block(c, exit); return 1; } @@ -5427,7 +5474,7 @@ Py_LOCAL_INLINE(void) stackdepth_push(basicblock ***sp, basicblock *b, int depth) { assert(b->b_startdepth < 0 || b->b_startdepth == depth); - if (b->b_startdepth < depth) { + if (b->b_startdepth < depth && b->b_startdepth < 100) { assert(b->b_startdepth < 0); b->b_startdepth = depth; *(*sp)++ = b; @@ -5483,19 +5530,14 @@ stackdepth(struct compiler *c) maxdepth = target_depth; } assert(target_depth >= 0); /* invalid code or bug in stackdepth() */ - if (instr->i_opcode == CALL_FINALLY) { - assert(instr->i_target->b_startdepth >= 0); - assert(instr->i_target->b_startdepth >= target_depth); - depth = new_depth; - continue; - } stackdepth_push(&sp, instr->i_target, target_depth); } depth = new_depth; if (instr->i_opcode == JUMP_ABSOLUTE || instr->i_opcode == JUMP_FORWARD || instr->i_opcode == RETURN_VALUE || - instr->i_opcode == RAISE_VARARGS) + instr->i_opcode == RAISE_VARARGS || + instr->i_opcode == RERAISE) { /* remaining code is dead */ next = NULL; diff --git a/Python/context.c b/Python/context.c index 26f22994eec..e0338c97e18 100644 --- a/Python/context.c +++ b/Python/context.c @@ -1024,9 +1024,10 @@ _contextvars_ContextVar_reset(PyContextVar *self, PyObject *token) static PyObject * -contextvar_cls_getitem(PyObject *self, PyObject *args) +contextvar_cls_getitem(PyObject *self, PyObject *arg) { - Py_RETURN_NONE; + Py_INCREF(self); + return self; } static PyMemberDef PyContextVar_members[] = { @@ -1039,7 +1040,7 @@ static PyMethodDef PyContextVar_methods[] = { _CONTEXTVARS_CONTEXTVAR_SET_METHODDEF _CONTEXTVARS_CONTEXTVAR_RESET_METHODDEF {"__class_getitem__", contextvar_cls_getitem, - METH_VARARGS | METH_STATIC, NULL}, + METH_O | METH_CLASS, NULL}, {NULL, NULL} }; diff --git a/Python/errors.c b/Python/errors.c index 1783084c336..d65707e7f97 100644 --- a/Python/errors.c +++ b/Python/errors.c @@ -1391,43 +1391,53 @@ _PyErr_WriteUnraisableMsg(const char *err_msg_str, PyObject *obj) } } + PyObject *hook_args = make_unraisable_hook_args( + tstate, exc_type, exc_value, exc_tb, err_msg, obj); + if (hook_args == NULL) { + err_msg_str = ("Exception ignored on building " + "sys.unraisablehook arguments"); + goto error; + } + _Py_IDENTIFIER(unraisablehook); PyObject *hook = _PySys_GetObjectId(&PyId_unraisablehook); - if (hook != NULL && hook != Py_None) { - PyObject *hook_args; - - hook_args = make_unraisable_hook_args(tstate, exc_type, exc_value, - exc_tb, err_msg, obj); - if (hook_args != NULL) { - PyObject *res = _PyObject_CallOneArg(hook, hook_args); - Py_DECREF(hook_args); - if (res != NULL) { - Py_DECREF(res); - goto done; - } - - err_msg_str = "Exception ignored in sys.unraisablehook"; - } - else { - err_msg_str = ("Exception ignored on building " - "sys.unraisablehook arguments"); - } - - Py_XDECREF(err_msg); - err_msg = PyUnicode_FromString(err_msg_str); - if (err_msg == NULL) { - PyErr_Clear(); - } - - /* sys.unraisablehook failed: log its error using default hook */ - Py_XDECREF(exc_type); - Py_XDECREF(exc_value); - Py_XDECREF(exc_tb); - _PyErr_Fetch(tstate, &exc_type, &exc_value, &exc_tb); - - obj = hook; + if (hook == NULL) { + Py_DECREF(hook_args); + goto default_hook; } + if (PySys_Audit("sys.unraisablehook", "OO", hook, hook_args) < 0) { + Py_DECREF(hook_args); + err_msg_str = "Exception ignored in audit hook"; + obj = NULL; + goto error; + } + + if (hook == Py_None) { + Py_DECREF(hook_args); + goto default_hook; + } + + PyObject *res = _PyObject_CallOneArg(hook, hook_args); + Py_DECREF(hook_args); + if (res != NULL) { + Py_DECREF(res); + goto done; + } + + /* sys.unraisablehook failed: log its error using default hook */ + obj = hook; + err_msg_str = NULL; + +error: + /* err_msg_str and obj have been updated and we have a new exception */ + Py_XSETREF(err_msg, PyUnicode_FromString(err_msg_str ? + err_msg_str : "Exception ignored in sys.unraisablehook")); + Py_XDECREF(exc_type); + Py_XDECREF(exc_value); + Py_XDECREF(exc_tb); + _PyErr_Fetch(tstate, &exc_type, &exc_value, &exc_tb); + default_hook: /* Call the default unraisable hook (ignore failure) */ (void)write_unraisable_exc(tstate, exc_type, exc_value, exc_tb, diff --git a/Python/import.c b/Python/import.c index ac3d10cfed2..045b6d0a9bf 100644 --- a/Python/import.c +++ b/Python/import.c @@ -48,17 +48,6 @@ module _imp /* Initialize things */ -PyStatus -_PyImport_Init(PyThreadState *tstate) -{ - PyInterpreterState *interp = tstate->interp; - interp->builtins_copy = PyDict_Copy(interp->builtins); - if (interp->builtins_copy == NULL) { - return _PyStatus_ERR("Can't backup builtins dict"); - } - return _PyStatus_OK(); -} - PyStatus _PyImportHooks_Init(PyThreadState *tstate) { @@ -695,50 +684,62 @@ int _PyImport_FixupExtensionObject(PyObject *mod, PyObject *name, PyObject *filename, PyObject *modules) { - PyObject *dict, *key; - struct PyModuleDef *def; - int res; - if (extensions == NULL) { - extensions = PyDict_New(); - if (extensions == NULL) - return -1; - } if (mod == NULL || !PyModule_Check(mod)) { PyErr_BadInternalCall(); return -1; } - def = PyModule_GetDef(mod); + + struct PyModuleDef *def = PyModule_GetDef(mod); if (!def) { PyErr_BadInternalCall(); return -1; } - if (PyObject_SetItem(modules, name, mod) < 0) + + PyThreadState *tstate = _PyThreadState_GET(); + if (PyObject_SetItem(modules, name, mod) < 0) { return -1; - if (_PyState_AddModule(mod, def) < 0) { + } + if (_PyState_AddModule(tstate, mod, def) < 0) { PyMapping_DelItem(modules, name); return -1; } - if (def->m_size == -1) { - if (def->m_base.m_copy) { - /* Somebody already imported the module, - likely under a different name. - XXX this should really not happen. */ - Py_CLEAR(def->m_base.m_copy); + + if (_Py_IsMainInterpreter(tstate)) { + if (def->m_size == -1) { + if (def->m_base.m_copy) { + /* Somebody already imported the module, + likely under a different name. + XXX this should really not happen. */ + Py_CLEAR(def->m_base.m_copy); + } + PyObject *dict = PyModule_GetDict(mod); + if (dict == NULL) { + return -1; + } + def->m_base.m_copy = PyDict_Copy(dict); + if (def->m_base.m_copy == NULL) { + return -1; + } } - dict = PyModule_GetDict(mod); - if (dict == NULL) + + if (extensions == NULL) { + extensions = PyDict_New(); + if (extensions == NULL) { + return -1; + } + } + + PyObject *key = PyTuple_Pack(2, filename, name); + if (key == NULL) { return -1; - def->m_base.m_copy = PyDict_Copy(dict); - if (def->m_base.m_copy == NULL) + } + int res = PyDict_SetItem(extensions, key, (PyObject *)def); + Py_DECREF(key); + if (res < 0) { return -1; + } } - key = PyTuple_Pack(2, filename, name); - if (key == NULL) - return -1; - res = PyDict_SetItem(extensions, key, (PyObject *)def); - Py_DECREF(key); - if (res < 0) - return -1; + return 0; } @@ -801,7 +802,7 @@ import_find_extension(PyThreadState *tstate, PyObject *name, } Py_DECREF(mod); } - if (_PyState_AddModule(mod, def) < 0) { + if (_PyState_AddModule(tstate, mod, def) < 0) { PyMapping_DelItem(modules, name); return NULL; } diff --git a/Python/importlib.h b/Python/importlib.h index 67c820cd036..d837bdd9d4c 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -133,19 +133,21 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 2,8,1,6,2,10,1,8,1,4,1,6,1,8,1,122, 24,95,77,111,100,117,108,101,76,111,99,107,46,104,97,115, 95,100,101,97,100,108,111,99,107,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,9,0,0,0,67,0, - 0,0,115,178,0,0,0,116,0,160,1,161,0,125,1,124, - 0,116,2,124,1,60,0,122,148,124,0,106,3,143,110,1, + 0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,0, + 0,0,115,210,0,0,0,116,0,160,1,161,0,125,1,124, + 0,116,2,124,1,60,0,122,180,124,0,106,3,143,126,1, 0,124,0,106,4,100,1,107,2,115,46,124,0,106,5,124, - 1,107,2,114,84,124,1,124,0,95,5,124,0,4,0,106, - 4,100,2,55,0,2,0,95,4,87,0,53,0,81,0,82, - 0,163,0,87,0,162,86,100,3,83,0,124,0,160,6,161, - 0,114,104,116,7,100,4,124,0,22,0,131,1,130,1,124, - 0,106,8,160,9,100,5,161,1,114,130,124,0,4,0,106, - 10,100,2,55,0,2,0,95,10,87,0,53,0,81,0,82, - 0,88,0,124,0,106,8,160,9,161,0,1,0,124,0,106, - 8,160,11,161,0,1,0,113,18,87,0,53,0,116,2,124, - 1,61,0,88,0,100,6,83,0,41,7,122,185,10,32,32, + 1,107,2,114,90,124,1,124,0,95,5,124,0,4,0,106, + 4,100,2,55,0,2,0,95,4,87,0,100,3,4,0,4, + 0,131,3,1,0,87,0,116,2,124,1,61,0,100,4,83, + 0,124,0,160,6,161,0,114,110,116,7,100,5,124,0,22, + 0,131,1,130,1,124,0,106,8,160,9,100,6,161,1,114, + 136,124,0,4,0,106,10,100,2,55,0,2,0,95,10,87, + 0,100,3,4,0,4,0,131,3,1,0,110,16,49,0,115, + 156,48,0,1,0,1,0,1,0,89,0,1,0,124,0,106, + 8,160,9,161,0,1,0,124,0,106,8,160,11,161,0,1, + 0,113,18,87,0,116,2,124,1,61,0,110,8,116,2,124, + 1,61,0,48,0,100,3,83,0,41,7,122,185,10,32,32, 32,32,32,32,32,32,65,99,113,117,105,114,101,32,116,104, 101,32,109,111,100,117,108,101,32,108,111,99,107,46,32,32, 73,102,32,97,32,112,111,116,101,110,116,105,97,108,32,100, @@ -158,193 +160,196 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 99,113,117,105,114,101,100,32,97,110,100,32,84,114,117,101, 32,105,115,32,114,101,116,117,114,110,101,100,46,10,32,32, 32,32,32,32,32,32,114,22,0,0,0,233,1,0,0,0, - 84,122,23,100,101,97,100,108,111,99,107,32,100,101,116,101, - 99,116,101,100,32,98,121,32,37,114,70,78,41,12,114,23, + 78,84,122,23,100,101,97,100,108,111,99,107,32,100,101,116, + 101,99,116,101,100,32,98,121,32,37,114,70,41,12,114,23, 0,0,0,114,32,0,0,0,114,33,0,0,0,114,24,0, 0,0,114,27,0,0,0,114,26,0,0,0,114,36,0,0, 0,114,19,0,0,0,114,25,0,0,0,218,7,97,99,113, 117,105,114,101,114,28,0,0,0,218,7,114,101,108,101,97, 115,101,169,2,114,30,0,0,0,114,35,0,0,0,114,10, 0,0,0,114,10,0,0,0,114,11,0,0,0,114,38,0, - 0,0,78,0,0,0,115,30,0,0,0,0,6,8,1,8, - 1,2,2,8,1,20,1,6,1,14,1,18,1,8,1,12, - 1,12,1,24,2,10,1,16,2,122,19,95,77,111,100,117, - 108,101,76,111,99,107,46,97,99,113,117,105,114,101,99,1, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,9, - 0,0,0,67,0,0,0,115,122,0,0,0,116,0,160,1, - 161,0,125,1,124,0,106,2,143,98,1,0,124,0,106,3, - 124,1,107,3,114,34,116,4,100,1,131,1,130,1,124,0, - 106,5,100,2,107,4,115,48,74,0,130,1,124,0,4,0, - 106,5,100,3,56,0,2,0,95,5,124,0,106,5,100,2, - 107,2,114,108,100,0,124,0,95,3,124,0,106,6,114,108, - 124,0,4,0,106,6,100,3,56,0,2,0,95,6,124,0, - 106,7,160,8,161,0,1,0,87,0,53,0,81,0,82,0, - 88,0,100,0,83,0,41,4,78,250,31,99,97,110,110,111, - 116,32,114,101,108,101,97,115,101,32,117,110,45,97,99,113, - 117,105,114,101,100,32,108,111,99,107,114,22,0,0,0,114, - 37,0,0,0,41,9,114,23,0,0,0,114,32,0,0,0, - 114,24,0,0,0,114,26,0,0,0,218,12,82,117,110,116, - 105,109,101,69,114,114,111,114,114,27,0,0,0,114,28,0, - 0,0,114,25,0,0,0,114,39,0,0,0,114,40,0,0, - 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 114,39,0,0,0,103,0,0,0,115,22,0,0,0,0,1, - 8,1,8,1,10,1,8,1,14,1,14,1,10,1,6,1, - 6,1,14,1,122,19,95,77,111,100,117,108,101,76,111,99, - 107,46,114,101,108,101,97,115,101,99,1,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,0, - 0,0,115,18,0,0,0,100,1,160,0,124,0,106,1,116, - 2,124,0,131,1,161,2,83,0,41,2,78,122,23,95,77, - 111,100,117,108,101,76,111,99,107,40,123,33,114,125,41,32, - 97,116,32,123,125,169,3,218,6,102,111,114,109,97,116,114, - 17,0,0,0,218,2,105,100,169,1,114,30,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, - 95,95,114,101,112,114,95,95,116,0,0,0,115,2,0,0, - 0,0,1,122,20,95,77,111,100,117,108,101,76,111,99,107, - 46,95,95,114,101,112,114,95,95,78,41,9,114,1,0,0, - 0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,0, - 114,31,0,0,0,114,36,0,0,0,114,38,0,0,0,114, - 39,0,0,0,114,47,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,114,20,0, - 0,0,52,0,0,0,115,12,0,0,0,8,1,4,5,8, - 8,8,12,8,25,8,13,114,20,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,48,0,0,0,101,0,90,1,100,0, - 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, - 100,5,132,0,90,5,100,6,100,7,132,0,90,6,100,8, - 100,9,132,0,90,7,100,10,83,0,41,11,218,16,95,68, - 117,109,109,121,77,111,100,117,108,101,76,111,99,107,122,86, - 65,32,115,105,109,112,108,101,32,95,77,111,100,117,108,101, - 76,111,99,107,32,101,113,117,105,118,97,108,101,110,116,32, - 102,111,114,32,80,121,116,104,111,110,32,98,117,105,108,100, - 115,32,119,105,116,104,111,117,116,10,32,32,32,32,109,117, - 108,116,105,45,116,104,114,101,97,100,105,110,103,32,115,117, - 112,112,111,114,116,46,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, - 16,0,0,0,124,1,124,0,95,0,100,1,124,0,95,1, - 100,0,83,0,114,21,0,0,0,41,2,114,17,0,0,0, - 114,27,0,0,0,114,29,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,31,0,0,0,124,0, - 0,0,115,4,0,0,0,0,1,6,1,122,25,95,68,117, - 109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,95, - 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 18,0,0,0,124,0,4,0,106,0,100,1,55,0,2,0, - 95,0,100,2,83,0,41,3,78,114,37,0,0,0,84,41, - 1,114,27,0,0,0,114,46,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,38,0,0,0,128, - 0,0,0,115,4,0,0,0,0,1,14,1,122,24,95,68, - 117,109,109,121,77,111,100,117,108,101,76,111,99,107,46,97, + 0,0,78,0,0,0,115,38,0,0,0,0,6,8,1,8, + 1,2,2,8,1,20,1,6,1,14,1,14,9,6,247,2, + 9,2,248,8,1,12,1,12,1,44,2,10,1,14,2,8, + 0,122,19,95,77,111,100,117,108,101,76,111,99,107,46,97, 99,113,117,105,114,101,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 36,0,0,0,124,0,106,0,100,1,107,2,114,18,116,1, - 100,2,131,1,130,1,124,0,4,0,106,0,100,3,56,0, - 2,0,95,0,100,0,83,0,41,4,78,114,22,0,0,0, - 114,41,0,0,0,114,37,0,0,0,41,2,114,27,0,0, - 0,114,42,0,0,0,114,46,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,39,0,0,0,132, - 0,0,0,115,6,0,0,0,0,1,10,1,8,1,122,24, + 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115, + 142,0,0,0,116,0,160,1,161,0,125,1,124,0,106,2, + 143,108,1,0,124,0,106,3,124,1,107,3,114,34,116,4, + 100,1,131,1,130,1,124,0,106,5,100,2,107,4,115,48, + 74,0,130,1,124,0,4,0,106,5,100,3,56,0,2,0, + 95,5,124,0,106,5,100,2,107,2,114,108,100,0,124,0, + 95,3,124,0,106,6,114,108,124,0,4,0,106,6,100,3, + 56,0,2,0,95,6,124,0,106,7,160,8,161,0,1,0, + 87,0,100,0,4,0,4,0,131,3,1,0,110,16,49,0, + 115,128,48,0,1,0,1,0,1,0,89,0,1,0,100,0, + 83,0,41,4,78,250,31,99,97,110,110,111,116,32,114,101, + 108,101,97,115,101,32,117,110,45,97,99,113,117,105,114,101, + 100,32,108,111,99,107,114,22,0,0,0,114,37,0,0,0, + 41,9,114,23,0,0,0,114,32,0,0,0,114,24,0,0, + 0,114,26,0,0,0,218,12,82,117,110,116,105,109,101,69, + 114,114,111,114,114,27,0,0,0,114,28,0,0,0,114,25, + 0,0,0,114,39,0,0,0,114,40,0,0,0,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,114,39,0,0, + 0,103,0,0,0,115,22,0,0,0,0,1,8,1,8,1, + 10,1,8,1,14,1,14,1,10,1,6,1,6,1,14,1, + 122,19,95,77,111,100,117,108,101,76,111,99,107,46,114,101, + 108,101,97,115,101,99,1,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,18, + 0,0,0,100,1,160,0,124,0,106,1,116,2,124,0,131, + 1,161,2,83,0,41,2,78,122,23,95,77,111,100,117,108, + 101,76,111,99,107,40,123,33,114,125,41,32,97,116,32,123, + 125,169,3,218,6,102,111,114,109,97,116,114,17,0,0,0, + 218,2,105,100,169,1,114,30,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,8,95,95,114,101, + 112,114,95,95,116,0,0,0,115,2,0,0,0,0,1,122, + 20,95,77,111,100,117,108,101,76,111,99,107,46,95,95,114, + 101,112,114,95,95,78,41,9,114,1,0,0,0,114,0,0, + 0,0,114,2,0,0,0,114,3,0,0,0,114,31,0,0, + 0,114,36,0,0,0,114,38,0,0,0,114,39,0,0,0, + 114,47,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,20,0,0,0,52,0, + 0,0,115,12,0,0,0,8,1,4,5,8,8,8,12,8, + 25,8,13,114,20,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, + 0,115,48,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, + 90,5,100,6,100,7,132,0,90,6,100,8,100,9,132,0, + 90,7,100,10,83,0,41,11,218,16,95,68,117,109,109,121, + 77,111,100,117,108,101,76,111,99,107,122,86,65,32,115,105, + 109,112,108,101,32,95,77,111,100,117,108,101,76,111,99,107, + 32,101,113,117,105,118,97,108,101,110,116,32,102,111,114,32, + 80,121,116,104,111,110,32,98,117,105,108,100,115,32,119,105, + 116,104,111,117,116,10,32,32,32,32,109,117,108,116,105,45, + 116,104,114,101,97,100,105,110,103,32,115,117,112,112,111,114, + 116,46,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, + 124,1,124,0,95,0,100,1,124,0,95,1,100,0,83,0, + 114,21,0,0,0,41,2,114,17,0,0,0,114,27,0,0, + 0,114,29,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,31,0,0,0,124,0,0,0,115,4, + 0,0,0,0,1,6,1,122,25,95,68,117,109,109,121,77, + 111,100,117,108,101,76,111,99,107,46,95,95,105,110,105,116, + 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0, + 124,0,4,0,106,0,100,1,55,0,2,0,95,0,100,2, + 83,0,41,3,78,114,37,0,0,0,84,41,1,114,27,0, + 0,0,114,46,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,38,0,0,0,128,0,0,0,115, + 4,0,0,0,0,1,14,1,122,24,95,68,117,109,109,121, + 77,111,100,117,108,101,76,111,99,107,46,97,99,113,117,105, + 114,101,99,1,0,0,0,0,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,36,0,0,0, + 124,0,106,0,100,1,107,2,114,18,116,1,100,2,131,1, + 130,1,124,0,4,0,106,0,100,3,56,0,2,0,95,0, + 100,0,83,0,41,4,78,114,22,0,0,0,114,41,0,0, + 0,114,37,0,0,0,41,2,114,27,0,0,0,114,42,0, + 0,0,114,46,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,39,0,0,0,132,0,0,0,115, + 6,0,0,0,0,1,10,1,8,1,122,24,95,68,117,109, + 109,121,77,111,100,117,108,101,76,111,99,107,46,114,101,108, + 101,97,115,101,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,5,0,0,0,67,0,0,0,115,18,0, + 0,0,100,1,160,0,124,0,106,1,116,2,124,0,131,1, + 161,2,83,0,41,2,78,122,28,95,68,117,109,109,121,77, + 111,100,117,108,101,76,111,99,107,40,123,33,114,125,41,32, + 97,116,32,123,125,114,43,0,0,0,114,46,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,47, + 0,0,0,137,0,0,0,115,2,0,0,0,0,1,122,25, 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107, - 46,114,101,108,101,97,115,101,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,5,0,0,0,67,0,0, - 0,115,18,0,0,0,100,1,160,0,124,0,106,1,116,2, - 124,0,131,1,161,2,83,0,41,2,78,122,28,95,68,117, - 109,109,121,77,111,100,117,108,101,76,111,99,107,40,123,33, - 114,125,41,32,97,116,32,123,125,114,43,0,0,0,114,46, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,114,47,0,0,0,137,0,0,0,115,2,0,0,0, - 0,1,122,25,95,68,117,109,109,121,77,111,100,117,108,101, - 76,111,99,107,46,95,95,114,101,112,114,95,95,78,41,8, - 114,1,0,0,0,114,0,0,0,0,114,2,0,0,0,114, - 3,0,0,0,114,31,0,0,0,114,38,0,0,0,114,39, - 0,0,0,114,47,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,48,0,0, - 0,120,0,0,0,115,10,0,0,0,8,1,4,3,8,4, - 8,4,8,5,114,48,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, - 0,0,115,36,0,0,0,101,0,90,1,100,0,90,2,100, - 1,100,2,132,0,90,3,100,3,100,4,132,0,90,4,100, - 5,100,6,132,0,90,5,100,7,83,0,41,8,218,18,95, - 77,111,100,117,108,101,76,111,99,107,77,97,110,97,103,101, - 114,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124, - 1,124,0,95,0,100,0,124,0,95,1,100,0,83,0,114, - 13,0,0,0,41,2,218,5,95,110,97,109,101,218,5,95, - 108,111,99,107,114,29,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,31,0,0,0,143,0,0, - 0,115,4,0,0,0,0,1,6,1,122,27,95,77,111,100, - 117,108,101,76,111,99,107,77,97,110,97,103,101,114,46,95, - 95,105,110,105,116,95,95,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, - 115,26,0,0,0,116,0,124,0,106,1,131,1,124,0,95, - 2,124,0,106,2,160,3,161,0,1,0,100,0,83,0,114, - 13,0,0,0,41,4,218,16,95,103,101,116,95,109,111,100, - 117,108,101,95,108,111,99,107,114,50,0,0,0,114,51,0, - 0,0,114,38,0,0,0,114,46,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,218,9,95,95,101, - 110,116,101,114,95,95,147,0,0,0,115,4,0,0,0,0, - 1,12,1,122,28,95,77,111,100,117,108,101,76,111,99,107, - 77,97,110,97,103,101,114,46,95,95,101,110,116,101,114,95, - 95,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,2,0,0,0,79,0,0,0,115,14,0,0,0,124, - 0,106,0,160,1,161,0,1,0,100,0,83,0,114,13,0, - 0,0,41,2,114,51,0,0,0,114,39,0,0,0,41,3, - 114,30,0,0,0,218,4,97,114,103,115,90,6,107,119,97, - 114,103,115,114,10,0,0,0,114,10,0,0,0,114,11,0, - 0,0,218,8,95,95,101,120,105,116,95,95,151,0,0,0, - 115,2,0,0,0,0,1,122,27,95,77,111,100,117,108,101, - 76,111,99,107,77,97,110,97,103,101,114,46,95,95,101,120, - 105,116,95,95,78,41,6,114,1,0,0,0,114,0,0,0, - 0,114,2,0,0,0,114,31,0,0,0,114,53,0,0,0, - 114,55,0,0,0,114,10,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,49,0,0,0,141,0, - 0,0,115,6,0,0,0,8,2,8,4,8,4,114,49,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,8,0,0,0,67,0,0,0,115,130,0,0,0, - 116,0,160,1,161,0,1,0,122,106,122,14,116,3,124,0, - 25,0,131,0,125,1,87,0,110,24,4,0,116,4,107,10, - 114,48,1,0,1,0,1,0,100,1,125,1,89,0,110,2, - 88,0,124,1,100,1,107,8,114,112,116,5,100,1,107,8, - 114,76,116,6,124,0,131,1,125,1,110,8,116,7,124,0, - 131,1,125,1,124,0,102,1,100,2,100,3,132,1,125,2, - 116,8,160,9,124,1,124,2,161,2,116,3,124,0,60,0, - 87,0,53,0,116,0,160,2,161,0,1,0,88,0,124,1, - 83,0,41,4,122,139,71,101,116,32,111,114,32,99,114,101, - 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108, - 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32, - 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32, - 32,32,65,99,113,117,105,114,101,47,114,101,108,101,97,115, - 101,32,105,110,116,101,114,110,97,108,108,121,32,116,104,101, - 32,103,108,111,98,97,108,32,105,109,112,111,114,116,32,108, - 111,99,107,32,116,111,32,112,114,111,116,101,99,116,10,32, - 32,32,32,95,109,111,100,117,108,101,95,108,111,99,107,115, - 46,78,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,8,0,0,0,83,0,0,0,115,48,0,0,0, - 116,0,160,1,161,0,1,0,122,24,116,3,160,4,124,1, - 161,1,124,0,107,8,114,30,116,3,124,1,61,0,87,0, - 53,0,116,0,160,2,161,0,1,0,88,0,100,0,83,0, - 114,13,0,0,0,41,5,218,4,95,105,109,112,218,12,97, - 99,113,117,105,114,101,95,108,111,99,107,218,12,114,101,108, - 101,97,115,101,95,108,111,99,107,218,13,95,109,111,100,117, - 108,101,95,108,111,99,107,115,114,34,0,0,0,41,2,218, - 3,114,101,102,114,17,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,218,2,99,98,176,0,0,0, - 115,10,0,0,0,0,1,8,1,2,4,14,1,10,2,122, - 28,95,103,101,116,95,109,111,100,117,108,101,95,108,111,99, - 107,46,60,108,111,99,97,108,115,62,46,99,98,41,10,114, - 56,0,0,0,114,57,0,0,0,114,58,0,0,0,114,59, - 0,0,0,218,8,75,101,121,69,114,114,111,114,114,23,0, - 0,0,114,48,0,0,0,114,20,0,0,0,218,8,95,119, - 101,97,107,114,101,102,114,60,0,0,0,41,3,114,17,0, - 0,0,114,24,0,0,0,114,61,0,0,0,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,52,0,0,0, - 157,0,0,0,115,28,0,0,0,0,6,8,1,2,1,2, - 1,14,1,14,1,10,2,8,1,8,1,10,2,8,2,12, - 11,20,2,10,2,114,52,0,0,0,99,1,0,0,0,0, + 46,95,95,114,101,112,114,95,95,78,41,8,114,1,0,0, + 0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,0, + 114,31,0,0,0,114,38,0,0,0,114,39,0,0,0,114, + 47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,11,0,0,0,114,48,0,0,0,120,0,0, + 0,115,10,0,0,0,8,1,4,3,8,4,8,4,8,5, + 114,48,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,36, + 0,0,0,101,0,90,1,100,0,90,2,100,1,100,2,132, + 0,90,3,100,3,100,4,132,0,90,4,100,5,100,6,132, + 0,90,5,100,7,83,0,41,8,218,18,95,77,111,100,117, + 108,101,76,111,99,107,77,97,110,97,103,101,114,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0, + 0,0,67,0,0,0,115,16,0,0,0,124,1,124,0,95, + 0,100,0,124,0,95,1,100,0,83,0,114,13,0,0,0, + 41,2,218,5,95,110,97,109,101,218,5,95,108,111,99,107, + 114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,114,31,0,0,0,143,0,0,0,115,4,0, + 0,0,0,1,6,1,122,27,95,77,111,100,117,108,101,76, + 111,99,107,77,97,110,97,103,101,114,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,26,0,0, + 0,116,0,124,0,106,1,131,1,124,0,95,2,124,0,106, + 2,160,3,161,0,1,0,100,0,83,0,114,13,0,0,0, + 41,4,218,16,95,103,101,116,95,109,111,100,117,108,101,95, + 108,111,99,107,114,50,0,0,0,114,51,0,0,0,114,38, + 0,0,0,114,46,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,218,9,95,95,101,110,116,101,114, + 95,95,147,0,0,0,115,4,0,0,0,0,1,12,1,122, + 28,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97, + 103,101,114,46,95,95,101,110,116,101,114,95,95,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0, + 0,0,79,0,0,0,115,14,0,0,0,124,0,106,0,160, + 1,161,0,1,0,100,0,83,0,114,13,0,0,0,41,2, + 114,51,0,0,0,114,39,0,0,0,41,3,114,30,0,0, + 0,218,4,97,114,103,115,90,6,107,119,97,114,103,115,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, + 95,95,101,120,105,116,95,95,151,0,0,0,115,2,0,0, + 0,0,1,122,27,95,77,111,100,117,108,101,76,111,99,107, + 77,97,110,97,103,101,114,46,95,95,101,120,105,116,95,95, + 78,41,6,114,1,0,0,0,114,0,0,0,0,114,2,0, + 0,0,114,31,0,0,0,114,53,0,0,0,114,55,0,0, + 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,49,0,0,0,141,0,0,0,115,6, + 0,0,0,8,2,8,4,8,4,114,49,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8, + 0,0,0,67,0,0,0,115,138,0,0,0,116,0,160,1, + 161,0,1,0,122,114,122,14,116,2,124,0,25,0,131,0, + 125,1,87,0,110,24,4,0,116,3,107,10,114,48,1,0, + 1,0,1,0,100,1,125,1,89,0,110,2,48,0,124,1, + 100,1,107,8,114,112,116,4,100,1,107,8,114,76,116,5, + 124,0,131,1,125,1,110,8,116,6,124,0,131,1,125,1, + 124,0,102,1,100,2,100,3,132,1,125,2,116,7,160,8, + 124,1,124,2,161,2,116,2,124,0,60,0,87,0,116,0, + 160,9,161,0,1,0,110,10,116,0,160,9,161,0,1,0, + 48,0,124,1,83,0,41,4,122,139,71,101,116,32,111,114, + 32,99,114,101,97,116,101,32,116,104,101,32,109,111,100,117, + 108,101,32,108,111,99,107,32,102,111,114,32,97,32,103,105, + 118,101,110,32,109,111,100,117,108,101,32,110,97,109,101,46, + 10,10,32,32,32,32,65,99,113,117,105,114,101,47,114,101, + 108,101,97,115,101,32,105,110,116,101,114,110,97,108,108,121, + 32,116,104,101,32,103,108,111,98,97,108,32,105,109,112,111, + 114,116,32,108,111,99,107,32,116,111,32,112,114,111,116,101, + 99,116,10,32,32,32,32,95,109,111,100,117,108,101,95,108, + 111,99,107,115,46,78,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,8,0,0,0,83,0,0,0,115, + 56,0,0,0,116,0,160,1,161,0,1,0,122,32,116,2, + 160,3,124,1,161,1,124,0,107,8,114,30,116,2,124,1, + 61,0,87,0,116,0,160,4,161,0,1,0,110,10,116,0, + 160,4,161,0,1,0,48,0,100,0,83,0,114,13,0,0, + 0,41,5,218,4,95,105,109,112,218,12,97,99,113,117,105, + 114,101,95,108,111,99,107,218,13,95,109,111,100,117,108,101, + 95,108,111,99,107,115,114,34,0,0,0,218,12,114,101,108, + 101,97,115,101,95,108,111,99,107,41,2,218,3,114,101,102, + 114,17,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,2,99,98,176,0,0,0,115,12,0,0, + 0,0,1,8,1,2,4,14,1,8,2,10,0,122,28,95, + 103,101,116,95,109,111,100,117,108,101,95,108,111,99,107,46, + 60,108,111,99,97,108,115,62,46,99,98,41,10,114,56,0, + 0,0,114,57,0,0,0,114,58,0,0,0,218,8,75,101, + 121,69,114,114,111,114,114,23,0,0,0,114,48,0,0,0, + 114,20,0,0,0,218,8,95,119,101,97,107,114,101,102,114, + 60,0,0,0,114,59,0,0,0,41,3,114,17,0,0,0, + 114,24,0,0,0,114,61,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,52,0,0,0,157,0, + 0,0,115,30,0,0,0,0,6,8,1,2,1,2,1,14, + 1,14,1,10,2,8,1,8,1,10,2,8,2,12,11,18, + 2,10,0,10,2,114,52,0,0,0,99,1,0,0,0,0, 0,0,0,0,0,0,0,2,0,0,0,8,0,0,0,67, 0,0,0,115,54,0,0,0,116,0,124,0,131,1,125,1, 122,12,124,1,160,1,161,0,1,0,87,0,110,20,4,0, 116,2,107,10,114,40,1,0,1,0,1,0,89,0,110,10, - 88,0,124,1,160,3,161,0,1,0,100,1,83,0,41,2, + 48,0,124,1,160,3,161,0,1,0,100,1,83,0,41,2, 122,189,65,99,113,117,105,114,101,115,32,116,104,101,110,32, 114,101,108,101,97,115,101,115,32,116,104,101,32,109,111,100, 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103, @@ -493,17 +498,17 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,0,115,226,0,0,0,116,0,124,0,100,1,100,0,131, 3,125,1,116,1,124,1,100,2,131,2,114,56,122,12,124, 1,160,2,124,0,161,1,87,0,83,0,4,0,116,3,107, - 10,114,54,1,0,1,0,1,0,89,0,110,2,88,0,122, + 10,114,54,1,0,1,0,1,0,89,0,110,2,48,0,122, 10,124,0,106,4,125,2,87,0,110,20,4,0,116,5,107, - 10,114,86,1,0,1,0,1,0,89,0,110,18,88,0,124, + 10,114,86,1,0,1,0,1,0,89,0,110,18,48,0,124, 2,100,0,107,9,114,104,116,6,124,2,131,1,83,0,122, 10,124,0,106,7,125,3,87,0,110,24,4,0,116,5,107, 10,114,138,1,0,1,0,1,0,100,3,125,3,89,0,110, - 2,88,0,122,10,124,0,106,8,125,4,87,0,110,58,4, + 2,48,0,122,10,124,0,106,8,125,4,87,0,110,58,4, 0,116,5,107,10,114,208,1,0,1,0,1,0,124,1,100, 0,107,8,114,188,100,4,160,9,124,3,161,1,6,0,89, 0,83,0,100,5,160,9,124,3,124,1,161,2,6,0,89, - 0,83,0,89,0,110,14,88,0,100,6,160,9,124,3,124, + 0,83,0,89,0,110,14,48,0,100,6,160,9,124,3,124, 4,161,2,83,0,100,0,83,0,41,7,78,218,10,95,95, 108,111,97,100,101,114,95,95,218,11,109,111,100,117,108,101, 95,114,101,112,114,250,1,63,250,13,60,109,111,100,117,108, @@ -676,7 +681,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 107,2,111,76,124,0,106,4,124,1,106,4,107,2,111,76, 124,0,106,5,124,1,106,5,107,2,87,0,83,0,4,0, 116,6,107,10,114,102,1,0,1,0,1,0,116,7,6,0, - 89,0,83,0,88,0,100,0,83,0,114,13,0,0,0,41, + 89,0,83,0,48,0,100,0,83,0,114,13,0,0,0,41, 8,114,115,0,0,0,114,17,0,0,0,114,108,0,0,0, 114,112,0,0,0,218,6,99,97,99,104,101,100,218,12,104, 97,115,95,108,111,99,97,116,105,111,110,114,105,0,0,0, @@ -753,7 +758,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 116,0,124,1,100,5,131,2,114,134,122,14,124,1,160,4, 124,0,161,1,125,3,87,0,113,138,4,0,116,5,107,10, 114,130,1,0,1,0,1,0,100,2,125,3,89,0,113,138, - 88,0,110,4,100,6,125,3,116,6,124,0,124,1,124,2, + 48,0,110,4,100,6,125,3,116,6,124,0,124,1,124,2, 124,3,100,7,141,4,83,0,41,8,122,53,82,101,116,117, 114,110,32,97,32,109,111,100,117,108,101,32,115,112,101,99, 32,98,97,115,101,100,32,111,110,32,118,97,114,105,111,117, @@ -774,22 +779,22 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 99,3,0,0,0,0,0,0,0,0,0,0,0,8,0,0, 0,8,0,0,0,67,0,0,0,115,56,1,0,0,122,10, 124,0,106,0,125,3,87,0,110,20,4,0,116,1,107,10, - 114,30,1,0,1,0,1,0,89,0,110,14,88,0,124,3, + 114,30,1,0,1,0,1,0,89,0,110,14,48,0,124,3, 100,0,107,9,114,44,124,3,83,0,124,0,106,2,125,4, 124,1,100,0,107,8,114,90,122,10,124,0,106,3,125,1, 87,0,110,20,4,0,116,1,107,10,114,88,1,0,1,0, - 1,0,89,0,110,2,88,0,122,10,124,0,106,4,125,5, + 1,0,89,0,110,2,48,0,122,10,124,0,106,4,125,5, 87,0,110,24,4,0,116,1,107,10,114,124,1,0,1,0, - 1,0,100,0,125,5,89,0,110,2,88,0,124,2,100,0, + 1,0,100,0,125,5,89,0,110,2,48,0,124,2,100,0, 107,8,114,184,124,5,100,0,107,8,114,180,122,10,124,1, 106,5,125,2,87,0,113,184,4,0,116,1,107,10,114,176, - 1,0,1,0,1,0,100,0,125,2,89,0,113,184,88,0, + 1,0,1,0,1,0,100,0,125,2,89,0,113,184,48,0, 110,4,124,5,125,2,122,10,124,0,106,6,125,6,87,0, 110,24,4,0,116,1,107,10,114,218,1,0,1,0,1,0, - 100,0,125,6,89,0,110,2,88,0,122,14,116,7,124,0, + 100,0,125,6,89,0,110,2,48,0,122,14,116,7,124,0, 106,8,131,1,125,7,87,0,110,26,4,0,116,1,107,10, 144,1,114,4,1,0,1,0,1,0,100,0,125,7,89,0, - 110,2,88,0,116,9,124,4,124,1,124,2,100,1,141,3, + 110,2,48,0,116,9,124,4,124,1,124,2,100,1,141,3, 125,3,124,5,100,0,107,8,144,1,114,34,100,2,110,2, 100,3,124,3,95,10,124,6,124,3,95,11,124,7,124,3, 95,12,124,3,83,0,41,4,78,169,1,114,112,0,0,0, @@ -814,7 +819,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 0,0,0,115,226,1,0,0,124,2,115,20,116,0,124,1, 100,1,100,0,131,3,100,0,107,8,114,54,122,12,124,0, 106,1,124,1,95,2,87,0,110,20,4,0,116,3,107,10, - 114,52,1,0,1,0,1,0,89,0,110,2,88,0,124,2, + 114,52,1,0,1,0,1,0,89,0,110,2,48,0,124,2, 115,74,116,0,124,1,100,2,100,0,131,3,100,0,107,8, 114,178,124,0,106,4,125,3,124,3,100,0,107,8,114,146, 124,0,106,5,100,0,107,9,114,146,116,6,100,0,107,8, @@ -822,26 +827,26 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 124,4,161,1,125,3,124,0,106,5,124,3,95,10,124,3, 124,0,95,4,100,0,124,1,95,11,122,10,124,3,124,1, 95,12,87,0,110,20,4,0,116,3,107,10,114,176,1,0, - 1,0,1,0,89,0,110,2,88,0,124,2,115,198,116,0, + 1,0,1,0,89,0,110,2,48,0,124,2,115,198,116,0, 124,1,100,3,100,0,131,3,100,0,107,8,114,232,122,12, 124,0,106,13,124,1,95,14,87,0,110,20,4,0,116,3, - 107,10,114,230,1,0,1,0,1,0,89,0,110,2,88,0, + 107,10,114,230,1,0,1,0,1,0,89,0,110,2,48,0, 122,10,124,0,124,1,95,15,87,0,110,22,4,0,116,3, 107,10,144,1,114,8,1,0,1,0,1,0,89,0,110,2, - 88,0,124,2,144,1,115,34,116,0,124,1,100,4,100,0, + 48,0,124,2,144,1,115,34,116,0,124,1,100,4,100,0, 131,3,100,0,107,8,144,1,114,82,124,0,106,5,100,0, 107,9,144,1,114,82,122,12,124,0,106,5,124,1,95,16, 87,0,110,22,4,0,116,3,107,10,144,1,114,80,1,0, - 1,0,1,0,89,0,110,2,88,0,124,0,106,17,144,1, + 1,0,1,0,89,0,110,2,48,0,124,0,106,17,144,1, 114,222,124,2,144,1,115,114,116,0,124,1,100,5,100,0, 131,3,100,0,107,8,144,1,114,150,122,12,124,0,106,18, 124,1,95,11,87,0,110,22,4,0,116,3,107,10,144,1, - 114,148,1,0,1,0,1,0,89,0,110,2,88,0,124,2, + 114,148,1,0,1,0,1,0,89,0,110,2,48,0,124,2, 144,1,115,174,116,0,124,1,100,6,100,0,131,3,100,0, 107,8,144,1,114,222,124,0,106,19,100,0,107,9,144,1, 114,222,122,12,124,0,106,19,124,1,95,20,87,0,110,22, 4,0,116,3,107,10,144,1,114,220,1,0,1,0,1,0, - 89,0,110,2,88,0,124,1,83,0,41,7,78,114,1,0, + 89,0,110,2,48,0,124,1,83,0,41,7,78,114,1,0, 0,0,114,97,0,0,0,218,11,95,95,112,97,99,107,97, 103,101,95,95,114,140,0,0,0,114,107,0,0,0,114,138, 0,0,0,41,21,114,6,0,0,0,114,17,0,0,0,114, @@ -906,886 +911,894 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 114,106,0,0,0,54,2,0,0,115,16,0,0,0,0,3, 20,1,10,1,10,1,10,2,16,2,6,1,14,2,114,106, 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,10,0,0,0,67,0,0,0,115,204,0,0, - 0,124,0,106,0,125,2,116,1,124,2,131,1,143,180,1, + 4,0,0,0,10,0,0,0,67,0,0,0,115,250,0,0, + 0,124,0,106,0,125,2,116,1,124,2,131,1,143,216,1, 0,116,2,106,3,160,4,124,2,161,1,124,1,107,9,114, 54,100,1,160,5,124,2,161,1,125,3,116,6,124,3,124, - 2,100,2,141,2,130,1,122,106,124,0,106,8,100,3,107, - 8,114,106,124,0,106,9,100,3,107,8,114,90,116,6,100, - 4,124,0,106,0,100,2,141,2,130,1,116,10,124,0,124, - 1,100,5,100,6,141,3,1,0,110,52,116,10,124,0,124, - 1,100,5,100,6,141,3,1,0,116,11,124,0,106,8,100, - 7,131,2,115,146,124,0,106,8,160,12,124,2,161,1,1, - 0,110,12,124,0,106,8,160,13,124,1,161,1,1,0,87, - 0,53,0,116,2,106,3,160,7,124,0,106,0,161,1,125, - 1,124,1,116,2,106,3,124,0,106,0,60,0,88,0,87, - 0,53,0,81,0,82,0,88,0,124,1,83,0,41,8,122, - 70,69,120,101,99,117,116,101,32,116,104,101,32,115,112,101, - 99,39,115,32,115,112,101,99,105,102,105,101,100,32,109,111, - 100,117,108,101,32,105,110,32,97,110,32,101,120,105,115,116, - 105,110,103,32,109,111,100,117,108,101,39,115,32,110,97,109, - 101,115,112,97,99,101,46,122,30,109,111,100,117,108,101,32, - 123,33,114,125,32,110,111,116,32,105,110,32,115,121,115,46, - 109,111,100,117,108,101,115,114,16,0,0,0,78,250,14,109, - 105,115,115,105,110,103,32,108,111,97,100,101,114,84,114,142, - 0,0,0,114,149,0,0,0,41,14,114,17,0,0,0,114, - 49,0,0,0,114,15,0,0,0,114,91,0,0,0,114,34, - 0,0,0,114,44,0,0,0,114,78,0,0,0,218,3,112, - 111,112,114,108,0,0,0,114,115,0,0,0,114,147,0,0, - 0,114,4,0,0,0,218,11,108,111,97,100,95,109,111,100, - 117,108,101,114,149,0,0,0,41,4,114,94,0,0,0,114, - 95,0,0,0,114,17,0,0,0,218,3,109,115,103,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,114,92,0, - 0,0,71,2,0,0,115,34,0,0,0,0,2,6,1,10, - 1,16,1,10,1,12,1,2,1,10,1,10,1,14,2,16, - 2,14,1,12,4,14,2,16,4,14,1,24,1,114,92,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,8,0,0,0,67,0,0,0,115,26,1,0,0, - 122,18,124,0,106,0,160,1,124,0,106,2,161,1,1,0, - 87,0,110,52,1,0,1,0,1,0,124,0,106,2,116,3, - 106,4,107,6,114,64,116,3,106,4,160,5,124,0,106,2, - 161,1,125,1,124,1,116,3,106,4,124,0,106,2,60,0, - 130,0,89,0,110,2,88,0,116,3,106,4,160,5,124,0, + 2,100,2,141,2,130,1,122,132,124,0,106,7,100,3,107, + 8,114,106,124,0,106,8,100,3,107,8,114,90,116,6,100, + 4,124,0,106,0,100,2,141,2,130,1,116,9,124,0,124, + 1,100,5,100,6,141,3,1,0,110,52,116,9,124,0,124, + 1,100,5,100,6,141,3,1,0,116,10,124,0,106,7,100, + 7,131,2,115,146,124,0,106,7,160,11,124,2,161,1,1, + 0,110,12,124,0,106,7,160,12,124,1,161,1,1,0,87, + 0,116,2,106,3,160,13,124,0,106,0,161,1,125,1,124, + 1,116,2,106,3,124,0,106,0,60,0,110,28,116,2,106, + 3,160,13,124,0,106,0,161,1,125,1,124,1,116,2,106, + 3,124,0,106,0,60,0,48,0,87,0,100,3,4,0,4, + 0,131,3,1,0,110,16,49,0,115,236,48,0,1,0,1, + 0,1,0,89,0,1,0,124,1,83,0,41,8,122,70,69, + 120,101,99,117,116,101,32,116,104,101,32,115,112,101,99,39, + 115,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, + 108,101,32,105,110,32,97,110,32,101,120,105,115,116,105,110, + 103,32,109,111,100,117,108,101,39,115,32,110,97,109,101,115, + 112,97,99,101,46,122,30,109,111,100,117,108,101,32,123,33, + 114,125,32,110,111,116,32,105,110,32,115,121,115,46,109,111, + 100,117,108,101,115,114,16,0,0,0,78,250,14,109,105,115, + 115,105,110,103,32,108,111,97,100,101,114,84,114,142,0,0, + 0,114,149,0,0,0,41,14,114,17,0,0,0,114,49,0, + 0,0,114,15,0,0,0,114,91,0,0,0,114,34,0,0, + 0,114,44,0,0,0,114,78,0,0,0,114,108,0,0,0, + 114,115,0,0,0,114,147,0,0,0,114,4,0,0,0,218, + 11,108,111,97,100,95,109,111,100,117,108,101,114,149,0,0, + 0,218,3,112,111,112,41,4,114,94,0,0,0,114,95,0, + 0,0,114,17,0,0,0,218,3,109,115,103,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,92,0,0,0, + 71,2,0,0,115,38,0,0,0,0,2,6,1,10,1,16, + 1,10,1,12,1,2,1,10,1,10,1,14,2,16,2,14, + 1,12,4,14,2,14,4,14,1,14,255,14,1,44,1,114, + 92,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,8,0,0,0,67,0,0,0,115,26,1, + 0,0,122,18,124,0,106,0,160,1,124,0,106,2,161,1, + 1,0,87,0,110,52,1,0,1,0,1,0,124,0,106,2, + 116,3,106,4,107,6,114,64,116,3,106,4,160,5,124,0, 106,2,161,1,125,1,124,1,116,3,106,4,124,0,106,2, - 60,0,116,6,124,1,100,1,100,0,131,3,100,0,107,8, - 114,148,122,12,124,0,106,0,124,1,95,7,87,0,110,20, - 4,0,116,8,107,10,114,146,1,0,1,0,1,0,89,0, - 110,2,88,0,116,6,124,1,100,2,100,0,131,3,100,0, - 107,8,114,226,122,40,124,1,106,9,124,1,95,10,116,11, - 124,1,100,3,131,2,115,202,124,0,106,2,160,12,100,4, - 161,1,100,5,25,0,124,1,95,10,87,0,110,20,4,0, - 116,8,107,10,114,224,1,0,1,0,1,0,89,0,110,2, - 88,0,116,6,124,1,100,6,100,0,131,3,100,0,107,8, - 144,1,114,22,122,10,124,0,124,1,95,13,87,0,110,22, - 4,0,116,8,107,10,144,1,114,20,1,0,1,0,1,0, - 89,0,110,2,88,0,124,1,83,0,41,7,78,114,97,0, - 0,0,114,144,0,0,0,114,140,0,0,0,114,127,0,0, - 0,114,22,0,0,0,114,104,0,0,0,41,14,114,108,0, - 0,0,114,155,0,0,0,114,17,0,0,0,114,15,0,0, - 0,114,91,0,0,0,114,154,0,0,0,114,6,0,0,0, - 114,97,0,0,0,114,105,0,0,0,114,1,0,0,0,114, - 144,0,0,0,114,4,0,0,0,114,128,0,0,0,114,104, - 0,0,0,114,150,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,218,25,95,108,111,97,100,95,98, - 97,99,107,119,97,114,100,95,99,111,109,112,97,116,105,98, - 108,101,101,2,0,0,115,54,0,0,0,0,4,2,1,18, - 1,6,1,12,1,14,1,12,1,8,3,14,1,12,1,16, - 1,2,1,12,1,14,1,6,1,16,1,2,4,8,1,10, - 1,22,1,14,1,6,1,18,1,2,1,10,1,16,1,6, - 1,114,157,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,11,0,0,0,67,0,0,0,115, - 220,0,0,0,124,0,106,0,100,0,107,9,114,30,116,1, - 124,0,106,0,100,1,131,2,115,30,116,2,124,0,131,1, - 83,0,116,3,124,0,131,1,125,1,100,2,124,0,95,4, - 122,162,124,1,116,5,106,6,124,0,106,7,60,0,122,52, - 124,0,106,0,100,0,107,8,114,96,124,0,106,8,100,0, - 107,8,114,108,116,9,100,4,124,0,106,7,100,5,141,2, - 130,1,110,12,124,0,106,0,160,10,124,1,161,1,1,0, - 87,0,110,50,1,0,1,0,1,0,122,14,116,5,106,6, - 124,0,106,7,61,0,87,0,110,20,4,0,116,11,107,10, - 114,152,1,0,1,0,1,0,89,0,110,2,88,0,130,0, - 89,0,110,2,88,0,116,5,106,6,160,12,124,0,106,7, - 161,1,125,1,124,1,116,5,106,6,124,0,106,7,60,0, - 116,13,100,6,124,0,106,7,124,0,106,0,131,3,1,0, - 87,0,53,0,100,3,124,0,95,4,88,0,124,1,83,0, - 41,7,78,114,149,0,0,0,84,70,114,153,0,0,0,114, - 16,0,0,0,122,18,105,109,112,111,114,116,32,123,33,114, - 125,32,35,32,123,33,114,125,41,14,114,108,0,0,0,114, - 4,0,0,0,114,157,0,0,0,114,151,0,0,0,90,13, - 95,105,110,105,116,105,97,108,105,122,105,110,103,114,15,0, - 0,0,114,91,0,0,0,114,17,0,0,0,114,115,0,0, - 0,114,78,0,0,0,114,149,0,0,0,114,62,0,0,0, - 114,154,0,0,0,114,75,0,0,0,114,150,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,14, - 95,108,111,97,100,95,117,110,108,111,99,107,101,100,138,2, - 0,0,115,46,0,0,0,0,2,10,2,12,1,8,2,8, - 5,6,1,2,1,12,1,2,1,10,1,10,1,16,3,16, - 1,6,1,2,1,14,1,14,1,6,1,8,5,14,1,12, - 1,20,2,8,2,114,158,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,10,0,0,0,67, - 0,0,0,115,42,0,0,0,116,0,124,0,106,1,131,1, - 143,22,1,0,116,2,124,0,131,1,87,0,2,0,53,0, - 81,0,82,0,163,0,83,0,81,0,82,0,88,0,100,1, - 83,0,41,2,122,191,82,101,116,117,114,110,32,97,32,110, - 101,119,32,109,111,100,117,108,101,32,111,98,106,101,99,116, - 44,32,108,111,97,100,101,100,32,98,121,32,116,104,101,32, - 115,112,101,99,39,115,32,108,111,97,100,101,114,46,10,10, - 32,32,32,32,84,104,101,32,109,111,100,117,108,101,32,105, - 115,32,110,111,116,32,97,100,100,101,100,32,116,111,32,105, - 116,115,32,112,97,114,101,110,116,46,10,10,32,32,32,32, - 73,102,32,97,32,109,111,100,117,108,101,32,105,115,32,97, - 108,114,101,97,100,121,32,105,110,32,115,121,115,46,109,111, - 100,117,108,101,115,44,32,116,104,97,116,32,101,120,105,115, - 116,105,110,103,32,109,111,100,117,108,101,32,103,101,116,115, - 10,32,32,32,32,99,108,111,98,98,101,114,101,100,46,10, - 10,32,32,32,32,78,41,3,114,49,0,0,0,114,17,0, - 0,0,114,158,0,0,0,41,1,114,94,0,0,0,114,10, - 0,0,0,114,10,0,0,0,114,11,0,0,0,114,93,0, - 0,0,180,2,0,0,115,4,0,0,0,0,9,12,1,114, - 93,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,64,0,0,0,115,140,0, - 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 90,4,101,5,100,3,100,4,132,0,131,1,90,6,101,7, - 100,20,100,6,100,7,132,1,131,1,90,8,101,7,100,21, - 100,8,100,9,132,1,131,1,90,9,101,7,100,10,100,11, - 132,0,131,1,90,10,101,7,100,12,100,13,132,0,131,1, - 90,11,101,7,101,12,100,14,100,15,132,0,131,1,131,1, - 90,13,101,7,101,12,100,16,100,17,132,0,131,1,131,1, - 90,14,101,7,101,12,100,18,100,19,132,0,131,1,131,1, - 90,15,101,7,101,16,131,1,90,17,100,5,83,0,41,22, - 218,15,66,117,105,108,116,105,110,73,109,112,111,114,116,101, - 114,122,144,77,101,116,97,32,112,97,116,104,32,105,109,112, - 111,114,116,32,102,111,114,32,98,117,105,108,116,45,105,110, - 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,65, - 108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,101, - 105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,115, - 116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,111, - 32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,32, - 116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,97, - 116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,32, - 32,32,32,122,8,98,117,105,108,116,45,105,110,99,1,0, - 0,0,0,0,0,0,0,0,0,0,1,0,0,0,5,0, - 0,0,67,0,0,0,115,22,0,0,0,100,1,124,0,106, - 0,155,2,100,2,116,1,106,2,155,0,100,3,157,5,83, - 0,41,4,250,115,82,101,116,117,114,110,32,114,101,112,114, - 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,101,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,46,32,32,84,104,101,32,105,109,112,111,114,116,32, - 109,97,99,104,105,110,101,114,121,32,100,111,101,115,32,116, - 104,101,32,106,111,98,32,105,116,115,101,108,102,46,10,10, - 32,32,32,32,32,32,32,32,122,8,60,109,111,100,117,108, - 101,32,122,2,32,40,122,2,41,62,41,3,114,1,0,0, - 0,114,159,0,0,0,114,137,0,0,0,41,1,114,95,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,98,0,0,0,206,2,0,0,115,2,0,0,0,0, - 7,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,109,111,100,117,108,101,95,114,101,112,114,78,99, - 4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, - 5,0,0,0,67,0,0,0,115,46,0,0,0,124,2,100, - 0,107,9,114,12,100,0,83,0,116,0,160,1,124,1,161, - 1,114,38,116,2,124,1,124,0,124,0,106,3,100,1,141, - 3,83,0,100,0,83,0,100,0,83,0,169,2,78,114,136, - 0,0,0,41,4,114,56,0,0,0,90,10,105,115,95,98, - 117,105,108,116,105,110,114,90,0,0,0,114,137,0,0,0, - 169,4,218,3,99,108,115,114,80,0,0,0,218,4,112,97, - 116,104,218,6,116,97,114,103,101,116,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,218,9,102,105,110,100,95, - 115,112,101,99,215,2,0,0,115,10,0,0,0,0,2,8, - 1,4,1,10,1,16,2,122,25,66,117,105,108,116,105,110, - 73,109,112,111,114,116,101,114,46,102,105,110,100,95,115,112, - 101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,67,0,0,0,115,30,0,0,0, - 124,0,160,0,124,1,124,2,161,2,125,3,124,3,100,1, - 107,9,114,26,124,3,106,1,83,0,100,1,83,0,41,2, - 122,175,70,105,110,100,32,116,104,101,32,98,117,105,108,116, - 45,105,110,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,32,32,32,32,73,102,32,39,112,97,116,104,39,32,105, - 115,32,101,118,101,114,32,115,112,101,99,105,102,105,101,100, - 32,116,104,101,110,32,116,104,101,32,115,101,97,114,99,104, - 32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97, - 32,102,97,105,108,117,114,101,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,78,41,2,114,166,0,0,0,114,108,0,0,0,41,4, - 114,163,0,0,0,114,80,0,0,0,114,164,0,0,0,114, + 60,0,130,0,89,0,110,2,48,0,116,3,106,4,160,5, + 124,0,106,2,161,1,125,1,124,1,116,3,106,4,124,0, + 106,2,60,0,116,6,124,1,100,1,100,0,131,3,100,0, + 107,8,114,148,122,12,124,0,106,0,124,1,95,7,87,0, + 110,20,4,0,116,8,107,10,114,146,1,0,1,0,1,0, + 89,0,110,2,48,0,116,6,124,1,100,2,100,0,131,3, + 100,0,107,8,114,226,122,40,124,1,106,9,124,1,95,10, + 116,11,124,1,100,3,131,2,115,202,124,0,106,2,160,12, + 100,4,161,1,100,5,25,0,124,1,95,10,87,0,110,20, + 4,0,116,8,107,10,114,224,1,0,1,0,1,0,89,0, + 110,2,48,0,116,6,124,1,100,6,100,0,131,3,100,0, + 107,8,144,1,114,22,122,10,124,0,124,1,95,13,87,0, + 110,22,4,0,116,8,107,10,144,1,114,20,1,0,1,0, + 1,0,89,0,110,2,48,0,124,1,83,0,41,7,78,114, + 97,0,0,0,114,144,0,0,0,114,140,0,0,0,114,127, + 0,0,0,114,22,0,0,0,114,104,0,0,0,41,14,114, + 108,0,0,0,114,154,0,0,0,114,17,0,0,0,114,15, + 0,0,0,114,91,0,0,0,114,155,0,0,0,114,6,0, + 0,0,114,97,0,0,0,114,105,0,0,0,114,1,0,0, + 0,114,144,0,0,0,114,4,0,0,0,114,128,0,0,0, + 114,104,0,0,0,114,150,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,25,95,108,111,97,100, + 95,98,97,99,107,119,97,114,100,95,99,111,109,112,97,116, + 105,98,108,101,101,2,0,0,115,54,0,0,0,0,4,2, + 1,18,1,6,1,12,1,14,1,12,1,8,3,14,1,12, + 1,16,1,2,1,12,1,14,1,6,1,16,1,2,4,8, + 1,10,1,22,1,14,1,6,1,18,1,2,1,10,1,16, + 1,6,1,114,157,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, + 0,115,226,0,0,0,124,0,106,0,100,0,107,9,114,30, + 116,1,124,0,106,0,100,1,131,2,115,30,116,2,124,0, + 131,1,83,0,116,3,124,0,131,1,125,1,100,2,124,0, + 95,4,122,168,124,1,116,5,106,6,124,0,106,7,60,0, + 122,52,124,0,106,0,100,0,107,8,114,96,124,0,106,8, + 100,0,107,8,114,108,116,9,100,3,124,0,106,7,100,4, + 141,2,130,1,110,12,124,0,106,0,160,10,124,1,161,1, + 1,0,87,0,110,50,1,0,1,0,1,0,122,14,116,5, + 106,6,124,0,106,7,61,0,87,0,110,20,4,0,116,11, + 107,10,114,152,1,0,1,0,1,0,89,0,110,2,48,0, + 130,0,89,0,110,2,48,0,116,5,106,6,160,12,124,0, + 106,7,161,1,125,1,124,1,116,5,106,6,124,0,106,7, + 60,0,116,13,100,5,124,0,106,7,124,0,106,0,131,3, + 1,0,87,0,100,6,124,0,95,4,110,8,100,6,124,0, + 95,4,48,0,124,1,83,0,41,7,78,114,149,0,0,0, + 84,114,153,0,0,0,114,16,0,0,0,122,18,105,109,112, + 111,114,116,32,123,33,114,125,32,35,32,123,33,114,125,70, + 41,14,114,108,0,0,0,114,4,0,0,0,114,157,0,0, + 0,114,151,0,0,0,90,13,95,105,110,105,116,105,97,108, + 105,122,105,110,103,114,15,0,0,0,114,91,0,0,0,114, + 17,0,0,0,114,115,0,0,0,114,78,0,0,0,114,149, + 0,0,0,114,62,0,0,0,114,155,0,0,0,114,75,0, + 0,0,114,150,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,14,95,108,111,97,100,95,117,110, + 108,111,99,107,101,100,138,2,0,0,115,48,0,0,0,0, + 2,10,2,12,1,8,2,8,5,6,1,2,1,12,1,2, + 1,10,1,10,1,16,3,16,1,6,1,2,1,14,1,14, + 1,6,1,8,5,14,1,12,1,18,2,8,0,8,2,114, + 158,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,1,0,0,0,8,0,0,0,67,0,0,0,115,54,0, + 0,0,116,0,124,0,106,1,131,1,143,24,1,0,116,2, + 124,0,131,1,87,0,2,0,100,1,4,0,4,0,131,3, + 1,0,83,0,49,0,115,40,48,0,1,0,1,0,1,0, + 89,0,1,0,100,1,83,0,41,2,122,191,82,101,116,117, + 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32, + 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98, + 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97, + 100,101,114,46,10,10,32,32,32,32,84,104,101,32,109,111, + 100,117,108,101,32,105,115,32,110,111,116,32,97,100,100,101, + 100,32,116,111,32,105,116,115,32,112,97,114,101,110,116,46, + 10,10,32,32,32,32,73,102,32,97,32,109,111,100,117,108, + 101,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32, + 115,121,115,46,109,111,100,117,108,101,115,44,32,116,104,97, + 116,32,101,120,105,115,116,105,110,103,32,109,111,100,117,108, + 101,32,103,101,116,115,10,32,32,32,32,99,108,111,98,98, + 101,114,101,100,46,10,10,32,32,32,32,78,41,3,114,49, + 0,0,0,114,17,0,0,0,114,158,0,0,0,41,1,114, 94,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101, - 224,2,0,0,115,4,0,0,0,0,9,12,1,122,27,66, + 0,0,0,114,93,0,0,0,180,2,0,0,115,4,0,0, + 0,0,9,12,1,114,93,0,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, + 0,0,0,115,140,0,0,0,101,0,90,1,100,0,90,2, + 100,1,90,3,100,2,90,4,101,5,100,3,100,4,132,0, + 131,1,90,6,101,7,100,20,100,6,100,7,132,1,131,1, + 90,8,101,7,100,21,100,8,100,9,132,1,131,1,90,9, + 101,7,100,10,100,11,132,0,131,1,90,10,101,7,100,12, + 100,13,132,0,131,1,90,11,101,7,101,12,100,14,100,15, + 132,0,131,1,131,1,90,13,101,7,101,12,100,16,100,17, + 132,0,131,1,131,1,90,14,101,7,101,12,100,18,100,19, + 132,0,131,1,131,1,90,15,101,7,101,16,131,1,90,17, + 100,5,83,0,41,22,218,15,66,117,105,108,116,105,110,73, + 109,112,111,114,116,101,114,122,144,77,101,116,97,32,112,97, + 116,104,32,105,109,112,111,114,116,32,102,111,114,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,115,46,10, + 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, + 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, + 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, + 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, + 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, + 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, + 115,115,46,10,10,32,32,32,32,122,8,98,117,105,108,116, + 45,105,110,99,1,0,0,0,0,0,0,0,0,0,0,0, + 1,0,0,0,5,0,0,0,67,0,0,0,115,22,0,0, + 0,100,1,124,0,106,0,155,2,100,2,116,1,106,2,155, + 0,100,3,157,5,83,0,41,4,250,115,82,101,116,117,114, + 110,32,114,101,112,114,32,102,111,114,32,116,104,101,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,101,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,84,104,101,32,105, + 109,112,111,114,116,32,109,97,99,104,105,110,101,114,121,32, + 100,111,101,115,32,116,104,101,32,106,111,98,32,105,116,115, + 101,108,102,46,10,10,32,32,32,32,32,32,32,32,122,8, + 60,109,111,100,117,108,101,32,122,2,32,40,122,2,41,62, + 41,3,114,1,0,0,0,114,159,0,0,0,114,137,0,0, + 0,41,1,114,95,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,98,0,0,0,206,2,0,0, + 115,2,0,0,0,0,7,122,27,66,117,105,108,116,105,110, + 73,109,112,111,114,116,101,114,46,109,111,100,117,108,101,95, + 114,101,112,114,78,99,4,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,5,0,0,0,67,0,0,0,115,46, + 0,0,0,124,2,100,0,107,9,114,12,100,0,83,0,116, + 0,160,1,124,1,161,1,114,38,116,2,124,1,124,0,124, + 0,106,3,100,1,141,3,83,0,100,0,83,0,100,0,83, + 0,169,2,78,114,136,0,0,0,41,4,114,56,0,0,0, + 90,10,105,115,95,98,117,105,108,116,105,110,114,90,0,0, + 0,114,137,0,0,0,169,4,218,3,99,108,115,114,80,0, + 0,0,218,4,112,97,116,104,218,6,116,97,114,103,101,116, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, + 9,102,105,110,100,95,115,112,101,99,215,2,0,0,115,10, + 0,0,0,0,2,8,1,4,1,10,1,16,2,122,25,66, 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,102, - 105,110,100,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, - 0,0,0,115,46,0,0,0,124,1,106,0,116,1,106,2, - 107,7,114,34,116,3,100,1,160,4,124,1,106,0,161,1, - 124,1,106,0,100,2,141,2,130,1,116,5,116,6,106,7, - 124,1,131,2,83,0,41,3,122,24,67,114,101,97,116,101, - 32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117, - 108,101,114,76,0,0,0,114,16,0,0,0,41,8,114,17, - 0,0,0,114,15,0,0,0,114,77,0,0,0,114,78,0, - 0,0,114,44,0,0,0,114,66,0,0,0,114,56,0,0, - 0,90,14,99,114,101,97,116,101,95,98,117,105,108,116,105, - 110,41,2,114,30,0,0,0,114,94,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,148,0,0, - 0,236,2,0,0,115,10,0,0,0,0,3,12,1,12,1, - 4,255,6,2,122,29,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,46,99,114,101,97,116,101,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, - 0,116,0,116,1,106,2,124,1,131,2,1,0,100,1,83, - 0,41,2,122,22,69,120,101,99,32,97,32,98,117,105,108, - 116,45,105,110,32,109,111,100,117,108,101,78,41,3,114,66, - 0,0,0,114,56,0,0,0,90,12,101,120,101,99,95,98, - 117,105,108,116,105,110,41,2,114,30,0,0,0,114,95,0, - 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0, - 0,114,149,0,0,0,244,2,0,0,115,2,0,0,0,0, - 3,122,27,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, + 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, + 0,115,30,0,0,0,124,0,160,0,124,1,124,2,161,2, + 125,3,124,3,100,1,107,9,114,26,124,3,106,1,83,0, + 100,1,83,0,41,2,122,175,70,105,110,100,32,116,104,101, + 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,112, + 97,116,104,39,32,105,115,32,101,118,101,114,32,115,112,101, + 99,105,102,105,101,100,32,116,104,101,110,32,116,104,101,32, + 115,101,97,114,99,104,32,105,115,32,99,111,110,115,105,100, + 101,114,101,100,32,97,32,102,97,105,108,117,114,101,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, + 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, + 32,32,32,32,32,32,32,78,41,2,114,166,0,0,0,114, + 108,0,0,0,41,4,114,163,0,0,0,114,80,0,0,0, + 114,164,0,0,0,114,94,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,218,11,102,105,110,100,95, + 109,111,100,117,108,101,224,2,0,0,115,4,0,0,0,0, + 9,12,1,122,27,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,67,0,0,0,115,46,0,0,0,124,1, + 106,0,116,1,106,2,107,7,114,34,116,3,100,1,160,4, + 124,1,106,0,161,1,124,1,106,0,100,2,141,2,130,1, + 116,5,116,6,106,7,124,1,131,2,83,0,41,3,122,24, + 67,114,101,97,116,101,32,97,32,98,117,105,108,116,45,105, + 110,32,109,111,100,117,108,101,114,76,0,0,0,114,16,0, + 0,0,41,8,114,17,0,0,0,114,15,0,0,0,114,77, + 0,0,0,114,78,0,0,0,114,44,0,0,0,114,66,0, + 0,0,114,56,0,0,0,90,14,99,114,101,97,116,101,95, + 98,117,105,108,116,105,110,41,2,114,30,0,0,0,114,94, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,148,0,0,0,236,2,0,0,115,10,0,0,0, + 0,3,12,1,12,1,4,255,6,2,122,29,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,46,99,114,101,97, + 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,16,0,0,0,116,0,116,1,106,2,124,1,131, + 2,1,0,100,1,83,0,41,2,122,22,69,120,101,99,32, + 97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,78,41,3,114,66,0,0,0,114,56,0,0,0,90,12, + 101,120,101,99,95,98,117,105,108,116,105,110,41,2,114,30, + 0,0,0,114,95,0,0,0,114,10,0,0,0,114,10,0, + 0,0,114,11,0,0,0,114,149,0,0,0,244,2,0,0, + 115,2,0,0,0,0,3,122,27,66,117,105,108,116,105,110, + 73,109,112,111,114,116,101,114,46,101,120,101,99,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,83,0,41,2,122,57,82,101,116,117,114,110, + 32,78,111,110,101,32,97,115,32,98,117,105,108,116,45,105, + 110,32,109,111,100,117,108,101,115,32,100,111,32,110,111,116, + 32,104,97,118,101,32,99,111,100,101,32,111,98,106,101,99, + 116,115,46,78,114,10,0,0,0,169,2,114,163,0,0,0, + 114,80,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,8,103,101,116,95,99,111,100,101,249,2, + 0,0,115,2,0,0,0,0,4,122,24,66,117,105,108,116, + 105,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99, + 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, + 0,100,1,83,0,41,2,122,56,82,101,116,117,114,110,32, + 78,111,110,101,32,97,115,32,98,117,105,108,116,45,105,110, + 32,109,111,100,117,108,101,115,32,100,111,32,110,111,116,32, + 104,97,118,101,32,115,111,117,114,99,101,32,99,111,100,101, + 46,78,114,10,0,0,0,114,168,0,0,0,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,218,10,103,101,116, + 95,115,111,117,114,99,101,255,2,0,0,115,2,0,0,0, + 0,4,122,26,66,117,105,108,116,105,110,73,109,112,111,114, + 116,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1, 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0, - 41,2,122,57,82,101,116,117,114,110,32,78,111,110,101,32, - 97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,117, - 108,101,115,32,100,111,32,110,111,116,32,104,97,118,101,32, - 99,111,100,101,32,111,98,106,101,99,116,115,46,78,114,10, - 0,0,0,169,2,114,163,0,0,0,114,80,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, - 103,101,116,95,99,111,100,101,249,2,0,0,115,2,0,0, - 0,0,4,122,24,66,117,105,108,116,105,110,73,109,112,111, - 114,116,101,114,46,103,101,116,95,99,111,100,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,41, - 2,122,56,82,101,116,117,114,110,32,78,111,110,101,32,97, - 115,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, - 101,115,32,100,111,32,110,111,116,32,104,97,118,101,32,115, - 111,117,114,99,101,32,99,111,100,101,46,78,114,10,0,0, - 0,114,168,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,218,10,103,101,116,95,115,111,117,114,99, - 101,255,2,0,0,115,2,0,0,0,0,4,122,26,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,101, + 41,2,122,52,82,101,116,117,114,110,32,70,97,108,115,101, + 32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100, + 117,108,101,115,32,97,114,101,32,110,101,118,101,114,32,112, + 97,99,107,97,103,101,115,46,70,114,10,0,0,0,114,168, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,114,114,0,0,0,5,3,0,0,115,2,0,0,0, + 0,4,122,26,66,117,105,108,116,105,110,73,109,112,111,114, + 116,101,114,46,105,115,95,112,97,99,107,97,103,101,41,2, + 78,78,41,1,78,41,18,114,1,0,0,0,114,0,0,0, + 0,114,2,0,0,0,114,3,0,0,0,114,137,0,0,0, + 218,12,115,116,97,116,105,99,109,101,116,104,111,100,114,98, + 0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,100, + 114,166,0,0,0,114,167,0,0,0,114,148,0,0,0,114, + 149,0,0,0,114,85,0,0,0,114,169,0,0,0,114,170, + 0,0,0,114,114,0,0,0,114,96,0,0,0,114,154,0, + 0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,159,0,0,0,195,2,0,0,115, + 44,0,0,0,8,2,4,7,4,2,2,1,10,8,2,1, + 12,8,2,1,12,11,2,1,10,7,2,1,10,4,2,1, + 2,1,12,4,2,1,2,1,12,4,2,1,2,1,12,4, + 114,159,0,0,0,99,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,144, + 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, + 2,90,4,101,5,100,3,100,4,132,0,131,1,90,6,101, + 7,100,22,100,6,100,7,132,1,131,1,90,8,101,7,100, + 23,100,8,100,9,132,1,131,1,90,9,101,7,100,10,100, + 11,132,0,131,1,90,10,101,5,100,12,100,13,132,0,131, + 1,90,11,101,7,100,14,100,15,132,0,131,1,90,12,101, + 7,101,13,100,16,100,17,132,0,131,1,131,1,90,14,101, + 7,101,13,100,18,100,19,132,0,131,1,131,1,90,15,101, + 7,101,13,100,20,100,21,132,0,131,1,131,1,90,16,100, + 5,83,0,41,24,218,14,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,122,142,77,101,116,97,32,112,97,116,104, + 32,105,109,112,111,114,116,32,102,111,114,32,102,114,111,122, + 101,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32, + 32,65,108,108,32,109,101,116,104,111,100,115,32,97,114,101, + 32,101,105,116,104,101,114,32,99,108,97,115,115,32,111,114, + 32,115,116,97,116,105,99,32,109,101,116,104,111,100,115,32, + 116,111,32,97,118,111,105,100,32,116,104,101,32,110,101,101, + 100,32,116,111,10,32,32,32,32,105,110,115,116,97,110,116, + 105,97,116,101,32,116,104,101,32,99,108,97,115,115,46,10, + 10,32,32,32,32,90,6,102,114,111,122,101,110,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0, + 0,0,67,0,0,0,115,16,0,0,0,100,1,160,0,124, + 0,106,1,116,2,106,3,161,2,83,0,41,2,114,160,0, + 0,0,114,152,0,0,0,41,4,114,44,0,0,0,114,1, + 0,0,0,114,173,0,0,0,114,137,0,0,0,41,1,218, + 1,109,114,10,0,0,0,114,10,0,0,0,114,11,0,0, + 0,114,98,0,0,0,25,3,0,0,115,2,0,0,0,0, + 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,4, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5, + 0,0,0,67,0,0,0,115,34,0,0,0,116,0,160,1, + 124,1,161,1,114,26,116,2,124,1,124,0,124,0,106,3, + 100,1,141,3,83,0,100,0,83,0,100,0,83,0,114,161, + 0,0,0,41,4,114,56,0,0,0,114,87,0,0,0,114, + 90,0,0,0,114,137,0,0,0,114,162,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,166,0, + 0,0,34,3,0,0,115,6,0,0,0,0,2,10,1,16, + 2,122,24,70,114,111,122,101,110,73,109,112,111,114,116,101, + 114,46,102,105,110,100,95,115,112,101,99,99,3,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, + 67,0,0,0,115,18,0,0,0,116,0,160,1,124,1,161, + 1,114,14,124,0,83,0,100,1,83,0,41,2,122,93,70, + 105,110,100,32,97,32,102,114,111,122,101,110,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, + 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,78,41,2,114, + 56,0,0,0,114,87,0,0,0,41,3,114,163,0,0,0, + 114,80,0,0,0,114,164,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,167,0,0,0,41,3, + 0,0,115,2,0,0,0,0,7,122,26,70,114,111,122,101, + 110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,83,0,41,2,122,42,85,115,101,32,100, + 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, + 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, + 116,105,111,110,46,78,114,10,0,0,0,41,2,114,163,0, + 0,0,114,94,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,114,148,0,0,0,50,3,0,0,115, + 2,0,0,0,0,2,122,28,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,46,99,114,101,97,116,101,95,109,111, + 100,117,108,101,99,1,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,4,0,0,0,67,0,0,0,115,64,0, + 0,0,124,0,106,0,106,1,125,1,116,2,160,3,124,1, + 161,1,115,36,116,4,100,1,160,5,124,1,161,1,124,1, + 100,2,141,2,130,1,116,6,116,2,106,7,124,1,131,2, + 125,2,116,8,124,2,124,0,106,9,131,2,1,0,100,0, + 83,0,114,86,0,0,0,41,10,114,104,0,0,0,114,17, + 0,0,0,114,56,0,0,0,114,87,0,0,0,114,78,0, + 0,0,114,44,0,0,0,114,66,0,0,0,218,17,103,101, + 116,95,102,114,111,122,101,110,95,111,98,106,101,99,116,218, + 4,101,120,101,99,114,7,0,0,0,41,3,114,95,0,0, + 0,114,17,0,0,0,218,4,99,111,100,101,114,10,0,0, + 0,114,10,0,0,0,114,11,0,0,0,114,149,0,0,0, + 54,3,0,0,115,14,0,0,0,0,2,8,1,10,1,10, + 1,2,255,6,2,12,1,122,26,70,114,111,122,101,110,73, + 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,115,10,0,0, + 0,116,0,124,0,124,1,131,2,83,0,41,1,122,95,76, + 111,97,100,32,97,32,102,114,111,122,101,110,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, + 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,41,1, + 114,96,0,0,0,114,168,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,154,0,0,0,63,3, + 0,0,115,2,0,0,0,0,7,122,26,70,114,111,122,101, + 110,73,109,112,111,114,116,101,114,46,108,111,97,100,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,10, + 0,0,0,116,0,160,1,124,1,161,1,83,0,41,1,122, + 45,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, + 32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,46,41,2, + 114,56,0,0,0,114,175,0,0,0,114,168,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,169, + 0,0,0,72,3,0,0,115,2,0,0,0,0,4,122,23, + 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,103, + 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,1,83,0,41,2,122,54,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,102,114,111,122, + 101,110,32,109,111,100,117,108,101,115,32,100,111,32,110,111, + 116,32,104,97,118,101,32,115,111,117,114,99,101,32,99,111, + 100,101,46,78,114,10,0,0,0,114,168,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,170,0, + 0,0,78,3,0,0,115,2,0,0,0,0,4,122,25,70, + 114,111,122,101,110,73,109,112,111,114,116,101,114,46,103,101, 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,115,4,0,0,0,100,1,83,0,41,2,122,52,82,101, - 116,117,114,110,32,70,97,108,115,101,32,97,115,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97, - 114,101,32,110,101,118,101,114,32,112,97,99,107,97,103,101, - 115,46,70,114,10,0,0,0,114,168,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,114,114,0,0, - 0,5,3,0,0,115,2,0,0,0,0,4,122,26,66,117, - 105,108,116,105,110,73,109,112,111,114,116,101,114,46,105,115, - 95,112,97,99,107,97,103,101,41,2,78,78,41,1,78,41, - 18,114,1,0,0,0,114,0,0,0,0,114,2,0,0,0, - 114,3,0,0,0,114,137,0,0,0,218,12,115,116,97,116, - 105,99,109,101,116,104,111,100,114,98,0,0,0,218,11,99, - 108,97,115,115,109,101,116,104,111,100,114,166,0,0,0,114, - 167,0,0,0,114,148,0,0,0,114,149,0,0,0,114,85, - 0,0,0,114,169,0,0,0,114,170,0,0,0,114,114,0, - 0,0,114,96,0,0,0,114,155,0,0,0,114,10,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, + 0,115,10,0,0,0,116,0,160,1,124,1,161,1,83,0, + 41,1,122,46,82,101,116,117,114,110,32,84,114,117,101,32, + 105,102,32,116,104,101,32,102,114,111,122,101,110,32,109,111, + 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103, + 101,46,41,2,114,56,0,0,0,90,17,105,115,95,102,114, + 111,122,101,110,95,112,97,99,107,97,103,101,114,168,0,0, 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 114,159,0,0,0,195,2,0,0,115,44,0,0,0,8,2, - 4,7,4,2,2,1,10,8,2,1,12,8,2,1,12,11, - 2,1,10,7,2,1,10,4,2,1,2,1,12,4,2,1, - 2,1,12,4,2,1,2,1,12,4,114,159,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,64,0,0,0,115,144,0,0,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,90,4,101,5,100, - 3,100,4,132,0,131,1,90,6,101,7,100,22,100,6,100, - 7,132,1,131,1,90,8,101,7,100,23,100,8,100,9,132, - 1,131,1,90,9,101,7,100,10,100,11,132,0,131,1,90, - 10,101,5,100,12,100,13,132,0,131,1,90,11,101,7,100, - 14,100,15,132,0,131,1,90,12,101,7,101,13,100,16,100, - 17,132,0,131,1,131,1,90,14,101,7,101,13,100,18,100, - 19,132,0,131,1,131,1,90,15,101,7,101,13,100,20,100, - 21,132,0,131,1,131,1,90,16,100,5,83,0,41,24,218, - 14,70,114,111,122,101,110,73,109,112,111,114,116,101,114,122, - 142,77,101,116,97,32,112,97,116,104,32,105,109,112,111,114, - 116,32,102,111,114,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,115,46,10,10,32,32,32,32,65,108,108,32,109, - 101,116,104,111,100,115,32,97,114,101,32,101,105,116,104,101, - 114,32,99,108,97,115,115,32,111,114,32,115,116,97,116,105, - 99,32,109,101,116,104,111,100,115,32,116,111,32,97,118,111, - 105,100,32,116,104,101,32,110,101,101,100,32,116,111,10,32, - 32,32,32,105,110,115,116,97,110,116,105,97,116,101,32,116, - 104,101,32,99,108,97,115,115,46,10,10,32,32,32,32,90, - 6,102,114,111,122,101,110,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0, - 115,16,0,0,0,100,1,160,0,124,0,106,1,116,2,106, - 3,161,2,83,0,41,2,114,160,0,0,0,114,152,0,0, - 0,41,4,114,44,0,0,0,114,1,0,0,0,114,173,0, - 0,0,114,137,0,0,0,41,1,218,1,109,114,10,0,0, - 0,114,10,0,0,0,114,11,0,0,0,114,98,0,0,0, - 25,3,0,0,115,2,0,0,0,0,7,122,26,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,109,111,100,117, - 108,101,95,114,101,112,114,78,99,4,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,0, - 0,115,34,0,0,0,116,0,160,1,124,1,161,1,114,26, - 116,2,124,1,124,0,124,0,106,3,100,1,141,3,83,0, - 100,0,83,0,100,0,83,0,114,161,0,0,0,41,4,114, - 56,0,0,0,114,87,0,0,0,114,90,0,0,0,114,137, - 0,0,0,114,162,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,166,0,0,0,34,3,0,0, - 115,6,0,0,0,0,2,10,1,16,2,122,24,70,114,111, - 122,101,110,73,109,112,111,114,116,101,114,46,102,105,110,100, - 95,115,112,101,99,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,18, - 0,0,0,116,0,160,1,124,1,161,1,114,14,124,0,83, - 0,100,1,83,0,41,2,122,93,70,105,110,100,32,97,32, - 102,114,111,122,101,110,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, - 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,41,2,114,56,0,0,0,114,87, - 0,0,0,41,3,114,163,0,0,0,114,80,0,0,0,114, - 164,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,114,167,0,0,0,41,3,0,0,115,2,0,0, - 0,0,7,122,26,70,114,111,122,101,110,73,109,112,111,114, - 116,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, - 0,41,2,122,42,85,115,101,32,100,101,102,97,117,108,116, - 32,115,101,109,97,110,116,105,99,115,32,102,111,114,32,109, - 111,100,117,108,101,32,99,114,101,97,116,105,111,110,46,78, - 114,10,0,0,0,41,2,114,163,0,0,0,114,94,0,0, - 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 114,148,0,0,0,50,3,0,0,115,2,0,0,0,0,2, - 122,28,70,114,111,122,101,110,73,109,112,111,114,116,101,114, - 46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,1, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, - 0,0,0,67,0,0,0,115,64,0,0,0,124,0,106,0, - 106,1,125,1,116,2,160,3,124,1,161,1,115,36,116,4, - 100,1,160,5,124,1,161,1,124,1,100,2,141,2,130,1, - 116,6,116,2,106,7,124,1,131,2,125,2,116,8,124,2, - 124,0,106,9,131,2,1,0,100,0,83,0,114,86,0,0, - 0,41,10,114,104,0,0,0,114,17,0,0,0,114,56,0, - 0,0,114,87,0,0,0,114,78,0,0,0,114,44,0,0, - 0,114,66,0,0,0,218,17,103,101,116,95,102,114,111,122, - 101,110,95,111,98,106,101,99,116,218,4,101,120,101,99,114, - 7,0,0,0,41,3,114,95,0,0,0,114,17,0,0,0, - 218,4,99,111,100,101,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,149,0,0,0,54,3,0,0,115,14, - 0,0,0,0,2,8,1,10,1,10,1,2,255,6,2,12, - 1,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, - 114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,10,0,0,0,116,0,124,0,124, - 1,131,2,83,0,41,1,122,95,76,111,97,100,32,97,32, - 102,114,111,122,101,110,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, - 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,41,1,114,96,0,0,0,114, - 168,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11, - 0,0,0,114,155,0,0,0,63,3,0,0,115,2,0,0, - 0,0,7,122,26,70,114,111,122,101,110,73,109,112,111,114, - 116,101,114,46,108,111,97,100,95,109,111,100,117,108,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,160, - 1,124,1,161,1,83,0,41,1,122,45,82,101,116,117,114, - 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, - 116,32,102,111,114,32,116,104,101,32,102,114,111,122,101,110, - 32,109,111,100,117,108,101,46,41,2,114,56,0,0,0,114, - 175,0,0,0,114,168,0,0,0,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,169,0,0,0,72,3,0, - 0,115,2,0,0,0,0,4,122,23,70,114,111,122,101,110, - 73,109,112,111,114,116,101,114,46,103,101,116,95,99,111,100, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, - 1,83,0,41,2,122,54,82,101,116,117,114,110,32,78,111, - 110,101,32,97,115,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,101, - 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,10, - 0,0,0,114,168,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,170,0,0,0,78,3,0,0, - 115,2,0,0,0,0,4,122,25,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,103,101,116,95,115,111,117,114, - 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,10,0,0,0, - 116,0,160,1,124,1,161,1,83,0,41,1,122,46,82,101, - 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, - 32,102,114,111,122,101,110,32,109,111,100,117,108,101,32,105, - 115,32,97,32,112,97,99,107,97,103,101,46,41,2,114,56, - 0,0,0,90,17,105,115,95,102,114,111,122,101,110,95,112, - 97,99,107,97,103,101,114,168,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,114,0,0,0,84, - 3,0,0,115,2,0,0,0,0,4,122,25,70,114,111,122, - 101,110,73,109,112,111,114,116,101,114,46,105,115,95,112,97, - 99,107,97,103,101,41,2,78,78,41,1,78,41,17,114,1, + 114,114,0,0,0,84,3,0,0,115,2,0,0,0,0,4, + 122,25,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,105,115,95,112,97,99,107,97,103,101,41,2,78,78,41, + 1,78,41,17,114,1,0,0,0,114,0,0,0,0,114,2, + 0,0,0,114,3,0,0,0,114,137,0,0,0,114,171,0, + 0,0,114,98,0,0,0,114,172,0,0,0,114,166,0,0, + 0,114,167,0,0,0,114,148,0,0,0,114,149,0,0,0, + 114,154,0,0,0,114,89,0,0,0,114,169,0,0,0,114, + 170,0,0,0,114,114,0,0,0,114,10,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,114,173,0, + 0,0,14,3,0,0,115,46,0,0,0,8,2,4,7,4, + 2,2,1,10,8,2,1,12,6,2,1,12,8,2,1,10, + 3,2,1,10,8,2,1,10,8,2,1,2,1,12,4,2, + 1,2,1,12,4,2,1,2,1,114,173,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,64,0,0,0,115,32,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,100,6,83,0,41,7,218,18, + 95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101, + 120,116,122,36,67,111,110,116,101,120,116,32,109,97,110,97, + 103,101,114,32,102,111,114,32,116,104,101,32,105,109,112,111, + 114,116,32,108,111,99,107,46,99,1,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, + 0,115,12,0,0,0,116,0,160,1,161,0,1,0,100,1, + 83,0,41,2,122,24,65,99,113,117,105,114,101,32,116,104, + 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41, + 2,114,56,0,0,0,114,57,0,0,0,114,46,0,0,0, + 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 53,0,0,0,97,3,0,0,115,2,0,0,0,0,2,122, + 28,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, + 101,120,116,46,95,95,101,110,116,101,114,95,95,99,4,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,2,0, + 0,0,67,0,0,0,115,12,0,0,0,116,0,160,1,161, + 0,1,0,100,1,83,0,41,2,122,60,82,101,108,101,97, + 115,101,32,116,104,101,32,105,109,112,111,114,116,32,108,111, + 99,107,32,114,101,103,97,114,100,108,101,115,115,32,111,102, + 32,97,110,121,32,114,97,105,115,101,100,32,101,120,99,101, + 112,116,105,111,110,115,46,78,41,2,114,56,0,0,0,114, + 59,0,0,0,41,4,114,30,0,0,0,218,8,101,120,99, + 95,116,121,112,101,218,9,101,120,99,95,118,97,108,117,101, + 218,13,101,120,99,95,116,114,97,99,101,98,97,99,107,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,55, + 0,0,0,101,3,0,0,115,2,0,0,0,0,2,122,27, + 95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101, + 120,116,46,95,95,101,120,105,116,95,95,78,41,6,114,1, 0,0,0,114,0,0,0,0,114,2,0,0,0,114,3,0, - 0,0,114,137,0,0,0,114,171,0,0,0,114,98,0,0, - 0,114,172,0,0,0,114,166,0,0,0,114,167,0,0,0, - 114,148,0,0,0,114,149,0,0,0,114,155,0,0,0,114, - 89,0,0,0,114,169,0,0,0,114,170,0,0,0,114,114, - 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0, - 0,0,114,11,0,0,0,114,173,0,0,0,14,3,0,0, - 115,46,0,0,0,8,2,4,7,4,2,2,1,10,8,2, - 1,12,6,2,1,12,8,2,1,10,3,2,1,10,8,2, - 1,10,8,2,1,2,1,12,4,2,1,2,1,12,4,2, - 1,2,1,114,173,0,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,32,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, - 90,5,100,6,83,0,41,7,218,18,95,73,109,112,111,114, - 116,76,111,99,107,67,111,110,116,101,120,116,122,36,67,111, - 110,116,101,120,116,32,109,97,110,97,103,101,114,32,102,111, - 114,32,116,104,101,32,105,109,112,111,114,116,32,108,111,99, - 107,46,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,12,0,0,0, - 116,0,160,1,161,0,1,0,100,1,83,0,41,2,122,24, - 65,99,113,117,105,114,101,32,116,104,101,32,105,109,112,111, - 114,116,32,108,111,99,107,46,78,41,2,114,56,0,0,0, - 114,57,0,0,0,114,46,0,0,0,114,10,0,0,0,114, - 10,0,0,0,114,11,0,0,0,114,53,0,0,0,97,3, - 0,0,115,2,0,0,0,0,2,122,28,95,73,109,112,111, - 114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,95, - 101,110,116,101,114,95,95,99,4,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,2,0,0,0,67,0,0,0, - 115,12,0,0,0,116,0,160,1,161,0,1,0,100,1,83, - 0,41,2,122,60,82,101,108,101,97,115,101,32,116,104,101, - 32,105,109,112,111,114,116,32,108,111,99,107,32,114,101,103, - 97,114,100,108,101,115,115,32,111,102,32,97,110,121,32,114, - 97,105,115,101,100,32,101,120,99,101,112,116,105,111,110,115, - 46,78,41,2,114,56,0,0,0,114,58,0,0,0,41,4, - 114,30,0,0,0,218,8,101,120,99,95,116,121,112,101,218, - 9,101,120,99,95,118,97,108,117,101,218,13,101,120,99,95, - 116,114,97,99,101,98,97,99,107,114,10,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,55,0,0,0,101,3,0, - 0,115,2,0,0,0,0,2,122,27,95,73,109,112,111,114, - 116,76,111,99,107,67,111,110,116,101,120,116,46,95,95,101, - 120,105,116,95,95,78,41,6,114,1,0,0,0,114,0,0, - 0,0,114,2,0,0,0,114,3,0,0,0,114,53,0,0, - 0,114,55,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,114,178,0,0,0,93, - 3,0,0,115,6,0,0,0,8,2,4,2,8,4,114,178, - 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,5,0,0,0,67,0,0,0,115,64,0,0, - 0,124,1,160,0,100,1,124,2,100,2,24,0,161,2,125, - 3,116,1,124,3,131,1,124,2,107,0,114,36,116,2,100, - 3,131,1,130,1,124,3,100,4,25,0,125,4,124,0,114, - 60,100,5,160,3,124,4,124,0,161,2,83,0,124,4,83, - 0,41,6,122,50,82,101,115,111,108,118,101,32,97,32,114, - 101,108,97,116,105,118,101,32,109,111,100,117,108,101,32,110, - 97,109,101,32,116,111,32,97,110,32,97,98,115,111,108,117, - 116,101,32,111,110,101,46,114,127,0,0,0,114,37,0,0, - 0,122,50,97,116,116,101,109,112,116,101,100,32,114,101,108, - 97,116,105,118,101,32,105,109,112,111,114,116,32,98,101,121, - 111,110,100,32,116,111,112,45,108,101,118,101,108,32,112,97, - 99,107,97,103,101,114,22,0,0,0,250,5,123,125,46,123, - 125,41,4,218,6,114,115,112,108,105,116,218,3,108,101,110, - 114,78,0,0,0,114,44,0,0,0,41,5,114,17,0,0, - 0,218,7,112,97,99,107,97,103,101,218,5,108,101,118,101, - 108,90,4,98,105,116,115,90,4,98,97,115,101,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,218,13,95,114, - 101,115,111,108,118,101,95,110,97,109,101,106,3,0,0,115, - 10,0,0,0,0,2,16,1,12,1,8,1,8,1,114,187, - 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,4,0,0,0,67,0,0,0,115,34,0,0, - 0,124,0,160,0,124,1,124,2,161,2,125,3,124,3,100, - 0,107,8,114,24,100,0,83,0,116,1,124,1,124,3,131, - 2,83,0,114,13,0,0,0,41,2,114,167,0,0,0,114, - 90,0,0,0,41,4,218,6,102,105,110,100,101,114,114,17, - 0,0,0,114,164,0,0,0,114,108,0,0,0,114,10,0, - 0,0,114,10,0,0,0,114,11,0,0,0,218,17,95,102, - 105,110,100,95,115,112,101,99,95,108,101,103,97,99,121,115, - 3,0,0,115,8,0,0,0,0,3,12,1,8,1,4,1, - 114,189,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,10,0,0,0,10,0,0,0,67,0,0,0,115,12, - 1,0,0,116,0,106,1,125,3,124,3,100,1,107,8,114, - 22,116,2,100,2,131,1,130,1,124,3,115,38,116,3,160, - 4,100,3,116,5,161,2,1,0,124,0,116,0,106,6,107, - 6,125,4,124,3,68,0,93,210,125,5,116,7,131,0,143, - 84,1,0,122,10,124,5,106,8,125,6,87,0,110,54,4, - 0,116,9,107,10,114,128,1,0,1,0,1,0,116,10,124, - 5,124,0,124,1,131,3,125,7,124,7,100,1,107,8,114, - 124,89,0,87,0,53,0,81,0,82,0,163,0,113,52,89, - 0,110,14,88,0,124,6,124,0,124,1,124,2,131,3,125, - 7,87,0,53,0,81,0,82,0,88,0,124,7,100,1,107, - 9,114,52,124,4,144,0,115,254,124,0,116,0,106,6,107, - 6,144,0,114,254,116,0,106,6,124,0,25,0,125,8,122, - 10,124,8,106,11,125,9,87,0,110,28,4,0,116,9,107, - 10,114,226,1,0,1,0,1,0,124,7,6,0,89,0,2, - 0,1,0,83,0,88,0,124,9,100,1,107,8,114,244,124, - 7,2,0,1,0,83,0,124,9,2,0,1,0,83,0,113, - 52,124,7,2,0,1,0,83,0,113,52,100,1,83,0,41, - 4,122,21,70,105,110,100,32,97,32,109,111,100,117,108,101, - 39,115,32,115,112,101,99,46,78,122,53,115,121,115,46,109, - 101,116,97,95,112,97,116,104,32,105,115,32,78,111,110,101, - 44,32,80,121,116,104,111,110,32,105,115,32,108,105,107,101, - 108,121,32,115,104,117,116,116,105,110,103,32,100,111,119,110, - 122,22,115,121,115,46,109,101,116,97,95,112,97,116,104,32, - 105,115,32,101,109,112,116,121,41,12,114,15,0,0,0,218, - 9,109,101,116,97,95,112,97,116,104,114,78,0,0,0,218, - 9,95,119,97,114,110,105,110,103,115,218,4,119,97,114,110, - 218,13,73,109,112,111,114,116,87,97,114,110,105,110,103,114, - 91,0,0,0,114,178,0,0,0,114,166,0,0,0,114,105, - 0,0,0,114,189,0,0,0,114,104,0,0,0,41,10,114, - 17,0,0,0,114,164,0,0,0,114,165,0,0,0,114,190, - 0,0,0,90,9,105,115,95,114,101,108,111,97,100,114,188, - 0,0,0,114,166,0,0,0,114,94,0,0,0,114,95,0, - 0,0,114,104,0,0,0,114,10,0,0,0,114,10,0,0, - 0,114,11,0,0,0,218,10,95,102,105,110,100,95,115,112, - 101,99,124,3,0,0,115,54,0,0,0,0,2,6,1,8, - 2,8,3,4,1,12,5,10,1,8,1,8,1,2,1,10, - 1,14,1,12,1,8,1,20,2,22,1,8,2,18,1,10, - 1,2,1,10,1,14,4,14,2,8,1,8,2,10,2,10, - 2,114,194,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,5,0,0,0,67,0,0,0,115, - 108,0,0,0,116,0,124,0,116,1,131,2,115,28,116,2, - 100,1,160,3,116,4,124,0,131,1,161,1,131,1,130,1, - 124,2,100,2,107,0,114,44,116,5,100,3,131,1,130,1, - 124,2,100,2,107,4,114,84,116,0,124,1,116,1,131,2, - 115,72,116,2,100,4,131,1,130,1,110,12,124,1,115,84, - 116,6,100,5,131,1,130,1,124,0,115,104,124,2,100,2, - 107,2,114,104,116,5,100,6,131,1,130,1,100,7,83,0, - 41,8,122,28,86,101,114,105,102,121,32,97,114,103,117,109, - 101,110,116,115,32,97,114,101,32,34,115,97,110,101,34,46, - 122,31,109,111,100,117,108,101,32,110,97,109,101,32,109,117, - 115,116,32,98,101,32,115,116,114,44,32,110,111,116,32,123, - 125,114,22,0,0,0,122,18,108,101,118,101,108,32,109,117, - 115,116,32,98,101,32,62,61,32,48,122,31,95,95,112,97, - 99,107,97,103,101,95,95,32,110,111,116,32,115,101,116,32, - 116,111,32,97,32,115,116,114,105,110,103,122,54,97,116,116, - 101,109,112,116,101,100,32,114,101,108,97,116,105,118,101,32, - 105,109,112,111,114,116,32,119,105,116,104,32,110,111,32,107, - 110,111,119,110,32,112,97,114,101,110,116,32,112,97,99,107, - 97,103,101,122,17,69,109,112,116,121,32,109,111,100,117,108, - 101,32,110,97,109,101,78,41,7,218,10,105,115,105,110,115, - 116,97,110,99,101,218,3,115,116,114,218,9,84,121,112,101, - 69,114,114,111,114,114,44,0,0,0,114,14,0,0,0,218, - 10,86,97,108,117,101,69,114,114,111,114,114,78,0,0,0, - 169,3,114,17,0,0,0,114,185,0,0,0,114,186,0,0, + 0,0,114,53,0,0,0,114,55,0,0,0,114,10,0,0, 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 218,13,95,115,97,110,105,116,121,95,99,104,101,99,107,171, - 3,0,0,115,22,0,0,0,0,2,10,1,18,1,8,1, - 8,1,8,1,10,1,10,1,4,1,8,2,12,1,114,200, - 0,0,0,122,16,78,111,32,109,111,100,117,108,101,32,110, - 97,109,101,100,32,122,4,123,33,114,125,99,2,0,0,0, - 0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,0, - 67,0,0,0,115,220,0,0,0,100,0,125,2,124,0,160, - 0,100,1,161,1,100,2,25,0,125,3,124,3,114,134,124, - 3,116,1,106,2,107,7,114,42,116,3,124,1,124,3,131, - 2,1,0,124,0,116,1,106,2,107,6,114,62,116,1,106, - 2,124,0,25,0,83,0,116,1,106,2,124,3,25,0,125, - 4,122,10,124,4,106,4,125,2,87,0,110,50,4,0,116, - 5,107,10,114,132,1,0,1,0,1,0,116,6,100,3,23, - 0,160,7,124,0,124,3,161,2,125,5,116,8,124,5,124, - 0,100,4,141,2,100,0,130,2,89,0,110,2,88,0,116, - 9,124,0,124,2,131,2,125,6,124,6,100,0,107,8,114, - 172,116,8,116,6,160,7,124,0,161,1,124,0,100,4,141, - 2,130,1,110,8,116,10,124,6,131,1,125,7,124,3,114, - 216,116,1,106,2,124,3,25,0,125,4,116,11,124,4,124, - 0,160,0,100,1,161,1,100,5,25,0,124,7,131,3,1, - 0,124,7,83,0,41,6,78,114,127,0,0,0,114,22,0, - 0,0,122,23,59,32,123,33,114,125,32,105,115,32,110,111, - 116,32,97,32,112,97,99,107,97,103,101,114,16,0,0,0, - 233,2,0,0,0,41,12,114,128,0,0,0,114,15,0,0, - 0,114,91,0,0,0,114,66,0,0,0,114,140,0,0,0, - 114,105,0,0,0,218,8,95,69,82,82,95,77,83,71,114, - 44,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,194,0,0,0,114,158, - 0,0,0,114,5,0,0,0,41,8,114,17,0,0,0,218, - 7,105,109,112,111,114,116,95,114,164,0,0,0,114,129,0, - 0,0,90,13,112,97,114,101,110,116,95,109,111,100,117,108, - 101,114,156,0,0,0,114,94,0,0,0,114,95,0,0,0, - 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218, - 23,95,102,105,110,100,95,97,110,100,95,108,111,97,100,95, - 117,110,108,111,99,107,101,100,190,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,20,1,10,1,8, - 1,20,2,8,1,4,2,10,1,22,1,114,205,0,0,0, - 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,10,0,0,0,67,0,0,0,115,106,0,0,0,116,0, - 124,0,131,1,143,50,1,0,116,1,106,2,160,3,124,0, - 116,4,161,2,125,2,124,2,116,4,107,8,114,54,116,5, - 124,0,124,1,131,2,87,0,2,0,53,0,81,0,82,0, - 163,0,83,0,87,0,53,0,81,0,82,0,88,0,124,2, - 100,1,107,8,114,94,100,2,160,6,124,0,161,1,125,3, - 116,7,124,3,124,0,100,3,141,2,130,1,116,8,124,0, - 131,1,1,0,124,2,83,0,41,4,122,25,70,105,110,100, - 32,97,110,100,32,108,111,97,100,32,116,104,101,32,109,111, - 100,117,108,101,46,78,122,40,105,109,112,111,114,116,32,111, - 102,32,123,125,32,104,97,108,116,101,100,59,32,78,111,110, - 101,32,105,110,32,115,121,115,46,109,111,100,117,108,101,115, - 114,16,0,0,0,41,9,114,49,0,0,0,114,15,0,0, - 0,114,91,0,0,0,114,34,0,0,0,218,14,95,78,69, - 69,68,83,95,76,79,65,68,73,78,71,114,205,0,0,0, - 114,44,0,0,0,114,203,0,0,0,114,64,0,0,0,41, - 4,114,17,0,0,0,114,204,0,0,0,114,95,0,0,0, - 114,74,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,220,3,0,0,115,22,0,0,0,0,2,10, - 1,14,1,8,1,32,2,8,1,4,1,2,255,4,2,12, - 2,8,1,114,207,0,0,0,114,22,0,0,0,99,3,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,67,0,0,0,115,42,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,124,0,124,1,124,2,131,3,125,0,116,2,124,0,116, - 3,131,2,83,0,41,2,97,50,1,0,0,73,109,112,111, - 114,116,32,97,110,100,32,114,101,116,117,114,110,32,116,104, - 101,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, - 110,32,105,116,115,32,110,97,109,101,44,32,116,104,101,32, - 112,97,99,107,97,103,101,32,116,104,101,32,99,97,108,108, - 32,105,115,10,32,32,32,32,98,101,105,110,103,32,109,97, - 100,101,32,102,114,111,109,44,32,97,110,100,32,116,104,101, - 32,108,101,118,101,108,32,97,100,106,117,115,116,109,101,110, - 116,46,10,10,32,32,32,32,84,104,105,115,32,102,117,110, - 99,116,105,111,110,32,114,101,112,114,101,115,101,110,116,115, - 32,116,104,101,32,103,114,101,97,116,101,115,116,32,99,111, - 109,109,111,110,32,100,101,110,111,109,105,110,97,116,111,114, - 32,111,102,32,102,117,110,99,116,105,111,110,97,108,105,116, - 121,10,32,32,32,32,98,101,116,119,101,101,110,32,105,109, - 112,111,114,116,95,109,111,100,117,108,101,32,97,110,100,32, - 95,95,105,109,112,111,114,116,95,95,46,32,84,104,105,115, - 32,105,110,99,108,117,100,101,115,32,115,101,116,116,105,110, - 103,32,95,95,112,97,99,107,97,103,101,95,95,32,105,102, - 10,32,32,32,32,116,104,101,32,108,111,97,100,101,114,32, - 100,105,100,32,110,111,116,46,10,10,32,32,32,32,114,22, - 0,0,0,41,4,114,200,0,0,0,114,187,0,0,0,114, - 207,0,0,0,218,11,95,103,99,100,95,105,109,112,111,114, - 116,114,199,0,0,0,114,10,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,208,0,0,0,236,3,0,0,115,8, - 0,0,0,0,9,12,1,8,1,12,1,114,208,0,0,0, - 169,1,218,9,114,101,99,117,114,115,105,118,101,99,3,0, - 0,0,0,0,0,0,1,0,0,0,8,0,0,0,11,0, - 0,0,67,0,0,0,115,226,0,0,0,124,1,68,0,93, - 216,125,4,116,0,124,4,116,1,131,2,115,66,124,3,114, - 34,124,0,106,2,100,1,23,0,125,5,110,4,100,2,125, - 5,116,3,100,3,124,5,155,0,100,4,116,4,124,4,131, - 1,106,2,155,0,157,4,131,1,130,1,113,4,124,4,100, - 5,107,2,114,108,124,3,115,220,116,5,124,0,100,6,131, - 2,114,220,116,6,124,0,124,0,106,7,124,2,100,7,100, - 8,141,4,1,0,113,4,116,5,124,0,124,4,131,2,115, - 4,100,9,160,8,124,0,106,2,124,4,161,2,125,6,122, - 14,116,9,124,2,124,6,131,2,1,0,87,0,113,4,4, - 0,116,10,107,10,114,218,1,0,125,7,1,0,122,42,124, - 7,106,11,124,6,107,2,114,200,116,12,106,13,160,14,124, - 6,116,15,161,2,100,10,107,9,114,200,87,0,89,0,162, - 8,113,4,130,0,87,0,53,0,100,10,125,7,126,7,88, - 0,89,0,113,4,88,0,113,4,124,0,83,0,41,11,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,122, - 8,46,95,95,97,108,108,95,95,122,13,96,96,102,114,111, - 109,32,108,105,115,116,39,39,122,8,73,116,101,109,32,105, - 110,32,122,18,32,109,117,115,116,32,98,101,32,115,116,114, - 44,32,110,111,116,32,250,1,42,218,7,95,95,97,108,108, - 95,95,84,114,209,0,0,0,114,182,0,0,0,78,41,16, - 114,195,0,0,0,114,196,0,0,0,114,1,0,0,0,114, - 197,0,0,0,114,14,0,0,0,114,4,0,0,0,218,16, - 95,104,97,110,100,108,101,95,102,114,111,109,108,105,115,116, - 114,212,0,0,0,114,44,0,0,0,114,66,0,0,0,114, - 203,0,0,0,114,17,0,0,0,114,15,0,0,0,114,91, - 0,0,0,114,34,0,0,0,114,206,0,0,0,41,8,114, - 95,0,0,0,218,8,102,114,111,109,108,105,115,116,114,204, - 0,0,0,114,210,0,0,0,218,1,120,90,5,119,104,101, - 114,101,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,114,213,0,0,0,251,3,0,0,115,44,0,0,0,0, - 10,8,1,10,1,4,1,12,2,4,1,28,2,8,1,14, - 1,10,1,2,255,8,2,10,1,14,1,2,1,14,1,16, - 4,10,1,16,255,2,2,8,1,22,1,114,213,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,6,0,0,0,67,0,0,0,115,146,0,0,0,124,0, - 160,0,100,1,161,1,125,1,124,0,160,0,100,2,161,1, - 125,2,124,1,100,3,107,9,114,82,124,2,100,3,107,9, - 114,78,124,1,124,2,106,1,107,3,114,78,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,141,3,1,0,124,1,83,0, - 124,2,100,3,107,9,114,96,124,2,106,1,83,0,116,2, - 106,3,100,9,116,4,100,7,100,8,141,3,1,0,124,0, - 100,10,25,0,125,1,100,11,124,0,107,7,114,142,124,1, - 160,5,100,12,161,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,144,0,0,0, - 114,104,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,233,3,0,0,0,41,1,90,10,115,116,97,99,107,108, - 101,118,101,108,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,140,0,0,0,114,127,0,0,0,114,22, - 0,0,0,41,6,114,34,0,0,0,114,129,0,0,0,114, - 191,0,0,0,114,192,0,0,0,114,193,0,0,0,114,128, - 0,0,0,41,3,218,7,103,108,111,98,97,108,115,114,185, - 0,0,0,114,94,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,32,4,0,0,115,38, - 0,0,0,0,7,10,1,10,1,8,1,18,1,22,2,2, - 0,2,254,6,3,4,1,8,1,6,2,6,2,2,0,2, - 254,6,3,8,1,8,1,14,1,114,219,0,0,0,114,10, - 0,0,0,99,5,0,0,0,0,0,0,0,0,0,0,0, - 9,0,0,0,5,0,0,0,67,0,0,0,115,180,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,150,124,4,100,1,107, - 2,114,84,116,0,124,0,160,2,100,3,161,1,100,1,25, - 0,131,1,83,0,124,0,115,92,124,5,83,0,116,3,124, - 0,131,1,116,3,124,0,160,2,100,3,161,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,26,116,7,124,5,100,4,131,2,114, - 172,116,8,124,5,124,3,116,0,131,3,83,0,124,5,83, - 0,100,2,83,0,41,5,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,22,0,0,0,78,114,127,0,0,0,114,140, - 0,0,0,41,9,114,208,0,0,0,114,219,0,0,0,218, - 9,112,97,114,116,105,116,105,111,110,114,184,0,0,0,114, - 15,0,0,0,114,91,0,0,0,114,1,0,0,0,114,4, - 0,0,0,114,213,0,0,0,41,9,114,17,0,0,0,114, - 218,0,0,0,218,6,108,111,99,97,108,115,114,214,0,0, - 0,114,186,0,0,0,114,95,0,0,0,90,8,103,108,111, - 98,97,108,115,95,114,185,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,59,4, - 0,0,115,30,0,0,0,0,11,8,1,10,2,16,1,8, - 1,12,1,4,3,8,1,18,1,4,1,4,4,26,3,32, - 1,10,1,12,2,114,222,0,0,0,99,1,0,0,0,0, - 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,160,1,124,0,161,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,159, - 0,0,0,114,166,0,0,0,114,78,0,0,0,114,158,0, - 0,0,41,2,114,17,0,0,0,114,94,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,96,4,0,0,115,8,0,0,0,0,1,10,1,8,1, - 12,1,114,223,0,0,0,99,2,0,0,0,0,0,0,0, - 0,0,0,0,10,0,0,0,5,0,0,0,67,0,0,0, - 115,166,0,0,0,124,1,97,0,124,0,97,1,116,2,116, - 1,131,1,125,2,116,1,106,3,160,4,161,0,68,0,93, - 72,92,2,125,3,125,4,116,5,124,4,124,2,131,2,114, - 26,124,3,116,1,106,6,107,6,114,60,116,7,125,5,110, - 18,116,0,160,8,124,3,161,1,114,26,116,9,125,5,110, - 2,113,26,116,10,124,4,124,5,131,2,125,6,116,11,124, - 6,124,4,131,2,1,0,113,26,116,1,106,3,116,12,25, - 0,125,7,100,1,68,0,93,46,125,8,124,8,116,1,106, - 3,107,7,114,138,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,114,100,2,83,0,41,3,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,41,3,114,23,0,0,0, - 114,191,0,0,0,114,63,0,0,0,78,41,15,114,56,0, - 0,0,114,15,0,0,0,114,14,0,0,0,114,91,0,0, - 0,218,5,105,116,101,109,115,114,195,0,0,0,114,77,0, - 0,0,114,159,0,0,0,114,87,0,0,0,114,173,0,0, - 0,114,141,0,0,0,114,147,0,0,0,114,1,0,0,0, - 114,223,0,0,0,114,5,0,0,0,41,10,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,17,0,0,0,114,95,0,0,0,114,108,0,0, - 0,114,94,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,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0, - 218,6,95,115,101,116,117,112,103,4,0,0,115,36,0,0, - 0,0,9,4,1,4,3,8,1,18,1,10,1,10,1,6, - 1,10,1,6,2,2,1,10,1,12,3,10,1,8,1,10, - 1,10,2,10,1,114,227,0,0,0,99,2,0,0,0,0, - 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,124,0,124,1,131,2, - 1,0,116,1,106,2,160,3,116,4,161,1,1,0,116,1, - 106,2,160,3,116,5,161,1,1,0,100,1,83,0,41,2, - 122,48,73,110,115,116,97,108,108,32,105,109,112,111,114,116, - 101,114,115,32,102,111,114,32,98,117,105,108,116,105,110,32, - 97,110,100,32,102,114,111,122,101,110,32,109,111,100,117,108, - 101,115,78,41,6,114,227,0,0,0,114,15,0,0,0,114, - 190,0,0,0,114,118,0,0,0,114,159,0,0,0,114,173, - 0,0,0,41,2,114,225,0,0,0,114,226,0,0,0,114, - 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8, - 95,105,110,115,116,97,108,108,138,4,0,0,115,6,0,0, - 0,0,2,10,2,12,1,114,228,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,67,0,0,0,115,32,0,0,0,100,1,100,2,108,0, - 125,0,124,0,97,1,124,0,160,2,116,3,106,4,116,5, - 25,0,161,1,1,0,100,2,83,0,41,3,122,57,73,110, + 114,178,0,0,0,93,3,0,0,115,6,0,0,0,8,2, + 4,2,8,4,114,178,0,0,0,99,3,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0, + 0,0,115,64,0,0,0,124,1,160,0,100,1,124,2,100, + 2,24,0,161,2,125,3,116,1,124,3,131,1,124,2,107, + 0,114,36,116,2,100,3,131,1,130,1,124,3,100,4,25, + 0,125,4,124,0,114,60,100,5,160,3,124,4,124,0,161, + 2,83,0,124,4,83,0,41,6,122,50,82,101,115,111,108, + 118,101,32,97,32,114,101,108,97,116,105,118,101,32,109,111, + 100,117,108,101,32,110,97,109,101,32,116,111,32,97,110,32, + 97,98,115,111,108,117,116,101,32,111,110,101,46,114,127,0, + 0,0,114,37,0,0,0,122,50,97,116,116,101,109,112,116, + 101,100,32,114,101,108,97,116,105,118,101,32,105,109,112,111, + 114,116,32,98,101,121,111,110,100,32,116,111,112,45,108,101, + 118,101,108,32,112,97,99,107,97,103,101,114,22,0,0,0, + 250,5,123,125,46,123,125,41,4,218,6,114,115,112,108,105, + 116,218,3,108,101,110,114,78,0,0,0,114,44,0,0,0, + 41,5,114,17,0,0,0,218,7,112,97,99,107,97,103,101, + 218,5,108,101,118,101,108,90,4,98,105,116,115,90,4,98, + 97,115,101,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,13,95,114,101,115,111,108,118,101,95,110,97,109, + 101,106,3,0,0,115,10,0,0,0,0,2,16,1,12,1, + 8,1,8,1,114,187,0,0,0,99,3,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, + 0,0,115,34,0,0,0,124,0,160,0,124,1,124,2,161, + 2,125,3,124,3,100,0,107,8,114,24,100,0,83,0,116, + 1,124,1,124,3,131,2,83,0,114,13,0,0,0,41,2, + 114,167,0,0,0,114,90,0,0,0,41,4,218,6,102,105, + 110,100,101,114,114,17,0,0,0,114,164,0,0,0,114,108, + 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0, + 0,0,218,17,95,102,105,110,100,95,115,112,101,99,95,108, + 101,103,97,99,121,115,3,0,0,115,8,0,0,0,0,3, + 12,1,8,1,4,1,114,189,0,0,0,99,3,0,0,0, + 0,0,0,0,0,0,0,0,10,0,0,0,10,0,0,0, + 67,0,0,0,115,36,1,0,0,116,0,106,1,125,3,124, + 3,100,1,107,8,114,22,116,2,100,2,131,1,130,1,124, + 3,115,38,116,3,160,4,100,3,116,5,161,2,1,0,124, + 0,116,0,106,6,107,6,125,4,124,3,68,0,93,234,125, + 5,116,7,131,0,143,96,1,0,122,10,124,5,106,8,125, + 6,87,0,110,56,4,0,116,9,107,10,114,130,1,0,1, + 0,1,0,116,10,124,5,124,0,124,1,131,3,125,7,124, + 7,100,1,107,8,114,126,89,0,87,0,100,1,4,0,4, + 0,131,3,1,0,113,52,89,0,110,14,48,0,124,6,124, + 0,124,1,124,2,131,3,125,7,87,0,100,1,4,0,4, + 0,131,3,1,0,110,16,49,0,115,164,48,0,1,0,1, + 0,1,0,89,0,1,0,124,7,100,1,107,9,114,52,124, + 4,144,1,115,22,124,0,116,0,106,6,107,6,144,1,114, + 22,116,0,106,6,124,0,25,0,125,8,122,10,124,8,106, + 11,125,9,87,0,110,28,4,0,116,9,107,10,114,248,1, + 0,1,0,1,0,124,7,6,0,89,0,2,0,1,0,83, + 0,48,0,124,9,100,1,107,8,144,1,114,12,124,7,2, + 0,1,0,83,0,124,9,2,0,1,0,83,0,113,52,124, + 7,2,0,1,0,83,0,113,52,100,1,83,0,41,4,122, + 21,70,105,110,100,32,97,32,109,111,100,117,108,101,39,115, + 32,115,112,101,99,46,78,122,53,115,121,115,46,109,101,116, + 97,95,112,97,116,104,32,105,115,32,78,111,110,101,44,32, + 80,121,116,104,111,110,32,105,115,32,108,105,107,101,108,121, + 32,115,104,117,116,116,105,110,103,32,100,111,119,110,122,22, + 115,121,115,46,109,101,116,97,95,112,97,116,104,32,105,115, + 32,101,109,112,116,121,41,12,114,15,0,0,0,218,9,109, + 101,116,97,95,112,97,116,104,114,78,0,0,0,218,9,95, + 119,97,114,110,105,110,103,115,218,4,119,97,114,110,218,13, + 73,109,112,111,114,116,87,97,114,110,105,110,103,114,91,0, + 0,0,114,178,0,0,0,114,166,0,0,0,114,105,0,0, + 0,114,189,0,0,0,114,104,0,0,0,41,10,114,17,0, + 0,0,114,164,0,0,0,114,165,0,0,0,114,190,0,0, + 0,90,9,105,115,95,114,101,108,111,97,100,114,188,0,0, + 0,114,166,0,0,0,114,94,0,0,0,114,95,0,0,0, + 114,104,0,0,0,114,10,0,0,0,114,10,0,0,0,114, + 11,0,0,0,218,10,95,102,105,110,100,95,115,112,101,99, + 124,3,0,0,115,54,0,0,0,0,2,6,1,8,2,8, + 3,4,1,12,5,10,1,8,1,8,1,2,1,10,1,14, + 1,12,1,8,1,22,2,42,1,8,2,18,1,10,1,2, + 1,10,1,14,4,14,2,10,1,8,2,10,2,10,2,114, + 194,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,5,0,0,0,67,0,0,0,115,108,0, + 0,0,116,0,124,0,116,1,131,2,115,28,116,2,100,1, + 160,3,116,4,124,0,131,1,161,1,131,1,130,1,124,2, + 100,2,107,0,114,44,116,5,100,3,131,1,130,1,124,2, + 100,2,107,4,114,84,116,0,124,1,116,1,131,2,115,72, + 116,2,100,4,131,1,130,1,110,12,124,1,115,84,116,6, + 100,5,131,1,130,1,124,0,115,104,124,2,100,2,107,2, + 114,104,116,5,100,6,131,1,130,1,100,7,83,0,41,8, + 122,28,86,101,114,105,102,121,32,97,114,103,117,109,101,110, + 116,115,32,97,114,101,32,34,115,97,110,101,34,46,122,31, + 109,111,100,117,108,101,32,110,97,109,101,32,109,117,115,116, + 32,98,101,32,115,116,114,44,32,110,111,116,32,123,125,114, + 22,0,0,0,122,18,108,101,118,101,108,32,109,117,115,116, + 32,98,101,32,62,61,32,48,122,31,95,95,112,97,99,107, + 97,103,101,95,95,32,110,111,116,32,115,101,116,32,116,111, + 32,97,32,115,116,114,105,110,103,122,54,97,116,116,101,109, + 112,116,101,100,32,114,101,108,97,116,105,118,101,32,105,109, + 112,111,114,116,32,119,105,116,104,32,110,111,32,107,110,111, + 119,110,32,112,97,114,101,110,116,32,112,97,99,107,97,103, + 101,122,17,69,109,112,116,121,32,109,111,100,117,108,101,32, + 110,97,109,101,78,41,7,218,10,105,115,105,110,115,116,97, + 110,99,101,218,3,115,116,114,218,9,84,121,112,101,69,114, + 114,111,114,114,44,0,0,0,114,14,0,0,0,218,10,86, + 97,108,117,101,69,114,114,111,114,114,78,0,0,0,169,3, + 114,17,0,0,0,114,185,0,0,0,114,186,0,0,0,114, + 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,13, + 95,115,97,110,105,116,121,95,99,104,101,99,107,171,3,0, + 0,115,22,0,0,0,0,2,10,1,18,1,8,1,8,1, + 8,1,10,1,10,1,4,1,8,2,12,1,114,200,0,0, + 0,122,16,78,111,32,109,111,100,117,108,101,32,110,97,109, + 101,100,32,122,4,123,33,114,125,99,2,0,0,0,0,0, + 0,0,0,0,0,0,8,0,0,0,8,0,0,0,67,0, + 0,0,115,220,0,0,0,100,0,125,2,124,0,160,0,100, + 1,161,1,100,2,25,0,125,3,124,3,114,134,124,3,116, + 1,106,2,107,7,114,42,116,3,124,1,124,3,131,2,1, + 0,124,0,116,1,106,2,107,6,114,62,116,1,106,2,124, + 0,25,0,83,0,116,1,106,2,124,3,25,0,125,4,122, + 10,124,4,106,4,125,2,87,0,110,50,4,0,116,5,107, + 10,114,132,1,0,1,0,1,0,116,6,100,3,23,0,160, + 7,124,0,124,3,161,2,125,5,116,8,124,5,124,0,100, + 4,141,2,100,0,130,2,89,0,110,2,48,0,116,9,124, + 0,124,2,131,2,125,6,124,6,100,0,107,8,114,172,116, + 8,116,6,160,7,124,0,161,1,124,0,100,4,141,2,130, + 1,110,8,116,10,124,6,131,1,125,7,124,3,114,216,116, + 1,106,2,124,3,25,0,125,4,116,11,124,4,124,0,160, + 0,100,1,161,1,100,5,25,0,124,7,131,3,1,0,124, + 7,83,0,41,6,78,114,127,0,0,0,114,22,0,0,0, + 122,23,59,32,123,33,114,125,32,105,115,32,110,111,116,32, + 97,32,112,97,99,107,97,103,101,114,16,0,0,0,233,2, + 0,0,0,41,12,114,128,0,0,0,114,15,0,0,0,114, + 91,0,0,0,114,66,0,0,0,114,140,0,0,0,114,105, + 0,0,0,218,8,95,69,82,82,95,77,83,71,114,44,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,194,0,0,0,114,158,0,0, + 0,114,5,0,0,0,41,8,114,17,0,0,0,218,7,105, + 109,112,111,114,116,95,114,164,0,0,0,114,129,0,0,0, + 90,13,112,97,114,101,110,116,95,109,111,100,117,108,101,114, + 156,0,0,0,114,94,0,0,0,114,95,0,0,0,114,10, + 0,0,0,114,10,0,0,0,114,11,0,0,0,218,23,95, + 102,105,110,100,95,97,110,100,95,108,111,97,100,95,117,110, + 108,111,99,107,101,100,190,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,20,1,10,1,8,1,20, + 2,8,1,4,2,10,1,22,1,114,205,0,0,0,99,2, + 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,8, + 0,0,0,67,0,0,0,115,128,0,0,0,116,0,124,0, + 131,1,143,62,1,0,116,1,106,2,160,3,124,0,116,4, + 161,2,125,2,124,2,116,4,107,8,114,56,116,5,124,0, + 124,1,131,2,87,0,2,0,100,1,4,0,4,0,131,3, + 1,0,83,0,87,0,100,1,4,0,4,0,131,3,1,0, + 110,16,49,0,115,76,48,0,1,0,1,0,1,0,89,0, + 1,0,124,2,100,1,107,8,114,116,100,2,160,6,124,0, + 161,1,125,3,116,7,124,3,124,0,100,3,141,2,130,1, + 116,8,124,0,131,1,1,0,124,2,83,0,41,4,122,25, + 70,105,110,100,32,97,110,100,32,108,111,97,100,32,116,104, + 101,32,109,111,100,117,108,101,46,78,122,40,105,109,112,111, + 114,116,32,111,102,32,123,125,32,104,97,108,116,101,100,59, + 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100, + 117,108,101,115,114,16,0,0,0,41,9,114,49,0,0,0, + 114,15,0,0,0,114,91,0,0,0,114,34,0,0,0,218, + 14,95,78,69,69,68,83,95,76,79,65,68,73,78,71,114, + 205,0,0,0,114,44,0,0,0,114,203,0,0,0,114,64, + 0,0,0,41,4,114,17,0,0,0,114,204,0,0,0,114, + 95,0,0,0,114,74,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,220,3,0,0,115,22,0,0, + 0,0,2,10,1,14,1,8,1,54,2,8,1,4,1,2, + 255,4,2,12,2,8,1,114,207,0,0,0,114,22,0,0, + 0,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,4,0,0,0,67,0,0,0,115,42,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,124,0,124,1,124,2,131,3,125,0,116, + 2,124,0,116,3,131,2,83,0,41,2,97,50,1,0,0, + 73,109,112,111,114,116,32,97,110,100,32,114,101,116,117,114, + 110,32,116,104,101,32,109,111,100,117,108,101,32,98,97,115, + 101,100,32,111,110,32,105,116,115,32,110,97,109,101,44,32, + 116,104,101,32,112,97,99,107,97,103,101,32,116,104,101,32, + 99,97,108,108,32,105,115,10,32,32,32,32,98,101,105,110, + 103,32,109,97,100,101,32,102,114,111,109,44,32,97,110,100, + 32,116,104,101,32,108,101,118,101,108,32,97,100,106,117,115, + 116,109,101,110,116,46,10,10,32,32,32,32,84,104,105,115, + 32,102,117,110,99,116,105,111,110,32,114,101,112,114,101,115, + 101,110,116,115,32,116,104,101,32,103,114,101,97,116,101,115, + 116,32,99,111,109,109,111,110,32,100,101,110,111,109,105,110, + 97,116,111,114,32,111,102,32,102,117,110,99,116,105,111,110, + 97,108,105,116,121,10,32,32,32,32,98,101,116,119,101,101, + 110,32,105,109,112,111,114,116,95,109,111,100,117,108,101,32, + 97,110,100,32,95,95,105,109,112,111,114,116,95,95,46,32, + 84,104,105,115,32,105,110,99,108,117,100,101,115,32,115,101, + 116,116,105,110,103,32,95,95,112,97,99,107,97,103,101,95, + 95,32,105,102,10,32,32,32,32,116,104,101,32,108,111,97, + 100,101,114,32,100,105,100,32,110,111,116,46,10,10,32,32, + 32,32,114,22,0,0,0,41,4,114,200,0,0,0,114,187, + 0,0,0,114,207,0,0,0,218,11,95,103,99,100,95,105, + 109,112,111,114,116,114,199,0,0,0,114,10,0,0,0,114, + 10,0,0,0,114,11,0,0,0,114,208,0,0,0,236,3, + 0,0,115,8,0,0,0,0,9,12,1,8,1,12,1,114, + 208,0,0,0,169,1,218,9,114,101,99,117,114,115,105,118, + 101,99,3,0,0,0,0,0,0,0,1,0,0,0,8,0, + 0,0,11,0,0,0,67,0,0,0,115,234,0,0,0,124, + 1,68,0,93,224,125,4,116,0,124,4,116,1,131,2,115, + 66,124,3,114,34,124,0,106,2,100,1,23,0,125,5,110, + 4,100,2,125,5,116,3,100,3,124,5,155,0,100,4,116, + 4,124,4,131,1,106,2,155,0,157,4,131,1,130,1,113, + 4,124,4,100,5,107,2,114,108,124,3,115,228,116,5,124, + 0,100,6,131,2,114,228,116,6,124,0,124,0,106,7,124, + 2,100,7,100,8,141,4,1,0,113,4,116,5,124,0,124, + 4,131,2,115,4,100,9,160,8,124,0,106,2,124,4,161, + 2,125,6,122,14,116,9,124,2,124,6,131,2,1,0,87, + 0,113,4,4,0,116,10,107,10,114,226,1,0,125,7,1, + 0,122,54,124,7,106,11,124,6,107,2,114,204,116,12,106, + 13,160,14,124,6,116,15,161,2,100,10,107,9,114,204,87, + 0,89,0,100,10,125,7,126,7,113,4,130,0,87,0,89, + 0,100,10,125,7,126,7,113,4,100,10,125,7,126,7,48, + 0,48,0,113,4,124,0,83,0,41,11,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,122,8,46,95,95, + 97,108,108,95,95,122,13,96,96,102,114,111,109,32,108,105, + 115,116,39,39,122,8,73,116,101,109,32,105,110,32,122,18, + 32,109,117,115,116,32,98,101,32,115,116,114,44,32,110,111, + 116,32,250,1,42,218,7,95,95,97,108,108,95,95,84,114, + 209,0,0,0,114,182,0,0,0,78,41,16,114,195,0,0, + 0,114,196,0,0,0,114,1,0,0,0,114,197,0,0,0, + 114,14,0,0,0,114,4,0,0,0,218,16,95,104,97,110, + 100,108,101,95,102,114,111,109,108,105,115,116,114,212,0,0, + 0,114,44,0,0,0,114,66,0,0,0,114,203,0,0,0, + 114,17,0,0,0,114,15,0,0,0,114,91,0,0,0,114, + 34,0,0,0,114,206,0,0,0,41,8,114,95,0,0,0, + 218,8,102,114,111,109,108,105,115,116,114,204,0,0,0,114, + 210,0,0,0,218,1,120,90,5,119,104,101,114,101,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,114,213,0, + 0,0,251,3,0,0,115,44,0,0,0,0,10,8,1,10, + 1,4,1,12,2,4,1,28,2,8,1,14,1,10,1,2, + 255,8,2,10,1,14,1,2,1,14,1,16,4,10,1,16, + 255,2,2,12,1,26,1,114,213,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,6,0,0, + 0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,1, + 161,1,125,1,124,0,160,0,100,2,161,1,125,2,124,1, + 100,3,107,9,114,82,124,2,100,3,107,9,114,78,124,1, + 124,2,106,1,107,3,114,78,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,141,3,1,0,124,1,83,0,124,2,100,3, + 107,9,114,96,124,2,106,1,83,0,116,2,106,3,100,9, + 116,4,100,7,100,8,141,3,1,0,124,0,100,10,25,0, + 125,1,100,11,124,0,107,7,114,142,124,1,160,5,100,12, + 161,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,144,0,0,0,114,104,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,233,3,0, + 0,0,41,1,90,10,115,116,97,99,107,108,101,118,101,108, + 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,140,0,0,0,114,127,0,0,0,114,22,0,0,0,41, + 6,114,34,0,0,0,114,129,0,0,0,114,191,0,0,0, + 114,192,0,0,0,114,193,0,0,0,114,128,0,0,0,41, + 3,218,7,103,108,111,98,97,108,115,114,185,0,0,0,114, + 94,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,32,4,0,0,115,38,0,0,0,0, + 7,10,1,10,1,8,1,18,1,22,2,2,0,2,254,6, + 3,4,1,8,1,6,2,6,2,2,0,2,254,6,3,8, + 1,8,1,14,1,114,219,0,0,0,114,10,0,0,0,99, + 5,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, + 5,0,0,0,67,0,0,0,115,180,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,150,124,4,100,1,107,2,114,84,116, + 0,124,0,160,2,100,3,161,1,100,1,25,0,131,1,83, + 0,124,0,115,92,124,5,83,0,116,3,124,0,131,1,116, + 3,124,0,160,2,100,3,161,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,26,116,7,124,5,100,4,131,2,114,172,116,8,124, + 5,124,3,116,0,131,3,83,0,124,5,83,0,100,2,83, + 0,41,5,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, + 22,0,0,0,78,114,127,0,0,0,114,140,0,0,0,41, + 9,114,208,0,0,0,114,219,0,0,0,218,9,112,97,114, + 116,105,116,105,111,110,114,184,0,0,0,114,15,0,0,0, + 114,91,0,0,0,114,1,0,0,0,114,4,0,0,0,114, + 213,0,0,0,41,9,114,17,0,0,0,114,218,0,0,0, + 218,6,108,111,99,97,108,115,114,214,0,0,0,114,186,0, + 0,0,114,95,0,0,0,90,8,103,108,111,98,97,108,115, + 95,114,185,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,59,4,0,0,115,30, + 0,0,0,0,11,8,1,10,2,16,1,8,1,12,1,4, + 3,8,1,18,1,4,1,4,4,26,3,32,1,10,1,12, + 2,114,222,0,0,0,99,1,0,0,0,0,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,160,1,124,0,161,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,159,0,0,0,114, + 166,0,0,0,114,78,0,0,0,114,158,0,0,0,41,2, + 114,17,0,0,0,114,94,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,96,4,0, + 0,115,8,0,0,0,0,1,10,1,8,1,12,1,114,223, + 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, + 10,0,0,0,5,0,0,0,67,0,0,0,115,166,0,0, + 0,124,1,97,0,124,0,97,1,116,2,116,1,131,1,125, + 2,116,1,106,3,160,4,161,0,68,0,93,72,92,2,125, + 3,125,4,116,5,124,4,124,2,131,2,114,26,124,3,116, + 1,106,6,107,6,114,60,116,7,125,5,110,18,116,0,160, + 8,124,3,161,1,114,26,116,9,125,5,110,2,113,26,116, + 10,124,4,124,5,131,2,125,6,116,11,124,6,124,4,131, + 2,1,0,113,26,116,1,106,3,116,12,25,0,125,7,100, + 1,68,0,93,46,125,8,124,8,116,1,106,3,107,7,114, + 138,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,114,100,2,83,0,41,3,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,41,3,114,23,0,0,0,114,191,0,0, + 0,114,63,0,0,0,78,41,15,114,56,0,0,0,114,15, + 0,0,0,114,14,0,0,0,114,91,0,0,0,218,5,105, + 116,101,109,115,114,195,0,0,0,114,77,0,0,0,114,159, + 0,0,0,114,87,0,0,0,114,173,0,0,0,114,141,0, + 0,0,114,147,0,0,0,114,1,0,0,0,114,223,0,0, + 0,114,5,0,0,0,41,10,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,17, + 0,0,0,114,95,0,0,0,114,108,0,0,0,114,94,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,114,10,0, + 0,0,114,10,0,0,0,114,11,0,0,0,218,6,95,115, + 101,116,117,112,103,4,0,0,115,36,0,0,0,0,9,4, + 1,4,3,8,1,18,1,10,1,10,1,6,1,10,1,6, + 2,2,1,10,1,12,3,10,1,8,1,10,1,10,2,10, + 1,114,227,0,0,0,99,2,0,0,0,0,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,124,0,124,1,131,2,1,0,116,1, + 106,2,160,3,116,4,161,1,1,0,116,1,106,2,160,3, + 116,5,161,1,1,0,100,1,83,0,41,2,122,48,73,110, 115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,32, - 116,104,97,116,32,114,101,113,117,105,114,101,32,101,120,116, - 101,114,110,97,108,32,102,105,108,101,115,121,115,116,101,109, - 32,97,99,99,101,115,115,114,22,0,0,0,78,41,6,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,125,0,0,0, - 114,228,0,0,0,114,15,0,0,0,114,91,0,0,0,114, - 1,0,0,0,41,1,114,229,0,0,0,114,10,0,0,0, - 114,10,0,0,0,114,11,0,0,0,218,27,95,105,110,115, - 116,97,108,108,95,101,120,116,101,114,110,97,108,95,105,109, - 112,111,114,116,101,114,115,146,4,0,0,115,6,0,0,0, - 0,3,8,1,4,1,114,230,0,0,0,41,2,78,78,41, - 1,78,41,2,78,114,22,0,0,0,41,4,78,78,114,10, - 0,0,0,114,22,0,0,0,41,50,114,3,0,0,0,114, - 125,0,0,0,114,12,0,0,0,114,18,0,0,0,114,59, - 0,0,0,114,33,0,0,0,114,42,0,0,0,114,19,0, - 0,0,114,20,0,0,0,114,48,0,0,0,114,49,0,0, - 0,114,52,0,0,0,114,64,0,0,0,114,66,0,0,0, - 114,75,0,0,0,114,85,0,0,0,114,89,0,0,0,114, - 96,0,0,0,114,110,0,0,0,114,111,0,0,0,114,90, - 0,0,0,114,141,0,0,0,114,147,0,0,0,114,151,0, - 0,0,114,106,0,0,0,114,92,0,0,0,114,157,0,0, - 0,114,158,0,0,0,114,93,0,0,0,114,159,0,0,0, - 114,173,0,0,0,114,178,0,0,0,114,187,0,0,0,114, - 189,0,0,0,114,194,0,0,0,114,200,0,0,0,90,15, - 95,69,82,82,95,77,83,71,95,80,82,69,70,73,88,114, - 202,0,0,0,114,205,0,0,0,218,6,111,98,106,101,99, - 116,114,206,0,0,0,114,207,0,0,0,114,208,0,0,0, - 114,213,0,0,0,114,219,0,0,0,114,222,0,0,0,114, - 223,0,0,0,114,227,0,0,0,114,228,0,0,0,114,230, - 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,1,0,0,0,115,94,0,0,0,4,24,4,2,8,8, - 8,8,4,2,4,3,16,4,14,68,14,21,14,16,8,37, - 8,17,8,11,14,8,8,11,8,12,8,16,8,36,14,101, - 16,26,10,45,14,72,8,17,8,17,8,30,8,37,8,42, - 8,15,14,75,14,79,14,13,8,9,8,9,10,47,8,16, - 4,1,8,2,8,27,6,3,8,16,10,15,14,37,8,27, - 10,37,8,7,8,35,8,8, + 102,111,114,32,98,117,105,108,116,105,110,32,97,110,100,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,115,78,41, + 6,114,227,0,0,0,114,15,0,0,0,114,190,0,0,0, + 114,118,0,0,0,114,159,0,0,0,114,173,0,0,0,41, + 2,114,225,0,0,0,114,226,0,0,0,114,10,0,0,0, + 114,10,0,0,0,114,11,0,0,0,218,8,95,105,110,115, + 116,97,108,108,138,4,0,0,115,6,0,0,0,0,2,10, + 2,12,1,114,228,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0, + 0,115,32,0,0,0,100,1,100,2,108,0,125,0,124,0, + 97,1,124,0,160,2,116,3,106,4,116,5,25,0,161,1, + 1,0,100,2,83,0,41,3,122,57,73,110,115,116,97,108, + 108,32,105,109,112,111,114,116,101,114,115,32,116,104,97,116, + 32,114,101,113,117,105,114,101,32,101,120,116,101,114,110,97, + 108,32,102,105,108,101,115,121,115,116,101,109,32,97,99,99, + 101,115,115,114,22,0,0,0,78,41,6,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,125,0,0,0,114,228,0,0, + 0,114,15,0,0,0,114,91,0,0,0,114,1,0,0,0, + 41,1,114,229,0,0,0,114,10,0,0,0,114,10,0,0, + 0,114,11,0,0,0,218,27,95,105,110,115,116,97,108,108, + 95,101,120,116,101,114,110,97,108,95,105,109,112,111,114,116, + 101,114,115,146,4,0,0,115,6,0,0,0,0,3,8,1, + 4,1,114,230,0,0,0,41,2,78,78,41,1,78,41,2, + 78,114,22,0,0,0,41,4,78,78,114,10,0,0,0,114, + 22,0,0,0,41,50,114,3,0,0,0,114,125,0,0,0, + 114,12,0,0,0,114,18,0,0,0,114,58,0,0,0,114, + 33,0,0,0,114,42,0,0,0,114,19,0,0,0,114,20, + 0,0,0,114,48,0,0,0,114,49,0,0,0,114,52,0, + 0,0,114,64,0,0,0,114,66,0,0,0,114,75,0,0, + 0,114,85,0,0,0,114,89,0,0,0,114,96,0,0,0, + 114,110,0,0,0,114,111,0,0,0,114,90,0,0,0,114, + 141,0,0,0,114,147,0,0,0,114,151,0,0,0,114,106, + 0,0,0,114,92,0,0,0,114,157,0,0,0,114,158,0, + 0,0,114,93,0,0,0,114,159,0,0,0,114,173,0,0, + 0,114,178,0,0,0,114,187,0,0,0,114,189,0,0,0, + 114,194,0,0,0,114,200,0,0,0,90,15,95,69,82,82, + 95,77,83,71,95,80,82,69,70,73,88,114,202,0,0,0, + 114,205,0,0,0,218,6,111,98,106,101,99,116,114,206,0, + 0,0,114,207,0,0,0,114,208,0,0,0,114,213,0,0, + 0,114,219,0,0,0,114,222,0,0,0,114,223,0,0,0, + 114,227,0,0,0,114,228,0,0,0,114,230,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,1,0,0, + 0,115,94,0,0,0,4,24,4,2,8,8,8,8,4,2, + 4,3,16,4,14,68,14,21,14,16,8,37,8,17,8,11, + 14,8,8,11,8,12,8,16,8,36,14,101,16,26,10,45, + 14,72,8,17,8,17,8,30,8,37,8,42,8,15,14,75, + 14,79,14,13,8,9,8,9,10,47,8,16,4,1,8,2, + 8,27,6,3,8,16,10,15,14,37,8,27,10,37,8,7, + 8,35,8,8, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 054fc846845..8c1fa3cac8f 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -191,7 +191,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, 8,0,0,0,67,0,0,0,115,50,0,0,0,122,12,116, 0,124,0,131,1,125,2,87,0,110,22,4,0,116,1,107, - 10,114,34,1,0,1,0,1,0,89,0,100,1,83,0,88, + 10,114,34,1,0,1,0,1,0,89,0,100,1,83,0,48, 0,124,2,106,2,100,2,64,0,124,1,107,2,83,0,41, 3,122,49,84,101,115,116,32,119,104,101,116,104,101,114,32, 116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,32, @@ -242,2491 +242,2496 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,2, 0,0,0,0,6,114,58,0,0,0,233,182,1,0,0,99, 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 11,0,0,0,67,0,0,0,115,162,0,0,0,100,1,160, + 11,0,0,0,67,0,0,0,115,182,0,0,0,100,1,160, 0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,160, 3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106, - 6,66,0,124,2,100,2,64,0,161,3,125,4,122,50,116, - 7,160,8,124,4,100,3,161,2,143,16,125,5,124,5,160, - 9,124,1,161,1,1,0,87,0,53,0,81,0,82,0,88, - 0,116,2,160,10,124,3,124,0,161,2,1,0,87,0,110, - 58,4,0,116,11,107,10,114,156,1,0,1,0,1,0,122, - 14,116,2,160,12,124,3,161,1,1,0,87,0,110,20,4, - 0,116,11,107,10,114,148,1,0,1,0,1,0,89,0,110, - 2,88,0,130,0,89,0,110,2,88,0,100,4,83,0,41, - 5,122,162,66,101,115,116,45,101,102,102,111,114,116,32,102, - 117,110,99,116,105,111,110,32,116,111,32,119,114,105,116,101, - 32,100,97,116,97,32,116,111,32,97,32,112,97,116,104,32, - 97,116,111,109,105,99,97,108,108,121,46,10,32,32,32,32, - 66,101,32,112,114,101,112,97,114,101,100,32,116,111,32,104, - 97,110,100,108,101,32,97,32,70,105,108,101,69,120,105,115, - 116,115,69,114,114,111,114,32,105,102,32,99,111,110,99,117, - 114,114,101,110,116,32,119,114,105,116,105,110,103,32,111,102, - 32,116,104,101,10,32,32,32,32,116,101,109,112,111,114,97, - 114,121,32,102,105,108,101,32,105,115,32,97,116,116,101,109, - 112,116,101,100,46,250,5,123,125,46,123,125,114,59,0,0, - 0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,116, - 218,2,105,100,114,2,0,0,0,90,4,111,112,101,110,90, - 6,79,95,69,88,67,76,90,7,79,95,67,82,69,65,84, - 90,8,79,95,87,82,79,78,76,89,218,3,95,105,111,218, - 6,70,105,108,101,73,79,218,5,119,114,105,116,101,218,7, - 114,101,112,108,97,99,101,114,49,0,0,0,90,6,117,110, - 108,105,110,107,41,6,114,43,0,0,0,114,25,0,0,0, - 114,51,0,0,0,90,8,112,97,116,104,95,116,109,112,90, - 2,102,100,218,4,102,105,108,101,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,13,95,119,114,105,116,101, - 95,97,116,111,109,105,99,120,0,0,0,115,30,0,0,0, - 0,5,16,1,6,1,16,0,6,255,4,2,2,3,14,1, - 20,1,16,1,14,1,2,1,14,1,14,1,6,1,114,68, - 0,0,0,105,92,13,0,0,114,27,0,0,0,114,16,0, - 0,0,115,2,0,0,0,13,10,90,11,95,95,112,121,99, - 97,99,104,101,95,95,122,4,111,112,116,45,122,3,46,112, - 121,122,4,46,112,121,99,78,41,1,218,12,111,112,116,105, - 109,105,122,97,116,105,111,110,99,2,0,0,0,0,0,0, - 0,1,0,0,0,12,0,0,0,5,0,0,0,67,0,0, - 0,115,88,1,0,0,124,1,100,1,107,9,114,52,116,0, - 160,1,100,2,116,2,161,2,1,0,124,2,100,1,107,9, - 114,40,100,3,125,3,116,3,124,3,131,1,130,1,124,1, - 114,48,100,4,110,2,100,5,125,2,116,4,160,5,124,0, - 161,1,125,0,116,6,124,0,131,1,92,2,125,4,125,5, - 124,5,160,7,100,6,161,1,92,3,125,6,125,7,125,8, - 116,8,106,9,106,10,125,9,124,9,100,1,107,8,114,114, - 116,11,100,7,131,1,130,1,100,4,160,12,124,6,114,126, - 124,6,110,2,124,8,124,7,124,9,103,3,161,1,125,10, - 124,2,100,1,107,8,114,172,116,8,106,13,106,14,100,8, - 107,2,114,164,100,4,125,2,110,8,116,8,106,13,106,14, - 125,2,116,15,124,2,131,1,125,2,124,2,100,4,107,3, - 114,224,124,2,160,16,161,0,115,210,116,17,100,9,160,18, - 124,2,161,1,131,1,130,1,100,10,160,18,124,10,116,19, - 124,2,161,3,125,10,124,10,116,20,100,8,25,0,23,0, - 125,11,116,8,106,21,100,1,107,9,144,1,114,76,116,22, - 124,4,131,1,144,1,115,16,116,23,116,4,160,24,161,0, - 124,4,131,2,125,4,124,4,100,5,25,0,100,11,107,2, - 144,1,114,56,124,4,100,8,25,0,116,25,107,7,144,1, - 114,56,124,4,100,12,100,1,133,2,25,0,125,4,116,23, - 116,8,106,21,124,4,160,26,116,25,161,1,124,11,131,3, - 83,0,116,23,124,4,116,27,124,11,131,3,83,0,41,13, - 97,254,2,0,0,71,105,118,101,110,32,116,104,101,32,112, - 97,116,104,32,116,111,32,97,32,46,112,121,32,102,105,108, - 101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,97, - 116,104,32,116,111,32,105,116,115,32,46,112,121,99,32,102, - 105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,112, - 121,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32, - 110,101,101,100,32,116,111,32,101,120,105,115,116,59,32,116, - 104,105,115,32,115,105,109,112,108,121,32,114,101,116,117,114, - 110,115,32,116,104,101,32,112,97,116,104,32,116,111,32,116, - 104,101,10,32,32,32,32,46,112,121,99,32,102,105,108,101, - 32,99,97,108,99,117,108,97,116,101,100,32,97,115,32,105, - 102,32,116,104,101,32,46,112,121,32,102,105,108,101,32,119, - 101,114,101,32,105,109,112,111,114,116,101,100,46,10,10,32, - 32,32,32,84,104,101,32,39,111,112,116,105,109,105,122,97, - 116,105,111,110,39,32,112,97,114,97,109,101,116,101,114,32, - 99,111,110,116,114,111,108,115,32,116,104,101,32,112,114,101, - 115,117,109,101,100,32,111,112,116,105,109,105,122,97,116,105, - 111,110,32,108,101,118,101,108,32,111,102,10,32,32,32,32, - 116,104,101,32,98,121,116,101,99,111,100,101,32,102,105,108, - 101,46,32,73,102,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,105,115,32,110,111,116,32,78,111,110,101, - 44,32,116,104,101,32,115,116,114,105,110,103,32,114,101,112, - 114,101,115,101,110,116,97,116,105,111,110,10,32,32,32,32, - 111,102,32,116,104,101,32,97,114,103,117,109,101,110,116,32, - 105,115,32,116,97,107,101,110,32,97,110,100,32,118,101,114, - 105,102,105,101,100,32,116,111,32,98,101,32,97,108,112,104, - 97,110,117,109,101,114,105,99,32,40,101,108,115,101,32,86, - 97,108,117,101,69,114,114,111,114,10,32,32,32,32,105,115, - 32,114,97,105,115,101,100,41,46,10,10,32,32,32,32,84, - 104,101,32,100,101,98,117,103,95,111,118,101,114,114,105,100, - 101,32,112,97,114,97,109,101,116,101,114,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,73,102,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,105,115,32, - 110,111,116,32,78,111,110,101,44,10,32,32,32,32,97,32, - 84,114,117,101,32,118,97,108,117,101,32,105,115,32,116,104, - 101,32,115,97,109,101,32,97,115,32,115,101,116,116,105,110, - 103,32,39,111,112,116,105,109,105,122,97,116,105,111,110,39, - 32,116,111,32,116,104,101,32,101,109,112,116,121,32,115,116, - 114,105,110,103,10,32,32,32,32,119,104,105,108,101,32,97, - 32,70,97,108,115,101,32,118,97,108,117,101,32,105,115,32, - 101,113,117,105,118,97,108,101,110,116,32,116,111,32,115,101, + 6,66,0,124,2,100,2,64,0,161,3,125,4,122,70,116, + 7,160,8,124,4,100,3,161,2,143,26,125,5,124,5,160, + 9,124,1,161,1,1,0,87,0,100,4,4,0,4,0,131, + 3,1,0,110,16,49,0,115,94,48,0,1,0,1,0,1, + 0,89,0,1,0,116,2,160,10,124,3,124,0,161,2,1, + 0,87,0,110,58,4,0,116,11,107,10,114,176,1,0,1, + 0,1,0,122,14,116,2,160,12,124,3,161,1,1,0,87, + 0,110,20,4,0,116,11,107,10,114,168,1,0,1,0,1, + 0,89,0,110,2,48,0,130,0,89,0,110,2,48,0,100, + 4,83,0,41,5,122,162,66,101,115,116,45,101,102,102,111, + 114,116,32,102,117,110,99,116,105,111,110,32,116,111,32,119, + 114,105,116,101,32,100,97,116,97,32,116,111,32,97,32,112, + 97,116,104,32,97,116,111,109,105,99,97,108,108,121,46,10, + 32,32,32,32,66,101,32,112,114,101,112,97,114,101,100,32, + 116,111,32,104,97,110,100,108,101,32,97,32,70,105,108,101, + 69,120,105,115,116,115,69,114,114,111,114,32,105,102,32,99, + 111,110,99,117,114,114,101,110,116,32,119,114,105,116,105,110, + 103,32,111,102,32,116,104,101,10,32,32,32,32,116,101,109, + 112,111,114,97,114,121,32,102,105,108,101,32,105,115,32,97, + 116,116,101,109,112,116,101,100,46,250,5,123,125,46,123,125, + 114,59,0,0,0,90,2,119,98,78,41,13,218,6,102,111, + 114,109,97,116,218,2,105,100,114,2,0,0,0,90,4,111, + 112,101,110,90,6,79,95,69,88,67,76,90,7,79,95,67, + 82,69,65,84,90,8,79,95,87,82,79,78,76,89,218,3, + 95,105,111,218,6,70,105,108,101,73,79,218,5,119,114,105, + 116,101,218,7,114,101,112,108,97,99,101,114,49,0,0,0, + 90,6,117,110,108,105,110,107,41,6,114,43,0,0,0,114, + 25,0,0,0,114,51,0,0,0,90,8,112,97,116,104,95, + 116,109,112,90,2,102,100,218,4,102,105,108,101,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,218,13,95,119, + 114,105,116,101,95,97,116,111,109,105,99,120,0,0,0,115, + 30,0,0,0,0,5,16,1,6,1,16,0,6,255,4,2, + 2,3,14,1,40,1,16,1,14,1,2,1,14,1,14,1, + 6,1,114,68,0,0,0,105,94,13,0,0,114,27,0,0, + 0,114,16,0,0,0,115,2,0,0,0,13,10,90,11,95, + 95,112,121,99,97,99,104,101,95,95,122,4,111,112,116,45, + 122,3,46,112,121,122,4,46,112,121,99,78,41,1,218,12, + 111,112,116,105,109,105,122,97,116,105,111,110,99,2,0,0, + 0,0,0,0,0,1,0,0,0,12,0,0,0,5,0,0, + 0,67,0,0,0,115,88,1,0,0,124,1,100,1,107,9, + 114,52,116,0,160,1,100,2,116,2,161,2,1,0,124,2, + 100,1,107,9,114,40,100,3,125,3,116,3,124,3,131,1, + 130,1,124,1,114,48,100,4,110,2,100,5,125,2,116,4, + 160,5,124,0,161,1,125,0,116,6,124,0,131,1,92,2, + 125,4,125,5,124,5,160,7,100,6,161,1,92,3,125,6, + 125,7,125,8,116,8,106,9,106,10,125,9,124,9,100,1, + 107,8,114,114,116,11,100,7,131,1,130,1,100,4,160,12, + 124,6,114,126,124,6,110,2,124,8,124,7,124,9,103,3, + 161,1,125,10,124,2,100,1,107,8,114,172,116,8,106,13, + 106,14,100,8,107,2,114,164,100,4,125,2,110,8,116,8, + 106,13,106,14,125,2,116,15,124,2,131,1,125,2,124,2, + 100,4,107,3,114,224,124,2,160,16,161,0,115,210,116,17, + 100,9,160,18,124,2,161,1,131,1,130,1,100,10,160,18, + 124,10,116,19,124,2,161,3,125,10,124,10,116,20,100,8, + 25,0,23,0,125,11,116,8,106,21,100,1,107,9,144,1, + 114,76,116,22,124,4,131,1,144,1,115,16,116,23,116,4, + 160,24,161,0,124,4,131,2,125,4,124,4,100,5,25,0, + 100,11,107,2,144,1,114,56,124,4,100,8,25,0,116,25, + 107,7,144,1,114,56,124,4,100,12,100,1,133,2,25,0, + 125,4,116,23,116,8,106,21,124,4,160,26,116,25,161,1, + 124,11,131,3,83,0,116,23,124,4,116,27,124,11,131,3, + 83,0,41,13,97,254,2,0,0,71,105,118,101,110,32,116, + 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, + 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, + 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, + 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104, + 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32, + 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115, + 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114, + 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32, + 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32, + 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, + 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105, + 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100, + 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, + 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, + 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, + 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, + 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, + 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, + 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, + 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, + 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, + 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, + 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, + 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, + 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, + 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, + 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, + 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, + 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, + 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73, + 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, + 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32, + 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, + 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,116,111,32,39,49,39,46,10,10,32,32, - 32,32,73,102,32,115,121,115,46,105,109,112,108,101,109,101, + 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, + 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, + 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, + 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, + 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, + 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46, + 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, + 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, + 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, + 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101, + 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, + 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, + 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, + 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, + 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, + 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, + 78,111,110,101,114,39,0,0,0,114,38,0,0,0,218,1, + 46,250,36,115,121,115,46,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, + 105,115,32,78,111,110,101,233,0,0,0,0,122,24,123,33, + 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, + 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,250, + 1,58,114,27,0,0,0,41,28,218,9,95,119,97,114,110, + 105,110,103,115,218,4,119,97,114,110,218,18,68,101,112,114, + 101,99,97,116,105,111,110,87,97,114,110,105,110,103,218,9, + 84,121,112,101,69,114,114,111,114,114,2,0,0,0,218,6, + 102,115,112,97,116,104,114,46,0,0,0,114,40,0,0,0, + 114,8,0,0,0,218,14,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,218,9,99,97,99,104,101,95,116,97,103, + 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100, + 69,114,114,111,114,114,35,0,0,0,218,5,102,108,97,103, + 115,218,8,111,112,116,105,109,105,122,101,218,3,115,116,114, + 218,7,105,115,97,108,110,117,109,218,10,86,97,108,117,101, + 69,114,114,111,114,114,61,0,0,0,218,4,95,79,80,84, + 218,17,66,89,84,69,67,79,68,69,95,83,85,70,70,73, + 88,69,83,218,14,112,121,99,97,99,104,101,95,112,114,101, + 102,105,120,114,58,0,0,0,114,37,0,0,0,114,54,0, + 0,0,114,30,0,0,0,218,6,108,115,116,114,105,112,218, + 8,95,80,89,67,65,67,72,69,41,12,114,43,0,0,0, + 90,14,100,101,98,117,103,95,111,118,101,114,114,105,100,101, + 114,69,0,0,0,218,7,109,101,115,115,97,103,101,218,4, + 104,101,97,100,114,45,0,0,0,90,4,98,97,115,101,218, + 3,115,101,112,218,4,114,101,115,116,90,3,116,97,103,90, + 15,97,108,109,111,115,116,95,102,105,108,101,110,97,109,101, + 218,8,102,105,108,101,110,97,109,101,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,218,17,99,97,99,104,101, + 95,102,114,111,109,95,115,111,117,114,99,101,41,1,0,0, + 115,72,0,0,0,0,18,8,1,6,1,2,255,4,2,8, + 1,4,1,8,1,12,1,10,1,12,1,16,1,8,1,8, + 1,8,1,24,1,8,1,12,1,6,2,8,1,8,1,8, + 1,8,1,14,1,14,1,12,1,12,9,10,1,14,5,28, + 1,12,4,2,1,4,1,8,1,2,253,4,5,114,97,0, + 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,10, + 0,0,0,5,0,0,0,67,0,0,0,115,46,1,0,0, + 116,0,106,1,106,2,100,1,107,8,114,20,116,3,100,2, + 131,1,130,1,116,4,160,5,124,0,161,1,125,0,116,6, + 124,0,131,1,92,2,125,1,125,2,100,3,125,3,116,0, + 106,7,100,1,107,9,114,102,116,0,106,7,160,8,116,9, + 161,1,125,4,124,1,160,10,124,4,116,11,23,0,161,1, + 114,102,124,1,116,12,124,4,131,1,100,1,133,2,25,0, + 125,1,100,4,125,3,124,3,115,144,116,6,124,1,131,1, + 92,2,125,1,125,5,124,5,116,13,107,3,114,144,116,14, + 116,13,155,0,100,5,124,0,155,2,157,3,131,1,130,1, + 124,2,160,15,100,6,161,1,125,6,124,6,100,7,107,7, + 114,178,116,14,100,8,124,2,155,2,157,2,131,1,130,1, + 110,92,124,6,100,9,107,2,144,1,114,14,124,2,160,16, + 100,6,100,10,161,2,100,11,25,0,125,7,124,7,160,10, + 116,17,161,1,115,228,116,14,100,12,116,17,155,2,157,2, + 131,1,130,1,124,7,116,12,116,17,131,1,100,1,133,2, + 25,0,125,8,124,8,160,18,161,0,144,1,115,14,116,14, + 100,13,124,7,155,2,100,14,157,3,131,1,130,1,124,2, + 160,19,100,6,161,1,100,15,25,0,125,9,116,20,124,1, + 124,9,116,21,100,15,25,0,23,0,131,2,83,0,41,16, + 97,110,1,0,0,71,105,118,101,110,32,116,104,101,32,112, + 97,116,104,32,116,111,32,97,32,46,112,121,99,46,32,102, + 105,108,101,44,32,114,101,116,117,114,110,32,116,104,101,32, + 112,97,116,104,32,116,111,32,105,116,115,32,46,112,121,32, + 102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,46, + 112,121,99,32,102,105,108,101,32,100,111,101,115,32,110,111, + 116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,59, + 32,116,104,105,115,32,115,105,109,112,108,121,32,114,101,116, + 117,114,110,115,32,116,104,101,32,112,97,116,104,32,116,111, + 10,32,32,32,32,116,104,101,32,46,112,121,32,102,105,108, + 101,32,99,97,108,99,117,108,97,116,101,100,32,116,111,32, + 99,111,114,114,101,115,112,111,110,100,32,116,111,32,116,104, + 101,32,46,112,121,99,32,102,105,108,101,46,32,32,73,102, + 32,112,97,116,104,32,100,111,101,115,10,32,32,32,32,110, + 111,116,32,99,111,110,102,111,114,109,32,116,111,32,80,69, + 80,32,51,49,52,55,47,52,56,56,32,102,111,114,109,97, + 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105, + 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102, + 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101, 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97, 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78, 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114, 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32, - 32,32,32,78,122,70,116,104,101,32,100,101,98,117,103,95, - 111,118,101,114,114,105,100,101,32,112,97,114,97,109,101,116, - 101,114,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 59,32,117,115,101,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,105,110,115,116,101,97,100,122,50,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,111,114,32, - 111,112,116,105,109,105,122,97,116,105,111,110,32,109,117,115, - 116,32,98,101,32,115,101,116,32,116,111,32,78,111,110,101, - 114,39,0,0,0,114,38,0,0,0,218,1,46,250,36,115, - 121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78, - 111,110,101,233,0,0,0,0,122,24,123,33,114,125,32,105, - 115,32,110,111,116,32,97,108,112,104,97,110,117,109,101,114, - 105,99,122,7,123,125,46,123,125,123,125,250,1,58,114,27, - 0,0,0,41,28,218,9,95,119,97,114,110,105,110,103,115, - 218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116, - 105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101, - 69,114,114,111,114,114,2,0,0,0,218,6,102,115,112,97, - 116,104,114,46,0,0,0,114,40,0,0,0,114,8,0,0, - 0,218,14,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,218,9,99,97,99,104,101,95,116,97,103,218,19,78,111, - 116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,111, - 114,114,35,0,0,0,218,5,102,108,97,103,115,218,8,111, - 112,116,105,109,105,122,101,218,3,115,116,114,218,7,105,115, - 97,108,110,117,109,218,10,86,97,108,117,101,69,114,114,111, - 114,114,61,0,0,0,218,4,95,79,80,84,218,17,66,89, - 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,218, - 14,112,121,99,97,99,104,101,95,112,114,101,102,105,120,114, - 58,0,0,0,114,37,0,0,0,114,54,0,0,0,114,30, - 0,0,0,218,6,108,115,116,114,105,112,218,8,95,80,89, - 67,65,67,72,69,41,12,114,43,0,0,0,90,14,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,114,69,0,0, - 0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100, - 114,45,0,0,0,90,4,98,97,115,101,218,3,115,101,112, - 218,4,114,101,115,116,90,3,116,97,103,90,15,97,108,109, - 111,115,116,95,102,105,108,101,110,97,109,101,218,8,102,105, - 108,101,110,97,109,101,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,17,99,97,99,104,101,95,102,114,111, - 109,95,115,111,117,114,99,101,39,1,0,0,115,72,0,0, - 0,0,18,8,1,6,1,2,255,4,2,8,1,4,1,8, - 1,12,1,10,1,12,1,16,1,8,1,8,1,8,1,24, - 1,8,1,12,1,6,2,8,1,8,1,8,1,8,1,14, - 1,14,1,12,1,12,9,10,1,14,5,28,1,12,4,2, - 1,4,1,8,1,2,253,4,5,114,97,0,0,0,99,1, - 0,0,0,0,0,0,0,0,0,0,0,10,0,0,0,5, - 0,0,0,67,0,0,0,115,46,1,0,0,116,0,106,1, - 106,2,100,1,107,8,114,20,116,3,100,2,131,1,130,1, - 116,4,160,5,124,0,161,1,125,0,116,6,124,0,131,1, - 92,2,125,1,125,2,100,3,125,3,116,0,106,7,100,1, - 107,9,114,102,116,0,106,7,160,8,116,9,161,1,125,4, - 124,1,160,10,124,4,116,11,23,0,161,1,114,102,124,1, - 116,12,124,4,131,1,100,1,133,2,25,0,125,1,100,4, - 125,3,124,3,115,144,116,6,124,1,131,1,92,2,125,1, - 125,5,124,5,116,13,107,3,114,144,116,14,116,13,155,0, - 100,5,124,0,155,2,157,3,131,1,130,1,124,2,160,15, - 100,6,161,1,125,6,124,6,100,7,107,7,114,178,116,14, - 100,8,124,2,155,2,157,2,131,1,130,1,110,92,124,6, - 100,9,107,2,144,1,114,14,124,2,160,16,100,6,100,10, - 161,2,100,11,25,0,125,7,124,7,160,10,116,17,161,1, - 115,228,116,14,100,12,116,17,155,2,157,2,131,1,130,1, - 124,7,116,12,116,17,131,1,100,1,133,2,25,0,125,8, - 124,8,160,18,161,0,144,1,115,14,116,14,100,13,124,7, - 155,2,100,14,157,3,131,1,130,1,124,2,160,19,100,6, - 161,1,100,15,25,0,125,9,116,20,124,1,124,9,116,21, - 100,15,25,0,23,0,131,2,83,0,41,16,97,110,1,0, - 0,71,105,118,101,110,32,116,104,101,32,112,97,116,104,32, - 116,111,32,97,32,46,112,121,99,46,32,102,105,108,101,44, - 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, - 32,116,111,32,105,116,115,32,46,112,121,32,102,105,108,101, - 46,10,10,32,32,32,32,84,104,101,32,46,112,121,99,32, - 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, - 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, - 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, - 32,116,104,101,32,112,97,116,104,32,116,111,10,32,32,32, - 32,116,104,101,32,46,112,121,32,102,105,108,101,32,99,97, - 108,99,117,108,97,116,101,100,32,116,111,32,99,111,114,114, - 101,115,112,111,110,100,32,116,111,32,116,104,101,32,46,112, - 121,99,32,102,105,108,101,46,32,32,73,102,32,112,97,116, - 104,32,100,111,101,115,10,32,32,32,32,110,111,116,32,99, - 111,110,102,111,114,109,32,116,111,32,80,69,80,32,51,49, - 52,55,47,52,56,56,32,102,111,114,109,97,116,44,32,86, - 97,108,117,101,69,114,114,111,114,32,119,105,108,108,32,98, - 101,32,114,97,105,115,101,100,46,32,73,102,10,32,32,32, - 32,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, - 32,78,111,110,101,32,116,104,101,110,32,78,111,116,73,109, - 112,108,101,109,101,110,116,101,100,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,46,10,10,32,32,32,32,78, - 114,71,0,0,0,70,84,122,31,32,110,111,116,32,98,111, - 116,116,111,109,45,108,101,118,101,108,32,100,105,114,101,99, - 116,111,114,121,32,105,110,32,114,70,0,0,0,62,2,0, - 0,0,114,27,0,0,0,114,56,0,0,0,122,29,101,120, - 112,101,99,116,101,100,32,111,110,108,121,32,50,32,111,114, - 32,51,32,100,111,116,115,32,105,110,32,114,56,0,0,0, - 114,27,0,0,0,233,254,255,255,255,122,53,111,112,116,105, - 109,105,122,97,116,105,111,110,32,112,111,114,116,105,111,110, - 32,111,102,32,102,105,108,101,110,97,109,101,32,100,111,101, - 115,32,110,111,116,32,115,116,97,114,116,32,119,105,116,104, - 32,122,19,111,112,116,105,109,105,122,97,116,105,111,110,32, - 108,101,118,101,108,32,122,29,32,105,115,32,110,111,116,32, - 97,110,32,97,108,112,104,97,110,117,109,101,114,105,99,32, - 118,97,108,117,101,114,72,0,0,0,41,22,114,8,0,0, - 0,114,79,0,0,0,114,80,0,0,0,114,81,0,0,0, - 114,2,0,0,0,114,78,0,0,0,114,46,0,0,0,114, - 89,0,0,0,114,29,0,0,0,114,30,0,0,0,114,10, - 0,0,0,114,34,0,0,0,114,22,0,0,0,114,91,0, - 0,0,114,86,0,0,0,218,5,99,111,117,110,116,114,42, - 0,0,0,114,87,0,0,0,114,85,0,0,0,218,9,112, - 97,114,116,105,116,105,111,110,114,37,0,0,0,218,15,83, - 79,85,82,67,69,95,83,85,70,70,73,88,69,83,41,10, - 114,43,0,0,0,114,93,0,0,0,90,16,112,121,99,97, - 99,104,101,95,102,105,108,101,110,97,109,101,90,23,102,111, - 117,110,100,95,105,110,95,112,121,99,97,99,104,101,95,112, - 114,101,102,105,120,90,13,115,116,114,105,112,112,101,100,95, - 112,97,116,104,90,7,112,121,99,97,99,104,101,90,9,100, - 111,116,95,99,111,117,110,116,114,69,0,0,0,90,9,111, - 112,116,95,108,101,118,101,108,90,13,98,97,115,101,95,102, - 105,108,101,110,97,109,101,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,17,115,111,117,114,99,101,95,102, - 114,111,109,95,99,97,99,104,101,110,1,0,0,115,52,0, - 0,0,0,9,12,1,8,1,10,1,12,1,4,1,10,1, - 12,1,14,1,16,1,4,1,4,1,12,1,8,1,18,2, - 10,1,8,1,16,1,10,1,16,1,10,1,14,2,16,1, - 10,1,16,2,14,1,114,102,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,5,0,0,0,9,0,0,0, - 67,0,0,0,115,126,0,0,0,116,0,124,0,131,1,100, - 1,107,2,114,16,100,2,83,0,124,0,160,1,100,3,161, - 1,92,3,125,1,125,2,125,3,124,1,114,56,124,3,160, - 2,161,0,100,4,100,5,133,2,25,0,100,6,107,3,114, - 60,124,0,83,0,122,12,116,3,124,0,131,1,125,4,87, - 0,110,36,4,0,116,4,116,5,102,2,107,10,114,108,1, - 0,1,0,1,0,124,0,100,2,100,5,133,2,25,0,125, - 4,89,0,110,2,88,0,116,6,124,4,131,1,114,122,124, - 4,83,0,124,0,83,0,41,7,122,188,67,111,110,118,101, - 114,116,32,97,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,32,112,97,116,104,32,116,111,32,97,32,115,111,117, - 114,99,101,32,112,97,116,104,32,40,105,102,32,112,111,115, - 115,105,98,108,101,41,46,10,10,32,32,32,32,84,104,105, - 115,32,102,117,110,99,116,105,111,110,32,101,120,105,115,116, - 115,32,112,117,114,101,108,121,32,102,111,114,32,98,97,99, - 107,119,97,114,100,115,45,99,111,109,112,97,116,105,98,105, - 108,105,116,121,32,102,111,114,10,32,32,32,32,80,121,73, - 109,112,111,114,116,95,69,120,101,99,67,111,100,101,77,111, - 100,117,108,101,87,105,116,104,70,105,108,101,110,97,109,101, - 115,40,41,32,105,110,32,116,104,101,32,67,32,65,80,73, - 46,10,10,32,32,32,32,114,72,0,0,0,78,114,70,0, - 0,0,233,253,255,255,255,233,255,255,255,255,90,2,112,121, - 41,7,114,22,0,0,0,114,40,0,0,0,218,5,108,111, - 119,101,114,114,102,0,0,0,114,81,0,0,0,114,86,0, - 0,0,114,53,0,0,0,41,5,218,13,98,121,116,101,99, - 111,100,101,95,112,97,116,104,114,95,0,0,0,114,44,0, - 0,0,90,9,101,120,116,101,110,115,105,111,110,218,11,115, - 111,117,114,99,101,95,112,97,116,104,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,15,95,103,101,116,95, - 115,111,117,114,99,101,102,105,108,101,150,1,0,0,115,20, - 0,0,0,0,7,12,1,4,1,16,1,24,1,4,1,2, - 1,12,1,18,1,18,1,114,108,0,0,0,99,1,0,0, - 0,0,0,0,0,0,0,0,0,1,0,0,0,8,0,0, - 0,67,0,0,0,115,74,0,0,0,124,0,160,0,116,1, - 116,2,131,1,161,1,114,48,122,10,116,3,124,0,131,1, - 87,0,83,0,4,0,116,4,107,10,114,44,1,0,1,0, - 1,0,89,0,113,70,88,0,110,22,124,0,160,0,116,1, - 116,5,131,1,161,1,114,66,124,0,83,0,100,0,83,0, - 100,0,83,0,169,1,78,41,6,218,8,101,110,100,115,119, - 105,116,104,218,5,116,117,112,108,101,114,101,0,0,0,114, - 97,0,0,0,114,81,0,0,0,114,88,0,0,0,41,1, - 114,96,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,11,95,103,101,116,95,99,97,99,104,101, - 100,169,1,0,0,115,16,0,0,0,0,1,14,1,2,1, - 10,1,14,1,8,1,14,1,4,2,114,112,0,0,0,99, - 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 8,0,0,0,67,0,0,0,115,52,0,0,0,122,14,116, - 0,124,0,131,1,106,1,125,1,87,0,110,24,4,0,116, - 2,107,10,114,38,1,0,1,0,1,0,100,1,125,1,89, - 0,110,2,88,0,124,1,100,2,79,0,125,1,124,1,83, - 0,41,3,122,51,67,97,108,99,117,108,97,116,101,32,116, - 104,101,32,109,111,100,101,32,112,101,114,109,105,115,115,105, - 111,110,115,32,102,111,114,32,97,32,98,121,116,101,99,111, - 100,101,32,102,105,108,101,46,114,59,0,0,0,233,128,0, - 0,0,41,3,114,48,0,0,0,114,50,0,0,0,114,49, - 0,0,0,41,2,114,43,0,0,0,114,51,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,10, - 95,99,97,108,99,95,109,111,100,101,181,1,0,0,115,12, - 0,0,0,0,2,2,1,14,1,14,1,10,3,8,1,114, - 114,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,8,0,0,0,3,0,0,0,115,68,0, - 0,0,100,6,135,0,102,1,100,2,100,3,132,9,125,1, - 122,10,116,0,106,1,125,2,87,0,110,28,4,0,116,2, - 107,10,114,52,1,0,1,0,1,0,100,4,100,5,132,0, - 125,2,89,0,110,2,88,0,124,2,124,1,136,0,131,2, - 1,0,124,1,83,0,41,7,122,252,68,101,99,111,114,97, - 116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,104, - 97,116,32,116,104,101,32,109,111,100,117,108,101,32,98,101, - 105,110,103,32,114,101,113,117,101,115,116,101,100,32,109,97, - 116,99,104,101,115,32,116,104,101,32,111,110,101,32,116,104, - 101,10,32,32,32,32,108,111,97,100,101,114,32,99,97,110, - 32,104,97,110,100,108,101,46,10,10,32,32,32,32,84,104, - 101,32,102,105,114,115,116,32,97,114,103,117,109,101,110,116, - 32,40,115,101,108,102,41,32,109,117,115,116,32,100,101,102, - 105,110,101,32,95,110,97,109,101,32,119,104,105,99,104,32, - 116,104,101,32,115,101,99,111,110,100,32,97,114,103,117,109, - 101,110,116,32,105,115,10,32,32,32,32,99,111,109,112,97, - 114,101,100,32,97,103,97,105,110,115,116,46,32,73,102,32, - 116,104,101,32,99,111,109,112,97,114,105,115,111,110,32,102, - 97,105,108,115,32,116,104,101,110,32,73,109,112,111,114,116, - 69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,46, - 10,10,32,32,32,32,78,99,2,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,4,0,0,0,31,0,0,0, - 115,66,0,0,0,124,1,100,0,107,8,114,16,124,0,106, - 0,125,1,110,32,124,0,106,0,124,1,107,3,114,48,116, - 1,100,1,124,0,106,0,124,1,102,2,22,0,124,1,100, - 2,141,2,130,1,136,0,124,0,124,1,102,2,124,2,158, - 2,124,3,142,1,83,0,41,3,78,122,30,108,111,97,100, - 101,114,32,102,111,114,32,37,115,32,99,97,110,110,111,116, - 32,104,97,110,100,108,101,32,37,115,169,1,218,4,110,97, - 109,101,41,2,114,116,0,0,0,218,11,73,109,112,111,114, - 116,69,114,114,111,114,41,4,218,4,115,101,108,102,114,116, - 0,0,0,218,4,97,114,103,115,218,6,107,119,97,114,103, - 115,169,1,218,6,109,101,116,104,111,100,114,3,0,0,0, - 114,6,0,0,0,218,19,95,99,104,101,99,107,95,110,97, - 109,101,95,119,114,97,112,112,101,114,201,1,0,0,115,18, - 0,0,0,0,1,8,1,8,1,10,1,4,1,8,255,2, - 1,2,255,6,2,122,40,95,99,104,101,99,107,95,110,97, - 109,101,46,60,108,111,99,97,108,115,62,46,95,99,104,101, - 99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,99, - 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 7,0,0,0,83,0,0,0,115,56,0,0,0,100,1,68, - 0,93,32,125,2,116,0,124,1,124,2,131,2,114,4,116, - 1,124,0,124,2,116,2,124,1,124,2,131,2,131,3,1, - 0,113,4,124,0,106,3,160,4,124,1,106,3,161,1,1, - 0,100,0,83,0,41,2,78,41,4,218,10,95,95,109,111, - 100,117,108,101,95,95,218,8,95,95,110,97,109,101,95,95, - 218,12,95,95,113,117,97,108,110,97,109,101,95,95,218,7, - 95,95,100,111,99,95,95,41,5,218,7,104,97,115,97,116, - 116,114,218,7,115,101,116,97,116,116,114,218,7,103,101,116, - 97,116,116,114,218,8,95,95,100,105,99,116,95,95,218,6, - 117,112,100,97,116,101,41,3,90,3,110,101,119,90,3,111, - 108,100,114,66,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,5,95,119,114,97,112,212,1,0, - 0,115,8,0,0,0,0,1,8,1,10,1,20,1,122,26, - 95,99,104,101,99,107,95,110,97,109,101,46,60,108,111,99, - 97,108,115,62,46,95,119,114,97,112,41,1,78,41,3,218, - 10,95,98,111,111,116,115,116,114,97,112,114,133,0,0,0, - 218,9,78,97,109,101,69,114,114,111,114,41,3,114,122,0, - 0,0,114,123,0,0,0,114,133,0,0,0,114,3,0,0, - 0,114,121,0,0,0,114,6,0,0,0,218,11,95,99,104, - 101,99,107,95,110,97,109,101,193,1,0,0,115,14,0,0, - 0,0,8,14,7,2,1,10,1,14,2,14,5,10,1,114, - 136,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,6,0,0,0,67,0,0,0,115,60,0, - 0,0,124,0,160,0,124,1,161,1,92,2,125,2,125,3, - 124,2,100,1,107,8,114,56,116,1,124,3,131,1,114,56, - 100,2,125,4,116,2,160,3,124,4,160,4,124,3,100,3, - 25,0,161,1,116,5,161,2,1,0,124,2,83,0,41,4, - 122,155,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,32, - 98,121,32,100,101,108,101,103,97,116,105,110,103,32,116,111, - 10,32,32,32,32,115,101,108,102,46,102,105,110,100,95,108, - 111,97,100,101,114,40,41,46,10,10,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,32,105,110,32,102,97,118,111,114, - 32,111,102,32,102,105,110,100,101,114,46,102,105,110,100,95, - 115,112,101,99,40,41,46,10,10,32,32,32,32,78,122,44, - 78,111,116,32,105,109,112,111,114,116,105,110,103,32,100,105, - 114,101,99,116,111,114,121,32,123,125,58,32,109,105,115,115, - 105,110,103,32,95,95,105,110,105,116,95,95,114,72,0,0, - 0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114, - 114,22,0,0,0,114,74,0,0,0,114,75,0,0,0,114, - 61,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110, - 105,110,103,41,5,114,118,0,0,0,218,8,102,117,108,108, - 110,97,109,101,218,6,108,111,97,100,101,114,218,8,112,111, - 114,116,105,111,110,115,218,3,109,115,103,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,17,95,102,105,110, - 100,95,109,111,100,117,108,101,95,115,104,105,109,221,1,0, - 0,115,10,0,0,0,0,10,14,1,16,1,4,1,22,1, - 114,143,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,158, - 0,0,0,124,0,100,1,100,2,133,2,25,0,125,3,124, - 3,116,0,107,3,114,60,100,3,124,1,155,2,100,4,124, - 3,155,2,157,4,125,4,116,1,160,2,100,5,124,4,161, - 2,1,0,116,3,124,4,102,1,124,2,142,1,130,1,116, - 4,124,0,131,1,100,6,107,0,114,102,100,7,124,1,155, - 2,157,2,125,4,116,1,160,2,100,5,124,4,161,2,1, - 0,116,5,124,4,131,1,130,1,116,6,124,0,100,2,100, - 8,133,2,25,0,131,1,125,5,124,5,100,9,64,0,114, - 154,100,10,124,5,155,2,100,11,124,1,155,2,157,4,125, - 4,116,3,124,4,102,1,124,2,142,1,130,1,124,5,83, - 0,41,12,97,84,2,0,0,80,101,114,102,111,114,109,32, - 98,97,115,105,99,32,118,97,108,105,100,105,116,121,32,99, - 104,101,99,107,105,110,103,32,111,102,32,97,32,112,121,99, - 32,104,101,97,100,101,114,32,97,110,100,32,114,101,116,117, - 114,110,32,116,104,101,32,102,108,97,103,115,32,102,105,101, - 108,100,44,10,32,32,32,32,119,104,105,99,104,32,100,101, - 116,101,114,109,105,110,101,115,32,104,111,119,32,116,104,101, - 32,112,121,99,32,115,104,111,117,108,100,32,98,101,32,102, - 117,114,116,104,101,114,32,118,97,108,105,100,97,116,101,100, - 32,97,103,97,105,110,115,116,32,116,104,101,32,115,111,117, - 114,99,101,46,10,10,32,32,32,32,42,100,97,116,97,42, - 32,105,115,32,116,104,101,32,99,111,110,116,101,110,116,115, - 32,111,102,32,116,104,101,32,112,121,99,32,102,105,108,101, - 46,32,40,79,110,108,121,32,116,104,101,32,102,105,114,115, - 116,32,49,54,32,98,121,116,101,115,32,97,114,101,10,32, - 32,32,32,114,101,113,117,105,114,101,100,44,32,116,104,111, - 117,103,104,46,41,10,10,32,32,32,32,42,110,97,109,101, - 42,32,105,115,32,116,104,101,32,110,97,109,101,32,111,102, - 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, - 103,32,105,109,112,111,114,116,101,100,46,32,73,116,32,105, - 115,32,117,115,101,100,32,102,111,114,32,108,111,103,103,105, - 110,103,46,10,10,32,32,32,32,42,101,120,99,95,100,101, - 116,97,105,108,115,42,32,105,115,32,97,32,100,105,99,116, - 105,111,110,97,114,121,32,112,97,115,115,101,100,32,116,111, - 32,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32, - 105,116,32,114,97,105,115,101,100,32,102,111,114,10,32,32, - 32,32,105,109,112,114,111,118,101,100,32,100,101,98,117,103, - 103,105,110,103,46,10,10,32,32,32,32,73,109,112,111,114, - 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 32,119,104,101,110,32,116,104,101,32,109,97,103,105,99,32, - 110,117,109,98,101,114,32,105,115,32,105,110,99,111,114,114, - 101,99,116,32,111,114,32,119,104,101,110,32,116,104,101,32, - 102,108,97,103,115,10,32,32,32,32,102,105,101,108,100,32, - 105,115,32,105,110,118,97,108,105,100,46,32,69,79,70,69, - 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,119, - 104,101,110,32,116,104,101,32,100,97,116,97,32,105,115,32, - 102,111,117,110,100,32,116,111,32,98,101,32,116,114,117,110, - 99,97,116,101,100,46,10,10,32,32,32,32,78,114,15,0, - 0,0,122,20,98,97,100,32,109,97,103,105,99,32,110,117, - 109,98,101,114,32,105,110,32,122,2,58,32,250,2,123,125, - 233,16,0,0,0,122,40,114,101,97,99,104,101,100,32,69, - 79,70,32,119,104,105,108,101,32,114,101,97,100,105,110,103, - 32,112,121,99,32,104,101,97,100,101,114,32,111,102,32,233, - 8,0,0,0,233,252,255,255,255,122,14,105,110,118,97,108, - 105,100,32,102,108,97,103,115,32,122,4,32,105,110,32,41, - 7,218,12,77,65,71,73,67,95,78,85,77,66,69,82,114, - 134,0,0,0,218,16,95,118,101,114,98,111,115,101,95,109, - 101,115,115,97,103,101,114,117,0,0,0,114,22,0,0,0, - 218,8,69,79,70,69,114,114,111,114,114,26,0,0,0,41, - 6,114,25,0,0,0,114,116,0,0,0,218,11,101,120,99, - 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,114, - 92,0,0,0,114,82,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,13,95,99,108,97,115,115, - 105,102,121,95,112,121,99,238,1,0,0,115,28,0,0,0, - 0,16,12,1,8,1,16,1,12,1,12,1,12,1,10,1, - 12,1,8,1,16,2,8,1,16,1,12,1,114,152,0,0, - 0,99,5,0,0,0,0,0,0,0,0,0,0,0,6,0, - 0,0,4,0,0,0,67,0,0,0,115,112,0,0,0,116, - 0,124,0,100,1,100,2,133,2,25,0,131,1,124,1,100, - 3,64,0,107,3,114,58,100,4,124,3,155,2,157,2,125, - 5,116,1,160,2,100,5,124,5,161,2,1,0,116,3,124, - 5,102,1,124,4,142,1,130,1,124,2,100,6,107,9,114, - 108,116,0,124,0,100,2,100,7,133,2,25,0,131,1,124, - 2,100,3,64,0,107,3,114,108,116,3,100,4,124,3,155, - 2,157,2,102,1,124,4,142,1,130,1,100,6,83,0,41, - 8,97,7,2,0,0,86,97,108,105,100,97,116,101,32,97, - 32,112,121,99,32,97,103,97,105,110,115,116,32,116,104,101, - 32,115,111,117,114,99,101,32,108,97,115,116,45,109,111,100, - 105,102,105,101,100,32,116,105,109,101,46,10,10,32,32,32, - 32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,99, - 111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,112, - 121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,116, - 104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,101, - 115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,114, - 101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,99, - 101,95,109,116,105,109,101,42,32,105,115,32,116,104,101,32, - 108,97,115,116,32,109,111,100,105,102,105,101,100,32,116,105, - 109,101,115,116,97,109,112,32,111,102,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,32, - 32,42,115,111,117,114,99,101,95,115,105,122,101,42,32,105, - 115,32,78,111,110,101,32,111,114,32,116,104,101,32,115,105, - 122,101,32,111,102,32,116,104,101,32,115,111,117,114,99,101, - 32,102,105,108,101,32,105,110,32,98,121,116,101,115,46,10, - 10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,116, - 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, - 111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,111, - 114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,100, - 32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,32, - 32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,42, - 32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,121, - 32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,114, - 116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,105, - 115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,114, - 111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,10, - 10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,102, - 32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,115, - 32,115,116,97,108,101,46,10,10,32,32,32,32,114,146,0, - 0,0,233,12,0,0,0,114,14,0,0,0,122,22,98,121, - 116,101,99,111,100,101,32,105,115,32,115,116,97,108,101,32, - 102,111,114,32,114,144,0,0,0,78,114,145,0,0,0,41, - 4,114,26,0,0,0,114,134,0,0,0,114,149,0,0,0, - 114,117,0,0,0,41,6,114,25,0,0,0,218,12,115,111, - 117,114,99,101,95,109,116,105,109,101,218,11,115,111,117,114, - 99,101,95,115,105,122,101,114,116,0,0,0,114,151,0,0, - 0,114,92,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,23,95,118,97,108,105,100,97,116,101, - 95,116,105,109,101,115,116,97,109,112,95,112,121,99,15,2, - 0,0,115,16,0,0,0,0,19,24,1,10,1,12,1,12, - 1,8,1,22,255,2,2,114,156,0,0,0,99,4,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0, - 0,67,0,0,0,115,38,0,0,0,124,0,100,1,100,2, - 133,2,25,0,124,1,107,3,114,34,116,0,100,3,124,2, - 155,2,157,2,102,1,124,3,142,1,130,1,100,4,83,0, - 41,5,97,243,1,0,0,86,97,108,105,100,97,116,101,32, - 97,32,104,97,115,104,45,98,97,115,101,100,32,112,121,99, - 32,98,121,32,99,104,101,99,107,105,110,103,32,116,104,101, - 32,114,101,97,108,32,115,111,117,114,99,101,32,104,97,115, - 104,32,97,103,97,105,110,115,116,32,116,104,101,32,111,110, - 101,32,105,110,10,32,32,32,32,116,104,101,32,112,121,99, - 32,104,101,97,100,101,114,46,10,10,32,32,32,32,42,100, + 32,32,32,78,114,71,0,0,0,70,84,122,31,32,110,111, + 116,32,98,111,116,116,111,109,45,108,101,118,101,108,32,100, + 105,114,101,99,116,111,114,121,32,105,110,32,114,70,0,0, + 0,62,2,0,0,0,114,27,0,0,0,114,56,0,0,0, + 122,29,101,120,112,101,99,116,101,100,32,111,110,108,121,32, + 50,32,111,114,32,51,32,100,111,116,115,32,105,110,32,114, + 56,0,0,0,114,27,0,0,0,233,254,255,255,255,122,53, + 111,112,116,105,109,105,122,97,116,105,111,110,32,112,111,114, + 116,105,111,110,32,111,102,32,102,105,108,101,110,97,109,101, + 32,100,111,101,115,32,110,111,116,32,115,116,97,114,116,32, + 119,105,116,104,32,122,19,111,112,116,105,109,105,122,97,116, + 105,111,110,32,108,101,118,101,108,32,122,29,32,105,115,32, + 110,111,116,32,97,110,32,97,108,112,104,97,110,117,109,101, + 114,105,99,32,118,97,108,117,101,114,72,0,0,0,41,22, + 114,8,0,0,0,114,79,0,0,0,114,80,0,0,0,114, + 81,0,0,0,114,2,0,0,0,114,78,0,0,0,114,46, + 0,0,0,114,89,0,0,0,114,29,0,0,0,114,30,0, + 0,0,114,10,0,0,0,114,34,0,0,0,114,22,0,0, + 0,114,91,0,0,0,114,86,0,0,0,218,5,99,111,117, + 110,116,114,42,0,0,0,114,87,0,0,0,114,85,0,0, + 0,218,9,112,97,114,116,105,116,105,111,110,114,37,0,0, + 0,218,15,83,79,85,82,67,69,95,83,85,70,70,73,88, + 69,83,41,10,114,43,0,0,0,114,93,0,0,0,90,16, + 112,121,99,97,99,104,101,95,102,105,108,101,110,97,109,101, + 90,23,102,111,117,110,100,95,105,110,95,112,121,99,97,99, + 104,101,95,112,114,101,102,105,120,90,13,115,116,114,105,112, + 112,101,100,95,112,97,116,104,90,7,112,121,99,97,99,104, + 101,90,9,100,111,116,95,99,111,117,110,116,114,69,0,0, + 0,90,9,111,112,116,95,108,101,118,101,108,90,13,98,97, + 115,101,95,102,105,108,101,110,97,109,101,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,218,17,115,111,117,114, + 99,101,95,102,114,111,109,95,99,97,99,104,101,112,1,0, + 0,115,52,0,0,0,0,9,12,1,8,1,10,1,12,1, + 4,1,10,1,12,1,14,1,16,1,4,1,4,1,12,1, + 8,1,18,2,10,1,8,1,16,1,10,1,16,1,10,1, + 14,2,16,1,10,1,16,2,14,1,114,102,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 9,0,0,0,67,0,0,0,115,126,0,0,0,116,0,124, + 0,131,1,100,1,107,2,114,16,100,2,83,0,124,0,160, + 1,100,3,161,1,92,3,125,1,125,2,125,3,124,1,114, + 56,124,3,160,2,161,0,100,4,100,5,133,2,25,0,100, + 6,107,3,114,60,124,0,83,0,122,12,116,3,124,0,131, + 1,125,4,87,0,110,36,4,0,116,4,116,5,102,2,107, + 10,114,108,1,0,1,0,1,0,124,0,100,2,100,5,133, + 2,25,0,125,4,89,0,110,2,48,0,116,6,124,4,131, + 1,114,122,124,4,83,0,124,0,83,0,41,7,122,188,67, + 111,110,118,101,114,116,32,97,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,32,112,97,116,104,32,116,111,32,97, + 32,115,111,117,114,99,101,32,112,97,116,104,32,40,105,102, + 32,112,111,115,115,105,98,108,101,41,46,10,10,32,32,32, + 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,101, + 120,105,115,116,115,32,112,117,114,101,108,121,32,102,111,114, + 32,98,97,99,107,119,97,114,100,115,45,99,111,109,112,97, + 116,105,98,105,108,105,116,121,32,102,111,114,10,32,32,32, + 32,80,121,73,109,112,111,114,116,95,69,120,101,99,67,111, + 100,101,77,111,100,117,108,101,87,105,116,104,70,105,108,101, + 110,97,109,101,115,40,41,32,105,110,32,116,104,101,32,67, + 32,65,80,73,46,10,10,32,32,32,32,114,72,0,0,0, + 78,114,70,0,0,0,233,253,255,255,255,233,255,255,255,255, + 90,2,112,121,41,7,114,22,0,0,0,114,40,0,0,0, + 218,5,108,111,119,101,114,114,102,0,0,0,114,81,0,0, + 0,114,86,0,0,0,114,53,0,0,0,41,5,218,13,98, + 121,116,101,99,111,100,101,95,112,97,116,104,114,95,0,0, + 0,114,44,0,0,0,90,9,101,120,116,101,110,115,105,111, + 110,218,11,115,111,117,114,99,101,95,112,97,116,104,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,15,95, + 103,101,116,95,115,111,117,114,99,101,102,105,108,101,152,1, + 0,0,115,20,0,0,0,0,7,12,1,4,1,16,1,24, + 1,4,1,2,1,12,1,18,1,18,1,114,108,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,8,0,0,0,67,0,0,0,115,74,0,0,0,124,0, + 160,0,116,1,116,2,131,1,161,1,114,48,122,10,116,3, + 124,0,131,1,87,0,83,0,4,0,116,4,107,10,114,44, + 1,0,1,0,1,0,89,0,113,70,48,0,110,22,124,0, + 160,0,116,1,116,5,131,1,161,1,114,66,124,0,83,0, + 100,0,83,0,100,0,83,0,169,1,78,41,6,218,8,101, + 110,100,115,119,105,116,104,218,5,116,117,112,108,101,114,101, + 0,0,0,114,97,0,0,0,114,81,0,0,0,114,88,0, + 0,0,41,1,114,96,0,0,0,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,218,11,95,103,101,116,95,99, + 97,99,104,101,100,171,1,0,0,115,16,0,0,0,0,1, + 14,1,2,1,10,1,14,1,8,1,14,1,4,2,114,112, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,8,0,0,0,67,0,0,0,115,52,0,0, + 0,122,14,116,0,124,0,131,1,106,1,125,1,87,0,110, + 24,4,0,116,2,107,10,114,38,1,0,1,0,1,0,100, + 1,125,1,89,0,110,2,48,0,124,1,100,2,79,0,125, + 1,124,1,83,0,41,3,122,51,67,97,108,99,117,108,97, + 116,101,32,116,104,101,32,109,111,100,101,32,112,101,114,109, + 105,115,115,105,111,110,115,32,102,111,114,32,97,32,98,121, + 116,101,99,111,100,101,32,102,105,108,101,46,114,59,0,0, + 0,233,128,0,0,0,41,3,114,48,0,0,0,114,50,0, + 0,0,114,49,0,0,0,41,2,114,43,0,0,0,114,51, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,218,10,95,99,97,108,99,95,109,111,100,101,183,1, + 0,0,115,12,0,0,0,0,2,2,1,14,1,14,1,10, + 3,8,1,114,114,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,8,0,0,0,3,0,0, + 0,115,68,0,0,0,100,6,135,0,102,1,100,2,100,3, + 132,9,125,1,122,10,116,0,106,1,125,2,87,0,110,28, + 4,0,116,2,107,10,114,52,1,0,1,0,1,0,100,4, + 100,5,132,0,125,2,89,0,110,2,48,0,124,2,124,1, + 136,0,131,2,1,0,124,1,83,0,41,7,122,252,68,101, + 99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,102, + 121,32,116,104,97,116,32,116,104,101,32,109,111,100,117,108, + 101,32,98,101,105,110,103,32,114,101,113,117,101,115,116,101, + 100,32,109,97,116,99,104,101,115,32,116,104,101,32,111,110, + 101,32,116,104,101,10,32,32,32,32,108,111,97,100,101,114, + 32,99,97,110,32,104,97,110,100,108,101,46,10,10,32,32, + 32,32,84,104,101,32,102,105,114,115,116,32,97,114,103,117, + 109,101,110,116,32,40,115,101,108,102,41,32,109,117,115,116, + 32,100,101,102,105,110,101,32,95,110,97,109,101,32,119,104, + 105,99,104,32,116,104,101,32,115,101,99,111,110,100,32,97, + 114,103,117,109,101,110,116,32,105,115,10,32,32,32,32,99, + 111,109,112,97,114,101,100,32,97,103,97,105,110,115,116,46, + 32,73,102,32,116,104,101,32,99,111,109,112,97,114,105,115, + 111,110,32,102,97,105,108,115,32,116,104,101,110,32,73,109, + 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105, + 115,101,100,46,10,10,32,32,32,32,78,99,2,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0, + 31,0,0,0,115,66,0,0,0,124,1,100,0,107,8,114, + 16,124,0,106,0,125,1,110,32,124,0,106,0,124,1,107, + 3,114,48,116,1,100,1,124,0,106,0,124,1,102,2,22, + 0,124,1,100,2,141,2,130,1,136,0,124,0,124,1,102, + 2,124,2,158,2,124,3,142,1,83,0,41,3,78,122,30, + 108,111,97,100,101,114,32,102,111,114,32,37,115,32,99,97, + 110,110,111,116,32,104,97,110,100,108,101,32,37,115,169,1, + 218,4,110,97,109,101,41,2,114,116,0,0,0,218,11,73, + 109,112,111,114,116,69,114,114,111,114,41,4,218,4,115,101, + 108,102,114,116,0,0,0,218,4,97,114,103,115,218,6,107, + 119,97,114,103,115,169,1,218,6,109,101,116,104,111,100,114, + 3,0,0,0,114,6,0,0,0,218,19,95,99,104,101,99, + 107,95,110,97,109,101,95,119,114,97,112,112,101,114,203,1, + 0,0,115,18,0,0,0,0,1,8,1,8,1,10,1,4, + 1,8,255,2,1,2,255,6,2,122,40,95,99,104,101,99, + 107,95,110,97,109,101,46,60,108,111,99,97,108,115,62,46, + 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, + 112,101,114,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,7,0,0,0,83,0,0,0,115,56,0,0, + 0,100,1,68,0,93,32,125,2,116,0,124,1,124,2,131, + 2,114,4,116,1,124,0,124,2,116,2,124,1,124,2,131, + 2,131,3,1,0,113,4,124,0,106,3,160,4,124,1,106, + 3,161,1,1,0,100,0,83,0,41,2,78,41,4,218,10, + 95,95,109,111,100,117,108,101,95,95,218,8,95,95,110,97, + 109,101,95,95,218,12,95,95,113,117,97,108,110,97,109,101, + 95,95,218,7,95,95,100,111,99,95,95,41,5,218,7,104, + 97,115,97,116,116,114,218,7,115,101,116,97,116,116,114,218, + 7,103,101,116,97,116,116,114,218,8,95,95,100,105,99,116, + 95,95,218,6,117,112,100,97,116,101,41,3,90,3,110,101, + 119,90,3,111,108,100,114,66,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,218,5,95,119,114,97, + 112,214,1,0,0,115,8,0,0,0,0,1,8,1,10,1, + 20,1,122,26,95,99,104,101,99,107,95,110,97,109,101,46, + 60,108,111,99,97,108,115,62,46,95,119,114,97,112,41,1, + 78,41,3,218,10,95,98,111,111,116,115,116,114,97,112,114, + 133,0,0,0,218,9,78,97,109,101,69,114,114,111,114,41, + 3,114,122,0,0,0,114,123,0,0,0,114,133,0,0,0, + 114,3,0,0,0,114,121,0,0,0,114,6,0,0,0,218, + 11,95,99,104,101,99,107,95,110,97,109,101,195,1,0,0, + 115,14,0,0,0,0,8,14,7,2,1,10,1,14,2,14, + 5,10,1,114,136,0,0,0,99,2,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, + 0,115,60,0,0,0,124,0,160,0,124,1,161,1,92,2, + 125,2,125,3,124,2,100,1,107,8,114,56,116,1,124,3, + 131,1,114,56,100,2,125,4,116,2,160,3,124,4,160,4, + 124,3,100,3,25,0,161,1,116,5,161,2,1,0,124,2, + 83,0,41,4,122,155,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, + 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, + 117,108,101,32,98,121,32,100,101,108,101,103,97,116,105,110, + 103,32,116,111,10,32,32,32,32,115,101,108,102,46,102,105, + 110,100,95,108,111,97,100,101,114,40,41,46,10,10,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,32,105,110,32,102, + 97,118,111,114,32,111,102,32,102,105,110,100,101,114,46,102, + 105,110,100,95,115,112,101,99,40,41,46,10,10,32,32,32, + 32,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, + 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, + 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, + 114,72,0,0,0,41,6,218,11,102,105,110,100,95,108,111, + 97,100,101,114,114,22,0,0,0,114,74,0,0,0,114,75, + 0,0,0,114,61,0,0,0,218,13,73,109,112,111,114,116, + 87,97,114,110,105,110,103,41,5,114,118,0,0,0,218,8, + 102,117,108,108,110,97,109,101,218,6,108,111,97,100,101,114, + 218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,17, + 95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105, + 109,223,1,0,0,115,10,0,0,0,0,10,14,1,16,1, + 4,1,22,1,114,143,0,0,0,99,3,0,0,0,0,0, + 0,0,0,0,0,0,6,0,0,0,4,0,0,0,67,0, + 0,0,115,158,0,0,0,124,0,100,1,100,2,133,2,25, + 0,125,3,124,3,116,0,107,3,114,60,100,3,124,1,155, + 2,100,4,124,3,155,2,157,4,125,4,116,1,160,2,100, + 5,124,4,161,2,1,0,116,3,124,4,102,1,124,2,142, + 1,130,1,116,4,124,0,131,1,100,6,107,0,114,102,100, + 7,124,1,155,2,157,2,125,4,116,1,160,2,100,5,124, + 4,161,2,1,0,116,5,124,4,131,1,130,1,116,6,124, + 0,100,2,100,8,133,2,25,0,131,1,125,5,124,5,100, + 9,64,0,114,154,100,10,124,5,155,2,100,11,124,1,155, + 2,157,4,125,4,116,3,124,4,102,1,124,2,142,1,130, + 1,124,5,83,0,41,12,97,84,2,0,0,80,101,114,102, + 111,114,109,32,98,97,115,105,99,32,118,97,108,105,100,105, + 116,121,32,99,104,101,99,107,105,110,103,32,111,102,32,97, + 32,112,121,99,32,104,101,97,100,101,114,32,97,110,100,32, + 114,101,116,117,114,110,32,116,104,101,32,102,108,97,103,115, + 32,102,105,101,108,100,44,10,32,32,32,32,119,104,105,99, + 104,32,100,101,116,101,114,109,105,110,101,115,32,104,111,119, + 32,116,104,101,32,112,121,99,32,115,104,111,117,108,100,32, + 98,101,32,102,117,114,116,104,101,114,32,118,97,108,105,100, + 97,116,101,100,32,97,103,97,105,110,115,116,32,116,104,101, + 32,115,111,117,114,99,101,46,10,10,32,32,32,32,42,100, 97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116, 101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32, 102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32, 102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97, - 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46, - 41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,104, - 97,115,104,42,32,105,115,32,116,104,101,32,105,109,112,111, - 114,116,108,105,98,46,117,116,105,108,46,115,111,117,114,99, - 101,95,104,97,115,104,40,41,32,111,102,32,116,104,101,32, - 115,111,117,114,99,101,32,102,105,108,101,46,10,10,32,32, - 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32, - 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117, - 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101, - 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111, - 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32, - 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115, - 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97, - 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100, - 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101, - 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32, - 32,32,65,110,32,73,109,112,111,114,116,69,114,114,111,114, - 32,105,115,32,114,97,105,115,101,100,32,105,102,32,116,104, - 101,32,98,121,116,101,99,111,100,101,32,105,115,32,115,116, - 97,108,101,46,10,10,32,32,32,32,114,146,0,0,0,114, - 145,0,0,0,122,46,104,97,115,104,32,105,110,32,98,121, - 116,101,99,111,100,101,32,100,111,101,115,110,39,116,32,109, - 97,116,99,104,32,104,97,115,104,32,111,102,32,115,111,117, - 114,99,101,32,78,41,1,114,117,0,0,0,41,4,114,25, - 0,0,0,218,11,115,111,117,114,99,101,95,104,97,115,104, - 114,116,0,0,0,114,151,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,218,18,95,118,97,108,105, - 100,97,116,101,95,104,97,115,104,95,112,121,99,43,2,0, - 0,115,12,0,0,0,0,17,16,1,2,1,8,255,2,2, - 2,254,114,158,0,0,0,99,4,0,0,0,0,0,0,0, - 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, - 115,80,0,0,0,116,0,160,1,124,0,161,1,125,4,116, - 2,124,4,116,3,131,2,114,56,116,4,160,5,100,1,124, - 2,161,2,1,0,124,3,100,2,107,9,114,52,116,6,160, - 7,124,4,124,3,161,2,1,0,124,4,83,0,116,8,100, - 3,160,9,124,2,161,1,124,1,124,2,100,4,141,3,130, - 1,100,2,83,0,41,5,122,35,67,111,109,112,105,108,101, - 32,98,121,116,101,99,111,100,101,32,97,115,32,102,111,117, - 110,100,32,105,110,32,97,32,112,121,99,46,122,21,99,111, - 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, - 33,114,125,78,122,23,78,111,110,45,99,111,100,101,32,111, - 98,106,101,99,116,32,105,110,32,123,33,114,125,169,2,114, - 116,0,0,0,114,43,0,0,0,41,10,218,7,109,97,114, - 115,104,97,108,90,5,108,111,97,100,115,218,10,105,115,105, - 110,115,116,97,110,99,101,218,10,95,99,111,100,101,95,116, - 121,112,101,114,134,0,0,0,114,149,0,0,0,218,4,95, - 105,109,112,90,16,95,102,105,120,95,99,111,95,102,105,108, - 101,110,97,109,101,114,117,0,0,0,114,61,0,0,0,41, - 5,114,25,0,0,0,114,116,0,0,0,114,106,0,0,0, - 114,107,0,0,0,218,4,99,111,100,101,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,109, - 112,105,108,101,95,98,121,116,101,99,111,100,101,67,2,0, - 0,115,20,0,0,0,0,2,10,1,10,1,12,1,8,1, - 12,1,4,2,10,1,2,0,2,255,114,165,0,0,0,114, - 72,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0, - 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3, - 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1, - 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1, - 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1, - 161,1,1,0,124,3,83,0,41,2,122,43,80,114,111,100, - 117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114, - 32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115, - 101,100,32,112,121,99,46,114,72,0,0,0,41,6,218,9, - 98,121,116,101,97,114,114,97,121,114,148,0,0,0,218,6, - 101,120,116,101,110,100,114,20,0,0,0,114,160,0,0,0, - 218,5,100,117,109,112,115,41,4,114,164,0,0,0,218,5, - 109,116,105,109,101,114,155,0,0,0,114,25,0,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,22, - 95,99,111,100,101,95,116,111,95,116,105,109,101,115,116,97, - 109,112,95,112,121,99,80,2,0,0,115,12,0,0,0,0, - 2,8,1,14,1,14,1,14,1,16,1,114,170,0,0,0, - 84,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,5,0,0,0,67,0,0,0,115,80,0,0,0,116, - 0,116,1,131,1,125,3,100,1,124,2,100,1,62,0,66, - 0,125,4,124,3,160,2,116,3,124,4,131,1,161,1,1, - 0,116,4,124,1,131,1,100,2,107,2,115,50,74,0,130, - 1,124,3,160,2,124,1,161,1,1,0,124,3,160,2,116, - 5,160,6,124,0,161,1,161,1,1,0,124,3,83,0,41, - 3,122,38,80,114,111,100,117,99,101,32,116,104,101,32,100, - 97,116,97,32,102,111,114,32,97,32,104,97,115,104,45,98, - 97,115,101,100,32,112,121,99,46,114,38,0,0,0,114,146, - 0,0,0,41,7,114,166,0,0,0,114,148,0,0,0,114, - 167,0,0,0,114,20,0,0,0,114,22,0,0,0,114,160, - 0,0,0,114,168,0,0,0,41,5,114,164,0,0,0,114, - 157,0,0,0,90,7,99,104,101,99,107,101,100,114,25,0, - 0,0,114,82,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,17,95,99,111,100,101,95,116,111, - 95,104,97,115,104,95,112,121,99,90,2,0,0,115,14,0, - 0,0,0,2,8,1,12,1,14,1,16,1,10,1,16,1, - 114,171,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,62, - 0,0,0,100,1,100,2,108,0,125,1,116,1,160,2,124, - 0,161,1,106,3,125,2,124,1,160,4,124,2,161,1,125, - 3,116,1,160,5,100,2,100,3,161,2,125,4,124,4,160, - 6,124,0,160,6,124,3,100,1,25,0,161,1,161,1,83, - 0,41,4,122,121,68,101,99,111,100,101,32,98,121,116,101, - 115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,115, - 111,117,114,99,101,32,99,111,100,101,32,97,110,100,32,114, - 101,116,117,114,110,32,116,104,101,32,115,116,114,105,110,103, - 46,10,10,32,32,32,32,85,110,105,118,101,114,115,97,108, - 32,110,101,119,108,105,110,101,32,115,117,112,112,111,114,116, - 32,105,115,32,117,115,101,100,32,105,110,32,116,104,101,32, - 100,101,99,111,100,105,110,103,46,10,32,32,32,32,114,72, - 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122, - 101,114,63,0,0,0,90,7,66,121,116,101,115,73,79,90, - 8,114,101,97,100,108,105,110,101,90,15,100,101,116,101,99, - 116,95,101,110,99,111,100,105,110,103,90,25,73,110,99,114, - 101,109,101,110,116,97,108,78,101,119,108,105,110,101,68,101, - 99,111,100,101,114,218,6,100,101,99,111,100,101,41,5,218, - 12,115,111,117,114,99,101,95,98,121,116,101,115,114,172,0, - 0,0,90,21,115,111,117,114,99,101,95,98,121,116,101,115, - 95,114,101,97,100,108,105,110,101,218,8,101,110,99,111,100, - 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99, - 111,100,101,114,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, - 99,101,101,2,0,0,115,10,0,0,0,0,5,8,1,12, - 1,10,1,12,1,114,176,0,0,0,169,2,114,140,0,0, - 0,218,26,115,117,98,109,111,100,117,108,101,95,115,101,97, - 114,99,104,95,108,111,99,97,116,105,111,110,115,99,2,0, - 0,0,0,0,0,0,2,0,0,0,9,0,0,0,8,0, - 0,0,67,0,0,0,115,16,1,0,0,124,1,100,1,107, - 8,114,60,100,2,125,1,116,0,124,2,100,3,131,2,114, - 70,122,14,124,2,160,1,124,0,161,1,125,1,87,0,113, - 70,4,0,116,2,107,10,114,56,1,0,1,0,1,0,89, - 0,113,70,88,0,110,10,116,3,160,4,124,1,161,1,125, - 1,116,5,106,6,124,0,124,2,124,1,100,4,141,3,125, - 4,100,5,124,4,95,7,124,2,100,1,107,8,114,154,116, - 8,131,0,68,0,93,42,92,2,125,5,125,6,124,1,160, - 9,116,10,124,6,131,1,161,1,114,106,124,5,124,0,124, - 1,131,2,125,2,124,2,124,4,95,11,1,0,113,154,113, - 106,100,1,83,0,124,3,116,12,107,8,114,220,116,0,124, - 2,100,6,131,2,114,226,122,14,124,2,160,13,124,0,161, - 1,125,7,87,0,110,20,4,0,116,2,107,10,114,206,1, - 0,1,0,1,0,89,0,113,226,88,0,124,7,114,226,103, - 0,124,4,95,14,110,6,124,3,124,4,95,14,124,4,106, - 14,103,0,107,2,144,1,114,12,124,1,144,1,114,12,116, - 15,124,1,131,1,100,7,25,0,125,8,124,4,106,14,160, - 16,124,8,161,1,1,0,124,4,83,0,41,8,97,61,1, - 0,0,82,101,116,117,114,110,32,97,32,109,111,100,117,108, - 101,32,115,112,101,99,32,98,97,115,101,100,32,111,110,32, - 97,32,102,105,108,101,32,108,111,99,97,116,105,111,110,46, - 10,10,32,32,32,32,84,111,32,105,110,100,105,99,97,116, - 101,32,116,104,97,116,32,116,104,101,32,109,111,100,117,108, - 101,32,105,115,32,97,32,112,97,99,107,97,103,101,44,32, - 115,101,116,10,32,32,32,32,115,117,98,109,111,100,117,108, - 101,95,115,101,97,114,99,104,95,108,111,99,97,116,105,111, - 110,115,32,116,111,32,97,32,108,105,115,116,32,111,102,32, - 100,105,114,101,99,116,111,114,121,32,112,97,116,104,115,46, - 32,32,65,110,10,32,32,32,32,101,109,112,116,121,32,108, - 105,115,116,32,105,115,32,115,117,102,102,105,99,105,101,110, - 116,44,32,116,104,111,117,103,104,32,105,116,115,32,110,111, - 116,32,111,116,104,101,114,119,105,115,101,32,117,115,101,102, - 117,108,32,116,111,32,116,104,101,10,32,32,32,32,105,109, - 112,111,114,116,32,115,121,115,116,101,109,46,10,10,32,32, - 32,32,84,104,101,32,108,111,97,100,101,114,32,109,117,115, - 116,32,116,97,107,101,32,97,32,115,112,101,99,32,97,115, - 32,105,116,115,32,111,110,108,121,32,95,95,105,110,105,116, - 95,95,40,41,32,97,114,103,46,10,10,32,32,32,32,78, - 122,9,60,117,110,107,110,111,119,110,62,218,12,103,101,116, - 95,102,105,108,101,110,97,109,101,169,1,218,6,111,114,105, - 103,105,110,84,218,10,105,115,95,112,97,99,107,97,103,101, - 114,72,0,0,0,41,17,114,128,0,0,0,114,179,0,0, - 0,114,117,0,0,0,114,2,0,0,0,114,78,0,0,0, - 114,134,0,0,0,218,10,77,111,100,117,108,101,83,112,101, - 99,90,13,95,115,101,116,95,102,105,108,101,97,116,116,114, - 218,27,95,103,101,116,95,115,117,112,112,111,114,116,101,100, - 95,102,105,108,101,95,108,111,97,100,101,114,115,114,110,0, - 0,0,114,111,0,0,0,114,140,0,0,0,218,9,95,80, - 79,80,85,76,65,84,69,114,182,0,0,0,114,178,0,0, - 0,114,46,0,0,0,218,6,97,112,112,101,110,100,41,9, - 114,116,0,0,0,90,8,108,111,99,97,116,105,111,110,114, - 140,0,0,0,114,178,0,0,0,218,4,115,112,101,99,218, - 12,108,111,97,100,101,114,95,99,108,97,115,115,218,8,115, - 117,102,102,105,120,101,115,114,182,0,0,0,90,7,100,105, - 114,110,97,109,101,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,23,115,112,101,99,95,102,114,111,109,95, - 102,105,108,101,95,108,111,99,97,116,105,111,110,118,2,0, - 0,115,62,0,0,0,0,12,8,4,4,1,10,2,2,1, - 14,1,14,1,8,2,10,8,16,1,6,3,8,1,14,1, - 14,1,10,1,6,1,6,2,4,3,8,2,10,1,2,1, - 14,1,14,1,6,2,4,1,8,2,6,1,12,1,6,1, - 12,1,12,2,114,190,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0, - 0,0,115,80,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,90,4,100,3,90,5,100,4,90,6,101, - 7,100,5,100,6,132,0,131,1,90,8,101,7,100,7,100, - 8,132,0,131,1,90,9,101,7,100,14,100,10,100,11,132, - 1,131,1,90,10,101,7,100,15,100,12,100,13,132,1,131, - 1,90,11,100,9,83,0,41,16,218,21,87,105,110,100,111, - 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, - 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, - 101,114,32,102,111,114,32,109,111,100,117,108,101,115,32,100, - 101,99,108,97,114,101,100,32,105,110,32,116,104,101,32,87, - 105,110,100,111,119,115,32,114,101,103,105,115,116,114,121,46, - 122,59,83,111,102,116,119,97,114,101,92,80,121,116,104,111, - 110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,121, - 115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,108, - 101,115,92,123,102,117,108,108,110,97,109,101,125,122,65,83, - 111,102,116,119,97,114,101,92,80,121,116,104,111,110,92,80, - 121,116,104,111,110,67,111,114,101,92,123,115,121,115,95,118, - 101,114,115,105,111,110,125,92,77,111,100,117,108,101,115,92, - 123,102,117,108,108,110,97,109,101,125,92,68,101,98,117,103, - 70,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,8,0,0,0,67,0,0,0,115,56,0,0,0,122, - 16,116,0,160,1,116,0,106,2,124,1,161,2,87,0,83, - 0,4,0,116,3,107,10,114,50,1,0,1,0,1,0,116, - 0,160,1,116,0,106,4,124,1,161,2,6,0,89,0,83, - 0,88,0,100,0,83,0,114,109,0,0,0,41,5,218,7, - 95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, - 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, - 83,69,82,114,49,0,0,0,90,18,72,75,69,89,95,76, - 79,67,65,76,95,77,65,67,72,73,78,69,41,2,218,3, - 99,108,115,114,5,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,14,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,198,2,0,0,115,8,0,0,0, - 0,2,2,1,16,1,14,1,122,36,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, - 95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,2, - 0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,9, - 0,0,0,67,0,0,0,115,114,0,0,0,124,0,106,0, - 114,14,124,0,106,1,125,2,110,6,124,0,106,2,125,2, - 124,2,106,3,124,1,100,1,116,4,106,5,100,0,100,2, - 133,2,25,0,22,0,100,3,141,2,125,3,122,38,124,0, - 160,6,124,3,161,1,143,18,125,4,116,7,160,8,124,4, - 100,4,161,2,125,5,87,0,53,0,81,0,82,0,88,0, - 87,0,110,22,4,0,116,9,107,10,114,108,1,0,1,0, - 1,0,89,0,100,0,83,0,88,0,124,5,83,0,41,5, - 78,122,5,37,100,46,37,100,114,27,0,0,0,41,2,114, - 139,0,0,0,90,11,115,121,115,95,118,101,114,115,105,111, - 110,114,39,0,0,0,41,10,218,11,68,69,66,85,71,95, - 66,85,73,76,68,218,18,82,69,71,73,83,84,82,89,95, - 75,69,89,95,68,69,66,85,71,218,12,82,69,71,73,83, - 84,82,89,95,75,69,89,114,61,0,0,0,114,8,0,0, - 0,218,12,118,101,114,115,105,111,110,95,105,110,102,111,114, - 194,0,0,0,114,192,0,0,0,90,10,81,117,101,114,121, - 86,97,108,117,101,114,49,0,0,0,41,6,114,193,0,0, - 0,114,139,0,0,0,90,12,114,101,103,105,115,116,114,121, - 95,107,101,121,114,5,0,0,0,90,4,104,107,101,121,218, - 8,102,105,108,101,112,97,116,104,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,218,16,95,115,101,97,114,99, - 104,95,114,101,103,105,115,116,114,121,205,2,0,0,115,24, - 0,0,0,0,2,6,1,8,2,6,1,6,1,16,255,6, - 2,2,1,12,1,26,1,14,1,8,1,122,38,87,105,110, - 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115, - 116,114,121,78,99,4,0,0,0,0,0,0,0,0,0,0, - 0,8,0,0,0,8,0,0,0,67,0,0,0,115,122,0, - 0,0,124,0,160,0,124,1,161,1,125,4,124,4,100,0, - 107,8,114,22,100,0,83,0,122,12,116,1,124,4,131,1, - 1,0,87,0,110,22,4,0,116,2,107,10,114,56,1,0, - 1,0,1,0,89,0,100,0,83,0,88,0,116,3,131,0, - 68,0,93,52,92,2,125,5,125,6,124,4,160,4,116,5, - 124,6,131,1,161,1,114,64,116,6,106,7,124,1,124,5, - 124,1,124,4,131,2,124,4,100,1,141,3,125,7,124,7, - 2,0,1,0,83,0,113,64,100,0,83,0,41,2,78,114, - 180,0,0,0,41,8,114,200,0,0,0,114,48,0,0,0, - 114,49,0,0,0,114,184,0,0,0,114,110,0,0,0,114, - 111,0,0,0,114,134,0,0,0,218,16,115,112,101,99,95, - 102,114,111,109,95,108,111,97,100,101,114,41,8,114,193,0, - 0,0,114,139,0,0,0,114,43,0,0,0,218,6,116,97, - 114,103,101,116,114,199,0,0,0,114,140,0,0,0,114,189, - 0,0,0,114,187,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,9,102,105,110,100,95,115,112, - 101,99,220,2,0,0,115,28,0,0,0,0,2,10,1,8, - 1,4,1,2,1,12,1,14,1,8,1,14,1,14,1,6, - 1,8,1,2,254,6,3,122,31,87,105,110,100,111,119,115, - 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0, - 0,115,34,0,0,0,124,0,160,0,124,1,124,2,161,2, - 125,3,124,3,100,1,107,9,114,26,124,3,106,1,83,0, - 100,1,83,0,100,1,83,0,41,2,122,108,70,105,110,100, - 32,109,111,100,117,108,101,32,110,97,109,101,100,32,105,110, - 32,116,104,101,32,114,101,103,105,115,116,114,121,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, - 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,78,169,2,114,203,0,0,0, - 114,140,0,0,0,169,4,114,193,0,0,0,114,139,0,0, - 0,114,43,0,0,0,114,187,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,11,102,105,110,100, - 95,109,111,100,117,108,101,236,2,0,0,115,8,0,0,0, - 0,7,12,1,8,1,6,2,122,33,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, - 102,105,110,100,95,109,111,100,117,108,101,41,2,78,78,41, - 1,78,41,12,114,125,0,0,0,114,124,0,0,0,114,126, - 0,0,0,114,127,0,0,0,114,197,0,0,0,114,196,0, - 0,0,114,195,0,0,0,218,11,99,108,97,115,115,109,101, - 116,104,111,100,114,194,0,0,0,114,200,0,0,0,114,203, - 0,0,0,114,206,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,191,0,0, - 0,186,2,0,0,115,28,0,0,0,8,2,4,3,2,255, - 2,4,2,255,2,3,4,2,2,1,10,6,2,1,10,14, - 2,1,12,15,2,1,114,191,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 64,0,0,0,115,48,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, - 9,132,0,90,7,100,10,83,0,41,11,218,13,95,76,111, - 97,100,101,114,66,97,115,105,99,115,122,83,66,97,115,101, - 32,99,108,97,115,115,32,111,102,32,99,111,109,109,111,110, - 32,99,111,100,101,32,110,101,101,100,101,100,32,98,121,32, - 98,111,116,104,32,83,111,117,114,99,101,76,111,97,100,101, - 114,32,97,110,100,10,32,32,32,32,83,111,117,114,99,101, - 108,101,115,115,70,105,108,101,76,111,97,100,101,114,46,99, - 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,124, - 0,160,1,124,1,161,1,131,1,100,1,25,0,125,2,124, - 2,160,2,100,2,100,1,161,2,100,3,25,0,125,3,124, - 1,160,3,100,2,161,1,100,4,25,0,125,4,124,3,100, - 5,107,2,111,62,124,4,100,5,107,3,83,0,41,6,122, - 141,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, - 101,99,116,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,32,98,121,32,99,104,101,99,107,105,110,103, - 32,105,102,10,32,32,32,32,32,32,32,32,116,104,101,32, - 112,97,116,104,32,114,101,116,117,114,110,101,100,32,98,121, - 32,103,101,116,95,102,105,108,101,110,97,109,101,32,104,97, - 115,32,97,32,102,105,108,101,110,97,109,101,32,111,102,32, - 39,95,95,105,110,105,116,95,95,46,112,121,39,46,114,38, - 0,0,0,114,70,0,0,0,114,72,0,0,0,114,27,0, - 0,0,218,8,95,95,105,110,105,116,95,95,41,4,114,46, - 0,0,0,114,179,0,0,0,114,42,0,0,0,114,40,0, - 0,0,41,5,114,118,0,0,0,114,139,0,0,0,114,96, - 0,0,0,90,13,102,105,108,101,110,97,109,101,95,98,97, - 115,101,90,9,116,97,105,108,95,110,97,109,101,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,182,0,0, - 0,255,2,0,0,115,8,0,0,0,0,3,18,1,16,1, - 14,1,122,24,95,76,111,97,100,101,114,66,97,115,105,99, - 115,46,105,115,95,112,97,99,107,97,103,101,99,2,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,115,4,0,0,0,100,1,83,0,169,2, - 122,42,85,115,101,32,100,101,102,97,117,108,116,32,115,101, - 109,97,110,116,105,99,115,32,102,111,114,32,109,111,100,117, - 108,101,32,99,114,101,97,116,105,111,110,46,78,114,3,0, - 0,0,169,2,114,118,0,0,0,114,187,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,218,13,99, - 114,101,97,116,101,95,109,111,100,117,108,101,7,3,0,0, - 115,2,0,0,0,0,1,122,27,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,99,114,101,97,116,101,95,109,111, - 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,5,0,0,0,67,0,0,0,115,56,0, - 0,0,124,0,160,0,124,1,106,1,161,1,125,2,124,2, - 100,1,107,8,114,36,116,2,100,2,160,3,124,1,106,1, - 161,1,131,1,130,1,116,4,160,5,116,6,124,2,124,1, - 106,7,161,3,1,0,100,1,83,0,41,3,122,19,69,120, - 101,99,117,116,101,32,116,104,101,32,109,111,100,117,108,101, - 46,78,122,52,99,97,110,110,111,116,32,108,111,97,100,32, - 109,111,100,117,108,101,32,123,33,114,125,32,119,104,101,110, - 32,103,101,116,95,99,111,100,101,40,41,32,114,101,116,117, - 114,110,115,32,78,111,110,101,41,8,218,8,103,101,116,95, - 99,111,100,101,114,125,0,0,0,114,117,0,0,0,114,61, - 0,0,0,114,134,0,0,0,218,25,95,99,97,108,108,95, - 119,105,116,104,95,102,114,97,109,101,115,95,114,101,109,111, - 118,101,100,218,4,101,120,101,99,114,131,0,0,0,41,3, - 114,118,0,0,0,218,6,109,111,100,117,108,101,114,164,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,218,11,101,120,101,99,95,109,111,100,117,108,101,10,3, - 0,0,115,12,0,0,0,0,2,12,1,8,1,6,1,4, - 255,6,2,122,25,95,76,111,97,100,101,114,66,97,115,105, - 99,115,46,101,120,101,99,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,67,0,0,0,115,12,0,0,0,116,0,160,1, - 124,0,124,1,161,2,83,0,41,1,122,26,84,104,105,115, - 32,109,111,100,117,108,101,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,46,41,2,114,134,0,0,0,218,17,95, - 108,111,97,100,95,109,111,100,117,108,101,95,115,104,105,109, - 169,2,114,118,0,0,0,114,139,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,11,108,111,97, - 100,95,109,111,100,117,108,101,18,3,0,0,115,2,0,0, - 0,0,2,122,25,95,76,111,97,100,101,114,66,97,115,105, - 99,115,46,108,111,97,100,95,109,111,100,117,108,101,78,41, - 8,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, - 114,127,0,0,0,114,182,0,0,0,114,212,0,0,0,114, - 217,0,0,0,114,220,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,208,0, - 0,0,250,2,0,0,115,10,0,0,0,8,2,4,3,8, - 8,8,3,8,8,114,208,0,0,0,99,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, - 0,0,0,115,74,0,0,0,101,0,90,1,100,0,90,2, - 100,1,100,2,132,0,90,3,100,3,100,4,132,0,90,4, - 100,5,100,6,132,0,90,5,100,7,100,8,132,0,90,6, - 100,9,100,10,132,0,90,7,100,11,100,12,156,1,100,13, - 100,14,132,2,90,8,100,15,100,16,132,0,90,9,100,17, - 83,0,41,18,218,12,83,111,117,114,99,101,76,111,97,100, - 101,114,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, - 116,0,130,1,100,1,83,0,41,2,122,165,79,112,116,105, - 111,110,97,108,32,109,101,116,104,111,100,32,116,104,97,116, - 32,114,101,116,117,114,110,115,32,116,104,101,32,109,111,100, - 105,102,105,99,97,116,105,111,110,32,116,105,109,101,32,40, - 97,110,32,105,110,116,41,32,102,111,114,32,116,104,101,10, - 32,32,32,32,32,32,32,32,115,112,101,99,105,102,105,101, - 100,32,112,97,116,104,32,40,97,32,115,116,114,41,46,10, - 10,32,32,32,32,32,32,32,32,82,97,105,115,101,115,32, - 79,83,69,114,114,111,114,32,119,104,101,110,32,116,104,101, - 32,112,97,116,104,32,99,97,110,110,111,116,32,98,101,32, - 104,97,110,100,108,101,100,46,10,32,32,32,32,32,32,32, - 32,78,41,1,114,49,0,0,0,169,2,114,118,0,0,0, - 114,43,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101, - 25,3,0,0,115,2,0,0,0,0,6,122,23,83,111,117, - 114,99,101,76,111,97,100,101,114,46,112,97,116,104,95,109, - 116,105,109,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,4,0,0,0,67,0,0,0,115,14,0, - 0,0,100,1,124,0,160,0,124,1,161,1,105,1,83,0, - 41,2,97,158,1,0,0,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,114,101,116,117,114,110,105,110,103, - 32,97,32,109,101,116,97,100,97,116,97,32,100,105,99,116, - 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, - 101,100,10,32,32,32,32,32,32,32,32,112,97,116,104,32, - 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, - 32,32,80,111,115,115,105,98,108,101,32,107,101,121,115,58, - 10,32,32,32,32,32,32,32,32,45,32,39,109,116,105,109, - 101,39,32,40,109,97,110,100,97,116,111,114,121,41,32,105, - 115,32,116,104,101,32,110,117,109,101,114,105,99,32,116,105, - 109,101,115,116,97,109,112,32,111,102,32,108,97,115,116,32, - 115,111,117,114,99,101,10,32,32,32,32,32,32,32,32,32, - 32,99,111,100,101,32,109,111,100,105,102,105,99,97,116,105, - 111,110,59,10,32,32,32,32,32,32,32,32,45,32,39,115, - 105,122,101,39,32,40,111,112,116,105,111,110,97,108,41,32, - 105,115,32,116,104,101,32,115,105,122,101,32,105,110,32,98, - 121,116,101,115,32,111,102,32,116,104,101,32,115,111,117,114, - 99,101,32,99,111,100,101,46,10,10,32,32,32,32,32,32, - 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, - 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, - 115,32,116,104,101,32,108,111,97,100,101,114,32,116,111,32, - 114,101,97,100,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,115,46,10,32,32,32,32,32,32,32,32,82,97,105, - 115,101,115,32,79,83,69,114,114,111,114,32,119,104,101,110, - 32,116,104,101,32,112,97,116,104,32,99,97,110,110,111,116, - 32,98,101,32,104,97,110,100,108,101,100,46,10,32,32,32, - 32,32,32,32,32,114,169,0,0,0,41,1,114,223,0,0, - 0,114,222,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,10,112,97,116,104,95,115,116,97,116, - 115,33,3,0,0,115,2,0,0,0,0,12,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, - 115,116,97,116,115,99,4,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,12, - 0,0,0,124,0,160,0,124,2,124,3,161,2,83,0,41, - 1,122,228,79,112,116,105,111,110,97,108,32,109,101,116,104, - 111,100,32,119,104,105,99,104,32,119,114,105,116,101,115,32, - 100,97,116,97,32,40,98,121,116,101,115,41,32,116,111,32, - 97,32,102,105,108,101,32,112,97,116,104,32,40,97,32,115, - 116,114,41,46,10,10,32,32,32,32,32,32,32,32,73,109, - 112,108,101,109,101,110,116,105,110,103,32,116,104,105,115,32, - 109,101,116,104,111,100,32,97,108,108,111,119,115,32,102,111, - 114,32,116,104,101,32,119,114,105,116,105,110,103,32,111,102, - 32,98,121,116,101,99,111,100,101,32,102,105,108,101,115,46, - 10,10,32,32,32,32,32,32,32,32,84,104,101,32,115,111, - 117,114,99,101,32,112,97,116,104,32,105,115,32,110,101,101, - 100,101,100,32,105,110,32,111,114,100,101,114,32,116,111,32, - 99,111,114,114,101,99,116,108,121,32,116,114,97,110,115,102, - 101,114,32,112,101,114,109,105,115,115,105,111,110,115,10,32, - 32,32,32,32,32,32,32,41,1,218,8,115,101,116,95,100, - 97,116,97,41,4,114,118,0,0,0,114,107,0,0,0,90, - 10,99,97,99,104,101,95,112,97,116,104,114,25,0,0,0, + 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,44, + 32,116,104,111,117,103,104,46,41,10,10,32,32,32,32,42, + 110,97,109,101,42,32,105,115,32,116,104,101,32,110,97,109, + 101,32,111,102,32,116,104,101,32,109,111,100,117,108,101,32, + 98,101,105,110,103,32,105,109,112,111,114,116,101,100,46,32, + 73,116,32,105,115,32,117,115,101,100,32,102,111,114,32,108, + 111,103,103,105,110,103,46,10,10,32,32,32,32,42,101,120, + 99,95,100,101,116,97,105,108,115,42,32,105,115,32,97,32, + 100,105,99,116,105,111,110,97,114,121,32,112,97,115,115,101, + 100,32,116,111,32,73,109,112,111,114,116,69,114,114,111,114, + 32,105,102,32,105,116,32,114,97,105,115,101,100,32,102,111, + 114,10,32,32,32,32,105,109,112,114,111,118,101,100,32,100, + 101,98,117,103,103,105,110,103,46,10,10,32,32,32,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,32,119,104,101,110,32,116,104,101,32,109,97, + 103,105,99,32,110,117,109,98,101,114,32,105,115,32,105,110, + 99,111,114,114,101,99,116,32,111,114,32,119,104,101,110,32, + 116,104,101,32,102,108,97,103,115,10,32,32,32,32,102,105, + 101,108,100,32,105,115,32,105,110,118,97,108,105,100,46,32, + 69,79,70,69,114,114,111,114,32,105,115,32,114,97,105,115, + 101,100,32,119,104,101,110,32,116,104,101,32,100,97,116,97, + 32,105,115,32,102,111,117,110,100,32,116,111,32,98,101,32, + 116,114,117,110,99,97,116,101,100,46,10,10,32,32,32,32, + 78,114,15,0,0,0,122,20,98,97,100,32,109,97,103,105, + 99,32,110,117,109,98,101,114,32,105,110,32,122,2,58,32, + 250,2,123,125,233,16,0,0,0,122,40,114,101,97,99,104, + 101,100,32,69,79,70,32,119,104,105,108,101,32,114,101,97, + 100,105,110,103,32,112,121,99,32,104,101,97,100,101,114,32, + 111,102,32,233,8,0,0,0,233,252,255,255,255,122,14,105, + 110,118,97,108,105,100,32,102,108,97,103,115,32,122,4,32, + 105,110,32,41,7,218,12,77,65,71,73,67,95,78,85,77, + 66,69,82,114,134,0,0,0,218,16,95,118,101,114,98,111, + 115,101,95,109,101,115,115,97,103,101,114,117,0,0,0,114, + 22,0,0,0,218,8,69,79,70,69,114,114,111,114,114,26, + 0,0,0,41,6,114,25,0,0,0,114,116,0,0,0,218, + 11,101,120,99,95,100,101,116,97,105,108,115,90,5,109,97, + 103,105,99,114,92,0,0,0,114,82,0,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,218,13,95,99, + 108,97,115,115,105,102,121,95,112,121,99,240,1,0,0,115, + 28,0,0,0,0,16,12,1,8,1,16,1,12,1,12,1, + 12,1,10,1,12,1,8,1,16,2,8,1,16,1,12,1, + 114,152,0,0,0,99,5,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,112, + 0,0,0,116,0,124,0,100,1,100,2,133,2,25,0,131, + 1,124,1,100,3,64,0,107,3,114,58,100,4,124,3,155, + 2,157,2,125,5,116,1,160,2,100,5,124,5,161,2,1, + 0,116,3,124,5,102,1,124,4,142,1,130,1,124,2,100, + 6,107,9,114,108,116,0,124,0,100,2,100,7,133,2,25, + 0,131,1,124,2,100,3,64,0,107,3,114,108,116,3,100, + 4,124,3,155,2,157,2,102,1,124,4,142,1,130,1,100, + 6,83,0,41,8,97,7,2,0,0,86,97,108,105,100,97, + 116,101,32,97,32,112,121,99,32,97,103,97,105,110,115,116, + 32,116,104,101,32,115,111,117,114,99,101,32,108,97,115,116, + 45,109,111,100,105,102,105,101,100,32,116,105,109,101,46,10, + 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116, + 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116, + 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110, + 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32, + 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101, + 113,117,105,114,101,100,46,41,10,10,32,32,32,32,42,115, + 111,117,114,99,101,95,109,116,105,109,101,42,32,105,115,32, + 116,104,101,32,108,97,115,116,32,109,111,100,105,102,105,101, + 100,32,116,105,109,101,115,116,97,109,112,32,111,102,32,116, + 104,101,32,115,111,117,114,99,101,32,102,105,108,101,46,10, + 10,32,32,32,32,42,115,111,117,114,99,101,95,115,105,122, + 101,42,32,105,115,32,78,111,110,101,32,111,114,32,116,104, + 101,32,115,105,122,101,32,111,102,32,116,104,101,32,115,111, + 117,114,99,101,32,102,105,108,101,32,105,110,32,98,121,116, + 101,115,46,10,10,32,32,32,32,42,110,97,109,101,42,32, + 105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116, + 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32, + 105,109,112,111,114,116,101,100,46,32,73,116,32,105,115,32, + 117,115,101,100,32,102,111,114,32,108,111,103,103,105,110,103, + 46,10,10,32,32,32,32,42,101,120,99,95,100,101,116,97, + 105,108,115,42,32,105,115,32,97,32,100,105,99,116,105,111, + 110,97,114,121,32,112,97,115,115,101,100,32,116,111,32,73, + 109,112,111,114,116,69,114,114,111,114,32,105,102,32,105,116, + 32,114,97,105,115,101,100,32,102,111,114,10,32,32,32,32, + 105,109,112,114,111,118,101,100,32,100,101,98,117,103,103,105, + 110,103,46,10,10,32,32,32,32,65,110,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101, + 100,32,105,102,32,116,104,101,32,98,121,116,101,99,111,100, + 101,32,105,115,32,115,116,97,108,101,46,10,10,32,32,32, + 32,114,146,0,0,0,233,12,0,0,0,114,14,0,0,0, + 122,22,98,121,116,101,99,111,100,101,32,105,115,32,115,116, + 97,108,101,32,102,111,114,32,114,144,0,0,0,78,114,145, + 0,0,0,41,4,114,26,0,0,0,114,134,0,0,0,114, + 149,0,0,0,114,117,0,0,0,41,6,114,25,0,0,0, + 218,12,115,111,117,114,99,101,95,109,116,105,109,101,218,11, + 115,111,117,114,99,101,95,115,105,122,101,114,116,0,0,0, + 114,151,0,0,0,114,92,0,0,0,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,218,23,95,118,97,108,105, + 100,97,116,101,95,116,105,109,101,115,116,97,109,112,95,112, + 121,99,17,2,0,0,115,16,0,0,0,0,19,24,1,10, + 1,12,1,12,1,8,1,22,255,2,2,114,156,0,0,0, + 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,3,0,0,0,67,0,0,0,115,38,0,0,0,124,0, + 100,1,100,2,133,2,25,0,124,1,107,3,114,34,116,0, + 100,3,124,2,155,2,157,2,102,1,124,3,142,1,130,1, + 100,4,83,0,41,5,97,243,1,0,0,86,97,108,105,100, + 97,116,101,32,97,32,104,97,115,104,45,98,97,115,101,100, + 32,112,121,99,32,98,121,32,99,104,101,99,107,105,110,103, + 32,116,104,101,32,114,101,97,108,32,115,111,117,114,99,101, + 32,104,97,115,104,32,97,103,97,105,110,115,116,32,116,104, + 101,32,111,110,101,32,105,110,10,32,32,32,32,116,104,101, + 32,112,121,99,32,104,101,97,100,101,114,46,10,10,32,32, + 32,32,42,100,97,116,97,42,32,105,115,32,116,104,101,32, + 99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32, + 112,121,99,32,102,105,108,101,46,32,40,79,110,108,121,32, + 116,104,101,32,102,105,114,115,116,32,49,54,32,98,121,116, + 101,115,32,97,114,101,10,32,32,32,32,114,101,113,117,105, + 114,101,100,46,41,10,10,32,32,32,32,42,115,111,117,114, + 99,101,95,104,97,115,104,42,32,105,115,32,116,104,101,32, + 105,109,112,111,114,116,108,105,98,46,117,116,105,108,46,115, + 111,117,114,99,101,95,104,97,115,104,40,41,32,111,102,32, + 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,46, + 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32, + 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32, + 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112, + 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101, + 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10, + 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115, + 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114, + 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111, + 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97, + 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112, + 114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46, + 10,10,32,32,32,32,65,110,32,73,109,112,111,114,116,69, + 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,105, + 102,32,116,104,101,32,98,121,116,101,99,111,100,101,32,105, + 115,32,115,116,97,108,101,46,10,10,32,32,32,32,114,146, + 0,0,0,114,145,0,0,0,122,46,104,97,115,104,32,105, + 110,32,98,121,116,101,99,111,100,101,32,100,111,101,115,110, + 39,116,32,109,97,116,99,104,32,104,97,115,104,32,111,102, + 32,115,111,117,114,99,101,32,78,41,1,114,117,0,0,0, + 41,4,114,25,0,0,0,218,11,115,111,117,114,99,101,95, + 104,97,115,104,114,116,0,0,0,114,151,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,18,95, + 118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,121, + 99,45,2,0,0,115,12,0,0,0,0,17,16,1,2,1, + 8,255,2,2,2,254,114,158,0,0,0,99,4,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, + 67,0,0,0,115,80,0,0,0,116,0,160,1,124,0,161, + 1,125,4,116,2,124,4,116,3,131,2,114,56,116,4,160, + 5,100,1,124,2,161,2,1,0,124,3,100,2,107,9,114, + 52,116,6,160,7,124,4,124,3,161,2,1,0,124,4,83, + 0,116,8,100,3,160,9,124,2,161,1,124,1,124,2,100, + 4,141,3,130,1,100,2,83,0,41,5,122,35,67,111,109, + 112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115, + 32,102,111,117,110,100,32,105,110,32,97,32,112,121,99,46, + 122,21,99,111,100,101,32,111,98,106,101,99,116,32,102,114, + 111,109,32,123,33,114,125,78,122,23,78,111,110,45,99,111, + 100,101,32,111,98,106,101,99,116,32,105,110,32,123,33,114, + 125,169,2,114,116,0,0,0,114,43,0,0,0,41,10,218, + 7,109,97,114,115,104,97,108,90,5,108,111,97,100,115,218, + 10,105,115,105,110,115,116,97,110,99,101,218,10,95,99,111, + 100,101,95,116,121,112,101,114,134,0,0,0,114,149,0,0, + 0,218,4,95,105,109,112,90,16,95,102,105,120,95,99,111, + 95,102,105,108,101,110,97,109,101,114,117,0,0,0,114,61, + 0,0,0,41,5,114,25,0,0,0,114,116,0,0,0,114, + 106,0,0,0,114,107,0,0,0,218,4,99,111,100,101,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,17, + 95,99,111,109,112,105,108,101,95,98,121,116,101,99,111,100, + 101,69,2,0,0,115,20,0,0,0,0,2,10,1,10,1, + 12,1,8,1,12,1,4,2,10,1,2,0,2,255,114,165, + 0,0,0,114,72,0,0,0,99,3,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,0, + 0,115,70,0,0,0,116,0,116,1,131,1,125,3,124,3, + 160,2,116,3,100,1,131,1,161,1,1,0,124,3,160,2, + 116,3,124,1,131,1,161,1,1,0,124,3,160,2,116,3, + 124,2,131,1,161,1,1,0,124,3,160,2,116,4,160,5, + 124,0,161,1,161,1,1,0,124,3,83,0,41,2,122,43, + 80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,97, + 32,102,111,114,32,97,32,116,105,109,101,115,116,97,109,112, + 45,98,97,115,101,100,32,112,121,99,46,114,72,0,0,0, + 41,6,218,9,98,121,116,101,97,114,114,97,121,114,148,0, + 0,0,218,6,101,120,116,101,110,100,114,20,0,0,0,114, + 160,0,0,0,218,5,100,117,109,112,115,41,4,114,164,0, + 0,0,218,5,109,116,105,109,101,114,155,0,0,0,114,25, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,218,22,95,99,111,100,101,95,116,111,95,116,105,109, + 101,115,116,97,109,112,95,112,121,99,82,2,0,0,115,12, + 0,0,0,0,2,8,1,14,1,14,1,14,1,16,1,114, + 170,0,0,0,84,99,3,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,80, + 0,0,0,116,0,116,1,131,1,125,3,100,1,124,2,100, + 1,62,0,66,0,125,4,124,3,160,2,116,3,124,4,131, + 1,161,1,1,0,116,4,124,1,131,1,100,2,107,2,115, + 50,74,0,130,1,124,3,160,2,124,1,161,1,1,0,124, + 3,160,2,116,5,160,6,124,0,161,1,161,1,1,0,124, + 3,83,0,41,3,122,38,80,114,111,100,117,99,101,32,116, + 104,101,32,100,97,116,97,32,102,111,114,32,97,32,104,97, + 115,104,45,98,97,115,101,100,32,112,121,99,46,114,38,0, + 0,0,114,146,0,0,0,41,7,114,166,0,0,0,114,148, + 0,0,0,114,167,0,0,0,114,20,0,0,0,114,22,0, + 0,0,114,160,0,0,0,114,168,0,0,0,41,5,114,164, + 0,0,0,114,157,0,0,0,90,7,99,104,101,99,107,101, + 100,114,25,0,0,0,114,82,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,100, + 101,95,116,111,95,104,97,115,104,95,112,121,99,92,2,0, + 0,115,14,0,0,0,0,2,8,1,12,1,14,1,16,1, + 10,1,16,1,114,171,0,0,0,99,1,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0, + 0,0,115,62,0,0,0,100,1,100,2,108,0,125,1,116, + 1,160,2,124,0,161,1,106,3,125,2,124,1,160,4,124, + 2,161,1,125,3,116,1,160,5,100,2,100,3,161,2,125, + 4,124,4,160,6,124,0,160,6,124,3,100,1,25,0,161, + 1,161,1,83,0,41,4,122,121,68,101,99,111,100,101,32, + 98,121,116,101,115,32,114,101,112,114,101,115,101,110,116,105, + 110,103,32,115,111,117,114,99,101,32,99,111,100,101,32,97, + 110,100,32,114,101,116,117,114,110,32,116,104,101,32,115,116, + 114,105,110,103,46,10,10,32,32,32,32,85,110,105,118,101, + 114,115,97,108,32,110,101,119,108,105,110,101,32,115,117,112, + 112,111,114,116,32,105,115,32,117,115,101,100,32,105,110,32, + 116,104,101,32,100,101,99,111,100,105,110,103,46,10,32,32, + 32,32,114,72,0,0,0,78,84,41,7,218,8,116,111,107, + 101,110,105,122,101,114,63,0,0,0,90,7,66,121,116,101, + 115,73,79,90,8,114,101,97,100,108,105,110,101,90,15,100, + 101,116,101,99,116,95,101,110,99,111,100,105,110,103,90,25, + 73,110,99,114,101,109,101,110,116,97,108,78,101,119,108,105, + 110,101,68,101,99,111,100,101,114,218,6,100,101,99,111,100, + 101,41,5,218,12,115,111,117,114,99,101,95,98,121,116,101, + 115,114,172,0,0,0,90,21,115,111,117,114,99,101,95,98, + 121,116,101,115,95,114,101,97,100,108,105,110,101,218,8,101, + 110,99,111,100,105,110,103,90,15,110,101,119,108,105,110,101, + 95,100,101,99,111,100,101,114,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,218,13,100,101,99,111,100,101,95, + 115,111,117,114,99,101,103,2,0,0,115,10,0,0,0,0, + 5,8,1,12,1,10,1,12,1,114,176,0,0,0,169,2, + 114,140,0,0,0,218,26,115,117,98,109,111,100,117,108,101, + 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110, + 115,99,2,0,0,0,0,0,0,0,2,0,0,0,9,0, + 0,0,8,0,0,0,67,0,0,0,115,16,1,0,0,124, + 1,100,1,107,8,114,60,100,2,125,1,116,0,124,2,100, + 3,131,2,114,70,122,14,124,2,160,1,124,0,161,1,125, + 1,87,0,113,70,4,0,116,2,107,10,114,56,1,0,1, + 0,1,0,89,0,113,70,48,0,110,10,116,3,160,4,124, + 1,161,1,125,1,116,5,106,6,124,0,124,2,124,1,100, + 4,141,3,125,4,100,5,124,4,95,7,124,2,100,1,107, + 8,114,154,116,8,131,0,68,0,93,42,92,2,125,5,125, + 6,124,1,160,9,116,10,124,6,131,1,161,1,114,106,124, + 5,124,0,124,1,131,2,125,2,124,2,124,4,95,11,1, + 0,113,154,113,106,100,1,83,0,124,3,116,12,107,8,114, + 220,116,0,124,2,100,6,131,2,114,226,122,14,124,2,160, + 13,124,0,161,1,125,7,87,0,110,20,4,0,116,2,107, + 10,114,206,1,0,1,0,1,0,89,0,113,226,48,0,124, + 7,114,226,103,0,124,4,95,14,110,6,124,3,124,4,95, + 14,124,4,106,14,103,0,107,2,144,1,114,12,124,1,144, + 1,114,12,116,15,124,1,131,1,100,7,25,0,125,8,124, + 4,106,14,160,16,124,8,161,1,1,0,124,4,83,0,41, + 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, + 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, + 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, + 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, + 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, + 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, + 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, + 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, + 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, + 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, + 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, + 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, + 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, + 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, + 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, + 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, + 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, + 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, + 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, + 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, + 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, + 12,103,101,116,95,102,105,108,101,110,97,109,101,169,1,218, + 6,111,114,105,103,105,110,84,218,10,105,115,95,112,97,99, + 107,97,103,101,114,72,0,0,0,41,17,114,128,0,0,0, + 114,179,0,0,0,114,117,0,0,0,114,2,0,0,0,114, + 78,0,0,0,114,134,0,0,0,218,10,77,111,100,117,108, + 101,83,112,101,99,90,13,95,115,101,116,95,102,105,108,101, + 97,116,116,114,218,27,95,103,101,116,95,115,117,112,112,111, + 114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,114, + 115,114,110,0,0,0,114,111,0,0,0,114,140,0,0,0, + 218,9,95,80,79,80,85,76,65,84,69,114,182,0,0,0, + 114,178,0,0,0,114,46,0,0,0,218,6,97,112,112,101, + 110,100,41,9,114,116,0,0,0,90,8,108,111,99,97,116, + 105,111,110,114,140,0,0,0,114,178,0,0,0,218,4,115, + 112,101,99,218,12,108,111,97,100,101,114,95,99,108,97,115, + 115,218,8,115,117,102,102,105,120,101,115,114,182,0,0,0, + 90,7,100,105,114,110,97,109,101,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,218,23,115,112,101,99,95,102, + 114,111,109,95,102,105,108,101,95,108,111,99,97,116,105,111, + 110,120,2,0,0,115,62,0,0,0,0,12,8,4,4,1, + 10,2,2,1,14,1,14,1,8,2,10,8,16,1,6,3, + 8,1,14,1,14,1,10,1,6,1,6,2,4,3,8,2, + 10,1,2,1,14,1,14,1,6,2,4,1,8,2,6,1, + 12,1,6,1,12,1,12,2,114,190,0,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, + 0,0,64,0,0,0,115,80,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,90,4,100,3,90,5,100, + 4,90,6,101,7,100,5,100,6,132,0,131,1,90,8,101, + 7,100,7,100,8,132,0,131,1,90,9,101,7,100,14,100, + 10,100,11,132,1,131,1,90,10,101,7,100,15,100,12,100, + 13,132,1,131,1,90,11,100,9,83,0,41,16,218,21,87, + 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, + 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, + 102,105,110,100,101,114,32,102,111,114,32,109,111,100,117,108, + 101,115,32,100,101,99,108,97,114,101,100,32,105,110,32,116, + 104,101,32,87,105,110,100,111,119,115,32,114,101,103,105,115, + 116,114,121,46,122,59,83,111,102,116,119,97,114,101,92,80, + 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, + 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, + 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, + 125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,104, + 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, + 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, + 108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,68, + 101,98,117,103,70,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,56, + 0,0,0,122,16,116,0,160,1,116,0,106,2,124,1,161, + 2,87,0,83,0,4,0,116,3,107,10,114,50,1,0,1, + 0,1,0,116,0,160,1,116,0,106,4,124,1,161,2,6, + 0,89,0,83,0,48,0,100,0,83,0,114,109,0,0,0, + 41,5,218,7,95,119,105,110,114,101,103,90,7,79,112,101, + 110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,69, + 78,84,95,85,83,69,82,114,49,0,0,0,90,18,72,75, + 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69, + 41,2,218,3,99,108,115,114,5,0,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,218,14,95,111,112, + 101,110,95,114,101,103,105,115,116,114,121,200,2,0,0,115, + 8,0,0,0,0,2,2,1,16,1,14,1,122,36,87,105, + 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, + 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, + 114,121,99,2,0,0,0,0,0,0,0,0,0,0,0,6, + 0,0,0,8,0,0,0,67,0,0,0,115,134,0,0,0, + 124,0,106,0,114,14,124,0,106,1,125,2,110,6,124,0, + 106,2,125,2,124,2,106,3,124,1,100,1,116,4,106,5, + 100,0,100,2,133,2,25,0,22,0,100,3,141,2,125,3, + 122,58,124,0,160,6,124,3,161,1,143,28,125,4,116,7, + 160,8,124,4,100,4,161,2,125,5,87,0,100,0,4,0, + 4,0,131,3,1,0,110,16,49,0,115,94,48,0,1,0, + 1,0,1,0,89,0,1,0,87,0,110,22,4,0,116,9, + 107,10,114,128,1,0,1,0,1,0,89,0,100,0,83,0, + 48,0,124,5,83,0,41,5,78,122,5,37,100,46,37,100, + 114,27,0,0,0,41,2,114,139,0,0,0,90,11,115,121, + 115,95,118,101,114,115,105,111,110,114,39,0,0,0,41,10, + 218,11,68,69,66,85,71,95,66,85,73,76,68,218,18,82, + 69,71,73,83,84,82,89,95,75,69,89,95,68,69,66,85, + 71,218,12,82,69,71,73,83,84,82,89,95,75,69,89,114, + 61,0,0,0,114,8,0,0,0,218,12,118,101,114,115,105, + 111,110,95,105,110,102,111,114,194,0,0,0,114,192,0,0, + 0,90,10,81,117,101,114,121,86,97,108,117,101,114,49,0, + 0,0,41,6,114,193,0,0,0,114,139,0,0,0,90,12, + 114,101,103,105,115,116,114,121,95,107,101,121,114,5,0,0, + 0,90,4,104,107,101,121,218,8,102,105,108,101,112,97,116, + 104,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,16,95,115,101,97,114,99,104,95,114,101,103,105,115,116, + 114,121,207,2,0,0,115,24,0,0,0,0,2,6,1,8, + 2,6,1,6,1,16,255,6,2,2,1,12,1,46,1,14, + 1,8,1,122,38,87,105,110,100,111,119,115,82,101,103,105, + 115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114, + 99,104,95,114,101,103,105,115,116,114,121,78,99,4,0,0, + 0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0, + 0,67,0,0,0,115,122,0,0,0,124,0,160,0,124,1, + 161,1,125,4,124,4,100,0,107,8,114,22,100,0,83,0, + 122,12,116,1,124,4,131,1,1,0,87,0,110,22,4,0, + 116,2,107,10,114,56,1,0,1,0,1,0,89,0,100,0, + 83,0,48,0,116,3,131,0,68,0,93,52,92,2,125,5, + 125,6,124,4,160,4,116,5,124,6,131,1,161,1,114,64, + 116,6,106,7,124,1,124,5,124,1,124,4,131,2,124,4, + 100,1,141,3,125,7,124,7,2,0,1,0,83,0,113,64, + 100,0,83,0,41,2,78,114,180,0,0,0,41,8,114,200, + 0,0,0,114,48,0,0,0,114,49,0,0,0,114,184,0, + 0,0,114,110,0,0,0,114,111,0,0,0,114,134,0,0, + 0,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97, + 100,101,114,41,8,114,193,0,0,0,114,139,0,0,0,114, + 43,0,0,0,218,6,116,97,114,103,101,116,114,199,0,0, + 0,114,140,0,0,0,114,189,0,0,0,114,187,0,0,0, 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, - 15,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101, - 47,3,0,0,115,2,0,0,0,0,8,122,28,83,111,117, - 114,99,101,76,111,97,100,101,114,46,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,99,3,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,1,0,0,0,67,0, - 0,0,115,4,0,0,0,100,1,83,0,41,2,122,150,79, - 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,119, - 104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,97, - 32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,105, - 108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,46, - 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, - 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, - 111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,104, - 101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, - 32,32,32,32,32,78,114,3,0,0,0,41,3,114,118,0, - 0,0,114,43,0,0,0,114,25,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,225,0,0,0, - 57,3,0,0,115,2,0,0,0,0,1,122,21,83,111,117, - 114,99,101,76,111,97,100,101,114,46,115,101,116,95,100,97, - 116,97,99,2,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,10,0,0,0,67,0,0,0,115,82,0,0,0, - 124,0,160,0,124,1,161,1,125,2,122,14,124,0,160,1, - 124,2,161,1,125,3,87,0,110,48,4,0,116,2,107,10, - 114,72,1,0,125,4,1,0,122,18,116,3,100,1,124,1, - 100,2,141,2,124,4,130,2,87,0,53,0,100,3,125,4, - 126,4,88,0,89,0,110,2,88,0,116,4,124,3,131,1, - 83,0,41,4,122,52,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,103, - 101,116,95,115,111,117,114,99,101,46,122,39,115,111,117,114, - 99,101,32,110,111,116,32,97,118,97,105,108,97,98,108,101, - 32,116,104,114,111,117,103,104,32,103,101,116,95,100,97,116, - 97,40,41,114,115,0,0,0,78,41,5,114,179,0,0,0, - 218,8,103,101,116,95,100,97,116,97,114,49,0,0,0,114, - 117,0,0,0,114,176,0,0,0,41,5,114,118,0,0,0, - 114,139,0,0,0,114,43,0,0,0,114,174,0,0,0,218, - 3,101,120,99,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,64, - 3,0,0,115,20,0,0,0,0,2,10,1,2,1,14,1, - 16,1,4,1,2,255,4,1,2,255,20,2,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115, - 111,117,114,99,101,114,104,0,0,0,41,1,218,9,95,111, - 112,116,105,109,105,122,101,99,3,0,0,0,0,0,0,0, - 1,0,0,0,4,0,0,0,8,0,0,0,67,0,0,0, - 115,22,0,0,0,116,0,106,1,116,2,124,1,124,2,100, - 1,100,2,124,3,100,3,141,6,83,0,41,4,122,130,82, - 101,116,117,114,110,32,116,104,101,32,99,111,100,101,32,111, - 98,106,101,99,116,32,99,111,109,112,105,108,101,100,32,102, - 114,111,109,32,115,111,117,114,99,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,39,100,97,116,97,39,32, - 97,114,103,117,109,101,110,116,32,99,97,110,32,98,101,32, - 97,110,121,32,111,98,106,101,99,116,32,116,121,112,101,32, - 116,104,97,116,32,99,111,109,112,105,108,101,40,41,32,115, - 117,112,112,111,114,116,115,46,10,32,32,32,32,32,32,32, - 32,114,215,0,0,0,84,41,2,218,12,100,111,110,116,95, - 105,110,104,101,114,105,116,114,83,0,0,0,41,3,114,134, - 0,0,0,114,214,0,0,0,218,7,99,111,109,112,105,108, - 101,41,4,114,118,0,0,0,114,25,0,0,0,114,43,0, - 0,0,114,230,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,14,115,111,117,114,99,101,95,116, - 111,95,99,111,100,101,74,3,0,0,115,8,0,0,0,0, - 5,12,1,2,0,2,255,122,27,83,111,117,114,99,101,76, - 111,97,100,101,114,46,115,111,117,114,99,101,95,116,111,95, - 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, - 0,15,0,0,0,9,0,0,0,67,0,0,0,115,34,2, - 0,0,124,0,160,0,124,1,161,1,125,2,100,1,125,3, - 100,1,125,4,100,1,125,5,100,2,125,6,100,3,125,7, - 122,12,116,1,124,2,131,1,125,8,87,0,110,26,4,0, - 116,2,107,10,114,68,1,0,1,0,1,0,100,1,125,8, - 89,0,144,1,110,48,88,0,122,14,124,0,160,3,124,2, - 161,1,125,9,87,0,110,22,4,0,116,4,107,10,114,106, - 1,0,1,0,1,0,89,0,144,1,110,10,88,0,116,5, - 124,9,100,4,25,0,131,1,125,3,122,14,124,0,160,6, - 124,8,161,1,125,10,87,0,110,20,4,0,116,4,107,10, - 114,154,1,0,1,0,1,0,89,0,110,218,88,0,124,1, - 124,8,100,5,156,2,125,11,122,148,116,7,124,10,124,1, - 124,11,131,3,125,12,116,8,124,10,131,1,100,6,100,1, - 133,2,25,0,125,13,124,12,100,7,64,0,100,8,107,3, - 125,6,124,6,144,1,114,36,124,12,100,9,64,0,100,8, - 107,3,125,7,116,9,106,10,100,10,107,3,144,1,114,56, - 124,7,115,254,116,9,106,10,100,11,107,2,144,1,114,56, - 124,0,160,6,124,2,161,1,125,4,116,9,160,11,116,12, - 124,4,161,2,125,5,116,13,124,10,124,5,124,1,124,11, - 131,4,1,0,110,20,116,14,124,10,124,3,124,9,100,12, - 25,0,124,1,124,11,131,5,1,0,87,0,110,26,4,0, - 116,15,116,16,102,2,107,10,144,1,114,84,1,0,1,0, - 1,0,89,0,110,32,88,0,116,17,160,18,100,13,124,8, - 124,2,161,3,1,0,116,19,124,13,124,1,124,8,124,2, - 100,14,141,4,83,0,124,4,100,1,107,8,144,1,114,136, - 124,0,160,6,124,2,161,1,125,4,124,0,160,20,124,4, - 124,2,161,2,125,14,116,17,160,18,100,15,124,2,161,2, - 1,0,116,21,106,22,144,2,115,30,124,8,100,1,107,9, - 144,2,114,30,124,3,100,1,107,9,144,2,114,30,124,6, - 144,1,114,228,124,5,100,1,107,8,144,1,114,214,116,9, - 160,11,124,4,161,1,125,5,116,23,124,14,124,5,124,7, - 131,3,125,10,110,16,116,24,124,14,124,3,116,25,124,4, - 131,1,131,3,125,10,122,18,124,0,160,26,124,2,124,8, - 124,10,161,3,1,0,87,0,110,22,4,0,116,2,107,10, - 144,2,114,28,1,0,1,0,1,0,89,0,110,2,88,0, - 124,14,83,0,41,16,122,190,67,111,110,99,114,101,116,101, - 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, - 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, - 46,103,101,116,95,99,111,100,101,46,10,10,32,32,32,32, - 32,32,32,32,82,101,97,100,105,110,103,32,111,102,32,98, - 121,116,101,99,111,100,101,32,114,101,113,117,105,114,101,115, - 32,112,97,116,104,95,115,116,97,116,115,32,116,111,32,98, - 101,32,105,109,112,108,101,109,101,110,116,101,100,46,32,84, - 111,32,119,114,105,116,101,10,32,32,32,32,32,32,32,32, - 98,121,116,101,99,111,100,101,44,32,115,101,116,95,100,97, - 116,97,32,109,117,115,116,32,97,108,115,111,32,98,101,32, - 105,109,112,108,101,109,101,110,116,101,100,46,10,10,32,32, - 32,32,32,32,32,32,78,70,84,114,169,0,0,0,114,159, - 0,0,0,114,145,0,0,0,114,38,0,0,0,114,72,0, - 0,0,114,27,0,0,0,90,5,110,101,118,101,114,90,6, - 97,108,119,97,121,115,218,4,115,105,122,101,122,13,123,125, - 32,109,97,116,99,104,101,115,32,123,125,41,3,114,116,0, - 0,0,114,106,0,0,0,114,107,0,0,0,122,19,99,111, - 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, - 125,41,27,114,179,0,0,0,114,97,0,0,0,114,81,0, - 0,0,114,224,0,0,0,114,49,0,0,0,114,17,0,0, - 0,114,227,0,0,0,114,152,0,0,0,218,10,109,101,109, - 111,114,121,118,105,101,119,114,163,0,0,0,90,21,99,104, - 101,99,107,95,104,97,115,104,95,98,97,115,101,100,95,112, - 121,99,115,114,157,0,0,0,218,17,95,82,65,87,95,77, - 65,71,73,67,95,78,85,77,66,69,82,114,158,0,0,0, - 114,156,0,0,0,114,117,0,0,0,114,150,0,0,0,114, - 134,0,0,0,114,149,0,0,0,114,165,0,0,0,114,233, - 0,0,0,114,8,0,0,0,218,19,100,111,110,116,95,119, - 114,105,116,101,95,98,121,116,101,99,111,100,101,114,171,0, - 0,0,114,170,0,0,0,114,22,0,0,0,114,226,0,0, - 0,41,15,114,118,0,0,0,114,139,0,0,0,114,107,0, - 0,0,114,154,0,0,0,114,174,0,0,0,114,157,0,0, - 0,90,10,104,97,115,104,95,98,97,115,101,100,90,12,99, - 104,101,99,107,95,115,111,117,114,99,101,114,106,0,0,0, - 218,2,115,116,114,25,0,0,0,114,151,0,0,0,114,82, - 0,0,0,90,10,98,121,116,101,115,95,100,97,116,97,90, - 11,99,111,100,101,95,111,98,106,101,99,116,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,213,0,0,0, - 82,3,0,0,115,152,0,0,0,0,7,10,1,4,1,4, - 1,4,1,4,1,4,1,2,1,12,1,14,1,12,2,2, - 1,14,1,14,1,8,2,12,1,2,1,14,1,14,1,6, - 3,2,1,2,254,6,4,2,1,12,1,16,1,12,1,6, - 1,12,1,12,1,2,255,2,2,8,254,4,3,10,1,4, - 1,2,1,2,254,4,4,8,1,2,255,6,3,2,1,2, - 1,2,1,6,1,2,1,2,251,8,7,20,1,6,2,8, - 1,2,255,4,2,6,1,2,1,2,254,6,3,10,1,10, - 1,12,1,12,1,18,1,6,255,4,2,6,1,10,1,10, - 1,14,2,6,1,6,255,4,2,2,1,18,1,16,1,6, - 1,122,21,83,111,117,114,99,101,76,111,97,100,101,114,46, - 103,101,116,95,99,111,100,101,78,41,10,114,125,0,0,0, - 114,124,0,0,0,114,126,0,0,0,114,223,0,0,0,114, - 224,0,0,0,114,226,0,0,0,114,225,0,0,0,114,229, - 0,0,0,114,233,0,0,0,114,213,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,221,0,0,0,23,3,0,0,115,14,0,0,0,8, - 2,8,8,8,14,8,10,8,7,8,10,14,8,114,221,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,0,0,0,0,115,124,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, - 132,0,90,6,101,7,135,0,102,1,100,8,100,9,132,8, - 131,1,90,8,101,7,100,10,100,11,132,0,131,1,90,9, - 100,12,100,13,132,0,90,10,101,7,100,14,100,15,132,0, - 131,1,90,11,100,16,100,17,132,0,90,12,100,18,100,19, - 132,0,90,13,100,20,100,21,132,0,90,14,100,22,100,23, - 132,0,90,15,135,0,4,0,90,16,83,0,41,24,218,10, - 70,105,108,101,76,111,97,100,101,114,122,103,66,97,115,101, - 32,102,105,108,101,32,108,111,97,100,101,114,32,99,108,97, - 115,115,32,119,104,105,99,104,32,105,109,112,108,101,109,101, - 110,116,115,32,116,104,101,32,108,111,97,100,101,114,32,112, - 114,111,116,111,99,111,108,32,109,101,116,104,111,100,115,32, - 116,104,97,116,10,32,32,32,32,114,101,113,117,105,114,101, - 32,102,105,108,101,32,115,121,115,116,101,109,32,117,115,97, - 103,101,46,99,3,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, - 0,124,1,124,0,95,0,124,2,124,0,95,1,100,1,83, - 0,41,2,122,75,67,97,99,104,101,32,116,104,101,32,109, - 111,100,117,108,101,32,110,97,109,101,32,97,110,100,32,116, - 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,102, - 105,108,101,32,102,111,117,110,100,32,98,121,32,116,104,101, - 10,32,32,32,32,32,32,32,32,102,105,110,100,101,114,46, - 78,114,159,0,0,0,41,3,114,118,0,0,0,114,139,0, - 0,0,114,43,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,209,0,0,0,172,3,0,0,115, - 4,0,0,0,0,3,6,1,122,19,70,105,108,101,76,111, - 97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,115,24,0,0,0,124,0,106,0,124, - 1,106,0,107,2,111,22,124,0,106,1,124,1,106,1,107, - 2,83,0,114,109,0,0,0,169,2,218,9,95,95,99,108, - 97,115,115,95,95,114,131,0,0,0,169,2,114,118,0,0, - 0,90,5,111,116,104,101,114,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,6,95,95,101,113,95,95,178, - 3,0,0,115,6,0,0,0,0,1,12,1,10,255,122,17, - 70,105,108,101,76,111,97,100,101,114,46,95,95,101,113,95, - 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,67,0,0,0,115,20,0,0,0,116, - 0,124,0,106,1,131,1,116,0,124,0,106,2,131,1,65, - 0,83,0,114,109,0,0,0,169,3,218,4,104,97,115,104, - 114,116,0,0,0,114,43,0,0,0,169,1,114,118,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 218,8,95,95,104,97,115,104,95,95,182,3,0,0,115,2, - 0,0,0,0,1,122,19,70,105,108,101,76,111,97,100,101, - 114,46,95,95,104,97,115,104,95,95,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,3, - 0,0,0,115,16,0,0,0,116,0,116,1,124,0,131,2, - 160,2,124,1,161,1,83,0,41,1,122,100,76,111,97,100, - 32,97,32,109,111,100,117,108,101,32,102,114,111,109,32,97, - 32,102,105,108,101,46,10,10,32,32,32,32,32,32,32,32, + 9,102,105,110,100,95,115,112,101,99,222,2,0,0,115,28, + 0,0,0,0,2,10,1,8,1,4,1,2,1,12,1,14, + 1,8,1,14,1,14,1,6,1,8,1,2,254,6,3,122, + 31,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121, + 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, + 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,4,0,0,0,67,0,0,0,115,34,0,0,0,124,0, + 160,0,124,1,124,2,161,2,125,3,124,3,100,1,107,9, + 114,26,124,3,106,1,83,0,100,1,83,0,100,1,83,0, + 41,2,122,108,70,105,110,100,32,109,111,100,117,108,101,32, + 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103, + 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32, 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 41,3,218,5,115,117,112,101,114,114,239,0,0,0,114,220, - 0,0,0,114,219,0,0,0,169,1,114,241,0,0,0,114, - 3,0,0,0,114,6,0,0,0,114,220,0,0,0,185,3, - 0,0,115,2,0,0,0,0,10,122,22,70,105,108,101,76, - 111,97,100,101,114,46,108,111,97,100,95,109,111,100,117,108, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,115,6,0,0,0,124, - 0,106,0,83,0,169,1,122,58,82,101,116,117,114,110,32, - 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, - 115,111,117,114,99,101,32,102,105,108,101,32,97,115,32,102, - 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, - 101,114,46,114,47,0,0,0,114,219,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,179,0,0, - 0,197,3,0,0,115,2,0,0,0,0,3,122,23,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,102,105,108, - 101,110,97,109,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,10,0,0,0,67,0,0,0,115,102, - 0,0,0,116,0,124,0,116,1,116,2,102,2,131,2,114, - 58,116,3,160,4,116,5,124,1,131,1,161,1,143,22,125, - 2,124,2,160,6,161,0,87,0,2,0,53,0,81,0,82, - 0,163,0,83,0,81,0,82,0,88,0,110,40,116,3,160, - 7,124,1,100,1,161,2,143,22,125,2,124,2,160,6,161, - 0,87,0,2,0,53,0,81,0,82,0,163,0,83,0,81, - 0,82,0,88,0,100,2,83,0,41,3,122,39,82,101,116, - 117,114,110,32,116,104,101,32,100,97,116,97,32,102,114,111, - 109,32,112,97,116,104,32,97,115,32,114,97,119,32,98,121, - 116,101,115,46,218,1,114,78,41,8,114,161,0,0,0,114, - 221,0,0,0,218,19,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,114,63,0,0,0,90,9, - 111,112,101,110,95,99,111,100,101,114,84,0,0,0,90,4, - 114,101,97,100,114,64,0,0,0,41,3,114,118,0,0,0, - 114,43,0,0,0,114,67,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,114,227,0,0,0,202,3, - 0,0,115,10,0,0,0,0,2,14,1,16,1,28,2,14, - 1,122,19,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 18,0,0,0,124,0,160,0,124,1,161,1,114,14,124,0, - 83,0,100,0,83,0,114,109,0,0,0,41,1,114,182,0, - 0,0,169,2,114,118,0,0,0,114,216,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,218,19,103, - 101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,100, - 101,114,213,3,0,0,115,6,0,0,0,0,2,10,1,4, - 1,122,30,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,114,101,115,111,117,114,99,101,95,114,101,97,100,101, - 114,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,4,0,0,0,67,0,0,0,115,32,0,0,0,116, - 0,116,1,124,0,106,2,131,1,100,1,25,0,124,1,131, - 2,125,2,116,3,160,4,124,2,100,2,161,2,83,0,41, - 3,78,114,72,0,0,0,114,251,0,0,0,41,5,114,37, - 0,0,0,114,46,0,0,0,114,43,0,0,0,114,63,0, - 0,0,114,64,0,0,0,169,3,114,118,0,0,0,90,8, - 114,101,115,111,117,114,99,101,114,43,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,218,13,111,112, - 101,110,95,114,101,115,111,117,114,99,101,219,3,0,0,115, - 4,0,0,0,0,1,20,1,122,24,70,105,108,101,76,111, - 97,100,101,114,46,111,112,101,110,95,114,101,115,111,117,114, - 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, - 124,0,160,0,124,1,161,1,115,14,116,1,130,1,116,2, - 116,3,124,0,106,4,131,1,100,1,25,0,124,1,131,2, - 125,2,124,2,83,0,169,2,78,114,72,0,0,0,41,5, - 218,11,105,115,95,114,101,115,111,117,114,99,101,218,17,70, - 105,108,101,78,111,116,70,111,117,110,100,69,114,114,111,114, - 114,37,0,0,0,114,46,0,0,0,114,43,0,0,0,114, - 255,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,13,114,101,115,111,117,114,99,101,95,112,97, - 116,104,223,3,0,0,115,8,0,0,0,0,1,10,1,4, - 1,20,1,122,24,70,105,108,101,76,111,97,100,101,114,46, - 114,101,115,111,117,114,99,101,95,112,97,116,104,99,2,0, - 0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,67,0,0,0,115,40,0,0,0,116,0,124,1,107, - 6,114,12,100,1,83,0,116,1,116,2,124,0,106,3,131, - 1,100,2,25,0,124,1,131,2,125,2,116,4,124,2,131, - 1,83,0,41,3,78,70,114,72,0,0,0,41,5,114,34, - 0,0,0,114,37,0,0,0,114,46,0,0,0,114,43,0, - 0,0,114,53,0,0,0,169,3,114,118,0,0,0,114,116, - 0,0,0,114,43,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,2,1,0,0,229,3,0,0, - 115,8,0,0,0,0,1,8,1,4,1,20,1,122,22,70, - 105,108,101,76,111,97,100,101,114,46,105,115,95,114,101,115, - 111,117,114,99,101,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,24, - 0,0,0,116,0,116,1,160,2,116,3,124,0,106,4,131, - 1,100,1,25,0,161,1,131,1,83,0,114,1,1,0,0, - 41,5,218,4,105,116,101,114,114,2,0,0,0,218,7,108, - 105,115,116,100,105,114,114,46,0,0,0,114,43,0,0,0, - 114,246,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,8,99,111,110,116,101,110,116,115,235,3, - 0,0,115,2,0,0,0,0,1,122,19,70,105,108,101,76, - 111,97,100,101,114,46,99,111,110,116,101,110,116,115,41,17, - 114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114, - 127,0,0,0,114,209,0,0,0,114,243,0,0,0,114,247, - 0,0,0,114,136,0,0,0,114,220,0,0,0,114,179,0, - 0,0,114,227,0,0,0,114,254,0,0,0,114,0,1,0, - 0,114,4,1,0,0,114,2,1,0,0,114,8,1,0,0, - 90,13,95,95,99,108,97,115,115,99,101,108,108,95,95,114, - 3,0,0,0,114,3,0,0,0,114,249,0,0,0,114,6, - 0,0,0,114,239,0,0,0,167,3,0,0,115,30,0,0, - 0,8,2,4,3,8,6,8,4,8,3,2,1,14,11,2, - 1,10,4,8,11,2,1,10,5,8,4,8,6,8,6,114, - 239,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,64,0,0,0,115,46,0, - 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, - 100,7,156,1,100,8,100,9,132,2,90,6,100,10,83,0, - 41,11,218,16,83,111,117,114,99,101,70,105,108,101,76,111, - 97,100,101,114,122,62,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,83,111,117,114,99,101,76,111,97,100,101,114,32,117,115, - 105,110,103,32,116,104,101,32,102,105,108,101,32,115,121,115, - 116,101,109,46,99,2,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,67,0,0,0,115,22,0, - 0,0,116,0,124,1,131,1,125,2,124,2,106,1,124,2, - 106,2,100,1,156,2,83,0,41,2,122,33,82,101,116,117, - 114,110,32,116,104,101,32,109,101,116,97,100,97,116,97,32, - 102,111,114,32,116,104,101,32,112,97,116,104,46,41,2,114, - 169,0,0,0,114,234,0,0,0,41,3,114,48,0,0,0, - 218,8,115,116,95,109,116,105,109,101,90,7,115,116,95,115, - 105,122,101,41,3,114,118,0,0,0,114,43,0,0,0,114, - 238,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,114,224,0,0,0,243,3,0,0,115,4,0,0, - 0,0,2,8,1,122,27,83,111,117,114,99,101,70,105,108, - 101,76,111,97,100,101,114,46,112,97,116,104,95,115,116,97, - 116,115,99,4,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,5,0,0,0,67,0,0,0,115,24,0,0,0, - 116,0,124,1,131,1,125,4,124,0,106,1,124,2,124,3, - 124,4,100,1,141,3,83,0,41,2,78,169,1,218,5,95, - 109,111,100,101,41,2,114,114,0,0,0,114,225,0,0,0, - 41,5,114,118,0,0,0,114,107,0,0,0,114,106,0,0, - 0,114,25,0,0,0,114,51,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,226,0,0,0,248, - 3,0,0,115,4,0,0,0,0,2,8,1,122,32,83,111, - 117,114,99,101,70,105,108,101,76,111,97,100,101,114,46,95, - 99,97,99,104,101,95,98,121,116,101,99,111,100,101,114,59, - 0,0,0,114,11,1,0,0,99,3,0,0,0,0,0,0, - 0,1,0,0,0,9,0,0,0,11,0,0,0,67,0,0, - 0,115,252,0,0,0,116,0,124,1,131,1,92,2,125,4, - 125,5,103,0,125,6,124,4,114,52,116,1,124,4,131,1, - 115,52,116,0,124,4,131,1,92,2,125,4,125,7,124,6, - 160,2,124,7,161,1,1,0,113,16,116,3,124,6,131,1, - 68,0,93,108,125,7,116,4,124,4,124,7,131,2,125,4, - 122,14,116,5,160,6,124,4,161,1,1,0,87,0,113,60, - 4,0,116,7,107,10,114,112,1,0,1,0,1,0,89,0, - 113,60,89,0,113,60,4,0,116,8,107,10,114,166,1,0, - 125,8,1,0,122,26,116,9,160,10,100,1,124,4,124,8, - 161,3,1,0,87,0,89,0,162,6,1,0,100,2,83,0, - 100,2,125,8,126,8,88,0,89,0,113,60,88,0,113,60, - 122,28,116,11,124,1,124,2,124,3,131,3,1,0,116,9, - 160,10,100,3,124,1,161,2,1,0,87,0,110,48,4,0, - 116,8,107,10,114,246,1,0,125,8,1,0,122,18,116,9, - 160,10,100,1,124,1,124,8,161,3,1,0,87,0,53,0, - 100,2,125,8,126,8,88,0,89,0,110,2,88,0,100,2, - 83,0,41,4,122,27,87,114,105,116,101,32,98,121,116,101, - 115,32,100,97,116,97,32,116,111,32,97,32,102,105,108,101, - 46,122,27,99,111,117,108,100,32,110,111,116,32,99,114,101, - 97,116,101,32,123,33,114,125,58,32,123,33,114,125,78,122, - 12,99,114,101,97,116,101,100,32,123,33,114,125,41,12,114, - 46,0,0,0,114,55,0,0,0,114,186,0,0,0,114,41, - 0,0,0,114,37,0,0,0,114,2,0,0,0,90,5,109, - 107,100,105,114,218,15,70,105,108,101,69,120,105,115,116,115, - 69,114,114,111,114,114,49,0,0,0,114,134,0,0,0,114, - 149,0,0,0,114,68,0,0,0,41,9,114,118,0,0,0, - 114,43,0,0,0,114,25,0,0,0,114,12,1,0,0,218, - 6,112,97,114,101,110,116,114,96,0,0,0,114,36,0,0, - 0,114,32,0,0,0,114,228,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,225,0,0,0,253, - 3,0,0,115,48,0,0,0,0,2,12,1,4,2,12,1, - 12,1,12,2,12,1,10,1,2,1,14,1,14,2,8,1, - 16,3,6,1,2,0,2,255,4,2,28,1,2,1,12,1, - 16,1,16,2,8,1,2,255,122,25,83,111,117,114,99,101, - 70,105,108,101,76,111,97,100,101,114,46,115,101,116,95,100, - 97,116,97,78,41,7,114,125,0,0,0,114,124,0,0,0, - 114,126,0,0,0,114,127,0,0,0,114,224,0,0,0,114, - 226,0,0,0,114,225,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,9,1, - 0,0,239,3,0,0,115,8,0,0,0,8,2,4,2,8, - 5,8,5,114,9,1,0,0,99,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0, - 0,115,32,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, - 90,5,100,6,83,0,41,7,218,20,83,111,117,114,99,101, - 108,101,115,115,70,105,108,101,76,111,97,100,101,114,122,45, - 76,111,97,100,101,114,32,119,104,105,99,104,32,104,97,110, - 100,108,101,115,32,115,111,117,114,99,101,108,101,115,115,32, - 102,105,108,101,32,105,109,112,111,114,116,115,46,99,2,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,5,0, - 0,0,67,0,0,0,115,68,0,0,0,124,0,160,0,124, - 1,161,1,125,2,124,0,160,1,124,2,161,1,125,3,124, - 1,124,2,100,1,156,2,125,4,116,2,124,3,124,1,124, - 4,131,3,1,0,116,3,116,4,124,3,131,1,100,2,100, - 0,133,2,25,0,124,1,124,2,100,3,141,3,83,0,41, - 4,78,114,159,0,0,0,114,145,0,0,0,41,2,114,116, - 0,0,0,114,106,0,0,0,41,5,114,179,0,0,0,114, - 227,0,0,0,114,152,0,0,0,114,165,0,0,0,114,235, - 0,0,0,41,5,114,118,0,0,0,114,139,0,0,0,114, - 43,0,0,0,114,25,0,0,0,114,151,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,213,0, - 0,0,32,4,0,0,115,22,0,0,0,0,1,10,1,10, - 4,2,1,2,254,6,4,12,1,2,1,14,1,2,1,2, - 253,122,29,83,111,117,114,99,101,108,101,115,115,70,105,108, - 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, - 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 83,0,41,2,122,39,82,101,116,117,114,110,32,78,111,110, - 101,32,97,115,32,116,104,101,114,101,32,105,115,32,110,111, - 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,3, - 0,0,0,114,219,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,229,0,0,0,48,4,0,0, - 115,2,0,0,0,0,2,122,31,83,111,117,114,99,101,108, - 101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,115,111,117,114,99,101,78,41,6,114,125,0,0,0, - 114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,114, - 213,0,0,0,114,229,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,3,0,0,0,114,6,0,0,0,114,15,1, - 0,0,28,4,0,0,115,6,0,0,0,8,2,4,2,8, - 16,114,15,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,64,0,0,0,115, - 92,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, - 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, - 100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,7, - 100,10,100,11,132,0,90,8,100,12,100,13,132,0,90,9, - 100,14,100,15,132,0,90,10,100,16,100,17,132,0,90,11, - 101,12,100,18,100,19,132,0,131,1,90,13,100,20,83,0, - 41,21,114,252,0,0,0,122,93,76,111,97,100,101,114,32, - 102,111,114,32,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,115,46,10,10,32,32,32,32,84,104,101,32, - 99,111,110,115,116,114,117,99,116,111,114,32,105,115,32,100, - 101,115,105,103,110,101,100,32,116,111,32,119,111,114,107,32, - 119,105,116,104,32,70,105,108,101,70,105,110,100,101,114,46, - 10,10,32,32,32,32,99,3,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, - 16,0,0,0,124,1,124,0,95,0,124,2,124,0,95,1, - 100,0,83,0,114,109,0,0,0,114,159,0,0,0,114,5, - 1,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, - 0,0,114,209,0,0,0,65,4,0,0,115,4,0,0,0, - 0,1,6,1,122,28,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,95,95,105,110,105,116, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,2,0,0,0,67,0,0,0,115,24,0,0,0, - 124,0,106,0,124,1,106,0,107,2,111,22,124,0,106,1, - 124,1,106,1,107,2,83,0,114,109,0,0,0,114,240,0, - 0,0,114,242,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,243,0,0,0,69,4,0,0,115, - 6,0,0,0,0,1,12,1,10,255,122,26,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 95,95,101,113,95,95,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,3,0,0,0,67,0,0,0,115, - 20,0,0,0,116,0,124,0,106,1,131,1,116,0,124,0, - 106,2,131,1,65,0,83,0,114,109,0,0,0,114,244,0, - 0,0,114,246,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,114,247,0,0,0,73,4,0,0,115, - 2,0,0,0,0,1,122,28,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, - 115,104,95,95,99,2,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,5,0,0,0,67,0,0,0,115,36,0, - 0,0,116,0,160,1,116,2,106,3,124,1,161,2,125,2, - 116,0,160,4,100,1,124,1,106,5,124,0,106,6,161,3, - 1,0,124,2,83,0,41,2,122,38,67,114,101,97,116,101, - 32,97,110,32,117,110,105,116,105,97,108,105,122,101,100,32, - 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 122,38,101,120,116,101,110,115,105,111,110,32,109,111,100,117, - 108,101,32,123,33,114,125,32,108,111,97,100,101,100,32,102, - 114,111,109,32,123,33,114,125,41,7,114,134,0,0,0,114, - 214,0,0,0,114,163,0,0,0,90,14,99,114,101,97,116, - 101,95,100,121,110,97,109,105,99,114,149,0,0,0,114,116, - 0,0,0,114,43,0,0,0,41,3,114,118,0,0,0,114, - 187,0,0,0,114,216,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,114,212,0,0,0,76,4,0, - 0,115,18,0,0,0,0,2,4,1,4,0,2,255,4,2, - 6,1,4,0,4,255,4,2,122,33,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,99,114, - 101,97,116,101,95,109,111,100,117,108,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,0, - 67,0,0,0,115,36,0,0,0,116,0,160,1,116,2,106, - 3,124,1,161,2,1,0,116,0,160,4,100,1,124,0,106, - 5,124,0,106,6,161,3,1,0,100,2,83,0,41,3,122, - 30,73,110,105,116,105,97,108,105,122,101,32,97,110,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,122, - 40,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,32,123,33,114,125,32,101,120,101,99,117,116,101,100,32, - 102,114,111,109,32,123,33,114,125,78,41,7,114,134,0,0, - 0,114,214,0,0,0,114,163,0,0,0,90,12,101,120,101, - 99,95,100,121,110,97,109,105,99,114,149,0,0,0,114,116, - 0,0,0,114,43,0,0,0,114,253,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,217,0,0, - 0,84,4,0,0,115,10,0,0,0,0,2,14,1,6,1, - 4,0,4,255,122,31,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,101,120,101,99,95,109, - 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,3,0,0,0,115,36, - 0,0,0,116,0,124,0,106,1,131,1,100,1,25,0,137, - 0,116,2,135,0,102,1,100,2,100,3,132,8,116,3,68, - 0,131,1,131,1,83,0,41,4,122,49,82,101,116,117,114, - 110,32,84,114,117,101,32,105,102,32,116,104,101,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,105, - 115,32,97,32,112,97,99,107,97,103,101,46,114,38,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,51,0,0,0,115,26,0,0,0,124, - 0,93,18,125,1,136,0,100,0,124,1,23,0,107,2,86, - 0,1,0,113,2,100,1,83,0,41,2,114,209,0,0,0, - 78,114,3,0,0,0,169,2,114,31,0,0,0,218,6,115, - 117,102,102,105,120,169,1,90,9,102,105,108,101,95,110,97, - 109,101,114,3,0,0,0,114,6,0,0,0,218,9,60,103, - 101,110,101,120,112,114,62,93,4,0,0,115,4,0,0,0, - 4,1,2,255,122,49,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,46,60,108,111,99,97,108,115,62,46,60,103, - 101,110,101,120,112,114,62,41,4,114,46,0,0,0,114,43, - 0,0,0,218,3,97,110,121,218,18,69,88,84,69,78,83, - 73,79,78,95,83,85,70,70,73,88,69,83,114,219,0,0, - 0,114,3,0,0,0,114,18,1,0,0,114,6,0,0,0, - 114,182,0,0,0,90,4,0,0,115,8,0,0,0,0,2, - 14,1,12,1,2,255,122,30,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, - 97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, - 4,0,0,0,100,1,83,0,41,2,122,63,82,101,116,117, - 114,110,32,78,111,110,101,32,97,115,32,97,110,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,99, - 97,110,110,111,116,32,99,114,101,97,116,101,32,97,32,99, - 111,100,101,32,111,98,106,101,99,116,46,78,114,3,0,0, - 0,114,219,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,213,0,0,0,96,4,0,0,115,2, - 0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, - 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,1,83,0,41,2,122,53,82,101,116,117,114,110,32, - 78,111,110,101,32,97,115,32,101,120,116,101,110,115,105,111, - 110,32,109,111,100,117,108,101,115,32,104,97,118,101,32,110, - 111,32,115,111,117,114,99,101,32,99,111,100,101,46,78,114, - 3,0,0,0,114,219,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,114,229,0,0,0,100,4,0, - 0,115,2,0,0,0,0,2,122,30,69,120,116,101,110,115, - 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,115,6,0,0,0,124,0,106,0,83,0,114,250,0,0, - 0,114,47,0,0,0,114,219,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,179,0,0,0,104, - 4,0,0,115,2,0,0,0,0,3,122,32,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 103,101,116,95,102,105,108,101,110,97,109,101,78,41,14,114, - 125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,127, - 0,0,0,114,209,0,0,0,114,243,0,0,0,114,247,0, - 0,0,114,212,0,0,0,114,217,0,0,0,114,182,0,0, - 0,114,213,0,0,0,114,229,0,0,0,114,136,0,0,0, - 114,179,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 3,0,0,0,114,6,0,0,0,114,252,0,0,0,57,4, - 0,0,115,22,0,0,0,8,2,4,6,8,4,8,4,8, - 3,8,8,8,6,8,6,8,4,8,4,2,1,114,252,0, - 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,64,0,0,0,115,104,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,7, - 132,0,90,6,100,8,100,9,132,0,90,7,100,10,100,11, - 132,0,90,8,100,12,100,13,132,0,90,9,100,14,100,15, - 132,0,90,10,100,16,100,17,132,0,90,11,100,18,100,19, - 132,0,90,12,100,20,100,21,132,0,90,13,100,22,100,23, - 132,0,90,14,100,24,83,0,41,25,218,14,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,97,38,1,0,0,82, - 101,112,114,101,115,101,110,116,115,32,97,32,110,97,109,101, - 115,112,97,99,101,32,112,97,99,107,97,103,101,39,115,32, - 112,97,116,104,46,32,32,73,116,32,117,115,101,115,32,116, - 104,101,32,109,111,100,117,108,101,32,110,97,109,101,10,32, - 32,32,32,116,111,32,102,105,110,100,32,105,116,115,32,112, - 97,114,101,110,116,32,109,111,100,117,108,101,44,32,97,110, - 100,32,102,114,111,109,32,116,104,101,114,101,32,105,116,32, - 108,111,111,107,115,32,117,112,32,116,104,101,32,112,97,114, - 101,110,116,39,115,10,32,32,32,32,95,95,112,97,116,104, - 95,95,46,32,32,87,104,101,110,32,116,104,105,115,32,99, - 104,97,110,103,101,115,44,32,116,104,101,32,109,111,100,117, - 108,101,39,115,32,111,119,110,32,112,97,116,104,32,105,115, - 32,114,101,99,111,109,112,117,116,101,100,44,10,32,32,32, - 32,117,115,105,110,103,32,112,97,116,104,95,102,105,110,100, - 101,114,46,32,32,70,111,114,32,116,111,112,45,108,101,118, - 101,108,32,109,111,100,117,108,101,115,44,32,116,104,101,32, - 112,97,114,101,110,116,32,109,111,100,117,108,101,39,115,32, - 112,97,116,104,10,32,32,32,32,105,115,32,115,121,115,46, - 112,97,116,104,46,99,4,0,0,0,0,0,0,0,0,0, - 0,0,4,0,0,0,3,0,0,0,67,0,0,0,115,36, - 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,116, - 2,124,0,160,3,161,0,131,1,124,0,95,4,124,3,124, - 0,95,5,100,0,83,0,114,109,0,0,0,41,6,218,5, - 95,110,97,109,101,218,5,95,112,97,116,104,114,111,0,0, - 0,218,16,95,103,101,116,95,112,97,114,101,110,116,95,112, - 97,116,104,218,17,95,108,97,115,116,95,112,97,114,101,110, - 116,95,112,97,116,104,218,12,95,112,97,116,104,95,102,105, - 110,100,101,114,169,4,114,118,0,0,0,114,116,0,0,0, - 114,43,0,0,0,90,11,112,97,116,104,95,102,105,110,100, - 101,114,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,209,0,0,0,117,4,0,0,115,8,0,0,0,0, - 1,6,1,6,1,14,1,122,23,95,78,97,109,101,115,112, - 97,99,101,80,97,116,104,46,95,95,105,110,105,116,95,95, - 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,3,0,0,0,67,0,0,0,115,38,0,0,0,124,0, - 106,0,160,1,100,1,161,1,92,3,125,1,125,2,125,3, - 124,2,100,2,107,2,114,30,100,3,83,0,124,1,100,4, - 102,2,83,0,41,5,122,62,82,101,116,117,114,110,115,32, - 97,32,116,117,112,108,101,32,111,102,32,40,112,97,114,101, - 110,116,45,109,111,100,117,108,101,45,110,97,109,101,44,32, - 112,97,114,101,110,116,45,112,97,116,104,45,97,116,116,114, - 45,110,97,109,101,41,114,70,0,0,0,114,39,0,0,0, - 41,2,114,8,0,0,0,114,43,0,0,0,90,8,95,95, - 112,97,116,104,95,95,41,2,114,23,1,0,0,114,40,0, - 0,0,41,4,114,118,0,0,0,114,14,1,0,0,218,3, - 100,111,116,90,2,109,101,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,23,95,102,105,110,100,95,112,97, - 114,101,110,116,95,112,97,116,104,95,110,97,109,101,115,123, - 4,0,0,115,8,0,0,0,0,2,18,1,8,2,4,3, - 122,38,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,102,105,110,100,95,112,97,114,101,110,116,95,112,97, - 116,104,95,110,97,109,101,115,99,1,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, - 0,115,28,0,0,0,124,0,160,0,161,0,92,2,125,1, - 125,2,116,1,116,2,106,3,124,1,25,0,124,2,131,2, - 83,0,114,109,0,0,0,41,4,114,30,1,0,0,114,130, - 0,0,0,114,8,0,0,0,218,7,109,111,100,117,108,101, - 115,41,3,114,118,0,0,0,90,18,112,97,114,101,110,116, - 95,109,111,100,117,108,101,95,110,97,109,101,90,14,112,97, - 116,104,95,97,116,116,114,95,110,97,109,101,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,25,1,0,0, - 133,4,0,0,115,4,0,0,0,0,1,12,1,122,31,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,103, - 101,116,95,112,97,114,101,110,116,95,112,97,116,104,99,1, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, - 0,0,0,67,0,0,0,115,80,0,0,0,116,0,124,0, - 160,1,161,0,131,1,125,1,124,1,124,0,106,2,107,3, - 114,74,124,0,160,3,124,0,106,4,124,1,161,2,125,2, - 124,2,100,0,107,9,114,68,124,2,106,5,100,0,107,8, - 114,68,124,2,106,6,114,68,124,2,106,6,124,0,95,7, - 124,1,124,0,95,2,124,0,106,7,83,0,114,109,0,0, - 0,41,8,114,111,0,0,0,114,25,1,0,0,114,26,1, - 0,0,114,27,1,0,0,114,23,1,0,0,114,140,0,0, - 0,114,178,0,0,0,114,24,1,0,0,41,3,114,118,0, - 0,0,90,11,112,97,114,101,110,116,95,112,97,116,104,114, - 187,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,12,95,114,101,99,97,108,99,117,108,97,116, - 101,137,4,0,0,115,16,0,0,0,0,2,12,1,10,1, - 14,3,18,1,6,1,8,1,6,1,122,27,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,114,101,99,97, - 108,99,117,108,97,116,101,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,116,0,124,0,160,1,161,0,131,1,83, - 0,114,109,0,0,0,41,2,114,6,1,0,0,114,32,1, - 0,0,114,246,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,8,95,95,105,116,101,114,95,95, - 150,4,0,0,115,2,0,0,0,0,1,122,23,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,105,116, - 101,114,95,95,99,2,0,0,0,0,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,67,0,0,0,115,12,0, - 0,0,124,0,160,0,161,0,124,1,25,0,83,0,114,109, - 0,0,0,169,1,114,32,1,0,0,41,2,114,118,0,0, - 0,218,5,105,110,100,101,120,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,11,95,95,103,101,116,105,116, - 101,109,95,95,153,4,0,0,115,2,0,0,0,0,1,122, - 26,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,103,101,116,105,116,101,109,95,95,99,3,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,14,0,0,0,124,2,124,0,106,0,124, - 1,60,0,100,0,83,0,114,109,0,0,0,41,1,114,24, - 1,0,0,41,3,114,118,0,0,0,114,35,1,0,0,114, - 43,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,11,95,95,115,101,116,105,116,101,109,95,95, - 156,4,0,0,115,2,0,0,0,0,1,122,26,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,115,101, - 116,105,116,101,109,95,95,99,1,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,116,0,124,0,160,1,161,0,131,1,83, - 0,114,109,0,0,0,41,2,114,22,0,0,0,114,32,1, - 0,0,114,246,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,7,95,95,108,101,110,95,95,159, - 4,0,0,115,2,0,0,0,0,1,122,22,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,108,101,110, - 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, - 100,1,160,0,124,0,106,1,161,1,83,0,41,2,78,122, - 20,95,78,97,109,101,115,112,97,99,101,80,97,116,104,40, - 123,33,114,125,41,41,2,114,61,0,0,0,114,24,1,0, - 0,114,246,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,8,95,95,114,101,112,114,95,95,162, - 4,0,0,115,2,0,0,0,0,1,122,23,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,114,101,112, - 114,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,115,12,0,0, - 0,124,1,124,0,160,0,161,0,107,6,83,0,114,109,0, - 0,0,114,34,1,0,0,169,2,114,118,0,0,0,218,4, - 105,116,101,109,114,3,0,0,0,114,3,0,0,0,114,6, - 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, - 95,165,4,0,0,115,2,0,0,0,0,1,122,27,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, - 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, - 0,0,115,16,0,0,0,124,0,106,0,160,1,124,1,161, - 1,1,0,100,0,83,0,114,109,0,0,0,41,2,114,24, - 1,0,0,114,186,0,0,0,114,40,1,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,186,0,0, - 0,168,4,0,0,115,2,0,0,0,0,1,122,21,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,97,112,112, - 101,110,100,78,41,15,114,125,0,0,0,114,124,0,0,0, - 114,126,0,0,0,114,127,0,0,0,114,209,0,0,0,114, - 30,1,0,0,114,25,1,0,0,114,32,1,0,0,114,33, - 1,0,0,114,36,1,0,0,114,37,1,0,0,114,38,1, - 0,0,114,39,1,0,0,114,42,1,0,0,114,186,0,0, + 78,169,2,114,203,0,0,0,114,140,0,0,0,169,4,114, + 193,0,0,0,114,139,0,0,0,114,43,0,0,0,114,187, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,238, + 2,0,0,115,8,0,0,0,0,7,12,1,8,1,6,2, + 122,33,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, + 117,108,101,41,2,78,78,41,1,78,41,12,114,125,0,0, + 0,114,124,0,0,0,114,126,0,0,0,114,127,0,0,0, + 114,197,0,0,0,114,196,0,0,0,114,195,0,0,0,218, + 11,99,108,97,115,115,109,101,116,104,111,100,114,194,0,0, + 0,114,200,0,0,0,114,203,0,0,0,114,206,0,0,0, + 114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,191,0,0,0,188,2,0,0,115,28,0, + 0,0,8,2,4,3,2,255,2,4,2,255,2,3,4,2, + 2,1,10,6,2,1,10,14,2,1,12,15,2,1,114,191, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,64,0,0,0,115,48,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,83, + 0,41,11,218,13,95,76,111,97,100,101,114,66,97,115,105, + 99,115,122,83,66,97,115,101,32,99,108,97,115,115,32,111, + 102,32,99,111,109,109,111,110,32,99,111,100,101,32,110,101, + 101,100,101,100,32,98,121,32,98,111,116,104,32,83,111,117, + 114,99,101,76,111,97,100,101,114,32,97,110,100,10,32,32, + 32,32,83,111,117,114,99,101,108,101,115,115,70,105,108,101, + 76,111,97,100,101,114,46,99,2,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0, + 115,64,0,0,0,116,0,124,0,160,1,124,1,161,1,131, + 1,100,1,25,0,125,2,124,2,160,2,100,2,100,1,161, + 2,100,3,25,0,125,3,124,1,160,3,100,2,161,1,100, + 4,25,0,125,4,124,3,100,5,107,2,111,62,124,4,100, + 5,107,3,83,0,41,6,122,141,67,111,110,99,114,101,116, + 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, + 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, + 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, + 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, + 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, + 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, + 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, + 95,46,112,121,39,46,114,38,0,0,0,114,70,0,0,0, + 114,72,0,0,0,114,27,0,0,0,218,8,95,95,105,110, + 105,116,95,95,41,4,114,46,0,0,0,114,179,0,0,0, + 114,42,0,0,0,114,40,0,0,0,41,5,114,118,0,0, + 0,114,139,0,0,0,114,96,0,0,0,90,13,102,105,108, + 101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,108, + 95,110,97,109,101,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,182,0,0,0,1,3,0,0,115,8,0, + 0,0,0,3,18,1,16,1,14,1,122,24,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,99, + 107,97,103,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,83,0,169,2,122,42,85,115,101,32,100,101, + 102,97,117,108,116,32,115,101,109,97,110,116,105,99,115,32, + 102,111,114,32,109,111,100,117,108,101,32,99,114,101,97,116, + 105,111,110,46,78,114,3,0,0,0,169,2,114,118,0,0, + 0,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,218,13,99,114,101,97,116,101,95,109,111, + 100,117,108,101,9,3,0,0,115,2,0,0,0,0,1,122, + 27,95,76,111,97,100,101,114,66,97,115,105,99,115,46,99, + 114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,5,0,0, + 0,67,0,0,0,115,56,0,0,0,124,0,160,0,124,1, + 106,1,161,1,125,2,124,2,100,1,107,8,114,36,116,2, + 100,2,160,3,124,1,106,1,161,1,131,1,130,1,116,4, + 160,5,116,6,124,2,124,1,106,7,161,3,1,0,100,1, + 83,0,41,3,122,19,69,120,101,99,117,116,101,32,116,104, + 101,32,109,111,100,117,108,101,46,78,122,52,99,97,110,110, + 111,116,32,108,111,97,100,32,109,111,100,117,108,101,32,123, + 33,114,125,32,119,104,101,110,32,103,101,116,95,99,111,100, + 101,40,41,32,114,101,116,117,114,110,115,32,78,111,110,101, + 41,8,218,8,103,101,116,95,99,111,100,101,114,125,0,0, + 0,114,117,0,0,0,114,61,0,0,0,114,134,0,0,0, + 218,25,95,99,97,108,108,95,119,105,116,104,95,102,114,97, + 109,101,115,95,114,101,109,111,118,101,100,218,4,101,120,101, + 99,114,131,0,0,0,41,3,114,118,0,0,0,218,6,109, + 111,100,117,108,101,114,164,0,0,0,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,218,11,101,120,101,99,95, + 109,111,100,117,108,101,12,3,0,0,115,12,0,0,0,0, + 2,12,1,8,1,6,1,4,255,6,2,122,25,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,101,120,101,99,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115, + 12,0,0,0,116,0,160,1,124,0,124,1,161,2,83,0, + 41,1,122,26,84,104,105,115,32,109,111,100,117,108,101,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,41,2, + 114,134,0,0,0,218,17,95,108,111,97,100,95,109,111,100, + 117,108,101,95,115,104,105,109,169,2,114,118,0,0,0,114, + 139,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, + 20,3,0,0,115,2,0,0,0,0,2,122,25,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,95, + 109,111,100,117,108,101,78,41,8,114,125,0,0,0,114,124, + 0,0,0,114,126,0,0,0,114,127,0,0,0,114,182,0, + 0,0,114,212,0,0,0,114,217,0,0,0,114,220,0,0, 0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,22,1,0,0,110,4,0,0,115,24, - 0,0,0,8,1,4,6,8,6,8,10,8,4,8,13,8, - 3,8,3,8,3,8,3,8,3,8,3,114,22,1,0,0, - 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,64,0,0,0,115,80,0,0,0,101,0, - 90,1,100,0,90,2,100,1,100,2,132,0,90,3,101,4, - 100,3,100,4,132,0,131,1,90,5,100,5,100,6,132,0, - 90,6,100,7,100,8,132,0,90,7,100,9,100,10,132,0, - 90,8,100,11,100,12,132,0,90,9,100,13,100,14,132,0, - 90,10,100,15,100,16,132,0,90,11,100,17,83,0,41,18, - 218,16,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,99,4,0,0,0,0,0,0,0,0,0,0,0,4, - 0,0,0,4,0,0,0,67,0,0,0,115,18,0,0,0, - 116,0,124,1,124,2,124,3,131,3,124,0,95,1,100,0, - 83,0,114,109,0,0,0,41,2,114,22,1,0,0,114,24, - 1,0,0,114,28,1,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,114,209,0,0,0,174,4,0,0, - 115,2,0,0,0,0,1,122,25,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,95,95,105,110,105,116, - 95,95,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, - 100,1,160,0,124,1,106,1,161,1,83,0,41,2,122,115, - 82,101,116,117,114,110,32,114,101,112,114,32,102,111,114,32, - 116,104,101,32,109,111,100,117,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,101,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 84,104,101,32,105,109,112,111,114,116,32,109,97,99,104,105, - 110,101,114,121,32,100,111,101,115,32,116,104,101,32,106,111, - 98,32,105,116,115,101,108,102,46,10,10,32,32,32,32,32, - 32,32,32,122,25,60,109,111,100,117,108,101,32,123,33,114, - 125,32,40,110,97,109,101,115,112,97,99,101,41,62,41,2, - 114,61,0,0,0,114,125,0,0,0,41,2,114,193,0,0, - 0,114,216,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,11,109,111,100,117,108,101,95,114,101, - 112,114,177,4,0,0,115,2,0,0,0,0,7,122,28,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 109,111,100,117,108,101,95,114,101,112,114,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,78, - 84,114,3,0,0,0,114,219,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,182,0,0,0,186, - 4,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, - 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,83,0,41,2,78,114,39,0,0, - 0,114,3,0,0,0,114,219,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,229,0,0,0,189, - 4,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,103,101,116, - 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,6,0,0,0,67,0,0,0, - 115,16,0,0,0,116,0,100,1,100,2,100,3,100,4,100, - 5,141,4,83,0,41,6,78,114,39,0,0,0,122,8,60, - 115,116,114,105,110,103,62,114,215,0,0,0,84,41,1,114, - 231,0,0,0,41,1,114,232,0,0,0,114,219,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 213,0,0,0,192,4,0,0,115,2,0,0,0,0,1,122, - 25,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,6,0,0,0,114,208,0,0,0,252,2,0,0,115,10, + 0,0,0,8,2,4,3,8,8,8,3,8,8,114,208,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,64,0,0,0,115,74,0,0,0, + 101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,3, + 100,3,100,4,132,0,90,4,100,5,100,6,132,0,90,5, + 100,7,100,8,132,0,90,6,100,9,100,10,132,0,90,7, + 100,11,100,12,156,1,100,13,100,14,132,2,90,8,100,15, + 100,16,132,0,90,9,100,17,83,0,41,18,218,12,83,111, + 117,114,99,101,76,111,97,100,101,114,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, + 0,0,0,115,8,0,0,0,116,0,130,1,100,1,83,0, + 41,2,122,165,79,112,116,105,111,110,97,108,32,109,101,116, + 104,111,100,32,116,104,97,116,32,114,101,116,117,114,110,115, + 32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111, + 110,32,116,105,109,101,32,40,97,110,32,105,110,116,41,32, + 102,111,114,32,116,104,101,10,32,32,32,32,32,32,32,32, + 115,112,101,99,105,102,105,101,100,32,112,97,116,104,32,40, + 97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,32, + 32,82,97,105,115,101,115,32,79,83,69,114,114,111,114,32, + 119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,97, + 110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,46, + 10,32,32,32,32,32,32,32,32,78,41,1,114,49,0,0, + 0,169,2,114,118,0,0,0,114,43,0,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,218,10,112,97, + 116,104,95,109,116,105,109,101,27,3,0,0,115,2,0,0, + 0,0,6,122,23,83,111,117,114,99,101,76,111,97,100,101, + 114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,67,0,0,0,115,14,0,0,0,100,1,124,0,160,0, + 124,1,161,1,105,1,83,0,41,2,97,158,1,0,0,79, + 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,114, + 101,116,117,114,110,105,110,103,32,97,32,109,101,116,97,100, + 97,116,97,32,100,105,99,116,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,10,32,32,32,32,32, + 32,32,32,112,97,116,104,32,40,97,32,115,116,114,41,46, + 10,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, + 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, + 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, + 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, + 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, + 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, + 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, + 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, + 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, + 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, + 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, + 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, + 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, + 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114, + 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, + 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, + 108,101,100,46,10,32,32,32,32,32,32,32,32,114,169,0, + 0,0,41,1,114,223,0,0,0,114,222,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,10,112, + 97,116,104,95,115,116,97,116,115,35,3,0,0,115,2,0, + 0,0,0,12,122,23,83,111,117,114,99,101,76,111,97,100, + 101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,67,0,0,0,115,12,0,0,0,124,0,160,0,124, + 2,124,3,161,2,83,0,41,1,122,228,79,112,116,105,111, + 110,97,108,32,109,101,116,104,111,100,32,119,104,105,99,104, + 32,119,114,105,116,101,115,32,100,97,116,97,32,40,98,121, + 116,101,115,41,32,116,111,32,97,32,102,105,108,101,32,112, + 97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,32, + 32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,105, + 110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,97, + 108,108,111,119,115,32,102,111,114,32,116,104,101,32,119,114, + 105,116,105,110,103,32,111,102,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,115,46,10,10,32,32,32,32,32,32, + 32,32,84,104,101,32,115,111,117,114,99,101,32,112,97,116, + 104,32,105,115,32,110,101,101,100,101,100,32,105,110,32,111, + 114,100,101,114,32,116,111,32,99,111,114,114,101,99,116,108, + 121,32,116,114,97,110,115,102,101,114,32,112,101,114,109,105, + 115,115,105,111,110,115,10,32,32,32,32,32,32,32,32,41, + 1,218,8,115,101,116,95,100,97,116,97,41,4,114,118,0, + 0,0,114,107,0,0,0,90,10,99,97,99,104,101,95,112, + 97,116,104,114,25,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,218,15,95,99,97,99,104,101,95, + 98,121,116,101,99,111,100,101,49,3,0,0,115,2,0,0, + 0,0,8,122,28,83,111,117,114,99,101,76,111,97,100,101, + 114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100, + 101,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,83,0,41,2,122,150,79,112,116,105,111,110,97,108,32, + 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105, + 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41, + 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32, + 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, + 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, + 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, + 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110, + 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105, + 108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,3, + 0,0,0,41,3,114,118,0,0,0,114,43,0,0,0,114, + 25,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,114,225,0,0,0,59,3,0,0,115,2,0,0, + 0,0,1,122,21,83,111,117,114,99,101,76,111,97,100,101, + 114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,10,0,0,0,67, + 0,0,0,115,86,0,0,0,124,0,160,0,124,1,161,1, + 125,2,122,14,124,0,160,1,124,2,161,1,125,3,87,0, + 110,52,4,0,116,2,107,10,114,76,1,0,125,4,1,0, + 122,26,116,3,100,1,124,1,100,2,141,2,124,4,130,2, + 87,0,89,0,100,3,125,4,126,4,110,10,100,3,125,4, + 126,4,48,0,48,0,116,4,124,3,131,1,83,0,41,4, + 122,52,67,111,110,99,114,101,116,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, + 112,101,99,116,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,46,122,39,115,111,117,114,99,101,32,110, + 111,116,32,97,118,97,105,108,97,98,108,101,32,116,104,114, + 111,117,103,104,32,103,101,116,95,100,97,116,97,40,41,114, + 115,0,0,0,78,41,5,114,179,0,0,0,218,8,103,101, + 116,95,100,97,116,97,114,49,0,0,0,114,117,0,0,0, + 114,176,0,0,0,41,5,114,118,0,0,0,114,139,0,0, + 0,114,43,0,0,0,114,174,0,0,0,218,3,101,120,99, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, + 10,103,101,116,95,115,111,117,114,99,101,66,3,0,0,115, + 20,0,0,0,0,2,10,1,2,1,14,1,16,1,4,1, + 2,255,4,1,2,255,24,2,122,23,83,111,117,114,99,101, + 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, + 101,114,104,0,0,0,41,1,218,9,95,111,112,116,105,109, + 105,122,101,99,3,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,8,0,0,0,67,0,0,0,115,22,0,0, + 0,116,0,106,1,116,2,124,1,124,2,100,1,100,2,124, + 3,100,3,141,6,83,0,41,4,122,130,82,101,116,117,114, + 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, + 116,32,99,111,109,112,105,108,101,100,32,102,114,111,109,32, + 115,111,117,114,99,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,101,32,39,100,97,116,97,39,32,97,114,103,117, + 109,101,110,116,32,99,97,110,32,98,101,32,97,110,121,32, + 111,98,106,101,99,116,32,116,121,112,101,32,116,104,97,116, + 32,99,111,109,112,105,108,101,40,41,32,115,117,112,112,111, + 114,116,115,46,10,32,32,32,32,32,32,32,32,114,215,0, + 0,0,84,41,2,218,12,100,111,110,116,95,105,110,104,101, + 114,105,116,114,83,0,0,0,41,3,114,134,0,0,0,114, + 214,0,0,0,218,7,99,111,109,112,105,108,101,41,4,114, + 118,0,0,0,114,25,0,0,0,114,43,0,0,0,114,230, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,218,14,115,111,117,114,99,101,95,116,111,95,99,111, + 100,101,76,3,0,0,115,8,0,0,0,0,5,12,1,2, + 0,2,255,122,27,83,111,117,114,99,101,76,111,97,100,101, + 114,46,115,111,117,114,99,101,95,116,111,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,15,0,0, + 0,9,0,0,0,67,0,0,0,115,34,2,0,0,124,0, + 160,0,124,1,161,1,125,2,100,1,125,3,100,1,125,4, + 100,1,125,5,100,2,125,6,100,3,125,7,122,12,116,1, + 124,2,131,1,125,8,87,0,110,26,4,0,116,2,107,10, + 114,68,1,0,1,0,1,0,100,1,125,8,89,0,144,1, + 110,48,48,0,122,14,124,0,160,3,124,2,161,1,125,9, + 87,0,110,22,4,0,116,4,107,10,114,106,1,0,1,0, + 1,0,89,0,144,1,110,10,48,0,116,5,124,9,100,4, + 25,0,131,1,125,3,122,14,124,0,160,6,124,8,161,1, + 125,10,87,0,110,20,4,0,116,4,107,10,114,154,1,0, + 1,0,1,0,89,0,110,218,48,0,124,1,124,8,100,5, + 156,2,125,11,122,148,116,7,124,10,124,1,124,11,131,3, + 125,12,116,8,124,10,131,1,100,6,100,1,133,2,25,0, + 125,13,124,12,100,7,64,0,100,8,107,3,125,6,124,6, + 144,1,114,36,124,12,100,9,64,0,100,8,107,3,125,7, + 116,9,106,10,100,10,107,3,144,1,114,56,124,7,115,254, + 116,9,106,10,100,11,107,2,144,1,114,56,124,0,160,6, + 124,2,161,1,125,4,116,9,160,11,116,12,124,4,161,2, + 125,5,116,13,124,10,124,5,124,1,124,11,131,4,1,0, + 110,20,116,14,124,10,124,3,124,9,100,12,25,0,124,1, + 124,11,131,5,1,0,87,0,110,26,4,0,116,15,116,16, + 102,2,107,10,144,1,114,84,1,0,1,0,1,0,89,0, + 110,32,48,0,116,17,160,18,100,13,124,8,124,2,161,3, + 1,0,116,19,124,13,124,1,124,8,124,2,100,14,141,4, + 83,0,124,4,100,1,107,8,144,1,114,136,124,0,160,6, + 124,2,161,1,125,4,124,0,160,20,124,4,124,2,161,2, + 125,14,116,17,160,18,100,15,124,2,161,2,1,0,116,21, + 106,22,144,2,115,30,124,8,100,1,107,9,144,2,114,30, + 124,3,100,1,107,9,144,2,114,30,124,6,144,1,114,228, + 124,5,100,1,107,8,144,1,114,214,116,9,160,11,124,4, + 161,1,125,5,116,23,124,14,124,5,124,7,131,3,125,10, + 110,16,116,24,124,14,124,3,116,25,124,4,131,1,131,3, + 125,10,122,18,124,0,160,26,124,2,124,8,124,10,161,3, + 1,0,87,0,110,22,4,0,116,2,107,10,144,2,114,28, + 1,0,1,0,1,0,89,0,110,2,48,0,124,14,83,0, + 41,16,122,190,67,111,110,99,114,101,116,101,32,105,109,112, + 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, + 110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,116, + 95,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, + 82,101,97,100,105,110,103,32,111,102,32,98,121,116,101,99, + 111,100,101,32,114,101,113,117,105,114,101,115,32,112,97,116, + 104,95,115,116,97,116,115,32,116,111,32,98,101,32,105,109, + 112,108,101,109,101,110,116,101,100,46,32,84,111,32,119,114, + 105,116,101,10,32,32,32,32,32,32,32,32,98,121,116,101, + 99,111,100,101,44,32,115,101,116,95,100,97,116,97,32,109, + 117,115,116,32,97,108,115,111,32,98,101,32,105,109,112,108, + 101,109,101,110,116,101,100,46,10,10,32,32,32,32,32,32, + 32,32,78,70,84,114,169,0,0,0,114,159,0,0,0,114, + 145,0,0,0,114,38,0,0,0,114,72,0,0,0,114,27, + 0,0,0,90,5,110,101,118,101,114,90,6,97,108,119,97, + 121,115,218,4,115,105,122,101,122,13,123,125,32,109,97,116, + 99,104,101,115,32,123,125,41,3,114,116,0,0,0,114,106, + 0,0,0,114,107,0,0,0,122,19,99,111,100,101,32,111, + 98,106,101,99,116,32,102,114,111,109,32,123,125,41,27,114, + 179,0,0,0,114,97,0,0,0,114,81,0,0,0,114,224, + 0,0,0,114,49,0,0,0,114,17,0,0,0,114,227,0, + 0,0,114,152,0,0,0,218,10,109,101,109,111,114,121,118, + 105,101,119,114,163,0,0,0,90,21,99,104,101,99,107,95, + 104,97,115,104,95,98,97,115,101,100,95,112,121,99,115,114, + 157,0,0,0,218,17,95,82,65,87,95,77,65,71,73,67, + 95,78,85,77,66,69,82,114,158,0,0,0,114,156,0,0, + 0,114,117,0,0,0,114,150,0,0,0,114,134,0,0,0, + 114,149,0,0,0,114,165,0,0,0,114,233,0,0,0,114, + 8,0,0,0,218,19,100,111,110,116,95,119,114,105,116,101, + 95,98,121,116,101,99,111,100,101,114,171,0,0,0,114,170, + 0,0,0,114,22,0,0,0,114,226,0,0,0,41,15,114, + 118,0,0,0,114,139,0,0,0,114,107,0,0,0,114,154, + 0,0,0,114,174,0,0,0,114,157,0,0,0,90,10,104, + 97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,107, + 95,115,111,117,114,99,101,114,106,0,0,0,218,2,115,116, + 114,25,0,0,0,114,151,0,0,0,114,82,0,0,0,90, + 10,98,121,116,101,115,95,100,97,116,97,90,11,99,111,100, + 101,95,111,98,106,101,99,116,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,213,0,0,0,84,3,0,0, + 115,152,0,0,0,0,7,10,1,4,1,4,1,4,1,4, + 1,4,1,2,1,12,1,14,1,12,2,2,1,14,1,14, + 1,8,2,12,1,2,1,14,1,14,1,6,3,2,1,2, + 254,6,4,2,1,12,1,16,1,12,1,6,1,12,1,12, + 1,2,255,2,2,8,254,4,3,10,1,4,1,2,1,2, + 254,4,4,8,1,2,255,6,3,2,1,2,1,2,1,6, + 1,2,1,2,251,8,7,20,1,6,2,8,1,2,255,4, + 2,6,1,2,1,2,254,6,3,10,1,10,1,12,1,12, + 1,18,1,6,255,4,2,6,1,10,1,10,1,14,2,6, + 1,6,255,4,2,2,1,18,1,16,1,6,1,122,21,83, + 111,117,114,99,101,76,111,97,100,101,114,46,103,101,116,95, + 99,111,100,101,78,41,10,114,125,0,0,0,114,124,0,0, + 0,114,126,0,0,0,114,223,0,0,0,114,224,0,0,0, + 114,226,0,0,0,114,225,0,0,0,114,229,0,0,0,114, + 233,0,0,0,114,213,0,0,0,114,3,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,114,221,0, + 0,0,25,3,0,0,115,14,0,0,0,8,2,8,8,8, + 14,8,10,8,7,8,10,14,8,114,221,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,0,0,0,0,115,124,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,100,6,100,7,132,0,90,6, + 101,7,135,0,102,1,100,8,100,9,132,8,131,1,90,8, + 101,7,100,10,100,11,132,0,131,1,90,9,100,12,100,13, + 132,0,90,10,101,7,100,14,100,15,132,0,131,1,90,11, + 100,16,100,17,132,0,90,12,100,18,100,19,132,0,90,13, + 100,20,100,21,132,0,90,14,100,22,100,23,132,0,90,15, + 135,0,4,0,90,16,83,0,41,24,218,10,70,105,108,101, + 76,111,97,100,101,114,122,103,66,97,115,101,32,102,105,108, + 101,32,108,111,97,100,101,114,32,99,108,97,115,115,32,119, + 104,105,99,104,32,105,109,112,108,101,109,101,110,116,115,32, + 116,104,101,32,108,111,97,100,101,114,32,112,114,111,116,111, + 99,111,108,32,109,101,116,104,111,100,115,32,116,104,97,116, + 10,32,32,32,32,114,101,113,117,105,114,101,32,102,105,108, + 101,32,115,121,115,116,101,109,32,117,115,97,103,101,46,99, + 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,124, + 0,95,0,124,2,124,0,95,1,100,1,83,0,41,2,122, + 75,67,97,99,104,101,32,116,104,101,32,109,111,100,117,108, + 101,32,110,97,109,101,32,97,110,100,32,116,104,101,32,112, + 97,116,104,32,116,111,32,116,104,101,32,102,105,108,101,32, + 102,111,117,110,100,32,98,121,32,116,104,101,10,32,32,32, + 32,32,32,32,32,102,105,110,100,101,114,46,78,114,159,0, + 0,0,41,3,114,118,0,0,0,114,139,0,0,0,114,43, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,114,209,0,0,0,174,3,0,0,115,4,0,0,0, + 0,3,6,1,122,19,70,105,108,101,76,111,97,100,101,114, + 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,24,0,0,0,124,0,106,0,124,1,106,0,107, + 2,111,22,124,0,106,1,124,1,106,1,107,2,83,0,114, + 109,0,0,0,169,2,218,9,95,95,99,108,97,115,115,95, + 95,114,131,0,0,0,169,2,114,118,0,0,0,90,5,111, + 116,104,101,114,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,218,6,95,95,101,113,95,95,180,3,0,0,115, + 6,0,0,0,0,1,12,1,10,255,122,17,70,105,108,101, + 76,111,97,100,101,114,46,95,95,101,113,95,95,99,1,0, + 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0, + 0,0,67,0,0,0,115,20,0,0,0,116,0,124,0,106, + 1,131,1,116,0,124,0,106,2,131,1,65,0,83,0,114, + 109,0,0,0,169,3,218,4,104,97,115,104,114,116,0,0, + 0,114,43,0,0,0,169,1,114,118,0,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,218,8,95,95, + 104,97,115,104,95,95,184,3,0,0,115,2,0,0,0,0, + 1,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95, + 104,97,115,104,95,95,99,2,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115, + 16,0,0,0,116,0,116,1,124,0,131,2,160,2,124,1, + 161,1,83,0,41,1,122,100,76,111,97,100,32,97,32,109, + 111,100,117,108,101,32,102,114,111,109,32,97,32,102,105,108, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, + 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,41,3,218,5, + 115,117,112,101,114,114,239,0,0,0,114,220,0,0,0,114, + 219,0,0,0,169,1,114,241,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,220,0,0,0,187,3,0,0,115,2, + 0,0,0,0,10,122,22,70,105,108,101,76,111,97,100,101, + 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83, + 0,169,1,122,58,82,101,116,117,114,110,32,116,104,101,32, + 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, + 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, + 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,114, + 47,0,0,0,114,219,0,0,0,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,179,0,0,0,199,3,0, + 0,115,2,0,0,0,0,3,122,23,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,102,105,108,101,110,97,109, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,8,0,0,0,67,0,0,0,115,126,0,0,0,116, + 0,124,0,116,1,116,2,102,2,131,2,114,70,116,3,160, + 4,116,5,124,1,131,1,161,1,143,24,125,2,124,2,160, + 6,161,0,87,0,2,0,100,1,4,0,4,0,131,3,1, + 0,83,0,49,0,115,58,48,0,1,0,1,0,1,0,89, + 0,1,0,110,52,116,3,160,7,124,1,100,2,161,2,143, + 24,125,2,124,2,160,6,161,0,87,0,2,0,100,1,4, + 0,4,0,131,3,1,0,83,0,49,0,115,112,48,0,1, + 0,1,0,1,0,89,0,1,0,100,1,83,0,41,3,122, + 39,82,101,116,117,114,110,32,116,104,101,32,100,97,116,97, + 32,102,114,111,109,32,112,97,116,104,32,97,115,32,114,97, + 119,32,98,121,116,101,115,46,78,218,1,114,41,8,114,161, + 0,0,0,114,221,0,0,0,218,19,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,114,63,0, + 0,0,90,9,111,112,101,110,95,99,111,100,101,114,84,0, + 0,0,90,4,114,101,97,100,114,64,0,0,0,41,3,114, + 118,0,0,0,114,43,0,0,0,114,67,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,114,227,0, + 0,0,204,3,0,0,115,10,0,0,0,0,2,14,1,16, + 1,40,2,14,1,122,19,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,100,97,116,97,99,2,0,0,0,0, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,115,18,0,0,0,124,0,160,0,124,1,161,1, + 114,14,124,0,83,0,100,0,83,0,114,109,0,0,0,41, + 1,114,182,0,0,0,169,2,114,118,0,0,0,114,216,0, + 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,95, + 114,101,97,100,101,114,215,3,0,0,115,6,0,0,0,0, + 2,10,1,4,1,122,30,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,114, + 101,97,100,101,114,99,2,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,32, + 0,0,0,116,0,116,1,124,0,106,2,131,1,100,1,25, + 0,124,1,131,2,125,2,116,3,160,4,124,2,100,2,161, + 2,83,0,41,3,78,114,72,0,0,0,114,251,0,0,0, + 41,5,114,37,0,0,0,114,46,0,0,0,114,43,0,0, + 0,114,63,0,0,0,114,64,0,0,0,169,3,114,118,0, + 0,0,90,8,114,101,115,111,117,114,99,101,114,43,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,13,111,112,101,110,95,114,101,115,111,117,114,99,101,221, + 3,0,0,115,4,0,0,0,0,1,20,1,122,24,70,105, + 108,101,76,111,97,100,101,114,46,111,112,101,110,95,114,101, + 115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, + 38,0,0,0,124,0,160,0,124,1,161,1,115,14,116,1, + 130,1,116,2,116,3,124,0,106,4,131,1,100,1,25,0, + 124,1,131,2,125,2,124,2,83,0,169,2,78,114,72,0, + 0,0,41,5,218,11,105,115,95,114,101,115,111,117,114,99, + 101,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, + 114,114,111,114,114,37,0,0,0,114,46,0,0,0,114,43, + 0,0,0,114,255,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,218,13,114,101,115,111,117,114,99, + 101,95,112,97,116,104,225,3,0,0,115,8,0,0,0,0, + 1,10,1,4,1,20,1,122,24,70,105,108,101,76,111,97, + 100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,116, + 104,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,40,0,0,0,116, + 0,124,1,107,6,114,12,100,1,83,0,116,1,116,2,124, + 0,106,3,131,1,100,2,25,0,124,1,131,2,125,2,116, + 4,124,2,131,1,83,0,41,3,78,70,114,72,0,0,0, + 41,5,114,34,0,0,0,114,37,0,0,0,114,46,0,0, + 0,114,43,0,0,0,114,53,0,0,0,169,3,114,118,0, + 0,0,114,116,0,0,0,114,43,0,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,2,1,0,0, + 231,3,0,0,115,8,0,0,0,0,1,8,1,4,1,20, + 1,122,22,70,105,108,101,76,111,97,100,101,114,46,105,115, + 95,114,101,115,111,117,114,99,101,99,1,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,0, + 0,0,115,24,0,0,0,116,0,116,1,160,2,116,3,124, + 0,106,4,131,1,100,1,25,0,161,1,131,1,83,0,114, + 1,1,0,0,41,5,218,4,105,116,101,114,114,2,0,0, + 0,218,7,108,105,115,116,100,105,114,114,46,0,0,0,114, + 43,0,0,0,114,246,0,0,0,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,218,8,99,111,110,116,101,110, + 116,115,237,3,0,0,115,2,0,0,0,0,1,122,19,70, + 105,108,101,76,111,97,100,101,114,46,99,111,110,116,101,110, + 116,115,41,17,114,125,0,0,0,114,124,0,0,0,114,126, + 0,0,0,114,127,0,0,0,114,209,0,0,0,114,243,0, + 0,0,114,247,0,0,0,114,136,0,0,0,114,220,0,0, + 0,114,179,0,0,0,114,227,0,0,0,114,254,0,0,0, + 114,0,1,0,0,114,4,1,0,0,114,2,1,0,0,114, + 8,1,0,0,90,13,95,95,99,108,97,115,115,99,101,108, + 108,95,95,114,3,0,0,0,114,3,0,0,0,114,249,0, + 0,0,114,6,0,0,0,114,239,0,0,0,169,3,0,0, + 115,30,0,0,0,8,2,4,3,8,6,8,4,8,3,2, + 1,14,11,2,1,10,4,8,11,2,1,10,5,8,4,8, + 6,8,6,114,239,0,0,0,99,0,0,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0, + 0,115,46,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, + 90,5,100,6,100,7,156,1,100,8,100,9,132,2,90,6, + 100,10,83,0,41,11,218,16,83,111,117,114,99,101,70,105, + 108,101,76,111,97,100,101,114,122,62,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,83,111,117,114,99,101,76,111,97,100,101, + 114,32,117,115,105,110,103,32,116,104,101,32,102,105,108,101, + 32,115,121,115,116,101,109,46,99,2,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,22,0,0,0,116,0,124,1,131,1,125,2,124,2, + 106,1,124,2,106,2,100,1,156,2,83,0,41,2,122,33, + 82,101,116,117,114,110,32,116,104,101,32,109,101,116,97,100, + 97,116,97,32,102,111,114,32,116,104,101,32,112,97,116,104, + 46,41,2,114,169,0,0,0,114,234,0,0,0,41,3,114, + 48,0,0,0,218,8,115,116,95,109,116,105,109,101,90,7, + 115,116,95,115,105,122,101,41,3,114,118,0,0,0,114,43, + 0,0,0,114,238,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,224,0,0,0,245,3,0,0, + 115,4,0,0,0,0,2,8,1,122,27,83,111,117,114,99, + 101,70,105,108,101,76,111,97,100,101,114,46,112,97,116,104, + 95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, + 24,0,0,0,116,0,124,1,131,1,125,4,124,0,106,1, + 124,2,124,3,124,4,100,1,141,3,83,0,41,2,78,169, + 1,218,5,95,109,111,100,101,41,2,114,114,0,0,0,114, + 225,0,0,0,41,5,114,118,0,0,0,114,107,0,0,0, + 114,106,0,0,0,114,25,0,0,0,114,51,0,0,0,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,226, + 0,0,0,250,3,0,0,115,4,0,0,0,0,2,8,1, + 122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,114,59,0,0,0,114,11,1,0,0,99,3,0,0, + 0,0,0,0,0,1,0,0,0,9,0,0,0,11,0,0, + 0,67,0,0,0,115,2,1,0,0,116,0,124,1,131,1, + 92,2,125,4,125,5,103,0,125,6,124,4,114,52,116,1, + 124,4,131,1,115,52,116,0,124,4,131,1,92,2,125,4, + 125,7,124,6,160,2,124,7,161,1,1,0,113,16,116,3, + 124,6,131,1,68,0,93,108,125,7,116,4,124,4,124,7, + 131,2,125,4,122,14,116,5,160,6,124,4,161,1,1,0, + 87,0,113,60,4,0,116,7,107,10,114,112,1,0,1,0, + 1,0,89,0,113,60,89,0,113,60,4,0,116,8,107,10, + 114,166,1,0,125,8,1,0,122,30,116,9,160,10,100,1, + 124,4,124,8,161,3,1,0,87,0,89,0,100,2,125,8, + 126,8,1,0,100,2,83,0,100,2,125,8,126,8,48,0, + 48,0,113,60,122,28,116,11,124,1,124,2,124,3,131,3, + 1,0,116,9,160,10,100,3,124,1,161,2,1,0,87,0, + 110,54,4,0,116,8,107,10,144,0,114,252,1,0,125,8, + 1,0,122,26,116,9,160,10,100,1,124,1,124,8,161,3, + 1,0,87,0,89,0,100,2,125,8,126,8,110,10,100,2, + 125,8,126,8,48,0,48,0,100,2,83,0,41,4,122,27, + 87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,97, + 32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,117, + 108,100,32,110,111,116,32,99,114,101,97,116,101,32,123,33, + 114,125,58,32,123,33,114,125,78,122,12,99,114,101,97,116, + 101,100,32,123,33,114,125,41,12,114,46,0,0,0,114,55, + 0,0,0,114,186,0,0,0,114,41,0,0,0,114,37,0, + 0,0,114,2,0,0,0,90,5,109,107,100,105,114,218,15, + 70,105,108,101,69,120,105,115,116,115,69,114,114,111,114,114, + 49,0,0,0,114,134,0,0,0,114,149,0,0,0,114,68, + 0,0,0,41,9,114,118,0,0,0,114,43,0,0,0,114, + 25,0,0,0,114,12,1,0,0,218,6,112,97,114,101,110, + 116,114,96,0,0,0,114,36,0,0,0,114,32,0,0,0, + 114,228,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,225,0,0,0,255,3,0,0,115,48,0, + 0,0,0,2,12,1,4,2,12,1,12,1,12,2,12,1, + 10,1,2,1,14,1,14,2,8,1,16,3,6,1,2,0, + 2,255,4,2,28,1,2,1,12,1,16,1,18,2,8,1, + 2,255,122,25,83,111,117,114,99,101,70,105,108,101,76,111, + 97,100,101,114,46,115,101,116,95,100,97,116,97,78,41,7, + 114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114, + 127,0,0,0,114,224,0,0,0,114,226,0,0,0,114,225, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,9,1,0,0,241,3,0,0, + 115,8,0,0,0,8,2,4,2,8,5,8,5,114,9,1, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,0,2,0,0,0,64,0,0,0,115,32,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, + 132,0,90,4,100,4,100,5,132,0,90,5,100,6,83,0, + 41,7,218,20,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,122,45,76,111,97,100,101,114, + 32,119,104,105,99,104,32,104,97,110,100,108,101,115,32,115, + 111,117,114,99,101,108,101,115,115,32,102,105,108,101,32,105, + 109,112,111,114,116,115,46,99,2,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0, + 115,68,0,0,0,124,0,160,0,124,1,161,1,125,2,124, + 0,160,1,124,2,161,1,125,3,124,1,124,2,100,1,156, + 2,125,4,116,2,124,3,124,1,124,4,131,3,1,0,116, + 3,116,4,124,3,131,1,100,2,100,0,133,2,25,0,124, + 1,124,2,100,3,141,3,83,0,41,4,78,114,159,0,0, + 0,114,145,0,0,0,41,2,114,116,0,0,0,114,106,0, + 0,0,41,5,114,179,0,0,0,114,227,0,0,0,114,152, + 0,0,0,114,165,0,0,0,114,235,0,0,0,41,5,114, + 118,0,0,0,114,139,0,0,0,114,43,0,0,0,114,25, + 0,0,0,114,151,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,213,0,0,0,34,4,0,0, + 115,22,0,0,0,0,1,10,1,10,4,2,1,2,254,6, + 4,12,1,2,1,14,1,2,1,2,253,122,29,83,111,117, + 114,99,101,108,101,115,115,70,105,108,101,76,111,97,100,101, 114,46,103,101,116,95,99,111,100,101,99,2,0,0,0,0, 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,83,0,114,210,0,0, - 0,114,3,0,0,0,114,211,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,212,0,0,0,195, - 4,0,0,115,2,0,0,0,0,1,122,30,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,99,114,101, - 97,116,101,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,0,83,0,114,109,0,0, - 0,114,3,0,0,0,114,253,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,217,0,0,0,198, - 4,0,0,115,2,0,0,0,0,1,122,28,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,101,120,101, - 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0, - 0,115,26,0,0,0,116,0,160,1,100,1,124,0,106,2, - 161,2,1,0,116,0,160,3,124,0,124,1,161,2,83,0, - 41,2,122,98,76,111,97,100,32,97,32,110,97,109,101,115, - 112,97,99,101,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, - 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,122,38,110,97,109,101,115,112,97,99, - 101,32,109,111,100,117,108,101,32,108,111,97,100,101,100,32, - 119,105,116,104,32,112,97,116,104,32,123,33,114,125,41,4, - 114,134,0,0,0,114,149,0,0,0,114,24,1,0,0,114, - 218,0,0,0,114,219,0,0,0,114,3,0,0,0,114,3, - 0,0,0,114,6,0,0,0,114,220,0,0,0,201,4,0, - 0,115,8,0,0,0,0,7,6,1,4,255,4,2,122,28, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,108,111,97,100,95,109,111,100,117,108,101,78,41,12,114, - 125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,209, - 0,0,0,114,207,0,0,0,114,44,1,0,0,114,182,0, - 0,0,114,229,0,0,0,114,213,0,0,0,114,212,0,0, - 0,114,217,0,0,0,114,220,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 43,1,0,0,173,4,0,0,115,18,0,0,0,8,1,8, - 3,2,1,10,8,8,3,8,3,8,3,8,3,8,3,114, - 43,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,64,0,0,0,115,118,0, - 0,0,101,0,90,1,100,0,90,2,100,1,90,3,101,4, - 100,2,100,3,132,0,131,1,90,5,101,4,100,4,100,5, - 132,0,131,1,90,6,101,4,100,6,100,7,132,0,131,1, - 90,7,101,4,100,8,100,9,132,0,131,1,90,8,101,4, - 100,19,100,11,100,12,132,1,131,1,90,9,101,4,100,20, - 100,13,100,14,132,1,131,1,90,10,101,4,100,21,100,15, - 100,16,132,1,131,1,90,11,101,4,100,17,100,18,132,0, - 131,1,90,12,100,10,83,0,41,22,218,10,80,97,116,104, - 70,105,110,100,101,114,122,62,77,101,116,97,32,112,97,116, - 104,32,102,105,110,100,101,114,32,102,111,114,32,115,121,115, - 46,112,97,116,104,32,97,110,100,32,112,97,99,107,97,103, - 101,32,95,95,112,97,116,104,95,95,32,97,116,116,114,105, - 98,117,116,101,115,46,99,1,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, - 64,0,0,0,116,0,116,1,106,2,160,3,161,0,131,1, - 68,0,93,44,92,2,125,1,125,2,124,2,100,1,107,8, - 114,40,116,1,106,2,124,1,61,0,113,14,116,4,124,2, - 100,2,131,2,114,14,124,2,160,5,161,0,1,0,113,14, - 100,1,83,0,41,3,122,125,67,97,108,108,32,116,104,101, - 32,105,110,118,97,108,105,100,97,116,101,95,99,97,99,104, - 101,115,40,41,32,109,101,116,104,111,100,32,111,110,32,97, - 108,108,32,112,97,116,104,32,101,110,116,114,121,32,102,105, - 110,100,101,114,115,10,32,32,32,32,32,32,32,32,115,116, - 111,114,101,100,32,105,110,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,115, - 32,40,119,104,101,114,101,32,105,109,112,108,101,109,101,110, - 116,101,100,41,46,78,218,17,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,41,6,218,4,108,105,115, - 116,114,8,0,0,0,218,19,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,218,5,105,116,101, - 109,115,114,128,0,0,0,114,46,1,0,0,41,3,114,193, - 0,0,0,114,116,0,0,0,218,6,102,105,110,100,101,114, - 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, - 46,1,0,0,219,4,0,0,115,10,0,0,0,0,4,22, - 1,8,1,10,1,10,1,122,28,80,97,116,104,70,105,110, - 100,101,114,46,105,110,118,97,108,105,100,97,116,101,95,99, - 97,99,104,101,115,99,2,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,9,0,0,0,67,0,0,0,115,84, - 0,0,0,116,0,106,1,100,1,107,9,114,28,116,0,106, - 1,115,28,116,2,160,3,100,2,116,4,161,2,1,0,116, - 0,106,1,68,0,93,44,125,2,122,14,124,2,124,1,131, - 1,87,0,2,0,1,0,83,0,4,0,116,5,107,10,114, - 76,1,0,1,0,1,0,89,0,113,34,89,0,113,34,88, - 0,113,34,100,1,83,0,41,3,122,46,83,101,97,114,99, - 104,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, - 32,102,111,114,32,97,32,102,105,110,100,101,114,32,102,111, - 114,32,39,112,97,116,104,39,46,78,122,23,115,121,115,46, - 112,97,116,104,95,104,111,111,107,115,32,105,115,32,101,109, - 112,116,121,41,6,114,8,0,0,0,218,10,112,97,116,104, - 95,104,111,111,107,115,114,74,0,0,0,114,75,0,0,0, - 114,138,0,0,0,114,117,0,0,0,41,3,114,193,0,0, - 0,114,43,0,0,0,90,4,104,111,111,107,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,218,11,95,112,97, - 116,104,95,104,111,111,107,115,229,4,0,0,115,16,0,0, - 0,0,3,16,1,12,1,10,1,2,1,14,1,14,1,12, - 2,122,22,80,97,116,104,70,105,110,100,101,114,46,95,112, - 97,116,104,95,104,111,111,107,115,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,8,0,0,0,67,0, - 0,0,115,104,0,0,0,124,1,100,1,107,2,114,44,122, - 12,116,0,160,1,161,0,125,1,87,0,110,22,4,0,116, - 2,107,10,114,42,1,0,1,0,1,0,89,0,100,2,83, - 0,88,0,122,14,116,3,106,4,124,1,25,0,125,2,87, - 0,110,40,4,0,116,5,107,10,114,98,1,0,1,0,1, - 0,124,0,160,6,124,1,161,1,125,2,124,2,116,3,106, - 4,124,1,60,0,89,0,110,2,88,0,124,2,83,0,41, - 3,122,210,71,101,116,32,116,104,101,32,102,105,110,100,101, - 114,32,102,111,114,32,116,104,101,32,112,97,116,104,32,101, - 110,116,114,121,32,102,114,111,109,32,115,121,115,46,112,97, - 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, - 101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116, - 104,101,32,112,97,116,104,32,101,110,116,114,121,32,105,115, - 32,110,111,116,32,105,110,32,116,104,101,32,99,97,99,104, - 101,44,32,102,105,110,100,32,116,104,101,32,97,112,112,114, - 111,112,114,105,97,116,101,32,102,105,110,100,101,114,10,32, - 32,32,32,32,32,32,32,97,110,100,32,99,97,99,104,101, - 32,105,116,46,32,73,102,32,110,111,32,102,105,110,100,101, - 114,32,105,115,32,97,118,97,105,108,97,98,108,101,44,32, - 115,116,111,114,101,32,78,111,110,101,46,10,10,32,32,32, - 32,32,32,32,32,114,39,0,0,0,78,41,7,114,2,0, - 0,0,114,54,0,0,0,114,3,1,0,0,114,8,0,0, - 0,114,48,1,0,0,218,8,75,101,121,69,114,114,111,114, - 114,52,1,0,0,41,3,114,193,0,0,0,114,43,0,0, - 0,114,50,1,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,20,95,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,242,4,0,0,115, - 22,0,0,0,0,8,8,1,2,1,12,1,14,3,8,1, - 2,1,14,1,14,1,10,1,16,1,122,31,80,97,116,104, - 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, - 0,0,0,0,0,0,0,0,6,0,0,0,4,0,0,0, - 67,0,0,0,115,82,0,0,0,116,0,124,2,100,1,131, - 2,114,26,124,2,160,1,124,1,161,1,92,2,125,3,125, - 4,110,14,124,2,160,2,124,1,161,1,125,3,103,0,125, - 4,124,3,100,0,107,9,114,60,116,3,160,4,124,1,124, - 3,161,2,83,0,116,3,160,5,124,1,100,0,161,2,125, - 5,124,4,124,5,95,6,124,5,83,0,41,2,78,114,137, - 0,0,0,41,7,114,128,0,0,0,114,137,0,0,0,114, - 206,0,0,0,114,134,0,0,0,114,201,0,0,0,114,183, - 0,0,0,114,178,0,0,0,41,6,114,193,0,0,0,114, - 139,0,0,0,114,50,1,0,0,114,140,0,0,0,114,141, - 0,0,0,114,187,0,0,0,114,3,0,0,0,114,3,0, - 0,0,114,6,0,0,0,218,16,95,108,101,103,97,99,121, - 95,103,101,116,95,115,112,101,99,8,5,0,0,115,18,0, - 0,0,0,4,10,1,16,2,10,1,4,1,8,1,12,1, - 12,1,6,1,122,27,80,97,116,104,70,105,110,100,101,114, - 46,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101, - 99,78,99,4,0,0,0,0,0,0,0,0,0,0,0,9, - 0,0,0,5,0,0,0,67,0,0,0,115,166,0,0,0, - 103,0,125,4,124,2,68,0,93,134,125,5,116,0,124,5, - 116,1,116,2,102,2,131,2,115,28,113,8,124,0,160,3, - 124,5,161,1,125,6,124,6,100,1,107,9,114,8,116,4, - 124,6,100,2,131,2,114,70,124,6,160,5,124,1,124,3, - 161,2,125,7,110,12,124,0,160,6,124,1,124,6,161,2, - 125,7,124,7,100,1,107,8,114,92,113,8,124,7,106,7, - 100,1,107,9,114,110,124,7,2,0,1,0,83,0,124,7, - 106,8,125,8,124,8,100,1,107,8,114,132,116,9,100,3, - 131,1,130,1,124,4,160,10,124,8,161,1,1,0,113,8, - 116,11,160,12,124,1,100,1,161,2,125,7,124,4,124,7, - 95,8,124,7,83,0,41,4,122,63,70,105,110,100,32,116, - 104,101,32,108,111,97,100,101,114,32,111,114,32,110,97,109, - 101,115,112,97,99,101,95,112,97,116,104,32,102,111,114,32, - 116,104,105,115,32,109,111,100,117,108,101,47,112,97,99,107, - 97,103,101,32,110,97,109,101,46,78,114,203,0,0,0,122, - 19,115,112,101,99,32,109,105,115,115,105,110,103,32,108,111, - 97,100,101,114,41,13,114,161,0,0,0,114,84,0,0,0, - 218,5,98,121,116,101,115,114,54,1,0,0,114,128,0,0, - 0,114,203,0,0,0,114,55,1,0,0,114,140,0,0,0, - 114,178,0,0,0,114,117,0,0,0,114,167,0,0,0,114, - 134,0,0,0,114,183,0,0,0,41,9,114,193,0,0,0, - 114,139,0,0,0,114,43,0,0,0,114,202,0,0,0,218, - 14,110,97,109,101,115,112,97,99,101,95,112,97,116,104,90, - 5,101,110,116,114,121,114,50,1,0,0,114,187,0,0,0, - 114,141,0,0,0,114,3,0,0,0,114,3,0,0,0,114, - 6,0,0,0,218,9,95,103,101,116,95,115,112,101,99,23, - 5,0,0,115,40,0,0,0,0,5,4,1,8,1,14,1, - 2,1,10,1,8,1,10,1,14,2,12,1,8,1,2,1, - 10,1,8,1,6,1,8,1,8,5,12,2,12,1,6,1, - 122,20,80,97,116,104,70,105,110,100,101,114,46,95,103,101, - 116,95,115,112,101,99,99,4,0,0,0,0,0,0,0,0, - 0,0,0,6,0,0,0,5,0,0,0,67,0,0,0,115, - 100,0,0,0,124,2,100,1,107,8,114,14,116,0,106,1, - 125,2,124,0,160,2,124,1,124,2,124,3,161,3,125,4, - 124,4,100,1,107,8,114,40,100,1,83,0,124,4,106,3, - 100,1,107,8,114,92,124,4,106,4,125,5,124,5,114,86, - 100,1,124,4,95,5,116,6,124,1,124,5,124,0,106,2, - 131,3,124,4,95,4,124,4,83,0,100,1,83,0,110,4, - 124,4,83,0,100,1,83,0,41,2,122,141,84,114,121,32, - 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, - 111,114,32,39,102,117,108,108,110,97,109,101,39,32,111,110, - 32,115,121,115,46,112,97,116,104,32,111,114,32,39,112,97, - 116,104,39,46,10,10,32,32,32,32,32,32,32,32,84,104, - 101,32,115,101,97,114,99,104,32,105,115,32,98,97,115,101, - 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, - 111,107,115,32,97,110,100,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,32,32,32,32,32,32,32,32,78,41,7,114,8,0,0, - 0,114,43,0,0,0,114,58,1,0,0,114,140,0,0,0, - 114,178,0,0,0,114,181,0,0,0,114,22,1,0,0,41, - 6,114,193,0,0,0,114,139,0,0,0,114,43,0,0,0, - 114,202,0,0,0,114,187,0,0,0,114,57,1,0,0,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,203, - 0,0,0,55,5,0,0,115,26,0,0,0,0,6,8,1, - 6,1,14,1,8,1,4,1,10,1,6,1,4,3,6,1, - 16,1,4,2,6,2,122,20,80,97,116,104,70,105,110,100, - 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, - 0,67,0,0,0,115,30,0,0,0,124,0,160,0,124,1, - 124,2,161,2,125,3,124,3,100,1,107,8,114,24,100,1, - 83,0,124,3,106,1,83,0,41,2,122,170,102,105,110,100, - 32,116,104,101,32,109,111,100,117,108,101,32,111,110,32,115, - 121,115,46,112,97,116,104,32,111,114,32,39,112,97,116,104, - 39,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, - 97,116,104,95,104,111,111,107,115,32,97,110,100,10,32,32, - 32,32,32,32,32,32,115,121,115,46,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,101, - 99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,114,204,0,0,0,114,205,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,206,0,0,0,79,5,0,0,115,8,0,0,0,0,8, - 12,1,8,1,4,1,122,22,80,97,116,104,70,105,110,100, - 101,114,46,102,105,110,100,95,109,111,100,117,108,101,99,1, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,3, - 0,0,0,79,0,0,0,115,24,0,0,0,100,1,100,2, - 108,0,109,1,125,3,1,0,124,3,106,2,124,1,124,2, - 142,1,83,0,41,3,97,32,1,0,0,10,32,32,32,32, - 32,32,32,32,70,105,110,100,32,100,105,115,116,114,105,98, - 117,116,105,111,110,115,46,10,10,32,32,32,32,32,32,32, - 32,82,101,116,117,114,110,32,97,110,32,105,116,101,114,97, - 98,108,101,32,111,102,32,97,108,108,32,68,105,115,116,114, - 105,98,117,116,105,111,110,32,105,110,115,116,97,110,99,101, - 115,32,99,97,112,97,98,108,101,32,111,102,10,32,32,32, - 32,32,32,32,32,108,111,97,100,105,110,103,32,116,104,101, - 32,109,101,116,97,100,97,116,97,32,102,111,114,32,112,97, - 99,107,97,103,101,115,32,109,97,116,99,104,105,110,103,32, - 96,96,99,111,110,116,101,120,116,46,110,97,109,101,96,96, - 10,32,32,32,32,32,32,32,32,40,111,114,32,97,108,108, - 32,110,97,109,101,115,32,105,102,32,96,96,78,111,110,101, - 96,96,32,105,110,100,105,99,97,116,101,100,41,32,97,108, - 111,110,103,32,116,104,101,32,112,97,116,104,115,32,105,110, - 32,116,104,101,32,108,105,115,116,10,32,32,32,32,32,32, - 32,32,111,102,32,100,105,114,101,99,116,111,114,105,101,115, - 32,96,96,99,111,110,116,101,120,116,46,112,97,116,104,96, - 96,46,10,32,32,32,32,32,32,32,32,114,72,0,0,0, - 41,1,218,18,77,101,116,97,100,97,116,97,80,97,116,104, - 70,105,110,100,101,114,41,3,90,18,105,109,112,111,114,116, - 108,105,98,46,109,101,116,97,100,97,116,97,114,59,1,0, - 0,218,18,102,105,110,100,95,100,105,115,116,114,105,98,117, - 116,105,111,110,115,41,4,114,193,0,0,0,114,119,0,0, - 0,114,120,0,0,0,114,59,1,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,60,1,0,0,92, - 5,0,0,115,4,0,0,0,0,10,12,1,122,29,80,97, - 116,104,70,105,110,100,101,114,46,102,105,110,100,95,100,105, - 115,116,114,105,98,117,116,105,111,110,115,41,1,78,41,2, - 78,78,41,1,78,41,13,114,125,0,0,0,114,124,0,0, - 0,114,126,0,0,0,114,127,0,0,0,114,207,0,0,0, - 114,46,1,0,0,114,52,1,0,0,114,54,1,0,0,114, - 55,1,0,0,114,58,1,0,0,114,203,0,0,0,114,206, - 0,0,0,114,60,1,0,0,114,3,0,0,0,114,3,0, - 0,0,114,3,0,0,0,114,6,0,0,0,114,45,1,0, - 0,215,4,0,0,115,34,0,0,0,8,2,4,2,2,1, - 10,9,2,1,10,12,2,1,10,21,2,1,10,14,2,1, - 12,31,2,1,12,23,2,1,12,12,2,1,114,45,1,0, - 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,64,0,0,0,115,90,0,0,0,101, - 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, - 0,90,4,100,4,100,5,132,0,90,5,101,6,90,7,100, - 6,100,7,132,0,90,8,100,8,100,9,132,0,90,9,100, - 19,100,11,100,12,132,1,90,10,100,13,100,14,132,0,90, - 11,101,12,100,15,100,16,132,0,131,1,90,13,100,17,100, - 18,132,0,90,14,100,10,83,0,41,20,218,10,70,105,108, - 101,70,105,110,100,101,114,122,172,70,105,108,101,45,98,97, - 115,101,100,32,102,105,110,100,101,114,46,10,10,32,32,32, - 32,73,110,116,101,114,97,99,116,105,111,110,115,32,119,105, - 116,104,32,116,104,101,32,102,105,108,101,32,115,121,115,116, - 101,109,32,97,114,101,32,99,97,99,104,101,100,32,102,111, - 114,32,112,101,114,102,111,114,109,97,110,99,101,44,32,98, - 101,105,110,103,10,32,32,32,32,114,101,102,114,101,115,104, - 101,100,32,119,104,101,110,32,116,104,101,32,100,105,114,101, - 99,116,111,114,121,32,116,104,101,32,102,105,110,100,101,114, - 32,105,115,32,104,97,110,100,108,105,110,103,32,104,97,115, - 32,98,101,101,110,32,109,111,100,105,102,105,101,100,46,10, - 10,32,32,32,32,99,2,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,6,0,0,0,7,0,0,0,115,84, - 0,0,0,103,0,125,3,124,2,68,0,93,32,92,2,137, - 0,125,4,124,3,160,0,135,0,102,1,100,1,100,2,132, - 8,124,4,68,0,131,1,161,1,1,0,113,8,124,3,124, - 0,95,1,124,1,112,54,100,3,124,0,95,2,100,4,124, - 0,95,3,116,4,131,0,124,0,95,5,116,4,131,0,124, - 0,95,6,100,5,83,0,41,6,122,154,73,110,105,116,105, - 97,108,105,122,101,32,119,105,116,104,32,116,104,101,32,112, - 97,116,104,32,116,111,32,115,101,97,114,99,104,32,111,110, - 32,97,110,100,32,97,32,118,97,114,105,97,98,108,101,32, - 110,117,109,98,101,114,32,111,102,10,32,32,32,32,32,32, - 32,32,50,45,116,117,112,108,101,115,32,99,111,110,116,97, - 105,110,105,110,103,32,116,104,101,32,108,111,97,100,101,114, - 32,97,110,100,32,116,104,101,32,102,105,108,101,32,115,117, - 102,102,105,120,101,115,32,116,104,101,32,108,111,97,100,101, - 114,10,32,32,32,32,32,32,32,32,114,101,99,111,103,110, - 105,122,101,115,46,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,51,0,0,0,115,22, - 0,0,0,124,0,93,14,125,1,124,1,136,0,102,2,86, - 0,1,0,113,2,100,0,83,0,114,109,0,0,0,114,3, - 0,0,0,114,16,1,0,0,169,1,114,140,0,0,0,114, - 3,0,0,0,114,6,0,0,0,114,19,1,0,0,121,5, - 0,0,115,4,0,0,0,4,0,2,0,122,38,70,105,108, - 101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95, - 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, - 112,114,62,114,70,0,0,0,114,104,0,0,0,78,41,7, - 114,167,0,0,0,218,8,95,108,111,97,100,101,114,115,114, - 43,0,0,0,218,11,95,112,97,116,104,95,109,116,105,109, - 101,218,3,115,101,116,218,11,95,112,97,116,104,95,99,97, - 99,104,101,218,19,95,114,101,108,97,120,101,100,95,112,97, - 116,104,95,99,97,99,104,101,41,5,114,118,0,0,0,114, - 43,0,0,0,218,14,108,111,97,100,101,114,95,100,101,116, - 97,105,108,115,90,7,108,111,97,100,101,114,115,114,189,0, - 0,0,114,3,0,0,0,114,62,1,0,0,114,6,0,0, - 0,114,209,0,0,0,115,5,0,0,115,16,0,0,0,0, - 4,4,1,12,1,26,1,6,2,10,1,6,1,8,1,122, - 19,70,105,108,101,70,105,110,100,101,114,46,95,95,105,110, - 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0, - 0,1,0,0,0,2,0,0,0,67,0,0,0,115,10,0, - 0,0,100,1,124,0,95,0,100,2,83,0,41,3,122,31, - 73,110,118,97,108,105,100,97,116,101,32,116,104,101,32,100, - 105,114,101,99,116,111,114,121,32,109,116,105,109,101,46,114, - 104,0,0,0,78,41,1,114,64,1,0,0,114,246,0,0, - 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,46,1,0,0,129,5,0,0,115,2,0,0,0,0,2, - 122,28,70,105,108,101,70,105,110,100,101,114,46,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,67,0,0,0,115,42,0,0,0,124,0,160,0, - 124,1,161,1,125,2,124,2,100,1,107,8,114,26,100,1, - 103,0,102,2,83,0,124,2,106,1,124,2,106,2,112,38, - 103,0,102,2,83,0,41,2,122,197,84,114,121,32,116,111, - 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,44,32,111,114,32,116,104,101,32, - 110,97,109,101,115,112,97,99,101,10,32,32,32,32,32,32, - 32,32,112,97,99,107,97,103,101,32,112,111,114,116,105,111, - 110,115,46,32,82,101,116,117,114,110,115,32,40,108,111,97, - 100,101,114,44,32,108,105,115,116,45,111,102,45,112,111,114, - 116,105,111,110,115,41,46,10,10,32,32,32,32,32,32,32, - 32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,101, - 32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,115, - 116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,78, - 41,3,114,203,0,0,0,114,140,0,0,0,114,178,0,0, - 0,41,3,114,118,0,0,0,114,139,0,0,0,114,187,0, + 0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,39, + 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116, + 104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,3,0,0,0,114,219,0, 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,137,0,0,0,135,5,0,0,115,8,0,0,0,0, - 7,10,1,8,1,8,1,122,22,70,105,108,101,70,105,110, - 100,101,114,46,102,105,110,100,95,108,111,97,100,101,114,99, - 6,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, - 6,0,0,0,67,0,0,0,115,26,0,0,0,124,1,124, - 2,124,3,131,2,125,6,116,0,124,2,124,3,124,6,124, - 4,100,1,141,4,83,0,41,2,78,114,177,0,0,0,41, - 1,114,190,0,0,0,41,7,114,118,0,0,0,114,188,0, - 0,0,114,139,0,0,0,114,43,0,0,0,90,4,115,109, - 115,108,114,202,0,0,0,114,140,0,0,0,114,3,0,0, - 0,114,3,0,0,0,114,6,0,0,0,114,58,1,0,0, - 147,5,0,0,115,8,0,0,0,0,1,10,1,8,1,2, - 255,122,20,70,105,108,101,70,105,110,100,101,114,46,95,103, - 101,116,95,115,112,101,99,78,99,3,0,0,0,0,0,0, - 0,0,0,0,0,14,0,0,0,8,0,0,0,67,0,0, - 0,115,98,1,0,0,100,1,125,3,124,1,160,0,100,2, - 161,1,100,3,25,0,125,4,122,24,116,1,124,0,106,2, - 112,34,116,3,160,4,161,0,131,1,106,5,125,5,87,0, - 110,24,4,0,116,6,107,10,114,66,1,0,1,0,1,0, - 100,4,125,5,89,0,110,2,88,0,124,5,124,0,106,7, - 107,3,114,92,124,0,160,8,161,0,1,0,124,5,124,0, - 95,7,116,9,131,0,114,114,124,0,106,10,125,6,124,4, - 160,11,161,0,125,7,110,10,124,0,106,12,125,6,124,4, - 125,7,124,7,124,6,107,6,114,218,116,13,124,0,106,2, - 124,4,131,2,125,8,124,0,106,14,68,0,93,58,92,2, - 125,9,125,10,100,5,124,9,23,0,125,11,116,13,124,8, - 124,11,131,2,125,12,116,15,124,12,131,1,114,150,124,0, - 160,16,124,10,124,1,124,12,124,8,103,1,124,2,161,5, - 2,0,1,0,83,0,113,150,116,17,124,8,131,1,125,3, - 124,0,106,14,68,0,93,82,92,2,125,9,125,10,116,13, - 124,0,106,2,124,4,124,9,23,0,131,2,125,12,116,18, - 106,19,100,6,124,12,100,3,100,7,141,3,1,0,124,7, - 124,9,23,0,124,6,107,6,114,224,116,15,124,12,131,1, - 114,224,124,0,160,16,124,10,124,1,124,12,100,8,124,2, - 161,5,2,0,1,0,83,0,113,224,124,3,144,1,114,94, - 116,18,160,19,100,9,124,8,161,2,1,0,116,18,160,20, - 124,1,100,8,161,2,125,13,124,8,103,1,124,13,95,21, - 124,13,83,0,100,8,83,0,41,10,122,111,84,114,121,32, - 116,111,32,102,105,110,100,32,97,32,115,112,101,99,32,102, - 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,82,101,116,117,114,110,115,32,116,104,101,32,109,97, - 116,99,104,105,110,103,32,115,112,101,99,44,32,111,114,32, - 78,111,110,101,32,105,102,32,110,111,116,32,102,111,117,110, - 100,46,10,32,32,32,32,32,32,32,32,70,114,70,0,0, - 0,114,27,0,0,0,114,104,0,0,0,114,209,0,0,0, - 122,9,116,114,121,105,110,103,32,123,125,41,1,90,9,118, - 101,114,98,111,115,105,116,121,78,122,25,112,111,115,115,105, - 98,108,101,32,110,97,109,101,115,112,97,99,101,32,102,111, - 114,32,123,125,41,22,114,40,0,0,0,114,48,0,0,0, - 114,43,0,0,0,114,2,0,0,0,114,54,0,0,0,114, - 10,1,0,0,114,49,0,0,0,114,64,1,0,0,218,11, - 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0, - 114,67,1,0,0,114,105,0,0,0,114,66,1,0,0,114, - 37,0,0,0,114,63,1,0,0,114,53,0,0,0,114,58, - 1,0,0,114,55,0,0,0,114,134,0,0,0,114,149,0, - 0,0,114,183,0,0,0,114,178,0,0,0,41,14,114,118, - 0,0,0,114,139,0,0,0,114,202,0,0,0,90,12,105, - 115,95,110,97,109,101,115,112,97,99,101,90,11,116,97,105, - 108,95,109,111,100,117,108,101,114,169,0,0,0,90,5,99, - 97,99,104,101,90,12,99,97,99,104,101,95,109,111,100,117, - 108,101,90,9,98,97,115,101,95,112,97,116,104,114,17,1, - 0,0,114,188,0,0,0,90,13,105,110,105,116,95,102,105, - 108,101,110,97,109,101,90,9,102,117,108,108,95,112,97,116, - 104,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,114,203,0,0,0,152,5,0,0,115,74, - 0,0,0,0,5,4,1,14,1,2,1,24,1,14,1,10, - 1,10,1,8,1,6,2,6,1,6,1,10,2,6,1,4, - 2,8,1,12,1,14,1,8,1,10,1,8,1,26,4,8, - 2,14,1,16,1,16,1,12,1,8,1,10,1,2,0,2, - 255,10,2,6,1,12,1,12,1,8,1,4,1,122,20,70, - 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,1,0,0,0,0,0,0,0,0,0,0,0, - 9,0,0,0,10,0,0,0,67,0,0,0,115,190,0,0, - 0,124,0,106,0,125,1,122,22,116,1,160,2,124,1,112, - 22,116,1,160,3,161,0,161,1,125,2,87,0,110,30,4, - 0,116,4,116,5,116,6,102,3,107,10,114,58,1,0,1, - 0,1,0,103,0,125,2,89,0,110,2,88,0,116,7,106, - 8,160,9,100,1,161,1,115,84,116,10,124,2,131,1,124, - 0,95,11,110,74,116,10,131,0,125,3,124,2,68,0,93, - 56,125,4,124,4,160,12,100,2,161,1,92,3,125,5,125, - 6,125,7,124,6,114,136,100,3,160,13,124,5,124,7,160, - 14,161,0,161,2,125,8,110,4,124,5,125,8,124,3,160, - 15,124,8,161,1,1,0,113,94,124,3,124,0,95,11,116, - 7,106,8,160,9,116,16,161,1,114,186,100,4,100,5,132, - 0,124,2,68,0,131,1,124,0,95,17,100,6,83,0,41, - 7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104, - 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, - 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, - 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, - 101,99,116,111,114,121,46,114,0,0,0,0,114,70,0,0, - 0,114,60,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,4,0,0,0,83,0,0,0,115, - 20,0,0,0,104,0,124,0,93,12,125,1,124,1,160,0, - 161,0,146,2,113,4,83,0,114,3,0,0,0,41,1,114, - 105,0,0,0,41,2,114,31,0,0,0,90,2,102,110,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,9, - 60,115,101,116,99,111,109,112,62,229,5,0,0,115,4,0, - 0,0,6,0,2,0,122,41,70,105,108,101,70,105,110,100, - 101,114,46,95,102,105,108,108,95,99,97,99,104,101,46,60, - 108,111,99,97,108,115,62,46,60,115,101,116,99,111,109,112, - 62,78,41,18,114,43,0,0,0,114,2,0,0,0,114,7, - 1,0,0,114,54,0,0,0,114,3,1,0,0,218,15,80, - 101,114,109,105,115,115,105,111,110,69,114,114,111,114,218,18, - 78,111,116,65,68,105,114,101,99,116,111,114,121,69,114,114, - 111,114,114,8,0,0,0,114,9,0,0,0,114,10,0,0, - 0,114,65,1,0,0,114,66,1,0,0,114,100,0,0,0, - 114,61,0,0,0,114,105,0,0,0,218,3,97,100,100,114, - 11,0,0,0,114,67,1,0,0,41,9,114,118,0,0,0, - 114,43,0,0,0,114,8,1,0,0,90,21,108,111,119,101, - 114,95,115,117,102,102,105,120,95,99,111,110,116,101,110,116, - 115,114,41,1,0,0,114,116,0,0,0,114,29,1,0,0, - 114,17,1,0,0,90,8,110,101,119,95,110,97,109,101,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,69, - 1,0,0,200,5,0,0,115,34,0,0,0,0,2,6,1, - 2,1,22,1,20,3,10,3,12,1,12,7,6,1,8,1, - 16,1,4,1,18,2,4,1,12,1,6,1,12,1,122,22, - 70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108, - 95,99,97,99,104,101,99,1,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,3,0,0,0,7,0,0,0,115, - 18,0,0,0,135,0,135,1,102,2,100,1,100,2,132,8, - 125,2,124,2,83,0,41,3,97,20,1,0,0,65,32,99, - 108,97,115,115,32,109,101,116,104,111,100,32,119,104,105,99, - 104,32,114,101,116,117,114,110,115,32,97,32,99,108,111,115, - 117,114,101,32,116,111,32,117,115,101,32,111,110,32,115,121, - 115,46,112,97,116,104,95,104,111,111,107,10,32,32,32,32, - 32,32,32,32,119,104,105,99,104,32,119,105,108,108,32,114, - 101,116,117,114,110,32,97,110,32,105,110,115,116,97,110,99, - 101,32,117,115,105,110,103,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,108,111,97,100,101,114,115,32,97,110, - 100,32,116,104,101,32,112,97,116,104,10,32,32,32,32,32, - 32,32,32,99,97,108,108,101,100,32,111,110,32,116,104,101, - 32,99,108,111,115,117,114,101,46,10,10,32,32,32,32,32, - 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,99, - 97,108,108,101,100,32,111,110,32,116,104,101,32,99,108,111, - 115,117,114,101,32,105,115,32,110,111,116,32,97,32,100,105, - 114,101,99,116,111,114,121,44,32,73,109,112,111,114,116,69, - 114,114,111,114,32,105,115,10,32,32,32,32,32,32,32,32, - 114,97,105,115,101,100,46,10,10,32,32,32,32,32,32,32, - 32,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,4,0,0,0,19,0,0,0,115,34,0,0,0,116, - 0,124,0,131,1,115,20,116,1,100,1,124,0,100,2,141, - 2,130,1,136,0,124,0,102,1,136,1,158,2,142,0,83, - 0,41,3,122,45,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,101,114,121,46,70,105,108,101,70,105,110,100,101, - 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, - 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, - 101,100,114,47,0,0,0,41,2,114,55,0,0,0,114,117, - 0,0,0,114,47,0,0,0,169,2,114,193,0,0,0,114, - 68,1,0,0,114,3,0,0,0,114,6,0,0,0,218,24, - 112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,105, - 108,101,70,105,110,100,101,114,241,5,0,0,115,6,0,0, - 0,0,2,8,1,12,1,122,54,70,105,108,101,70,105,110, - 100,101,114,46,112,97,116,104,95,104,111,111,107,46,60,108, - 111,99,97,108,115,62,46,112,97,116,104,95,104,111,111,107, - 95,102,111,114,95,70,105,108,101,70,105,110,100,101,114,114, - 3,0,0,0,41,3,114,193,0,0,0,114,68,1,0,0, - 114,75,1,0,0,114,3,0,0,0,114,74,1,0,0,114, - 6,0,0,0,218,9,112,97,116,104,95,104,111,111,107,231, - 5,0,0,115,4,0,0,0,0,10,14,6,122,20,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,99,1,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,0,3,0,0,0,67,0,0,0,115,12,0,0,0, - 100,1,160,0,124,0,106,1,161,1,83,0,41,2,78,122, - 16,70,105,108,101,70,105,110,100,101,114,40,123,33,114,125, - 41,41,2,114,61,0,0,0,114,43,0,0,0,114,246,0, - 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, - 0,114,39,1,0,0,249,5,0,0,115,2,0,0,0,0, - 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, - 114,101,112,114,95,95,41,1,78,41,15,114,125,0,0,0, - 114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,114, - 209,0,0,0,114,46,1,0,0,114,143,0,0,0,114,206, - 0,0,0,114,137,0,0,0,114,58,1,0,0,114,203,0, - 0,0,114,69,1,0,0,114,207,0,0,0,114,76,1,0, - 0,114,39,1,0,0,114,3,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,61,1,0,0,106, - 5,0,0,115,22,0,0,0,8,2,4,7,8,14,8,4, - 4,2,8,12,8,5,10,48,8,31,2,1,10,17,114,61, - 1,0,0,99,4,0,0,0,0,0,0,0,0,0,0,0, - 6,0,0,0,8,0,0,0,67,0,0,0,115,146,0,0, - 0,124,0,160,0,100,1,161,1,125,4,124,0,160,0,100, - 2,161,1,125,5,124,4,115,66,124,5,114,36,124,5,106, - 1,125,4,110,30,124,2,124,3,107,2,114,56,116,2,124, - 1,124,2,131,2,125,4,110,10,116,3,124,1,124,2,131, - 2,125,4,124,5,115,84,116,4,124,1,124,2,124,4,100, - 3,141,3,125,5,122,36,124,5,124,0,100,2,60,0,124, - 4,124,0,100,1,60,0,124,2,124,0,100,4,60,0,124, - 3,124,0,100,5,60,0,87,0,110,20,4,0,116,5,107, - 10,114,140,1,0,1,0,1,0,89,0,110,2,88,0,100, - 0,83,0,41,6,78,218,10,95,95,108,111,97,100,101,114, - 95,95,218,8,95,95,115,112,101,99,95,95,114,62,1,0, - 0,90,8,95,95,102,105,108,101,95,95,90,10,95,95,99, - 97,99,104,101,100,95,95,41,6,218,3,103,101,116,114,140, - 0,0,0,114,15,1,0,0,114,9,1,0,0,114,190,0, - 0,0,218,9,69,120,99,101,112,116,105,111,110,41,6,90, - 2,110,115,114,116,0,0,0,90,8,112,97,116,104,110,97, - 109,101,90,9,99,112,97,116,104,110,97,109,101,114,140,0, - 0,0,114,187,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,14,95,102,105,120,95,117,112,95, - 109,111,100,117,108,101,255,5,0,0,115,34,0,0,0,0, - 2,10,1,10,1,4,1,4,1,8,1,8,1,12,2,10, - 1,4,1,14,1,2,1,8,1,8,1,8,1,12,1,14, - 2,114,81,1,0,0,99,0,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, - 38,0,0,0,116,0,116,1,160,2,161,0,102,2,125,0, - 116,3,116,4,102,2,125,1,116,5,116,6,102,2,125,2, - 124,0,124,1,124,2,103,3,83,0,41,1,122,95,82,101, - 116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32, - 102,105,108,101,45,98,97,115,101,100,32,109,111,100,117,108, - 101,32,108,111,97,100,101,114,115,46,10,10,32,32,32,32, - 69,97,99,104,32,105,116,101,109,32,105,115,32,97,32,116, - 117,112,108,101,32,40,108,111,97,100,101,114,44,32,115,117, - 102,102,105,120,101,115,41,46,10,32,32,32,32,41,7,114, - 252,0,0,0,114,163,0,0,0,218,18,101,120,116,101,110, - 115,105,111,110,95,115,117,102,102,105,120,101,115,114,9,1, - 0,0,114,101,0,0,0,114,15,1,0,0,114,88,0,0, - 0,41,3,90,10,101,120,116,101,110,115,105,111,110,115,90, - 6,115,111,117,114,99,101,90,8,98,121,116,101,99,111,100, + 0,114,229,0,0,0,50,4,0,0,115,2,0,0,0,0, + 2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,78,41,6,114,125,0,0,0,114,124,0,0,0,114, + 126,0,0,0,114,127,0,0,0,114,213,0,0,0,114,229, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,3,0, + 0,0,114,6,0,0,0,114,15,1,0,0,30,4,0,0, + 115,6,0,0,0,8,2,4,2,8,16,114,15,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,64,0,0,0,115,92,0,0,0,101,0, + 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, + 90,4,100,4,100,5,132,0,90,5,100,6,100,7,132,0, + 90,6,100,8,100,9,132,0,90,7,100,10,100,11,132,0, + 90,8,100,12,100,13,132,0,90,9,100,14,100,15,132,0, + 90,10,100,16,100,17,132,0,90,11,101,12,100,18,100,19, + 132,0,131,1,90,13,100,20,83,0,41,21,114,252,0,0, + 0,122,93,76,111,97,100,101,114,32,102,111,114,32,101,120, + 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,46, + 10,10,32,32,32,32,84,104,101,32,99,111,110,115,116,114, + 117,99,116,111,114,32,105,115,32,100,101,115,105,103,110,101, + 100,32,116,111,32,119,111,114,107,32,119,105,116,104,32,70, + 105,108,101,70,105,110,100,101,114,46,10,10,32,32,32,32, + 99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1, + 124,0,95,0,124,2,124,0,95,1,100,0,83,0,114,109, + 0,0,0,114,159,0,0,0,114,5,1,0,0,114,3,0, + 0,0,114,3,0,0,0,114,6,0,0,0,114,209,0,0, + 0,67,4,0,0,115,4,0,0,0,0,1,6,1,122,28, + 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, + 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,115,24,0,0,0,124,0,106,0,124,1, + 106,0,107,2,111,22,124,0,106,1,124,1,106,1,107,2, + 83,0,114,109,0,0,0,114,240,0,0,0,114,242,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 114,243,0,0,0,71,4,0,0,115,6,0,0,0,0,1, + 12,1,10,255,122,26,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,95,95,101,113,95,95, + 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,67,0,0,0,115,20,0,0,0,116,0, + 124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0, + 83,0,114,109,0,0,0,114,244,0,0,0,114,246,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 114,247,0,0,0,75,4,0,0,115,2,0,0,0,0,1, + 122,28,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,95,95,104,97,115,104,95,95,99,2, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,5, + 0,0,0,67,0,0,0,115,36,0,0,0,116,0,160,1, + 116,2,106,3,124,1,161,2,125,2,116,0,160,4,100,1, + 124,1,106,5,124,0,106,6,161,3,1,0,124,2,83,0, + 41,2,122,38,67,114,101,97,116,101,32,97,110,32,117,110, + 105,116,105,97,108,105,122,101,100,32,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,122,38,101,120,116,101, + 110,115,105,111,110,32,109,111,100,117,108,101,32,123,33,114, + 125,32,108,111,97,100,101,100,32,102,114,111,109,32,123,33, + 114,125,41,7,114,134,0,0,0,114,214,0,0,0,114,163, + 0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97, + 109,105,99,114,149,0,0,0,114,116,0,0,0,114,43,0, + 0,0,41,3,114,118,0,0,0,114,187,0,0,0,114,216, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,114,212,0,0,0,78,4,0,0,115,18,0,0,0, + 0,2,4,1,4,0,2,255,4,2,6,1,4,0,4,255, + 4,2,122,33,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,99,114,101,97,116,101,95,109, + 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,5,0,0,0,67,0,0,0,115,36, + 0,0,0,116,0,160,1,116,2,106,3,124,1,161,2,1, + 0,116,0,160,4,100,1,124,0,106,5,124,0,106,6,161, + 3,1,0,100,2,83,0,41,3,122,30,73,110,105,116,105, + 97,108,105,122,101,32,97,110,32,101,120,116,101,110,115,105, + 111,110,32,109,111,100,117,108,101,122,40,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,32,123,33,114,125, + 32,101,120,101,99,117,116,101,100,32,102,114,111,109,32,123, + 33,114,125,78,41,7,114,134,0,0,0,114,214,0,0,0, + 114,163,0,0,0,90,12,101,120,101,99,95,100,121,110,97, + 109,105,99,114,149,0,0,0,114,116,0,0,0,114,43,0, + 0,0,114,253,0,0,0,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,114,217,0,0,0,86,4,0,0,115, + 10,0,0,0,0,2,14,1,6,1,4,0,4,255,122,31, + 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, + 100,101,114,46,101,120,101,99,95,109,111,100,117,108,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,3,0,0,0,115,36,0,0,0,116,0,124, + 0,106,1,131,1,100,1,25,0,137,0,116,2,135,0,102, + 1,100,2,100,3,132,8,116,3,68,0,131,1,131,1,83, + 0,41,4,122,49,82,101,116,117,114,110,32,84,114,117,101, + 32,105,102,32,116,104,101,32,101,120,116,101,110,115,105,111, + 110,32,109,111,100,117,108,101,32,105,115,32,97,32,112,97, + 99,107,97,103,101,46,114,38,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0, + 51,0,0,0,115,26,0,0,0,124,0,93,18,125,1,136, + 0,100,0,124,1,23,0,107,2,86,0,1,0,113,2,100, + 1,83,0,41,2,114,209,0,0,0,78,114,3,0,0,0, + 169,2,114,31,0,0,0,218,6,115,117,102,102,105,120,169, + 1,90,9,102,105,108,101,95,110,97,109,101,114,3,0,0, + 0,114,6,0,0,0,218,9,60,103,101,110,101,120,112,114, + 62,95,4,0,0,115,4,0,0,0,4,1,2,255,122,49, + 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, + 100,101,114,46,105,115,95,112,97,99,107,97,103,101,46,60, + 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, + 62,41,4,114,46,0,0,0,114,43,0,0,0,218,3,97, + 110,121,218,18,69,88,84,69,78,83,73,79,78,95,83,85, + 70,70,73,88,69,83,114,219,0,0,0,114,3,0,0,0, + 114,18,1,0,0,114,6,0,0,0,114,182,0,0,0,92, + 4,0,0,115,8,0,0,0,0,2,14,1,12,1,2,255, + 122,30,69,120,116,101,110,115,105,111,110,70,105,108,101,76, + 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, + 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, + 83,0,41,2,122,63,82,101,116,117,114,110,32,78,111,110, + 101,32,97,115,32,97,110,32,101,120,116,101,110,115,105,111, + 110,32,109,111,100,117,108,101,32,99,97,110,110,111,116,32, + 99,114,101,97,116,101,32,97,32,99,111,100,101,32,111,98, + 106,101,99,116,46,78,114,3,0,0,0,114,219,0,0,0, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, + 213,0,0,0,98,4,0,0,115,2,0,0,0,0,2,122, + 28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111, + 97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,41, + 2,122,53,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,115,32,104,97,118,101,32,110,111,32,115,111,117,114, + 99,101,32,99,111,100,101,46,78,114,3,0,0,0,114,219, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,114,229,0,0,0,102,4,0,0,115,2,0,0,0, + 0,2,122,30,69,120,116,101,110,115,105,111,110,70,105,108, + 101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114, + 99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,6,0,0,0, + 124,0,106,0,83,0,114,250,0,0,0,114,47,0,0,0, + 114,219,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,179,0,0,0,106,4,0,0,115,2,0, + 0,0,0,3,122,32,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, + 108,101,110,97,109,101,78,41,14,114,125,0,0,0,114,124, + 0,0,0,114,126,0,0,0,114,127,0,0,0,114,209,0, + 0,0,114,243,0,0,0,114,247,0,0,0,114,212,0,0, + 0,114,217,0,0,0,114,182,0,0,0,114,213,0,0,0, + 114,229,0,0,0,114,136,0,0,0,114,179,0,0,0,114, + 3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6, + 0,0,0,114,252,0,0,0,59,4,0,0,115,22,0,0, + 0,8,2,4,6,8,4,8,4,8,3,8,8,8,6,8, + 6,8,4,8,4,2,1,114,252,0,0,0,99,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,64,0,0,0,115,104,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, + 100,5,132,0,90,5,100,6,100,7,132,0,90,6,100,8, + 100,9,132,0,90,7,100,10,100,11,132,0,90,8,100,12, + 100,13,132,0,90,9,100,14,100,15,132,0,90,10,100,16, + 100,17,132,0,90,11,100,18,100,19,132,0,90,12,100,20, + 100,21,132,0,90,13,100,22,100,23,132,0,90,14,100,24, + 83,0,41,25,218,14,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,97,38,1,0,0,82,101,112,114,101,115,101, + 110,116,115,32,97,32,110,97,109,101,115,112,97,99,101,32, + 112,97,99,107,97,103,101,39,115,32,112,97,116,104,46,32, + 32,73,116,32,117,115,101,115,32,116,104,101,32,109,111,100, + 117,108,101,32,110,97,109,101,10,32,32,32,32,116,111,32, + 102,105,110,100,32,105,116,115,32,112,97,114,101,110,116,32, + 109,111,100,117,108,101,44,32,97,110,100,32,102,114,111,109, + 32,116,104,101,114,101,32,105,116,32,108,111,111,107,115,32, + 117,112,32,116,104,101,32,112,97,114,101,110,116,39,115,10, + 32,32,32,32,95,95,112,97,116,104,95,95,46,32,32,87, + 104,101,110,32,116,104,105,115,32,99,104,97,110,103,101,115, + 44,32,116,104,101,32,109,111,100,117,108,101,39,115,32,111, + 119,110,32,112,97,116,104,32,105,115,32,114,101,99,111,109, + 112,117,116,101,100,44,10,32,32,32,32,117,115,105,110,103, + 32,112,97,116,104,95,102,105,110,100,101,114,46,32,32,70, + 111,114,32,116,111,112,45,108,101,118,101,108,32,109,111,100, + 117,108,101,115,44,32,116,104,101,32,112,97,114,101,110,116, + 32,109,111,100,117,108,101,39,115,32,112,97,116,104,10,32, + 32,32,32,105,115,32,115,121,115,46,112,97,116,104,46,99, + 4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,67,0,0,0,115,36,0,0,0,124,1,124, + 0,95,0,124,2,124,0,95,1,116,2,124,0,160,3,161, + 0,131,1,124,0,95,4,124,3,124,0,95,5,100,0,83, + 0,114,109,0,0,0,41,6,218,5,95,110,97,109,101,218, + 5,95,112,97,116,104,114,111,0,0,0,218,16,95,103,101, + 116,95,112,97,114,101,110,116,95,112,97,116,104,218,17,95, + 108,97,115,116,95,112,97,114,101,110,116,95,112,97,116,104, + 218,12,95,112,97,116,104,95,102,105,110,100,101,114,169,4, + 114,118,0,0,0,114,116,0,0,0,114,43,0,0,0,90, + 11,112,97,116,104,95,102,105,110,100,101,114,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,209,0,0,0, + 119,4,0,0,115,8,0,0,0,0,1,6,1,6,1,14, + 1,122,23,95,78,97,109,101,115,112,97,99,101,80,97,116, + 104,46,95,95,105,110,105,116,95,95,99,1,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, + 0,0,0,115,38,0,0,0,124,0,106,0,160,1,100,1, + 161,1,92,3,125,1,125,2,125,3,124,2,100,2,107,2, + 114,30,100,3,83,0,124,1,100,4,102,2,83,0,41,5, + 122,62,82,101,116,117,114,110,115,32,97,32,116,117,112,108, + 101,32,111,102,32,40,112,97,114,101,110,116,45,109,111,100, + 117,108,101,45,110,97,109,101,44,32,112,97,114,101,110,116, + 45,112,97,116,104,45,97,116,116,114,45,110,97,109,101,41, + 114,70,0,0,0,114,39,0,0,0,41,2,114,8,0,0, + 0,114,43,0,0,0,90,8,95,95,112,97,116,104,95,95, + 41,2,114,23,1,0,0,114,40,0,0,0,41,4,114,118, + 0,0,0,114,14,1,0,0,218,3,100,111,116,90,2,109, 101,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, - 114,184,0,0,0,22,6,0,0,115,8,0,0,0,0,5, - 12,1,8,1,8,1,114,184,0,0,0,99,1,0,0,0, - 0,0,0,0,0,0,0,0,12,0,0,0,9,0,0,0, - 67,0,0,0,115,178,1,0,0,124,0,97,0,116,0,106, - 1,97,1,116,0,106,2,97,2,116,1,106,3,116,4,25, - 0,125,1,100,1,68,0,93,48,125,2,124,2,116,1,106, - 3,107,7,114,56,116,0,160,5,124,2,161,1,125,3,110, - 10,116,1,106,3,124,2,25,0,125,3,116,6,124,1,124, - 2,124,3,131,3,1,0,113,30,100,2,100,3,103,1,102, - 2,100,4,100,5,100,3,103,2,102,2,102,2,125,4,124, - 4,68,0,93,110,92,2,125,5,125,6,116,7,100,6,100, - 7,132,0,124,6,68,0,131,1,131,1,115,136,74,0,130, - 1,124,6,100,8,25,0,125,7,124,5,116,1,106,3,107, - 6,114,170,116,1,106,3,124,5,25,0,125,8,1,0,113, - 226,113,106,122,20,116,0,160,5,124,5,161,1,125,8,87, - 0,1,0,113,226,87,0,113,106,4,0,116,8,107,10,114, - 214,1,0,1,0,1,0,89,0,113,106,89,0,113,106,88, - 0,113,106,116,8,100,9,131,1,130,1,116,6,124,1,100, - 10,124,8,131,3,1,0,116,6,124,1,100,11,124,7,131, - 3,1,0,116,6,124,1,100,12,100,13,160,9,124,6,161, - 1,131,3,1,0,116,6,124,1,100,14,100,15,100,16,132, - 0,124,6,68,0,131,1,131,3,1,0,116,0,160,5,100, - 17,161,1,125,9,116,6,124,1,100,17,124,9,131,3,1, - 0,116,0,160,5,100,18,161,1,125,10,116,6,124,1,100, - 18,124,10,131,3,1,0,124,5,100,4,107,2,144,1,114, - 110,116,0,160,5,100,19,161,1,125,11,116,6,124,1,100, - 20,124,11,131,3,1,0,116,6,124,1,100,21,116,10,131, - 0,131,3,1,0,116,11,160,12,116,2,160,13,161,0,161, - 1,1,0,124,5,100,4,107,2,144,1,114,174,116,14,160, - 15,100,22,161,1,1,0,100,23,116,11,107,6,144,1,114, - 174,100,24,116,16,95,17,100,25,83,0,41,26,122,205,83, - 101,116,117,112,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,101,114,115,32,102,111, - 114,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,10, - 32,32,32,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,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,79,116,104,101,114,32,99,111, - 109,112,111,110,101,110,116,115,32,97,114,101,32,101,120,116, - 114,97,99,116,101,100,32,102,114,111,109,32,116,104,101,32, - 99,111,114,101,32,98,111,111,116,115,116,114,97,112,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,41,4,114,63, - 0,0,0,114,74,0,0,0,218,8,98,117,105,108,116,105, - 110,115,114,160,0,0,0,90,5,112,111,115,105,120,250,1, - 47,90,2,110,116,250,1,92,99,1,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,3,0,0,0,115,0,0, - 0,115,26,0,0,0,124,0,93,18,125,1,116,0,124,1, - 131,1,100,0,107,2,86,0,1,0,113,2,100,1,83,0, - 41,2,114,38,0,0,0,78,41,1,114,22,0,0,0,41, - 2,114,31,0,0,0,114,94,0,0,0,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,114,19,1,0,0,58, - 6,0,0,115,4,0,0,0,4,0,2,0,122,25,95,115, - 101,116,117,112,46,60,108,111,99,97,108,115,62,46,60,103, - 101,110,101,120,112,114,62,114,72,0,0,0,122,30,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,114,2,0,0, - 0,114,34,0,0,0,114,30,0,0,0,114,39,0,0,0, - 114,57,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,4,0,0,0,83,0,0,0,115,22, - 0,0,0,104,0,124,0,93,14,125,1,100,0,124,1,155, - 0,157,2,146,2,113,4,83,0,41,1,114,73,0,0,0, - 114,3,0,0,0,41,2,114,31,0,0,0,218,1,115,114, - 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,70, - 1,0,0,74,6,0,0,115,4,0,0,0,6,0,2,0, - 122,25,95,115,101,116,117,112,46,60,108,111,99,97,108,115, - 62,46,60,115,101,116,99,111,109,112,62,90,7,95,116,104, - 114,101,97,100,90,8,95,119,101,97,107,114,101,102,90,6, - 119,105,110,114,101,103,114,192,0,0,0,114,7,0,0,0, - 122,4,46,112,121,119,122,6,95,100,46,112,121,100,84,78, - 41,18,114,134,0,0,0,114,8,0,0,0,114,163,0,0, - 0,114,31,1,0,0,114,125,0,0,0,90,18,95,98,117, - 105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,114, - 129,0,0,0,218,3,97,108,108,114,117,0,0,0,114,35, - 0,0,0,114,13,0,0,0,114,21,1,0,0,114,167,0, - 0,0,114,82,1,0,0,114,101,0,0,0,114,186,0,0, - 0,114,191,0,0,0,114,195,0,0,0,41,12,218,17,95, - 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, - 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,10,111,115,95, - 100,101,116,97,105,108,115,90,10,98,117,105,108,116,105,110, - 95,111,115,114,30,0,0,0,114,34,0,0,0,90,9,111, - 115,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,90,13,119,105,110,114,101,103,95, - 109,111,100,117,108,101,114,3,0,0,0,114,3,0,0,0, - 114,6,0,0,0,218,6,95,115,101,116,117,112,33,6,0, - 0,115,78,0,0,0,0,8,4,1,6,1,6,3,10,1, - 8,1,10,1,12,2,10,1,14,3,22,1,12,2,22,1, - 8,1,10,1,10,1,6,2,2,1,10,1,10,1,14,1, - 12,2,8,1,12,1,12,1,18,1,22,3,10,1,12,3, - 10,1,12,3,10,1,10,1,12,3,14,1,14,1,10,1, - 10,1,10,1,114,89,1,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,50,0,0,0,116,0,124,0,131,1,1,0,116, - 1,131,0,125,1,116,2,106,3,160,4,116,5,106,6,124, - 1,142,0,103,1,161,1,1,0,116,2,106,7,160,8,116, - 9,161,1,1,0,100,1,83,0,41,2,122,41,73,110,115, - 116,97,108,108,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,32,99,111,109,112,111, - 110,101,110,116,115,46,78,41,10,114,89,1,0,0,114,184, - 0,0,0,114,8,0,0,0,114,51,1,0,0,114,167,0, - 0,0,114,61,1,0,0,114,76,1,0,0,218,9,109,101, - 116,97,95,112,97,116,104,114,186,0,0,0,114,45,1,0, - 0,41,2,114,88,1,0,0,90,17,115,117,112,112,111,114, - 116,101,100,95,108,111,97,100,101,114,115,114,3,0,0,0, - 114,3,0,0,0,114,6,0,0,0,218,8,95,105,110,115, - 116,97,108,108,98,6,0,0,115,8,0,0,0,0,2,8, - 1,6,1,20,1,114,91,1,0,0,41,1,114,59,0,0, - 0,41,1,78,41,3,78,78,78,41,2,114,72,0,0,0, - 114,72,0,0,0,41,1,84,41,1,78,41,1,78,41,63, - 114,127,0,0,0,114,12,0,0,0,90,37,95,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,95,66,89,84,69,83,95,75,69, - 89,114,11,0,0,0,114,13,0,0,0,114,20,0,0,0, - 114,26,0,0,0,114,28,0,0,0,114,37,0,0,0,114, - 46,0,0,0,114,48,0,0,0,114,52,0,0,0,114,53, - 0,0,0,114,55,0,0,0,114,58,0,0,0,114,68,0, - 0,0,218,4,116,121,112,101,218,8,95,95,99,111,100,101, - 95,95,114,162,0,0,0,114,18,0,0,0,114,148,0,0, - 0,114,17,0,0,0,114,23,0,0,0,114,236,0,0,0, - 114,91,0,0,0,114,87,0,0,0,114,101,0,0,0,114, - 88,0,0,0,90,23,68,69,66,85,71,95,66,89,84,69, - 67,79,68,69,95,83,85,70,70,73,88,69,83,90,27,79, - 80,84,73,77,73,90,69,68,95,66,89,84,69,67,79,68, - 69,95,83,85,70,70,73,88,69,83,114,97,0,0,0,114, - 102,0,0,0,114,108,0,0,0,114,112,0,0,0,114,114, - 0,0,0,114,136,0,0,0,114,143,0,0,0,114,152,0, - 0,0,114,156,0,0,0,114,158,0,0,0,114,165,0,0, - 0,114,170,0,0,0,114,171,0,0,0,114,176,0,0,0, - 218,6,111,98,106,101,99,116,114,185,0,0,0,114,190,0, - 0,0,114,191,0,0,0,114,208,0,0,0,114,221,0,0, - 0,114,239,0,0,0,114,9,1,0,0,114,15,1,0,0, - 114,21,1,0,0,114,252,0,0,0,114,22,1,0,0,114, - 43,1,0,0,114,45,1,0,0,114,61,1,0,0,114,81, - 1,0,0,114,184,0,0,0,114,89,1,0,0,114,91,1, + 218,23,95,102,105,110,100,95,112,97,114,101,110,116,95,112, + 97,116,104,95,110,97,109,101,115,125,4,0,0,115,8,0, + 0,0,0,2,18,1,8,2,4,3,122,38,95,78,97,109, + 101,115,112,97,99,101,80,97,116,104,46,95,102,105,110,100, + 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, + 101,115,99,1,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,3,0,0,0,67,0,0,0,115,28,0,0,0, + 124,0,160,0,161,0,92,2,125,1,125,2,116,1,116,2, + 106,3,124,1,25,0,124,2,131,2,83,0,114,109,0,0, + 0,41,4,114,30,1,0,0,114,130,0,0,0,114,8,0, + 0,0,218,7,109,111,100,117,108,101,115,41,3,114,118,0, + 0,0,90,18,112,97,114,101,110,116,95,109,111,100,117,108, + 101,95,110,97,109,101,90,14,112,97,116,104,95,97,116,116, + 114,95,110,97,109,101,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,25,1,0,0,135,4,0,0,115,4, + 0,0,0,0,1,12,1,122,31,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,103,101,116,95,112,97,114, + 101,110,116,95,112,97,116,104,99,1,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,4,0,0,0,67,0,0, + 0,115,80,0,0,0,116,0,124,0,160,1,161,0,131,1, + 125,1,124,1,124,0,106,2,107,3,114,74,124,0,160,3, + 124,0,106,4,124,1,161,2,125,2,124,2,100,0,107,9, + 114,68,124,2,106,5,100,0,107,8,114,68,124,2,106,6, + 114,68,124,2,106,6,124,0,95,7,124,1,124,0,95,2, + 124,0,106,7,83,0,114,109,0,0,0,41,8,114,111,0, + 0,0,114,25,1,0,0,114,26,1,0,0,114,27,1,0, + 0,114,23,1,0,0,114,140,0,0,0,114,178,0,0,0, + 114,24,1,0,0,41,3,114,118,0,0,0,90,11,112,97, + 114,101,110,116,95,112,97,116,104,114,187,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,12,95, + 114,101,99,97,108,99,117,108,97,116,101,139,4,0,0,115, + 16,0,0,0,0,2,12,1,10,1,14,3,18,1,6,1, + 8,1,6,1,122,27,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,114,101,99,97,108,99,117,108,97,116, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,116, + 0,124,0,160,1,161,0,131,1,83,0,114,109,0,0,0, + 41,2,114,6,1,0,0,114,32,1,0,0,114,246,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,8,95,95,105,116,101,114,95,95,152,4,0,0,115,2, + 0,0,0,0,1,122,23,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,105,116,101,114,95,95,99,2, + 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,12,0,0,0,124,0,160,0, + 161,0,124,1,25,0,83,0,114,109,0,0,0,169,1,114, + 32,1,0,0,41,2,114,118,0,0,0,218,5,105,110,100, + 101,120,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,218,11,95,95,103,101,116,105,116,101,109,95,95,155,4, + 0,0,115,2,0,0,0,0,1,122,26,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,103,101,116,105, + 116,101,109,95,95,99,3,0,0,0,0,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,14, + 0,0,0,124,2,124,0,106,0,124,1,60,0,100,0,83, + 0,114,109,0,0,0,41,1,114,24,1,0,0,41,3,114, + 118,0,0,0,114,35,1,0,0,114,43,0,0,0,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,95, + 95,115,101,116,105,116,101,109,95,95,158,4,0,0,115,2, + 0,0,0,0,1,122,26,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,115,101,116,105,116,101,109,95, + 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,116, + 0,124,0,160,1,161,0,131,1,83,0,114,109,0,0,0, + 41,2,114,22,0,0,0,114,32,1,0,0,114,246,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,7,95,95,108,101,110,95,95,161,4,0,0,115,2,0, + 0,0,0,1,122,22,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,108,101,110,95,95,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,0, + 106,1,161,1,83,0,41,2,78,122,20,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,40,123,33,114,125,41,41, + 2,114,61,0,0,0,114,24,1,0,0,114,246,0,0,0, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, + 8,95,95,114,101,112,114,95,95,164,4,0,0,115,2,0, + 0,0,0,1,122,23,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,114,101,112,114,95,95,99,2,0, + 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, + 0,0,67,0,0,0,115,12,0,0,0,124,1,124,0,160, + 0,161,0,107,6,83,0,114,109,0,0,0,114,34,1,0, + 0,169,2,114,118,0,0,0,218,4,105,116,101,109,114,3, + 0,0,0,114,3,0,0,0,114,6,0,0,0,218,12,95, + 95,99,111,110,116,97,105,110,115,95,95,167,4,0,0,115, + 2,0,0,0,0,1,122,27,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,95,95,99,111,110,116,97,105,110, + 115,95,95,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, + 0,124,0,106,0,160,1,124,1,161,1,1,0,100,0,83, + 0,114,109,0,0,0,41,2,114,24,1,0,0,114,186,0, + 0,0,114,40,1,0,0,114,3,0,0,0,114,3,0,0, + 0,114,6,0,0,0,114,186,0,0,0,170,4,0,0,115, + 2,0,0,0,0,1,122,21,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,97,112,112,101,110,100,78,41,15, + 114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,114, + 127,0,0,0,114,209,0,0,0,114,30,1,0,0,114,25, + 1,0,0,114,32,1,0,0,114,33,1,0,0,114,36,1, + 0,0,114,37,1,0,0,114,38,1,0,0,114,39,1,0, + 0,114,42,1,0,0,114,186,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, + 22,1,0,0,112,4,0,0,115,24,0,0,0,8,1,4, + 6,8,6,8,10,8,4,8,13,8,3,8,3,8,3,8, + 3,8,3,8,3,114,22,1,0,0,99,0,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64, + 0,0,0,115,80,0,0,0,101,0,90,1,100,0,90,2, + 100,1,100,2,132,0,90,3,101,4,100,3,100,4,132,0, + 131,1,90,5,100,5,100,6,132,0,90,6,100,7,100,8, + 132,0,90,7,100,9,100,10,132,0,90,8,100,11,100,12, + 132,0,90,9,100,13,100,14,132,0,90,10,100,15,100,16, + 132,0,90,11,100,17,83,0,41,18,218,16,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,99,4,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,0, + 0,67,0,0,0,115,18,0,0,0,116,0,124,1,124,2, + 124,3,131,3,124,0,95,1,100,0,83,0,114,109,0,0, + 0,41,2,114,22,1,0,0,114,24,1,0,0,114,28,1, + 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,114,209,0,0,0,176,4,0,0,115,2,0,0,0,0, + 1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,0, + 0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,1, + 106,1,161,1,83,0,41,2,122,115,82,101,116,117,114,110, + 32,114,101,112,114,32,102,111,114,32,116,104,101,32,109,111, + 100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,84, + 104,101,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,84,104,101,32,105,109, + 112,111,114,116,32,109,97,99,104,105,110,101,114,121,32,100, + 111,101,115,32,116,104,101,32,106,111,98,32,105,116,115,101, + 108,102,46,10,10,32,32,32,32,32,32,32,32,122,25,60, + 109,111,100,117,108,101,32,123,33,114,125,32,40,110,97,109, + 101,115,112,97,99,101,41,62,41,2,114,61,0,0,0,114, + 125,0,0,0,41,2,114,193,0,0,0,114,216,0,0,0, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, + 11,109,111,100,117,108,101,95,114,101,112,114,179,4,0,0, + 115,2,0,0,0,0,7,122,28,95,78,97,109,101,115,112, + 97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101, + 95,114,101,112,114,99,2,0,0,0,0,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,83,0,41,2,78,84,114,3,0,0,0, + 114,219,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,182,0,0,0,188,4,0,0,115,2,0, + 0,0,0,1,122,27,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,103, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,83,0,41,2,78,114,39,0,0,0,114,3,0,0,0, + 114,219,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,229,0,0,0,191,4,0,0,115,2,0, + 0,0,0,1,122,27,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,6,0,0,0,67,0,0,0,115,16,0,0,0,116, + 0,100,1,100,2,100,3,100,4,100,5,141,4,83,0,41, + 6,78,114,39,0,0,0,122,8,60,115,116,114,105,110,103, + 62,114,215,0,0,0,84,41,1,114,231,0,0,0,41,1, + 114,232,0,0,0,114,219,0,0,0,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,114,213,0,0,0,194,4, + 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, + 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, + 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,83,0,114,210,0,0,0,114,3,0,0,0, + 114,211,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,212,0,0,0,197,4,0,0,115,2,0, + 0,0,0,1,122,30,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,46,99,114,101,97,116,101,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,0,83,0,114,109,0,0,0,114,3,0,0,0, + 114,253,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,217,0,0,0,200,4,0,0,115,2,0, + 0,0,0,1,122,28,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,46,101,120,101,99,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,4,0,0,0,67,0,0,0,115,26,0,0,0, + 116,0,160,1,100,1,124,0,106,2,161,2,1,0,116,0, + 160,3,124,0,124,1,161,2,83,0,41,2,122,98,76,111, + 97,100,32,97,32,110,97,109,101,115,112,97,99,101,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 122,38,110,97,109,101,115,112,97,99,101,32,109,111,100,117, + 108,101,32,108,111,97,100,101,100,32,119,105,116,104,32,112, + 97,116,104,32,123,33,114,125,41,4,114,134,0,0,0,114, + 149,0,0,0,114,24,1,0,0,114,218,0,0,0,114,219, + 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0, + 0,0,114,220,0,0,0,203,4,0,0,115,8,0,0,0, + 0,7,6,1,4,255,4,2,122,28,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,108,111,97,100,95, + 109,111,100,117,108,101,78,41,12,114,125,0,0,0,114,124, + 0,0,0,114,126,0,0,0,114,209,0,0,0,114,207,0, + 0,0,114,44,1,0,0,114,182,0,0,0,114,229,0,0, + 0,114,213,0,0,0,114,212,0,0,0,114,217,0,0,0, + 114,220,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,114,43,1,0,0,175,4, + 0,0,115,18,0,0,0,8,1,8,3,2,1,10,8,8, + 3,8,3,8,3,8,3,8,3,114,43,1,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,64,0,0,0,115,118,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,101,4,100,2,100,3,132,0, + 131,1,90,5,101,4,100,4,100,5,132,0,131,1,90,6, + 101,4,100,6,100,7,132,0,131,1,90,7,101,4,100,8, + 100,9,132,0,131,1,90,8,101,4,100,19,100,11,100,12, + 132,1,131,1,90,9,101,4,100,20,100,13,100,14,132,1, + 131,1,90,10,101,4,100,21,100,15,100,16,132,1,131,1, + 90,11,101,4,100,17,100,18,132,0,131,1,90,12,100,10, + 83,0,41,22,218,10,80,97,116,104,70,105,110,100,101,114, + 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, + 101,114,32,102,111,114,32,115,121,115,46,112,97,116,104,32, + 97,110,100,32,112,97,99,107,97,103,101,32,95,95,112,97, + 116,104,95,95,32,97,116,116,114,105,98,117,116,101,115,46, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,4,0,0,0,67,0,0,0,115,64,0,0,0,116,0, + 116,1,106,2,160,3,161,0,131,1,68,0,93,44,92,2, + 125,1,125,2,124,2,100,1,107,8,114,40,116,1,106,2, + 124,1,61,0,113,14,116,4,124,2,100,2,131,2,114,14, + 124,2,160,5,161,0,1,0,113,14,100,1,83,0,41,3, + 122,125,67,97,108,108,32,116,104,101,32,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,40,41,32,109, + 101,116,104,111,100,32,111,110,32,97,108,108,32,112,97,116, + 104,32,101,110,116,114,121,32,102,105,110,100,101,114,115,10, + 32,32,32,32,32,32,32,32,115,116,111,114,101,100,32,105, + 110,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,115,32,40,119,104,101,114, + 101,32,105,109,112,108,101,109,101,110,116,101,100,41,46,78, + 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,41,6,218,4,108,105,115,116,114,8,0,0,0, + 218,19,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,218,5,105,116,101,109,115,114,128,0,0, + 0,114,46,1,0,0,41,3,114,193,0,0,0,114,116,0, + 0,0,218,6,102,105,110,100,101,114,114,3,0,0,0,114, + 3,0,0,0,114,6,0,0,0,114,46,1,0,0,221,4, + 0,0,115,10,0,0,0,0,4,22,1,8,1,10,1,10, + 1,122,28,80,97,116,104,70,105,110,100,101,114,46,105,110, + 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, + 2,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 9,0,0,0,67,0,0,0,115,84,0,0,0,116,0,106, + 1,100,1,107,9,114,28,116,0,106,1,115,28,116,2,160, + 3,100,2,116,4,161,2,1,0,116,0,106,1,68,0,93, + 44,125,2,122,14,124,2,124,1,131,1,87,0,2,0,1, + 0,83,0,4,0,116,5,107,10,114,76,1,0,1,0,1, + 0,89,0,113,34,89,0,113,34,48,0,113,34,100,1,83, + 0,41,3,122,46,83,101,97,114,99,104,32,115,121,115,46, + 112,97,116,104,95,104,111,111,107,115,32,102,111,114,32,97, + 32,102,105,110,100,101,114,32,102,111,114,32,39,112,97,116, + 104,39,46,78,122,23,115,121,115,46,112,97,116,104,95,104, + 111,111,107,115,32,105,115,32,101,109,112,116,121,41,6,114, + 8,0,0,0,218,10,112,97,116,104,95,104,111,111,107,115, + 114,74,0,0,0,114,75,0,0,0,114,138,0,0,0,114, + 117,0,0,0,41,3,114,193,0,0,0,114,43,0,0,0, + 90,4,104,111,111,107,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,218,11,95,112,97,116,104,95,104,111,111, + 107,115,231,4,0,0,115,16,0,0,0,0,3,16,1,12, + 1,10,1,2,1,14,1,14,1,12,2,122,22,80,97,116, + 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111, + 111,107,115,99,2,0,0,0,0,0,0,0,0,0,0,0, + 3,0,0,0,8,0,0,0,67,0,0,0,115,104,0,0, + 0,124,1,100,1,107,2,114,44,122,12,116,0,160,1,161, + 0,125,1,87,0,110,22,4,0,116,2,107,10,114,42,1, + 0,1,0,1,0,89,0,100,2,83,0,48,0,122,14,116, + 3,106,4,124,1,25,0,125,2,87,0,110,40,4,0,116, + 5,107,10,114,98,1,0,1,0,1,0,124,0,160,6,124, + 1,161,1,125,2,124,2,116,3,106,4,124,1,60,0,89, + 0,110,2,48,0,124,2,83,0,41,3,122,210,71,101,116, + 32,116,104,101,32,102,105,110,100,101,114,32,102,111,114,32, + 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,102, + 114,111,109,32,115,121,115,46,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, + 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, + 104,32,101,110,116,114,121,32,105,115,32,110,111,116,32,105, + 110,32,116,104,101,32,99,97,99,104,101,44,32,102,105,110, + 100,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116, + 101,32,102,105,110,100,101,114,10,32,32,32,32,32,32,32, + 32,97,110,100,32,99,97,99,104,101,32,105,116,46,32,73, + 102,32,110,111,32,102,105,110,100,101,114,32,105,115,32,97, + 118,97,105,108,97,98,108,101,44,32,115,116,111,114,101,32, + 78,111,110,101,46,10,10,32,32,32,32,32,32,32,32,114, + 39,0,0,0,78,41,7,114,2,0,0,0,114,54,0,0, + 0,114,3,1,0,0,114,8,0,0,0,114,48,1,0,0, + 218,8,75,101,121,69,114,114,111,114,114,52,1,0,0,41, + 3,114,193,0,0,0,114,43,0,0,0,114,50,1,0,0, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, + 20,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,244,4,0,0,115,22,0,0,0,0,8, + 8,1,2,1,12,1,14,3,8,1,2,1,14,1,14,1, + 10,1,16,1,122,31,80,97,116,104,70,105,110,100,101,114, + 46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,99,3,0,0,0,0,0,0,0,0,0, + 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,82, + 0,0,0,116,0,124,2,100,1,131,2,114,26,124,2,160, + 1,124,1,161,1,92,2,125,3,125,4,110,14,124,2,160, + 2,124,1,161,1,125,3,103,0,125,4,124,3,100,0,107, + 9,114,60,116,3,160,4,124,1,124,3,161,2,83,0,116, + 3,160,5,124,1,100,0,161,2,125,5,124,4,124,5,95, + 6,124,5,83,0,41,2,78,114,137,0,0,0,41,7,114, + 128,0,0,0,114,137,0,0,0,114,206,0,0,0,114,134, + 0,0,0,114,201,0,0,0,114,183,0,0,0,114,178,0, + 0,0,41,6,114,193,0,0,0,114,139,0,0,0,114,50, + 1,0,0,114,140,0,0,0,114,141,0,0,0,114,187,0, + 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0, + 0,218,16,95,108,101,103,97,99,121,95,103,101,116,95,115, + 112,101,99,10,5,0,0,115,18,0,0,0,0,4,10,1, + 16,2,10,1,4,1,8,1,12,1,12,1,6,1,122,27, + 80,97,116,104,70,105,110,100,101,114,46,95,108,101,103,97, + 99,121,95,103,101,116,95,115,112,101,99,78,99,4,0,0, + 0,0,0,0,0,0,0,0,0,9,0,0,0,5,0,0, + 0,67,0,0,0,115,166,0,0,0,103,0,125,4,124,2, + 68,0,93,134,125,5,116,0,124,5,116,1,116,2,102,2, + 131,2,115,28,113,8,124,0,160,3,124,5,161,1,125,6, + 124,6,100,1,107,9,114,8,116,4,124,6,100,2,131,2, + 114,70,124,6,160,5,124,1,124,3,161,2,125,7,110,12, + 124,0,160,6,124,1,124,6,161,2,125,7,124,7,100,1, + 107,8,114,92,113,8,124,7,106,7,100,1,107,9,114,110, + 124,7,2,0,1,0,83,0,124,7,106,8,125,8,124,8, + 100,1,107,8,114,132,116,9,100,3,131,1,130,1,124,4, + 160,10,124,8,161,1,1,0,113,8,116,11,160,12,124,1, + 100,1,161,2,125,7,124,4,124,7,95,8,124,7,83,0, + 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, + 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, + 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, + 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, + 109,101,46,78,114,203,0,0,0,122,19,115,112,101,99,32, + 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,13, + 114,161,0,0,0,114,84,0,0,0,218,5,98,121,116,101, + 115,114,54,1,0,0,114,128,0,0,0,114,203,0,0,0, + 114,55,1,0,0,114,140,0,0,0,114,178,0,0,0,114, + 117,0,0,0,114,167,0,0,0,114,134,0,0,0,114,183, + 0,0,0,41,9,114,193,0,0,0,114,139,0,0,0,114, + 43,0,0,0,114,202,0,0,0,218,14,110,97,109,101,115, + 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, + 114,50,1,0,0,114,187,0,0,0,114,141,0,0,0,114, + 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,9, + 95,103,101,116,95,115,112,101,99,25,5,0,0,115,40,0, + 0,0,0,5,4,1,8,1,14,1,2,1,10,1,8,1, + 10,1,14,2,12,1,8,1,2,1,10,1,8,1,6,1, + 8,1,8,5,12,2,12,1,6,1,122,20,80,97,116,104, + 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99, + 99,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0, + 0,5,0,0,0,67,0,0,0,115,100,0,0,0,124,2, + 100,1,107,8,114,14,116,0,106,1,125,2,124,0,160,2, + 124,1,124,2,124,3,161,3,125,4,124,4,100,1,107,8, + 114,40,100,1,83,0,124,4,106,3,100,1,107,8,114,92, + 124,4,106,4,125,5,124,5,114,86,100,1,124,4,95,5, + 116,6,124,1,124,5,124,0,106,2,131,3,124,4,95,4, + 124,4,83,0,100,1,83,0,110,4,124,4,83,0,100,1, + 83,0,41,2,122,141,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,115,112,101,99,32,102,111,114,32,39,102,117, + 108,108,110,97,109,101,39,32,111,110,32,115,121,115,46,112, + 97,116,104,32,111,114,32,39,112,97,116,104,39,46,10,10, + 32,32,32,32,32,32,32,32,84,104,101,32,115,101,97,114, + 99,104,32,105,115,32,98,97,115,101,100,32,111,110,32,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,110, + 100,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,46,10,32,32,32,32,32, + 32,32,32,78,41,7,114,8,0,0,0,114,43,0,0,0, + 114,58,1,0,0,114,140,0,0,0,114,178,0,0,0,114, + 181,0,0,0,114,22,1,0,0,41,6,114,193,0,0,0, + 114,139,0,0,0,114,43,0,0,0,114,202,0,0,0,114, + 187,0,0,0,114,57,1,0,0,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,203,0,0,0,57,5,0, + 0,115,26,0,0,0,0,6,8,1,6,1,14,1,8,1, + 4,1,10,1,6,1,4,3,6,1,16,1,4,2,6,2, + 122,20,80,97,116,104,70,105,110,100,101,114,46,102,105,110, + 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115, + 30,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3, + 124,3,100,1,107,8,114,24,100,1,83,0,124,3,106,1, + 83,0,41,2,122,170,102,105,110,100,32,116,104,101,32,109, + 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116, + 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101, + 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111, + 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32, + 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101, + 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 78,114,204,0,0,0,114,205,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,114,206,0,0,0,81, + 5,0,0,115,8,0,0,0,0,8,12,1,8,1,4,1, + 122,22,80,97,116,104,70,105,110,100,101,114,46,102,105,110, + 100,95,109,111,100,117,108,101,99,1,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,79,0,0, + 0,115,24,0,0,0,100,1,100,2,108,0,109,1,125,3, + 1,0,124,3,106,2,124,1,124,2,142,1,83,0,41,3, + 97,32,1,0,0,10,32,32,32,32,32,32,32,32,70,105, + 110,100,32,100,105,115,116,114,105,98,117,116,105,111,110,115, + 46,10,10,32,32,32,32,32,32,32,32,82,101,116,117,114, + 110,32,97,110,32,105,116,101,114,97,98,108,101,32,111,102, + 32,97,108,108,32,68,105,115,116,114,105,98,117,116,105,111, + 110,32,105,110,115,116,97,110,99,101,115,32,99,97,112,97, + 98,108,101,32,111,102,10,32,32,32,32,32,32,32,32,108, + 111,97,100,105,110,103,32,116,104,101,32,109,101,116,97,100, + 97,116,97,32,102,111,114,32,112,97,99,107,97,103,101,115, + 32,109,97,116,99,104,105,110,103,32,96,96,99,111,110,116, + 101,120,116,46,110,97,109,101,96,96,10,32,32,32,32,32, + 32,32,32,40,111,114,32,97,108,108,32,110,97,109,101,115, + 32,105,102,32,96,96,78,111,110,101,96,96,32,105,110,100, + 105,99,97,116,101,100,41,32,97,108,111,110,103,32,116,104, + 101,32,112,97,116,104,115,32,105,110,32,116,104,101,32,108, + 105,115,116,10,32,32,32,32,32,32,32,32,111,102,32,100, + 105,114,101,99,116,111,114,105,101,115,32,96,96,99,111,110, + 116,101,120,116,46,112,97,116,104,96,96,46,10,32,32,32, + 32,32,32,32,32,114,72,0,0,0,41,1,218,18,77,101, + 116,97,100,97,116,97,80,97,116,104,70,105,110,100,101,114, + 41,3,90,18,105,109,112,111,114,116,108,105,98,46,109,101, + 116,97,100,97,116,97,114,59,1,0,0,218,18,102,105,110, + 100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,41, + 4,114,193,0,0,0,114,119,0,0,0,114,120,0,0,0, + 114,59,1,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,60,1,0,0,94,5,0,0,115,4,0, + 0,0,0,10,12,1,122,29,80,97,116,104,70,105,110,100, + 101,114,46,102,105,110,100,95,100,105,115,116,114,105,98,117, + 116,105,111,110,115,41,1,78,41,2,78,78,41,1,78,41, + 13,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0, + 114,127,0,0,0,114,207,0,0,0,114,46,1,0,0,114, + 52,1,0,0,114,54,1,0,0,114,55,1,0,0,114,58, + 1,0,0,114,203,0,0,0,114,206,0,0,0,114,60,1, 0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0, - 0,114,6,0,0,0,218,8,60,109,111,100,117,108,101,62, - 1,0,0,0,115,126,0,0,0,4,22,4,1,4,1,2, - 1,2,255,4,4,8,17,8,5,8,5,8,6,8,6,8, - 12,8,10,8,9,8,5,8,7,8,9,10,22,10,127,0, - 14,16,1,12,2,4,1,4,2,6,2,6,2,8,2,16, - 71,8,40,8,19,8,12,8,12,8,28,8,17,8,33,8, - 28,8,24,10,13,10,10,10,11,8,14,6,3,4,1,2, - 255,12,68,14,64,14,29,16,127,0,17,14,72,18,45,18, - 26,4,3,18,53,14,63,14,42,14,127,0,20,14,127,0, - 22,10,23,8,11,8,65, + 0,114,6,0,0,0,114,45,1,0,0,217,4,0,0,115, + 34,0,0,0,8,2,4,2,2,1,10,9,2,1,10,12, + 2,1,10,21,2,1,10,14,2,1,12,31,2,1,12,23, + 2,1,12,12,2,1,114,45,1,0,0,99,0,0,0,0, + 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 64,0,0,0,115,90,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,101,6,90,7,100,6,100,7,132,0,90, + 8,100,8,100,9,132,0,90,9,100,19,100,11,100,12,132, + 1,90,10,100,13,100,14,132,0,90,11,101,12,100,15,100, + 16,132,0,131,1,90,13,100,17,100,18,132,0,90,14,100, + 10,83,0,41,20,218,10,70,105,108,101,70,105,110,100,101, + 114,122,172,70,105,108,101,45,98,97,115,101,100,32,102,105, + 110,100,101,114,46,10,10,32,32,32,32,73,110,116,101,114, + 97,99,116,105,111,110,115,32,119,105,116,104,32,116,104,101, + 32,102,105,108,101,32,115,121,115,116,101,109,32,97,114,101, + 32,99,97,99,104,101,100,32,102,111,114,32,112,101,114,102, + 111,114,109,97,110,99,101,44,32,98,101,105,110,103,10,32, + 32,32,32,114,101,102,114,101,115,104,101,100,32,119,104,101, + 110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32, + 116,104,101,32,102,105,110,100,101,114,32,105,115,32,104,97, + 110,100,108,105,110,103,32,104,97,115,32,98,101,101,110,32, + 109,111,100,105,102,105,101,100,46,10,10,32,32,32,32,99, + 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, + 6,0,0,0,7,0,0,0,115,84,0,0,0,103,0,125, + 3,124,2,68,0,93,32,92,2,137,0,125,4,124,3,160, + 0,135,0,102,1,100,1,100,2,132,8,124,4,68,0,131, + 1,161,1,1,0,113,8,124,3,124,0,95,1,124,1,112, + 54,100,3,124,0,95,2,100,4,124,0,95,3,116,4,131, + 0,124,0,95,5,116,4,131,0,124,0,95,6,100,5,83, + 0,41,6,122,154,73,110,105,116,105,97,108,105,122,101,32, + 119,105,116,104,32,116,104,101,32,112,97,116,104,32,116,111, + 32,115,101,97,114,99,104,32,111,110,32,97,110,100,32,97, + 32,118,97,114,105,97,98,108,101,32,110,117,109,98,101,114, + 32,111,102,10,32,32,32,32,32,32,32,32,50,45,116,117, + 112,108,101,115,32,99,111,110,116,97,105,110,105,110,103,32, + 116,104,101,32,108,111,97,100,101,114,32,97,110,100,32,116, + 104,101,32,102,105,108,101,32,115,117,102,102,105,120,101,115, + 32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,32, + 32,32,32,32,114,101,99,111,103,110,105,122,101,115,46,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,51,0,0,0,115,22,0,0,0,124,0,93, + 14,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100, + 0,83,0,114,109,0,0,0,114,3,0,0,0,114,16,1, + 0,0,169,1,114,140,0,0,0,114,3,0,0,0,114,6, + 0,0,0,114,19,1,0,0,123,5,0,0,115,4,0,0, + 0,4,0,2,0,122,38,70,105,108,101,70,105,110,100,101, + 114,46,95,95,105,110,105,116,95,95,46,60,108,111,99,97, + 108,115,62,46,60,103,101,110,101,120,112,114,62,114,70,0, + 0,0,114,104,0,0,0,78,41,7,114,167,0,0,0,218, + 8,95,108,111,97,100,101,114,115,114,43,0,0,0,218,11, + 95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,116, + 218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,95, + 114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,99, + 104,101,41,5,114,118,0,0,0,114,43,0,0,0,218,14, + 108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,7, + 108,111,97,100,101,114,115,114,189,0,0,0,114,3,0,0, + 0,114,62,1,0,0,114,6,0,0,0,114,209,0,0,0, + 117,5,0,0,115,16,0,0,0,0,4,4,1,12,1,26, + 1,6,2,10,1,6,1,8,1,122,19,70,105,108,101,70, + 105,110,100,101,114,46,95,95,105,110,105,116,95,95,99,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2, + 0,0,0,67,0,0,0,115,10,0,0,0,100,1,124,0, + 95,0,100,2,83,0,41,3,122,31,73,110,118,97,108,105, + 100,97,116,101,32,116,104,101,32,100,105,114,101,99,116,111, + 114,121,32,109,116,105,109,101,46,114,104,0,0,0,78,41, + 1,114,64,1,0,0,114,246,0,0,0,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,114,46,1,0,0,131, + 5,0,0,115,2,0,0,0,0,2,122,28,70,105,108,101, + 70,105,110,100,101,114,46,105,110,118,97,108,105,100,97,116, + 101,95,99,97,99,104,101,115,99,2,0,0,0,0,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,42,0,0,0,124,0,160,0,124,1,161,1,125,2, + 124,2,100,1,107,8,114,26,100,1,103,0,102,2,83,0, + 124,2,106,1,124,2,106,2,112,38,103,0,102,2,83,0, + 41,2,122,197,84,114,121,32,116,111,32,102,105,110,100,32, + 97,32,108,111,97,100,101,114,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, + 101,44,32,111,114,32,116,104,101,32,110,97,109,101,115,112, + 97,99,101,10,32,32,32,32,32,32,32,32,112,97,99,107, + 97,103,101,32,112,111,114,116,105,111,110,115,46,32,82,101, + 116,117,114,110,115,32,40,108,111,97,100,101,114,44,32,108, + 105,115,116,45,111,102,45,112,111,114,116,105,111,110,115,41, + 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,3,114,203,0,0, + 0,114,140,0,0,0,114,178,0,0,0,41,3,114,118,0, + 0,0,114,139,0,0,0,114,187,0,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,137,0,0,0, + 137,5,0,0,115,8,0,0,0,0,7,10,1,8,1,8, + 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105, + 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0, + 0,0,0,0,0,0,7,0,0,0,6,0,0,0,67,0, + 0,0,115,26,0,0,0,124,1,124,2,124,3,131,2,125, + 6,116,0,124,2,124,3,124,6,124,4,100,1,141,4,83, + 0,41,2,78,114,177,0,0,0,41,1,114,190,0,0,0, + 41,7,114,118,0,0,0,114,188,0,0,0,114,139,0,0, + 0,114,43,0,0,0,90,4,115,109,115,108,114,202,0,0, + 0,114,140,0,0,0,114,3,0,0,0,114,3,0,0,0, + 114,6,0,0,0,114,58,1,0,0,149,5,0,0,115,8, + 0,0,0,0,1,10,1,8,1,2,255,122,20,70,105,108, + 101,70,105,110,100,101,114,46,95,103,101,116,95,115,112,101, + 99,78,99,3,0,0,0,0,0,0,0,0,0,0,0,14, + 0,0,0,8,0,0,0,67,0,0,0,115,98,1,0,0, + 100,1,125,3,124,1,160,0,100,2,161,1,100,3,25,0, + 125,4,122,24,116,1,124,0,106,2,112,34,116,3,160,4, + 161,0,131,1,106,5,125,5,87,0,110,24,4,0,116,6, + 107,10,114,66,1,0,1,0,1,0,100,4,125,5,89,0, + 110,2,48,0,124,5,124,0,106,7,107,3,114,92,124,0, + 160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,0, + 114,114,124,0,106,10,125,6,124,4,160,11,161,0,125,7, + 110,10,124,0,106,12,125,6,124,4,125,7,124,7,124,6, + 107,6,114,218,116,13,124,0,106,2,124,4,131,2,125,8, + 124,0,106,14,68,0,93,58,92,2,125,9,125,10,100,5, + 124,9,23,0,125,11,116,13,124,8,124,11,131,2,125,12, + 116,15,124,12,131,1,114,150,124,0,160,16,124,10,124,1, + 124,12,124,8,103,1,124,2,161,5,2,0,1,0,83,0, + 113,150,116,17,124,8,131,1,125,3,124,0,106,14,68,0, + 93,82,92,2,125,9,125,10,116,13,124,0,106,2,124,4, + 124,9,23,0,131,2,125,12,116,18,106,19,100,6,124,12, + 100,3,100,7,141,3,1,0,124,7,124,9,23,0,124,6, + 107,6,114,224,116,15,124,12,131,1,114,224,124,0,160,16, + 124,10,124,1,124,12,100,8,124,2,161,5,2,0,1,0, + 83,0,113,224,124,3,144,1,114,94,116,18,160,19,100,9, + 124,8,161,2,1,0,116,18,160,20,124,1,100,8,161,2, + 125,13,124,8,103,1,124,13,95,21,124,13,83,0,100,8, + 83,0,41,10,122,111,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,115,112,101,99,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,115,32,116,104,101,32,109,97,116,99,104,105,110,103, + 32,115,112,101,99,44,32,111,114,32,78,111,110,101,32,105, + 102,32,110,111,116,32,102,111,117,110,100,46,10,32,32,32, + 32,32,32,32,32,70,114,70,0,0,0,114,27,0,0,0, + 114,104,0,0,0,114,209,0,0,0,122,9,116,114,121,105, + 110,103,32,123,125,41,1,90,9,118,101,114,98,111,115,105, + 116,121,78,122,25,112,111,115,115,105,98,108,101,32,110,97, + 109,101,115,112,97,99,101,32,102,111,114,32,123,125,41,22, + 114,40,0,0,0,114,48,0,0,0,114,43,0,0,0,114, + 2,0,0,0,114,54,0,0,0,114,10,1,0,0,114,49, + 0,0,0,114,64,1,0,0,218,11,95,102,105,108,108,95, + 99,97,99,104,101,114,7,0,0,0,114,67,1,0,0,114, + 105,0,0,0,114,66,1,0,0,114,37,0,0,0,114,63, + 1,0,0,114,53,0,0,0,114,58,1,0,0,114,55,0, + 0,0,114,134,0,0,0,114,149,0,0,0,114,183,0,0, + 0,114,178,0,0,0,41,14,114,118,0,0,0,114,139,0, + 0,0,114,202,0,0,0,90,12,105,115,95,110,97,109,101, + 115,112,97,99,101,90,11,116,97,105,108,95,109,111,100,117, + 108,101,114,169,0,0,0,90,5,99,97,99,104,101,90,12, + 99,97,99,104,101,95,109,111,100,117,108,101,90,9,98,97, + 115,101,95,112,97,116,104,114,17,1,0,0,114,188,0,0, + 0,90,13,105,110,105,116,95,102,105,108,101,110,97,109,101, + 90,9,102,117,108,108,95,112,97,116,104,114,187,0,0,0, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114, + 203,0,0,0,154,5,0,0,115,74,0,0,0,0,5,4, + 1,14,1,2,1,24,1,14,1,10,1,10,1,8,1,6, + 2,6,1,6,1,10,2,6,1,4,2,8,1,12,1,14, + 1,8,1,10,1,8,1,26,4,8,2,14,1,16,1,16, + 1,12,1,8,1,10,1,2,0,2,255,10,2,6,1,12, + 1,12,1,8,1,4,1,122,20,70,105,108,101,70,105,110, + 100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0, + 0,0,0,0,0,0,0,0,0,0,9,0,0,0,10,0, + 0,0,67,0,0,0,115,190,0,0,0,124,0,106,0,125, + 1,122,22,116,1,160,2,124,1,112,22,116,1,160,3,161, + 0,161,1,125,2,87,0,110,30,4,0,116,4,116,5,116, + 6,102,3,107,10,114,58,1,0,1,0,1,0,103,0,125, + 2,89,0,110,2,48,0,116,7,106,8,160,9,100,1,161, + 1,115,84,116,10,124,2,131,1,124,0,95,11,110,74,116, + 10,131,0,125,3,124,2,68,0,93,56,125,4,124,4,160, + 12,100,2,161,1,92,3,125,5,125,6,125,7,124,6,114, + 136,100,3,160,13,124,5,124,7,160,14,161,0,161,2,125, + 8,110,4,124,5,125,8,124,3,160,15,124,8,161,1,1, + 0,113,94,124,3,124,0,95,11,116,7,106,8,160,9,116, + 16,161,1,114,186,100,4,100,5,132,0,124,2,68,0,131, + 1,124,0,95,17,100,6,83,0,41,7,122,68,70,105,108, + 108,32,116,104,101,32,99,97,99,104,101,32,111,102,32,112, + 111,116,101,110,116,105,97,108,32,109,111,100,117,108,101,115, + 32,97,110,100,32,112,97,99,107,97,103,101,115,32,102,111, + 114,32,116,104,105,115,32,100,105,114,101,99,116,111,114,121, + 46,114,0,0,0,0,114,70,0,0,0,114,60,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,83,0,0,0,115,20,0,0,0,104,0, + 124,0,93,12,125,1,124,1,160,0,161,0,146,2,113,4, + 83,0,114,3,0,0,0,41,1,114,105,0,0,0,41,2, + 114,31,0,0,0,90,2,102,110,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,218,9,60,115,101,116,99,111, + 109,112,62,231,5,0,0,115,4,0,0,0,6,0,2,0, + 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105, + 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115, + 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,43, + 0,0,0,114,2,0,0,0,114,7,1,0,0,114,54,0, + 0,0,114,3,1,0,0,218,15,80,101,114,109,105,115,115, + 105,111,110,69,114,114,111,114,218,18,78,111,116,65,68,105, + 114,101,99,116,111,114,121,69,114,114,111,114,114,8,0,0, + 0,114,9,0,0,0,114,10,0,0,0,114,65,1,0,0, + 114,66,1,0,0,114,100,0,0,0,114,61,0,0,0,114, + 105,0,0,0,218,3,97,100,100,114,11,0,0,0,114,67, + 1,0,0,41,9,114,118,0,0,0,114,43,0,0,0,114, + 8,1,0,0,90,21,108,111,119,101,114,95,115,117,102,102, + 105,120,95,99,111,110,116,101,110,116,115,114,41,1,0,0, + 114,116,0,0,0,114,29,1,0,0,114,17,1,0,0,90, + 8,110,101,119,95,110,97,109,101,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,69,1,0,0,202,5,0, + 0,115,34,0,0,0,0,2,6,1,2,1,22,1,20,3, + 10,3,12,1,12,7,6,1,8,1,16,1,4,1,18,2, + 4,1,12,1,6,1,12,1,122,22,70,105,108,101,70,105, + 110,100,101,114,46,95,102,105,108,108,95,99,97,99,104,101, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,7,0,0,0,115,18,0,0,0,135,0, + 135,1,102,2,100,1,100,2,132,8,125,2,124,2,83,0, + 41,3,97,20,1,0,0,65,32,99,108,97,115,115,32,109, + 101,116,104,111,100,32,119,104,105,99,104,32,114,101,116,117, + 114,110,115,32,97,32,99,108,111,115,117,114,101,32,116,111, + 32,117,115,101,32,111,110,32,115,121,115,46,112,97,116,104, + 95,104,111,111,107,10,32,32,32,32,32,32,32,32,119,104, + 105,99,104,32,119,105,108,108,32,114,101,116,117,114,110,32, + 97,110,32,105,110,115,116,97,110,99,101,32,117,115,105,110, + 103,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 108,111,97,100,101,114,115,32,97,110,100,32,116,104,101,32, + 112,97,116,104,10,32,32,32,32,32,32,32,32,99,97,108, + 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, + 114,101,46,10,10,32,32,32,32,32,32,32,32,73,102,32, + 116,104,101,32,112,97,116,104,32,99,97,108,108,101,100,32, + 111,110,32,116,104,101,32,99,108,111,115,117,114,101,32,105, + 115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114, + 121,44,32,73,109,112,111,114,116,69,114,114,111,114,32,105, + 115,10,32,32,32,32,32,32,32,32,114,97,105,115,101,100, + 46,10,10,32,32,32,32,32,32,32,32,99,1,0,0,0, + 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, + 19,0,0,0,115,34,0,0,0,116,0,124,0,131,1,115, + 20,116,1,100,1,124,0,100,2,141,2,130,1,136,0,124, + 0,102,1,136,1,158,2,142,0,83,0,41,3,122,45,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,101,114,121, + 46,70,105,108,101,70,105,110,100,101,114,46,122,30,111,110, + 108,121,32,100,105,114,101,99,116,111,114,105,101,115,32,97, + 114,101,32,115,117,112,112,111,114,116,101,100,114,47,0,0, + 0,41,2,114,55,0,0,0,114,117,0,0,0,114,47,0, + 0,0,169,2,114,193,0,0,0,114,68,1,0,0,114,3, + 0,0,0,114,6,0,0,0,218,24,112,97,116,104,95,104, + 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100, + 101,114,243,5,0,0,115,6,0,0,0,0,2,8,1,12, + 1,122,54,70,105,108,101,70,105,110,100,101,114,46,112,97, + 116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,62, + 46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, + 105,108,101,70,105,110,100,101,114,114,3,0,0,0,41,3, + 114,193,0,0,0,114,68,1,0,0,114,75,1,0,0,114, + 3,0,0,0,114,74,1,0,0,114,6,0,0,0,218,9, + 112,97,116,104,95,104,111,111,107,233,5,0,0,115,4,0, + 0,0,0,10,14,6,122,20,70,105,108,101,70,105,110,100, + 101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0, + 0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,0, + 106,1,161,1,83,0,41,2,78,122,16,70,105,108,101,70, + 105,110,100,101,114,40,123,33,114,125,41,41,2,114,61,0, + 0,0,114,43,0,0,0,114,246,0,0,0,114,3,0,0, + 0,114,3,0,0,0,114,6,0,0,0,114,39,1,0,0, + 251,5,0,0,115,2,0,0,0,0,1,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,95, + 41,1,78,41,15,114,125,0,0,0,114,124,0,0,0,114, + 126,0,0,0,114,127,0,0,0,114,209,0,0,0,114,46, + 1,0,0,114,143,0,0,0,114,206,0,0,0,114,137,0, + 0,0,114,58,1,0,0,114,203,0,0,0,114,69,1,0, + 0,114,207,0,0,0,114,76,1,0,0,114,39,1,0,0, + 114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,61,1,0,0,108,5,0,0,115,22,0, + 0,0,8,2,4,7,8,14,8,4,4,2,8,12,8,5, + 10,48,8,31,2,1,10,17,114,61,1,0,0,99,4,0, + 0,0,0,0,0,0,0,0,0,0,6,0,0,0,8,0, + 0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100, + 1,161,1,125,4,124,0,160,0,100,2,161,1,125,5,124, + 4,115,66,124,5,114,36,124,5,106,1,125,4,110,30,124, + 2,124,3,107,2,114,56,116,2,124,1,124,2,131,2,125, + 4,110,10,116,3,124,1,124,2,131,2,125,4,124,5,115, + 84,116,4,124,1,124,2,124,4,100,3,141,3,125,5,122, + 36,124,5,124,0,100,2,60,0,124,4,124,0,100,1,60, + 0,124,2,124,0,100,4,60,0,124,3,124,0,100,5,60, + 0,87,0,110,20,4,0,116,5,107,10,114,140,1,0,1, + 0,1,0,89,0,110,2,48,0,100,0,83,0,41,6,78, + 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95, + 115,112,101,99,95,95,114,62,1,0,0,90,8,95,95,102, + 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95, + 95,41,6,218,3,103,101,116,114,140,0,0,0,114,15,1, + 0,0,114,9,1,0,0,114,190,0,0,0,218,9,69,120, + 99,101,112,116,105,111,110,41,6,90,2,110,115,114,116,0, + 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112, + 97,116,104,110,97,109,101,114,140,0,0,0,114,187,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101, + 1,6,0,0,115,34,0,0,0,0,2,10,1,10,1,4, + 1,4,1,8,1,8,1,12,2,10,1,4,1,14,1,2, + 1,8,1,8,1,8,1,12,1,14,2,114,81,1,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,38,0,0,0,116,0, + 116,1,160,2,161,0,102,2,125,0,116,3,116,4,102,2, + 125,1,116,5,116,6,102,2,125,2,124,0,124,1,124,2, + 103,3,83,0,41,1,122,95,82,101,116,117,114,110,115,32, + 97,32,108,105,115,116,32,111,102,32,102,105,108,101,45,98, + 97,115,101,100,32,109,111,100,117,108,101,32,108,111,97,100, + 101,114,115,46,10,10,32,32,32,32,69,97,99,104,32,105, + 116,101,109,32,105,115,32,97,32,116,117,112,108,101,32,40, + 108,111,97,100,101,114,44,32,115,117,102,102,105,120,101,115, + 41,46,10,32,32,32,32,41,7,114,252,0,0,0,114,163, + 0,0,0,218,18,101,120,116,101,110,115,105,111,110,95,115, + 117,102,102,105,120,101,115,114,9,1,0,0,114,101,0,0, + 0,114,15,1,0,0,114,88,0,0,0,41,3,90,10,101, + 120,116,101,110,115,105,111,110,115,90,6,115,111,117,114,99, + 101,90,8,98,121,116,101,99,111,100,101,114,3,0,0,0, + 114,3,0,0,0,114,6,0,0,0,114,184,0,0,0,24, + 6,0,0,115,8,0,0,0,0,5,12,1,8,1,8,1, + 114,184,0,0,0,99,1,0,0,0,0,0,0,0,0,0, + 0,0,12,0,0,0,9,0,0,0,67,0,0,0,115,178, + 1,0,0,124,0,97,0,116,0,106,1,97,1,116,0,106, + 2,97,2,116,1,106,3,116,4,25,0,125,1,100,1,68, + 0,93,48,125,2,124,2,116,1,106,3,107,7,114,56,116, + 0,160,5,124,2,161,1,125,3,110,10,116,1,106,3,124, + 2,25,0,125,3,116,6,124,1,124,2,124,3,131,3,1, + 0,113,30,100,2,100,3,103,1,102,2,100,4,100,5,100, + 3,103,2,102,2,102,2,125,4,124,4,68,0,93,110,92, + 2,125,5,125,6,116,7,100,6,100,7,132,0,124,6,68, + 0,131,1,131,1,115,136,74,0,130,1,124,6,100,8,25, + 0,125,7,124,5,116,1,106,3,107,6,114,170,116,1,106, + 3,124,5,25,0,125,8,1,0,113,226,113,106,122,20,116, + 0,160,5,124,5,161,1,125,8,87,0,1,0,113,226,87, + 0,113,106,4,0,116,8,107,10,114,214,1,0,1,0,1, + 0,89,0,113,106,89,0,113,106,48,0,113,106,116,8,100, + 9,131,1,130,1,116,6,124,1,100,10,124,8,131,3,1, + 0,116,6,124,1,100,11,124,7,131,3,1,0,116,6,124, + 1,100,12,100,13,160,9,124,6,161,1,131,3,1,0,116, + 6,124,1,100,14,100,15,100,16,132,0,124,6,68,0,131, + 1,131,3,1,0,116,0,160,5,100,17,161,1,125,9,116, + 6,124,1,100,17,124,9,131,3,1,0,116,0,160,5,100, + 18,161,1,125,10,116,6,124,1,100,18,124,10,131,3,1, + 0,124,5,100,4,107,2,144,1,114,110,116,0,160,5,100, + 19,161,1,125,11,116,6,124,1,100,20,124,11,131,3,1, + 0,116,6,124,1,100,21,116,10,131,0,131,3,1,0,116, + 11,160,12,116,2,160,13,161,0,161,1,1,0,124,5,100, + 4,107,2,144,1,114,174,116,14,160,15,100,22,161,1,1, + 0,100,23,116,11,107,6,144,1,114,174,100,24,116,16,95, + 17,100,25,83,0,41,26,122,205,83,101,116,117,112,32,116, + 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, + 112,111,114,116,101,114,115,32,102,111,114,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,10,32,32,32,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,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,79,116,104,101,114,32,99,111,109,112,111,110,101,110, + 116,115,32,97,114,101,32,101,120,116,114,97,99,116,101,100, + 32,102,114,111,109,32,116,104,101,32,99,111,114,101,32,98, + 111,111,116,115,116,114,97,112,32,109,111,100,117,108,101,46, + 10,10,32,32,32,32,41,4,114,63,0,0,0,114,74,0, + 0,0,218,8,98,117,105,108,116,105,110,115,114,160,0,0, + 0,90,5,112,111,115,105,120,250,1,47,90,2,110,116,250, + 1,92,99,1,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,115,0,0,0,115,26,0,0,0, + 124,0,93,18,125,1,116,0,124,1,131,1,100,0,107,2, + 86,0,1,0,113,2,100,1,83,0,41,2,114,38,0,0, + 0,78,41,1,114,22,0,0,0,41,2,114,31,0,0,0, + 114,94,0,0,0,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,114,19,1,0,0,60,6,0,0,115,4,0, + 0,0,4,0,2,0,122,25,95,115,101,116,117,112,46,60, + 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114, + 62,114,72,0,0,0,122,30,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,114,2,0,0,0,114,34,0,0,0, + 114,30,0,0,0,114,39,0,0,0,114,57,0,0,0,99, + 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 4,0,0,0,83,0,0,0,115,22,0,0,0,104,0,124, + 0,93,14,125,1,100,0,124,1,155,0,157,2,146,2,113, + 4,83,0,41,1,114,73,0,0,0,114,3,0,0,0,41, + 2,114,31,0,0,0,218,1,115,114,3,0,0,0,114,3, + 0,0,0,114,6,0,0,0,114,70,1,0,0,76,6,0, + 0,115,4,0,0,0,6,0,2,0,122,25,95,115,101,116, + 117,112,46,60,108,111,99,97,108,115,62,46,60,115,101,116, + 99,111,109,112,62,90,7,95,116,104,114,101,97,100,90,8, + 95,119,101,97,107,114,101,102,90,6,119,105,110,114,101,103, + 114,192,0,0,0,114,7,0,0,0,122,4,46,112,121,119, + 122,6,95,100,46,112,121,100,84,78,41,18,114,134,0,0, + 0,114,8,0,0,0,114,163,0,0,0,114,31,1,0,0, + 114,125,0,0,0,90,18,95,98,117,105,108,116,105,110,95, + 102,114,111,109,95,110,97,109,101,114,129,0,0,0,218,3, + 97,108,108,114,117,0,0,0,114,35,0,0,0,114,13,0, + 0,0,114,21,1,0,0,114,167,0,0,0,114,82,1,0, + 0,114,101,0,0,0,114,186,0,0,0,114,191,0,0,0, + 114,195,0,0,0,41,12,218,17,95,98,111,111,116,115,116, + 114,97,112,95,109,111,100,117,108,101,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,10,111,115,95,100,101,116,97,105,108, + 115,90,10,98,117,105,108,116,105,110,95,111,115,114,30,0, + 0,0,114,34,0,0,0,90,9,111,115,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,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101, + 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218, + 6,95,115,101,116,117,112,35,6,0,0,115,78,0,0,0, + 0,8,4,1,6,1,6,3,10,1,8,1,10,1,12,2, + 10,1,14,3,22,1,12,2,22,1,8,1,10,1,10,1, + 6,2,2,1,10,1,10,1,14,1,12,2,8,1,12,1, + 12,1,18,1,22,3,10,1,12,3,10,1,12,3,10,1, + 10,1,12,3,14,1,14,1,10,1,10,1,10,1,114,89, + 1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0, + 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116, + 2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161, + 1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100, + 1,83,0,41,2,122,41,73,110,115,116,97,108,108,32,116, + 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109, + 112,111,114,116,32,99,111,109,112,111,110,101,110,116,115,46, + 78,41,10,114,89,1,0,0,114,184,0,0,0,114,8,0, + 0,0,114,51,1,0,0,114,167,0,0,0,114,61,1,0, + 0,114,76,1,0,0,218,9,109,101,116,97,95,112,97,116, + 104,114,186,0,0,0,114,45,1,0,0,41,2,114,88,1, + 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111, + 97,100,101,114,115,114,3,0,0,0,114,3,0,0,0,114, + 6,0,0,0,218,8,95,105,110,115,116,97,108,108,100,6, + 0,0,115,8,0,0,0,0,2,8,1,6,1,20,1,114, + 91,1,0,0,41,1,114,59,0,0,0,41,1,78,41,3, + 78,78,78,41,2,114,72,0,0,0,114,72,0,0,0,41, + 1,84,41,1,78,41,1,78,41,63,114,127,0,0,0,114, + 12,0,0,0,90,37,95,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,95,66,89,84,69,83,95,75,69,89,114,11,0,0,0, + 114,13,0,0,0,114,20,0,0,0,114,26,0,0,0,114, + 28,0,0,0,114,37,0,0,0,114,46,0,0,0,114,48, + 0,0,0,114,52,0,0,0,114,53,0,0,0,114,55,0, + 0,0,114,58,0,0,0,114,68,0,0,0,218,4,116,121, + 112,101,218,8,95,95,99,111,100,101,95,95,114,162,0,0, + 0,114,18,0,0,0,114,148,0,0,0,114,17,0,0,0, + 114,23,0,0,0,114,236,0,0,0,114,91,0,0,0,114, + 87,0,0,0,114,101,0,0,0,114,88,0,0,0,90,23, + 68,69,66,85,71,95,66,89,84,69,67,79,68,69,95,83, + 85,70,70,73,88,69,83,90,27,79,80,84,73,77,73,90, + 69,68,95,66,89,84,69,67,79,68,69,95,83,85,70,70, + 73,88,69,83,114,97,0,0,0,114,102,0,0,0,114,108, + 0,0,0,114,112,0,0,0,114,114,0,0,0,114,136,0, + 0,0,114,143,0,0,0,114,152,0,0,0,114,156,0,0, + 0,114,158,0,0,0,114,165,0,0,0,114,170,0,0,0, + 114,171,0,0,0,114,176,0,0,0,218,6,111,98,106,101, + 99,116,114,185,0,0,0,114,190,0,0,0,114,191,0,0, + 0,114,208,0,0,0,114,221,0,0,0,114,239,0,0,0, + 114,9,1,0,0,114,15,1,0,0,114,21,1,0,0,114, + 252,0,0,0,114,22,1,0,0,114,43,1,0,0,114,45, + 1,0,0,114,61,1,0,0,114,81,1,0,0,114,184,0, + 0,0,114,89,1,0,0,114,91,1,0,0,114,3,0,0, + 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0, + 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,126, + 0,0,0,4,22,4,1,4,1,2,1,2,255,4,4,8, + 17,8,5,8,5,8,6,8,6,8,12,8,10,8,9,8, + 5,8,7,8,9,10,22,10,127,0,16,16,1,12,2,4, + 1,4,2,6,2,6,2,8,2,16,71,8,40,8,19,8, + 12,8,12,8,28,8,17,8,33,8,28,8,24,10,13,10, + 10,10,11,8,14,6,3,4,1,2,255,12,68,14,64,14, + 29,16,127,0,17,14,72,18,45,18,26,4,3,18,53,14, + 63,14,42,14,127,0,20,14,127,0,22,10,23,8,11,8, + 65, }; diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h index 2d10c8c9cf9..21633acb937 100644 --- a/Python/importlib_zipimport.h +++ b/Python/importlib_zipimport.h @@ -127,12 +127,12 @@ const unsigned char _Py_M__zipimport[] = { 0,116,8,160,12,124,1,161,1,92,2,125,5,125,6,124, 5,124,1,107,2,114,132,116,4,100,4,124,1,100,3,141, 2,130,1,124,5,125,1,124,3,160,13,124,6,161,1,1, - 0,89,0,113,64,88,0,124,4,106,14,100,5,64,0,100, + 0,89,0,113,64,48,0,124,4,106,14,100,5,64,0,100, 6,107,3,114,182,116,4,100,4,124,1,100,3,141,2,130, 1,113,182,113,64,122,12,116,15,124,1,25,0,125,7,87, 0,110,36,4,0,116,16,107,10,114,230,1,0,1,0,1, 0,116,17,124,1,131,1,125,7,124,7,116,15,124,1,60, - 0,89,0,110,2,88,0,124,7,124,0,95,18,124,1,124, + 0,89,0,110,2,48,0,124,7,124,0,95,18,124,1,124, 0,95,19,116,8,106,20,124,3,100,0,100,0,100,7,133, 3,25,0,142,0,124,0,95,21,124,0,106,21,144,1,114, 32,124,0,4,0,106,21,116,7,55,0,2,0,95,21,100, @@ -277,7 +277,7 @@ const unsigned char _Py_M__zipimport[] = { 2,23,0,131,1,100,1,133,2,25,0,125,2,122,14,124, 0,106,6,124,2,25,0,125,3,87,0,110,32,4,0,116, 7,107,10,114,104,1,0,1,0,1,0,116,8,100,2,100, - 3,124,2,131,3,130,1,89,0,110,2,88,0,116,9,124, + 3,124,2,131,3,130,1,89,0,110,2,48,0,116,9,124, 0,106,4,124,3,131,2,83,0,41,4,122,154,103,101,116, 95,100,97,116,97,40,112,97,116,104,110,97,109,101,41,32, 45,62,32,115,116,114,105,110,103,32,119,105,116,104,32,102, @@ -323,7 +323,7 @@ const unsigned char _Py_M__zipimport[] = { 3,100,4,161,2,125,4,110,10,124,3,155,0,100,5,157, 2,125,4,122,14,124,0,106,5,124,4,25,0,125,5,87, 0,110,22,4,0,116,6,107,10,114,110,1,0,1,0,1, - 0,89,0,100,1,83,0,88,0,116,7,124,0,106,8,124, + 0,89,0,100,1,83,0,48,0,116,7,124,0,106,8,124, 5,131,2,160,9,161,0,83,0,41,6,122,253,103,101,116, 95,115,111,117,114,99,101,40,102,117,108,108,110,97,109,101, 41,32,45,62,32,115,111,117,114,99,101,32,115,116,114,105, @@ -389,10 +389,10 @@ const unsigned char _Py_M__zipimport[] = { 124,5,95,13,116,8,160,14,124,5,106,15,124,1,124,4, 161,3,1,0,116,16,124,2,124,5,106,15,131,2,1,0, 87,0,110,22,1,0,1,0,1,0,116,1,106,2,124,1, - 61,0,130,0,89,0,110,2,88,0,122,14,116,1,106,2, + 61,0,130,0,89,0,110,2,48,0,122,14,116,1,106,2, 124,1,25,0,125,5,87,0,110,36,4,0,116,17,107,10, 114,228,1,0,1,0,1,0,116,18,100,3,124,1,155,2, - 100,4,157,3,131,1,130,1,89,0,110,2,88,0,116,19, + 100,4,157,3,131,1,130,1,89,0,110,2,48,0,116,19, 160,20,100,5,124,1,124,4,161,3,1,0,124,5,83,0, 41,6,122,245,108,111,97,100,95,109,111,100,117,108,101,40, 102,117,108,108,110,97,109,101,41,32,45,62,32,109,111,100, @@ -440,7 +440,7 @@ const unsigned char _Py_M__zipimport[] = { 0,8,0,0,0,67,0,0,0,115,88,0,0,0,122,20, 124,0,160,0,124,1,161,1,115,18,87,0,100,1,83,0, 87,0,110,22,4,0,116,1,107,10,114,42,1,0,1,0, - 1,0,89,0,100,1,83,0,88,0,116,2,106,3,115,78, + 1,0,89,0,100,1,83,0,48,0,116,2,106,3,115,78, 100,2,100,3,108,4,109,5,125,2,1,0,124,2,160,6, 116,2,161,1,1,0,100,4,116,2,95,3,116,2,124,0, 124,1,131,2,83,0,41,5,122,204,82,101,116,117,114,110, @@ -522,28 +522,28 @@ const unsigned char _Py_M__zipimport[] = { 0,0,0,114,35,0,0,0,65,1,0,0,115,12,0,0, 0,0,1,10,1,14,1,8,1,10,1,10,1,114,35,0, 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,26, - 0,0,0,9,0,0,0,67,0,0,0,115,252,4,0,0, + 0,0,0,9,0,0,0,67,0,0,0,115,18,5,0,0, 122,14,116,0,160,1,124,0,161,1,125,1,87,0,110,38, 4,0,116,2,107,10,114,52,1,0,1,0,1,0,116,3, 100,1,124,0,155,2,157,2,124,0,100,2,141,2,130,1, - 89,0,110,2,88,0,124,1,144,4,143,168,1,0,122,36, + 89,0,110,2,48,0,124,1,144,4,143,178,1,0,122,36, 124,1,160,4,116,5,11,0,100,3,161,2,1,0,124,1, 160,6,161,0,125,2,124,1,160,7,116,5,161,1,125,3, 87,0,110,38,4,0,116,2,107,10,114,136,1,0,1,0, 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2, - 141,2,130,1,89,0,110,2,88,0,116,8,124,3,131,1, + 141,2,130,1,89,0,110,2,48,0,116,8,124,3,131,1, 116,5,107,3,114,168,116,3,100,4,124,0,155,2,157,2, 124,0,100,2,141,2,130,1,124,3,100,0,100,5,133,2, 25,0,116,9,107,3,144,1,114,178,122,24,124,1,160,4, 100,6,100,3,161,2,1,0,124,1,160,6,161,0,125,4, 87,0,110,38,4,0,116,2,107,10,114,248,1,0,1,0, 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2, - 141,2,130,1,89,0,110,2,88,0,116,10,124,4,116,11, + 141,2,130,1,89,0,110,2,48,0,116,10,124,4,116,11, 24,0,116,5,24,0,100,6,131,2,125,5,122,22,124,1, 160,4,124,5,161,1,1,0,124,1,160,7,161,0,125,6, 87,0,110,40,4,0,116,2,107,10,144,1,114,74,1,0, 1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0, - 100,2,141,2,130,1,89,0,110,2,88,0,124,6,160,12, + 100,2,141,2,130,1,89,0,110,2,48,0,124,6,160,12, 116,9,161,1,125,7,124,7,100,6,107,0,144,1,114,114, 116,3,100,7,124,0,155,2,157,2,124,0,100,2,141,2, 130,1,124,6,124,7,124,7,116,5,23,0,133,2,25,0, @@ -562,7 +562,7 @@ const unsigned char _Py_M__zipimport[] = { 124,1,160,4,124,2,161,1,1,0,87,0,110,40,4,0, 116,2,107,10,144,2,114,116,1,0,1,0,1,0,116,3, 100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1, - 89,0,110,2,88,0,124,1,160,7,100,15,161,1,125,3, + 89,0,110,2,48,0,124,1,160,7,100,15,161,1,125,3, 116,8,124,3,131,1,100,5,107,0,144,2,114,150,116,14, 100,16,131,1,130,1,124,3,100,0,100,5,133,2,25,0, 100,17,107,3,144,2,114,172,144,4,113,224,116,8,124,3, @@ -584,7 +584,7 @@ const unsigned char _Py_M__zipimport[] = { 125,22,122,14,124,1,160,7,124,19,161,1,125,23,87,0, 110,40,4,0,116,2,107,10,144,3,114,216,1,0,1,0, 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2, - 141,2,130,1,89,0,110,2,88,0,116,8,124,23,131,1, + 141,2,130,1,89,0,110,2,48,0,116,8,124,23,131,1, 124,19,107,3,144,3,114,250,116,3,100,4,124,0,155,2, 157,2,124,0,100,2,141,2,130,1,122,50,116,8,124,1, 160,7,124,8,124,19,24,0,161,1,131,1,124,8,124,19, @@ -592,490 +592,493 @@ const unsigned char _Py_M__zipimport[] = { 157,2,124,0,100,2,141,2,130,1,87,0,110,40,4,0, 116,2,107,10,144,4,114,84,1,0,1,0,1,0,116,3, 100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1, - 89,0,110,2,88,0,124,13,100,28,64,0,144,4,114,106, + 89,0,110,2,48,0,124,13,100,28,64,0,144,4,114,106, 124,23,160,16,161,0,125,23,110,54,122,14,124,23,160,16, 100,29,161,1,125,23,87,0,110,38,4,0,116,17,107,10, 144,4,114,158,1,0,1,0,1,0,124,23,160,16,100,30, - 161,1,160,18,116,19,161,1,125,23,89,0,110,2,88,0, + 161,1,160,18,116,19,161,1,125,23,89,0,110,2,48,0, 124,23,160,20,100,31,116,21,161,2,125,23,116,22,160,23, 124,0,124,23,161,2,125,24,124,24,124,14,124,18,124,4, 124,22,124,15,124,16,124,17,102,8,125,25,124,25,124,11, 124,23,60,0,124,12,100,32,55,0,125,12,144,2,113,118, - 87,0,53,0,81,0,82,0,88,0,116,24,160,25,100,33, - 124,12,124,0,161,3,1,0,124,11,83,0,41,34,78,122, - 21,99,97,110,39,116,32,111,112,101,110,32,90,105,112,32, - 102,105,108,101,58,32,114,12,0,0,0,114,86,0,0,0, - 250,21,99,97,110,39,116,32,114,101,97,100,32,90,105,112, - 32,102,105,108,101,58,32,233,4,0,0,0,114,0,0,0, - 0,122,16,110,111,116,32,97,32,90,105,112,32,102,105,108, - 101,58,32,122,18,99,111,114,114,117,112,116,32,90,105,112, - 32,102,105,108,101,58,32,233,12,0,0,0,233,16,0,0, - 0,233,20,0,0,0,122,28,98,97,100,32,99,101,110,116, - 114,97,108,32,100,105,114,101,99,116,111,114,121,32,115,105, - 122,101,58,32,122,30,98,97,100,32,99,101,110,116,114,97, - 108,32,100,105,114,101,99,116,111,114,121,32,111,102,102,115, - 101,116,58,32,122,38,98,97,100,32,99,101,110,116,114,97, - 108,32,100,105,114,101,99,116,111,114,121,32,115,105,122,101, - 32,111,114,32,111,102,102,115,101,116,58,32,233,46,0,0, - 0,250,27,69,79,70,32,114,101,97,100,32,119,104,101,114, - 101,32,110,111,116,32,101,120,112,101,99,116,101,100,115,4, - 0,0,0,80,75,1,2,233,8,0,0,0,233,10,0,0, - 0,233,14,0,0,0,233,24,0,0,0,233,28,0,0,0, - 233,30,0,0,0,233,32,0,0,0,233,34,0,0,0,233, - 42,0,0,0,122,25,98,97,100,32,108,111,99,97,108,32, - 104,101,97,100,101,114,32,111,102,102,115,101,116,58,32,105, - 0,8,0,0,218,5,97,115,99,105,105,90,6,108,97,116, - 105,110,49,250,1,47,114,5,0,0,0,122,33,122,105,112, - 105,109,112,111,114,116,58,32,102,111,117,110,100,32,123,125, - 32,110,97,109,101,115,32,105,110,32,123,33,114,125,41,26, - 218,3,95,105,111,218,9,111,112,101,110,95,99,111,100,101, - 114,22,0,0,0,114,3,0,0,0,218,4,115,101,101,107, - 218,20,69,78,68,95,67,69,78,84,82,65,76,95,68,73, - 82,95,83,73,90,69,90,4,116,101,108,108,218,4,114,101, - 97,100,114,51,0,0,0,218,18,83,84,82,73,78,71,95, - 69,78,68,95,65,82,67,72,73,86,69,218,3,109,97,120, - 218,15,77,65,88,95,67,79,77,77,69,78,84,95,76,69, - 78,218,5,114,102,105,110,100,114,2,0,0,0,218,8,69, - 79,70,69,114,114,111,114,114,1,0,0,0,114,62,0,0, - 0,218,18,85,110,105,99,111,100,101,68,101,99,111,100,101, - 69,114,114,111,114,218,9,116,114,97,110,115,108,97,116,101, - 218,11,99,112,52,51,55,95,116,97,98,108,101,114,19,0, - 0,0,114,20,0,0,0,114,21,0,0,0,114,30,0,0, - 0,114,76,0,0,0,114,77,0,0,0,41,26,114,29,0, - 0,0,218,2,102,112,90,15,104,101,97,100,101,114,95,112, - 111,115,105,116,105,111,110,218,6,98,117,102,102,101,114,218, - 9,102,105,108,101,95,115,105,122,101,90,17,109,97,120,95, - 99,111,109,109,101,110,116,95,115,116,97,114,116,218,4,100, - 97,116,97,90,3,112,111,115,218,11,104,101,97,100,101,114, - 95,115,105,122,101,90,13,104,101,97,100,101,114,95,111,102, - 102,115,101,116,90,10,97,114,99,95,111,102,102,115,101,116, - 114,33,0,0,0,218,5,99,111,117,110,116,218,5,102,108, - 97,103,115,218,8,99,111,109,112,114,101,115,115,218,4,116, - 105,109,101,218,4,100,97,116,101,218,3,99,114,99,218,9, - 100,97,116,97,95,115,105,122,101,218,9,110,97,109,101,95, - 115,105,122,101,218,10,101,120,116,114,97,95,115,105,122,101, - 90,12,99,111,109,109,101,110,116,95,115,105,122,101,218,11, - 102,105,108,101,95,111,102,102,115,101,116,114,59,0,0,0, - 114,13,0,0,0,218,1,116,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,114,27,0,0,0,96,1,0,0, - 115,212,0,0,0,0,1,2,1,14,1,14,1,24,2,8, - 1,2,1,14,1,8,1,14,1,14,1,24,1,12,1,18, - 1,18,3,2,1,12,1,12,1,14,1,10,1,2,255,12, - 2,8,1,2,255,2,1,2,255,4,2,2,1,10,1,12, - 1,16,1,10,1,2,255,12,2,10,1,10,1,10,1,2, - 255,6,2,16,1,14,1,10,1,2,255,6,2,16,2,16, - 1,16,1,10,1,18,1,10,1,18,1,8,1,8,1,10, - 1,18,2,4,2,4,1,2,1,14,1,16,1,24,2,10, - 1,14,1,8,2,18,1,4,1,14,1,8,1,16,1,16, - 1,16,1,16,1,16,1,16,1,16,1,16,1,16,1,16, - 1,16,1,12,1,10,1,18,1,8,2,2,1,14,1,16, - 1,24,1,14,1,18,4,2,1,28,1,22,1,16,1,24, - 2,10,2,10,3,2,1,14,1,16,1,22,2,12,1,12, - 1,20,1,8,1,22,1,14,1,114,27,0,0,0,117,190, - 1,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12, - 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28, - 29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44, - 45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108, - 109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124, - 125,126,127,195,135,195,188,195,169,195,162,195,164,195,160,195, - 165,195,167,195,170,195,171,195,168,195,175,195,174,195,172,195, - 132,195,133,195,137,195,166,195,134,195,180,195,182,195,178,195, - 187,195,185,195,191,195,150,195,156,194,162,194,163,194,165,226, - 130,167,198,146,195,161,195,173,195,179,195,186,195,177,195,145, - 194,170,194,186,194,191,226,140,144,194,172,194,189,194,188,194, - 161,194,171,194,187,226,150,145,226,150,146,226,150,147,226,148, - 130,226,148,164,226,149,161,226,149,162,226,149,150,226,149,149, - 226,149,163,226,149,145,226,149,151,226,149,157,226,149,156,226, - 149,155,226,148,144,226,148,148,226,148,180,226,148,172,226,148, - 156,226,148,128,226,148,188,226,149,158,226,149,159,226,149,154, - 226,149,148,226,149,169,226,149,166,226,149,160,226,149,144,226, - 149,172,226,149,167,226,149,168,226,149,164,226,149,165,226,149, - 153,226,149,152,226,149,146,226,149,147,226,149,171,226,149,170, - 226,148,152,226,148,140,226,150,136,226,150,132,226,150,140,226, - 150,144,226,150,128,206,177,195,159,206,147,207,128,206,163,207, - 131,194,181,207,132,206,166,206,152,206,169,206,180,226,136,158, - 207,134,206,181,226,136,169,226,137,161,194,177,226,137,165,226, - 137,164,226,140,160,226,140,161,195,183,226,137,136,194,176,226, - 136,153,194,183,226,136,154,226,129,191,194,178,226,150,160,194, - 160,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,8,0,0,0,67,0,0,0,115,108,0,0,0,116, - 0,114,22,116,1,160,2,100,1,161,1,1,0,116,3,100, - 2,131,1,130,1,100,3,97,0,122,60,122,16,100,5,100, - 6,108,4,109,5,125,0,1,0,87,0,110,38,4,0,116, - 6,107,10,114,82,1,0,1,0,1,0,116,1,160,2,100, - 1,161,1,1,0,116,3,100,2,131,1,130,1,89,0,110, - 2,88,0,87,0,53,0,100,4,97,0,88,0,116,1,160, - 2,100,7,161,1,1,0,124,0,83,0,41,8,78,122,27, - 122,105,112,105,109,112,111,114,116,58,32,122,108,105,98,32, - 85,78,65,86,65,73,76,65,66,76,69,250,41,99,97,110, - 39,116,32,100,101,99,111,109,112,114,101,115,115,32,100,97, - 116,97,59,32,122,108,105,98,32,110,111,116,32,97,118,97, - 105,108,97,98,108,101,84,70,114,0,0,0,0,169,1,218, - 10,100,101,99,111,109,112,114,101,115,115,122,25,122,105,112, - 105,109,112,111,114,116,58,32,122,108,105,98,32,97,118,97, - 105,108,97,98,108,101,41,7,218,15,95,105,109,112,111,114, - 116,105,110,103,95,122,108,105,98,114,76,0,0,0,114,77, - 0,0,0,114,3,0,0,0,90,4,122,108,105,98,114,141, - 0,0,0,218,9,69,120,99,101,112,116,105,111,110,114,140, - 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, - 0,0,218,20,95,103,101,116,95,100,101,99,111,109,112,114, - 101,115,115,95,102,117,110,99,254,1,0,0,115,24,0,0, - 0,0,2,4,3,10,1,8,2,4,1,4,1,16,1,14, - 1,10,1,18,2,6,2,10,1,114,144,0,0,0,99,2, - 0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,9, - 0,0,0,67,0,0,0,115,128,1,0,0,124,1,92,8, - 125,2,125,3,125,4,125,5,125,6,125,7,125,8,125,9, - 124,4,100,1,107,0,114,36,116,0,100,2,131,1,130,1, - 116,1,160,2,124,0,161,1,144,1,143,8,125,10,122,14, - 124,10,160,3,124,6,161,1,1,0,87,0,110,38,4,0, - 116,4,107,10,114,102,1,0,1,0,1,0,116,0,100,3, - 124,0,155,2,157,2,124,0,100,4,141,2,130,1,89,0, - 110,2,88,0,124,10,160,5,100,5,161,1,125,11,116,6, - 124,11,131,1,100,5,107,3,114,134,116,7,100,6,131,1, - 130,1,124,11,100,0,100,7,133,2,25,0,100,8,107,3, - 114,168,116,0,100,9,124,0,155,2,157,2,124,0,100,4, - 141,2,130,1,116,8,124,11,100,10,100,11,133,2,25,0, - 131,1,125,12,116,8,124,11,100,11,100,5,133,2,25,0, - 131,1,125,13,100,5,124,12,23,0,124,13,23,0,125,14, - 124,6,124,14,55,0,125,6,122,14,124,10,160,3,124,6, - 161,1,1,0,87,0,110,40,4,0,116,4,107,10,144,1, - 114,18,1,0,1,0,1,0,116,0,100,3,124,0,155,2, - 157,2,124,0,100,4,141,2,130,1,89,0,110,2,88,0, - 124,10,160,5,124,4,161,1,125,15,116,6,124,15,131,1, - 124,4,107,3,144,1,114,52,116,4,100,12,131,1,130,1, - 87,0,53,0,81,0,82,0,88,0,124,3,100,1,107,2, - 144,1,114,76,124,15,83,0,122,10,116,9,131,0,125,16, - 87,0,110,30,4,0,116,10,107,10,144,1,114,116,1,0, - 1,0,1,0,116,0,100,13,131,1,130,1,89,0,110,2, - 88,0,124,16,124,15,100,14,131,2,83,0,41,15,78,114, - 0,0,0,0,122,18,110,101,103,97,116,105,118,101,32,100, - 97,116,97,32,115,105,122,101,114,92,0,0,0,114,12,0, - 0,0,114,104,0,0,0,114,98,0,0,0,114,93,0,0, - 0,115,4,0,0,0,80,75,3,4,122,23,98,97,100,32, - 108,111,99,97,108,32,102,105,108,101,32,104,101,97,100,101, - 114,58,32,233,26,0,0,0,114,103,0,0,0,122,26,122, - 105,112,105,109,112,111,114,116,58,32,99,97,110,39,116,32, - 114,101,97,100,32,100,97,116,97,114,139,0,0,0,105,241, - 255,255,255,41,11,114,3,0,0,0,114,110,0,0,0,114, - 111,0,0,0,114,112,0,0,0,114,22,0,0,0,114,114, - 0,0,0,114,51,0,0,0,114,119,0,0,0,114,1,0, - 0,0,114,144,0,0,0,114,143,0,0,0,41,17,114,29, - 0,0,0,114,54,0,0,0,90,8,100,97,116,97,112,97, - 116,104,114,130,0,0,0,114,134,0,0,0,114,125,0,0, - 0,114,137,0,0,0,114,131,0,0,0,114,132,0,0,0, - 114,133,0,0,0,114,123,0,0,0,114,124,0,0,0,114, - 135,0,0,0,114,136,0,0,0,114,127,0,0,0,90,8, - 114,97,119,95,100,97,116,97,114,141,0,0,0,114,9,0, - 0,0,114,9,0,0,0,114,10,0,0,0,114,52,0,0, - 0,19,2,0,0,115,62,0,0,0,0,1,20,1,8,1, - 8,2,14,2,2,1,14,1,14,1,24,1,10,1,12,1, - 8,2,16,2,18,2,16,1,16,1,12,1,8,1,2,1, - 14,1,16,1,24,1,10,1,14,1,18,2,10,2,4,3, - 2,1,10,1,16,1,14,1,114,52,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0, - 0,0,67,0,0,0,115,16,0,0,0,116,0,124,0,124, - 1,24,0,131,1,100,1,107,1,83,0,41,2,78,114,5, - 0,0,0,41,1,218,3,97,98,115,41,2,90,2,116,49, - 90,2,116,50,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,218,9,95,101,113,95,109,116,105,109,101,65,2, - 0,0,115,2,0,0,0,0,2,114,147,0,0,0,99,5, - 0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,8, - 0,0,0,67,0,0,0,115,60,1,0,0,124,3,124,2, - 100,1,156,2,125,5,122,18,116,0,160,1,124,4,124,3, - 124,5,161,3,125,6,87,0,110,22,4,0,116,2,107,10, - 114,50,1,0,1,0,1,0,89,0,100,0,83,0,88,0, - 124,6,100,2,64,0,100,3,107,3,125,7,124,7,114,182, - 124,6,100,4,64,0,100,3,107,3,125,8,116,3,106,4, - 100,5,107,3,114,180,124,8,115,104,116,3,106,4,100,6, - 107,2,114,180,116,5,124,0,124,2,131,2,125,9,124,9, - 100,0,107,9,114,180,116,3,160,6,116,0,106,7,124,9, - 161,2,125,10,122,20,116,8,160,9,124,4,124,10,124,3, - 124,5,161,4,1,0,87,0,110,22,4,0,116,2,107,10, - 114,178,1,0,1,0,1,0,89,0,100,0,83,0,88,0, - 110,84,116,10,124,0,124,2,131,2,92,2,125,11,125,12, - 124,11,144,1,114,10,116,11,116,12,124,4,100,7,100,8, - 133,2,25,0,131,1,124,11,131,2,114,246,116,12,124,4, - 100,8,100,9,133,2,25,0,131,1,124,12,107,3,144,1, - 114,10,116,13,160,14,100,10,124,3,155,2,157,2,161,1, - 1,0,100,0,83,0,116,15,160,16,124,4,100,9,100,0, - 133,2,25,0,161,1,125,13,116,17,124,13,116,18,131,2, - 144,1,115,56,116,19,100,11,124,1,155,2,100,12,157,3, - 131,1,130,1,124,13,83,0,41,13,78,41,2,114,59,0, - 0,0,114,13,0,0,0,114,5,0,0,0,114,0,0,0, - 0,114,86,0,0,0,90,5,110,101,118,101,114,90,6,97, - 108,119,97,121,115,114,99,0,0,0,114,94,0,0,0,114, - 95,0,0,0,122,22,98,121,116,101,99,111,100,101,32,105, - 115,32,115,116,97,108,101,32,102,111,114,32,122,16,99,111, - 109,112,105,108,101,100,32,109,111,100,117,108,101,32,122,21, - 32,105,115,32,110,111,116,32,97,32,99,111,100,101,32,111, - 98,106,101,99,116,41,20,114,21,0,0,0,90,13,95,99, - 108,97,115,115,105,102,121,95,112,121,99,114,75,0,0,0, - 218,4,95,105,109,112,90,21,99,104,101,99,107,95,104,97, - 115,104,95,98,97,115,101,100,95,112,121,99,115,218,15,95, - 103,101,116,95,112,121,99,95,115,111,117,114,99,101,218,11, - 115,111,117,114,99,101,95,104,97,115,104,90,17,95,82,65, - 87,95,77,65,71,73,67,95,78,85,77,66,69,82,90,18, - 95,98,111,111,115,116,114,97,112,95,101,120,116,101,114,110, - 97,108,90,18,95,118,97,108,105,100,97,116,101,95,104,97, - 115,104,95,112,121,99,218,29,95,103,101,116,95,109,116,105, - 109,101,95,97,110,100,95,115,105,122,101,95,111,102,95,115, - 111,117,114,99,101,114,147,0,0,0,114,2,0,0,0,114, - 76,0,0,0,114,77,0,0,0,218,7,109,97,114,115,104, - 97,108,90,5,108,111,97,100,115,114,15,0,0,0,218,10, - 95,99,111,100,101,95,116,121,112,101,218,9,84,121,112,101, - 69,114,114,111,114,41,14,114,32,0,0,0,114,53,0,0, - 0,114,63,0,0,0,114,38,0,0,0,114,126,0,0,0, - 90,11,101,120,99,95,100,101,116,97,105,108,115,114,129,0, - 0,0,90,10,104,97,115,104,95,98,97,115,101,100,90,12, - 99,104,101,99,107,95,115,111,117,114,99,101,90,12,115,111, - 117,114,99,101,95,98,121,116,101,115,114,150,0,0,0,90, - 12,115,111,117,114,99,101,95,109,116,105,109,101,90,11,115, - 111,117,114,99,101,95,115,105,122,101,114,46,0,0,0,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,15, - 95,117,110,109,97,114,115,104,97,108,95,99,111,100,101,75, - 2,0,0,115,88,0,0,0,0,2,2,1,2,254,6,5, - 2,1,18,1,14,1,8,2,12,1,4,1,12,1,10,1, - 2,255,2,1,8,255,2,2,10,1,8,1,4,1,4,1, - 2,254,4,5,2,1,4,1,2,0,2,0,2,0,2,255, - 8,2,14,1,10,3,8,255,6,3,6,3,22,1,18,255, - 4,2,4,1,8,255,4,2,4,2,18,1,12,1,16,1, - 114,155,0,0,0,99,1,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,4,0,0,0,67,0,0,0,115,28, - 0,0,0,124,0,160,0,100,1,100,2,161,2,125,0,124, - 0,160,0,100,3,100,2,161,2,125,0,124,0,83,0,41, - 4,78,115,2,0,0,0,13,10,243,1,0,0,0,10,243, - 1,0,0,0,13,41,1,114,19,0,0,0,41,1,218,6, - 115,111,117,114,99,101,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,218,23,95,110,111,114,109,97,108,105,122, - 101,95,108,105,110,101,95,101,110,100,105,110,103,115,126,2, - 0,0,115,6,0,0,0,0,1,12,1,12,1,114,159,0, - 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,2, - 0,0,0,6,0,0,0,67,0,0,0,115,24,0,0,0, - 116,0,124,1,131,1,125,1,116,1,124,1,124,0,100,1, - 100,2,100,3,141,4,83,0,41,4,78,114,74,0,0,0, - 84,41,1,90,12,100,111,110,116,95,105,110,104,101,114,105, - 116,41,2,114,159,0,0,0,218,7,99,111,109,112,105,108, - 101,41,2,114,53,0,0,0,114,158,0,0,0,114,9,0, - 0,0,114,9,0,0,0,114,10,0,0,0,218,15,95,99, - 111,109,112,105,108,101,95,115,111,117,114,99,101,133,2,0, - 0,115,4,0,0,0,0,1,8,1,114,161,0,0,0,99, + 87,0,100,0,4,0,4,0,131,3,1,0,110,18,49,0, + 144,4,115,246,48,0,1,0,1,0,1,0,89,0,1,0, + 116,24,160,25,100,33,124,12,124,0,161,3,1,0,124,11, + 83,0,41,34,78,122,21,99,97,110,39,116,32,111,112,101, + 110,32,90,105,112,32,102,105,108,101,58,32,114,12,0,0, + 0,114,86,0,0,0,250,21,99,97,110,39,116,32,114,101, + 97,100,32,90,105,112,32,102,105,108,101,58,32,233,4,0, + 0,0,114,0,0,0,0,122,16,110,111,116,32,97,32,90, + 105,112,32,102,105,108,101,58,32,122,18,99,111,114,114,117, + 112,116,32,90,105,112,32,102,105,108,101,58,32,233,12,0, + 0,0,233,16,0,0,0,233,20,0,0,0,122,28,98,97, + 100,32,99,101,110,116,114,97,108,32,100,105,114,101,99,116, + 111,114,121,32,115,105,122,101,58,32,122,30,98,97,100,32, + 99,101,110,116,114,97,108,32,100,105,114,101,99,116,111,114, + 121,32,111,102,102,115,101,116,58,32,122,38,98,97,100,32, + 99,101,110,116,114,97,108,32,100,105,114,101,99,116,111,114, + 121,32,115,105,122,101,32,111,114,32,111,102,102,115,101,116, + 58,32,233,46,0,0,0,250,27,69,79,70,32,114,101,97, + 100,32,119,104,101,114,101,32,110,111,116,32,101,120,112,101, + 99,116,101,100,115,4,0,0,0,80,75,1,2,233,8,0, + 0,0,233,10,0,0,0,233,14,0,0,0,233,24,0,0, + 0,233,28,0,0,0,233,30,0,0,0,233,32,0,0,0, + 233,34,0,0,0,233,42,0,0,0,122,25,98,97,100,32, + 108,111,99,97,108,32,104,101,97,100,101,114,32,111,102,102, + 115,101,116,58,32,105,0,8,0,0,218,5,97,115,99,105, + 105,90,6,108,97,116,105,110,49,250,1,47,114,5,0,0, + 0,122,33,122,105,112,105,109,112,111,114,116,58,32,102,111, + 117,110,100,32,123,125,32,110,97,109,101,115,32,105,110,32, + 123,33,114,125,41,26,218,3,95,105,111,218,9,111,112,101, + 110,95,99,111,100,101,114,22,0,0,0,114,3,0,0,0, + 218,4,115,101,101,107,218,20,69,78,68,95,67,69,78,84, + 82,65,76,95,68,73,82,95,83,73,90,69,90,4,116,101, + 108,108,218,4,114,101,97,100,114,51,0,0,0,218,18,83, + 84,82,73,78,71,95,69,78,68,95,65,82,67,72,73,86, + 69,218,3,109,97,120,218,15,77,65,88,95,67,79,77,77, + 69,78,84,95,76,69,78,218,5,114,102,105,110,100,114,2, + 0,0,0,218,8,69,79,70,69,114,114,111,114,114,1,0, + 0,0,114,62,0,0,0,218,18,85,110,105,99,111,100,101, + 68,101,99,111,100,101,69,114,114,111,114,218,9,116,114,97, + 110,115,108,97,116,101,218,11,99,112,52,51,55,95,116,97, + 98,108,101,114,19,0,0,0,114,20,0,0,0,114,21,0, + 0,0,114,30,0,0,0,114,76,0,0,0,114,77,0,0, + 0,41,26,114,29,0,0,0,218,2,102,112,90,15,104,101, + 97,100,101,114,95,112,111,115,105,116,105,111,110,218,6,98, + 117,102,102,101,114,218,9,102,105,108,101,95,115,105,122,101, + 90,17,109,97,120,95,99,111,109,109,101,110,116,95,115,116, + 97,114,116,218,4,100,97,116,97,90,3,112,111,115,218,11, + 104,101,97,100,101,114,95,115,105,122,101,90,13,104,101,97, + 100,101,114,95,111,102,102,115,101,116,90,10,97,114,99,95, + 111,102,102,115,101,116,114,33,0,0,0,218,5,99,111,117, + 110,116,218,5,102,108,97,103,115,218,8,99,111,109,112,114, + 101,115,115,218,4,116,105,109,101,218,4,100,97,116,101,218, + 3,99,114,99,218,9,100,97,116,97,95,115,105,122,101,218, + 9,110,97,109,101,95,115,105,122,101,218,10,101,120,116,114, + 97,95,115,105,122,101,90,12,99,111,109,109,101,110,116,95, + 115,105,122,101,218,11,102,105,108,101,95,111,102,102,115,101, + 116,114,59,0,0,0,114,13,0,0,0,218,1,116,114,9, + 0,0,0,114,9,0,0,0,114,10,0,0,0,114,27,0, + 0,0,96,1,0,0,115,212,0,0,0,0,1,2,1,14, + 1,14,1,24,2,8,1,2,1,14,1,8,1,14,1,14, + 1,24,1,12,1,18,1,18,3,2,1,12,1,12,1,14, + 1,10,1,2,255,12,2,8,1,2,255,2,1,2,255,4, + 2,2,1,10,1,12,1,16,1,10,1,2,255,12,2,10, + 1,10,1,10,1,2,255,6,2,16,1,14,1,10,1,2, + 255,6,2,16,2,16,1,16,1,10,1,18,1,10,1,18, + 1,8,1,8,1,10,1,18,2,4,2,4,1,2,1,14, + 1,16,1,24,2,10,1,14,1,8,2,18,1,4,1,14, + 1,8,1,16,1,16,1,16,1,16,1,16,1,16,1,16, + 1,16,1,16,1,16,1,16,1,12,1,10,1,18,1,8, + 2,2,1,14,1,16,1,24,1,14,1,18,4,2,1,28, + 1,22,1,16,1,24,2,10,2,10,3,2,1,14,1,16, + 1,22,2,12,1,12,1,20,1,8,1,44,1,14,1,114, + 27,0,0,0,117,190,1,0,0,0,1,2,3,4,5,6, + 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38, + 39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54, + 55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70, + 71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86, + 87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102, + 103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118, + 119,120,121,122,123,124,125,126,127,195,135,195,188,195,169,195, + 162,195,164,195,160,195,165,195,167,195,170,195,171,195,168,195, + 175,195,174,195,172,195,132,195,133,195,137,195,166,195,134,195, + 180,195,182,195,178,195,187,195,185,195,191,195,150,195,156,194, + 162,194,163,194,165,226,130,167,198,146,195,161,195,173,195,179, + 195,186,195,177,195,145,194,170,194,186,194,191,226,140,144,194, + 172,194,189,194,188,194,161,194,171,194,187,226,150,145,226,150, + 146,226,150,147,226,148,130,226,148,164,226,149,161,226,149,162, + 226,149,150,226,149,149,226,149,163,226,149,145,226,149,151,226, + 149,157,226,149,156,226,149,155,226,148,144,226,148,148,226,148, + 180,226,148,172,226,148,156,226,148,128,226,148,188,226,149,158, + 226,149,159,226,149,154,226,149,148,226,149,169,226,149,166,226, + 149,160,226,149,144,226,149,172,226,149,167,226,149,168,226,149, + 164,226,149,165,226,149,153,226,149,152,226,149,146,226,149,147, + 226,149,171,226,149,170,226,148,152,226,148,140,226,150,136,226, + 150,132,226,150,140,226,150,144,226,150,128,206,177,195,159,206, + 147,207,128,206,163,207,131,194,181,207,132,206,166,206,152,206, + 169,206,180,226,136,158,207,134,206,181,226,136,169,226,137,161, + 194,177,226,137,165,226,137,164,226,140,160,226,140,161,195,183, + 226,137,136,194,176,226,136,153,194,183,226,136,154,226,129,191, + 194,178,226,150,160,194,160,99,0,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,8,0,0,0,67,0,0,0, + 115,112,0,0,0,116,0,114,22,116,1,160,2,100,1,161, + 1,1,0,116,3,100,2,131,1,130,1,100,3,97,0,122, + 64,122,16,100,4,100,5,108,4,109,5,125,0,1,0,87, + 0,110,38,4,0,116,6,107,10,114,82,1,0,1,0,1, + 0,116,1,160,2,100,1,161,1,1,0,116,3,100,2,131, + 1,130,1,89,0,110,2,48,0,87,0,100,6,97,0,110, + 6,100,6,97,0,48,0,116,1,160,2,100,7,161,1,1, + 0,124,0,83,0,41,8,78,122,27,122,105,112,105,109,112, + 111,114,116,58,32,122,108,105,98,32,85,78,65,86,65,73, + 76,65,66,76,69,250,41,99,97,110,39,116,32,100,101,99, + 111,109,112,114,101,115,115,32,100,97,116,97,59,32,122,108, + 105,98,32,110,111,116,32,97,118,97,105,108,97,98,108,101, + 84,114,0,0,0,0,169,1,218,10,100,101,99,111,109,112, + 114,101,115,115,70,122,25,122,105,112,105,109,112,111,114,116, + 58,32,122,108,105,98,32,97,118,97,105,108,97,98,108,101, + 41,7,218,15,95,105,109,112,111,114,116,105,110,103,95,122, + 108,105,98,114,76,0,0,0,114,77,0,0,0,114,3,0, + 0,0,90,4,122,108,105,98,114,141,0,0,0,218,9,69, + 120,99,101,112,116,105,111,110,114,140,0,0,0,114,9,0, + 0,0,114,9,0,0,0,114,10,0,0,0,218,20,95,103, + 101,116,95,100,101,99,111,109,112,114,101,115,115,95,102,117, + 110,99,254,1,0,0,115,26,0,0,0,0,2,4,3,10, + 1,8,2,4,1,4,1,16,1,14,1,10,1,16,2,6, + 0,6,2,10,1,114,144,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,17,0,0,0,9,0,0,0,67, + 0,0,0,115,150,1,0,0,124,1,92,8,125,2,125,3, + 125,4,125,5,125,6,125,7,125,8,125,9,124,4,100,1, + 107,0,114,36,116,0,100,2,131,1,130,1,116,1,160,2, + 124,0,161,1,144,1,143,18,125,10,122,14,124,10,160,3, + 124,6,161,1,1,0,87,0,110,38,4,0,116,4,107,10, + 114,102,1,0,1,0,1,0,116,0,100,3,124,0,155,2, + 157,2,124,0,100,4,141,2,130,1,89,0,110,2,48,0, + 124,10,160,5,100,5,161,1,125,11,116,6,124,11,131,1, + 100,5,107,3,114,134,116,7,100,6,131,1,130,1,124,11, + 100,0,100,7,133,2,25,0,100,8,107,3,114,168,116,0, + 100,9,124,0,155,2,157,2,124,0,100,4,141,2,130,1, + 116,8,124,11,100,10,100,11,133,2,25,0,131,1,125,12, + 116,8,124,11,100,11,100,5,133,2,25,0,131,1,125,13, + 100,5,124,12,23,0,124,13,23,0,125,14,124,6,124,14, + 55,0,125,6,122,14,124,10,160,3,124,6,161,1,1,0, + 87,0,110,40,4,0,116,4,107,10,144,1,114,18,1,0, + 1,0,1,0,116,0,100,3,124,0,155,2,157,2,124,0, + 100,4,141,2,130,1,89,0,110,2,48,0,124,10,160,5, + 124,4,161,1,125,15,116,6,124,15,131,1,124,4,107,3, + 144,1,114,52,116,4,100,12,131,1,130,1,87,0,100,0, + 4,0,4,0,131,3,1,0,110,18,49,0,144,1,115,74, + 48,0,1,0,1,0,1,0,89,0,1,0,124,3,100,1, + 107,2,144,1,114,98,124,15,83,0,122,10,116,9,131,0, + 125,16,87,0,110,30,4,0,116,10,107,10,144,1,114,138, + 1,0,1,0,1,0,116,0,100,13,131,1,130,1,89,0, + 110,2,48,0,124,16,124,15,100,14,131,2,83,0,41,15, + 78,114,0,0,0,0,122,18,110,101,103,97,116,105,118,101, + 32,100,97,116,97,32,115,105,122,101,114,92,0,0,0,114, + 12,0,0,0,114,104,0,0,0,114,98,0,0,0,114,93, + 0,0,0,115,4,0,0,0,80,75,3,4,122,23,98,97, + 100,32,108,111,99,97,108,32,102,105,108,101,32,104,101,97, + 100,101,114,58,32,233,26,0,0,0,114,103,0,0,0,122, + 26,122,105,112,105,109,112,111,114,116,58,32,99,97,110,39, + 116,32,114,101,97,100,32,100,97,116,97,114,139,0,0,0, + 105,241,255,255,255,41,11,114,3,0,0,0,114,110,0,0, + 0,114,111,0,0,0,114,112,0,0,0,114,22,0,0,0, + 114,114,0,0,0,114,51,0,0,0,114,119,0,0,0,114, + 1,0,0,0,114,144,0,0,0,114,143,0,0,0,41,17, + 114,29,0,0,0,114,54,0,0,0,90,8,100,97,116,97, + 112,97,116,104,114,130,0,0,0,114,134,0,0,0,114,125, + 0,0,0,114,137,0,0,0,114,131,0,0,0,114,132,0, + 0,0,114,133,0,0,0,114,123,0,0,0,114,124,0,0, + 0,114,135,0,0,0,114,136,0,0,0,114,127,0,0,0, + 90,8,114,97,119,95,100,97,116,97,114,141,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,52, + 0,0,0,19,2,0,0,115,62,0,0,0,0,1,20,1, + 8,1,8,2,14,2,2,1,14,1,14,1,24,1,10,1, + 12,1,8,2,16,2,18,2,16,1,16,1,12,1,8,1, + 2,1,14,1,16,1,24,1,10,1,14,1,40,2,10,2, + 4,3,2,1,10,1,16,1,14,1,114,52,0,0,0,99, 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 11,0,0,0,67,0,0,0,115,68,0,0,0,116,0,160, - 1,124,0,100,1,63,0,100,2,23,0,124,0,100,3,63, - 0,100,4,64,0,124,0,100,5,64,0,124,1,100,6,63, - 0,124,1,100,3,63,0,100,7,64,0,124,1,100,5,64, - 0,100,8,20,0,100,9,100,9,100,9,102,9,161,1,83, - 0,41,10,78,233,9,0,0,0,105,188,7,0,0,233,5, - 0,0,0,233,15,0,0,0,233,31,0,0,0,233,11,0, - 0,0,233,63,0,0,0,114,86,0,0,0,114,14,0,0, - 0,41,2,114,131,0,0,0,90,6,109,107,116,105,109,101, - 41,2,218,1,100,114,138,0,0,0,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,218,14,95,112,97,114,115, - 101,95,100,111,115,116,105,109,101,139,2,0,0,115,22,0, - 0,0,0,1,4,1,10,1,10,1,6,1,6,1,10,1, - 10,1,2,0,2,0,2,249,114,169,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,6,0,0,0,10,0, - 0,0,67,0,0,0,115,116,0,0,0,122,82,124,1,100, - 1,100,0,133,2,25,0,100,2,107,6,115,22,74,0,130, - 1,124,1,100,0,100,1,133,2,25,0,125,1,124,0,106, - 0,124,1,25,0,125,2,124,2,100,3,25,0,125,3,124, - 2,100,4,25,0,125,4,124,2,100,5,25,0,125,5,116, - 1,124,4,124,3,131,2,124,5,102,2,87,0,83,0,4, - 0,116,2,116,3,116,4,102,3,107,10,114,110,1,0,1, - 0,1,0,89,0,100,6,83,0,88,0,100,0,83,0,41, - 7,78,114,14,0,0,0,169,2,218,1,99,218,1,111,114, - 163,0,0,0,233,6,0,0,0,233,3,0,0,0,41,2, - 114,0,0,0,0,114,0,0,0,0,41,5,114,28,0,0, - 0,114,169,0,0,0,114,26,0,0,0,218,10,73,110,100, - 101,120,69,114,114,111,114,114,154,0,0,0,41,6,114,32, - 0,0,0,114,13,0,0,0,114,54,0,0,0,114,131,0, - 0,0,114,132,0,0,0,90,17,117,110,99,111,109,112,114, - 101,115,115,101,100,95,115,105,122,101,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,114,151,0,0,0,152,2, - 0,0,115,20,0,0,0,0,1,2,2,20,1,12,1,10, - 3,8,1,8,1,8,1,16,1,20,1,114,151,0,0,0, - 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,8,0,0,0,67,0,0,0,115,86,0,0,0,124,1, - 100,1,100,0,133,2,25,0,100,2,107,6,115,20,74,0, - 130,1,124,1,100,0,100,1,133,2,25,0,125,1,122,14, - 124,0,106,0,124,1,25,0,125,2,87,0,110,22,4,0, - 116,1,107,10,114,68,1,0,1,0,1,0,89,0,100,0, - 83,0,88,0,116,2,124,0,106,3,124,2,131,2,83,0, - 100,0,83,0,41,3,78,114,14,0,0,0,114,170,0,0, - 0,41,4,114,28,0,0,0,114,26,0,0,0,114,52,0, - 0,0,114,29,0,0,0,41,3,114,32,0,0,0,114,13, - 0,0,0,114,54,0,0,0,114,9,0,0,0,114,9,0, - 0,0,114,10,0,0,0,114,149,0,0,0,171,2,0,0, - 115,14,0,0,0,0,2,20,1,12,2,2,1,14,1,14, - 1,8,2,114,149,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,11,0,0,0,9,0,0,0,67,0,0, - 0,115,198,0,0,0,116,0,124,0,124,1,131,2,125,2, - 116,1,68,0,93,160,92,3,125,3,125,4,125,5,124,2, - 124,3,23,0,125,6,116,2,106,3,100,1,124,0,106,4, - 116,5,124,6,100,2,100,3,141,5,1,0,122,14,124,0, - 106,6,124,6,25,0,125,7,87,0,110,20,4,0,116,7, - 107,10,114,88,1,0,1,0,1,0,89,0,113,14,88,0, - 124,7,100,4,25,0,125,8,116,8,124,0,106,4,124,7, - 131,2,125,9,124,4,114,132,116,9,124,0,124,8,124,6, - 124,1,124,9,131,5,125,10,110,10,116,10,124,8,124,9, - 131,2,125,10,124,10,100,0,107,8,114,152,113,14,124,7, - 100,4,25,0,125,8,124,10,124,5,124,8,102,3,2,0, - 1,0,83,0,113,14,116,11,100,5,124,1,155,2,157,2, - 124,1,100,6,141,2,130,1,100,0,83,0,41,7,78,122, - 13,116,114,121,105,110,103,32,123,125,123,125,123,125,114,86, - 0,0,0,41,1,90,9,118,101,114,98,111,115,105,116,121, - 114,0,0,0,0,114,57,0,0,0,114,58,0,0,0,41, - 12,114,36,0,0,0,114,89,0,0,0,114,76,0,0,0, - 114,77,0,0,0,114,29,0,0,0,114,20,0,0,0,114, - 28,0,0,0,114,26,0,0,0,114,52,0,0,0,114,155, - 0,0,0,114,161,0,0,0,114,3,0,0,0,41,11,114, - 32,0,0,0,114,38,0,0,0,114,13,0,0,0,114,90, - 0,0,0,114,91,0,0,0,114,47,0,0,0,114,63,0, - 0,0,114,54,0,0,0,114,40,0,0,0,114,126,0,0, - 0,114,46,0,0,0,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,114,44,0,0,0,186,2,0,0,115,36, - 0,0,0,0,1,10,1,14,1,8,1,22,1,2,1,14, - 1,14,1,6,2,8,1,12,1,4,1,18,2,10,1,8, - 3,2,1,8,1,16,2,114,44,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,64,0,0,0,115,60,0,0,0,101,0,90,1,100,0, - 90,2,100,1,90,3,100,2,90,4,100,3,100,4,132,0, - 90,5,100,5,100,6,132,0,90,6,100,7,100,8,132,0, - 90,7,100,9,100,10,132,0,90,8,100,11,100,12,132,0, - 90,9,100,13,83,0,41,14,114,80,0,0,0,122,165,80, - 114,105,118,97,116,101,32,99,108,97,115,115,32,117,115,101, - 100,32,116,111,32,115,117,112,112,111,114,116,32,90,105,112, - 73,109,112,111,114,116,46,103,101,116,95,114,101,115,111,117, - 114,99,101,95,114,101,97,100,101,114,40,41,46,10,10,32, - 32,32,32,84,104,105,115,32,99,108,97,115,115,32,105,115, - 32,97,108,108,111,119,101,100,32,116,111,32,114,101,102,101, - 114,101,110,99,101,32,97,108,108,32,116,104,101,32,105,110, - 110,97,114,100,115,32,97,110,100,32,112,114,105,118,97,116, - 101,32,112,97,114,116,115,32,111,102,10,32,32,32,32,116, - 104,101,32,122,105,112,105,109,112,111,114,116,101,114,46,10, - 32,32,32,32,70,99,3,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,16, - 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,100, - 0,83,0,114,88,0,0,0,41,2,114,4,0,0,0,114, - 38,0,0,0,41,3,114,32,0,0,0,114,4,0,0,0, - 114,38,0,0,0,114,9,0,0,0,114,9,0,0,0,114, - 10,0,0,0,114,34,0,0,0,220,2,0,0,115,4,0, - 0,0,0,1,6,1,122,33,95,90,105,112,73,109,112,111, - 114,116,82,101,115,111,117,114,99,101,82,101,97,100,101,114, - 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0, - 0,0,0,0,0,0,5,0,0,0,8,0,0,0,67,0, - 0,0,115,92,0,0,0,124,0,106,0,160,1,100,1,100, - 2,161,2,125,2,124,2,155,0,100,2,124,1,155,0,157, - 3,125,3,100,3,100,4,108,2,109,3,125,4,1,0,122, - 18,124,4,124,0,106,4,160,5,124,3,161,1,131,1,87, - 0,83,0,4,0,116,6,107,10,114,86,1,0,1,0,1, - 0,116,7,124,3,131,1,130,1,89,0,110,2,88,0,100, - 0,83,0,41,5,78,114,85,0,0,0,114,109,0,0,0, - 114,0,0,0,0,41,1,218,7,66,121,116,101,115,73,79, - 41,8,114,38,0,0,0,114,19,0,0,0,90,2,105,111, - 114,176,0,0,0,114,4,0,0,0,114,55,0,0,0,114, - 22,0,0,0,218,17,70,105,108,101,78,111,116,70,111,117, - 110,100,69,114,114,111,114,41,5,114,32,0,0,0,218,8, - 114,101,115,111,117,114,99,101,218,16,102,117,108,108,110,97, - 109,101,95,97,115,95,112,97,116,104,114,13,0,0,0,114, - 176,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10, - 0,0,0,218,13,111,112,101,110,95,114,101,115,111,117,114, - 99,101,224,2,0,0,115,14,0,0,0,0,1,14,1,14, - 1,12,1,2,1,18,1,14,1,122,38,95,90,105,112,73, - 109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,97, - 100,101,114,46,111,112,101,110,95,114,101,115,111,117,114,99, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, - 0,0,1,0,0,0,67,0,0,0,115,8,0,0,0,116, - 0,130,1,100,0,83,0,114,88,0,0,0,41,1,114,177, - 0,0,0,41,2,114,32,0,0,0,114,178,0,0,0,114, - 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,13, - 114,101,115,111,117,114,99,101,95,112,97,116,104,233,2,0, - 0,115,2,0,0,0,0,4,122,38,95,90,105,112,73,109, + 3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,124, + 0,124,1,24,0,131,1,100,1,107,1,83,0,41,2,78, + 114,5,0,0,0,41,1,218,3,97,98,115,41,2,90,2, + 116,49,90,2,116,50,114,9,0,0,0,114,9,0,0,0, + 114,10,0,0,0,218,9,95,101,113,95,109,116,105,109,101, + 65,2,0,0,115,2,0,0,0,0,2,114,147,0,0,0, + 99,5,0,0,0,0,0,0,0,0,0,0,0,14,0,0, + 0,8,0,0,0,67,0,0,0,115,60,1,0,0,124,3, + 124,2,100,1,156,2,125,5,122,18,116,0,160,1,124,4, + 124,3,124,5,161,3,125,6,87,0,110,22,4,0,116,2, + 107,10,114,50,1,0,1,0,1,0,89,0,100,0,83,0, + 48,0,124,6,100,2,64,0,100,3,107,3,125,7,124,7, + 114,182,124,6,100,4,64,0,100,3,107,3,125,8,116,3, + 106,4,100,5,107,3,114,180,124,8,115,104,116,3,106,4, + 100,6,107,2,114,180,116,5,124,0,124,2,131,2,125,9, + 124,9,100,0,107,9,114,180,116,3,160,6,116,0,106,7, + 124,9,161,2,125,10,122,20,116,8,160,9,124,4,124,10, + 124,3,124,5,161,4,1,0,87,0,110,22,4,0,116,2, + 107,10,114,178,1,0,1,0,1,0,89,0,100,0,83,0, + 48,0,110,84,116,10,124,0,124,2,131,2,92,2,125,11, + 125,12,124,11,144,1,114,10,116,11,116,12,124,4,100,7, + 100,8,133,2,25,0,131,1,124,11,131,2,114,246,116,12, + 124,4,100,8,100,9,133,2,25,0,131,1,124,12,107,3, + 144,1,114,10,116,13,160,14,100,10,124,3,155,2,157,2, + 161,1,1,0,100,0,83,0,116,15,160,16,124,4,100,9, + 100,0,133,2,25,0,161,1,125,13,116,17,124,13,116,18, + 131,2,144,1,115,56,116,19,100,11,124,1,155,2,100,12, + 157,3,131,1,130,1,124,13,83,0,41,13,78,41,2,114, + 59,0,0,0,114,13,0,0,0,114,5,0,0,0,114,0, + 0,0,0,114,86,0,0,0,90,5,110,101,118,101,114,90, + 6,97,108,119,97,121,115,114,99,0,0,0,114,94,0,0, + 0,114,95,0,0,0,122,22,98,121,116,101,99,111,100,101, + 32,105,115,32,115,116,97,108,101,32,102,111,114,32,122,16, + 99,111,109,112,105,108,101,100,32,109,111,100,117,108,101,32, + 122,21,32,105,115,32,110,111,116,32,97,32,99,111,100,101, + 32,111,98,106,101,99,116,41,20,114,21,0,0,0,90,13, + 95,99,108,97,115,115,105,102,121,95,112,121,99,114,75,0, + 0,0,218,4,95,105,109,112,90,21,99,104,101,99,107,95, + 104,97,115,104,95,98,97,115,101,100,95,112,121,99,115,218, + 15,95,103,101,116,95,112,121,99,95,115,111,117,114,99,101, + 218,11,115,111,117,114,99,101,95,104,97,115,104,90,17,95, + 82,65,87,95,77,65,71,73,67,95,78,85,77,66,69,82, + 90,18,95,98,111,111,115,116,114,97,112,95,101,120,116,101, + 114,110,97,108,90,18,95,118,97,108,105,100,97,116,101,95, + 104,97,115,104,95,112,121,99,218,29,95,103,101,116,95,109, + 116,105,109,101,95,97,110,100,95,115,105,122,101,95,111,102, + 95,115,111,117,114,99,101,114,147,0,0,0,114,2,0,0, + 0,114,76,0,0,0,114,77,0,0,0,218,7,109,97,114, + 115,104,97,108,90,5,108,111,97,100,115,114,15,0,0,0, + 218,10,95,99,111,100,101,95,116,121,112,101,218,9,84,121, + 112,101,69,114,114,111,114,41,14,114,32,0,0,0,114,53, + 0,0,0,114,63,0,0,0,114,38,0,0,0,114,126,0, + 0,0,90,11,101,120,99,95,100,101,116,97,105,108,115,114, + 129,0,0,0,90,10,104,97,115,104,95,98,97,115,101,100, + 90,12,99,104,101,99,107,95,115,111,117,114,99,101,90,12, + 115,111,117,114,99,101,95,98,121,116,101,115,114,150,0,0, + 0,90,12,115,111,117,114,99,101,95,109,116,105,109,101,90, + 11,115,111,117,114,99,101,95,115,105,122,101,114,46,0,0, + 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 218,15,95,117,110,109,97,114,115,104,97,108,95,99,111,100, + 101,75,2,0,0,115,88,0,0,0,0,2,2,1,2,254, + 6,5,2,1,18,1,14,1,8,2,12,1,4,1,12,1, + 10,1,2,255,2,1,8,255,2,2,10,1,8,1,4,1, + 4,1,2,254,4,5,2,1,4,1,2,0,2,0,2,0, + 2,255,8,2,14,1,10,3,8,255,6,3,6,3,22,1, + 18,255,4,2,4,1,8,255,4,2,4,2,18,1,12,1, + 16,1,114,155,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,0, + 115,28,0,0,0,124,0,160,0,100,1,100,2,161,2,125, + 0,124,0,160,0,100,3,100,2,161,2,125,0,124,0,83, + 0,41,4,78,115,2,0,0,0,13,10,243,1,0,0,0, + 10,243,1,0,0,0,13,41,1,114,19,0,0,0,41,1, + 218,6,115,111,117,114,99,101,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,23,95,110,111,114,109,97,108, + 105,122,101,95,108,105,110,101,95,101,110,100,105,110,103,115, + 126,2,0,0,115,6,0,0,0,0,1,12,1,12,1,114, + 159,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,6,0,0,0,67,0,0,0,115,24,0, + 0,0,116,0,124,1,131,1,125,1,116,1,124,1,124,0, + 100,1,100,2,100,3,141,4,83,0,41,4,78,114,74,0, + 0,0,84,41,1,90,12,100,111,110,116,95,105,110,104,101, + 114,105,116,41,2,114,159,0,0,0,218,7,99,111,109,112, + 105,108,101,41,2,114,53,0,0,0,114,158,0,0,0,114, + 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,15, + 95,99,111,109,112,105,108,101,95,115,111,117,114,99,101,133, + 2,0,0,115,4,0,0,0,0,1,8,1,114,161,0,0, + 0,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,11,0,0,0,67,0,0,0,115,68,0,0,0,116, + 0,160,1,124,0,100,1,63,0,100,2,23,0,124,0,100, + 3,63,0,100,4,64,0,124,0,100,5,64,0,124,1,100, + 6,63,0,124,1,100,3,63,0,100,7,64,0,124,1,100, + 5,64,0,100,8,20,0,100,9,100,9,100,9,102,9,161, + 1,83,0,41,10,78,233,9,0,0,0,105,188,7,0,0, + 233,5,0,0,0,233,15,0,0,0,233,31,0,0,0,233, + 11,0,0,0,233,63,0,0,0,114,86,0,0,0,114,14, + 0,0,0,41,2,114,131,0,0,0,90,6,109,107,116,105, + 109,101,41,2,218,1,100,114,138,0,0,0,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,218,14,95,112,97, + 114,115,101,95,100,111,115,116,105,109,101,139,2,0,0,115, + 22,0,0,0,0,1,4,1,10,1,10,1,6,1,6,1, + 10,1,10,1,2,0,2,0,2,249,114,169,0,0,0,99, + 2,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, + 10,0,0,0,67,0,0,0,115,116,0,0,0,122,82,124, + 1,100,1,100,0,133,2,25,0,100,2,107,6,115,22,74, + 0,130,1,124,1,100,0,100,1,133,2,25,0,125,1,124, + 0,106,0,124,1,25,0,125,2,124,2,100,3,25,0,125, + 3,124,2,100,4,25,0,125,4,124,2,100,5,25,0,125, + 5,116,1,124,4,124,3,131,2,124,5,102,2,87,0,83, + 0,4,0,116,2,116,3,116,4,102,3,107,10,114,110,1, + 0,1,0,1,0,89,0,100,6,83,0,48,0,100,0,83, + 0,41,7,78,114,14,0,0,0,169,2,218,1,99,218,1, + 111,114,163,0,0,0,233,6,0,0,0,233,3,0,0,0, + 41,2,114,0,0,0,0,114,0,0,0,0,41,5,114,28, + 0,0,0,114,169,0,0,0,114,26,0,0,0,218,10,73, + 110,100,101,120,69,114,114,111,114,114,154,0,0,0,41,6, + 114,32,0,0,0,114,13,0,0,0,114,54,0,0,0,114, + 131,0,0,0,114,132,0,0,0,90,17,117,110,99,111,109, + 112,114,101,115,115,101,100,95,115,105,122,101,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,114,151,0,0,0, + 152,2,0,0,115,20,0,0,0,0,1,2,2,20,1,12, + 1,10,3,8,1,8,1,8,1,16,1,20,1,114,151,0, + 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,8,0,0,0,67,0,0,0,115,86,0,0,0, + 124,1,100,1,100,0,133,2,25,0,100,2,107,6,115,20, + 74,0,130,1,124,1,100,0,100,1,133,2,25,0,125,1, + 122,14,124,0,106,0,124,1,25,0,125,2,87,0,110,22, + 4,0,116,1,107,10,114,68,1,0,1,0,1,0,89,0, + 100,0,83,0,48,0,116,2,124,0,106,3,124,2,131,2, + 83,0,100,0,83,0,41,3,78,114,14,0,0,0,114,170, + 0,0,0,41,4,114,28,0,0,0,114,26,0,0,0,114, + 52,0,0,0,114,29,0,0,0,41,3,114,32,0,0,0, + 114,13,0,0,0,114,54,0,0,0,114,9,0,0,0,114, + 9,0,0,0,114,10,0,0,0,114,149,0,0,0,171,2, + 0,0,115,14,0,0,0,0,2,20,1,12,2,2,1,14, + 1,14,1,8,2,114,149,0,0,0,99,2,0,0,0,0, + 0,0,0,0,0,0,0,11,0,0,0,9,0,0,0,67, + 0,0,0,115,198,0,0,0,116,0,124,0,124,1,131,2, + 125,2,116,1,68,0,93,160,92,3,125,3,125,4,125,5, + 124,2,124,3,23,0,125,6,116,2,106,3,100,1,124,0, + 106,4,116,5,124,6,100,2,100,3,141,5,1,0,122,14, + 124,0,106,6,124,6,25,0,125,7,87,0,110,20,4,0, + 116,7,107,10,114,88,1,0,1,0,1,0,89,0,113,14, + 48,0,124,7,100,4,25,0,125,8,116,8,124,0,106,4, + 124,7,131,2,125,9,124,4,114,132,116,9,124,0,124,8, + 124,6,124,1,124,9,131,5,125,10,110,10,116,10,124,8, + 124,9,131,2,125,10,124,10,100,0,107,8,114,152,113,14, + 124,7,100,4,25,0,125,8,124,10,124,5,124,8,102,3, + 2,0,1,0,83,0,113,14,116,11,100,5,124,1,155,2, + 157,2,124,1,100,6,141,2,130,1,100,0,83,0,41,7, + 78,122,13,116,114,121,105,110,103,32,123,125,123,125,123,125, + 114,86,0,0,0,41,1,90,9,118,101,114,98,111,115,105, + 116,121,114,0,0,0,0,114,57,0,0,0,114,58,0,0, + 0,41,12,114,36,0,0,0,114,89,0,0,0,114,76,0, + 0,0,114,77,0,0,0,114,29,0,0,0,114,20,0,0, + 0,114,28,0,0,0,114,26,0,0,0,114,52,0,0,0, + 114,155,0,0,0,114,161,0,0,0,114,3,0,0,0,41, + 11,114,32,0,0,0,114,38,0,0,0,114,13,0,0,0, + 114,90,0,0,0,114,91,0,0,0,114,47,0,0,0,114, + 63,0,0,0,114,54,0,0,0,114,40,0,0,0,114,126, + 0,0,0,114,46,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,114,44,0,0,0,186,2,0,0, + 115,36,0,0,0,0,1,10,1,14,1,8,1,22,1,2, + 1,14,1,14,1,6,2,8,1,12,1,4,1,18,2,10, + 1,8,3,2,1,8,1,16,2,114,44,0,0,0,99,0, + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, + 0,0,0,64,0,0,0,115,60,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,90,4,100,3,100,4, + 132,0,90,5,100,5,100,6,132,0,90,6,100,7,100,8, + 132,0,90,7,100,9,100,10,132,0,90,8,100,11,100,12, + 132,0,90,9,100,13,83,0,41,14,114,80,0,0,0,122, + 165,80,114,105,118,97,116,101,32,99,108,97,115,115,32,117, + 115,101,100,32,116,111,32,115,117,112,112,111,114,116,32,90, + 105,112,73,109,112,111,114,116,46,103,101,116,95,114,101,115, + 111,117,114,99,101,95,114,101,97,100,101,114,40,41,46,10, + 10,32,32,32,32,84,104,105,115,32,99,108,97,115,115,32, + 105,115,32,97,108,108,111,119,101,100,32,116,111,32,114,101, + 102,101,114,101,110,99,101,32,97,108,108,32,116,104,101,32, + 105,110,110,97,114,100,115,32,97,110,100,32,112,114,105,118, + 97,116,101,32,112,97,114,116,115,32,111,102,10,32,32,32, + 32,116,104,101,32,122,105,112,105,109,112,111,114,116,101,114, + 46,10,32,32,32,32,70,99,3,0,0,0,0,0,0,0, + 0,0,0,0,3,0,0,0,2,0,0,0,67,0,0,0, + 115,16,0,0,0,124,1,124,0,95,0,124,2,124,0,95, + 1,100,0,83,0,114,88,0,0,0,41,2,114,4,0,0, + 0,114,38,0,0,0,41,3,114,32,0,0,0,114,4,0, + 0,0,114,38,0,0,0,114,9,0,0,0,114,9,0,0, + 0,114,10,0,0,0,114,34,0,0,0,220,2,0,0,115, + 4,0,0,0,0,1,6,1,122,33,95,90,105,112,73,109, 112,111,114,116,82,101,115,111,117,114,99,101,82,101,97,100, - 101,114,46,114,101,115,111,117,114,99,101,95,112,97,116,104, - 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,8,0,0,0,67,0,0,0,115,72,0,0,0,124,0, - 106,0,160,1,100,1,100,2,161,2,125,2,124,2,155,0, - 100,2,124,1,155,0,157,3,125,3,122,16,124,0,106,2, - 160,3,124,3,161,1,1,0,87,0,110,22,4,0,116,4, - 107,10,114,66,1,0,1,0,1,0,89,0,100,3,83,0, - 88,0,100,4,83,0,41,5,78,114,85,0,0,0,114,109, - 0,0,0,70,84,41,5,114,38,0,0,0,114,19,0,0, - 0,114,4,0,0,0,114,55,0,0,0,114,22,0,0,0, - 41,4,114,32,0,0,0,114,59,0,0,0,114,179,0,0, - 0,114,13,0,0,0,114,9,0,0,0,114,9,0,0,0, - 114,10,0,0,0,218,11,105,115,95,114,101,115,111,117,114, - 99,101,239,2,0,0,115,14,0,0,0,0,3,14,1,14, - 1,2,1,16,1,14,1,8,1,122,36,95,90,105,112,73, - 109,112,111,114,116,82,101,115,111,117,114,99,101,82,101,97, - 100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,99, - 1,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, - 9,0,0,0,99,0,0,0,115,186,0,0,0,100,1,100, - 2,108,0,109,1,125,1,1,0,124,1,124,0,106,2,160, - 3,124,0,106,4,161,1,131,1,125,2,124,2,160,5,124, - 0,106,2,106,6,161,1,125,3,124,3,106,7,100,3,107, - 2,115,58,74,0,130,1,124,3,106,8,125,4,116,9,131, - 0,125,5,124,0,106,2,106,10,68,0,93,102,125,6,122, - 18,124,1,124,6,131,1,160,5,124,4,161,1,125,7,87, - 0,110,24,4,0,116,11,107,10,114,124,1,0,1,0,1, - 0,89,0,113,78,89,0,110,2,88,0,124,7,106,8,106, - 7,125,8,116,12,124,8,131,1,100,1,107,2,114,156,124, - 7,106,7,86,0,1,0,113,78,124,8,124,5,107,7,114, - 78,124,5,160,13,124,8,161,1,1,0,124,8,86,0,1, - 0,113,78,100,0,83,0,41,4,78,114,0,0,0,0,41, - 1,218,4,80,97,116,104,114,60,0,0,0,41,14,90,7, - 112,97,116,104,108,105,98,114,183,0,0,0,114,4,0,0, - 0,114,56,0,0,0,114,38,0,0,0,90,11,114,101,108, - 97,116,105,118,101,95,116,111,114,29,0,0,0,114,59,0, - 0,0,90,6,112,97,114,101,110,116,218,3,115,101,116,114, - 28,0,0,0,114,23,0,0,0,114,51,0,0,0,218,3, - 97,100,100,41,9,114,32,0,0,0,114,183,0,0,0,90, - 13,102,117,108,108,110,97,109,101,95,112,97,116,104,90,13, - 114,101,108,97,116,105,118,101,95,112,97,116,104,90,12,112, - 97,99,107,97,103,101,95,112,97,116,104,90,12,115,117,98, - 100,105,114,115,95,115,101,101,110,218,8,102,105,108,101,110, - 97,109,101,90,8,114,101,108,97,116,105,118,101,90,11,112, - 97,114,101,110,116,95,110,97,109,101,114,9,0,0,0,114, - 9,0,0,0,114,10,0,0,0,218,8,99,111,110,116,101, - 110,116,115,250,2,0,0,115,34,0,0,0,0,8,12,1, - 18,1,14,3,14,1,6,1,6,1,12,1,2,1,18,1, - 14,1,10,5,8,1,12,1,10,1,8,1,10,1,122,33, - 95,90,105,112,73,109,112,111,114,116,82,101,115,111,117,114, - 99,101,82,101,97,100,101,114,46,99,111,110,116,101,110,116, - 115,78,41,10,114,6,0,0,0,114,7,0,0,0,114,8, - 0,0,0,114,84,0,0,0,114,81,0,0,0,114,34,0, - 0,0,114,180,0,0,0,114,181,0,0,0,114,182,0,0, - 0,114,187,0,0,0,114,9,0,0,0,114,9,0,0,0, - 114,9,0,0,0,114,10,0,0,0,114,80,0,0,0,212, - 2,0,0,115,14,0,0,0,8,1,4,5,4,2,8,4, - 8,9,8,6,8,11,114,80,0,0,0,41,45,114,84,0, - 0,0,90,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,21, - 0,0,0,114,1,0,0,0,114,2,0,0,0,90,17,95, - 102,114,111,122,101,110,95,105,109,112,111,114,116,108,105,98, - 114,76,0,0,0,114,148,0,0,0,114,110,0,0,0,114, - 152,0,0,0,114,67,0,0,0,114,131,0,0,0,90,7, - 95,95,97,108,108,95,95,114,20,0,0,0,90,15,112,97, - 116,104,95,115,101,112,97,114,97,116,111,114,115,114,18,0, - 0,0,114,75,0,0,0,114,3,0,0,0,114,25,0,0, - 0,218,4,116,121,112,101,114,70,0,0,0,114,113,0,0, - 0,114,115,0,0,0,114,117,0,0,0,114,4,0,0,0, - 114,89,0,0,0,114,36,0,0,0,114,37,0,0,0,114, - 35,0,0,0,114,27,0,0,0,114,122,0,0,0,114,142, - 0,0,0,114,144,0,0,0,114,52,0,0,0,114,147,0, - 0,0,114,155,0,0,0,218,8,95,95,99,111,100,101,95, - 95,114,153,0,0,0,114,159,0,0,0,114,161,0,0,0, - 114,169,0,0,0,114,151,0,0,0,114,149,0,0,0,114, - 44,0,0,0,114,80,0,0,0,114,9,0,0,0,114,9, - 0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,60, - 109,111,100,117,108,101,62,1,0,0,0,115,88,0,0,0, - 4,16,8,1,16,1,8,1,8,1,8,1,8,1,8,1, - 8,2,8,3,6,1,14,3,16,4,4,2,8,2,4,1, - 4,1,4,2,14,127,0,127,0,1,12,1,12,1,2,1, - 2,252,4,9,8,4,8,9,8,31,8,126,2,254,2,29, - 4,5,8,21,8,46,8,10,8,46,10,5,8,7,8,6, - 8,13,8,19,8,15,8,26, + 101,114,46,95,95,105,110,105,116,95,95,99,2,0,0,0, + 0,0,0,0,0,0,0,0,5,0,0,0,8,0,0,0, + 67,0,0,0,115,92,0,0,0,124,0,106,0,160,1,100, + 1,100,2,161,2,125,2,124,2,155,0,100,2,124,1,155, + 0,157,3,125,3,100,3,100,4,108,2,109,3,125,4,1, + 0,122,18,124,4,124,0,106,4,160,5,124,3,161,1,131, + 1,87,0,83,0,4,0,116,6,107,10,114,86,1,0,1, + 0,1,0,116,7,124,3,131,1,130,1,89,0,110,2,48, + 0,100,0,83,0,41,5,78,114,85,0,0,0,114,109,0, + 0,0,114,0,0,0,0,41,1,218,7,66,121,116,101,115, + 73,79,41,8,114,38,0,0,0,114,19,0,0,0,90,2, + 105,111,114,176,0,0,0,114,4,0,0,0,114,55,0,0, + 0,114,22,0,0,0,218,17,70,105,108,101,78,111,116,70, + 111,117,110,100,69,114,114,111,114,41,5,114,32,0,0,0, + 218,8,114,101,115,111,117,114,99,101,218,16,102,117,108,108, + 110,97,109,101,95,97,115,95,112,97,116,104,114,13,0,0, + 0,114,176,0,0,0,114,9,0,0,0,114,9,0,0,0, + 114,10,0,0,0,218,13,111,112,101,110,95,114,101,115,111, + 117,114,99,101,224,2,0,0,115,14,0,0,0,0,1,14, + 1,14,1,12,1,2,1,18,1,14,1,122,38,95,90,105, + 112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,82, + 101,97,100,101,114,46,111,112,101,110,95,114,101,115,111,117, + 114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,8,0,0, + 0,116,0,130,1,100,0,83,0,114,88,0,0,0,41,1, + 114,177,0,0,0,41,2,114,32,0,0,0,114,178,0,0, + 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, + 218,13,114,101,115,111,117,114,99,101,95,112,97,116,104,233, + 2,0,0,115,2,0,0,0,0,4,122,38,95,90,105,112, + 73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,101, + 97,100,101,114,46,114,101,115,111,117,114,99,101,95,112,97, + 116,104,99,2,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,8,0,0,0,67,0,0,0,115,72,0,0,0, + 124,0,106,0,160,1,100,1,100,2,161,2,125,2,124,2, + 155,0,100,2,124,1,155,0,157,3,125,3,122,16,124,0, + 106,2,160,3,124,3,161,1,1,0,87,0,110,22,4,0, + 116,4,107,10,114,66,1,0,1,0,1,0,89,0,100,3, + 83,0,48,0,100,4,83,0,41,5,78,114,85,0,0,0, + 114,109,0,0,0,70,84,41,5,114,38,0,0,0,114,19, + 0,0,0,114,4,0,0,0,114,55,0,0,0,114,22,0, + 0,0,41,4,114,32,0,0,0,114,59,0,0,0,114,179, + 0,0,0,114,13,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,10,0,0,0,218,11,105,115,95,114,101,115,111, + 117,114,99,101,239,2,0,0,115,14,0,0,0,0,3,14, + 1,14,1,2,1,16,1,14,1,8,1,122,36,95,90,105, + 112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,82, + 101,97,100,101,114,46,105,115,95,114,101,115,111,117,114,99, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,9,0, + 0,0,9,0,0,0,99,0,0,0,115,186,0,0,0,100, + 1,100,2,108,0,109,1,125,1,1,0,124,1,124,0,106, + 2,160,3,124,0,106,4,161,1,131,1,125,2,124,2,160, + 5,124,0,106,2,106,6,161,1,125,3,124,3,106,7,100, + 3,107,2,115,58,74,0,130,1,124,3,106,8,125,4,116, + 9,131,0,125,5,124,0,106,2,106,10,68,0,93,102,125, + 6,122,18,124,1,124,6,131,1,160,5,124,4,161,1,125, + 7,87,0,110,24,4,0,116,11,107,10,114,124,1,0,1, + 0,1,0,89,0,113,78,89,0,110,2,48,0,124,7,106, + 8,106,7,125,8,116,12,124,8,131,1,100,1,107,2,114, + 156,124,7,106,7,86,0,1,0,113,78,124,8,124,5,107, + 7,114,78,124,5,160,13,124,8,161,1,1,0,124,8,86, + 0,1,0,113,78,100,0,83,0,41,4,78,114,0,0,0, + 0,41,1,218,4,80,97,116,104,114,60,0,0,0,41,14, + 90,7,112,97,116,104,108,105,98,114,183,0,0,0,114,4, + 0,0,0,114,56,0,0,0,114,38,0,0,0,90,11,114, + 101,108,97,116,105,118,101,95,116,111,114,29,0,0,0,114, + 59,0,0,0,90,6,112,97,114,101,110,116,218,3,115,101, + 116,114,28,0,0,0,114,23,0,0,0,114,51,0,0,0, + 218,3,97,100,100,41,9,114,32,0,0,0,114,183,0,0, + 0,90,13,102,117,108,108,110,97,109,101,95,112,97,116,104, + 90,13,114,101,108,97,116,105,118,101,95,112,97,116,104,90, + 12,112,97,99,107,97,103,101,95,112,97,116,104,90,12,115, + 117,98,100,105,114,115,95,115,101,101,110,218,8,102,105,108, + 101,110,97,109,101,90,8,114,101,108,97,116,105,118,101,90, + 11,112,97,114,101,110,116,95,110,97,109,101,114,9,0,0, + 0,114,9,0,0,0,114,10,0,0,0,218,8,99,111,110, + 116,101,110,116,115,250,2,0,0,115,34,0,0,0,0,8, + 12,1,18,1,14,3,14,1,6,1,6,1,12,1,2,1, + 18,1,14,1,10,5,8,1,12,1,10,1,8,1,10,1, + 122,33,95,90,105,112,73,109,112,111,114,116,82,101,115,111, + 117,114,99,101,82,101,97,100,101,114,46,99,111,110,116,101, + 110,116,115,78,41,10,114,6,0,0,0,114,7,0,0,0, + 114,8,0,0,0,114,84,0,0,0,114,81,0,0,0,114, + 34,0,0,0,114,180,0,0,0,114,181,0,0,0,114,182, + 0,0,0,114,187,0,0,0,114,9,0,0,0,114,9,0, + 0,0,114,9,0,0,0,114,10,0,0,0,114,80,0,0, + 0,212,2,0,0,115,14,0,0,0,8,1,4,5,4,2, + 8,4,8,9,8,6,8,11,114,80,0,0,0,41,45,114, + 84,0,0,0,90,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,21,0,0,0,114,1,0,0,0,114,2,0,0,0,90, + 17,95,102,114,111,122,101,110,95,105,109,112,111,114,116,108, + 105,98,114,76,0,0,0,114,148,0,0,0,114,110,0,0, + 0,114,152,0,0,0,114,67,0,0,0,114,131,0,0,0, + 90,7,95,95,97,108,108,95,95,114,20,0,0,0,90,15, + 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,114, + 18,0,0,0,114,75,0,0,0,114,3,0,0,0,114,25, + 0,0,0,218,4,116,121,112,101,114,70,0,0,0,114,113, + 0,0,0,114,115,0,0,0,114,117,0,0,0,114,4,0, + 0,0,114,89,0,0,0,114,36,0,0,0,114,37,0,0, + 0,114,35,0,0,0,114,27,0,0,0,114,122,0,0,0, + 114,142,0,0,0,114,144,0,0,0,114,52,0,0,0,114, + 147,0,0,0,114,155,0,0,0,218,8,95,95,99,111,100, + 101,95,95,114,153,0,0,0,114,159,0,0,0,114,161,0, + 0,0,114,169,0,0,0,114,151,0,0,0,114,149,0,0, + 0,114,44,0,0,0,114,80,0,0,0,114,9,0,0,0, + 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,218, + 8,60,109,111,100,117,108,101,62,1,0,0,0,115,88,0, + 0,0,4,16,8,1,16,1,8,1,8,1,8,1,8,1, + 8,1,8,2,8,3,6,1,14,3,16,4,4,2,8,2, + 4,1,4,1,4,2,14,127,0,127,0,1,12,1,12,1, + 2,1,2,252,4,9,8,4,8,9,8,31,8,126,2,254, + 2,29,4,5,8,21,8,46,8,10,8,46,10,5,8,7, + 8,6,8,13,8,19,8,15,8,26, }; diff --git a/Python/initconfig.c b/Python/initconfig.c index caa9bf5f568..74c9ca007ed 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -2198,10 +2198,6 @@ config_update_argv(PyConfig *config, Py_ssize_t opt_index) /* Force sys.argv[0] = '-m'*/ arg0 = L"-m"; } - else if (config->run_filename != NULL) { - /* run_filename is converted to an absolute path: update argv */ - arg0 = config->run_filename; - } if (arg0 != NULL) { arg0 = _PyMem_RawWcsdup(arg0); diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index d39bad0bcd3..e4f4a8c7791 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -47,12 +47,12 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_RERAISE, + &&TARGET_WITH_EXCEPT_START, &&TARGET_GET_AITER, &&TARGET_GET_ANEXT, &&TARGET_BEFORE_ASYNC_WITH, - &&TARGET_BEGIN_FINALLY, + &&_unknown_opcode, &&TARGET_END_ASYNC_FOR, &&TARGET_INPLACE_ADD, &&TARGET_INPLACE_SUBTRACT, @@ -80,14 +80,14 @@ static void *opcode_targets[256] = { &&TARGET_INPLACE_XOR, &&TARGET_INPLACE_OR, &&_unknown_opcode, - &&TARGET_WITH_CLEANUP_START, - &&TARGET_WITH_CLEANUP_FINISH, + &&_unknown_opcode, + &&_unknown_opcode, &&TARGET_RETURN_VALUE, &&TARGET_IMPORT_STAR, &&TARGET_SETUP_ANNOTATIONS, &&TARGET_YIELD_VALUE, &&TARGET_POP_BLOCK, - &&TARGET_END_FINALLY, + &&_unknown_opcode, &&TARGET_POP_EXCEPT, &&TARGET_STORE_NAME, &&TARGET_DELETE_NAME, @@ -161,8 +161,8 @@ static void *opcode_targets[256] = { &&_unknown_opcode, &&TARGET_LOAD_METHOD, &&TARGET_CALL_METHOD, - &&TARGET_CALL_FINALLY, - &&TARGET_POP_FINALLY, + &&_unknown_opcode, + &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, diff --git a/Python/peephole.c b/Python/peephole.c index d859648411f..714a4520ba8 100644 --- a/Python/peephole.c +++ b/Python/peephole.c @@ -198,7 +198,6 @@ markblocks(_Py_CODEUNIT *code, Py_ssize_t len) case SETUP_FINALLY: case SETUP_WITH: case SETUP_ASYNC_WITH: - case CALL_FINALLY: j = GETJUMPTGT(code, i); assert(j < len); blocks[j] = 1; @@ -432,14 +431,10 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, /* Remove unreachable ops after RETURN */ case RETURN_VALUE: h = i + 1; - /* END_FINALLY should be kept since it denotes the end of - the 'finally' block in frame_setlineno() in frameobject.c. - SETUP_FINALLY should be kept for balancing. - */ - while (h < codelen && ISBASICBLOCK(blocks, i, h) && - _Py_OPCODE(codestr[h]) != END_FINALLY) + while (h < codelen && ISBASICBLOCK(blocks, i, h)) { - if (_Py_OPCODE(codestr[h]) == SETUP_FINALLY) { + /* Leave SETUP_FINALLY and RERAISE in place to help find block limits. */ + if (_Py_OPCODE(codestr[h]) == SETUP_FINALLY || _Py_OPCODE(codestr[h]) == RERAISE) { while (h > i + 1 && _Py_OPCODE(codestr[h - 1]) == EXTENDED_ARG) { @@ -506,7 +501,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names, case SETUP_FINALLY: case SETUP_WITH: case SETUP_ASYNC_WITH: - case CALL_FINALLY: j = blocks[j / sizeof(_Py_CODEUNIT) + i + 1] - blocks[i] - 1; j *= sizeof(_Py_CODEUNIT); break; diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 7591f069b45..823d96e86a4 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -64,6 +64,7 @@ extern grammar _PyParser_Grammar; /* From graminit.c */ /* Forward declarations */ static PyStatus add_main_module(PyInterpreterState *interp); static PyStatus init_import_site(void); +static PyStatus init_set_builtins_open(PyThreadState *tstate); static PyStatus init_sys_streams(PyThreadState *tstate); static PyStatus init_signals(PyThreadState *tstate); static void call_py_exitfuncs(PyThreadState *tstate); @@ -259,6 +260,7 @@ _Py_LegacyLocaleDetected(int warn) #endif } +#ifndef MS_WINDOWS static const char *_C_LOCALE_WARNING = "Python runtime initialized with LC_CTYPE=C (a locale with default ASCII " "encoding), which may cause Unicode compatibility problems. Using C.UTF-8, " @@ -273,6 +275,7 @@ emit_stderr_warning_for_legacy_locale(_PyRuntimeState *runtime) PySys_FormatStderr("%s", _C_LOCALE_WARNING); } } +#endif /* !defined(MS_WINDOWS) */ typedef struct _CandidateLocale { const char *locale_name; /* The locale to try as a coercion target */ @@ -619,52 +622,68 @@ pycore_init_types(PyThreadState *tstate) static PyStatus pycore_init_builtins(PyThreadState *tstate) { - PyInterpreterState *interp = tstate->interp; + assert(!_PyErr_Occurred(tstate)); PyObject *bimod = _PyBuiltin_Init(tstate); if (bimod == NULL) { - return _PyStatus_ERR("can't initialize builtins modules"); + goto error; } - _PyImport_FixupBuiltin(bimod, "builtins", interp->modules); - interp->builtins = PyModule_GetDict(bimod); - if (interp->builtins == NULL) { - return _PyStatus_ERR("can't initialize builtins dict"); + PyInterpreterState *interp = tstate->interp; + if (_PyImport_FixupBuiltin(bimod, "builtins", interp->modules) < 0) { + goto error; } - Py_INCREF(interp->builtins); + + PyObject *builtins_dict = PyModule_GetDict(bimod); + if (builtins_dict == NULL) { + goto error; + } + Py_INCREF(builtins_dict); + interp->builtins = builtins_dict; PyStatus status = _PyBuiltins_AddExceptions(bimod); if (_PyStatus_EXCEPTION(status)) { return status; } + + interp->builtins_copy = PyDict_Copy(interp->builtins); + if (interp->builtins_copy == NULL) { + goto error; + } + Py_DECREF(bimod); + + assert(!_PyErr_Occurred(tstate)); + return _PyStatus_OK(); + +error: + Py_XDECREF(bimod); + return _PyStatus_ERR("can't initialize builtins module"); } static PyStatus pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod) { + assert(!_PyErr_Occurred(tstate)); + + PyStatus status = _PyImportHooks_Init(tstate); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + const PyConfig *config = &tstate->interp->config; + if (_Py_IsMainInterpreter(tstate)) { + /* Initialize _warnings. */ + if (_PyWarnings_Init() == NULL) { + return _PyStatus_ERR("can't initialize warnings"); + } - PyStatus status = _PyImport_Init(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = _PyImportHooks_Init(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - /* Initialize _warnings. */ - if (_PyWarnings_Init() == NULL) { - return _PyStatus_ERR("can't initialize warnings"); - } - - if (config->_install_importlib) { - status = _PyConfig_WritePathConfig(config); - if (_PyStatus_EXCEPTION(status)) { - return status; + if (config->_install_importlib) { + status = _PyConfig_WritePathConfig(config); + if (_PyStatus_EXCEPTION(status)) { + return status; + } } } @@ -675,10 +694,43 @@ pycore_init_import_warnings(PyThreadState *tstate, PyObject *sysmod) return status; } } + + assert(!_PyErr_Occurred(tstate)); + return _PyStatus_OK(); } +static PyStatus +pycore_interp_init(PyThreadState *tstate) +{ + PyStatus status; + PyObject *sysmod = NULL; + + status = pycore_init_types(tstate); + if (_PyStatus_EXCEPTION(status)) { + goto done; + } + + status = _PySys_Create(tstate, &sysmod); + if (_PyStatus_EXCEPTION(status)) { + goto done; + } + + status = pycore_init_builtins(tstate); + if (_PyStatus_EXCEPTION(status)) { + goto done; + } + + status = pycore_init_import_warnings(tstate, sysmod); + +done: + /* sys.modules['sys'] contains a strong reference to the module */ + Py_XDECREF(sysmod); + return status; +} + + static PyStatus pyinit_config(_PyRuntimeState *runtime, PyThreadState **tstate_p, @@ -699,23 +751,7 @@ pyinit_config(_PyRuntimeState *runtime, config = &tstate->interp->config; *tstate_p = tstate; - status = pycore_init_types(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - PyObject *sysmod; - status = _PySys_Create(tstate, &sysmod); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = pycore_init_builtins(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = pycore_init_import_warnings(tstate, sysmod); + status = pycore_interp_init(tstate); if (_PyStatus_EXCEPTION(status)) { return status; } @@ -895,16 +931,16 @@ done: configuration. Example of bpo-34008: Py_Main() called after Py_Initialize(). */ static PyStatus -_Py_ReconfigureMainInterpreter(PyInterpreterState *interp) +_Py_ReconfigureMainInterpreter(PyThreadState *tstate) { - PyConfig *config = &interp->config; + PyConfig *config = &tstate->interp->config; PyObject *argv = _PyWideStringList_AsList(&config->argv); if (argv == NULL) { return _PyStatus_NO_MEMORY(); \ } - int res = PyDict_SetItemString(interp->sysdict, "argv", argv); + int res = PyDict_SetItemString(tstate->interp->sysdict, "argv", argv); Py_DECREF(argv); if (res < 0) { return _PyStatus_ERR("fail to set sys.argv"); @@ -912,6 +948,120 @@ _Py_ReconfigureMainInterpreter(PyInterpreterState *interp) return _PyStatus_OK(); } + +static PyStatus +init_interp_main(PyThreadState *tstate) +{ + assert(!_PyErr_Occurred(tstate)); + + PyStatus status; + int is_main_interp = _Py_IsMainInterpreter(tstate); + PyInterpreterState *interp = tstate->interp; + PyConfig *config = &interp->config; + + if (!config->_install_importlib) { + /* Special mode for freeze_importlib: run with no import system + * + * This means anything which needs support from extension modules + * or pure Python code in the standard library won't work. + */ + if (is_main_interp) { + interp->runtime->initialized = 1; + } + return _PyStatus_OK(); + } + + if (is_main_interp) { + if (_PyTime_Init() < 0) { + return _PyStatus_ERR("can't initialize time"); + } + } + + if (_PySys_InitMain(tstate) < 0) { + return _PyStatus_ERR("can't finish initializing sys"); + } + + status = init_importlib_external(tstate); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + + if (is_main_interp) { + /* initialize the faulthandler module */ + status = _PyFaulthandler_Init(config->faulthandler); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + } + + status = _PyUnicode_InitEncodings(tstate); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + + if (is_main_interp) { + if (config->install_signal_handlers) { + status = init_signals(tstate); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + } + + if (_PyTraceMalloc_Init(config->tracemalloc) < 0) { + return _PyStatus_ERR("can't initialize tracemalloc"); + } + } + + status = init_sys_streams(tstate); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + + status = init_set_builtins_open(tstate); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + + status = add_main_module(interp); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + + if (is_main_interp) { + /* Initialize warnings. */ + PyObject *warnoptions = PySys_GetObject("warnoptions"); + if (warnoptions != NULL && PyList_Size(warnoptions) > 0) + { + PyObject *warnings_module = PyImport_ImportModule("warnings"); + if (warnings_module == NULL) { + fprintf(stderr, "'import warnings' failed; traceback:\n"); + _PyErr_Print(tstate); + } + Py_XDECREF(warnings_module); + } + + interp->runtime->initialized = 1; + } + + if (config->site_import) { + status = init_import_site(); + if (_PyStatus_EXCEPTION(status)) { + return status; + } + } + + if (is_main_interp) { +#ifndef MS_WINDOWS + emit_stderr_warning_for_legacy_locale(interp->runtime); +#endif + } + + assert(!_PyErr_Occurred(tstate)); + + return _PyStatus_OK(); +} + + /* Update interpreter state based on supplied configuration settings * * After calling this function, most of the restrictions on the interpreter @@ -926,99 +1076,19 @@ _Py_ReconfigureMainInterpreter(PyInterpreterState *interp) static PyStatus pyinit_main(PyThreadState *tstate) { - _PyRuntimeState *runtime = tstate->interp->runtime; - if (!runtime->core_initialized) { + PyInterpreterState *interp = tstate->interp; + if (!interp->runtime->core_initialized) { return _PyStatus_ERR("runtime core not initialized"); } - /* Configure the main interpreter */ - PyInterpreterState *interp = tstate->interp; - PyConfig *config = &interp->config; - - if (runtime->initialized) { - return _Py_ReconfigureMainInterpreter(interp); + if (interp->runtime->initialized) { + return _Py_ReconfigureMainInterpreter(tstate); } - if (!config->_install_importlib) { - /* Special mode for freeze_importlib: run with no import system - * - * This means anything which needs support from extension modules - * or pure Python code in the standard library won't work. - */ - runtime->initialized = 1; - return _PyStatus_OK(); - } - - if (_PyTime_Init() < 0) { - return _PyStatus_ERR("can't initialize time"); - } - - if (_PySys_InitMain(tstate) < 0) { - return _PyStatus_ERR("can't finish initializing sys"); - } - - PyStatus status = init_importlib_external(tstate); + PyStatus status = init_interp_main(tstate); if (_PyStatus_EXCEPTION(status)) { return status; } - - /* initialize the faulthandler module */ - status = _PyFaulthandler_Init(config->faulthandler); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = _PyUnicode_InitEncodings(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - if (config->install_signal_handlers) { - status = init_signals(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - } - - if (_PyTraceMalloc_Init(config->tracemalloc) < 0) { - return _PyStatus_ERR("can't initialize tracemalloc"); - } - - status = add_main_module(interp); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = init_sys_streams(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - /* Initialize warnings. */ - PyObject *warnoptions = PySys_GetObject("warnoptions"); - if (warnoptions != NULL && PyList_Size(warnoptions) > 0) - { - PyObject *warnings_module = PyImport_ImportModule("warnings"); - if (warnings_module == NULL) { - fprintf(stderr, "'import warnings' failed; traceback:\n"); - _PyErr_Print(tstate); - } - Py_XDECREF(warnings_module); - } - - runtime->initialized = 1; - - if (config->site_import) { - status = init_import_site(); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - } - -#ifndef MS_WINDOWS - emit_stderr_warning_for_legacy_locale(runtime); -#endif - return _PyStatus_OK(); } @@ -1182,9 +1252,6 @@ finalize_interp_types(PyThreadState *tstate, int is_main_interp) _PySet_Fini(); _PyBytes_Fini(); _PyLong_Fini(); - } - - if (is_main_interp) { _PyFloat_Fini(); _PyDict_Fini(); _PySlice_Fini(); @@ -1197,9 +1264,12 @@ finalize_interp_types(PyThreadState *tstate, int is_main_interp) _PyArg_Fini(); _PyAsyncGen_Fini(); _PyContext_Fini(); + } - /* Cleanup Unicode implementation */ - _PyUnicode_Fini(); + /* Cleanup Unicode implementation */ + _PyUnicode_Fini(tstate); + + if (is_main_interp) { _Py_ClearFileSystemEncoding(); } } @@ -1213,6 +1283,11 @@ finalize_interp_clear(PyThreadState *tstate) /* Clear interpreter state and all thread states */ PyInterpreterState_Clear(tstate->interp); + /* Trigger a GC collection on subinterpreters*/ + if (!is_main_interp) { + _PyGC_CollectNoFail(); + } + finalize_interp_types(tstate, is_main_interp); if (is_main_interp) { @@ -1426,6 +1501,7 @@ Py_Finalize(void) Py_FinalizeEx(); } + /* Create and initialize a new interpreter and thread, and return the new thread. This requires that Py_Initialize() has been called first. @@ -1485,113 +1561,33 @@ new_interpreter(PyThreadState **tstate_p) status = _PyConfig_Copy(&interp->config, config); if (_PyStatus_EXCEPTION(status)) { - return status; - } - config = &interp->config; - - status = pycore_init_types(tstate); - - /* XXX The following is lax in error checking */ - PyObject *modules = PyDict_New(); - if (modules == NULL) { - return _PyStatus_ERR("can't make modules dictionary"); - } - interp->modules = modules; - - PyObject *sysmod = _PyImport_FindBuiltin(tstate, "sys"); - if (sysmod != NULL) { - interp->sysdict = PyModule_GetDict(sysmod); - if (interp->sysdict == NULL) { - goto handle_error; - } - Py_INCREF(interp->sysdict); - PyDict_SetItemString(interp->sysdict, "modules", modules); - if (_PySys_InitMain(tstate) < 0) { - return _PyStatus_ERR("can't finish initializing sys"); - } - } - else if (_PyErr_Occurred(tstate)) { - goto handle_error; + goto error; } - PyObject *bimod = _PyImport_FindBuiltin(tstate, "builtins"); - if (bimod != NULL) { - interp->builtins = PyModule_GetDict(bimod); - if (interp->builtins == NULL) - goto handle_error; - Py_INCREF(interp->builtins); - } - else if (_PyErr_Occurred(tstate)) { - goto handle_error; + status = pycore_interp_init(tstate); + if (_PyStatus_EXCEPTION(status)) { + goto error; } - if (bimod != NULL && sysmod != NULL) { - status = _PyBuiltins_AddExceptions(bimod); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = _PySys_SetPreliminaryStderr(interp->sysdict); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = _PyImportHooks_Init(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = init_importlib(tstate, sysmod); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = init_importlib_external(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = _PyUnicode_InitEncodings(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = init_sys_streams(tstate); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - status = add_main_module(interp); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - - if (config->site_import) { - status = init_import_site(); - if (_PyStatus_EXCEPTION(status)) { - return status; - } - } - } - - if (_PyErr_Occurred(tstate)) { - goto handle_error; + status = init_interp_main(tstate); + if (_PyStatus_EXCEPTION(status)) { + goto error; } *tstate_p = tstate; return _PyStatus_OK(); -handle_error: - /* Oops, it didn't work. Undo it all. */ +error: + *tstate_p = NULL; + /* Oops, it didn't work. Undo it all. */ PyErr_PrintEx(0); PyThreadState_Clear(tstate); PyThreadState_Delete(tstate); PyInterpreterState_Delete(interp); PyThreadState_Swap(save_tstate); - *tstate_p = NULL; - return _PyStatus_OK(); + return status; } PyThreadState * @@ -1883,12 +1879,49 @@ error: return NULL; } +/* Set builtins.open to io.OpenWrapper */ +static PyStatus +init_set_builtins_open(PyThreadState *tstate) +{ + PyObject *iomod = NULL, *wrapper; + PyObject *bimod = NULL; + PyStatus res = _PyStatus_OK(); + + if (!(iomod = PyImport_ImportModule("io"))) { + goto error; + } + + if (!(bimod = PyImport_ImportModule("builtins"))) { + goto error; + } + + if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) { + goto error; + } + + /* Set builtins.open */ + if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) { + Py_DECREF(wrapper); + goto error; + } + Py_DECREF(wrapper); + goto done; + +error: + res = _PyStatus_ERR("can't initialize io.open"); + +done: + Py_XDECREF(bimod); + Py_XDECREF(iomod); + return res; +} + + /* Initialize sys.stdin, stdout, stderr and builtins.open */ static PyStatus init_sys_streams(PyThreadState *tstate) { - PyObject *iomod = NULL, *wrapper; - PyObject *bimod = NULL; + PyObject *iomod = NULL; PyObject *m; PyObject *std = NULL; int fd; @@ -1921,23 +1954,9 @@ init_sys_streams(PyThreadState *tstate) } Py_DECREF(m); - if (!(bimod = PyImport_ImportModule("builtins"))) { - goto error; - } - if (!(iomod = PyImport_ImportModule("io"))) { goto error; } - if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) { - goto error; - } - - /* Set builtins.open */ - if (PyObject_SetAttrString(bimod, "open", wrapper) == -1) { - Py_DECREF(wrapper); - goto error; - } - Py_DECREF(wrapper); /* Set sys.stdin */ fd = fileno(stdin); @@ -2005,8 +2024,6 @@ error: done: _Py_ClearStandardStreamEncoding(); - - Py_XDECREF(bimod); Py_XDECREF(iomod); return res; } diff --git a/Python/pystate.c b/Python/pystate.c index 0a6d035836e..d792380de46 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -661,9 +661,8 @@ PyState_FindModule(struct PyModuleDef* module) } int -_PyState_AddModule(PyObject* module, struct PyModuleDef* def) +_PyState_AddModule(PyThreadState *tstate, PyObject* module, struct PyModuleDef* def) { - PyInterpreterState *state; if (!def) { assert(PyErr_Occurred()); return -1; @@ -673,37 +672,45 @@ _PyState_AddModule(PyObject* module, struct PyModuleDef* def) "PyState_AddModule called on module with slots"); return -1; } - state = _PyInterpreterState_GET_UNSAFE(); - if (!state->modules_by_index) { - state->modules_by_index = PyList_New(0); - if (!state->modules_by_index) + + PyInterpreterState *interp = tstate->interp; + if (!interp->modules_by_index) { + interp->modules_by_index = PyList_New(0); + if (!interp->modules_by_index) { return -1; + } } - while (PyList_GET_SIZE(state->modules_by_index) <= def->m_base.m_index) - if (PyList_Append(state->modules_by_index, Py_None) < 0) + + while (PyList_GET_SIZE(interp->modules_by_index) <= def->m_base.m_index) { + if (PyList_Append(interp->modules_by_index, Py_None) < 0) { return -1; + } + } + Py_INCREF(module); - return PyList_SetItem(state->modules_by_index, + return PyList_SetItem(interp->modules_by_index, def->m_base.m_index, module); } int PyState_AddModule(PyObject* module, struct PyModuleDef* def) { - Py_ssize_t index; - PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE(); if (!def) { Py_FatalError("PyState_AddModule: Module Definition is NULL"); return -1; } - index = def->m_base.m_index; - if (state->modules_by_index && - index < PyList_GET_SIZE(state->modules_by_index) && - module == PyList_GET_ITEM(state->modules_by_index, index)) { + + PyThreadState *tstate = _PyThreadState_GET(); + PyInterpreterState *interp = tstate->interp; + Py_ssize_t index = def->m_base.m_index; + if (interp->modules_by_index && + index < PyList_GET_SIZE(interp->modules_by_index) && + module == PyList_GET_ITEM(interp->modules_by_index, index)) + { Py_FatalError("PyState_AddModule: Module already added!"); return -1; } - return _PyState_AddModule(module, def); + return _PyState_AddModule(tstate, module, def); } int diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 77a95ceb94b..b68a0b5572a 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -695,6 +695,14 @@ _PyErr_PrintEx(PyThreadState *tstate, int set_sys_last_vars) } } hook = _PySys_GetObjectId(&PyId_excepthook); + if (PySys_Audit("sys.excepthook", "OOOO", hook ? hook : Py_None, + exception, v, tb) < 0) { + if (PyErr_ExceptionMatches(PyExc_RuntimeError)) { + PyErr_Clear(); + goto done; + } + _PyErr_WriteUnraisableMsg("in audit hook", NULL); + } if (hook) { PyObject* stack[3]; PyObject *result; diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 30c7e987461..9f866a2a3d2 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -181,7 +181,7 @@ PySys_Audit(const char *event, const char *argFormat, ...) if (argFormat && argFormat[0]) { va_list args; va_start(args, argFormat); - eventArgs = Py_VaBuildValue(argFormat, args); + eventArgs = _Py_VaBuildValue_SizeT(argFormat, args); va_end(args); if (eventArgs && !PyTuple_Check(eventArgs)) { PyObject *argTuple = PyTuple_Pack(1, eventArgs); @@ -323,8 +323,8 @@ PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData) /* Cannot invoke hooks until we are initialized */ if (runtime->initialized) { if (PySys_Audit("sys.addaudithook", NULL) < 0) { - if (_PyErr_ExceptionMatches(tstate, PyExc_Exception)) { - /* We do not report errors derived from Exception */ + if (_PyErr_ExceptionMatches(tstate, PyExc_RuntimeError)) { + /* We do not report errors derived from RuntimeError */ _PyErr_Clear(tstate); return 0; } @@ -2919,7 +2919,7 @@ err_occurred: infrastructure for the io module in place. Use UTF-8/surrogateescape and ignore EAGAIN errors. */ -PyStatus +static PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict) { PyObject *pstderr = PyFile_NewStdPrinter(fileno(stderr)); @@ -2946,11 +2946,13 @@ error: PyStatus _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) { + assert(!_PyErr_Occurred(tstate)); + PyInterpreterState *interp = tstate->interp; PyObject *modules = PyDict_New(); if (modules == NULL) { - return _PyStatus_ERR("can't make modules dictionary"); + goto error; } interp->modules = modules; @@ -2961,13 +2963,13 @@ _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) PyObject *sysdict = PyModule_GetDict(sysmod); if (sysdict == NULL) { - return _PyStatus_ERR("can't initialize sys dict"); + goto error; } Py_INCREF(sysdict); interp->sysdict = sysdict; if (PyDict_SetItemString(sysdict, "modules", interp->modules) < 0) { - return _PyStatus_ERR("can't initialize sys module"); + goto error; } PyStatus status = _PySys_SetPreliminaryStderr(sysdict); @@ -2980,10 +2982,17 @@ _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p) return status; } - _PyImport_FixupBuiltin(sysmod, "sys", interp->modules); + if (_PyImport_FixupBuiltin(sysmod, "sys", interp->modules) < 0) { + goto error; + } + + assert(!_PyErr_Occurred(tstate)); *sysmod_p = sysmod; return _PyStatus_OK(); + +error: + return _PyStatus_ERR("can't initialize sys module"); } diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h index b9a340530cf..ff4266c72b4 100644 --- a/Python/thread_pthread.h +++ b/Python/thread_pthread.h @@ -51,6 +51,16 @@ #undef THREAD_STACK_SIZE #define THREAD_STACK_SIZE 0x200000 #endif +/* bpo-38852: test_threading.test_recursion_limit() checks that 1000 recursive + Python calls (default recursion limit) doesn't crash, but raise a regular + RecursionError exception. In debug mode, Python function calls allocates + more memory on the stack, so use a stack of 8 MiB. */ +#if defined(__ANDROID__) && defined(THREAD_STACK_SIZE) && THREAD_STACK_SIZE == 0 +# ifdef Py_DEBUG +# undef THREAD_STACK_SIZE +# define THREAD_STACK_SIZE 0x800000 +# endif +#endif /* for safety, ensure a viable minimum stacksize */ #define THREAD_STACK_MIN 0x8000 /* 32 KiB */ #else /* !_POSIX_THREAD_ATTR_STACKSIZE */ diff --git a/Tools/parser/unparse.py b/Tools/parser/unparse.py deleted file mode 100644 index a5cc000676b..00000000000 --- a/Tools/parser/unparse.py +++ /dev/null @@ -1,704 +0,0 @@ -"Usage: unparse.py " -import sys -import ast -import tokenize -import io -import os - -# Large float and imaginary literals get turned into infinities in the AST. -# We unparse those infinities to INFSTR. -INFSTR = "1e" + repr(sys.float_info.max_10_exp + 1) - -def interleave(inter, f, seq): - """Call f on each item in seq, calling inter() in between. - """ - seq = iter(seq) - try: - f(next(seq)) - except StopIteration: - pass - else: - for x in seq: - inter() - f(x) - -class Unparser: - """Methods in this class recursively traverse an AST and - output source code for the abstract syntax; original formatting - is disregarded. """ - - def __init__(self, tree, file = sys.stdout): - """Unparser(tree, file=sys.stdout) -> None. - Print the source for tree to file.""" - self.f = file - self._indent = 0 - self.dispatch(tree) - print("", file=self.f) - self.f.flush() - - def fill(self, text = ""): - "Indent a piece of text, according to the current indentation level" - self.f.write("\n"+" "*self._indent + text) - - def write(self, text): - "Append a piece of text to the current line." - self.f.write(text) - - def enter(self): - "Print ':', and increase the indentation." - self.write(":") - self._indent += 1 - - def leave(self): - "Decrease the indentation level." - self._indent -= 1 - - def dispatch(self, tree): - "Dispatcher function, dispatching tree type T to method _T." - if isinstance(tree, list): - for t in tree: - self.dispatch(t) - return - meth = getattr(self, "_"+tree.__class__.__name__) - meth(tree) - - - ############### Unparsing methods ###################### - # There should be one method per concrete grammar type # - # Constructors should be grouped by sum type. Ideally, # - # this would follow the order in the grammar, but # - # currently doesn't. # - ######################################################## - - def _Module(self, tree): - for stmt in tree.body: - self.dispatch(stmt) - - # stmt - def _Expr(self, tree): - self.fill() - self.dispatch(tree.value) - - def _NamedExpr(self, tree): - self.write("(") - self.dispatch(tree.target) - self.write(" := ") - self.dispatch(tree.value) - self.write(")") - - def _Import(self, t): - self.fill("import ") - interleave(lambda: self.write(", "), self.dispatch, t.names) - - def _ImportFrom(self, t): - self.fill("from ") - self.write("." * t.level) - if t.module: - self.write(t.module) - self.write(" import ") - interleave(lambda: self.write(", "), self.dispatch, t.names) - - def _Assign(self, t): - self.fill() - for target in t.targets: - self.dispatch(target) - self.write(" = ") - self.dispatch(t.value) - - def _AugAssign(self, t): - self.fill() - self.dispatch(t.target) - self.write(" "+self.binop[t.op.__class__.__name__]+"= ") - self.dispatch(t.value) - - def _AnnAssign(self, t): - self.fill() - if not t.simple and isinstance(t.target, ast.Name): - self.write('(') - self.dispatch(t.target) - if not t.simple and isinstance(t.target, ast.Name): - self.write(')') - self.write(": ") - self.dispatch(t.annotation) - if t.value: - self.write(" = ") - self.dispatch(t.value) - - def _Return(self, t): - self.fill("return") - if t.value: - self.write(" ") - self.dispatch(t.value) - - def _Pass(self, t): - self.fill("pass") - - def _Break(self, t): - self.fill("break") - - def _Continue(self, t): - self.fill("continue") - - def _Delete(self, t): - self.fill("del ") - interleave(lambda: self.write(", "), self.dispatch, t.targets) - - def _Assert(self, t): - self.fill("assert ") - self.dispatch(t.test) - if t.msg: - self.write(", ") - self.dispatch(t.msg) - - def _Global(self, t): - self.fill("global ") - interleave(lambda: self.write(", "), self.write, t.names) - - def _Nonlocal(self, t): - self.fill("nonlocal ") - interleave(lambda: self.write(", "), self.write, t.names) - - def _Await(self, t): - self.write("(") - self.write("await") - if t.value: - self.write(" ") - self.dispatch(t.value) - self.write(")") - - def _Yield(self, t): - self.write("(") - self.write("yield") - if t.value: - self.write(" ") - self.dispatch(t.value) - self.write(")") - - def _YieldFrom(self, t): - self.write("(") - self.write("yield from") - if t.value: - self.write(" ") - self.dispatch(t.value) - self.write(")") - - def _Raise(self, t): - self.fill("raise") - if not t.exc: - assert not t.cause - return - self.write(" ") - self.dispatch(t.exc) - if t.cause: - self.write(" from ") - self.dispatch(t.cause) - - def _Try(self, t): - self.fill("try") - self.enter() - self.dispatch(t.body) - self.leave() - for ex in t.handlers: - self.dispatch(ex) - if t.orelse: - self.fill("else") - self.enter() - self.dispatch(t.orelse) - self.leave() - if t.finalbody: - self.fill("finally") - self.enter() - self.dispatch(t.finalbody) - self.leave() - - def _ExceptHandler(self, t): - self.fill("except") - if t.type: - self.write(" ") - self.dispatch(t.type) - if t.name: - self.write(" as ") - self.write(t.name) - self.enter() - self.dispatch(t.body) - self.leave() - - def _ClassDef(self, t): - self.write("\n") - for deco in t.decorator_list: - self.fill("@") - self.dispatch(deco) - self.fill("class "+t.name) - self.write("(") - comma = False - for e in t.bases: - if comma: self.write(", ") - else: comma = True - self.dispatch(e) - for e in t.keywords: - if comma: self.write(", ") - else: comma = True - self.dispatch(e) - self.write(")") - - self.enter() - self.dispatch(t.body) - self.leave() - - def _FunctionDef(self, t): - self.__FunctionDef_helper(t, "def") - - def _AsyncFunctionDef(self, t): - self.__FunctionDef_helper(t, "async def") - - def __FunctionDef_helper(self, t, fill_suffix): - self.write("\n") - for deco in t.decorator_list: - self.fill("@") - self.dispatch(deco) - def_str = fill_suffix+" "+t.name + "(" - self.fill(def_str) - self.dispatch(t.args) - self.write(")") - if t.returns: - self.write(" -> ") - self.dispatch(t.returns) - self.enter() - self.dispatch(t.body) - self.leave() - - def _For(self, t): - self.__For_helper("for ", t) - - def _AsyncFor(self, t): - self.__For_helper("async for ", t) - - def __For_helper(self, fill, t): - self.fill(fill) - self.dispatch(t.target) - self.write(" in ") - self.dispatch(t.iter) - self.enter() - self.dispatch(t.body) - self.leave() - if t.orelse: - self.fill("else") - self.enter() - self.dispatch(t.orelse) - self.leave() - - def _If(self, t): - self.fill("if ") - self.dispatch(t.test) - self.enter() - self.dispatch(t.body) - self.leave() - # collapse nested ifs into equivalent elifs. - while (t.orelse and len(t.orelse) == 1 and - isinstance(t.orelse[0], ast.If)): - t = t.orelse[0] - self.fill("elif ") - self.dispatch(t.test) - self.enter() - self.dispatch(t.body) - self.leave() - # final else - if t.orelse: - self.fill("else") - self.enter() - self.dispatch(t.orelse) - self.leave() - - def _While(self, t): - self.fill("while ") - self.dispatch(t.test) - self.enter() - self.dispatch(t.body) - self.leave() - if t.orelse: - self.fill("else") - self.enter() - self.dispatch(t.orelse) - self.leave() - - def _With(self, t): - self.fill("with ") - interleave(lambda: self.write(", "), self.dispatch, t.items) - self.enter() - self.dispatch(t.body) - self.leave() - - def _AsyncWith(self, t): - self.fill("async with ") - interleave(lambda: self.write(", "), self.dispatch, t.items) - self.enter() - self.dispatch(t.body) - self.leave() - - # expr - def _JoinedStr(self, t): - self.write("f") - string = io.StringIO() - self._fstring_JoinedStr(t, string.write) - self.write(repr(string.getvalue())) - - def _FormattedValue(self, t): - self.write("f") - string = io.StringIO() - self._fstring_FormattedValue(t, string.write) - self.write(repr(string.getvalue())) - - def _fstring_JoinedStr(self, t, write): - for value in t.values: - meth = getattr(self, "_fstring_" + type(value).__name__) - meth(value, write) - - def _fstring_Constant(self, t, write): - assert isinstance(t.value, str) - value = t.value.replace("{", "{{").replace("}", "}}") - write(value) - - def _fstring_FormattedValue(self, t, write): - write("{") - expr = io.StringIO() - Unparser(t.value, expr) - expr = expr.getvalue().rstrip("\n") - if expr.startswith("{"): - write(" ") # Separate pair of opening brackets as "{ {" - write(expr) - if t.conversion != -1: - conversion = chr(t.conversion) - assert conversion in "sra" - write(f"!{conversion}") - if t.format_spec: - write(":") - meth = getattr(self, "_fstring_" + type(t.format_spec).__name__) - meth(t.format_spec, write) - write("}") - - def _Name(self, t): - self.write(t.id) - - def _write_constant(self, value): - if isinstance(value, (float, complex)): - # Substitute overflowing decimal literal for AST infinities. - self.write(repr(value).replace("inf", INFSTR)) - else: - self.write(repr(value)) - - def _Constant(self, t): - value = t.value - if isinstance(value, tuple): - self.write("(") - if len(value) == 1: - self._write_constant(value[0]) - self.write(",") - else: - interleave(lambda: self.write(", "), self._write_constant, value) - self.write(")") - elif value is ...: - self.write("...") - else: - if t.kind == "u": - self.write("u") - self._write_constant(t.value) - - def _List(self, t): - self.write("[") - interleave(lambda: self.write(", "), self.dispatch, t.elts) - self.write("]") - - def _ListComp(self, t): - self.write("[") - self.dispatch(t.elt) - for gen in t.generators: - self.dispatch(gen) - self.write("]") - - def _GeneratorExp(self, t): - self.write("(") - self.dispatch(t.elt) - for gen in t.generators: - self.dispatch(gen) - self.write(")") - - def _SetComp(self, t): - self.write("{") - self.dispatch(t.elt) - for gen in t.generators: - self.dispatch(gen) - self.write("}") - - def _DictComp(self, t): - self.write("{") - self.dispatch(t.key) - self.write(": ") - self.dispatch(t.value) - for gen in t.generators: - self.dispatch(gen) - self.write("}") - - def _comprehension(self, t): - if t.is_async: - self.write(" async for ") - else: - self.write(" for ") - self.dispatch(t.target) - self.write(" in ") - self.dispatch(t.iter) - for if_clause in t.ifs: - self.write(" if ") - self.dispatch(if_clause) - - def _IfExp(self, t): - self.write("(") - self.dispatch(t.body) - self.write(" if ") - self.dispatch(t.test) - self.write(" else ") - self.dispatch(t.orelse) - self.write(")") - - def _Set(self, t): - assert(t.elts) # should be at least one element - self.write("{") - interleave(lambda: self.write(", "), self.dispatch, t.elts) - self.write("}") - - def _Dict(self, t): - self.write("{") - def write_key_value_pair(k, v): - self.dispatch(k) - self.write(": ") - self.dispatch(v) - - def write_item(item): - k, v = item - if k is None: - # for dictionary unpacking operator in dicts {**{'y': 2}} - # see PEP 448 for details - self.write("**") - self.dispatch(v) - else: - write_key_value_pair(k, v) - interleave(lambda: self.write(", "), write_item, zip(t.keys, t.values)) - self.write("}") - - def _Tuple(self, t): - self.write("(") - if len(t.elts) == 1: - elt = t.elts[0] - self.dispatch(elt) - self.write(",") - else: - interleave(lambda: self.write(", "), self.dispatch, t.elts) - self.write(")") - - unop = {"Invert":"~", "Not": "not", "UAdd":"+", "USub":"-"} - def _UnaryOp(self, t): - self.write("(") - self.write(self.unop[t.op.__class__.__name__]) - self.write(" ") - self.dispatch(t.operand) - self.write(")") - - binop = { "Add":"+", "Sub":"-", "Mult":"*", "MatMult":"@", "Div":"/", "Mod":"%", - "LShift":"<<", "RShift":">>", "BitOr":"|", "BitXor":"^", "BitAnd":"&", - "FloorDiv":"//", "Pow": "**"} - def _BinOp(self, t): - self.write("(") - self.dispatch(t.left) - self.write(" " + self.binop[t.op.__class__.__name__] + " ") - self.dispatch(t.right) - self.write(")") - - cmpops = {"Eq":"==", "NotEq":"!=", "Lt":"<", "LtE":"<=", "Gt":">", "GtE":">=", - "Is":"is", "IsNot":"is not", "In":"in", "NotIn":"not in"} - def _Compare(self, t): - self.write("(") - self.dispatch(t.left) - for o, e in zip(t.ops, t.comparators): - self.write(" " + self.cmpops[o.__class__.__name__] + " ") - self.dispatch(e) - self.write(")") - - boolops = {ast.And: 'and', ast.Or: 'or'} - def _BoolOp(self, t): - self.write("(") - s = " %s " % self.boolops[t.op.__class__] - interleave(lambda: self.write(s), self.dispatch, t.values) - self.write(")") - - def _Attribute(self,t): - self.dispatch(t.value) - # Special case: 3.__abs__() is a syntax error, so if t.value - # is an integer literal then we need to either parenthesize - # it or add an extra space to get 3 .__abs__(). - if isinstance(t.value, ast.Constant) and isinstance(t.value.value, int): - self.write(" ") - self.write(".") - self.write(t.attr) - - def _Call(self, t): - self.dispatch(t.func) - self.write("(") - comma = False - for e in t.args: - if comma: self.write(", ") - else: comma = True - self.dispatch(e) - for e in t.keywords: - if comma: self.write(", ") - else: comma = True - self.dispatch(e) - self.write(")") - - def _Subscript(self, t): - self.dispatch(t.value) - self.write("[") - self.dispatch(t.slice) - self.write("]") - - def _Starred(self, t): - self.write("*") - self.dispatch(t.value) - - # slice - def _Ellipsis(self, t): - self.write("...") - - def _Index(self, t): - self.dispatch(t.value) - - def _Slice(self, t): - if t.lower: - self.dispatch(t.lower) - self.write(":") - if t.upper: - self.dispatch(t.upper) - if t.step: - self.write(":") - self.dispatch(t.step) - - def _ExtSlice(self, t): - interleave(lambda: self.write(', '), self.dispatch, t.dims) - - # argument - def _arg(self, t): - self.write(t.arg) - if t.annotation: - self.write(": ") - self.dispatch(t.annotation) - - # others - def _arguments(self, t): - first = True - # normal arguments - all_args = t.posonlyargs + t.args - defaults = [None] * (len(all_args) - len(t.defaults)) + t.defaults - for index, elements in enumerate(zip(all_args, defaults), 1): - a, d = elements - if first:first = False - else: self.write(", ") - self.dispatch(a) - if d: - self.write("=") - self.dispatch(d) - if index == len(t.posonlyargs): - self.write(", /") - - # varargs, or bare '*' if no varargs but keyword-only arguments present - if t.vararg or t.kwonlyargs: - if first:first = False - else: self.write(", ") - self.write("*") - if t.vararg: - self.write(t.vararg.arg) - if t.vararg.annotation: - self.write(": ") - self.dispatch(t.vararg.annotation) - - # keyword-only arguments - if t.kwonlyargs: - for a, d in zip(t.kwonlyargs, t.kw_defaults): - if first:first = False - else: self.write(", ") - self.dispatch(a), - if d: - self.write("=") - self.dispatch(d) - - # kwargs - if t.kwarg: - if first:first = False - else: self.write(", ") - self.write("**"+t.kwarg.arg) - if t.kwarg.annotation: - self.write(": ") - self.dispatch(t.kwarg.annotation) - - def _keyword(self, t): - if t.arg is None: - self.write("**") - else: - self.write(t.arg) - self.write("=") - self.dispatch(t.value) - - def _Lambda(self, t): - self.write("(") - self.write("lambda ") - self.dispatch(t.args) - self.write(": ") - self.dispatch(t.body) - self.write(")") - - def _alias(self, t): - self.write(t.name) - if t.asname: - self.write(" as "+t.asname) - - def _withitem(self, t): - self.dispatch(t.context_expr) - if t.optional_vars: - self.write(" as ") - self.dispatch(t.optional_vars) - -def roundtrip(filename, output=sys.stdout): - with open(filename, "rb") as pyfile: - encoding = tokenize.detect_encoding(pyfile.readline)[0] - with open(filename, "r", encoding=encoding) as pyfile: - source = pyfile.read() - tree = compile(source, filename, "exec", ast.PyCF_ONLY_AST) - Unparser(tree, output) - - - -def testdir(a): - try: - names = [n for n in os.listdir(a) if n.endswith('.py')] - except OSError: - print("Directory not readable: %s" % a, file=sys.stderr) - else: - for n in names: - fullname = os.path.join(a, n) - if os.path.isfile(fullname): - output = io.StringIO() - print('Testing %s' % fullname) - try: - roundtrip(fullname, output) - except Exception as e: - print(' Failed to compile, exception is %s' % repr(e)) - elif os.path.isdir(fullname): - testdir(fullname) - -def main(args): - if args[0] == '--testdir': - for a in args[1:]: - testdir(a) - else: - for a in args: - roundtrip(a) - -if __name__=='__main__': - main(sys.argv[1:])