summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/asyncio-eventloop.rst21
-rw-r--r--Doc/library/asyncio-stream.rst36
-rw-r--r--Doc/library/asyncio-task.rst2
-rw-r--r--Doc/reference/compound_stmts.rst4
-rw-r--r--Doc/whatsnew/3.5.rst27
-rw-r--r--Doc/whatsnew/3.6.rst57
-rw-r--r--Lib/asyncio/base_events.py23
-rw-r--r--Lib/asyncio/base_subprocess.py2
-rw-r--r--Lib/asyncio/events.py6
-rw-r--r--Lib/asyncio/futures.py4
-rw-r--r--Lib/asyncio/locks.py8
-rw-r--r--Lib/asyncio/proactor_events.py2
-rw-r--r--Lib/asyncio/queues.py4
-rw-r--r--Lib/asyncio/selector_events.py10
-rw-r--r--Lib/asyncio/streams.py71
-rw-r--r--Lib/asyncio/tasks.py14
-rw-r--r--Lib/asyncio/unix_events.py2
-rw-r--r--Lib/asyncio/windows_events.py4
-rw-r--r--Lib/idlelib/UndoDelegator.py25
-rw-r--r--Lib/idlelib/configDialog.py11
-rw-r--r--Lib/idlelib/idle_test/test_configdialog.py1
-rw-r--r--Lib/idlelib/idle_test/test_undodelegator.py134
-rw-r--r--Lib/test/test_asyncio/test_base_events.py2
-rw-r--r--Lib/test/test_asyncio/test_futures.py17
-rw-r--r--Lib/test/test_bytes.py7
-rw-r--r--Lib/tkinter/__init__.py12
-rw-r--r--Misc/NEWS12
-rw-r--r--Objects/bytearrayobject.c7
-rw-r--r--PC/launcher.c2
-rw-r--r--Python/ceval.c4
-rw-r--r--Python/importlib_external.h206
-rw-r--r--Tools/msi/buildrelease.bat2
32 files changed, 531 insertions, 208 deletions
diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst
index a25f9d1..2e529b1 100644
--- a/Doc/library/asyncio-eventloop.rst
+++ b/Doc/library/asyncio-eventloop.rst
@@ -180,6 +180,20 @@ a different clock than :func:`time.time`.
The :func:`asyncio.sleep` function.
+Futures
+-------
+
+.. method:: BaseEventLoop.create_future()
+
+ Create an :class:`asyncio.Future` object attached to the loop.
+
+ This is a preferred way to create futures in asyncio, as event
+ loop implementations can provide alternative implementations
+ of the Future class (with better performance or instrumentation).
+
+ .. versionadded:: 3.5.2
+
+
Tasks
-----
@@ -670,6 +684,13 @@ Allows customizing how exceptions are handled in the event loop.
will be a ``dict`` object (see :meth:`call_exception_handler`
documentation for details about context).
+.. method:: BaseEventLoop.get_exception_handler()
+
+ Return the exception handler, or ``None`` if the default one
+ is in use.
+
+ .. versionadded:: 3.5.2
+
.. method:: BaseEventLoop.default_exception_handler(context)
Default exception handler.
diff --git a/Doc/library/asyncio-stream.rst b/Doc/library/asyncio-stream.rst
index fa076df..08fe071 100644
--- a/Doc/library/asyncio-stream.rst
+++ b/Doc/library/asyncio-stream.rst
@@ -142,6 +142,30 @@ StreamReader
This method is a :ref:`coroutine <coroutine>`.
+ .. coroutinemethod:: readuntil(separator=b'\n')
+
+ Read data from the stream until ``separator`` is found.
+
+ On success, the data and separator will be removed from the
+ internal buffer (consumed). Returned data will include the
+ separator at the end.
+
+ Configured stream limit is used to check result. Limit sets the
+ maximal length of data that can be returned, not counting the
+ separator.
+
+ If an EOF occurs and the complete separator is still not found,
+ an :exc:`IncompleteReadError` exception will be
+ raised, and the internal buffer will be reset. The
+ :attr:`IncompleteReadError.partial` attribute may contain the
+ separator partially.
+
+ If the data cannot be read because of over limit, a
+ :exc:`LimitOverrunError` exception will be raised, and the data
+ will be left in the internal buffer, so it can be read again.
+
+ .. versionadded:: 3.5.2
+
.. method:: at_eof()
Return ``True`` if the buffer is empty and :meth:`feed_eof` was called.
@@ -251,6 +275,18 @@ IncompleteReadError
Read bytes string before the end of stream was reached (:class:`bytes`).
+LimitOverrunError
+=================
+
+.. exception:: LimitOverrunError
+
+ Reached the buffer limit while looking for a separator.
+
+ .. attribute:: consumed
+
+ Total number of to be consumed bytes.
+
+
Stream examples
===============
diff --git a/Doc/library/asyncio-task.rst b/Doc/library/asyncio-task.rst
index 6f56026..cb5fae5 100644
--- a/Doc/library/asyncio-task.rst
+++ b/Doc/library/asyncio-task.rst
@@ -677,6 +677,8 @@ Task functions
Passing ``None`` as *timeout* argument disables the manager logic.
+ .. versionadded:: 3.5.2
+
.. coroutinefunction:: wait(futures, \*, loop=None, timeout=None,\
return_when=ALL_COMPLETED)
diff --git a/Doc/reference/compound_stmts.rst b/Doc/reference/compound_stmts.rst
index 513cc15..1a29692 100644
--- a/Doc/reference/compound_stmts.rst
+++ b/Doc/reference/compound_stmts.rst
@@ -469,7 +469,7 @@ A function definition defines a user-defined function object (see section
.. productionlist::
funcdef: [`decorators`] "def" `funcname` "(" [`parameter_list`] ")" ["->" `expression`] ":" `suite`
decorators: `decorator`+
- decorator: "@" `dotted_name` ["(" [`parameter_list` [","]] ")"] NEWLINE
+ decorator: "@" `dotted_name` ["(" [`argument_list` [","]] ")"] NEWLINE
dotted_name: `identifier` ("." `identifier`)*
parameter_list: `defparameter` ("," `defparameter`)* ["," [`parameter_list_starargs`]]
: | `parameter_list_starargs`
@@ -604,7 +604,7 @@ A class definition defines a class object (see section :ref:`types`):
.. productionlist::
classdef: [`decorators`] "class" `classname` [`inheritance`] ":" `suite`
- inheritance: "(" [`parameter_list`] ")"
+ inheritance: "(" [`argument_list`] ")"
classname: `identifier`
A class definition is an executable statement. The inheritance list usually
diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst
index 01ec64e..73a6dd1 100644
--- a/Doc/whatsnew/3.5.rst
+++ b/Doc/whatsnew/3.5.rst
@@ -822,6 +822,33 @@ Updates in 3.5.1:
method can now accept a list of hosts.
(Contributed by Yann Sionneau.)
+Updates in 3.5.2:
+
+* New :meth:`loop.create_future() <asyncio.BaseEventLoop.create_future>`
+ method to create Future objects. This allows alternative event
+ loop implementations, such as
+ `uvloop <https://github.com/MagicStack/uvloop>`_, to provide a faster
+ :class:`asyncio.Future` implementation.
+ (Contributed by Yury Selivanov.)
+
+* New :meth:`loop.get_exception_handler() <asyncio.BaseEventLoop.get_exception_handler>`
+ method to get the current exception handler.
+ (Contributed by Yury Selivanov.)
+
+* New :func:`~asyncio.timeout` context manager to simplify timeouts
+ handling code.
+ (Contributed by Andrew Svetlov.)
+
+* New :meth:`StreamReader.readuntil() <asyncio.StreamReader.readuntil>`
+ method to read data from the stream until a separator bytes
+ sequence appears.
+ (Contributed by Mark Korenberg.)
+
+* The :meth:`loop.getaddrinfo() <asyncio.BaseEventLoop.getaddrinfo>`
+ method is optimized to avoid calling the system ``getaddrinfo``
+ function if the address is already resolved.
+ (Contributed by A. Jesse Jiryu Davis.)
+
bz2
---
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
index bad0f9e..52be134 100644
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -190,6 +190,59 @@ New Modules
Improved Modules
================
+
+asyncio
+-------
+
+Since the :mod:`asyncio` module is :term:`provisional <provisional api>`,
+all changes introduced in Python 3.6 have also been backported to Python
+3.5.x.
+
+Notable changes in the :mod:`asyncio` module since Python 3.5.0:
+
+* The :func:`~asyncio.ensure_future` function and all functions that
+ use it, such as :meth:`loop.run_until_complete() <asyncio.BaseEventLoop.run_until_complete>`,
+ now accept all kinds of :term:`awaitable objects <awaitable>`.
+ (Contributed by Yury Selivanov.)
+
+* New :func:`~asyncio.run_coroutine_threadsafe` function to submit
+ coroutines to event loops from other threads.
+ (Contributed by Vincent Michel.)
+
+* New :meth:`Transport.is_closing() <asyncio.BaseTransport.is_closing>`
+ method to check if the transport is closing or closed.
+ (Contributed by Yury Selivanov.)
+
+* The :meth:`loop.create_server() <asyncio.BaseEventLoop.create_server>`
+ method can now accept a list of hosts.
+ (Contributed by Yann Sionneau.)
+
+* New :meth:`loop.create_future() <asyncio.BaseEventLoop.create_future>`
+ method to create Future objects. This allows alternative event
+ loop implementations, such as
+ `uvloop <https://github.com/MagicStack/uvloop>`_, to provide a faster
+ :class:`asyncio.Future` implementation.
+ (Contributed by Yury Selivanov.)
+
+* New :meth:`loop.get_exception_handler() <asyncio.BaseEventLoop.get_exception_handler>`
+ method to get the current exception handler.
+ (Contributed by Yury Selivanov.)
+
+* New :func:`~asyncio.timeout` context manager to simplify timeouts
+ handling code.
+ (Contributed by Andrew Svetlov.)
+
+* New :meth:`StreamReader.readuntil() <asyncio.StreamReader.readuntil>`
+ method to read data from the stream until a separator bytes
+ sequence appears.
+ (Contributed by Mark Korenberg.)
+
+* The :meth:`loop.getaddrinfo() <asyncio.BaseEventLoop.getaddrinfo>`
+ method is optimized to avoid calling the system ``getaddrinfo``
+ function if the address is already resolved.
+ (Contributed by A. Jesse Jiryu Davis.)
+
+
contextlib
----------
@@ -489,6 +542,10 @@ API and Feature Removals
:mod:`traceback` module. They were undocumented methods deprecated since
Python 3.2 and equivalent functionality is available from private methods.
+* The ``tk_menuBar()`` and ``tk_bindForTraversal()`` dummy methods in
+ :mod:`tkinter` widget classes were removed (corresponding Tk commands
+ were obsolete since Tk 4.0).
+
Porting to Python 3.6
=====================
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 99d503f..4aac4ac 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -209,7 +209,7 @@ class Server(events.AbstractServer):
def wait_closed(self):
if self.sockets is None or self._waiters is None:
return
- waiter = futures.Future(loop=self._loop)
+ waiter = self._loop.create_future()
self._waiters.append(waiter)
yield from waiter
@@ -243,6 +243,10 @@ class BaseEventLoop(events.AbstractEventLoop):
% (self.__class__.__name__, self.is_running(),
self.is_closed(), self.get_debug()))
+ def create_future(self):
+ """Create a Future object attached to the loop."""
+ return futures.Future(loop=self)
+
def create_task(self, coro):
"""Schedule a coroutine object.
@@ -537,7 +541,7 @@ class BaseEventLoop(events.AbstractEventLoop):
assert not args
assert not isinstance(func, events.TimerHandle)
if func._cancelled:
- f = futures.Future(loop=self)
+ f = self.create_future()
f.set_result(None)
return f
func, args = func._callback, func._args
@@ -580,7 +584,7 @@ class BaseEventLoop(events.AbstractEventLoop):
family=0, type=0, proto=0, flags=0):
info = _ipaddr_info(host, port, family, type, proto)
if info is not None:
- fut = futures.Future(loop=self)
+ fut = self.create_future()
fut.set_result([info])
return fut
elif self._debug:
@@ -721,7 +725,7 @@ class BaseEventLoop(events.AbstractEventLoop):
def _create_connection_transport(self, sock, protocol_factory, ssl,
server_hostname):
protocol = protocol_factory()
- waiter = futures.Future(loop=self)
+ waiter = self.create_future()
if ssl:
sslcontext = None if isinstance(ssl, bool) else ssl
transport = self._make_ssl_transport(
@@ -841,7 +845,7 @@ class BaseEventLoop(events.AbstractEventLoop):
raise exceptions[0]
protocol = protocol_factory()
- waiter = futures.Future(loop=self)
+ waiter = self.create_future()
transport = self._make_datagram_transport(
sock, protocol, r_addr, waiter)
if self._debug:
@@ -980,7 +984,7 @@ class BaseEventLoop(events.AbstractEventLoop):
@coroutine
def connect_read_pipe(self, protocol_factory, pipe):
protocol = protocol_factory()
- waiter = futures.Future(loop=self)
+ waiter = self.create_future()
transport = self._make_read_pipe_transport(pipe, protocol, waiter)
try:
@@ -997,7 +1001,7 @@ class BaseEventLoop(events.AbstractEventLoop):
@coroutine
def connect_write_pipe(self, protocol_factory, pipe):
protocol = protocol_factory()
- waiter = futures.Future(loop=self)
+ waiter = self.create_future()
transport = self._make_write_pipe_transport(pipe, protocol, waiter)
try:
@@ -1079,6 +1083,11 @@ class BaseEventLoop(events.AbstractEventLoop):
logger.info('%s: %r' % (debug_log, transport))
return transport, protocol
+ def get_exception_handler(self):
+ """Return an exception handler, or None if the default one is in use.
+ """
+ return self._exception_handler
+
def set_exception_handler(self, handler):
"""Set handler as the new event loop exception handler.
diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py
index efe0831..bf74e94 100644
--- a/Lib/asyncio/base_subprocess.py
+++ b/Lib/asyncio/base_subprocess.py
@@ -228,7 +228,7 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
if self._returncode is not None:
return self._returncode
- waiter = futures.Future(loop=self._loop)
+ waiter = self._loop.create_future()
self._exit_waiters.append(waiter)
return (yield from waiter)
diff --git a/Lib/asyncio/events.py b/Lib/asyncio/events.py
index 176a846..c48c5be 100644
--- a/Lib/asyncio/events.py
+++ b/Lib/asyncio/events.py
@@ -266,6 +266,9 @@ class AbstractEventLoop:
def time(self):
raise NotImplementedError
+ def create_future(self):
+ raise NotImplementedError
+
# Method scheduling a coroutine object: create a task.
def create_task(self, coro):
@@ -484,6 +487,9 @@ class AbstractEventLoop:
# Error handlers.
+ def get_exception_handler(self):
+ raise NotImplementedError
+
def set_exception_handler(self, handler):
raise NotImplementedError
diff --git a/Lib/asyncio/futures.py b/Lib/asyncio/futures.py
index ddb9cde..1feba4d 100644
--- a/Lib/asyncio/futures.py
+++ b/Lib/asyncio/futures.py
@@ -451,6 +451,8 @@ def wrap_future(future, *, loop=None):
return future
assert isinstance(future, concurrent.futures.Future), \
'concurrent.futures.Future is expected, got {!r}'.format(future)
- new_future = Future(loop=loop)
+ if loop is None:
+ loop = events.get_event_loop()
+ new_future = loop.create_future()
_chain_future(future, new_future)
return new_future
diff --git a/Lib/asyncio/locks.py b/Lib/asyncio/locks.py
index 34f6bc1..1804d7b 100644
--- a/Lib/asyncio/locks.py
+++ b/Lib/asyncio/locks.py
@@ -170,7 +170,7 @@ class Lock(_ContextManagerMixin):
self._locked = True
return True
- fut = futures.Future(loop=self._loop)
+ fut = self._loop.create_future()
self._waiters.append(fut)
try:
yield from fut
@@ -258,7 +258,7 @@ class Event:
if self._value:
return True
- fut = futures.Future(loop=self._loop)
+ fut = self._loop.create_future()
self._waiters.append(fut)
try:
yield from fut
@@ -320,7 +320,7 @@ class Condition(_ContextManagerMixin):
self.release()
try:
- fut = futures.Future(loop=self._loop)
+ fut = self._loop.create_future()
self._waiters.append(fut)
try:
yield from fut
@@ -433,7 +433,7 @@ class Semaphore(_ContextManagerMixin):
True.
"""
while self._value <= 0:
- fut = futures.Future(loop=self._loop)
+ fut = self._loop.create_future()
self._waiters.append(fut)
try:
yield from fut
diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py
index db16fe2..530a667 100644
--- a/Lib/asyncio/proactor_events.py
+++ b/Lib/asyncio/proactor_events.py
@@ -444,7 +444,7 @@ class BaseProactorEventLoop(base_events.BaseEventLoop):
try:
base_events._check_resolved_address(sock, address)
except ValueError as err:
- fut = futures.Future(loop=self)
+ fut = self.create_future()
fut.set_exception(err)
return fut
else:
diff --git a/Lib/asyncio/queues.py b/Lib/asyncio/queues.py
index e3a1d5e..c453f02 100644
--- a/Lib/asyncio/queues.py
+++ b/Lib/asyncio/queues.py
@@ -128,7 +128,7 @@ class Queue:
This method is a coroutine.
"""
while self.full():
- putter = futures.Future(loop=self._loop)
+ putter = self._loop.create_future()
self._putters.append(putter)
try:
yield from putter
@@ -162,7 +162,7 @@ class Queue:
This method is a coroutine.
"""
while self.empty():
- getter = futures.Future(loop=self._loop)
+ getter = self._loop.create_future()
self._getters.append(getter)
try:
yield from getter
diff --git a/Lib/asyncio/selector_events.py b/Lib/asyncio/selector_events.py
index 6838d72..29db06b 100644
--- a/Lib/asyncio/selector_events.py
+++ b/Lib/asyncio/selector_events.py
@@ -196,7 +196,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
transport = None
try:
protocol = protocol_factory()
- waiter = futures.Future(loop=self)
+ waiter = self.create_future()
if sslcontext:
transport = self._make_ssl_transport(
conn, protocol, sslcontext, waiter=waiter,
@@ -314,7 +314,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
"""
if self._debug and sock.gettimeout() != 0:
raise ValueError("the socket must be non-blocking")
- fut = futures.Future(loop=self)
+ fut = self.create_future()
self._sock_recv(fut, False, sock, n)
return fut
@@ -352,7 +352,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
"""
if self._debug and sock.gettimeout() != 0:
raise ValueError("the socket must be non-blocking")
- fut = futures.Future(loop=self)
+ fut = self.create_future()
if data:
self._sock_sendall(fut, False, sock, data)
else:
@@ -395,7 +395,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
"""
if self._debug and sock.gettimeout() != 0:
raise ValueError("the socket must be non-blocking")
- fut = futures.Future(loop=self)
+ fut = self.create_future()
try:
base_events._check_resolved_address(sock, address)
except ValueError as err:
@@ -453,7 +453,7 @@ class BaseSelectorEventLoop(base_events.BaseEventLoop):
"""
if self._debug and sock.gettimeout() != 0:
raise ValueError("the socket must be non-blocking")
- fut = futures.Future(loop=self)
+ fut = self.create_future()
self._sock_accept(fut, False, sock)
return fut
diff --git a/Lib/asyncio/streams.py b/Lib/asyncio/streams.py
index b7b0485..0345a3d 100644
--- a/Lib/asyncio/streams.py
+++ b/Lib/asyncio/streams.py
@@ -14,13 +14,12 @@ if hasattr(socket, 'AF_UNIX'):
from . import coroutines
from . import compat
from . import events
-from . import futures
from . import protocols
from .coroutines import coroutine
from .log import logger
-_DEFAULT_LIMIT = 2**16
+_DEFAULT_LIMIT = 2 ** 16
class IncompleteReadError(EOFError):
@@ -38,15 +37,13 @@ class IncompleteReadError(EOFError):
class LimitOverrunError(Exception):
- """Reached buffer limit while looking for the separator.
+ """Reached the buffer limit while looking for a separator.
Attributes:
- - message: error message
- - consumed: total number of bytes that should be consumed
+ - consumed: total number of to be consumed bytes.
"""
def __init__(self, message, consumed):
super().__init__(message)
- self.message = message
self.consumed = consumed
@@ -132,7 +129,6 @@ if hasattr(socket, 'AF_UNIX'):
writer = StreamWriter(transport, protocol, reader, loop)
return reader, writer
-
@coroutine
def start_unix_server(client_connected_cb, path=None, *,
loop=None, limit=_DEFAULT_LIMIT, **kwds):
@@ -210,7 +206,7 @@ class FlowControlMixin(protocols.Protocol):
return
waiter = self._drain_waiter
assert waiter is None or waiter.cancelled()
- waiter = futures.Future(loop=self._loop)
+ waiter = self._loop.create_future()
self._drain_waiter = waiter
yield from waiter
@@ -416,8 +412,8 @@ class StreamReader:
self._wakeup_waiter()
if (self._transport is not None and
- not self._paused and
- len(self._buffer) > 2*self._limit):
+ not self._paused and
+ len(self._buffer) > 2 * self._limit):
try:
self._transport.pause_reading()
except NotImplementedError:
@@ -449,7 +445,7 @@ class StreamReader:
self._paused = False
self._transport.resume_reading()
- self._waiter = futures.Future(loop=self._loop)
+ self._waiter = self._loop.create_future()
try:
yield from self._waiter
finally:
@@ -489,24 +485,24 @@ class StreamReader:
@coroutine
def readuntil(self, separator=b'\n'):
- """Read chunk of data from the stream until `separator` is found.
-
- On success, chunk and its separator will be removed from internal buffer
- (i.e. consumed). Returned chunk will include separator at the end.
+ """Read data from the stream until ``separator`` is found.
- Configured stream limit is used to check result. Limit means maximal
- length of chunk that can be returned, not counting the separator.
+ On success, the data and separator will be removed from the
+ internal buffer (consumed). Returned data will include the
+ separator at the end.
- If EOF occurs and complete separator still not found,
- IncompleteReadError(<partial data>, None) will be raised and internal
- buffer becomes empty. This partial data may contain a partial separator.
+ Configured stream limit is used to check result. Limit sets the
+ maximal length of data that can be returned, not counting the
+ separator.
- If chunk cannot be read due to overlimit, LimitOverrunError will be raised
- and data will be left in internal buffer, so it can be read again, in
- some different way.
+ If an EOF occurs and the complete separator is still not found,
+ an IncompleteReadError exception will be raised, and the internal
+ buffer will be reset. The IncompleteReadError.partial attribute
+ may contain the separator partially.
- If stream was paused, this function will automatically resume it if
- needed.
+ If the data cannot be read because of over limit, a
+ LimitOverrunError exception will be raised, and the data
+ will be left in the internal buffer, so it can be read again.
"""
seplen = len(separator)
if seplen == 0:
@@ -532,8 +528,8 @@ class StreamReader:
# performance problems. Even when reading MIME-encoded
# messages :)
- # `offset` is the number of bytes from the beginning of the buffer where
- # is no occurrence of `separator`.
+ # `offset` is the number of bytes from the beginning of the buffer
+ # where there is no occurrence of `separator`.
offset = 0
# Loop until we find `separator` in the buffer, exceed the buffer size,
@@ -547,14 +543,16 @@ class StreamReader:
isep = self._buffer.find(separator, offset)
if isep != -1:
- # `separator` is in the buffer. `isep` will be used later to
- # retrieve the data.
+ # `separator` is in the buffer. `isep` will be used later
+ # to retrieve the data.
break
# see upper comment for explanation.
offset = buflen + 1 - seplen
if offset > self._limit:
- raise LimitOverrunError('Separator is not found, and chunk exceed the limit', offset)
+ raise LimitOverrunError(
+ 'Separator is not found, and chunk exceed the limit',
+ offset)
# Complete message (with full separator) may be present in buffer
# even when EOF flag is set. This may happen when the last chunk
@@ -569,7 +567,8 @@ class StreamReader:
yield from self._wait_for_data('readuntil')
if isep > self._limit:
- raise LimitOverrunError('Separator is found, but chunk is longer than limit', isep)
+ raise LimitOverrunError(
+ 'Separator is found, but chunk is longer than limit', isep)
chunk = self._buffer[:isep + seplen]
del self._buffer[:isep + seplen]
@@ -591,7 +590,8 @@ class StreamReader:
received before any byte is read, this function returns empty byte
object.
- Returned value is not limited with limit, configured at stream creation.
+ Returned value is not limited with limit, configured at stream
+ creation.
If stream was paused, this function will automatically resume it if
needed.
@@ -630,13 +630,14 @@ class StreamReader:
def readexactly(self, n):
"""Read exactly `n` bytes.
- Raise an `IncompleteReadError` if EOF is reached before `n` bytes can be
- read. The `IncompleteReadError.partial` attribute of the exception will
+ Raise an IncompleteReadError if EOF is reached before `n` bytes can be
+ read. The IncompleteReadError.partial attribute of the exception will
contain the partial read bytes.
if n is zero, return empty bytes object.
- Returned value is not limited with limit, configured at stream creation.
+ Returned value is not limited with limit, configured at stream
+ creation.
If stream was paused, this function will automatically resume it if
needed.
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index cab4998..81510ba 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -373,7 +373,7 @@ def wait_for(fut, timeout, *, loop=None):
if timeout is None:
return (yield from fut)
- waiter = futures.Future(loop=loop)
+ waiter = loop.create_future()
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
cb = functools.partial(_release_waiter, waiter)
@@ -406,7 +406,7 @@ def _wait(fs, timeout, return_when, loop):
The fs argument must be a collection of Futures.
"""
assert fs, 'Set of Futures is empty.'
- waiter = futures.Future(loop=loop)
+ waiter = loop.create_future()
timeout_handle = None
if timeout is not None:
timeout_handle = loop.call_later(timeout, _release_waiter, waiter)
@@ -507,7 +507,9 @@ def sleep(delay, result=None, *, loop=None):
yield
return result
- future = futures.Future(loop=loop)
+ if loop is None:
+ loop = events.get_event_loop()
+ future = loop.create_future()
h = future._loop.call_later(delay,
futures._set_result_unless_cancelled,
future, result)
@@ -604,7 +606,9 @@ def gather(*coros_or_futures, loop=None, return_exceptions=False):
be cancelled.)
"""
if not coros_or_futures:
- outer = futures.Future(loop=loop)
+ if loop is None:
+ loop = events.get_event_loop()
+ outer = loop.create_future()
outer.set_result([])
return outer
@@ -692,7 +696,7 @@ def shield(arg, *, loop=None):
# Shortcut.
return inner
loop = inner._loop
- outer = futures.Future(loop=loop)
+ outer = loop.create_future()
def _done_callback(inner):
if outer.cancelled():
diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py
index 666706f..ce49c4f 100644
--- a/Lib/asyncio/unix_events.py
+++ b/Lib/asyncio/unix_events.py
@@ -177,7 +177,7 @@ class _UnixSelectorEventLoop(selector_events.BaseSelectorEventLoop):
stdin, stdout, stderr, bufsize,
extra=None, **kwargs):
with events.get_child_watcher() as watcher:
- waiter = futures.Future(loop=self)
+ waiter = self.create_future()
transp = _UnixSubprocessTransport(self, protocol, args, shell,
stdin, stdout, stderr, bufsize,
waiter=waiter, extra=extra,
diff --git a/Lib/asyncio/windows_events.py b/Lib/asyncio/windows_events.py
index 7be3e02..668fe14 100644
--- a/Lib/asyncio/windows_events.py
+++ b/Lib/asyncio/windows_events.py
@@ -366,7 +366,7 @@ class ProactorEventLoop(proactor_events.BaseProactorEventLoop):
def _make_subprocess_transport(self, protocol, args, shell,
stdin, stdout, stderr, bufsize,
extra=None, **kwargs):
- waiter = futures.Future(loop=self)
+ waiter = self.create_future()
transp = _WindowsSubprocessTransport(self, protocol, args, shell,
stdin, stdout, stderr, bufsize,
waiter=waiter, extra=extra,
@@ -417,7 +417,7 @@ class IocpProactor:
return tmp
def _result(self, value):
- fut = futures.Future(loop=self._loop)
+ fut = self._loop.create_future()
fut.set_result(value)
return fut
diff --git a/Lib/idlelib/UndoDelegator.py b/Lib/idlelib/UndoDelegator.py
index 04c1cf5..1c2502d 100644
--- a/Lib/idlelib/UndoDelegator.py
+++ b/Lib/idlelib/UndoDelegator.py
@@ -336,30 +336,33 @@ class CommandSequence(Command):
self.depth = self.depth + incr
return self.depth
-def _undo_delegator(parent):
+
+def _undo_delegator(parent): # htest #
+ import re
+ import tkinter as tk
from idlelib.Percolator import Percolator
- root = Tk()
- root.title("Test UndoDelegator")
+ undowin = tk.Toplevel()
+ undowin.title("Test UndoDelegator")
width, height, x, y = list(map(int, re.split('[x+]', parent.geometry())))
- root.geometry("+%d+%d"%(x, y + 150))
+ undowin.geometry("+%d+%d"%(x, y + 150))
- text = Text(root)
- text.config(height=10)
+ text = Text(undowin, height=10)
text.pack()
text.focus_set()
p = Percolator(text)
d = UndoDelegator()
p.insertfilter(d)
- undo = Button(root, text="Undo", command=lambda:d.undo_event(None))
+ undo = Button(undowin, text="Undo", command=lambda:d.undo_event(None))
undo.pack(side='left')
- redo = Button(root, text="Redo", command=lambda:d.redo_event(None))
+ redo = Button(undowin, text="Redo", command=lambda:d.redo_event(None))
redo.pack(side='left')
- dump = Button(root, text="Dump", command=lambda:d.dump_event(None))
+ dump = Button(undowin, text="Dump", command=lambda:d.dump_event(None))
dump.pack(side='left')
- root.mainloop()
-
if __name__ == "__main__":
+ import unittest
+ unittest.main('idlelib.idle_test.test_undodelegator', verbosity=2,
+ exit=False)
from idlelib.idle_test.htest import run
run(_undo_delegator)
diff --git a/Lib/idlelib/configDialog.py b/Lib/idlelib/configDialog.py
index f00db39..b702253 100644
--- a/Lib/idlelib/configDialog.py
+++ b/Lib/idlelib/configDialog.py
@@ -483,6 +483,17 @@ class ConfigDialog(Toplevel):
self.autoSave.trace_variable('w', self.VarChanged_autoSave)
self.encoding.trace_variable('w', self.VarChanged_encoding)
+ def remove_var_callbacks(self):
+ "Remove callbacks to prevent memory leaks."
+ for var in (
+ self.fontSize, self.fontName, self.fontBold,
+ self.spaceNum, self.colour, self.builtinTheme,
+ self.customTheme, self.themeIsBuiltin, self.highlightTarget,
+ self.keyBinding, self.builtinKeys, self.customKeys,
+ self.keysAreBuiltin, self.winWidth, self.winHeight,
+ self.startupEdit, self.autoSave, self.encoding,):
+ var.trace_vdelete('w', var.trace_vinfo()[0][1])
+
def VarChanged_font(self, *params):
'''When one font attribute changes, save them all, as they are
not independent from each other. In particular, when we are
diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py
index 6883123..fab860b 100644
--- a/Lib/idlelib/idle_test/test_configdialog.py
+++ b/Lib/idlelib/idle_test/test_configdialog.py
@@ -25,6 +25,7 @@ class ConfigDialogTest(unittest.TestCase):
def test_dialog(self):
d=ConfigDialog(self.root, 'Test', _utest=True)
+ d.remove_var_callbacks()
d.destroy()
diff --git a/Lib/idlelib/idle_test/test_undodelegator.py b/Lib/idlelib/idle_test/test_undodelegator.py
new file mode 100644
index 0000000..2657984
--- /dev/null
+++ b/Lib/idlelib/idle_test/test_undodelegator.py
@@ -0,0 +1,134 @@
+"""Unittest for UndoDelegator in idlelib.UndoDelegator.
+
+Coverage about 80% (retest).
+"""
+from test.support import requires
+requires('gui')
+
+import unittest
+from unittest.mock import Mock
+from tkinter import Text, Tk
+from idlelib.UndoDelegator import UndoDelegator
+from idlelib.Percolator import Percolator
+
+
+class UndoDelegatorTest(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ cls.root = Tk()
+ cls.text = Text(cls.root)
+ cls.percolator = Percolator(cls.text)
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.percolator.redir.close()
+ cls.root.destroy()
+ del cls.percolator, cls.text, cls.root
+
+ def setUp(self):
+ self.delegator = UndoDelegator()
+ self.percolator.insertfilter(self.delegator)
+ self.delegator.bell = Mock(wraps=self.delegator.bell)
+
+ def tearDown(self):
+ self.percolator.removefilter(self.delegator)
+ self.text.delete('1.0', 'end')
+ self.delegator.resetcache()
+
+ def test_undo_event(self):
+ text = self.text
+
+ text.insert('insert', 'foobar')
+ text.insert('insert', 'h')
+ text.event_generate('<<undo>>')
+ self.assertEqual(text.get('1.0', 'end'), '\n')
+
+ text.insert('insert', 'foo')
+ text.insert('insert', 'bar')
+ text.delete('1.2', '1.4')
+ text.insert('insert', 'hello')
+ text.event_generate('<<undo>>')
+ self.assertEqual(text.get('1.0', '1.4'), 'foar')
+ text.event_generate('<<undo>>')
+ self.assertEqual(text.get('1.0', '1.6'), 'foobar')
+ text.event_generate('<<undo>>')
+ self.assertEqual(text.get('1.0', '1.3'), 'foo')
+ text.event_generate('<<undo>>')
+ self.delegator.undo_event('event')
+ self.assertTrue(self.delegator.bell.called)
+
+ def test_redo_event(self):
+ text = self.text
+
+ text.insert('insert', 'foo')
+ text.insert('insert', 'bar')
+ text.delete('1.0', '1.3')
+ text.event_generate('<<undo>>')
+ text.event_generate('<<redo>>')
+ self.assertEqual(text.get('1.0', '1.3'), 'bar')
+ text.event_generate('<<redo>>')
+ self.assertTrue(self.delegator.bell.called)
+
+ def test_dump_event(self):
+ """
+ Dump_event cannot be tested directly without changing
+ environment variables. So, test statements in dump_event
+ indirectly
+ """
+ text = self.text
+ d = self.delegator
+
+ text.insert('insert', 'foo')
+ text.insert('insert', 'bar')
+ text.delete('1.2', '1.4')
+ self.assertTupleEqual((d.pointer, d.can_merge), (3, True))
+ text.event_generate('<<undo>>')
+ self.assertTupleEqual((d.pointer, d.can_merge), (2, False))
+
+ def test_get_set_saved(self):
+ # test the getter method get_saved
+ # test the setter method set_saved
+ # indirectly test check_saved
+ d = self.delegator
+
+ self.assertTrue(d.get_saved())
+ self.text.insert('insert', 'a')
+ self.assertFalse(d.get_saved())
+ d.saved_change_hook = Mock()
+
+ d.set_saved(True)
+ self.assertEqual(d.pointer, d.saved)
+ self.assertTrue(d.saved_change_hook.called)
+
+ d.set_saved(False)
+ self.assertEqual(d.saved, -1)
+ self.assertTrue(d.saved_change_hook.called)
+
+ def test_undo_start_stop(self):
+ # test the undo_block_start and undo_block_stop methods
+ text = self.text
+
+ text.insert('insert', 'foo')
+ self.delegator.undo_block_start()
+ text.insert('insert', 'bar')
+ text.insert('insert', 'bar')
+ self.delegator.undo_block_stop()
+ self.assertEqual(text.get('1.0', '1.3'), 'foo')
+
+ # test another code path
+ self.delegator.undo_block_start()
+ text.insert('insert', 'bar')
+ self.delegator.undo_block_stop()
+ self.assertEqual(text.get('1.0', '1.3'), 'foo')
+
+ def test_addcmd(self):
+ text = self.text
+ # when number of undo operations exceeds max_undo
+ self.delegator.max_undo = max_undo = 10
+ for i in range(max_undo + 10):
+ text.insert('insert', 'foo')
+ self.assertLessEqual(len(self.delegator.undolist), max_undo)
+
+if __name__ == '__main__':
+ unittest.main(verbosity=2, exit=False)
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
index a74ac89..ef93dc0 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -658,8 +658,10 @@ class BaseEventLoopTests(test_utils.TestCase):
self.loop.set_debug(True)
self.loop._process_events = mock.Mock()
+ self.assertIsNone(self.loop.get_exception_handler())
mock_handler = mock.Mock()
self.loop.set_exception_handler(mock_handler)
+ self.assertIs(self.loop.get_exception_handler(), mock_handler)
handle = run_loop()
mock_handler.assert_called_with(self.loop, {
'exception': MOCK_ANY,
diff --git a/Lib/test/test_asyncio/test_futures.py b/Lib/test/test_asyncio/test_futures.py
index e800106..c38c1f2 100644
--- a/Lib/test/test_asyncio/test_futures.py
+++ b/Lib/test/test_asyncio/test_futures.py
@@ -278,14 +278,15 @@ class FutureTests(test_utils.TestCase):
f2 = asyncio.wrap_future(f1)
self.assertIs(f1, f2)
- @mock.patch('asyncio.futures.events')
- def test_wrap_future_use_global_loop(self, m_events):
- def run(arg):
- return (arg, threading.get_ident())
- ex = concurrent.futures.ThreadPoolExecutor(1)
- f1 = ex.submit(run, 'oi')
- f2 = asyncio.wrap_future(f1)
- self.assertIs(m_events.get_event_loop.return_value, f2._loop)
+ def test_wrap_future_use_global_loop(self):
+ with mock.patch('asyncio.futures.events') as events:
+ events.get_event_loop = lambda: self.loop
+ def run(arg):
+ return (arg, threading.get_ident())
+ ex = concurrent.futures.ThreadPoolExecutor(1)
+ f1 = ex.submit(run, 'oi')
+ f2 = asyncio.wrap_future(f1)
+ self.assertIs(self.loop, f2._loop)
def test_wrap_future_cancel(self):
f1 = concurrent.futures.Future()
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index 5309a97..1cedd3a 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -1177,6 +1177,13 @@ class ByteArrayTest(BaseBytesTest, unittest.TestCase):
b.remove(Indexable(ord('e')))
self.assertEqual(b, b'')
+ # test values outside of the ascii range: (0, 127)
+ c = bytearray([126, 127, 128, 129])
+ c.remove(127)
+ self.assertEqual(c, bytes([126, 128, 129]))
+ c.remove(129)
+ self.assertEqual(c, bytes([126, 128]))
+
def test_pop(self):
b = bytearray(b'world')
self.assertEqual(b.pop(), ord('d'))
diff --git a/Lib/tkinter/__init__.py b/Lib/tkinter/__init__.py
index 7fbe147..357385e 100644
--- a/Lib/tkinter/__init__.py
+++ b/Lib/tkinter/__init__.py
@@ -468,12 +468,6 @@ class Misc:
disabledForeground, insertBackground, troughColor."""
self.tk.call(('tk_setPalette',)
+ _flatten(args) + _flatten(list(kw.items())))
- def tk_menuBar(self, *args):
- """Do not use. Needed in Tk 3.6 and earlier."""
- # obsolete since Tk 4.0
- import warnings
- warnings.warn('tk_menuBar() does nothing and will be removed in 3.6',
- DeprecationWarning, stacklevel=2)
def wait_variable(self, name='PY_VAR'):
"""Wait until the variable is modified.
@@ -2705,12 +2699,6 @@ class Menu(Widget):
def tk_popup(self, x, y, entry=""):
"""Post the menu at position X,Y with entry ENTRY."""
self.tk.call('tk_popup', self._w, x, y, entry)
- def tk_bindForTraversal(self):
- # obsolete since Tk 4.0
- import warnings
- warnings.warn('tk_bindForTraversal() does nothing and '
- 'will be removed in 3.6',
- DeprecationWarning, stacklevel=2)
def activate(self, index):
"""Activate entry at INDEX."""
self.tk.call(self._w, 'activate', index)
diff --git a/Misc/NEWS b/Misc/NEWS
index 2043ae3..cbea5fd 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,11 @@ Release date: 2016-05-16
Core and Builtins
-----------------
+- Issue #26991: Fix possible refleak when creating a function with annotations.
+
+- Issue #27039: Fixed bytearray.remove() for values greater than 127. Based on
+ patch by Joe Jevnik.
+
- Issue #23640: int.from_bytes() no longer bypasses constructors for subclasses.
- Issue #27005: Optimized the float.fromhex() class method for exact float.
@@ -289,6 +294,9 @@ Core and Builtins
Library
-------
+- Issue #27031: Removed dummy methods in Tkinter widget classes: tk_menuBar()
+ and tk_bindForTraversal().
+
- Issue #14132: Fix urllib.request redirect handling when the target only has
a query string. Original fix by Ján Janech.
@@ -988,6 +996,10 @@ Library
- Issue #26848: Fix asyncio/subprocess.communicate() to handle empty input.
Patch by Jack O'Connor.
+- Issue #27040: Add loop.get_exception_handler method
+
+- Issue #27041: asyncio: Add loop.create_future method
+
IDLE
----
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index 9457768..b7dfd6f 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -1734,11 +1734,8 @@ bytearray_remove_impl(PyByteArrayObject *self, int value)
Py_ssize_t where, n = Py_SIZE(self);
char *buf = PyByteArray_AS_STRING(self);
- for (where = 0; where < n; where++) {
- if (buf[where] == value)
- break;
- }
- if (where == n) {
+ where = stringlib_find_char(buf, n, value);
+ if (where < 0) {
PyErr_SetString(PyExc_ValueError, "value not found in bytearray");
return NULL;
}
diff --git a/PC/launcher.c b/PC/launcher.c
index 89a3ea2..e5f2cea 100644
--- a/PC/launcher.c
+++ b/PC/launcher.c
@@ -1082,7 +1082,7 @@ static PYC_MAGIC magic_values[] = {
{ 3190, 3230, L"3.3" },
{ 3250, 3310, L"3.4" },
{ 3320, 3350, L"3.5" },
- { 3350, 3350, L"3.6" },
+ { 3360, 3361, L"3.6" },
{ 0 }
};
diff --git a/Python/ceval.c b/Python/ceval.c
index b461030..9870a55 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3291,6 +3291,7 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
PyObject *anns = PyDict_New();
if (anns == NULL) {
Py_DECREF(func);
+ Py_DECREF(names);
goto error;
}
name_ix = PyTuple_Size(names);
@@ -3306,9 +3307,11 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
if (err != 0) {
Py_DECREF(anns);
Py_DECREF(func);
+ Py_DECREF(names);
goto error;
}
}
+ Py_DECREF(names);
if (PyFunction_SetAnnotations(func, anns) != 0) {
/* Can't happen unless
@@ -3318,7 +3321,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
goto error;
}
Py_DECREF(anns);
- Py_DECREF(names);
}
/* XXX Maybe this should be a separate opcode? */
diff --git a/Python/importlib_external.h b/Python/importlib_external.h
index 840e9c4..d99abfb 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -368,7 +368,7 @@ const unsigned char _Py_M__importlib_external[] = {
103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97,
109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111,
- 117,114,99,101,245,0,0,0,115,46,0,0,0,0,18,12,
+ 117,114,99,101,248,0,0,0,115,46,0,0,0,0,18,12,
1,9,1,7,1,12,1,6,1,12,1,18,1,18,1,24,
1,12,1,12,1,12,1,36,1,12,1,18,1,9,2,12,
1,12,1,12,1,12,1,21,1,21,1,114,79,0,0,0,
@@ -447,7 +447,7 @@ const unsigned char _Py_M__importlib_external[] = {
101,118,101,108,90,13,98,97,115,101,95,102,105,108,101,110,
97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,218,17,115,111,117,114,99,101,95,102,114,111,109,95,
- 99,97,99,104,101,33,1,0,0,115,44,0,0,0,0,9,
+ 99,97,99,104,101,36,1,0,0,115,44,0,0,0,0,9,
18,1,12,1,18,1,18,1,12,1,9,1,15,1,15,1,
12,1,9,1,15,1,12,1,22,1,15,1,9,1,12,1,
22,1,12,1,9,1,12,1,19,1,114,85,0,0,0,99,
@@ -484,7 +484,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,114,36,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,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,15,
- 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,66,
+ 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,69,
1,0,0,115,20,0,0,0,0,7,18,1,4,1,24,1,
35,1,4,1,3,1,16,1,19,1,21,1,114,91,0,0,
0,99,1,0,0,0,0,0,0,0,1,0,0,0,11,0,
@@ -499,7 +499,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,114,79,0,0,0,114,66,0,0,0,114,74,0,0,
0,41,1,218,8,102,105,108,101,110,97,109,101,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,103,
- 101,116,95,99,97,99,104,101,100,85,1,0,0,115,16,0,
+ 101,116,95,99,97,99,104,101,100,88,1,0,0,115,16,0,
0,0,0,1,21,1,3,1,14,1,13,1,8,1,21,1,
4,2,114,95,0,0,0,99,1,0,0,0,0,0,0,0,
2,0,0,0,11,0,0,0,67,0,0,0,115,60,0,0,
@@ -514,7 +514,7 @@ const unsigned char _Py_M__importlib_external[] = {
114,39,0,0,0,114,41,0,0,0,114,40,0,0,0,41,
2,114,35,0,0,0,114,42,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,10,95,99,97,108,
- 99,95,109,111,100,101,97,1,0,0,115,12,0,0,0,0,
+ 99,95,109,111,100,101,100,1,0,0,115,12,0,0,0,0,
2,3,1,19,1,13,1,11,3,10,1,114,97,0,0,0,
99,1,0,0,0,0,0,0,0,3,0,0,0,11,0,0,
0,3,0,0,0,115,84,0,0,0,100,1,0,135,0,0,
@@ -554,7 +554,7 @@ const unsigned char _Py_M__importlib_external[] = {
103,115,90,6,107,119,97,114,103,115,41,1,218,6,109,101,
116,104,111,100,114,4,0,0,0,114,5,0,0,0,218,19,
95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,
- 112,101,114,117,1,0,0,115,12,0,0,0,0,1,12,1,
+ 112,101,114,120,1,0,0,115,12,0,0,0,0,1,12,1,
12,1,15,1,6,1,25,1,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,
@@ -573,7 +573,7 @@ const unsigned char _Py_M__importlib_external[] = {
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,52,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,218,5,95,119,114,97,112,128,1,
+ 0,0,114,5,0,0,0,218,5,95,119,114,97,112,131,1,
0,0,115,8,0,0,0,0,1,25,1,15,1,29,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,3,218,10,95,
@@ -581,7 +581,7 @@ const unsigned char _Py_M__importlib_external[] = {
78,97,109,101,69,114,114,111,114,41,3,114,102,0,0,0,
114,103,0,0,0,114,113,0,0,0,114,4,0,0,0,41,
1,114,102,0,0,0,114,5,0,0,0,218,11,95,99,104,
- 101,99,107,95,110,97,109,101,109,1,0,0,115,14,0,0,
+ 101,99,107,95,110,97,109,101,112,1,0,0,115,14,0,0,
0,0,8,21,7,3,1,13,1,13,2,17,5,13,1,114,
116,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,
0,4,0,0,0,67,0,0,0,115,84,0,0,0,124,0,
@@ -611,7 +611,7 @@ const unsigned char _Py_M__importlib_external[] = {
218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17,
95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105,
- 109,137,1,0,0,115,10,0,0,0,0,10,21,1,24,1,
+ 109,140,1,0,0,115,10,0,0,0,0,10,21,1,24,1,
6,1,29,1,114,123,0,0,0,99,4,0,0,0,0,0,
0,0,11,0,0,0,19,0,0,0,67,0,0,0,115,252,
1,0,0,105,0,0,125,4,0,124,2,0,100,1,0,107,
@@ -698,7 +698,7 @@ const unsigned char _Py_M__importlib_external[] = {
218,11,115,111,117,114,99,101,95,115,105,122,101,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,25,95,118,
97,108,105,100,97,116,101,95,98,121,116,101,99,111,100,101,
- 95,104,101,97,100,101,114,154,1,0,0,115,76,0,0,0,
+ 95,104,101,97,100,101,114,157,1,0,0,115,76,0,0,0,
0,11,6,1,12,1,13,3,6,1,12,1,10,1,16,1,
16,1,16,1,12,1,18,1,16,1,18,1,18,1,15,1,
16,1,15,1,18,1,15,1,16,1,12,1,12,1,3,1,
@@ -729,7 +729,7 @@ const unsigned char _Py_M__importlib_external[] = {
5,114,53,0,0,0,114,98,0,0,0,114,89,0,0,0,
114,90,0,0,0,218,4,99,111,100,101,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,109,
- 112,105,108,101,95,98,121,116,101,99,111,100,101,209,1,0,
+ 112,105,108,101,95,98,121,116,101,99,111,100,101,212,1,0,
0,115,16,0,0,0,0,2,15,1,15,1,16,1,12,1,
16,1,4,2,18,1,114,141,0,0,0,114,59,0,0,0,
99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0,
@@ -749,7 +749,7 @@ const unsigned char _Py_M__importlib_external[] = {
100,117,109,112,115,41,4,114,140,0,0,0,114,126,0,0,
0,114,134,0,0,0,114,53,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,17,95,99,111,100,
- 101,95,116,111,95,98,121,116,101,99,111,100,101,221,1,0,
+ 101,95,116,111,95,98,121,116,101,99,111,100,101,224,1,0,
0,115,10,0,0,0,0,3,12,1,19,1,19,1,22,1,
114,144,0,0,0,99,1,0,0,0,0,0,0,0,5,0,
0,0,4,0,0,0,67,0,0,0,115,89,0,0,0,100,
@@ -778,7 +778,7 @@ const unsigned char _Py_M__importlib_external[] = {
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,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,13,100,101,99,111,
- 100,101,95,115,111,117,114,99,101,231,1,0,0,115,10,0,
+ 100,101,95,115,111,117,114,99,101,234,1,0,0,115,10,0,
0,0,0,5,12,1,18,1,15,1,18,1,114,149,0,0,
0,114,120,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,
@@ -843,7 +843,7 @@ const unsigned char _Py_M__importlib_external[] = {
102,105,120,101,115,114,153,0,0,0,90,7,100,105,114,110,
97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,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,248,1,0,0,115,
+ 108,101,95,108,111,99,97,116,105,111,110,251,1,0,0,115,
60,0,0,0,0,12,12,4,6,1,15,2,3,1,19,1,
13,1,5,8,24,1,9,3,12,1,22,1,21,1,15,1,
9,1,5,2,4,3,12,2,15,1,3,1,19,1,13,1,
@@ -883,7 +883,7 @@ const unsigned char _Py_M__importlib_external[] = {
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,218,3,107,101,121,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,218,14,95,
- 111,112,101,110,95,114,101,103,105,115,116,114,121,70,2,0,
+ 111,112,101,110,95,114,101,103,105,115,116,114,121,73,2,0,
0,115,8,0,0,0,0,2,3,1,23,1,13,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,
@@ -911,7 +911,7 @@ const unsigned char _Py_M__importlib_external[] = {
121,95,107,101,121,114,165,0,0,0,90,4,104,107,101,121,
218,8,102,105,108,101,112,97,116,104,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,218,16,95,115,101,97,114,
- 99,104,95,114,101,103,105,115,116,114,121,77,2,0,0,115,
+ 99,104,95,114,101,103,105,115,116,114,121,80,2,0,0,115,
22,0,0,0,0,2,9,1,12,2,9,1,15,1,26,1,
3,1,18,1,29,1,13,1,9,1,122,38,87,105,110,100,
111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,
@@ -936,7 +936,7 @@ const unsigned char _Py_M__importlib_external[] = {
103,101,116,114,171,0,0,0,114,120,0,0,0,114,160,0,
0,0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,9,102,105,110,100,95,115,112,101,
- 99,92,2,0,0,115,26,0,0,0,0,2,15,1,12,1,
+ 99,95,2,0,0,115,26,0,0,0,0,2,15,1,12,1,
4,1,3,1,14,1,13,1,9,1,22,1,21,1,9,1,
15,1,9,1,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,
@@ -955,7 +955,7 @@ const unsigned char _Py_M__importlib_external[] = {
175,0,0,0,114,120,0,0,0,41,4,114,164,0,0,0,
114,119,0,0,0,114,35,0,0,0,114,158,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,11,
- 102,105,110,100,95,109,111,100,117,108,101,108,2,0,0,115,
+ 102,105,110,100,95,109,111,100,117,108,101,111,2,0,0,115,
8,0,0,0,0,7,18,1,12,1,7,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,
@@ -964,7 +964,7 @@ const unsigned char _Py_M__importlib_external[] = {
167,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,
100,114,166,0,0,0,114,172,0,0,0,114,175,0,0,0,
114,176,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,162,0,0,0,58,2,
+ 4,0,0,0,114,5,0,0,0,114,162,0,0,0,61,2,
0,0,115,20,0,0,0,12,2,6,3,6,3,6,2,6,
2,18,7,18,15,3,1,21,15,3,1,114,162,0,0,0,
99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
@@ -1002,7 +1002,7 @@ const unsigned char _Py_M__importlib_external[] = {
100,0,0,0,114,119,0,0,0,114,94,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,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,153,0,0,0,127,2,0,0,
+ 0,0,114,5,0,0,0,114,153,0,0,0,130,2,0,0,
115,8,0,0,0,0,3,25,1,22,1,19,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,
@@ -1013,7 +1013,7 @@ const unsigned char _Py_M__importlib_external[] = {
111,110,46,78,114,4,0,0,0,41,2,114,100,0,0,0,
114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,13,99,114,101,97,116,101,95,109,111,100,
- 117,108,101,135,2,0,0,115,0,0,0,0,122,27,95,76,
+ 117,108,101,138,2,0,0,115,0,0,0,0,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,3,0,0,0,4,0,0,0,67,0,0,0,115,80,
@@ -1034,7 +1034,7 @@ const unsigned char _Py_M__importlib_external[] = {
101,99,114,111,0,0,0,41,3,114,100,0,0,0,218,6,
109,111,100,117,108,101,114,140,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,11,101,120,101,99,
- 95,109,111,100,117,108,101,138,2,0,0,115,10,0,0,0,
+ 95,109,111,100,117,108,101,141,2,0,0,115,10,0,0,0,
0,2,18,1,12,1,9,1,15,1,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,2,0,
@@ -1045,14 +1045,14 @@ const unsigned char _Py_M__importlib_external[] = {
114,0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,
108,101,95,115,104,105,109,41,2,114,100,0,0,0,114,119,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,218,11,108,111,97,100,95,109,111,100,117,108,101,146,
+ 0,0,218,11,108,111,97,100,95,109,111,100,117,108,101,149,
2,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,105,0,0,0,114,104,0,
0,0,114,106,0,0,0,114,107,0,0,0,114,153,0,0,
0,114,180,0,0,0,114,185,0,0,0,114,187,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,178,0,0,0,122,2,0,0,115,10,0,
+ 5,0,0,0,114,178,0,0,0,125,2,0,0,115,10,0,
0,0,12,3,6,2,12,8,12,3,12,8,114,178,0,0,
0,99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
0,0,64,0,0,0,115,106,0,0,0,101,0,0,90,1,
@@ -1080,7 +1080,7 @@ const unsigned char _Py_M__importlib_external[] = {
41,1,218,7,73,79,69,114,114,111,114,41,2,114,100,0,
0,0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,10,112,97,116,104,95,109,116,105,
- 109,101,153,2,0,0,115,2,0,0,0,0,6,122,23,83,
+ 109,101,156,2,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,2,
0,0,0,3,0,0,0,67,0,0,0,115,19,0,0,0,
@@ -1115,7 +1115,7 @@ const unsigned char _Py_M__importlib_external[] = {
32,32,32,32,114,126,0,0,0,41,1,114,190,0,0,0,
41,2,114,100,0,0,0,114,35,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,218,10,112,97,116,
- 104,95,115,116,97,116,115,161,2,0,0,115,2,0,0,0,
+ 104,95,115,116,97,116,115,164,2,0,0,115,2,0,0,0,
0,11,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,4,0,0,0,3,0,0,0,67,0,0,0,
@@ -1139,7 +1139,7 @@ const unsigned char _Py_M__importlib_external[] = {
114,90,0,0,0,90,10,99,97,99,104,101,95,112,97,116,
104,114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,218,15,95,99,97,99,104,101,95,98,121,
- 116,101,99,111,100,101,174,2,0,0,115,2,0,0,0,0,
+ 116,101,99,111,100,101,177,2,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,3,0,0,0,1,0,0,0,
@@ -1156,7 +1156,7 @@ const unsigned char _Py_M__importlib_external[] = {
32,32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,
100,0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,192,0,
- 0,0,184,2,0,0,115,0,0,0,0,122,21,83,111,117,
+ 0,0,187,2,0,0,115,0,0,0,0,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,5,0,0,0,16,
0,0,0,67,0,0,0,115,105,0,0,0,124,0,0,106,
@@ -1178,7 +1178,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,0,114,119,0,0,0,114,35,0,0,0,114,147,0,
0,0,218,3,101,120,99,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,
- 99,101,191,2,0,0,115,14,0,0,0,0,2,15,1,3,
+ 99,101,194,2,0,0,115,14,0,0,0,0,2,15,1,3,
1,19,1,18,1,9,1,31,1,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,218,9,95,111,112,116,105,109,105,122,101,114,29,0,
@@ -1200,7 +1200,7 @@ const unsigned char _Py_M__importlib_external[] = {
108,101,41,4,114,100,0,0,0,114,53,0,0,0,114,35,
0,0,0,114,197,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,218,14,115,111,117,114,99,101,95,
- 116,111,95,99,111,100,101,201,2,0,0,115,4,0,0,0,
+ 116,111,95,99,111,100,101,204,2,0,0,115,4,0,0,0,
0,5,21,1,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,10,0,0,0,43,0,
@@ -1261,7 +1261,7 @@ const unsigned char _Py_M__importlib_external[] = {
89,0,0,0,218,2,115,116,114,53,0,0,0,218,10,98,
121,116,101,115,95,100,97,116,97,114,147,0,0,0,90,11,
99,111,100,101,95,111,98,106,101,99,116,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,181,0,0,0,209,
+ 114,4,0,0,0,114,5,0,0,0,114,181,0,0,0,212,
2,0,0,115,78,0,0,0,0,7,15,1,6,1,3,1,
16,1,13,1,11,2,3,1,19,1,13,1,5,2,16,1,
3,1,19,1,13,1,5,2,3,1,9,1,12,1,13,1,
@@ -1274,7 +1274,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,0,114,192,0,0,0,114,196,0,0,0,114,200,0,
0,0,114,181,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,188,0,0,0,
- 151,2,0,0,115,14,0,0,0,12,2,12,8,12,13,12,
+ 154,2,0,0,115,14,0,0,0,12,2,12,8,12,13,12,
10,12,7,12,10,18,8,114,188,0,0,0,99,0,0,0,
0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,
0,115,112,0,0,0,101,0,0,90,1,0,100,0,0,90,
@@ -1302,7 +1302,7 @@ const unsigned char _Py_M__importlib_external[] = {
32,32,32,32,32,102,105,110,100,101,114,46,78,41,2,114,
98,0,0,0,114,35,0,0,0,41,3,114,100,0,0,0,
114,119,0,0,0,114,35,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,179,0,0,0,10,3,
+ 4,0,0,0,114,5,0,0,0,114,179,0,0,0,13,3,
0,0,115,4,0,0,0,0,3,9,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,2,0,0,0,2,0,0,
@@ -1312,7 +1312,7 @@ const unsigned char _Py_M__importlib_external[] = {
2,218,9,95,95,99,108,97,115,115,95,95,114,111,0,0,
0,41,2,114,100,0,0,0,218,5,111,116,104,101,114,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,6,
- 95,95,101,113,95,95,16,3,0,0,115,4,0,0,0,0,
+ 95,95,101,113,95,95,19,3,0,0,115,4,0,0,0,0,
1,18,1,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,1,
0,0,0,3,0,0,0,67,0,0,0,115,26,0,0,0,
@@ -1320,7 +1320,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,106,2,0,131,1,0,65,83,41,1,78,41,3,218,
4,104,97,115,104,114,98,0,0,0,114,35,0,0,0,41,
1,114,100,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,218,8,95,95,104,97,115,104,95,95,20,
+ 114,5,0,0,0,218,8,95,95,104,97,115,104,95,95,23,
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,2,0,0,0,3,0,0,0,
@@ -1335,7 +1335,7 @@ const unsigned char _Py_M__importlib_external[] = {
32,32,32,32,32,32,32,41,3,218,5,115,117,112,101,114,
114,204,0,0,0,114,187,0,0,0,41,2,114,100,0,0,
0,114,119,0,0,0,41,1,114,205,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,187,0,0,0,23,3,0,0,
+ 0,0,114,5,0,0,0,114,187,0,0,0,26,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,2,0,0,0,1,0,0,0,
@@ -1346,7 +1346,7 @@ const unsigned char _Py_M__importlib_external[] = {
98,121,32,116,104,101,32,102,105,110,100,101,114,46,41,1,
114,35,0,0,0,41,2,114,100,0,0,0,114,119,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,151,0,0,0,35,3,0,0,115,2,0,0,0,0,3,
+ 114,151,0,0,0,38,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,3,0,0,0,9,0,0,0,67,0,0,0,115,42,
@@ -1359,14 +1359,14 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,0,114,50,0,0,0,90,4,114,101,97,100,41,3,
114,100,0,0,0,114,35,0,0,0,114,54,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,194,
- 0,0,0,40,3,0,0,115,4,0,0,0,0,2,21,1,
+ 0,0,0,43,3,0,0,115,4,0,0,0,0,2,21,1,
122,19,70,105,108,101,76,111,97,100,101,114,46,103,101,116,
95,100,97,116,97,41,11,114,105,0,0,0,114,104,0,0,
0,114,106,0,0,0,114,107,0,0,0,114,179,0,0,0,
114,207,0,0,0,114,209,0,0,0,114,116,0,0,0,114,
187,0,0,0,114,151,0,0,0,114,194,0,0,0,114,4,
0,0,0,114,4,0,0,0,41,1,114,205,0,0,0,114,
- 5,0,0,0,114,204,0,0,0,5,3,0,0,115,14,0,
+ 5,0,0,0,114,204,0,0,0,8,3,0,0,115,14,0,
0,0,12,3,6,2,12,6,12,4,12,3,24,12,18,5,
114,204,0,0,0,99,0,0,0,0,0,0,0,0,0,0,
0,0,4,0,0,0,64,0,0,0,115,64,0,0,0,101,
@@ -1389,7 +1389,7 @@ const unsigned char _Py_M__importlib_external[] = {
114,39,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,100,0,0,0,114,
35,0,0,0,114,202,0,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,191,0,0,0,50,3,0,
+ 0,0,0,114,5,0,0,0,114,191,0,0,0,53,3,0,
0,115,4,0,0,0,0,2,12,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,
@@ -1400,7 +1400,7 @@ const unsigned char _Py_M__importlib_external[] = {
97,0,0,0,114,192,0,0,0,41,5,114,100,0,0,0,
114,90,0,0,0,114,89,0,0,0,114,53,0,0,0,114,
42,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,193,0,0,0,55,3,0,0,115,4,0,0,
+ 0,0,0,114,193,0,0,0,58,3,0,0,115,4,0,0,
0,0,2,12,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,214,0,0,0,105,182,1,0,
@@ -1439,7 +1439,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,114,214,0,0,0,218,6,112,97,114,101,110,116,114,94,
0,0,0,114,27,0,0,0,114,23,0,0,0,114,195,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,192,0,0,0,60,3,0,0,115,42,0,0,0,0,
+ 0,114,192,0,0,0,63,3,0,0,115,42,0,0,0,0,
2,18,1,6,2,22,1,18,1,17,2,19,1,15,1,3,
1,17,1,13,2,7,1,18,3,9,1,10,1,27,1,3,
1,16,1,20,1,18,2,12,1,122,25,83,111,117,114,99,
@@ -1448,7 +1448,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,114,106,0,0,0,114,107,0,0,0,114,191,0,0,0,
114,193,0,0,0,114,192,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,212,
- 0,0,0,46,3,0,0,115,8,0,0,0,12,2,6,2,
+ 0,0,0,49,3,0,0,115,8,0,0,0,12,2,6,2,
12,5,12,5,114,212,0,0,0,99,0,0,0,0,0,0,
0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,46,
0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,
@@ -1470,7 +1470,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,114,141,0,0,0,41,5,114,100,0,0,0,114,119,0,
0,0,114,35,0,0,0,114,53,0,0,0,114,203,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,181,0,0,0,95,3,0,0,115,8,0,0,0,0,1,
+ 114,181,0,0,0,98,3,0,0,115,8,0,0,0,0,1,
15,1,15,1,24,1,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,2,0,
@@ -1480,13 +1480,13 @@ const unsigned char _Py_M__importlib_external[] = {
111,32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,
4,0,0,0,41,2,114,100,0,0,0,114,119,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 196,0,0,0,101,3,0,0,115,2,0,0,0,0,2,122,
+ 196,0,0,0,104,3,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,105,0,0,0,114,104,0,0,0,114,106,0,
0,0,114,107,0,0,0,114,181,0,0,0,114,196,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,217,0,0,0,91,3,0,0,115,6,
+ 114,5,0,0,0,114,217,0,0,0,94,3,0,0,115,6,
0,0,0,12,2,6,2,12,6,114,217,0,0,0,99,0,
0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,
0,0,0,115,136,0,0,0,101,0,0,90,1,0,100,0,
@@ -1511,7 +1511,7 @@ const unsigned char _Py_M__importlib_external[] = {
1,0,100,0,0,83,41,1,78,41,2,114,98,0,0,0,
114,35,0,0,0,41,3,114,100,0,0,0,114,98,0,0,
0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,179,0,0,0,118,3,0,0,115,4,
+ 114,5,0,0,0,114,179,0,0,0,121,3,0,0,115,4,
0,0,0,0,1,9,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,2,0,
@@ -1521,7 +1521,7 @@ const unsigned char _Py_M__importlib_external[] = {
83,41,1,78,41,2,114,205,0,0,0,114,111,0,0,0,
41,2,114,100,0,0,0,114,206,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,207,0,0,0,
- 122,3,0,0,115,4,0,0,0,0,1,18,1,122,26,69,
+ 125,3,0,0,115,4,0,0,0,0,1,18,1,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,1,0,0,0,3,0,0,0,67,0,0,0,115,26,
@@ -1529,7 +1529,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,124,0,0,106,2,0,131,1,0,65,83,41,1,78,
41,3,114,208,0,0,0,114,98,0,0,0,114,35,0,0,
0,41,1,114,100,0,0,0,114,4,0,0,0,114,4,0,
- 0,0,114,5,0,0,0,114,209,0,0,0,126,3,0,0,
+ 0,0,114,5,0,0,0,114,209,0,0,0,129,3,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,3,0,
@@ -1547,7 +1547,7 @@ const unsigned char _Py_M__importlib_external[] = {
97,109,105,99,114,129,0,0,0,114,98,0,0,0,114,35,
0,0,0,41,3,114,100,0,0,0,114,158,0,0,0,114,
184,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
- 0,0,0,114,180,0,0,0,129,3,0,0,115,10,0,0,
+ 0,0,0,114,180,0,0,0,132,3,0,0,115,10,0,0,
0,0,2,6,1,15,1,9,1,16,1,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,
@@ -1565,7 +1565,7 @@ const unsigned char _Py_M__importlib_external[] = {
97,109,105,99,114,129,0,0,0,114,98,0,0,0,114,35,
0,0,0,41,2,114,100,0,0,0,114,184,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,185,
- 0,0,0,137,3,0,0,115,6,0,0,0,0,2,19,1,
+ 0,0,0,140,3,0,0,115,6,0,0,0,0,2,19,1,
9,1,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,2,0,0,0,
@@ -1583,7 +1583,7 @@ const unsigned char _Py_M__importlib_external[] = {
41,2,114,179,0,0,0,78,114,4,0,0,0,41,2,114,
22,0,0,0,218,6,115,117,102,102,105,120,41,1,218,9,
102,105,108,101,95,110,97,109,101,114,4,0,0,0,114,5,
- 0,0,0,250,9,60,103,101,110,101,120,112,114,62,146,3,
+ 0,0,0,250,9,60,103,101,110,101,120,112,114,62,149,3,
0,0,115,2,0,0,0,6,1,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,
@@ -1592,7 +1592,7 @@ const unsigned char _Py_M__importlib_external[] = {
88,84,69,78,83,73,79,78,95,83,85,70,70,73,88,69,
83,41,2,114,100,0,0,0,114,119,0,0,0,114,4,0,
0,0,41,1,114,220,0,0,0,114,5,0,0,0,114,153,
- 0,0,0,143,3,0,0,115,6,0,0,0,0,2,19,1,
+ 0,0,0,146,3,0,0,115,6,0,0,0,0,2,19,1,
18,1,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,2,0,0,0,1,
@@ -1603,7 +1603,7 @@ const unsigned char _Py_M__importlib_external[] = {
101,97,116,101,32,97,32,99,111,100,101,32,111,98,106,101,
99,116,46,78,114,4,0,0,0,41,2,114,100,0,0,0,
114,119,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,181,0,0,0,149,3,0,0,115,2,0,
+ 5,0,0,0,114,181,0,0,0,152,3,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,2,0,0,0,1,
@@ -1613,7 +1613,7 @@ const unsigned char _Py_M__importlib_external[] = {
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,4,0,0,0,41,
2,114,100,0,0,0,114,119,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,196,0,0,0,153,
+ 114,4,0,0,0,114,5,0,0,0,114,196,0,0,0,156,
3,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,
@@ -1625,7 +1625,7 @@ const unsigned char _Py_M__importlib_external[] = {
101,32,102,105,110,100,101,114,46,41,1,114,35,0,0,0,
41,2,114,100,0,0,0,114,119,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,151,0,0,0,
- 157,3,0,0,115,2,0,0,0,0,3,122,32,69,120,116,
+ 160,3,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,105,0,0,0,114,104,0,0,0,114,106,0,0,0,114,
@@ -1633,7 +1633,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,0,114,180,0,0,0,114,185,0,0,0,114,153,0,
0,0,114,181,0,0,0,114,196,0,0,0,114,116,0,0,
0,114,151,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,218,0,0,0,110,
+ 114,4,0,0,0,114,5,0,0,0,114,218,0,0,0,113,
3,0,0,115,20,0,0,0,12,6,6,2,12,4,12,4,
12,3,12,8,12,6,12,6,12,4,12,4,114,218,0,0,
0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0,
@@ -1679,7 +1679,7 @@ const unsigned char _Py_M__importlib_external[] = {
4,114,100,0,0,0,114,98,0,0,0,114,35,0,0,0,
218,11,112,97,116,104,95,102,105,110,100,101,114,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,179,0,0,
- 0,170,3,0,0,115,8,0,0,0,0,1,9,1,9,1,
+ 0,173,3,0,0,115,8,0,0,0,0,1,9,1,9,1,
21,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,4,0,0,0,3,0,0,0,67,0,0,0,
@@ -1698,7 +1698,7 @@ const unsigned char _Py_M__importlib_external[] = {
3,100,111,116,90,2,109,101,114,4,0,0,0,114,4,0,
0,0,114,5,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,
- 176,3,0,0,115,8,0,0,0,0,2,27,1,12,2,4,
+ 179,3,0,0,115,8,0,0,0,0,2,27,1,12,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,
@@ -1711,7 +1711,7 @@ const unsigned char _Py_M__importlib_external[] = {
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,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,227,0,0,0,186,3,0,0,115,4,0,0,0,0,1,
+ 114,227,0,0,0,189,3,0,0,115,4,0,0,0,0,1,
18,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,3,0,0,0,
@@ -1729,7 +1729,7 @@ const unsigned char _Py_M__importlib_external[] = {
41,3,114,100,0,0,0,90,11,112,97,114,101,110,116,95,
112,97,116,104,114,158,0,0,0,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,218,12,95,114,101,99,97,108,
- 99,117,108,97,116,101,190,3,0,0,115,16,0,0,0,0,
+ 99,117,108,97,116,101,193,3,0,0,115,16,0,0,0,0,
2,18,1,15,1,21,3,27,1,9,1,12,1,9,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,
@@ -1738,7 +1738,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,131,1,0,83,41,1,78,41,2,218,4,105,116,101,
114,114,234,0,0,0,41,1,114,100,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,8,95,95,
- 105,116,101,114,95,95,203,3,0,0,115,2,0,0,0,0,
+ 105,116,101,114,95,95,206,3,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,3,0,0,0,0,
0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,
@@ -1746,7 +1746,7 @@ const unsigned char _Py_M__importlib_external[] = {
60,100,0,0,83,41,1,78,41,1,114,226,0,0,0,41,
3,114,100,0,0,0,218,5,105,110,100,101,120,114,35,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,218,11,95,95,115,101,116,105,116,101,109,95,95,206,3,
+ 0,218,11,95,95,115,101,116,105,116,101,109,95,95,209,3,
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,1,0,
@@ -1754,7 +1754,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,124,0,0,106,1,0,131,0,0,131,1,0,83,41,
1,78,41,2,114,31,0,0,0,114,234,0,0,0,41,1,
114,100,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,218,7,95,95,108,101,110,95,95,209,3,0,
+ 5,0,0,0,218,7,95,95,108,101,110,95,95,212,3,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,1,0,0,0,2,0,0,
@@ -1763,7 +1763,7 @@ const unsigned char _Py_M__importlib_external[] = {
78,97,109,101,115,112,97,99,101,80,97,116,104,40,123,33,
114,125,41,41,2,114,47,0,0,0,114,226,0,0,0,41,
1,114,100,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,218,8,95,95,114,101,112,114,95,95,212,
+ 114,5,0,0,0,218,8,95,95,114,101,112,114,95,95,215,
3,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,2,0,0,0,
@@ -1772,7 +1772,7 @@ const unsigned char _Py_M__importlib_external[] = {
41,1,114,234,0,0,0,41,2,114,100,0,0,0,218,4,
105,116,101,109,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95,
- 95,215,3,0,0,115,2,0,0,0,0,1,122,27,95,78,
+ 95,218,3,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,2,0,0,0,2,0,0,0,67,0,0,0,115,20,
@@ -1780,7 +1780,7 @@ const unsigned char _Py_M__importlib_external[] = {
1,0,1,100,0,0,83,41,1,78,41,2,114,226,0,0,
0,114,157,0,0,0,41,2,114,100,0,0,0,114,241,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,157,0,0,0,218,3,0,0,115,2,0,0,0,0,
+ 0,114,157,0,0,0,221,3,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,14,114,105,0,0,0,
114,104,0,0,0,114,106,0,0,0,114,107,0,0,0,114,
@@ -1788,7 +1788,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,0,114,236,0,0,0,114,238,0,0,0,114,239,0,
0,0,114,240,0,0,0,114,242,0,0,0,114,157,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,224,0,0,0,163,3,0,0,115,22,
+ 114,5,0,0,0,114,224,0,0,0,166,3,0,0,115,22,
0,0,0,12,5,6,2,12,6,12,10,12,4,12,13,12,
3,12,3,12,3,12,3,12,3,114,224,0,0,0,99,0,
0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,
@@ -1807,7 +1807,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,100,0,0,83,41,1,78,41,2,114,224,0,0,0,114,
226,0,0,0,41,4,114,100,0,0,0,114,98,0,0,0,
114,35,0,0,0,114,230,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,179,0,0,0,224,3,
+ 4,0,0,0,114,5,0,0,0,114,179,0,0,0,227,3,
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,2,0,0,
@@ -1825,21 +1825,21 @@ const unsigned char _Py_M__importlib_external[] = {
41,2,114,47,0,0,0,114,105,0,0,0,41,2,114,164,
0,0,0,114,184,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,218,11,109,111,100,117,108,101,95,
- 114,101,112,114,227,3,0,0,115,2,0,0,0,0,7,122,
+ 114,101,112,114,230,3,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,2,0,0,0,1,0,0,0,67,0,
0,0,115,4,0,0,0,100,1,0,83,41,2,78,84,114,
4,0,0,0,41,2,114,100,0,0,0,114,119,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 153,0,0,0,236,3,0,0,115,2,0,0,0,0,1,122,
+ 153,0,0,0,239,3,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,2,0,0,0,1,0,0,0,67,0,0,
0,115,4,0,0,0,100,1,0,83,41,2,78,114,30,0,
0,0,114,4,0,0,0,41,2,114,100,0,0,0,114,119,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,196,0,0,0,239,3,0,0,115,2,0,0,0,
+ 0,0,114,196,0,0,0,242,3,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,2,0,0,0,6,0,0,0,
@@ -1849,7 +1849,7 @@ const unsigned char _Py_M__importlib_external[] = {
62,114,183,0,0,0,114,198,0,0,0,84,41,1,114,199,
0,0,0,41,2,114,100,0,0,0,114,119,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,181,
- 0,0,0,242,3,0,0,115,2,0,0,0,0,1,122,25,
+ 0,0,0,245,3,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,2,0,0,0,1,0,0,0,67,0,0,0,115,4,
@@ -1858,14 +1858,14 @@ const unsigned char _Py_M__importlib_external[] = {
32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97,
116,105,111,110,46,78,114,4,0,0,0,41,2,114,100,0,
0,0,114,158,0,0,0,114,4,0,0,0,114,4,0,0,
- 0,114,5,0,0,0,114,180,0,0,0,245,3,0,0,115,
+ 0,114,5,0,0,0,114,180,0,0,0,248,3,0,0,115,
0,0,0,0,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,2,0,0,
0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,0,
0,83,41,1,78,114,4,0,0,0,41,2,114,100,0,0,
0,114,184,0,0,0,114,4,0,0,0,114,4,0,0,0,
- 114,5,0,0,0,114,185,0,0,0,248,3,0,0,115,2,
+ 114,5,0,0,0,114,185,0,0,0,251,3,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,2,0,0,0,
@@ -1884,7 +1884,7 @@ const unsigned char _Py_M__importlib_external[] = {
114,114,0,0,0,114,129,0,0,0,114,226,0,0,0,114,
186,0,0,0,41,2,114,100,0,0,0,114,119,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
- 187,0,0,0,251,3,0,0,115,6,0,0,0,0,7,9,
+ 187,0,0,0,254,3,0,0,115,6,0,0,0,0,7,9,
1,10,1,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,105,0,0,0,114,104,0,0,0,114,106,
@@ -1892,7 +1892,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,114,153,0,0,0,114,196,0,0,0,114,181,0,0,
0,114,180,0,0,0,114,185,0,0,0,114,187,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,243,0,0,0,223,3,0,0,115,16,0,
+ 5,0,0,0,114,243,0,0,0,226,3,0,0,115,16,0,
0,0,12,1,12,3,18,9,12,3,12,3,12,3,12,3,
12,3,114,243,0,0,0,99,0,0,0,0,0,0,0,0,
0,0,0,0,5,0,0,0,64,0,0,0,115,160,0,0,
@@ -1930,7 +1930,7 @@ const unsigned char _Py_M__importlib_external[] = {
101,218,6,118,97,108,117,101,115,114,108,0,0,0,114,246,
0,0,0,41,2,114,164,0,0,0,218,6,102,105,110,100,
101,114,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
- 0,114,246,0,0,0,13,4,0,0,115,6,0,0,0,0,
+ 0,114,246,0,0,0,16,4,0,0,115,6,0,0,0,0,
4,22,1,15,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,3,0,0,0,
@@ -1955,7 +1955,7 @@ const unsigned char _Py_M__importlib_external[] = {
61,0,0,0,114,118,0,0,0,114,99,0,0,0,41,3,
114,164,0,0,0,114,35,0,0,0,90,4,104,111,111,107,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,
- 11,95,112,97,116,104,95,104,111,111,107,115,21,4,0,0,
+ 11,95,112,97,116,104,95,104,111,111,107,115,24,4,0,0,
115,16,0,0,0,0,7,25,1,16,1,16,1,3,1,14,
1,13,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,
@@ -1988,7 +1988,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,41,3,114,164,0,0,0,114,35,0,0,0,114,249,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,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,38,4,0,0,115,22,0,0,0,
+ 114,95,99,97,99,104,101,41,4,0,0,115,22,0,0,0,
0,8,12,1,3,1,16,1,13,3,9,1,3,1,17,1,
13,1,15,1,18,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,
@@ -2008,7 +2008,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,114,249,0,0,0,114,120,0,0,0,114,121,0,0,0,
114,158,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,218,16,95,108,101,103,97,99,121,95,103,101,
- 116,95,115,112,101,99,60,4,0,0,115,18,0,0,0,0,
+ 116,95,115,112,101,99,63,4,0,0,115,18,0,0,0,0,
4,15,1,24,2,15,1,6,1,12,1,16,1,18,1,9,
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,
@@ -2044,7 +2044,7 @@ const unsigned char _Py_M__importlib_external[] = {
95,112,97,116,104,90,5,101,110,116,114,121,114,249,0,0,
0,114,158,0,0,0,114,121,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,218,9,95,103,101,116,
- 95,115,112,101,99,75,4,0,0,115,40,0,0,0,0,5,
+ 95,115,112,101,99,78,4,0,0,115,40,0,0,0,0,5,
6,1,13,1,21,1,3,1,15,1,12,1,15,1,21,2,
18,1,12,1,3,1,15,1,4,1,9,1,12,1,12,5,
17,2,18,1,9,1,122,20,80,97,116,104,70,105,110,100,
@@ -2071,7 +2071,7 @@ const unsigned char _Py_M__importlib_external[] = {
152,0,0,0,114,224,0,0,0,41,6,114,164,0,0,0,
114,119,0,0,0,114,35,0,0,0,114,174,0,0,0,114,
158,0,0,0,114,0,1,0,0,114,4,0,0,0,114,4,
- 0,0,0,114,5,0,0,0,114,175,0,0,0,107,4,0,
+ 0,0,0,114,5,0,0,0,114,175,0,0,0,110,4,0,
0,115,26,0,0,0,0,4,12,1,9,1,21,1,12,1,
4,1,15,1,9,1,6,3,9,1,24,1,4,2,7,2,
122,20,80,97,116,104,70,105,110,100,101,114,46,102,105,110,
@@ -2093,7 +2093,7 @@ const unsigned char _Py_M__importlib_external[] = {
32,32,32,32,32,32,32,78,41,2,114,175,0,0,0,114,
120,0,0,0,41,4,114,164,0,0,0,114,119,0,0,0,
114,35,0,0,0,114,158,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,176,0,0,0,129,4,
+ 4,0,0,0,114,5,0,0,0,114,176,0,0,0,132,4,
0,0,115,8,0,0,0,0,8,18,1,12,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,41,12,114,105,0,0,0,114,104,
@@ -2101,7 +2101,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,114,246,0,0,0,114,251,0,0,0,114,253,0,0,
0,114,254,0,0,0,114,1,1,0,0,114,175,0,0,0,
114,176,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,245,0,0,0,9,4,
+ 4,0,0,0,114,5,0,0,0,114,245,0,0,0,12,4,
0,0,115,22,0,0,0,12,2,6,2,18,8,18,17,18,
22,18,15,3,1,18,31,3,1,21,21,3,1,114,245,0,
0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,3,
@@ -2150,7 +2150,7 @@ const unsigned char _Py_M__importlib_external[] = {
1,0,124,1,0,136,0,0,102,2,0,86,1,113,3,0,
100,0,0,83,41,1,78,114,4,0,0,0,41,2,114,22,
0,0,0,114,219,0,0,0,41,1,114,120,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,221,0,0,0,158,4,
+ 4,0,0,0,114,5,0,0,0,114,221,0,0,0,161,4,
0,0,115,2,0,0,0,6,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,
@@ -2163,7 +2163,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,114,35,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,160,0,0,0,114,4,0,0,0,41,1,114,120,0,0,
- 0,114,5,0,0,0,114,179,0,0,0,152,4,0,0,115,
+ 0,114,5,0,0,0,114,179,0,0,0,155,4,0,0,115,
16,0,0,0,0,4,6,1,19,1,36,1,9,2,15,1,
9,1,12,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,
@@ -2174,7 +2174,7 @@ const unsigned char _Py_M__importlib_external[] = {
109,101,46,114,29,0,0,0,78,114,87,0,0,0,41,1,
114,4,1,0,0,41,1,114,100,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,246,0,0,0,
- 166,4,0,0,115,2,0,0,0,0,2,122,28,70,105,108,
+ 169,4,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,3,0,0,0,2,0,0,0,67,0,0,0,115,59,
@@ -2197,7 +2197,7 @@ const unsigned char _Py_M__importlib_external[] = {
32,32,32,32,32,32,32,78,41,3,114,175,0,0,0,114,
120,0,0,0,114,150,0,0,0,41,3,114,100,0,0,0,
114,119,0,0,0,114,158,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,117,0,0,0,172,4,
+ 4,0,0,0,114,5,0,0,0,114,117,0,0,0,175,4,
0,0,115,8,0,0,0,0,7,15,1,12,1,10,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,
@@ -2209,7 +2209,7 @@ const unsigned char _Py_M__importlib_external[] = {
100,0,0,0,114,159,0,0,0,114,119,0,0,0,114,35,
0,0,0,90,4,115,109,115,108,114,174,0,0,0,114,120,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
- 0,0,114,1,1,0,0,184,4,0,0,115,6,0,0,0,
+ 0,0,114,1,1,0,0,187,4,0,0,115,6,0,0,0,
0,1,15,1,18,1,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,14,0,0,0,15,0,0,0,67,0,
@@ -2272,7 +2272,7 @@ const unsigned char _Py_M__importlib_external[] = {
104,114,219,0,0,0,114,159,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,158,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,175,0,0,0,189,4,
+ 4,0,0,0,114,5,0,0,0,114,175,0,0,0,192,4,
0,0,115,70,0,0,0,0,3,6,1,19,1,3,1,34,
1,13,1,11,1,15,1,10,1,9,2,9,1,9,1,15,
2,9,1,6,2,12,1,18,1,22,1,10,1,15,1,12,
@@ -2309,7 +2309,7 @@ const unsigned char _Py_M__importlib_external[] = {
146,2,0,113,6,0,83,114,4,0,0,0,41,1,114,88,
0,0,0,41,2,114,22,0,0,0,90,2,102,110,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,250,9,60,
- 115,101,116,99,111,109,112,62,8,5,0,0,115,2,0,0,
+ 115,101,116,99,111,109,112,62,11,5,0,0,115,2,0,0,
0,9,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,
@@ -2326,7 +2326,7 @@ const unsigned char _Py_M__importlib_external[] = {
111,110,116,101,110,116,115,114,241,0,0,0,114,98,0,0,
0,114,231,0,0,0,114,219,0,0,0,90,8,110,101,119,
95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,
- 5,0,0,0,114,9,1,0,0,235,4,0,0,115,34,0,
+ 5,0,0,0,114,9,1,0,0,238,4,0,0,115,34,0,
0,0,0,2,9,1,3,1,31,1,22,3,11,3,18,1,
18,7,9,1,13,1,24,1,6,1,27,2,6,1,17,1,
9,1,18,1,122,22,70,105,108,101,70,105,110,100,101,114,
@@ -2365,7 +2365,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,41,1,114,35,0,0,0,41,2,114,164,0,0,0,114,
8,1,0,0,114,4,0,0,0,114,5,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,20,5,0,0,115,6,0,0,
+ 108,101,70,105,110,100,101,114,23,5,0,0,115,6,0,0,
0,0,2,12,1,18,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,
@@ -2373,7 +2373,7 @@ const unsigned char _Py_M__importlib_external[] = {
4,0,0,0,41,3,114,164,0,0,0,114,8,1,0,0,
114,14,1,0,0,114,4,0,0,0,41,2,114,164,0,0,
0,114,8,1,0,0,114,5,0,0,0,218,9,112,97,116,
- 104,95,104,111,111,107,10,5,0,0,115,4,0,0,0,0,
+ 104,95,104,111,111,107,13,5,0,0,115,4,0,0,0,0,
10,21,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,1,0,0,0,2,0,0,0,67,0,0,0,115,16,
@@ -2381,7 +2381,7 @@ const unsigned char _Py_M__importlib_external[] = {
1,0,83,41,2,78,122,16,70,105,108,101,70,105,110,100,
101,114,40,123,33,114,125,41,41,2,114,47,0,0,0,114,
35,0,0,0,41,1,114,100,0,0,0,114,4,0,0,0,
- 114,4,0,0,0,114,5,0,0,0,114,240,0,0,0,28,
+ 114,4,0,0,0,114,5,0,0,0,114,240,0,0,0,31,
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,
15,114,105,0,0,0,114,104,0,0,0,114,106,0,0,0,
@@ -2390,7 +2390,7 @@ const unsigned char _Py_M__importlib_external[] = {
1,0,0,114,175,0,0,0,114,9,1,0,0,114,177,0,
0,0,114,15,1,0,0,114,240,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
- 114,2,1,0,0,143,4,0,0,115,20,0,0,0,12,7,
+ 114,2,1,0,0,146,4,0,0,115,20,0,0,0,12,7,
6,2,12,14,12,4,6,2,12,12,12,5,15,46,12,31,
18,18,114,2,1,0,0,99,4,0,0,0,0,0,0,0,
6,0,0,0,11,0,0,0,67,0,0,0,115,195,0,0,
@@ -2416,7 +2416,7 @@ const unsigned char _Py_M__importlib_external[] = {
97,109,101,90,9,99,112,97,116,104,110,97,109,101,114,120,
0,0,0,114,158,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,218,14,95,102,105,120,95,117,112,
- 95,109,111,100,117,108,101,34,5,0,0,115,34,0,0,0,
+ 95,109,111,100,117,108,101,37,5,0,0,115,34,0,0,0,
0,2,15,1,15,1,6,1,6,1,12,1,12,1,18,2,
15,1,6,1,21,1,3,1,10,1,10,1,10,1,14,1,
13,2,114,20,1,0,0,99,0,0,0,0,0,0,0,0,
@@ -2437,7 +2437,7 @@ const unsigned char _Py_M__importlib_external[] = {
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,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,155,
- 0,0,0,57,5,0,0,115,8,0,0,0,0,5,18,1,
+ 0,0,0,60,5,0,0,115,8,0,0,0,0,5,18,1,
12,1,12,1,114,155,0,0,0,99,1,0,0,0,0,0,
0,0,12,0,0,0,12,0,0,0,67,0,0,0,115,70,
2,0,0,124,0,0,97,0,0,116,0,0,106,1,0,97,
@@ -2498,7 +2498,7 @@ const unsigned char _Py_M__importlib_external[] = {
100,0,0,107,2,0,86,1,113,3,0,100,1,0,83,41,
2,114,29,0,0,0,78,41,1,114,31,0,0,0,41,2,
114,22,0,0,0,114,77,0,0,0,114,4,0,0,0,114,
- 4,0,0,0,114,5,0,0,0,114,221,0,0,0,93,5,
+ 4,0,0,0,114,5,0,0,0,114,221,0,0,0,96,5,
0,0,115,2,0,0,0,6,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,59,0,0,0,122,30,105,109,112,111,114,
@@ -2529,7 +2529,7 @@ const unsigned char _Py_M__importlib_external[] = {
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,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,6,95,115,
- 101,116,117,112,68,5,0,0,115,82,0,0,0,0,8,6,
+ 101,116,117,112,71,5,0,0,115,82,0,0,0,0,8,6,
1,9,1,9,3,13,1,13,1,15,1,18,2,13,1,20,
3,33,1,19,2,31,1,10,1,15,1,13,1,4,2,3,
1,15,1,5,1,13,1,12,2,12,1,16,1,16,1,25,
@@ -2555,7 +2555,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,0,0,41,2,114,28,1,0,0,90,17,115,117,112,112,
111,114,116,101,100,95,108,111,97,100,101,114,115,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,218,8,95,105,
- 110,115,116,97,108,108,136,5,0,0,115,16,0,0,0,0,
+ 110,115,116,97,108,108,139,5,0,0,115,16,0,0,0,0,
2,10,1,9,1,28,1,15,1,16,1,16,4,9,1,114,
31,1,0,0,41,3,122,3,119,105,110,114,1,0,0,0,
114,2,0,0,0,41,56,114,107,0,0,0,114,10,0,0,
@@ -2584,7 +2584,7 @@ const unsigned char _Py_M__importlib_external[] = {
0,114,5,0,0,0,218,8,60,109,111,100,117,108,101,62,
8,0,0,0,115,102,0,0,0,6,17,6,3,12,12,12,
5,12,5,12,6,12,12,12,10,12,9,12,5,12,7,15,
- 22,15,112,22,1,18,2,6,1,6,2,9,2,9,2,10,
+ 22,15,115,22,1,18,2,6,1,6,2,9,2,9,2,10,
2,21,44,12,33,12,19,12,12,12,12,12,28,12,17,21,
55,21,12,18,10,12,14,9,3,12,1,15,65,19,64,19,
29,22,110,19,41,25,45,25,16,6,3,25,53,19,60,19,
diff --git a/Tools/msi/buildrelease.bat b/Tools/msi/buildrelease.bat
index fc7cb9f..2eae07a 100644
--- a/Tools/msi/buildrelease.bat
+++ b/Tools/msi/buildrelease.bat
@@ -168,7 +168,7 @@ if not "%SKIPBUILD%" EQU "1" (
"%BUILD%python.exe" %PGO%
)
- @call "%PCBUILD%build.bat" -e -p %BUILD_PLAT% -c PGUpdate -t %TARGET% %CERTOPTS%
+ @call "%PCBUILD%build.bat" -e -p %BUILD_PLAT% -c PGUpdate -t Build %CERTOPTS%
)
@if errorlevel 1 exit /B
@echo off