Python-checkins
Threads by month
- ----- 2025 -----
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
June 2019
- 2 participants
- 665 discussions

bpo-37331: Clarify format of socket handler messages in the documentation. (GH-14234) (GH-14236)
by Vinay Sajip June 19, 2019
by Vinay Sajip June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/b64e42e931a3598d6f0605ec78673772f9…
commit: b64e42e931a3598d6f0605ec78673772f97ecd4c
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Vinay Sajip <vinay_sajip(a)yahoo.co.uk>
date: 2019-06-19T15:41:54+01:00
summary:
bpo-37331: Clarify format of socket handler messages in the documentation. (GH-14234) (GH-14236)
(cherry picked from commit f06b569305cf604f070776ea3f800ed61fdd7d61)
files:
…
[View More]M Doc/library/logging.handlers.rst
diff --git a/Doc/library/logging.handlers.rst b/Doc/library/logging.handlers.rst
index dee9a84e3337..b48d50f9e9e5 100644
--- a/Doc/library/logging.handlers.rst
+++ b/Doc/library/logging.handlers.rst
@@ -470,7 +470,12 @@ sends logging output to a network socket. The base class uses a TCP socket.
.. method:: makePickle(record)
Pickles the record's attribute dictionary in binary format with a length
- prefix, and returns it ready for transmission across the socket.
+ prefix, and returns it ready for transmission across the socket. The
+ details of this operation are equivalent to::
+
+ data = pickle.dumps(record_attr_dict, 1)
+ datalen = struct.pack('>L', len(data))
+ return datalen + data
Note that pickles aren't completely secure. If you are concerned about
security, you may want to override this method to implement a more secure
@@ -481,8 +486,12 @@ sends logging output to a network socket. The base class uses a TCP socket.
.. method:: send(packet)
- Send a pickled string *packet* to the socket. This function allows for
- partial sends which can happen when the network is busy.
+ Send a pickled byte-string *packet* to the socket. The format of the sent
+ byte-string is as described in the documentation for
+ :meth:`~SocketHandler.makePickle`.
+
+ This function allows for partial sends, which can happen when the network
+ is busy.
.. method:: createSocket()
@@ -543,7 +552,8 @@ over UDP sockets.
.. method:: send(s)
- Send a pickled string to a socket.
+ Send a pickled byte-string to a socket. The format of the sent byte-string
+ is as described in the documentation for :meth:`SocketHandler.makePickle`.
.. _syslog-handler:
[View Less]
1
0

bpo-37331: Clarify format of socket handler messages in the documentation. (GH-14234)
by Vinay Sajip June 19, 2019
by Vinay Sajip June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/f06b569305cf604f070776ea3f800ed61f…
commit: f06b569305cf604f070776ea3f800ed61fdd7d61
branch: master
author: Vinay Sajip <vinay_sajip(a)yahoo.co.uk>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T15:29:57+01:00
summary:
bpo-37331: Clarify format of socket handler messages in the documentation. (GH-14234)
files:
M Doc/library/logging.handlers.rst
diff --git a/Doc/library/logging.handlers.rst b/Doc/library/logging.handlers.rst
…
[View More]index 822f82dffcfd..21c6a045de06 100644
--- a/Doc/library/logging.handlers.rst
+++ b/Doc/library/logging.handlers.rst
@@ -488,7 +488,12 @@ sends logging output to a network socket. The base class uses a TCP socket.
.. method:: makePickle(record)
Pickles the record's attribute dictionary in binary format with a length
- prefix, and returns it ready for transmission across the socket.
+ prefix, and returns it ready for transmission across the socket. The
+ details of this operation are equivalent to::
+
+ data = pickle.dumps(record_attr_dict, 1)
+ datalen = struct.pack('>L', len(data))
+ return datalen + data
Note that pickles aren't completely secure. If you are concerned about
security, you may want to override this method to implement a more secure
@@ -499,8 +504,12 @@ sends logging output to a network socket. The base class uses a TCP socket.
.. method:: send(packet)
- Send a pickled string *packet* to the socket. This function allows for
- partial sends which can happen when the network is busy.
+ Send a pickled byte-string *packet* to the socket. The format of the sent
+ byte-string is as described in the documentation for
+ :meth:`~SocketHandler.makePickle`.
+
+ This function allows for partial sends, which can happen when the network
+ is busy.
.. method:: createSocket()
@@ -561,7 +570,8 @@ over UDP sockets.
.. method:: send(s)
- Send a pickled string to a socket.
+ Send a pickled byte-string to a socket. The format of the sent byte-string
+ is as described in the documentation for :meth:`SocketHandler.makePickle`.
.. _syslog-handler:
[View Less]
1
0

bpo-37258: Not a bug, but added a unit test and updated documentation. (GH-14229) (GH-14230)
by Vinay Sajip June 19, 2019
by Vinay Sajip June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/95ff622028b4f5d2eefbff557eadbb08fb…
commit: 95ff622028b4f5d2eefbff557eadbb08fbcd42b1
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Vinay Sajip <vinay_sajip(a)yahoo.co.uk>
date: 2019-06-19T14:46:55+01:00
summary:
bpo-37258: Not a bug, but added a unit test and updated documentation. (GH-14229) (GH-14230)
(cherry picked from commit 015000165373f8db263ef5bc682f02d74e5782ac)
files:
M …
[View More]Doc/library/logging.rst
M Lib/test/test_logging.py
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index 08555c3a3576..8ea00a92fb73 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -50,8 +50,8 @@ listed below.
Logger Objects
--------------
-Loggers have the following attributes and methods. Note that Loggers are never
-instantiated directly, but always through the module-level function
+Loggers have the following attributes and methods. Note that Loggers should
+*NEVER* be instantiated directly, but always through the module-level function
``logging.getLogger(name)``. Multiple calls to :func:`getLogger` with the same
name will always return a reference to the same Logger object.
@@ -1226,7 +1226,9 @@ functions.
The class should define :meth:`__init__` such that only a name argument is
required, and the :meth:`__init__` should call :meth:`Logger.__init__`. This
function is typically called before any loggers are instantiated by applications
- which need to use custom logger behavior.
+ which need to use custom logger behavior. After this call, as at any other
+ time, do not instantiate loggers directly using the subclass: continue to use
+ the :func:`logging.getLogger` API to get your loggers.
.. function:: setLogRecordFactory(factory)
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 50148dc2f252..7399bb362f6e 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -4172,6 +4172,37 @@ class MyLogger(logging.Logger):
logging.setLoggerClass(logging.Logger)
self.assertEqual(logging.getLoggerClass(), logging.Logger)
+ def test_subclass_logger_cache(self):
+ # bpo-37258
+ message = []
+
+ class MyLogger(logging.getLoggerClass()):
+ def __init__(self, name='MyLogger', level=logging.NOTSET):
+ super().__init__(name, level)
+ message.append('initialized')
+
+ logging.setLoggerClass(MyLogger)
+ logger = logging.getLogger('just_some_logger')
+ self.assertEqual(message, ['initialized'])
+ stream = io.StringIO()
+ h = logging.StreamHandler(stream)
+ logger.addHandler(h)
+ try:
+ logger.setLevel(logging.DEBUG)
+ logger.debug("hello")
+ self.assertEqual(stream.getvalue().strip(), "hello")
+
+ stream.truncate(0)
+ stream.seek(0)
+
+ logger.setLevel(logging.INFO)
+ logger.debug("hello")
+ self.assertEqual(stream.getvalue(), "")
+ finally:
+ logger.removeHandler(h)
+ h.close()
+ logging.setLoggerClass(logging.Logger)
+
@support.requires_type_collecting
def test_logging_at_shutdown(self):
# Issue #20037
[View Less]
1
0

bpo-37258: Not a bug, but added a unit test and updated documentation. (GH-14229) (GH-14231)
by Vinay Sajip June 19, 2019
by Vinay Sajip June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/9eb4b2c8a3387ea901dad793e8d5586880…
commit: 9eb4b2c8a3387ea901dad793e8d5586880a5968e
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Vinay Sajip <vinay_sajip(a)yahoo.co.uk>
date: 2019-06-19T14:46:19+01:00
summary:
bpo-37258: Not a bug, but added a unit test and updated documentation. (GH-14229) (GH-14231)
(cherry picked from commit 015000165373f8db263ef5bc682f02d74e5782ac)
files:
M …
[View More]Doc/library/logging.rst
M Lib/test/test_logging.py
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index 0e65f316735e..73ce9ad1deec 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -50,8 +50,8 @@ listed below.
Logger Objects
--------------
-Loggers have the following attributes and methods. Note that Loggers are never
-instantiated directly, but always through the module-level function
+Loggers have the following attributes and methods. Note that Loggers should
+*NEVER* be instantiated directly, but always through the module-level function
``logging.getLogger(name)``. Multiple calls to :func:`getLogger` with the same
name will always return a reference to the same Logger object.
@@ -1191,7 +1191,9 @@ functions.
The class should define :meth:`__init__` such that only a name argument is
required, and the :meth:`__init__` should call :meth:`Logger.__init__`. This
function is typically called before any loggers are instantiated by applications
- which need to use custom logger behavior.
+ which need to use custom logger behavior. After this call, as at any other
+ time, do not instantiate loggers directly using the subclass: continue to use
+ the :func:`logging.getLogger` API to get your loggers.
.. function:: setLogRecordFactory(factory)
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 97c13a4c5214..13393cd8b372 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -3877,6 +3877,37 @@ class MyLogger(logging.Logger):
logging.setLoggerClass(logging.Logger)
self.assertEqual(logging.getLoggerClass(), logging.Logger)
+ def test_subclass_logger_cache(self):
+ # bpo-37258
+ message = []
+
+ class MyLogger(logging.getLoggerClass()):
+ def __init__(self, name='MyLogger', level=logging.NOTSET):
+ super().__init__(name, level)
+ message.append('initialized')
+
+ logging.setLoggerClass(MyLogger)
+ logger = logging.getLogger('just_some_logger')
+ self.assertEqual(message, ['initialized'])
+ stream = io.StringIO()
+ h = logging.StreamHandler(stream)
+ logger.addHandler(h)
+ try:
+ logger.setLevel(logging.DEBUG)
+ logger.debug("hello")
+ self.assertEqual(stream.getvalue().strip(), "hello")
+
+ stream.truncate(0)
+ stream.seek(0)
+
+ logger.setLevel(logging.INFO)
+ logger.debug("hello")
+ self.assertEqual(stream.getvalue(), "")
+ finally:
+ logger.removeHandler(h)
+ h.close()
+ logging.setLoggerClass(logging.Logger)
+
@support.requires_type_collecting
def test_logging_at_shutdown(self):
# Issue #20037
[View Less]
1
0

June 19, 2019
https://github.com/python/cpython/commit/f532fe5583d29d21e12aa22d8fca13e3bc…
commit: f532fe5583d29d21e12aa22d8fca13e3bca94fb3
branch: 3.7
author: Inada Naoki <songofacandy(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T20:47:39+09:00
summary:
bpo-27860: ipaddress: fix Interface constructor (GH-14200)
Interface constructor is documented as accepts address same to Network,
but it didn't accept some form of the address.
This commit is backport of GH-12836 (…
[View More]commit 6fa84bd)
files:
A Misc/NEWS.d/next/Library/2019-06-18-21-25-23.bpo-27860.Mc4wtK.rst
M Lib/ipaddress.py
M Lib/test/test_ipaddress.py
diff --git a/Lib/ipaddress.py b/Lib/ipaddress.py
index 4eec1f337c13..80249288d73a 100644
--- a/Lib/ipaddress.py
+++ b/Lib/ipaddress.py
@@ -532,6 +532,30 @@ def _prefix_from_ip_string(cls, ip_str):
except ValueError:
cls._report_invalid_netmask(ip_str)
+ @classmethod
+ def _split_addr_prefix(cls, address):
+ """Helper function to parse address of Network/Interface.
+
+ Arg:
+ address: Argument of Network/Interface.
+
+ Returns:
+ (addr, prefix) tuple.
+ """
+ # a packed address or integer
+ if isinstance(address, (bytes, int)):
+ return address, cls._max_prefixlen
+
+ if not isinstance(address, tuple):
+ # Assume input argument to be string or any object representation
+ # which converts into a formatted IP prefix string.
+ address = _split_optional_netmask(address)
+
+ # Constructing from a tuple (addr, [mask])
+ if len(address) > 1:
+ return address
+ return address[0], cls._max_prefixlen
+
def __reduce__(self):
return self.__class__, (str(self),)
@@ -1381,32 +1405,13 @@ def is_link_local(self):
class IPv4Interface(IPv4Address):
def __init__(self, address):
- if isinstance(address, (bytes, int)):
- IPv4Address.__init__(self, address)
- self.network = IPv4Network(self._ip)
- self._prefixlen = self._max_prefixlen
- return
-
- if isinstance(address, tuple):
- IPv4Address.__init__(self, address[0])
- if len(address) > 1:
- self._prefixlen = int(address[1])
- else:
- self._prefixlen = self._max_prefixlen
-
- self.network = IPv4Network(address, strict=False)
- self.netmask = self.network.netmask
- self.hostmask = self.network.hostmask
- return
-
- addr = _split_optional_netmask(address)
- IPv4Address.__init__(self, addr[0])
-
- self.network = IPv4Network(address, strict=False)
- self._prefixlen = self.network._prefixlen
+ addr, mask = self._split_addr_prefix(address)
+ IPv4Address.__init__(self, addr)
+ self.network = IPv4Network((addr, mask), strict=False)
self.netmask = self.network.netmask
self.hostmask = self.network.hostmask
+ self._prefixlen = self.network._prefixlen
def __str__(self):
return '%s/%d' % (self._string_from_ip_int(self._ip),
@@ -1511,24 +1516,9 @@ def __init__(self, address, strict=True):
an IPv4 address.
ValueError: If strict is True and a network address is not
supplied.
-
"""
_BaseNetwork.__init__(self, address)
-
- # Constructing from a packed address or integer
- if isinstance(address, (int, bytes)):
- addr = address
- mask = self._max_prefixlen
- # Constructing from a tuple (addr, [mask])
- elif isinstance(address, tuple):
- addr = address[0]
- mask = address[1] if len(address) > 1 else self._max_prefixlen
- # Assume input argument to be string or any object representation
- # which converts into a formatted IP prefix string.
- else:
- args = _split_optional_netmask(address)
- addr = self._ip_int_from_string(args[0])
- mask = args[1] if len(args) == 2 else self._max_prefixlen
+ addr, mask = self._split_addr_prefix(address)
self.network_address = IPv4Address(addr)
self.netmask, self._prefixlen = self._make_netmask(mask)
@@ -2061,28 +2051,13 @@ def sixtofour(self):
class IPv6Interface(IPv6Address):
def __init__(self, address):
- if isinstance(address, (bytes, int)):
- IPv6Address.__init__(self, address)
- self.network = IPv6Network(self._ip)
- self._prefixlen = self._max_prefixlen
- return
- if isinstance(address, tuple):
- IPv6Address.__init__(self, address[0])
- if len(address) > 1:
- self._prefixlen = int(address[1])
- else:
- self._prefixlen = self._max_prefixlen
- self.network = IPv6Network(address, strict=False)
- self.netmask = self.network.netmask
- self.hostmask = self.network.hostmask
- return
+ addr, mask = self._split_addr_prefix(address)
- addr = _split_optional_netmask(address)
- IPv6Address.__init__(self, addr[0])
- self.network = IPv6Network(address, strict=False)
+ IPv6Address.__init__(self, addr)
+ self.network = IPv6Network((addr, mask), strict=False)
self.netmask = self.network.netmask
- self._prefixlen = self.network._prefixlen
self.hostmask = self.network.hostmask
+ self._prefixlen = self.network._prefixlen
def __str__(self):
return '%s/%d' % (self._string_from_ip_int(self._ip),
@@ -2191,24 +2166,9 @@ def __init__(self, address, strict=True):
an IPv6 address.
ValueError: If strict was True and a network address was not
supplied.
-
"""
_BaseNetwork.__init__(self, address)
-
- # Constructing from a packed address or integer
- if isinstance(address, (int, bytes)):
- addr = address
- mask = self._max_prefixlen
- # Constructing from a tuple (addr, [mask])
- elif isinstance(address, tuple):
- addr = address[0]
- mask = address[1] if len(address) > 1 else self._max_prefixlen
- # Assume input argument to be string or any object representation
- # which converts into a formatted IP prefix string.
- else:
- args = _split_optional_netmask(address)
- addr = self._ip_int_from_string(args[0])
- mask = args[1] if len(args) == 2 else self._max_prefixlen
+ addr, mask = self._split_addr_prefix(address)
self.network_address = IPv6Address(addr)
self.netmask, self._prefixlen = self._make_netmask(mask)
diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py
index 3c50eec456ab..a2326db0af86 100644
--- a/Lib/test/test_ipaddress.py
+++ b/Lib/test/test_ipaddress.py
@@ -405,7 +405,13 @@ class NetmaskTestMixin_v4(CommonTestMixin_v4):
"""Input validation on interfaces and networks is very similar"""
def test_no_mask(self):
- self.assertEqual(str(self.factory('1.2.3.4')), '1.2.3.4/32')
+ for address in ('1.2.3.4', 0x01020304, b'\x01\x02\x03\x04'):
+ net = self.factory(address)
+ self.assertEqual(str(net), '1.2.3.4/32')
+ self.assertEqual(str(net.netmask), '255.255.255.255')
+ self.assertEqual(str(net.hostmask), '0.0.0.0')
+ # IPv4Network has prefixlen, but IPv4Interface doesn't.
+ # Should we add it to IPv4Interface too? (bpo-36392)
def test_split_netmask(self):
addr = "1.2.3.4/32/24"
@@ -541,6 +547,15 @@ def test_subnet_of_mixed_types(self):
class NetmaskTestMixin_v6(CommonTestMixin_v6):
"""Input validation on interfaces and networks is very similar"""
+ def test_no_mask(self):
+ for address in ('::1', 1, b'\x00'*15 + b'\x01'):
+ net = self.factory(address)
+ self.assertEqual(str(net), '::1/128')
+ self.assertEqual(str(net.netmask), 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff')
+ self.assertEqual(str(net.hostmask), '::')
+ # IPv6Network has prefixlen, but IPv6Interface doesn't.
+ # Should we add it to IPv4Interface too? (bpo-36392)
+
def test_split_netmask(self):
addr = "cafe:cafe::/128/190"
with self.assertAddressError("Only one '/' permitted in %r" % addr):
diff --git a/Misc/NEWS.d/next/Library/2019-06-18-21-25-23.bpo-27860.Mc4wtK.rst b/Misc/NEWS.d/next/Library/2019-06-18-21-25-23.bpo-27860.Mc4wtK.rst
new file mode 100644
index 000000000000..e07541c12454
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-18-21-25-23.bpo-27860.Mc4wtK.rst
@@ -0,0 +1,2 @@
+Fix ``IPv4Interface`` and ``IPv6Interface`` didn't accept string mask when
+the argument is tuple.
[View Less]
1
0

bpo-37258: Not a bug, but added a unit test and updated documentation. (GH-14229)
by Vinay Sajip June 19, 2019
by Vinay Sajip June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/015000165373f8db263ef5bc682f02d74e…
commit: 015000165373f8db263ef5bc682f02d74e5782ac
branch: master
author: Vinay Sajip <vinay_sajip(a)yahoo.co.uk>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T11:46:53+01:00
summary:
bpo-37258: Not a bug, but added a unit test and updated documentation. (GH-14229)
files:
M Doc/library/logging.rst
M Lib/test/test_logging.py
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index …
[View More]3e4d7deee8cf..cc611fc87086 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -50,8 +50,8 @@ listed below.
Logger Objects
--------------
-Loggers have the following attributes and methods. Note that Loggers are never
-instantiated directly, but always through the module-level function
+Loggers have the following attributes and methods. Note that Loggers should
+*NEVER* be instantiated directly, but always through the module-level function
``logging.getLogger(name)``. Multiple calls to :func:`getLogger` with the same
name will always return a reference to the same Logger object.
@@ -1244,7 +1244,9 @@ functions.
The class should define :meth:`__init__` such that only a name argument is
required, and the :meth:`__init__` should call :meth:`Logger.__init__`. This
function is typically called before any loggers are instantiated by applications
- which need to use custom logger behavior.
+ which need to use custom logger behavior. After this call, as at any other
+ time, do not instantiate loggers directly using the subclass: continue to use
+ the :func:`logging.getLogger` API to get your loggers.
.. function:: setLogRecordFactory(factory)
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index ac8919de8f2f..6507d79742a4 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -4172,6 +4172,37 @@ class MyLogger(logging.Logger):
logging.setLoggerClass(logging.Logger)
self.assertEqual(logging.getLoggerClass(), logging.Logger)
+ def test_subclass_logger_cache(self):
+ # bpo-37258
+ message = []
+
+ class MyLogger(logging.getLoggerClass()):
+ def __init__(self, name='MyLogger', level=logging.NOTSET):
+ super().__init__(name, level)
+ message.append('initialized')
+
+ logging.setLoggerClass(MyLogger)
+ logger = logging.getLogger('just_some_logger')
+ self.assertEqual(message, ['initialized'])
+ stream = io.StringIO()
+ h = logging.StreamHandler(stream)
+ logger.addHandler(h)
+ try:
+ logger.setLevel(logging.DEBUG)
+ logger.debug("hello")
+ self.assertEqual(stream.getvalue().strip(), "hello")
+
+ stream.truncate(0)
+ stream.seek(0)
+
+ logger.setLevel(logging.INFO)
+ logger.debug("hello")
+ self.assertEqual(stream.getvalue(), "")
+ finally:
+ logger.removeHandler(h)
+ h.close()
+ logging.setLoggerClass(logging.Logger)
+
@support.requires_type_collecting
def test_logging_at_shutdown(self):
# Issue #20037
[View Less]
1
0

June 19, 2019
https://github.com/python/cpython/commit/987a0dcfa1302df6c1ed8cf14762dc1862…
commit: 987a0dcfa1302df6c1ed8cf14762dc18628e3f33
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T10:36:10+02:00
summary:
bpo-36710: Remove PyImport_Cleanup() function (GH-14221)
* Rename PyImport_Cleanup() to _PyImport_Cleanup() and move it to the
internal C API. Add 'tstate' parameters.
* Remove documentation of _PyImport_Init(), …
[View More]PyImport_Cleanup(),
_PyImport_Fini(). All three were documented as "For internal use
only.".
files:
M Doc/c-api/import.rst
M Doc/whatsnew/3.9.rst
M Include/import.h
M Include/internal/pycore_import.h
M Python/import.c
M Python/pylifecycle.c
diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst
index 86cc4031610b..3bc50609714a 100644
--- a/Doc/c-api/import.rst
+++ b/Doc/c-api/import.rst
@@ -223,21 +223,6 @@ Importing Modules
Return a new reference to the finder object.
-.. c:function:: void _PyImport_Init()
-
- Initialize the import mechanism. For internal use only.
-
-
-.. c:function:: void PyImport_Cleanup()
-
- Empty the module table. For internal use only.
-
-
-.. c:function:: void _PyImport_Fini()
-
- Finalize the import mechanism. For internal use only.
-
-
.. c:function:: int PyImport_ImportFrozenModuleObject(PyObject *name)
Load a frozen module named *name*. Return ``1`` for success, ``0`` if the
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 446c8b9719e0..24fbe1870c87 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -122,6 +122,9 @@ Deprecated
Removed
=======
+* The C function ``PyImport_Cleanup()`` has been removed. It was documented as:
+ "Empty the module table. For internal use only."
+
* ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
modules were deprecated since Python 3.7 which requires threading support.
(Contributed by Victor Stinner in :issue:`37312`.)
diff --git a/Include/import.h b/Include/import.h
index c50767d904de..735533ee7a79 100644
--- a/Include/import.h
+++ b/Include/import.h
@@ -72,7 +72,6 @@ PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject(
PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
-PyAPI_FUNC(void) PyImport_Cleanup(void);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject(
PyObject *name
diff --git a/Include/internal/pycore_import.h b/Include/internal/pycore_import.h
index bbcd170ab135..5d3203e5b97f 100644
--- a/Include/internal/pycore_import.h
+++ b/Include/internal/pycore_import.h
@@ -11,6 +11,7 @@ PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
);
extern void _PyImport_ReInitLock(void);
+extern void _PyImport_Cleanup(PyThreadState *tstate);
#ifdef __cplusplus
}
diff --git a/Python/import.c b/Python/import.c
index 5606d3bea456..dc0d5b8b901c 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -413,9 +413,8 @@ static const char * const sys_files[] = {
/* Un-initialize things, as good as we can */
void
-PyImport_Cleanup(void)
+_PyImport_Cleanup(PyThreadState *tstate)
{
- PyThreadState *tstate = _PyThreadState_GET();
PyInterpreterState *interp = tstate->interp;
PyObject *modules = interp->modules;
if (modules == NULL) {
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 4a97295102f7..c0b34507899f 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1225,7 +1225,7 @@ Py_FinalizeEx(void)
_PySys_ClearAuditHooks();
/* Destroy all modules */
- PyImport_Cleanup();
+ _PyImport_Cleanup(tstate);
/* Print debug stats if any */
_PyEval_Fini();
@@ -1589,7 +1589,7 @@ Py_EndInterpreter(PyThreadState *tstate)
if (tstate != interp->tstate_head || tstate->next != NULL)
Py_FatalError("Py_EndInterpreter: not the last thread");
- PyImport_Cleanup();
+ _PyImport_Cleanup(tstate);
PyInterpreterState_Clear(interp);
PyThreadState_Swap(NULL);
PyInterpreterState_Delete(interp);
[View Less]
1
0

bpo-37163: Deprecate passing argument obj of dataclasses.replace() by keyword. (GH-13877)
by Serhiy Storchaka June 19, 2019
by Serhiy Storchaka June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/f5b89afde1196ec9f74b7dc0333cec9bc4…
commit: f5b89afde1196ec9f74b7dc0333cec9bc4d4c2db
branch: 3.8
author: Serhiy Storchaka <storchaka(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T10:33:27+03:00
summary:
bpo-37163: Deprecate passing argument obj of dataclasses.replace() by keyword. (GH-13877)
files:
A Misc/NEWS.d/next/Library/2019-06-07-08-18-05.bpo-37163.36JkUh.rst
M Lib/dataclasses.py
M Lib/test/test_dataclasses.py
…
[View More]
diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py
index b035cbb809f8..18713722a764 100644
--- a/Lib/dataclasses.py
+++ b/Lib/dataclasses.py
@@ -1206,7 +1206,7 @@ class C(Base):
unsafe_hash=unsafe_hash, frozen=frozen)
-def replace(obj, **changes):
+def replace(*args, **changes):
"""Return a new object replacing specified fields with new values.
This is especially useful for frozen classes. Example usage:
@@ -1220,6 +1220,17 @@ class C:
c1 = replace(c, x=3)
assert c1.x == 3 and c1.y == 2
"""
+ if len(args) > 1:
+ raise TypeError(f'replace() takes 1 positional argument but {len(args)} were given')
+ if args:
+ obj, = args
+ elif 'obj' in changes:
+ obj = changes.pop('obj')
+ import warnings
+ warnings.warn("Passing 'obj' as keyword argument is deprecated",
+ DeprecationWarning, stacklevel=2)
+ else:
+ raise TypeError("replace() missing 1 required positional argument: 'obj'")
# We're going to mutate 'changes', but that's okay because it's a
# new dict, even if called with 'replace(obj, **my_changes)'.
@@ -1255,3 +1266,4 @@ class C:
# changes that aren't fields, this will correctly raise a
# TypeError.
return obj.__class__(**changes)
+replace.__text_signature__ = '(obj, /, **kwargs)'
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py
index 53e8443c2adf..cb0e18c242d1 100755
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -3075,6 +3075,13 @@ class C:
self.assertEqual(c1.x, 3)
self.assertEqual(c1.y, 2)
+ self.assertRaises(TypeError, replace)
+ self.assertRaises(TypeError, replace, c, c)
+ with self.assertWarns(DeprecationWarning):
+ c1 = replace(obj=c, x=3)
+ self.assertEqual(c1.x, 3)
+ self.assertEqual(c1.y, 2)
+
def test_frozen(self):
@dataclass(frozen=True)
class C:
diff --git a/Misc/NEWS.d/next/Library/2019-06-07-08-18-05.bpo-37163.36JkUh.rst b/Misc/NEWS.d/next/Library/2019-06-07-08-18-05.bpo-37163.36JkUh.rst
new file mode 100644
index 000000000000..04cf61d3e099
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-07-08-18-05.bpo-37163.36JkUh.rst
@@ -0,0 +1,2 @@
+Deprecated passing ``obj`` argument of :func:`dataclasses.replace` as
+keyword argument.
[View Less]
1
0
https://github.com/python/cpython/commit/598c75645911db0769132535daca8be070…
commit: 598c75645911db0769132535daca8be07029221a
branch: 2.7
author: Benjamin Peterson <benjamin(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T23:03:35-07:00
summary:
[2.7] Fix name of '\0'. (GH-14225)
'\0' is the NUL byte not NULL..
(cherry picked from commit 7821b4c6d29933511d50bb42255e39790c6abf00)
files:
M Modules/_csv.c
diff --git a/Modules/_csv.c b/Modules/_csv.c
index …
[View More]88e3e9065842..a54e74ecc3ff 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -818,7 +818,7 @@ Reader_iternext(ReaderObj *self)
if (c == '\0') {
Py_DECREF(lineobj);
PyErr_Format(error_obj,
- "line contains NULL byte");
+ "line contains NUL");
goto err;
}
if (parse_process_char(self, c) < 0) {
[View Less]
1
0
https://github.com/python/cpython/commit/b2967436dbf80a70fcf69b9872dc0607be…
commit: b2967436dbf80a70fcf69b9872dc0607be1e78ab
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T21:59:54-07:00
summary:
Fix name of '\0'. (GH-14222)
'\0' is the NUL byte not NULL.
(cherry picked from commit 7821b4c6d29933511d50bb42255e39790c6abf00)
Co-authored-by: Benjamin Peterson <benjamin(a)…
[View More]python.org>
files:
M Modules/_csv.c
diff --git a/Modules/_csv.c b/Modules/_csv.c
index dd0b3c8107eb..6f7becfa8861 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -825,7 +825,7 @@ Reader_iternext(ReaderObj *self)
if (c == '\0') {
Py_DECREF(lineobj);
PyErr_Format(_csvstate_global->error_obj,
- "line contains NULL byte");
+ "line contains NUL");
goto err;
}
if (parse_process_char(self, c) < 0) {
[View Less]
1
0
https://github.com/python/cpython/commit/7edf8e50d1df1cab7b3462c836d4ce0be7…
commit: 7edf8e50d1df1cab7b3462c836d4ce0be7d8b93b
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T21:55:59-07:00
summary:
Fix name of '\0'. (GH-14222)
'\0' is the NUL byte not NULL.
(cherry picked from commit 7821b4c6d29933511d50bb42255e39790c6abf00)
Co-authored-by: Benjamin Peterson <benjamin(a)…
[View More]python.org>
files:
M Modules/_csv.c
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 7eb9d8b796dd..014cbb4e0231 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -826,7 +826,7 @@ Reader_iternext(ReaderObj *self)
if (c == '\0') {
Py_DECREF(lineobj);
PyErr_Format(_csvstate_global->error_obj,
- "line contains NULL byte");
+ "line contains NUL");
goto err;
}
if (parse_process_char(self, c) < 0) {
[View Less]
1
0
https://github.com/python/cpython/commit/7821b4c6d29933511d50bb42255e39790c…
commit: 7821b4c6d29933511d50bb42255e39790c6abf00
branch: master
author: Benjamin Peterson <benjamin(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T21:37:58-07:00
summary:
Fix name of '\0'. (GH-14222)
'\0' is the NUL byte not NULL.
files:
M Modules/_csv.c
diff --git a/Modules/_csv.c b/Modules/_csv.c
index 7eb9d8b796dd..014cbb4e0231 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
…
[View More]@@ -826,7 +826,7 @@ Reader_iternext(ReaderObj *self)
if (c == '\0') {
Py_DECREF(lineobj);
PyErr_Format(_csvstate_global->error_obj,
- "line contains NULL byte");
+ "line contains NUL");
goto err;
}
if (parse_process_char(self, c) < 0) {
[View Less]
1
0
https://github.com/python/cpython/commit/0d47586d0262a4a2cc2ff855db3b3e9def…
commit: 0d47586d0262a4a2cc2ff855db3b3e9def8fda11
branch: 3.6
author: Ned Deily <nad(a)python.org>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-18T20:37:44-04:00
summary:
3.6.9rc1
files:
A Misc/NEWS.d/3.6.9rc1.rst
D Misc/NEWS.d/next/Documentation/2018-12-22-22-52-05.bpo-35564.TuEU_D.rst
D Misc/NEWS.d/next/Documentation/2018-12-30-09-56-13.bpo-35605.gAWt32.rst
D Misc/NEWS.d/next/Library/2018-12-30-…
[View More]14-35-19.bpo-35121.oWmiGU.rst
D Misc/NEWS.d/next/Library/2019-01-02-20-04-49.bpo-35643.DaMiaV.rst
D Misc/NEWS.d/next/Security/2018-10-31-15-39-17.bpo-35121.EgHv9k.rst
D Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
D Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.wpNNBD.rst
D Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
D Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
D Misc/NEWS.d/next/Security/2019-04-29-15-34-59.bpo-36742.QCUY0i.rst
D Misc/NEWS.d/next/Security/2019-05-21-23-20-18.bpo-35907.NC_zNK.rst
D Misc/NEWS.d/next/Tests/2019-01-18-17-46-10.bpo-32947.Hk0KnM.rst
D Misc/NEWS.d/next/Tests/2019-02-24-01-58-38.bpo-27313.Sj9veH.rst
D Misc/NEWS.d/next/Tests/2019-05-06-18-29-54.bpo-35925.gwQPuC.rst
D Misc/NEWS.d/next/Tests/2019-05-08-15-55-46.bpo-36816.WBKRGZ.rst
D Misc/NEWS.d/next/macOS/2019-04-29-10-54-14.bpo-34602.Lrl2zU.rst
M Include/patchlevel.h
M Lib/pydoc_data/topics.py
M README.rst
diff --git a/Include/patchlevel.h b/Include/patchlevel.h
index 7289d41e6c81..270e61792ceb 100644
--- a/Include/patchlevel.h
+++ b/Include/patchlevel.h
@@ -18,12 +18,12 @@
/*--start constants--*/
#define PY_MAJOR_VERSION 3
#define PY_MINOR_VERSION 6
-#define PY_MICRO_VERSION 8
-#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_FINAL
-#define PY_RELEASE_SERIAL 0
+#define PY_MICRO_VERSION 9
+#define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_GAMMA
+#define PY_RELEASE_SERIAL 1
/* Version as a string */
-#define PY_VERSION "3.6.8+"
+#define PY_VERSION "3.6.9rc1"
/*--end constants--*/
/* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2.
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index e4c63058087e..df3f212eb73e 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Sun Dec 23 16:24:21 2018
+# Autogenerated by Sphinx on Tue Jun 18 20:31:29 2019
topics = {'assert': 'The "assert" statement\n'
'**********************\n'
'\n'
@@ -4862,7 +4862,7 @@
'Meaning '
'|\n'
' '
- '+===========+============================================================+\n'
+ '|===========|============================================================|\n'
' | "\'<\'" | Forces the field to be left-aligned '
'within the available |\n'
' | | space (this is the default for most '
@@ -4911,7 +4911,7 @@
'Meaning '
'|\n'
' '
- '+===========+============================================================+\n'
+ '|===========|============================================================|\n'
' | "\'+\'" | indicates that a sign should be used for '
'both positive as |\n'
' | | well as negative '
@@ -5015,7 +5015,7 @@
'Meaning '
'|\n'
' '
- '+===========+============================================================+\n'
+ '|===========|============================================================|\n'
' | "\'s\'" | String format. This is the default type '
'for strings and |\n'
' | | may be '
@@ -5035,7 +5035,7 @@
'Meaning '
'|\n'
' '
- '+===========+============================================================+\n'
+ '|===========|============================================================|\n'
' | "\'b\'" | Binary format. Outputs the number in '
'base 2. |\n'
' '
@@ -5097,7 +5097,7 @@
'Meaning '
'|\n'
' '
- '+===========+============================================================+\n'
+ '|===========|============================================================|\n'
' | "\'e\'" | Exponent notation. Prints the number in '
'scientific |\n'
' | | notation using the letter ‘e’ to indicate '
@@ -6777,7 +6777,7 @@
'+-------------------------------------------------+---------------------------------------+\n'
'| Operator | '
'Description |\n'
- '+=================================================+=======================================+\n'
+ '|=================================================|=======================================|\n'
'| "lambda" | '
'Lambda expression |\n'
'+-------------------------------------------------+---------------------------------------+\n'
@@ -9911,7 +9911,7 @@
' | Representation | '
'Description |\n'
' '
- '+=========================+===============================+\n'
+ '|=========================|===============================|\n'
' | "\\n" | Line '
'Feed |\n'
' '
@@ -10252,7 +10252,7 @@
'+-------------------+-----------------------------------+---------+\n'
'| Escape Sequence | Meaning | Notes '
'|\n'
- '+===================+===================================+=========+\n'
+ '|===================|===================================|=========|\n'
'| "\\newline" | Backslash and newline ignored '
'| |\n'
'+-------------------+-----------------------------------+---------+\n'
@@ -10298,7 +10298,7 @@
'+-------------------+-----------------------------------+---------+\n'
'| Escape Sequence | Meaning | Notes '
'|\n'
- '+===================+===================================+=========+\n'
+ '|===================|===================================|=========|\n'
'| "\\N{name}" | Character named *name* in the | '
'(4) |\n'
'| | Unicode database | '
@@ -10929,7 +10929,7 @@
' | Attribute | Meaning '
'| |\n'
' '
- '+===========================+=================================+=============+\n'
+ '|===========================|=================================|=============|\n'
' | "__doc__" | The function’s documentation '
'| Writable |\n'
' | | string, or "None" if '
@@ -12110,7 +12110,7 @@
'+----------------------------+----------------------------------+------------+\n'
'| Operation | Result '
'| Notes |\n'
- '+============================+==================================+============+\n'
+ '|============================|==================================|============|\n'
'| "x in s" | "True" if an item of *s* is '
'| (1) |\n'
'| | equal to *x*, else "False" '
@@ -12339,7 +12339,7 @@
'+--------------------------------+----------------------------------+-----------------------+\n'
'| Operation | '
'Result | Notes |\n'
- '+================================+==================================+=======================+\n'
+ '|================================|==================================|=======================|\n'
'| "s[i] = x" | item *i* of *s* is replaced '
'by | |\n'
'| | '
@@ -12793,7 +12793,7 @@
'| Operation | '
'Result | Notes '
'|\n'
- '+================================+==================================+=======================+\n'
+ '|================================|==================================|=======================|\n'
'| "s[i] = x" | item *i* of *s* is '
'replaced by | |\n'
'| | '
diff --git a/Misc/NEWS.d/3.6.9rc1.rst b/Misc/NEWS.d/3.6.9rc1.rst
new file mode 100644
index 000000000000..c810151fafdc
--- /dev/null
+++ b/Misc/NEWS.d/3.6.9rc1.rst
@@ -0,0 +1,165 @@
+.. bpo: 35907
+.. date: 2019-05-21-23-20-18
+.. nonce: NC_zNK
+.. release date: 2019-06-18
+.. section: Security
+
+CVE-2019-9948: Avoid file reading by disallowing ``local-file://`` and
+``local_file://`` URL schemes in ``URLopener().open()`` and
+``URLopener().retrieve()`` of :mod:`urllib.request`.
+
+..
+
+.. bpo: 36742
+.. date: 2019-04-29-15-34-59
+.. nonce: QCUY0i
+.. section: Security
+
+Fixes mishandling of pre-normalization characters in urlsplit().
+
+..
+
+.. bpo: 30458
+.. date: 2019-04-10-08-53-30
+.. nonce: 51E-DA
+.. section: Security
+
+Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or
+control characters through into the underlying http client request. Such
+potentially malicious header injection URLs now cause an
+http.client.InvalidURL exception to be raised.
+
+..
+
+.. bpo: 36216
+.. date: 2019-03-06-09-38-40
+.. nonce: 6q1m4a
+.. section: Security
+
+Changes urlsplit() to raise ValueError when the URL contains characters that
+decompose under IDNA encoding (NFKC-normalization) into characters that
+affect how the URL is parsed.
+
+..
+
+.. bpo: 33529
+.. date: 2019-02-24-18-48-16
+.. nonce: wpNNBD
+.. section: Security
+
+Prevent fold function used in email header encoding from entering infinite
+loop when there are too many non-ASCII characters in a header.
+
+..
+
+.. bpo: 35746
+.. date: 2019-01-15-18-16-05
+.. nonce: nMSd0j
+.. section: Security
+
+[CVE-2019-5010] Fix a NULL pointer deref in ssl module. The cert parser did
+not handle CRL distribution points with empty DP or URI correctly. A
+malicious or buggy certificate can result into segfault. Vulnerability
+(TALOS-2018-0758) reported by Colin Read and Nicolas Edet of Cisco.
+
+..
+
+.. bpo: 35121
+.. date: 2018-10-31-15-39-17
+.. nonce: EgHv9k
+.. section: Security
+
+Don't send cookies of domain A without Domain attribute to domain B when
+domain A is a suffix match of domain B while using a cookiejar with
+:class:`http.cookiejar.DefaultCookiePolicy` policy. Patch by Karthikeyan
+Singaravelan.
+
+..
+
+.. bpo: 35643
+.. date: 2019-01-02-20-04-49
+.. nonce: DaMiaV
+.. section: Library
+
+Fixed a SyntaxWarning: invalid escape sequence in Modules/_sha3/cleanup.py.
+Patch by Mickaël Schoentgen.
+
+..
+
+.. bpo: 35121
+.. date: 2018-12-30-14-35-19
+.. nonce: oWmiGU
+.. section: Library
+
+Don't set cookie for a request when the request path is a prefix match of
+the cookie's path attribute but doesn't end with "/". Patch by Karthikeyan
+Singaravelan.
+
+..
+
+.. bpo: 35605
+.. date: 2018-12-30-09-56-13
+.. nonce: gAWt32
+.. section: Documentation
+
+Fix documentation build for sphinx<1.6. Patch by Anthony Sottile.
+
+..
+
+.. bpo: 35564
+.. date: 2018-12-22-22-52-05
+.. nonce: TuEU_D
+.. section: Documentation
+
+Explicitly set master_doc variable in conf.py for compliance with Sphinx 2.0
+
+..
+
+.. bpo: 36816
+.. date: 2019-05-08-15-55-46
+.. nonce: WBKRGZ
+.. section: Tests
+
+Update Lib/test/selfsigned_pythontestdotnet.pem to match
+self-signed.pythontest.net's new TLS certificate.
+
+..
+
+.. bpo: 35925
+.. date: 2019-05-06-18-29-54
+.. nonce: gwQPuC
+.. section: Tests
+
+Skip specific nntplib and ssl networking tests when they would otherwise
+fail due to a modern OS or distro with a default OpenSSL policy of rejecting
+connections to servers with weak certificates or disabling TLS below
+TLSv1.2.
+
+..
+
+.. bpo: 27313
+.. date: 2019-02-24-01-58-38
+.. nonce: Sj9veH
+.. section: Tests
+
+Avoid test_ttk_guionly ComboboxTest failure with macOS Cocoa Tk.
+
+..
+
+.. bpo: 32947
+.. date: 2019-01-18-17-46-10
+.. nonce: Hk0KnM
+.. section: Tests
+
+test_ssl fixes for TLS 1.3 and OpenSSL 1.1.1.
+
+..
+
+.. bpo: 34602
+.. date: 2019-04-29-10-54-14
+.. nonce: Lrl2zU
+.. section: macOS
+
+Avoid failures setting macOS stack resource limit with resource.setrlimit.
+This reverts an earlier fix for bpo-18075 which forced a non-default stack
+size when building the interpreter executable on macOS.
diff --git a/Misc/NEWS.d/next/Documentation/2018-12-22-22-52-05.bpo-35564.TuEU_D.rst b/Misc/NEWS.d/next/Documentation/2018-12-22-22-52-05.bpo-35564.TuEU_D.rst
deleted file mode 100644
index 8ca95eed4c56..000000000000
--- a/Misc/NEWS.d/next/Documentation/2018-12-22-22-52-05.bpo-35564.TuEU_D.rst
+++ /dev/null
@@ -1 +0,0 @@
-Explicitly set master_doc variable in conf.py for compliance with Sphinx 2.0
diff --git a/Misc/NEWS.d/next/Documentation/2018-12-30-09-56-13.bpo-35605.gAWt32.rst b/Misc/NEWS.d/next/Documentation/2018-12-30-09-56-13.bpo-35605.gAWt32.rst
deleted file mode 100644
index cbc0f1e07f31..000000000000
--- a/Misc/NEWS.d/next/Documentation/2018-12-30-09-56-13.bpo-35605.gAWt32.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fix documentation build for sphinx<1.6. Patch by Anthony Sottile.
diff --git a/Misc/NEWS.d/next/Library/2018-12-30-14-35-19.bpo-35121.oWmiGU.rst b/Misc/NEWS.d/next/Library/2018-12-30-14-35-19.bpo-35121.oWmiGU.rst
deleted file mode 100644
index 032e1e2c00bc..000000000000
--- a/Misc/NEWS.d/next/Library/2018-12-30-14-35-19.bpo-35121.oWmiGU.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Don't set cookie for a request when the request path is a prefix match of
-the cookie's path attribute but doesn't end with "/". Patch by Karthikeyan
-Singaravelan.
diff --git a/Misc/NEWS.d/next/Library/2019-01-02-20-04-49.bpo-35643.DaMiaV.rst b/Misc/NEWS.d/next/Library/2019-01-02-20-04-49.bpo-35643.DaMiaV.rst
deleted file mode 100644
index 0b47bb61fc05..000000000000
--- a/Misc/NEWS.d/next/Library/2019-01-02-20-04-49.bpo-35643.DaMiaV.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-Fixed a SyntaxWarning: invalid escape sequence in Modules/_sha3/cleanup.py.
-Patch by Mickaël Schoentgen.
diff --git a/Misc/NEWS.d/next/Security/2018-10-31-15-39-17.bpo-35121.EgHv9k.rst b/Misc/NEWS.d/next/Security/2018-10-31-15-39-17.bpo-35121.EgHv9k.rst
deleted file mode 100644
index d2eb8f1f352c..000000000000
--- a/Misc/NEWS.d/next/Security/2018-10-31-15-39-17.bpo-35121.EgHv9k.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-Don't send cookies of domain A without Domain attribute to domain B
-when domain A is a suffix match of domain B while using a cookiejar
-with :class:`http.cookiejar.DefaultCookiePolicy` policy. Patch by
-Karthikeyan Singaravelan.
diff --git a/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst b/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
deleted file mode 100644
index fc703b9c2469..000000000000
--- a/Misc/NEWS.d/next/Security/2019-01-15-18-16-05.bpo-35746.nMSd0j.rst
+++ /dev/null
@@ -1,4 +0,0 @@
-[CVE-2019-5010] Fix a NULL pointer deref in ssl module. The cert parser did
-not handle CRL distribution points with empty DP or URI correctly. A
-malicious or buggy certificate can result into segfault. Vulnerability
-(TALOS-2018-0758) reported by Colin Read and Nicolas Edet of Cisco.
diff --git a/Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.wpNNBD.rst b/Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.wpNNBD.rst
deleted file mode 100644
index 84d16f5a56ae..000000000000
--- a/Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.wpNNBD.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-Prevent fold function used in email header encoding from entering infinite
-loop when there are too many non-ASCII characters in a header.
diff --git a/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst b/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
deleted file mode 100644
index 5546394157f9..000000000000
--- a/Misc/NEWS.d/next/Security/2019-03-06-09-38-40.bpo-36216.6q1m4a.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Changes urlsplit() to raise ValueError when the URL contains characters that
-decompose under IDNA encoding (NFKC-normalization) into characters that
-affect how the URL is parsed.
diff --git a/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst b/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
deleted file mode 100644
index ed8027fb4d64..000000000000
--- a/Misc/NEWS.d/next/Security/2019-04-10-08-53-30.bpo-30458.51E-DA.rst
+++ /dev/null
@@ -1 +0,0 @@
-Address CVE-2019-9740 by disallowing URL paths with embedded whitespace or control characters through into the underlying http client request. Such potentially malicious header injection URLs now cause an http.client.InvalidURL exception to be raised.
diff --git a/Misc/NEWS.d/next/Security/2019-04-29-15-34-59.bpo-36742.QCUY0i.rst b/Misc/NEWS.d/next/Security/2019-04-29-15-34-59.bpo-36742.QCUY0i.rst
deleted file mode 100644
index d729ed2f3cd5..000000000000
--- a/Misc/NEWS.d/next/Security/2019-04-29-15-34-59.bpo-36742.QCUY0i.rst
+++ /dev/null
@@ -1 +0,0 @@
-Fixes mishandling of pre-normalization characters in urlsplit().
diff --git a/Misc/NEWS.d/next/Security/2019-05-21-23-20-18.bpo-35907.NC_zNK.rst b/Misc/NEWS.d/next/Security/2019-05-21-23-20-18.bpo-35907.NC_zNK.rst
deleted file mode 100644
index 37b567a5b6f9..000000000000
--- a/Misc/NEWS.d/next/Security/2019-05-21-23-20-18.bpo-35907.NC_zNK.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-CVE-2019-9948: Avoid file reading by disallowing ``local-file://`` and
-``local_file://`` URL schemes in ``URLopener().open()`` and
-``URLopener().retrieve()`` of :mod:`urllib.request`.
diff --git a/Misc/NEWS.d/next/Tests/2019-01-18-17-46-10.bpo-32947.Hk0KnM.rst b/Misc/NEWS.d/next/Tests/2019-01-18-17-46-10.bpo-32947.Hk0KnM.rst
deleted file mode 100644
index f508504ea65b..000000000000
--- a/Misc/NEWS.d/next/Tests/2019-01-18-17-46-10.bpo-32947.Hk0KnM.rst
+++ /dev/null
@@ -1 +0,0 @@
-test_ssl fixes for TLS 1.3 and OpenSSL 1.1.1.
diff --git a/Misc/NEWS.d/next/Tests/2019-02-24-01-58-38.bpo-27313.Sj9veH.rst b/Misc/NEWS.d/next/Tests/2019-02-24-01-58-38.bpo-27313.Sj9veH.rst
deleted file mode 100644
index 189b9cf69f07..000000000000
--- a/Misc/NEWS.d/next/Tests/2019-02-24-01-58-38.bpo-27313.Sj9veH.rst
+++ /dev/null
@@ -1 +0,0 @@
-Avoid test_ttk_guionly ComboboxTest failure with macOS Cocoa Tk.
diff --git a/Misc/NEWS.d/next/Tests/2019-05-06-18-29-54.bpo-35925.gwQPuC.rst b/Misc/NEWS.d/next/Tests/2019-05-06-18-29-54.bpo-35925.gwQPuC.rst
deleted file mode 100644
index 428326cdfe5b..000000000000
--- a/Misc/NEWS.d/next/Tests/2019-05-06-18-29-54.bpo-35925.gwQPuC.rst
+++ /dev/null
@@ -1 +0,0 @@
-Skip specific nntplib and ssl networking tests when they would otherwise fail due to a modern OS or distro with a default OpenSSL policy of rejecting connections to servers with weak certificates or disabling TLS below TLSv1.2.
diff --git a/Misc/NEWS.d/next/Tests/2019-05-08-15-55-46.bpo-36816.WBKRGZ.rst b/Misc/NEWS.d/next/Tests/2019-05-08-15-55-46.bpo-36816.WBKRGZ.rst
deleted file mode 100644
index 420dfe832366..000000000000
--- a/Misc/NEWS.d/next/Tests/2019-05-08-15-55-46.bpo-36816.WBKRGZ.rst
+++ /dev/null
@@ -1 +0,0 @@
-Update Lib/test/selfsigned_pythontestdotnet.pem to match self-signed.pythontest.net's new TLS certificate.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/macOS/2019-04-29-10-54-14.bpo-34602.Lrl2zU.rst b/Misc/NEWS.d/next/macOS/2019-04-29-10-54-14.bpo-34602.Lrl2zU.rst
deleted file mode 100644
index 6f7ac881c82e..000000000000
--- a/Misc/NEWS.d/next/macOS/2019-04-29-10-54-14.bpo-34602.Lrl2zU.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Avoid failures setting macOS stack resource limit with resource.setrlimit.
-This reverts an earlier fix for bpo-18075 which forced a non-default stack
-size when building the interpreter executable on macOS.
diff --git a/README.rst b/README.rst
index e1d13b07ee9f..48ed11934214 100644
--- a/README.rst
+++ b/README.rst
@@ -1,5 +1,5 @@
-This is Python version 3.6.8+
-=============================
+This is Python version 3.6.9 candidate 1
+========================================
.. image:: https://travis-ci.org/python/cpython.svg?branch=3.6
:alt: CPython build status on Travis CI
[View Less]
1
0
https://github.com/python/cpython/commit/c6ae56487d897c16e9da3fc15d65d4c54f…
commit: c6ae56487d897c16e9da3fc15d65d4c54f3c4b48
branch: 3.7
author: Ned Deily <nad(a)python.org>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-18T16:35:07-04:00
summary:
Update macOS installer welcome and readme for 3.7.4
files:
M Mac/BuildScript/resources/ReadMe.rtf
M Mac/BuildScript/resources/Welcome.rtf
diff --git a/Mac/BuildScript/resources/ReadMe.rtf b/Mac/BuildScript/resources/ReadMe.rtf
…
[View More]index 6677a6ae0ad6..3f870983b623 100644
--- a/Mac/BuildScript/resources/ReadMe.rtf
+++ b/Mac/BuildScript/resources/ReadMe.rtf
@@ -1,5 +1,6 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1561\cocoasubrtf400
-{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fmodern\fcharset0 CourierNewPSMT;}
+{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf500
+{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fswiss\fcharset0 Helvetica-Oblique;
+\f3\fmodern\fcharset0 CourierNewPSMT;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\margl1440\margr1440\vieww13380\viewh14600\viewkind0
@@ -9,86 +10,108 @@
\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
-\b \cf0 \ul \ulc0 Which installer variant should I use?
-\b0 \ulnone \
+\f1\b \cf0 \ul \ulc0 Which installer variant should I use?
+\f0\b0 \ulnone \
\
-For Python.3.7, python.org currently provides two installer variants for download: one that installs a
-\i 64-bit-only
-\i0 Python capable of running on
-\i macOS 10.9 (Mavericks)
-\i0 or later; and one that installs a
-\i 64-bit/32-bit Intel
-\i0 Python capable of running on
-\i macOS 10.6 (Snow Leopard)
-\i0 or later. (This ReadMe was installed with the
-\i $MACOSX_DEPLOYMENT_TARGET
-\i0 variant.) If you are running on macOS 10.9 or later and if you have no need for compatibility with older systems, use the 10.9 variant. Use the 10.6 variant if you are running on macOS 10.6 through 10.8 or if you want to produce standalone applications that can run on systems from 10.6. The Pythons installed by these installers are built with private copies of some third-party libraries not included with or newer than those in macOS itself. The list of these libraries varies by installer variant and is included at the end of the License.rtf file.
-\b \ul \
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\partightenfactor0
+
+\f1\b \cf0 CHANGED in 3.7.4:
+\f0\b0 The
+\f1\b 10.6+ 64-/32-bit installer variant is being deprecated
+\f0\b0 .
+\f1\b Python 3.8.0
+\f0\b0 will
+\f1\b not
+\f0\b0 include a binary installer for 10.6+ and
+\f1\b future bugfix releases of 3.7.x
+\f0\b0 may not, either. Mac OS X 10.6 Snow Leopard was released in 2009 and has not been supported by Apple for many years including lack of security updates. It is becoming increasingly difficult to ensure new Python features and bug fixes are compatible with such old systems especially with Apple's deprecation and removal of 32-bit support in recent and upcoming macOS releases. We believe that there is now very little usage of this installer variant and so we would like to focus our resources on supporting newer systems. We do not plan to intentionally break Python support on 10.6 and we will consider bug fixes for problems found when building from source on 10.6. \
+\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+\cf0 For Python.3.7, python.org currently provides two installer variants for download: one that installs a
+\f2\i 64-bit-only
+\f0\i0 Python capable of running on
+\f2\i macOS 10.9 (Mavericks)
+\f0\i0 or later; and one that installs a
+\f2\i 64-bit/32-bit Intel
+\f0\i0 Python capable of running on
+\f2\i macOS 10.6 (Snow Leopard)
+\f0\i0 or later. (This ReadMe was installed with the
+\f2\i $MACOSX_DEPLOYMENT_TARGET
+\f0\i0 variant.) If you are running on macOS 10.9 or later and if you have no need for compatibility with older systems, use the 10.9 variant. Use the 10.6 variant if you are running on macOS 10.6 through 10.8 or if you want to produce standalone applications that can run on systems from 10.6. The Pythons installed by these installers are built with private copies of some third-party libraries not included with or newer than those in macOS itself. The list of these libraries varies by installer variant and is included at the end of the License.rtf file.
+\f1\b \ul \
\
Certificate verification and OpenSSL\
-\b0 \ulnone \
-This variant of Python 3.7 includes its own private copy of OpenSSL 1.1.0. The deprecated Apple-supplied OpenSSL libraries are no longer used. This means that the trust certificates in system and user keychains managed by the
-\i Keychain Access
-\i0 application and the
-\i security
-\i0 command line utility are no longer used as defaults by the Python
-\f1 ssl
+\f0\b0 \ulnone \
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\partightenfactor0
+\cf0 This variant of Python 3.7 includes its own private copy of OpenSSL 1.1.1. The deprecated Apple-supplied OpenSSL libraries are no longer used. This means that the trust certificates in system and user keychains managed by the
+\f2\i Keychain Access
+\f0\i0 application and the
+\f2\i security
+\f0\i0 command line utility are no longer used as defaults by the Python
+\f3 ssl
\f0 module. A sample command script is included in
-\f1 /Applications/Python 3.7
+\f3 /Applications/Python 3.7
\f0 to install a curated bundle of default root certificates from the third-party
-\f1 certifi
+\f3 certifi
\f0 package ({\field{\*\fldinst{HYPERLINK "https://pypi.org/project/certifi/"}}{\fldrslt https://pypi.org/project/certifi/}}). If you choose to use
-\f1 certifi
+\f3 certifi
\f0 , you should consider subscribing to the{\field{\*\fldinst{HYPERLINK "https://certifi.io/en/latest/"}}{\fldrslt project's email update service}} to be notified when the certificate bundle is updated.\
-\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+\cf0 \
The bundled
-\f1 pip
+\f3 pip
\f0 included with this installer has its own default certificate store for verifying download connections.\
-\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\partightenfactor0
+
+\f1\b \cf0 \
+CHANGED in 3.7.4:
+\f0\b0 OpenSSL has been updated from 1.1.0 to 1.1.1.\
+\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\pardirnatural\partightenfactor0
+\cf0 \
-\b \ul Using IDLE or other Tk applications
-\b0 \ulnone \
+\f1\b \ul Using IDLE or other Tk applications
+\f0\b0 \ulnone \
\
Both installer variants now come with their own private version of Tcl/Tk 8.6. They no longer use system-supplied or third-party supplied versions of Tcl/Tk as in previous releases.\
-\b \ul \
+\f1\b \ul \
Other changes\
-\b0 \ulnone \
+\f0\b0 \ulnone \
For other changes in this release, see the
-\i What's new
-\i0 section in the {\field{\*\fldinst{HYPERLINK "https://www.python.org/doc/"}}{\fldrslt Documentation Set}} for this release and its
-\i Release Notes
-\i0 link at {\field{\*\fldinst{HYPERLINK "https://www.python.org/downloads/"}}{\fldrslt https://www.python.org/downloads/}}.\
+\f2\i What's new
+\f0\i0 section in the {\field{\*\fldinst{HYPERLINK "https://www.python.org/doc/"}}{\fldrslt Documentation Set}} for this release and its
+\f2\i Release Notes
+\f0\i0 link at {\field{\*\fldinst{HYPERLINK "https://www.python.org/downloads/"}}{\fldrslt https://www.python.org/downloads/}}.\
-\b \ul \
+\f1\b \ul \
Python 3 and Python 2 Co-existence\
-\b0 \ulnone \
+\f0\b0 \ulnone \
Python.org Python $VERSION and 2.7.x versions can both be installed on your system and will not conflict. Command names for Python 3 contain a 3 in them,
-\f1 python3
+\f3 python3
\f0 (or
-\f1 python$VERSION
+\f3 python$VERSION
\f0 ),
-\f1 idle3
+\f3 idle3
\f0 (or i
-\f1 dle$VERSION
+\f3 dle$VERSION
\f0 ),
-\f1 pip3
+\f3 pip3
\f0 (or
-\f1 pip$VERSION
+\f3 pip$VERSION
\f0 ), etc. Python 2.7 command names contain a 2 or no digit:
-\f1 python2
+\f3 python2
\f0 (or
-\f1 python2.7
+\f3 python2.7
\f0 or
-\f1 python
+\f3 python
\f0 ),
-\f1 idle2
+\f3 idle2
\f0 (or
-\f1 idle2.7
+\f3 idle2.7
\f0 or
-\f1 idle
+\f3 idle
\f0 ), etc.\
}
\ No newline at end of file
diff --git a/Mac/BuildScript/resources/Welcome.rtf b/Mac/BuildScript/resources/Welcome.rtf
index 0d124784d45e..3551b7ae00a4 100644
--- a/Mac/BuildScript/resources/Welcome.rtf
+++ b/Mac/BuildScript/resources/Welcome.rtf
@@ -1,4 +1,4 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf100
+{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf500
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fswiss\fcharset0 Helvetica-Bold;\f2\fmodern\fcharset0 CourierNewPSMT;
}
{\colortbl;\red255\green255\blue255;}
@@ -25,4 +25,8 @@ At the end of this install, click on
\f1\b NEW in 3.7.0:
\f0\b0 two installer variants (10.9+ 64-bit-only, 10.6+ 64-/32-bit), built-in Tcl/Tk 8.6 support (no additional third-party downloads!), OpenSSL 1.1.0, and more!\
+
+\f1\b \
+CHANGED in 3.7.4:
+\f0\b0 OpenSSL 1.1.1, 10.6+ 64-/32-bit installer variant deprecated\
}
\ No newline at end of file
[View Less]
1
0
https://github.com/python/cpython/commit/43b97ae15c8cbb8c383314bb75c867d0f2…
commit: 43b97ae15c8cbb8c383314bb75c867d0f2f34376
branch: 3.7
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T18:05:33-07:00
summary:
bpo-37156: Fix libssl DLL tag in MSI sources (GH-14219)
files:
M Tools/msi/msi.props
diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props
index 0fe822af9319..5da901c0215a 100644
--- a/Tools/msi/msi.props
+++ b/Tools/…
[View More]msi/msi.props
@@ -87,15 +87,16 @@
PyArchExt=$(PyArchExt);
PyTestExt=$(PyTestExt);
OptionalFeatureName=$(OutputName);
+ ssltag=-1_1;
</DefineConstants>
<DefineConstants Condition="'$(CRTRedist)' != ''">
$(DefineConstants);CRTRedist=$(CRTRedist);
</DefineConstants>
<DefineConstants Condition="$(Platform) != 'x64'">
- $(DefineConstants);Suffix32=-32;ssltag=-1_1;
+ $(DefineConstants);Suffix32=-32;
</DefineConstants>
<DefineConstants Condition="$(Platform) == 'x64'">
- $(DefineConstants);Suffix32=;ssltag=-1_1-x64;
+ $(DefineConstants);Suffix32=;
</DefineConstants>
</PropertyGroup>
[View Less]
1
0

[3.7] bpo-36985: Document typing.ForwardRef (GH-14216) (GH-14220)
by Miss Islington (bot) June 19, 2019
by Miss Islington (bot) June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/d0587353fe2dece91d2a9b8ddf2696fb5a…
commit: d0587353fe2dece91d2a9b8ddf2696fb5adc233a
branch: 3.7
author: Ivan Levkivskyi <levkivskyi(a)gmail.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-18T18:02:15-07:00
summary:
[3.7] bpo-36985: Document typing.ForwardRef (GH-14216) (GH-14220)
https://bugs.python.org/issue36985
files:
M Doc/library/typing.rst
diff --git a/Doc/library/typing.…
[View More]rst b/Doc/library/typing.rst
index 12f4c03f4232..5adc81c1e3c8 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -876,6 +876,13 @@ The module defines the following classes, functions and decorators:
.. versionchanged:: 3.6.1
Added support for default values, methods, and docstrings.
+.. class:: ForwardRef
+
+ A class used for internal typing representation of string forward references.
+ For example, ``List["SomeClass"]`` is implicitly transformed into
+ ``List[ForwardRef("SomeClass")]``. This class should not be instantiated by
+ a user, but may be used by introspection tools.
+
.. function:: NewType(typ)
A helper function to indicate a distinct types to a typechecker,
[View Less]
1
0

June 19, 2019
https://github.com/python/cpython/commit/0a28f8d379544eee897979da0ce99f0b44…
commit: 0a28f8d379544eee897979da0ce99f0b449b49dd
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T02:54:39+02:00
summary:
bpo-36710: Add tstate parameter in import.c (GH-14218)
* Add 'tstate' parameter to many internal import.c functions.
* _PyImportZip_Init() now gets 'tstate' parameter rather than
'interp'.
* Add 'interp' parameter …
[View More]to _PyState_ClearModules() and rename it
to _PyInterpreterState_ClearModules().
* Move private _PyImport_FindBuiltin() to the internal C API; add
'tstate' parameter to it.
* Remove private _PyImport_AddModuleObject() from the C API:
use public PyImport_AddModuleObject() instead.
* Remove private _PyImport_FindExtensionObjectEx() from the C API:
use private _PyImport_FindExtensionObject() instead.
files:
M Include/cpython/import.h
M Include/cpython/pystate.h
M Include/internal/pycore_import.h
M Include/internal/pycore_pylifecycle.h
M Include/internal/pycore_pystate.h
M Python/import.c
M Python/pylifecycle.c
M Python/pystate.c
diff --git a/Include/cpython/import.h b/Include/cpython/import.h
index 8dd7a0c5a4d1..c1b47121f124 100644
--- a/Include/cpython/import.h
+++ b/Include/cpython/import.h
@@ -11,21 +11,14 @@ PyMODINIT_FUNC PyInit__imp(void);
PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
-PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name,
- PyObject *modules);
PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
PyAPI_FUNC(void) _PyImport_AcquireLock(void);
PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
-PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
- const char *name, /* UTF-8 encoded string */
- PyObject *modules
- );
PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
-PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *,
- PyObject *);
+
PyAPI_FUNC(int) _PyImport_FixupBuiltin(
PyObject *mod,
const char *name, /* UTF-8 encoded string */
diff --git a/Include/cpython/pystate.h b/Include/cpython/pystate.h
index 94b0809cd4f0..f87235178036 100644
--- a/Include/cpython/pystate.h
+++ b/Include/cpython/pystate.h
@@ -148,7 +148,6 @@ struct _ts {
PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_Get(void);
PyAPI_FUNC(int) _PyState_AddModule(PyObject*, struct PyModuleDef*);
-PyAPI_FUNC(void) _PyState_ClearModules(void);
PyAPI_FUNC(PyThreadState *) _PyThreadState_Prealloc(PyInterpreterState *);
/* Similar to PyThreadState_Get(), but don't issue a fatal error
diff --git a/Include/internal/pycore_import.h b/Include/internal/pycore_import.h
index 6b728242aadc..bbcd170ab135 100644
--- a/Include/internal/pycore_import.h
+++ b/Include/internal/pycore_import.h
@@ -5,6 +5,11 @@
extern "C" {
#endif
+PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
+ PyThreadState *tstate,
+ const char *name /* UTF-8 encoded string */
+ );
+
extern void _PyImport_ReInitLock(void);
#ifdef __cplusplus
diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h
index 6bfadd49eef8..1c475b1b1188 100644
--- a/Include/internal/pycore_pylifecycle.h
+++ b/Include/internal/pycore_pylifecycle.h
@@ -55,7 +55,7 @@ extern int _PyFloat_Init(void);
extern PyStatus _Py_HashRandomization_Init(const PyConfig *);
extern PyStatus _PyTypes_Init(void);
-extern PyStatus _PyImportZip_Init(PyInterpreterState *interp);
+extern PyStatus _PyImportZip_Init(PyThreadState *tstate);
/* Various internal finalizers */
diff --git a/Include/internal/pycore_pystate.h b/Include/internal/pycore_pystate.h
index 3ab4009770c9..3bfbc272ee15 100644
--- a/Include/internal/pycore_pystate.h
+++ b/Include/internal/pycore_pystate.h
@@ -310,6 +310,9 @@ PyAPI_FUNC(PyThreadState *) _PyThreadState_Swap(
PyAPI_FUNC(PyStatus) _PyInterpreterState_Enable(_PyRuntimeState *runtime);
PyAPI_FUNC(void) _PyInterpreterState_DeleteExceptMain(_PyRuntimeState *runtime);
+/* Used by PyImport_Cleanup() */
+extern void _PyInterpreterState_ClearModules(PyInterpreterState *interp);
+
PyAPI_FUNC(void) _PyGILState_Reinit(_PyRuntimeState *runtime);
#ifdef __cplusplus
diff --git a/Python/import.c b/Python/import.c
index ab7db6bc17f6..5606d3bea456 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -4,6 +4,7 @@
#include "Python-ast.h"
#undef Yield /* undefine macro conflicting with <winbase.h> */
+#include "pycore_pyerrors.h"
#include "pycore_pyhash.h"
#include "pycore_pylifecycle.h"
#include "pycore_pymem.h"
@@ -25,6 +26,9 @@ extern "C" {
#define CACHEDIR "__pycache__"
+/* Forward references */
+static PyObject *import_add_module(PyThreadState *tstate, PyObject *name);
+
/* See _PyImport_FixupExtensionObject() below */
static PyObject *extensions = NULL;
@@ -91,25 +95,26 @@ _PyImportHooks_Init(void)
}
PyStatus
-_PyImportZip_Init(PyInterpreterState *interp)
+_PyImportZip_Init(PyThreadState *tstate)
{
PyObject *path_hooks, *zipimport;
int err = 0;
path_hooks = PySys_GetObject("path_hooks");
if (path_hooks == NULL) {
- PyErr_SetString(PyExc_RuntimeError, "unable to get sys.path_hooks");
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "unable to get sys.path_hooks");
goto error;
}
- int verbose = interp->config.verbose;
+ int verbose = tstate->interp->config.verbose;
if (verbose) {
PySys_WriteStderr("# installing zipimport hook\n");
}
zipimport = PyImport_ImportModule("zipimport");
if (zipimport == NULL) {
- PyErr_Clear(); /* No zip import module -- okay */
+ _PyErr_Clear(tstate); /* No zip import module -- okay */
if (verbose) {
PySys_WriteStderr("# can't import zipimport\n");
}
@@ -120,7 +125,7 @@ _PyImportZip_Init(PyInterpreterState *interp)
&PyId_zipimporter);
Py_DECREF(zipimport);
if (zipimporter == NULL) {
- PyErr_Clear(); /* No zipimporter object -- okay */
+ _PyErr_Clear(tstate); /* No zipimporter object -- okay */
if (verbose) {
PySys_WriteStderr("# can't import zipimport.zipimporter\n");
}
@@ -341,26 +346,30 @@ _PyImport_GetModuleId(struct _Py_Identifier *nameid)
int
_PyImport_SetModule(PyObject *name, PyObject *m)
{
- PyObject *modules = PyImport_GetModuleDict();
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *modules = tstate->interp->modules;
return PyObject_SetItem(modules, name, m);
}
int
_PyImport_SetModuleString(const char *name, PyObject *m)
{
- PyObject *modules = PyImport_GetModuleDict();
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *modules = tstate->interp->modules;
return PyMapping_SetItemString(modules, name, m);
}
-PyObject *
-PyImport_GetModule(PyObject *name)
+static PyObject *
+import_get_module(PyThreadState *tstate, PyObject *name)
{
- PyObject *m;
- PyObject *modules = PyImport_GetModuleDict();
+ PyObject *modules = tstate->interp->modules;
if (modules == NULL) {
- PyErr_SetString(PyExc_RuntimeError, "unable to get sys.modules");
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "unable to get sys.modules");
return NULL;
}
+
+ PyObject *m;
Py_INCREF(modules);
if (PyDict_CheckExact(modules)) {
m = PyDict_GetItemWithError(modules, name); /* borrowed */
@@ -368,8 +377,8 @@ PyImport_GetModule(PyObject *name)
}
else {
m = PyObject_GetItem(modules, name);
- if (m == NULL && PyErr_ExceptionMatches(PyExc_KeyError)) {
- PyErr_Clear();
+ if (m == NULL && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
}
}
Py_DECREF(modules);
@@ -377,6 +386,14 @@ PyImport_GetModule(PyObject *name)
}
+PyObject *
+PyImport_GetModule(PyObject *name)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return import_get_module(tstate, name);
+}
+
+
/* List of names to clear in sys */
static const char * const sys_deletes[] = {
"path", "argv", "ps1", "ps2",
@@ -398,15 +415,13 @@ static const char * const sys_files[] = {
void
PyImport_Cleanup(void)
{
- Py_ssize_t pos;
- PyObject *key, *value, *dict;
- PyInterpreterState *interp = _PyInterpreterState_Get();
- PyObject *modules = PyImport_GetModuleDict();
- PyObject *weaklist = NULL;
- const char * const *p;
-
- if (modules == NULL)
- return; /* Already done */
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyInterpreterState *interp = tstate->interp;
+ PyObject *modules = interp->modules;
+ if (modules == NULL) {
+ /* Already done */
+ return;
+ }
/* Delete some special variables first. These are common
places where user values hide and people complain when their
@@ -424,6 +439,7 @@ PyImport_Cleanup(void)
PyErr_WriteUnraisable(NULL);
}
+ const char * const *p;
for (p = sys_deletes; *p != NULL; p++) {
if (verbose) {
PySys_WriteStderr("# clear sys.%s\n", *p);
@@ -436,9 +452,10 @@ PyImport_Cleanup(void)
if (verbose) {
PySys_WriteStderr("# restore sys.%s\n", *p);
}
- value = _PyDict_GetItemStringWithError(interp->sysdict, *(p+1));
+ PyObject *value = _PyDict_GetItemStringWithError(interp->sysdict,
+ *(p+1));
if (value == NULL) {
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
PyErr_WriteUnraisable(NULL);
}
value = Py_None;
@@ -452,7 +469,7 @@ PyImport_Cleanup(void)
modules when they are removed from sys.modules. The name is used
for diagnosis messages (in verbose mode), while the weakref helps
detect those modules which have been held alive. */
- weaklist = PyList_New(0);
+ PyObject *weaklist = PyList_New(0);
if (weaklist == NULL) {
PyErr_WriteUnraisable(NULL);
}
@@ -486,7 +503,8 @@ PyImport_Cleanup(void)
/* Remove all modules from sys.modules, hoping that garbage collection
can reclaim most of them. */
if (PyDict_CheckExact(modules)) {
- pos = 0;
+ Py_ssize_t pos = 0;
+ PyObject *key, *value;
while (PyDict_Next(modules, &pos, &key, &value)) {
CLEAR_MODULE(key, value);
}
@@ -497,8 +515,9 @@ PyImport_Cleanup(void)
PyErr_WriteUnraisable(NULL);
}
else {
+ PyObject *key;
while ((key = PyIter_Next(iterator))) {
- value = PyObject_GetItem(modules, key);
+ PyObject *value = PyObject_GetItem(modules, key);
if (value == NULL) {
PyErr_WriteUnraisable(NULL);
continue;
@@ -526,17 +545,17 @@ PyImport_Cleanup(void)
}
/* Restore the original builtins dict, to ensure that any
user data gets cleared. */
- dict = PyDict_Copy(interp->builtins);
+ PyObject *dict = PyDict_Copy(interp->builtins);
if (dict == NULL) {
PyErr_WriteUnraisable(NULL);
}
PyDict_Clear(interp->builtins);
if (PyDict_Update(interp->builtins, interp->builtins_copy)) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
}
Py_XDECREF(dict);
/* Clear module dict copies stored in the interpreter state */
- _PyState_ClearModules();
+ _PyInterpreterState_ClearModules(tstate->interp);
/* Collect references */
_PyGC_CollectNoFail();
/* Dump GC stats before it's too late, since it uses the warnings
@@ -651,7 +670,7 @@ PyImport_GetMagicTag(void)
int
_PyImport_FixupExtensionObject(PyObject *mod, PyObject *name,
- PyObject *filename, PyObject *modules)
+ PyObject *filename, PyObject *modules)
{
PyObject *dict, *key;
struct PyModuleDef *def;
@@ -713,33 +732,32 @@ _PyImport_FixupBuiltin(PyObject *mod, const char *name, PyObject *modules)
return res;
}
-PyObject *
-_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
-{
- PyObject *modules = PyImport_GetModuleDict();
- return _PyImport_FindExtensionObjectEx(name, filename, modules);
-}
-
-PyObject *
-_PyImport_FindExtensionObjectEx(PyObject *name, PyObject *filename,
- PyObject *modules)
+static PyObject *
+import_find_extension(PyThreadState *tstate, PyObject *name,
+ PyObject *filename)
{
- PyObject *mod, *mdict, *key;
- PyModuleDef* def;
- if (extensions == NULL)
+ if (extensions == NULL) {
return NULL;
- key = PyTuple_Pack(2, filename, name);
- if (key == NULL)
+ }
+
+ PyObject *key = PyTuple_Pack(2, filename, name);
+ if (key == NULL) {
return NULL;
- def = (PyModuleDef *)PyDict_GetItemWithError(extensions, key);
+ }
+ PyModuleDef* def = (PyModuleDef *)PyDict_GetItemWithError(extensions, key);
Py_DECREF(key);
- if (def == NULL)
+ if (def == NULL) {
return NULL;
+ }
+
+ PyObject *mod, *mdict;
+ PyObject *modules = tstate->interp->modules;
+
if (def->m_size == -1) {
/* Module does not support repeated initialization */
if (def->m_base.m_copy == NULL)
return NULL;
- mod = _PyImport_AddModuleObject(name, modules);
+ mod = import_add_module(tstate, name);
if (mod == NULL)
return NULL;
mdict = PyModule_GetDict(mod);
@@ -764,23 +782,31 @@ _PyImport_FindExtensionObjectEx(PyObject *name, PyObject *filename,
PyMapping_DelItem(modules, name);
return NULL;
}
- int verbose = _PyInterpreterState_Get()->config.verbose;
+
+ int verbose = tstate->interp->config.verbose;
if (verbose) {
PySys_FormatStderr("import %U # previously loaded (%R)\n",
name, filename);
}
return mod;
+}
+PyObject *
+_PyImport_FindExtensionObject(PyObject *name, PyObject *filename)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return import_find_extension(tstate, name, filename);
}
+
PyObject *
-_PyImport_FindBuiltin(const char *name, PyObject *modules)
+_PyImport_FindBuiltin(PyThreadState *tstate, const char *name)
{
PyObject *res, *nameobj;
nameobj = PyUnicode_InternFromString(name);
if (nameobj == NULL)
return NULL;
- res = _PyImport_FindExtensionObjectEx(nameobj, nameobj, modules);
+ res = import_find_extension(tstate, nameobj, nameobj);
Py_DECREF(nameobj);
return res;
}
@@ -791,16 +817,16 @@ _PyImport_FindBuiltin(const char *name, PyObject *modules)
Because the former action is most common, THIS DOES NOT RETURN A
'NEW' REFERENCE! */
-PyObject *
-PyImport_AddModuleObject(PyObject *name)
+static PyObject *
+import_add_module(PyThreadState *tstate, PyObject *name)
{
- PyObject *modules = PyImport_GetModuleDict();
- return _PyImport_AddModuleObject(name, modules);
-}
+ PyObject *modules = tstate->interp->modules;
+ if (modules == NULL) {
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "no import module dictionary");
+ return NULL;
+ }
-PyObject *
-_PyImport_AddModuleObject(PyObject *name, PyObject *modules)
-{
PyObject *m;
if (PyDict_CheckExact(modules)) {
m = PyDict_GetItemWithError(modules, name);
@@ -809,11 +835,11 @@ _PyImport_AddModuleObject(PyObject *name, PyObject *modules)
m = PyObject_GetItem(modules, name);
// For backward-comaptibility we copy the behavior
// of PyDict_GetItemWithError().
- if (PyErr_ExceptionMatches(PyExc_KeyError)) {
- PyErr_Clear();
+ if (_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
}
}
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
return NULL;
}
if (m != NULL && PyModule_Check(m)) {
@@ -831,14 +857,22 @@ _PyImport_AddModuleObject(PyObject *name, PyObject *modules)
return m;
}
+PyObject *
+PyImport_AddModuleObject(PyObject *name)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return import_add_module(tstate, name);
+}
+
+
PyObject *
PyImport_AddModule(const char *name)
{
- PyObject *nameobj, *module;
- nameobj = PyUnicode_FromString(name);
- if (nameobj == NULL)
+ PyObject *nameobj = PyUnicode_FromString(name);
+ if (nameobj == NULL) {
return NULL;
- module = PyImport_AddModuleObject(nameobj);
+ }
+ PyObject *module = PyImport_AddModuleObject(nameobj);
Py_DECREF(nameobj);
return module;
}
@@ -846,20 +880,24 @@ PyImport_AddModule(const char *name)
/* Remove name from sys.modules, if it's there. */
static void
-remove_module(PyObject *name)
+remove_module(PyThreadState *tstate, PyObject *name)
{
PyObject *type, *value, *traceback;
- PyErr_Fetch(&type, &value, &traceback);
- PyObject *modules = PyImport_GetModuleDict();
+ _PyErr_Fetch(tstate, &type, &value, &traceback);
+
+ PyObject *modules = tstate->interp->modules;
if (!PyMapping_HasKey(modules, name)) {
goto out;
}
if (PyMapping_DelItem(modules, name) < 0) {
- Py_FatalError("import: deleting existing key in "
- "sys.modules failed");
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "deleting key in sys.modules failed");
+ _PyErr_ChainExceptions(type, value, traceback);
+ return;
}
+
out:
- PyErr_Restore(type, value, traceback);
+ _PyErr_Restore(tstate, type, value, traceback);
}
@@ -944,23 +982,23 @@ PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co,
}
static PyObject *
-module_dict_for_exec(PyObject *name)
+module_dict_for_exec(PyThreadState *tstate, PyObject *name)
{
_Py_IDENTIFIER(__builtins__);
PyObject *m, *d = NULL;
- m = PyImport_AddModuleObject(name);
+ m = import_add_module(tstate, name);
if (m == NULL)
return NULL;
/* If the module is being reloaded, we get the old module back
and re-use its dict to exec the new code. */
d = PyModule_GetDict(m);
if (_PyDict_GetItemIdWithError(d, &PyId___builtins__) == NULL) {
- if (PyErr_Occurred() ||
+ if (_PyErr_Occurred(tstate) ||
_PyDict_SetItemId(d, &PyId___builtins__,
PyEval_GetBuiltins()) != 0)
{
- remove_module(name);
+ remove_module(tstate, name);
return NULL;
}
}
@@ -969,22 +1007,23 @@ module_dict_for_exec(PyObject *name)
}
static PyObject *
-exec_code_in_module(PyObject *name, PyObject *module_dict, PyObject *code_object)
+exec_code_in_module(PyThreadState *tstate, PyObject *name,
+ PyObject *module_dict, PyObject *code_object)
{
PyObject *v, *m;
v = PyEval_EvalCode(code_object, module_dict, module_dict);
if (v == NULL) {
- remove_module(name);
+ remove_module(tstate, name);
return NULL;
}
Py_DECREF(v);
- m = PyImport_GetModule(name);
- if (m == NULL && !PyErr_Occurred()) {
- PyErr_Format(PyExc_ImportError,
- "Loaded module %R not found in sys.modules",
- name);
+ m = import_get_module(tstate, name);
+ if (m == NULL && !_PyErr_Occurred(tstate)) {
+ _PyErr_Format(tstate, PyExc_ImportError,
+ "Loaded module %R not found in sys.modules",
+ name);
}
return m;
@@ -994,11 +1033,11 @@ PyObject*
PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
PyObject *cpathname)
{
+ PyThreadState *tstate = _PyThreadState_GET();
PyObject *d, *external, *res;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
_Py_IDENTIFIER(_fix_up_module);
- d = module_dict_for_exec(name);
+ d = module_dict_for_exec(tstate, name);
if (d == NULL) {
return NULL;
}
@@ -1006,7 +1045,8 @@ PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
if (pathname == NULL) {
pathname = ((PyCodeObject *)co)->co_filename;
}
- external = PyObject_GetAttrString(interp->importlib, "_bootstrap_external");
+ external = PyObject_GetAttrString(tstate->interp->importlib,
+ "_bootstrap_external");
if (external == NULL)
return NULL;
res = _PyObject_CallMethodIdObjArgs(external,
@@ -1015,7 +1055,7 @@ PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname,
Py_DECREF(external);
if (res != NULL) {
Py_DECREF(res);
- res = exec_code_in_module(name, d, co);
+ res = exec_code_in_module(tstate, name, d, co);
}
return res;
}
@@ -1114,8 +1154,8 @@ is_builtin(PyObject *name)
Returns a borrowed reference. */
static PyObject *
-get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
- PyObject *p)
+get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache,
+ PyObject *path_hooks, PyObject *p)
{
PyObject *importer;
Py_ssize_t j, nhooks;
@@ -1129,7 +1169,7 @@ get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
return NULL; /* Shouldn't happen */
importer = PyDict_GetItemWithError(path_importer_cache, p);
- if (importer != NULL || PyErr_Occurred())
+ if (importer != NULL || _PyErr_Occurred(tstate))
return importer;
/* set path_importer_cache[p] to None to avoid recursion */
@@ -1144,10 +1184,10 @@ get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
if (importer != NULL)
break;
- if (!PyErr_ExceptionMatches(PyExc_ImportError)) {
+ if (!_PyErr_ExceptionMatches(tstate, PyExc_ImportError)) {
return NULL;
}
- PyErr_Clear();
+ _PyErr_Clear(tstate);
}
if (importer == NULL) {
return Py_None;
@@ -1162,13 +1202,15 @@ get_path_importer(PyObject *path_importer_cache, PyObject *path_hooks,
}
PyObject *
-PyImport_GetImporter(PyObject *path) {
+PyImport_GetImporter(PyObject *path)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
PyObject *importer=NULL, *path_importer_cache=NULL, *path_hooks=NULL;
path_importer_cache = PySys_GetObject("path_importer_cache");
path_hooks = PySys_GetObject("path_hooks");
if (path_importer_cache != NULL && path_hooks != NULL) {
- importer = get_path_importer(path_importer_cache,
+ importer = get_path_importer(tstate, path_importer_cache,
path_hooks, path);
}
Py_XINCREF(importer); /* get_path_importer returns a borrowed reference */
@@ -1188,6 +1230,7 @@ static PyObject *
_imp_create_builtin(PyObject *module, PyObject *spec)
/*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
struct _inittab *p;
PyObject *name;
const char *namestr;
@@ -1199,7 +1242,7 @@ _imp_create_builtin(PyObject *module, PyObject *spec)
}
mod = _PyImport_FindExtensionObject(name, name);
- if (mod || PyErr_Occurred()) {
+ if (mod || _PyErr_Occurred(tstate)) {
Py_DECREF(name);
Py_XINCREF(mod);
return mod;
@@ -1211,7 +1254,7 @@ _imp_create_builtin(PyObject *module, PyObject *spec)
return NULL;
}
- PyObject *modules = NULL;
+ PyObject *modules = tstate->interp->modules;
for (p = PyImport_Inittab; p->name != NULL; p++) {
PyModuleDef *def;
if (_PyUnicode_EqualToASCIIString(name, p->name)) {
@@ -1237,9 +1280,6 @@ _imp_create_builtin(PyObject *module, PyObject *spec)
return NULL;
}
def->m_base.m_init = p->initfunc;
- if (modules == NULL) {
- modules = PyImport_GetModuleDict();
- }
if (_PyImport_FixupExtensionObject(mod, name, name,
modules) < 0) {
Py_DECREF(name);
@@ -1328,6 +1368,7 @@ is_frozen_package(PyObject *name)
int
PyImport_ImportFrozenModuleObject(PyObject *name)
{
+ PyThreadState *tstate = _PyThreadState_GET();
const struct _frozen *p;
PyObject *co, *m, *d;
int ispackage;
@@ -1338,9 +1379,9 @@ PyImport_ImportFrozenModuleObject(PyObject *name)
if (p == NULL)
return 0;
if (p->code == NULL) {
- PyErr_Format(PyExc_ImportError,
- "Excluded frozen object named %R",
- name);
+ _PyErr_Format(tstate, PyExc_ImportError,
+ "Excluded frozen object named %R",
+ name);
return -1;
}
size = p->size;
@@ -1351,16 +1392,16 @@ PyImport_ImportFrozenModuleObject(PyObject *name)
if (co == NULL)
return -1;
if (!PyCode_Check(co)) {
- PyErr_Format(PyExc_TypeError,
- "frozen object %R is not a code object",
- name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "frozen object %R is not a code object",
+ name);
goto err_return;
}
if (ispackage) {
/* Set __path__ to the empty list */
PyObject *l;
int err;
- m = PyImport_AddModuleObject(name);
+ m = import_add_module(tstate, name);
if (m == NULL)
goto err_return;
d = PyModule_GetDict(m);
@@ -1373,16 +1414,18 @@ PyImport_ImportFrozenModuleObject(PyObject *name)
if (err != 0)
goto err_return;
}
- d = module_dict_for_exec(name);
+ d = module_dict_for_exec(tstate, name);
if (d == NULL) {
goto err_return;
}
- m = exec_code_in_module(name, d, co);
- if (m == NULL)
+ m = exec_code_in_module(tstate, name, d, co);
+ if (m == NULL) {
goto err_return;
+ }
Py_DECREF(co);
Py_DECREF(m);
return 1;
+
err_return:
Py_DECREF(co);
return -1;
@@ -1438,7 +1481,7 @@ PyImport_ImportModuleNoBlock(const char *name)
/* Remove importlib frames from the traceback,
* except in Verbose mode. */
static void
-remove_importlib_frames(PyInterpreterState *interp)
+remove_importlib_frames(PyThreadState *tstate)
{
const char *importlib_filename = "<frozen importlib._bootstrap>";
const char *external_filename = "<frozen importlib._bootstrap_external>";
@@ -1452,8 +1495,8 @@ remove_importlib_frames(PyInterpreterState *interp)
from the traceback. We always trim chunks
which end with a call to "_call_with_frames_removed". */
- PyErr_Fetch(&exception, &value, &base_tb);
- if (!exception || interp->config.verbose) {
+ _PyErr_Fetch(tstate, &exception, &value, &base_tb);
+ if (!exception || tstate->interp->config.verbose) {
goto done;
}
@@ -1492,12 +1535,12 @@ remove_importlib_frames(PyInterpreterState *interp)
tb = next;
}
done:
- PyErr_Restore(exception, value, base_tb);
+ _PyErr_Restore(tstate, exception, value, base_tb);
}
static PyObject *
-resolve_name(PyObject *name, PyObject *globals, int level)
+resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level)
{
_Py_IDENTIFIER(__spec__);
_Py_IDENTIFIER(__package__);
@@ -1512,29 +1555,30 @@ resolve_name(PyObject *name, PyObject *globals, int level)
int level_up;
if (globals == NULL) {
- PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
+ _PyErr_SetString(tstate, PyExc_KeyError, "'__name__' not in globals");
goto error;
}
if (!PyDict_Check(globals)) {
- PyErr_SetString(PyExc_TypeError, "globals must be a dict");
+ _PyErr_SetString(tstate, PyExc_TypeError, "globals must be a dict");
goto error;
}
package = _PyDict_GetItemIdWithError(globals, &PyId___package__);
if (package == Py_None) {
package = NULL;
}
- else if (package == NULL && PyErr_Occurred()) {
+ else if (package == NULL && _PyErr_Occurred(tstate)) {
goto error;
}
spec = _PyDict_GetItemIdWithError(globals, &PyId___spec__);
- if (spec == NULL && PyErr_Occurred()) {
+ if (spec == NULL && _PyErr_Occurred(tstate)) {
goto error;
}
if (package != NULL) {
Py_INCREF(package);
if (!PyUnicode_Check(package)) {
- PyErr_SetString(PyExc_TypeError, "package must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "package must be a string");
goto error;
}
else if (spec != NULL && spec != Py_None) {
@@ -1563,8 +1607,8 @@ resolve_name(PyObject *name, PyObject *globals, int level)
goto error;
}
else if (!PyUnicode_Check(package)) {
- PyErr_SetString(PyExc_TypeError,
- "__spec__.parent must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "__spec__.parent must be a string");
goto error;
}
}
@@ -1577,22 +1621,24 @@ resolve_name(PyObject *name, PyObject *globals, int level)
package = _PyDict_GetItemIdWithError(globals, &PyId___name__);
if (package == NULL) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_KeyError, "'__name__' not in globals");
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_SetString(tstate, PyExc_KeyError,
+ "'__name__' not in globals");
}
goto error;
}
Py_INCREF(package);
if (!PyUnicode_Check(package)) {
- PyErr_SetString(PyExc_TypeError, "__name__ must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "__name__ must be a string");
goto error;
}
if (_PyDict_GetItemIdWithError(globals, &PyId___path__) == NULL) {
Py_ssize_t dot;
- if (PyErr_Occurred() || PyUnicode_READY(package) < 0) {
+ if (_PyErr_Occurred(tstate) || PyUnicode_READY(package) < 0) {
goto error;
}
@@ -1614,8 +1660,9 @@ resolve_name(PyObject *name, PyObject *globals, int level)
last_dot = PyUnicode_GET_LENGTH(package);
if (last_dot == 0) {
- PyErr_SetString(PyExc_ImportError,
- "attempted relative import with no known parent package");
+ _PyErr_SetString(tstate, PyExc_ImportError,
+ "attempted relative import "
+ "with no known parent package");
goto error;
}
@@ -1625,9 +1672,9 @@ resolve_name(PyObject *name, PyObject *globals, int level)
goto error;
}
else if (last_dot == -1) {
- PyErr_SetString(PyExc_ValueError,
- "attempted relative import beyond top-level "
- "package");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "attempted relative import beyond top-level "
+ "package");
goto error;
}
}
@@ -1648,11 +1695,11 @@ resolve_name(PyObject *name, PyObject *globals, int level)
}
static PyObject *
-import_find_and_load(PyObject *abs_name)
+import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
{
_Py_IDENTIFIER(_find_and_load);
PyObject *mod = NULL;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = tstate->interp;
int import_time = interp->config.import_time;
static int import_level;
static _PyTime_t accumulated;
@@ -1719,16 +1766,17 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
PyObject *locals, PyObject *fromlist,
int level)
{
+ PyThreadState *tstate = _PyThreadState_GET();
_Py_IDENTIFIER(_handle_fromlist);
PyObject *abs_name = NULL;
PyObject *final_mod = NULL;
PyObject *mod = NULL;
PyObject *package = NULL;
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
+ PyInterpreterState *interp = tstate->interp;
int has_from;
if (name == NULL) {
- PyErr_SetString(PyExc_ValueError, "Empty module name");
+ _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
goto error;
}
@@ -1736,33 +1784,34 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
for added performance. */
if (!PyUnicode_Check(name)) {
- PyErr_SetString(PyExc_TypeError, "module name must be a string");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "module name must be a string");
goto error;
}
if (PyUnicode_READY(name) < 0) {
goto error;
}
if (level < 0) {
- PyErr_SetString(PyExc_ValueError, "level must be >= 0");
+ _PyErr_SetString(tstate, PyExc_ValueError, "level must be >= 0");
goto error;
}
if (level > 0) {
- abs_name = resolve_name(name, globals, level);
+ abs_name = resolve_name(tstate, name, globals, level);
if (abs_name == NULL)
goto error;
}
else { /* level == 0 */
if (PyUnicode_GET_LENGTH(name) == 0) {
- PyErr_SetString(PyExc_ValueError, "Empty module name");
+ _PyErr_SetString(tstate, PyExc_ValueError, "Empty module name");
goto error;
}
abs_name = name;
Py_INCREF(abs_name);
}
- mod = PyImport_GetModule(abs_name);
- if (mod == NULL && PyErr_Occurred()) {
+ mod = import_get_module(tstate, abs_name);
+ if (mod == NULL && _PyErr_Occurred(tstate)) {
goto error;
}
@@ -1791,7 +1840,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
}
else {
Py_XDECREF(mod);
- mod = import_find_and_load(abs_name);
+ mod = import_find_and_load(tstate, abs_name);
if (mod == NULL) {
goto error;
}
@@ -1838,13 +1887,13 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
goto error;
}
- final_mod = PyImport_GetModule(to_return);
+ final_mod = import_get_module(tstate, to_return);
Py_DECREF(to_return);
if (final_mod == NULL) {
- if (!PyErr_Occurred()) {
- PyErr_Format(PyExc_KeyError,
- "%R not in sys.modules as expected",
- to_return);
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_Format(tstate, PyExc_KeyError,
+ "%R not in sys.modules as expected",
+ to_return);
}
goto error;
}
@@ -1878,7 +1927,7 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
Py_XDECREF(mod);
Py_XDECREF(package);
if (final_mod == NULL) {
- remove_importlib_frames(interp);
+ remove_importlib_frames(tstate);
}
return final_mod;
}
@@ -1937,6 +1986,7 @@ PyImport_ReloadModule(PyObject *m)
PyObject *
PyImport_Import(PyObject *module_name)
{
+ PyThreadState *tstate = _PyThreadState_GET();
static PyObject *silly_list = NULL;
static PyObject *builtins_str = NULL;
static PyObject *import_str = NULL;
@@ -1980,8 +2030,9 @@ PyImport_Import(PyObject *module_name)
/* Get the __import__ function from the builtins */
if (PyDict_Check(builtins)) {
import = PyObject_GetItem(builtins, import_str);
- if (import == NULL)
- PyErr_SetObject(PyExc_KeyError, import_str);
+ if (import == NULL) {
+ _PyErr_SetObject(tstate, PyExc_KeyError, import_str);
+ }
}
else
import = PyObject_GetAttr(builtins, import_str);
@@ -1997,9 +2048,9 @@ PyImport_Import(PyObject *module_name)
goto err;
Py_DECREF(r);
- r = PyImport_GetModule(module_name);
- if (r == NULL && !PyErr_Occurred()) {
- PyErr_SetObject(PyExc_KeyError, module_name);
+ r = import_get_module(tstate, module_name);
+ if (r == NULL && !_PyErr_Occurred(tstate)) {
+ _PyErr_SetObject(tstate, PyExc_KeyError, module_name);
}
err:
@@ -2060,6 +2111,7 @@ static PyObject *
_imp_init_frozen_impl(PyObject *module, PyObject *name)
/*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
int ret;
PyObject *m;
@@ -2069,7 +2121,7 @@ _imp_init_frozen_impl(PyObject *module, PyObject *name)
if (ret == 0) {
Py_RETURN_NONE;
}
- m = PyImport_AddModuleObject(name);
+ m = import_add_module(tstate, name);
Py_XINCREF(m);
return m;
}
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 54e8ce2b1557..4a97295102f7 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -6,6 +6,7 @@
#undef Yield /* undefine macro conflicting with <winbase.h> */
#include "pycore_ceval.h"
#include "pycore_context.h"
+#include "pycore_import.h" /* _PyImport_FindBuiltin */
#include "pycore_initconfig.h"
#include "pycore_fileutils.h"
#include "pycore_hamt.h"
@@ -197,17 +198,17 @@ init_importlib(PyInterpreterState *interp, PyObject *sysmod)
}
static PyStatus
-init_importlib_external(PyInterpreterState *interp)
+init_importlib_external(PyThreadState *tstate)
{
PyObject *value;
- value = PyObject_CallMethod(interp->importlib,
+ value = PyObject_CallMethod(tstate->interp->importlib,
"_install_external_importers", "");
if (value == NULL) {
PyErr_Print();
return _PyStatus_ERR("external importer setup failed");
}
Py_DECREF(value);
- return _PyImportZip_Init(interp);
+ return _PyImportZip_Init(tstate);
}
/* Helper functions to better handle the legacy C locale
@@ -924,7 +925,7 @@ pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
return _PyStatus_ERR("can't finish initializing sys");
}
- PyStatus status = init_importlib_external(interp);
+ PyStatus status = init_importlib_external(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -1449,7 +1450,7 @@ new_interpreter(PyThreadState **tstate_p)
}
interp->modules = modules;
- PyObject *sysmod = _PyImport_FindBuiltin("sys", modules);
+ PyObject *sysmod = _PyImport_FindBuiltin(tstate, "sys");
if (sysmod != NULL) {
interp->sysdict = PyModule_GetDict(sysmod);
if (interp->sysdict == NULL) {
@@ -1465,7 +1466,7 @@ new_interpreter(PyThreadState **tstate_p)
goto handle_error;
}
- PyObject *bimod = _PyImport_FindBuiltin("builtins", modules);
+ PyObject *bimod = _PyImport_FindBuiltin(tstate, "builtins");
if (bimod != NULL) {
interp->builtins = PyModule_GetDict(bimod);
if (interp->builtins == NULL)
@@ -1497,7 +1498,7 @@ new_interpreter(PyThreadState **tstate_p)
return status;
}
- status = init_importlib_external(interp);
+ status = init_importlib_external(tstate);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
diff --git a/Python/pystate.c b/Python/pystate.c
index 833e0fb30dcb..1e2b48045897 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -741,28 +741,32 @@ PyState_RemoveModule(struct PyModuleDef* def)
return PyList_SetItem(state->modules_by_index, index, Py_None);
}
-/* used by import.c:PyImport_Cleanup */
+/* Used by PyImport_Cleanup() */
void
-_PyState_ClearModules(void)
+_PyInterpreterState_ClearModules(PyInterpreterState *interp)
{
- PyInterpreterState *state = _PyInterpreterState_GET_UNSAFE();
- if (state->modules_by_index) {
- Py_ssize_t i;
- for (i = 0; i < PyList_GET_SIZE(state->modules_by_index); i++) {
- PyObject *m = PyList_GET_ITEM(state->modules_by_index, i);
- if (PyModule_Check(m)) {
- /* cleanup the saved copy of module dicts */
- PyModuleDef *md = PyModule_GetDef(m);
- if (md)
- Py_CLEAR(md->m_base.m_copy);
+ if (!interp->modules_by_index) {
+ return;
+ }
+
+ Py_ssize_t i;
+ for (i = 0; i < PyList_GET_SIZE(interp->modules_by_index); i++) {
+ PyObject *m = PyList_GET_ITEM(interp->modules_by_index, i);
+ if (PyModule_Check(m)) {
+ /* cleanup the saved copy of module dicts */
+ PyModuleDef *md = PyModule_GetDef(m);
+ if (md) {
+ Py_CLEAR(md->m_base.m_copy);
}
}
- /* Setting modules_by_index to NULL could be dangerous, so we
- clear the list instead. */
- if (PyList_SetSlice(state->modules_by_index,
- 0, PyList_GET_SIZE(state->modules_by_index),
- NULL))
- PyErr_WriteUnraisable(state->modules_by_index);
+ }
+
+ /* Setting modules_by_index to NULL could be dangerous, so we
+ clear the list instead. */
+ if (PyList_SetSlice(interp->modules_by_index,
+ 0, PyList_GET_SIZE(interp->modules_by_index),
+ NULL)) {
+ PyErr_WriteUnraisable(interp->modules_by_index);
}
}
[View Less]
1
0
https://github.com/python/cpython/commit/fff695b9abaa1075ceee95880dba26307d…
commit: fff695b9abaa1075ceee95880dba26307df1e7e5
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T17:38:43-07:00
summary:
Document typing.ForwardRef (GH-14216)
(cherry picked from commit 809ff1181ccc09c3b629f3d0ec66e13eaa111b2e)
Co-authored-by: Ivan Levkivskyi <levkivskyi(a)gmail.com>
files:
M …
[View More]Doc/library/typing.rst
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index 1a766c29a57a..d2dd03d50fc6 100644
--- a/Doc/library/typing.rst
+++ b/Doc/library/typing.rst
@@ -1001,6 +1001,13 @@ The module defines the following classes, functions and decorators:
.. versionadded:: 3.8
+.. class:: ForwardRef
+
+ A class used for internal typing representation of string forward references.
+ For example, ``List["SomeClass"]`` is implicitly transformed into
+ ``List[ForwardRef("SomeClass")]``. This class should not be instantiated by
+ a user, but may be used by introspection tools.
+
.. function:: NewType(typ)
A helper function to indicate a distinct types to a typechecker,
[View Less]
1
0

[3.8] bpo-33416: Document changes in PyNode_AddChild and PyParser_AddToken (GH-14214) (GH-14215)
by Miss Islington (bot) June 19, 2019
by Miss Islington (bot) June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/45da7437f54b4a6bdb8b4ba5a0f13f44a2…
commit: 45da7437f54b4a6bdb8b4ba5a0f13f44a24eec39
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T17:33:34-07:00
summary:
[3.8] bpo-33416: Document changes in PyNode_AddChild and PyParser_AddToken (GH-14214) (GH-14215)
I didn't find any entries in the docs about these functions, so I just mentioned …
[View More]them, in "What's New".
(cherry picked from commit 47c2de7725025341318860b9a2601ba7013d27a9)
Co-authored-by: Ivan Levkivskyi <levkivskyi(a)gmail.com>
https://bugs.python.org/issue33416
files:
M Doc/whatsnew/3.8.rst
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 1312a7433022..d79bc03860c1 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -1454,6 +1454,8 @@ Changes in the C API
* The :c:func:`PyCode_New` has a new parameter in the second position (*posonlyargcount*)
to support :pep:`570`, indicating the number of positional-only arguments.
+* The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now accept
+ two additional ``int`` arguments *end_lineno* and *end_col_offset*.
CPython bytecode changes
------------------------
[View Less]
1
0
https://github.com/python/cpython/commit/809ff1181ccc09c3b629f3d0ec66e13eaa…
commit: 809ff1181ccc09c3b629f3d0ec66e13eaa111b2e
branch: master
author: Ivan Levkivskyi <levkivskyi(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T01:31:51+01:00
summary:
Document typing.ForwardRef (GH-14216)
files:
M Doc/library/typing.rst
diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst
index 1a766c29a57a..d2dd03d50fc6 100644
--- a/Doc/library/typing.rst
+++ b/Doc/…
[View More]library/typing.rst
@@ -1001,6 +1001,13 @@ The module defines the following classes, functions and decorators:
.. versionadded:: 3.8
+.. class:: ForwardRef
+
+ A class used for internal typing representation of string forward references.
+ For example, ``List["SomeClass"]`` is implicitly transformed into
+ ``List[ForwardRef("SomeClass")]``. This class should not be instantiated by
+ a user, but may be used by introspection tools.
+
.. function:: NewType(typ)
A helper function to indicate a distinct types to a typechecker,
[View Less]
1
0

Document changes in PyNode_AddChild and PyParser_AddToken (GH-14214)
by Ivan Levkivskyi June 19, 2019
by Ivan Levkivskyi June 19, 2019
June 19, 2019
https://github.com/python/cpython/commit/47c2de7725025341318860b9a2601ba701…
commit: 47c2de7725025341318860b9a2601ba7013d27a9
branch: master
author: Ivan Levkivskyi <levkivskyi(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T01:17:47+01:00
summary:
Document changes in PyNode_AddChild and PyParser_AddToken (GH-14214)
I didn't find any entries in the docs about these functions, so I just mentioned them, in "What's New".
files:
M Doc/whatsnew/3.8.rst
diff --…
[View More]git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index cc3fb76e9c55..e4218cacc2b5 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -1457,6 +1457,8 @@ Changes in the C API
* The :c:func:`PyCode_New` has a new parameter in the second position (*posonlyargcount*)
to support :pep:`570`, indicating the number of positional-only arguments.
+* The functions :c:func:`PyNode_AddChild` and :c:func:`PyParser_AddToken` now accept
+ two additional ``int`` arguments *end_lineno* and *end_col_offset*.
CPython bytecode changes
------------------------
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/01b63ecac66581f80ba953d9182751e591…
commit: 01b63ecac66581f80ba953d9182751e591c2b2ba
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-19T00:48:09+02:00
summary:
bpo-35134: Add Include/cpython/import.h header file (GH-14213)
* Add Include/cpython/import.h and Include/internal/pycore_import.h
header files.
* Move _PyImport_ReInitLock() to the internal C API. Don't export …
[View More]the
symbol anymore.
files:
A Include/cpython/import.h
A Include/internal/pycore_import.h
M Include/import.h
M Makefile.pre.in
M Modules/posixmodule.c
M PCbuild/pythoncore.vcxproj
M PCbuild/pythoncore.vcxproj.filters
diff --git a/Include/cpython/import.h b/Include/cpython/import.h
new file mode 100644
index 000000000000..8dd7a0c5a4d1
--- /dev/null
+++ b/Include/cpython/import.h
@@ -0,0 +1,57 @@
+#ifndef Py_CPYTHON_IMPORT_H
+# error "this header file must not be included directly"
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+PyMODINIT_FUNC PyInit__imp(void);
+
+PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
+
+PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
+PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name,
+ PyObject *modules);
+PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
+PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
+
+PyAPI_FUNC(void) _PyImport_AcquireLock(void);
+PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
+
+PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
+ const char *name, /* UTF-8 encoded string */
+ PyObject *modules
+ );
+PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
+PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *,
+ PyObject *);
+PyAPI_FUNC(int) _PyImport_FixupBuiltin(
+ PyObject *mod,
+ const char *name, /* UTF-8 encoded string */
+ PyObject *modules
+ );
+PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
+ PyObject *, PyObject *);
+
+struct _inittab {
+ const char *name; /* ASCII encoded string */
+ PyObject* (*initfunc)(void);
+};
+PyAPI_DATA(struct _inittab *) PyImport_Inittab;
+PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
+
+struct _frozen {
+ const char *name; /* ASCII encoded string */
+ const unsigned char *code;
+ int size;
+};
+
+/* Embedding apps may change this pointer to point to their favorite
+ collection of frozen modules: */
+
+PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/Include/import.h b/Include/import.h
index 13c614933c7c..c50767d904de 100644
--- a/Include/import.h
+++ b/Include/import.h
@@ -1,4 +1,3 @@
-
/* Module definition and import interface */
#ifndef Py_IMPORT_H
@@ -7,9 +6,6 @@
extern "C" {
#endif
-#ifndef Py_LIMITED_API
-PyMODINIT_FUNC PyInit__imp(void);
-#endif /* !Py_LIMITED_API */
PyAPI_FUNC(long) PyImport_GetMagicNumber(void);
PyAPI_FUNC(const char *) PyImport_GetMagicTag(void);
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(
@@ -39,14 +35,6 @@ PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03070000
PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name);
#endif
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
-PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
-PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name,
- PyObject *modules);
-PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
-PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
-#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(PyObject *) PyImport_AddModuleObject(
PyObject *name
@@ -94,35 +82,6 @@ PyAPI_FUNC(int) PyImport_ImportFrozenModule(
const char *name /* UTF-8 encoded string */
);
-#ifndef Py_LIMITED_API
-PyAPI_FUNC(void) _PyImport_AcquireLock(void);
-PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
-
-PyAPI_FUNC(void) _PyImport_ReInitLock(void);
-
-PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
- const char *name, /* UTF-8 encoded string */
- PyObject *modules
- );
-PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
-PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *,
- PyObject *);
-PyAPI_FUNC(int) _PyImport_FixupBuiltin(
- PyObject *mod,
- const char *name, /* UTF-8 encoded string */
- PyObject *modules
- );
-PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
- PyObject *, PyObject *);
-
-struct _inittab {
- const char *name; /* ASCII encoded string */
- PyObject* (*initfunc)(void);
-};
-PyAPI_DATA(struct _inittab *) PyImport_Inittab;
-PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
-#endif /* Py_LIMITED_API */
-
PyAPI_DATA(PyTypeObject) PyNullImporter_Type;
PyAPI_FUNC(int) PyImport_AppendInittab(
@@ -131,16 +90,9 @@ PyAPI_FUNC(int) PyImport_AppendInittab(
);
#ifndef Py_LIMITED_API
-struct _frozen {
- const char *name; /* ASCII encoded string */
- const unsigned char *code;
- int size;
-};
-
-/* Embedding apps may change this pointer to point to their favorite
- collection of frozen modules: */
-
-PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
+# define Py_CPYTHON_IMPORT_H
+# include "cpython/import.h"
+# undef Py_CPYTHON_IMPORT_H
#endif
#ifdef __cplusplus
diff --git a/Include/internal/pycore_import.h b/Include/internal/pycore_import.h
new file mode 100644
index 000000000000..6b728242aadc
--- /dev/null
+++ b/Include/internal/pycore_import.h
@@ -0,0 +1,14 @@
+#ifndef Py_LIMITED_API
+#ifndef Py_INTERNAL_IMPORT_H
+#define Py_INTERNAL_IMPORT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern void _PyImport_ReInitLock(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_IMPORT_H */
+#endif /* !Py_LIMITED_API */
diff --git a/Makefile.pre.in b/Makefile.pre.in
index 2b4e2d776ea9..f6293364c0dd 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -1054,6 +1054,7 @@ PYTHON_HEADERS= \
$(srcdir)/Include/cpython/abstract.h \
$(srcdir)/Include/cpython/dictobject.h \
$(srcdir)/Include/cpython/fileobject.h \
+ $(srcdir)/Include/cpython/import.h \
$(srcdir)/Include/cpython/initconfig.h \
$(srcdir)/Include/cpython/interpreteridobject.h \
$(srcdir)/Include/cpython/object.h \
@@ -1077,6 +1078,7 @@ PYTHON_HEADERS= \
$(srcdir)/Include/internal/pycore_getopt.h \
$(srcdir)/Include/internal/pycore_gil.h \
$(srcdir)/Include/internal/pycore_hamt.h \
+ $(srcdir)/Include/internal/pycore_import.h \
$(srcdir)/Include/internal/pycore_initconfig.h \
$(srcdir)/Include/internal/pycore_object.h \
$(srcdir)/Include/internal/pycore_pathconfig.h \
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 7a471801db39..dff6309ac66b 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -36,6 +36,7 @@
#endif
#include "pycore_ceval.h" /* _PyEval_ReInitThreads() */
+#include "pycore_import.h" /* _PyImport_ReInitLock() */
#include "pycore_pystate.h" /* _PyRuntime */
#include "pythread.h"
#include "structmember.h"
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index 09a63c04eab8..4fd2607060ca 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -129,6 +129,7 @@
<ClInclude Include="..\Include\cpython\abstract.h" />
<ClInclude Include="..\Include\cpython\dictobject.h" />
<ClInclude Include="..\Include\cpython\fileobject.h" />
+ <ClInclude Include="..\Include\cpython\import.h" />
<ClInclude Include="..\Include\cpython\initconfig.h" />
<ClInclude Include="..\Include\cpython\object.h" />
<ClInclude Include="..\Include\cpython\objimpl.h" />
@@ -158,14 +159,15 @@
<ClInclude Include="..\Include\import.h" />
<ClInclude Include="..\Include\internal\pycore_accu.h" />
<ClInclude Include="..\Include\internal\pycore_atomic.h" />
- <ClInclude Include="..\Include\internal\pycore_code.h" />
<ClInclude Include="..\Include\internal\pycore_ceval.h" />
+ <ClInclude Include="..\Include\internal\pycore_code.h" />
<ClInclude Include="..\Include\internal\pycore_condvar.h" />
<ClInclude Include="..\Include\internal\pycore_context.h" />
<ClInclude Include="..\Include\internal\pycore_fileutils.h" />
<ClInclude Include="..\Include\internal\pycore_getopt.h" />
<ClInclude Include="..\Include\internal\pycore_gil.h" />
<ClInclude Include="..\Include\internal\pycore_hamt.h" />
+ <ClInclude Include="..\Include\internal\pycore_import.h" />
<ClInclude Include="..\Include\internal\pycore_initconfig.h" />
<ClInclude Include="..\Include\internal\pycore_object.h" />
<ClInclude Include="..\Include\internal\pycore_pathconfig.h" />
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index 63ab88b4a01d..2d09e9f994bd 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -90,6 +90,9 @@
<ClInclude Include="..\Include\cpython\fileobject.h">
<Filter>Include</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\cpython\import.h">
+ <Filter>Include</Filter>
+ </ClInclude>
<ClInclude Include="..\Include\cpython\initconfig.h">
<Filter>Include</Filter>
</ClInclude>
@@ -201,6 +204,9 @@
<ClInclude Include="..\Include\internal\pycore_hamt.h">
<Filter>Include</Filter>
</ClInclude>
+ <ClInclude Include="..\Include\internal\pycore_import.h">
+ <Filter>Include</Filter>
+ </ClInclude>
<ClInclude Include="..\Include\internal\pycore_initconfig.h">
<Filter>Include</Filter>
</ClInclude>
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/b626b113aee655e273b68eb1edb980f972…
commit: b626b113aee655e273b68eb1edb980f9729c0833
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T14:36:09-07:00
summary:
bpo-37325: Fix focus traversal for 2 IDLE dialogs (GH-14209)
Tab now moves focus across and down for Help Source and Custom Run.
(cherry picked from commit …
[View More]54cf2e0780ca137dd9abea5d3d974578ce0c18a9)
Co-authored-by: Terry Jan Reedy <tjreedy(a)udel.edu>
files:
A Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/idle_test/htest.py
M Lib/idlelib/query.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 64636df957e4..689539e73c12 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@ Released on 2019-10-20?
======================================
+bpo-37325: Fix tab focus traversal order for help source and custom
+run dialogs.
+
bpo-37321: Both subprocess connection error messages now refer to
the 'Startup failure' section of the IDLE doc.
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
index 6ce8cc8a5f60..20e5e9014ee7 100644
--- a/Lib/idlelib/idle_test/htest.py
+++ b/Lib/idlelib/idle_test/htest.py
@@ -110,10 +110,11 @@ def _wrapper(parent): # htest #
CustomRun_spec = {
'file': 'query',
- 'kwds': {'title': 'Custom Run Args',
+ 'kwds': {'title': 'Customize query.py Run',
'_htest': True},
- 'msg': "Enter with <Return> or [Ok]. Print valid entry to Shell\n"
+ 'msg': "Enter with <Return> or [Run]. Print valid entry to Shell\n"
"Arguments are parsed into a list\n"
+ "Mode is currently restart True or False\n"
"Close dialog with valid entry, <Escape>, [Cancel], [X]"
}
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index 9b3bb1d186b8..d74084feed76 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -36,10 +36,10 @@ class Query(Toplevel):
"""
def __init__(self, parent, title, message, *, text0='', used_names={},
_htest=False, _utest=False):
- """Create popup, do not return until tk widget destroyed.
+ """Create modal popup, return when destroyed.
- Additional subclass init must be done before calling this
- unless _utest=True is passed to suppress wait_window().
+ Additional subclass init must be done before this unless
+ _utest=True is passed to suppress wait_window().
title - string, title of popup dialog
message - string, informational message to display
@@ -48,15 +48,17 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
_htest - bool, change box location when running htest
_utest - bool, leave window hidden and not modal
"""
- Toplevel.__init__(self, parent)
- self.withdraw() # Hide while configuring, especially geometry.
- self.parent = parent
- self.title(title)
+ self.parent = parent # Needed for Font call.
self.message = message
self.text0 = text0
self.used_names = used_names
+
+ Toplevel.__init__(self, parent)
+ self.withdraw() # Hide while configuring, especially geometry.
+ self.title(title)
self.transient(parent)
self.grab_set()
+
windowingsystem = self.tk.call('tk', 'windowingsystem')
if windowingsystem == 'aqua':
try:
@@ -69,9 +71,9 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
self.protocol("WM_DELETE_WINDOW", self.cancel)
self.bind('<Key-Return>', self.ok)
self.bind("<KP_Enter>", self.ok)
- self.resizable(height=False, width=False)
+
self.create_widgets()
- self.update_idletasks() # Needed here for winfo_reqwidth below.
+ self.update_idletasks() # Need here for winfo_reqwidth below.
self.geometry( # Center dialog over parent (or below htest box).
"+%d+%d" % (
parent.winfo_rootx() +
@@ -80,12 +82,19 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
((parent.winfo_height()/2 - self.winfo_reqheight()/2)
if not _htest else 150)
) )
+ self.resizable(height=False, width=False)
+
if not _utest:
self.deiconify() # Unhide now that geometry set.
self.wait_window()
- def create_widgets(self, ok_text='OK'): # Call from override, if any.
- # Bind to self widgets needed for entry_ok or unittest.
+ def create_widgets(self, ok_text='OK'): # Do not replace.
+ """Create entry (rows, extras, buttons.
+
+ Entry stuff on rows 0-2, spanning cols 0-2.
+ Buttons on row 99, cols 1, 2.
+ """
+ # Bind to self the widgets needed for entry_ok or unittest.
self.frame = frame = Frame(self, padding=10)
frame.grid(column=0, row=0, sticky='news')
frame.grid_columnconfigure(0, weight=1)
@@ -99,19 +108,24 @@ def create_widgets(self, ok_text='OK'): # Call from override, if any.
exists=True, root=self.parent)
self.entry_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
- self.button_ok = Button(
- frame, text=ok_text, default='active', command=self.ok)
- self.button_cancel = Button(
- frame, text='Cancel', command=self.cancel)
-
entrylabel.grid(column=0, row=0, columnspan=3, padx=5, sticky=W)
self.entry.grid(column=0, row=1, columnspan=3, padx=5, sticky=W+E,
pady=[10,0])
self.entry_error.grid(column=0, row=2, columnspan=3, padx=5,
sticky=W+E)
+
+ self.create_extra()
+
+ self.button_ok = Button(
+ frame, text=ok_text, default='active', command=self.ok)
+ self.button_cancel = Button(
+ frame, text='Cancel', command=self.cancel)
+
self.button_ok.grid(column=1, row=99, padx=5)
self.button_cancel.grid(column=2, row=99, padx=5)
+ def create_extra(self): pass # Override to add widgets.
+
def showerror(self, message, widget=None):
#self.bell(displayof=self)
(widget or self.entry_error)['text'] = 'ERROR: ' + message
@@ -227,8 +241,8 @@ def __init__(self, parent, title, *, menuitem='', filepath='',
parent, title, message, text0=menuitem,
used_names=used_names, _htest=_htest, _utest=_utest)
- def create_widgets(self):
- super().create_widgets()
+ def create_extra(self):
+ "Add path widjets to rows 10-12."
frame = self.frame
pathlabel = Label(frame, anchor='w', justify='left',
text='Help File Path: Enter URL or browse for file')
@@ -319,8 +333,8 @@ def __init__(self, parent, title, *, cli_args='',
parent, title, message, text0=cli_args,
_htest=_htest, _utest=_utest)
- def create_widgets(self):
- super().create_widgets(ok_text='Run')
+ def create_extra(self):
+ "Add run mode on rows 10-12."
frame = self.frame
self.restartvar = BooleanVar(self, value=True)
restart = Checkbutton(frame, variable=self.restartvar, onvalue=True,
@@ -328,7 +342,7 @@ def create_widgets(self):
self.args_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
- restart.grid(column=0, row=4, columnspan=3, padx=5, sticky='w')
+ restart.grid(column=0, row=10, columnspan=3, padx=5, sticky='w')
self.args_error.grid(column=0, row=12, columnspan=3, padx=5,
sticky='we')
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst b/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
new file mode 100644
index 000000000000..edfffbefe884
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
@@ -0,0 +1 @@
+Fix tab focus traversal order for help source and custom run dialogs.
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/44d46e368e6c7cc91fa99a2bfaff544dec…
commit: 44d46e368e6c7cc91fa99a2bfaff544dec7fb04d
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T14:26:15-07:00
summary:
bpo-37325: Fix focus traversal for 2 IDLE dialogs (GH-14209)
Tab now moves focus across and down for Help Source and Custom Run.
(cherry picked from commit …
[View More]54cf2e0780ca137dd9abea5d3d974578ce0c18a9)
Co-authored-by: Terry Jan Reedy <tjreedy(a)udel.edu>
files:
A Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/idle_test/htest.py
M Lib/idlelib/query.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 42227b60e7ae..834646f7f776 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@ Released on 2019-06-24?
======================================
+bpo-37325: Fix tab focus traversal order for help source and custom
+run dialogs.
+
bpo-37321: Both subprocess connection error messages now refer to
the 'Startup failure' section of the IDLE doc.
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
index 6ce8cc8a5f60..20e5e9014ee7 100644
--- a/Lib/idlelib/idle_test/htest.py
+++ b/Lib/idlelib/idle_test/htest.py
@@ -110,10 +110,11 @@ def _wrapper(parent): # htest #
CustomRun_spec = {
'file': 'query',
- 'kwds': {'title': 'Custom Run Args',
+ 'kwds': {'title': 'Customize query.py Run',
'_htest': True},
- 'msg': "Enter with <Return> or [Ok]. Print valid entry to Shell\n"
+ 'msg': "Enter with <Return> or [Run]. Print valid entry to Shell\n"
"Arguments are parsed into a list\n"
+ "Mode is currently restart True or False\n"
"Close dialog with valid entry, <Escape>, [Cancel], [X]"
}
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index 9b3bb1d186b8..d74084feed76 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -36,10 +36,10 @@ class Query(Toplevel):
"""
def __init__(self, parent, title, message, *, text0='', used_names={},
_htest=False, _utest=False):
- """Create popup, do not return until tk widget destroyed.
+ """Create modal popup, return when destroyed.
- Additional subclass init must be done before calling this
- unless _utest=True is passed to suppress wait_window().
+ Additional subclass init must be done before this unless
+ _utest=True is passed to suppress wait_window().
title - string, title of popup dialog
message - string, informational message to display
@@ -48,15 +48,17 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
_htest - bool, change box location when running htest
_utest - bool, leave window hidden and not modal
"""
- Toplevel.__init__(self, parent)
- self.withdraw() # Hide while configuring, especially geometry.
- self.parent = parent
- self.title(title)
+ self.parent = parent # Needed for Font call.
self.message = message
self.text0 = text0
self.used_names = used_names
+
+ Toplevel.__init__(self, parent)
+ self.withdraw() # Hide while configuring, especially geometry.
+ self.title(title)
self.transient(parent)
self.grab_set()
+
windowingsystem = self.tk.call('tk', 'windowingsystem')
if windowingsystem == 'aqua':
try:
@@ -69,9 +71,9 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
self.protocol("WM_DELETE_WINDOW", self.cancel)
self.bind('<Key-Return>', self.ok)
self.bind("<KP_Enter>", self.ok)
- self.resizable(height=False, width=False)
+
self.create_widgets()
- self.update_idletasks() # Needed here for winfo_reqwidth below.
+ self.update_idletasks() # Need here for winfo_reqwidth below.
self.geometry( # Center dialog over parent (or below htest box).
"+%d+%d" % (
parent.winfo_rootx() +
@@ -80,12 +82,19 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
((parent.winfo_height()/2 - self.winfo_reqheight()/2)
if not _htest else 150)
) )
+ self.resizable(height=False, width=False)
+
if not _utest:
self.deiconify() # Unhide now that geometry set.
self.wait_window()
- def create_widgets(self, ok_text='OK'): # Call from override, if any.
- # Bind to self widgets needed for entry_ok or unittest.
+ def create_widgets(self, ok_text='OK'): # Do not replace.
+ """Create entry (rows, extras, buttons.
+
+ Entry stuff on rows 0-2, spanning cols 0-2.
+ Buttons on row 99, cols 1, 2.
+ """
+ # Bind to self the widgets needed for entry_ok or unittest.
self.frame = frame = Frame(self, padding=10)
frame.grid(column=0, row=0, sticky='news')
frame.grid_columnconfigure(0, weight=1)
@@ -99,19 +108,24 @@ def create_widgets(self, ok_text='OK'): # Call from override, if any.
exists=True, root=self.parent)
self.entry_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
- self.button_ok = Button(
- frame, text=ok_text, default='active', command=self.ok)
- self.button_cancel = Button(
- frame, text='Cancel', command=self.cancel)
-
entrylabel.grid(column=0, row=0, columnspan=3, padx=5, sticky=W)
self.entry.grid(column=0, row=1, columnspan=3, padx=5, sticky=W+E,
pady=[10,0])
self.entry_error.grid(column=0, row=2, columnspan=3, padx=5,
sticky=W+E)
+
+ self.create_extra()
+
+ self.button_ok = Button(
+ frame, text=ok_text, default='active', command=self.ok)
+ self.button_cancel = Button(
+ frame, text='Cancel', command=self.cancel)
+
self.button_ok.grid(column=1, row=99, padx=5)
self.button_cancel.grid(column=2, row=99, padx=5)
+ def create_extra(self): pass # Override to add widgets.
+
def showerror(self, message, widget=None):
#self.bell(displayof=self)
(widget or self.entry_error)['text'] = 'ERROR: ' + message
@@ -227,8 +241,8 @@ def __init__(self, parent, title, *, menuitem='', filepath='',
parent, title, message, text0=menuitem,
used_names=used_names, _htest=_htest, _utest=_utest)
- def create_widgets(self):
- super().create_widgets()
+ def create_extra(self):
+ "Add path widjets to rows 10-12."
frame = self.frame
pathlabel = Label(frame, anchor='w', justify='left',
text='Help File Path: Enter URL or browse for file')
@@ -319,8 +333,8 @@ def __init__(self, parent, title, *, cli_args='',
parent, title, message, text0=cli_args,
_htest=_htest, _utest=_utest)
- def create_widgets(self):
- super().create_widgets(ok_text='Run')
+ def create_extra(self):
+ "Add run mode on rows 10-12."
frame = self.frame
self.restartvar = BooleanVar(self, value=True)
restart = Checkbutton(frame, variable=self.restartvar, onvalue=True,
@@ -328,7 +342,7 @@ def create_widgets(self):
self.args_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
- restart.grid(column=0, row=4, columnspan=3, padx=5, sticky='w')
+ restart.grid(column=0, row=10, columnspan=3, padx=5, sticky='w')
self.args_error.grid(column=0, row=12, columnspan=3, padx=5,
sticky='we')
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst b/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
new file mode 100644
index 000000000000..edfffbefe884
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
@@ -0,0 +1 @@
+Fix tab focus traversal order for help source and custom run dialogs.
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/54cf2e0780ca137dd9abea5d3d974578ce…
commit: 54cf2e0780ca137dd9abea5d3d974578ce0c18a9
branch: master
author: Terry Jan Reedy <tjreedy(a)udel.edu>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T17:08:24-04:00
summary:
bpo-37325: Fix focus traversal for 2 IDLE dialogs (#14209)
Tab now moves focus across and down for Help Source and Custom Run.
files:
A Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
M Lib/idlelib/…
[View More]NEWS.txt
M Lib/idlelib/idle_test/htest.py
M Lib/idlelib/query.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 64636df957e4..689539e73c12 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@ Released on 2019-10-20?
======================================
+bpo-37325: Fix tab focus traversal order for help source and custom
+run dialogs.
+
bpo-37321: Both subprocess connection error messages now refer to
the 'Startup failure' section of the IDLE doc.
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
index 6ce8cc8a5f60..20e5e9014ee7 100644
--- a/Lib/idlelib/idle_test/htest.py
+++ b/Lib/idlelib/idle_test/htest.py
@@ -110,10 +110,11 @@ def _wrapper(parent): # htest #
CustomRun_spec = {
'file': 'query',
- 'kwds': {'title': 'Custom Run Args',
+ 'kwds': {'title': 'Customize query.py Run',
'_htest': True},
- 'msg': "Enter with <Return> or [Ok]. Print valid entry to Shell\n"
+ 'msg': "Enter with <Return> or [Run]. Print valid entry to Shell\n"
"Arguments are parsed into a list\n"
+ "Mode is currently restart True or False\n"
"Close dialog with valid entry, <Escape>, [Cancel], [X]"
}
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index 9b3bb1d186b8..d74084feed76 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -36,10 +36,10 @@ class Query(Toplevel):
"""
def __init__(self, parent, title, message, *, text0='', used_names={},
_htest=False, _utest=False):
- """Create popup, do not return until tk widget destroyed.
+ """Create modal popup, return when destroyed.
- Additional subclass init must be done before calling this
- unless _utest=True is passed to suppress wait_window().
+ Additional subclass init must be done before this unless
+ _utest=True is passed to suppress wait_window().
title - string, title of popup dialog
message - string, informational message to display
@@ -48,15 +48,17 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
_htest - bool, change box location when running htest
_utest - bool, leave window hidden and not modal
"""
- Toplevel.__init__(self, parent)
- self.withdraw() # Hide while configuring, especially geometry.
- self.parent = parent
- self.title(title)
+ self.parent = parent # Needed for Font call.
self.message = message
self.text0 = text0
self.used_names = used_names
+
+ Toplevel.__init__(self, parent)
+ self.withdraw() # Hide while configuring, especially geometry.
+ self.title(title)
self.transient(parent)
self.grab_set()
+
windowingsystem = self.tk.call('tk', 'windowingsystem')
if windowingsystem == 'aqua':
try:
@@ -69,9 +71,9 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
self.protocol("WM_DELETE_WINDOW", self.cancel)
self.bind('<Key-Return>', self.ok)
self.bind("<KP_Enter>", self.ok)
- self.resizable(height=False, width=False)
+
self.create_widgets()
- self.update_idletasks() # Needed here for winfo_reqwidth below.
+ self.update_idletasks() # Need here for winfo_reqwidth below.
self.geometry( # Center dialog over parent (or below htest box).
"+%d+%d" % (
parent.winfo_rootx() +
@@ -80,12 +82,19 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
((parent.winfo_height()/2 - self.winfo_reqheight()/2)
if not _htest else 150)
) )
+ self.resizable(height=False, width=False)
+
if not _utest:
self.deiconify() # Unhide now that geometry set.
self.wait_window()
- def create_widgets(self, ok_text='OK'): # Call from override, if any.
- # Bind to self widgets needed for entry_ok or unittest.
+ def create_widgets(self, ok_text='OK'): # Do not replace.
+ """Create entry (rows, extras, buttons.
+
+ Entry stuff on rows 0-2, spanning cols 0-2.
+ Buttons on row 99, cols 1, 2.
+ """
+ # Bind to self the widgets needed for entry_ok or unittest.
self.frame = frame = Frame(self, padding=10)
frame.grid(column=0, row=0, sticky='news')
frame.grid_columnconfigure(0, weight=1)
@@ -99,19 +108,24 @@ def create_widgets(self, ok_text='OK'): # Call from override, if any.
exists=True, root=self.parent)
self.entry_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
- self.button_ok = Button(
- frame, text=ok_text, default='active', command=self.ok)
- self.button_cancel = Button(
- frame, text='Cancel', command=self.cancel)
-
entrylabel.grid(column=0, row=0, columnspan=3, padx=5, sticky=W)
self.entry.grid(column=0, row=1, columnspan=3, padx=5, sticky=W+E,
pady=[10,0])
self.entry_error.grid(column=0, row=2, columnspan=3, padx=5,
sticky=W+E)
+
+ self.create_extra()
+
+ self.button_ok = Button(
+ frame, text=ok_text, default='active', command=self.ok)
+ self.button_cancel = Button(
+ frame, text='Cancel', command=self.cancel)
+
self.button_ok.grid(column=1, row=99, padx=5)
self.button_cancel.grid(column=2, row=99, padx=5)
+ def create_extra(self): pass # Override to add widgets.
+
def showerror(self, message, widget=None):
#self.bell(displayof=self)
(widget or self.entry_error)['text'] = 'ERROR: ' + message
@@ -227,8 +241,8 @@ def __init__(self, parent, title, *, menuitem='', filepath='',
parent, title, message, text0=menuitem,
used_names=used_names, _htest=_htest, _utest=_utest)
- def create_widgets(self):
- super().create_widgets()
+ def create_extra(self):
+ "Add path widjets to rows 10-12."
frame = self.frame
pathlabel = Label(frame, anchor='w', justify='left',
text='Help File Path: Enter URL or browse for file')
@@ -319,8 +333,8 @@ def __init__(self, parent, title, *, cli_args='',
parent, title, message, text0=cli_args,
_htest=_htest, _utest=_utest)
- def create_widgets(self):
- super().create_widgets(ok_text='Run')
+ def create_extra(self):
+ "Add run mode on rows 10-12."
frame = self.frame
self.restartvar = BooleanVar(self, value=True)
restart = Checkbutton(frame, variable=self.restartvar, onvalue=True,
@@ -328,7 +342,7 @@ def create_widgets(self):
self.args_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
- restart.grid(column=0, row=4, columnspan=3, padx=5, sticky='w')
+ restart.grid(column=0, row=10, columnspan=3, padx=5, sticky='w')
self.args_error.grid(column=0, row=12, columnspan=3, padx=5,
sticky='we')
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst b/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
new file mode 100644
index 000000000000..edfffbefe884
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-18-16-40-05.bpo-37325.GssOf1.rst
@@ -0,0 +1 @@
+Fix tab focus traversal order for help source and custom run dialogs.
[View Less]
1
0

bpo-36231: Support building on macOS without /usr/include (GH-13773) (GH-14208)
by Ned Deily June 18, 2019
by Ned Deily June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/c7302116573d853d3181133477d9d0e4d4…
commit: c7302116573d853d3181133477d9d0e4d4d3abfd
branch: 3.7
author: Ned Deily <nad(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T16:28:13-04:00
summary:
bpo-36231: Support building on macOS without /usr/include (GH-13773) (GH-14208)
files:
A Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst
M setup.py
diff --git a/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-…
[View More]36231.RfmW_p.rst b/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst
new file mode 100644
index 000000000000..c82e54c12c89
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-03-05-49-49.bpo-36231.RfmW_p.rst
@@ -0,0 +1,3 @@
+Support building Python on macOS without /usr/include installed. As of macOS
+10.14, system header files are only available within an SDK provided by
+either the Command Line Tools or the Xcode app.
diff --git a/setup.py b/setup.py
index bcc4bfa89d15..5e0cd0243010 100644
--- a/setup.py
+++ b/setup.py
@@ -90,18 +90,57 @@ def sysroot_paths(make_vars, subdirs):
break
return dirs
+MACOS_SDK_ROOT = None
+
def macosx_sdk_root():
+ """Return the directory of the current macOS SDK.
+
+ If no SDK was explicitly configured, call the compiler to find which
+ include files paths are being searched by default. Use '/' if the
+ compiler is searching /usr/include (meaning system header files are
+ installed) or use the root of an SDK if that is being searched.
+ (The SDK may be supplied via Xcode or via the Command Line Tools).
+ The SDK paths used by Apple-supplied tool chains depend on the
+ setting of various variables; see the xcrun man page for more info.
"""
- Return the directory of the current OSX SDK,
- or '/' if no SDK was specified.
- """
+ global MACOS_SDK_ROOT
+
+ # If already called, return cached result.
+ if MACOS_SDK_ROOT:
+ return MACOS_SDK_ROOT
+
cflags = sysconfig.get_config_var('CFLAGS')
m = re.search(r'-isysroot\s+(\S+)', cflags)
- if m is None:
- sysroot = '/'
+ if m is not None:
+ MACOS_SDK_ROOT = m.group(1)
else:
- sysroot = m.group(1)
- return sysroot
+ MACOS_SDK_ROOT = '/'
+ cc = sysconfig.get_config_var('CC')
+ tmpfile = '/tmp/setup_sdk_root.%d' % os.getpid()
+ try:
+ os.unlink(tmpfile)
+ except:
+ pass
+ ret = os.system('%s -E -v - </dev/null 2>%s 1>/dev/null' % (cc, tmpfile))
+ in_incdirs = False
+ try:
+ if ret >> 8 == 0:
+ with open(tmpfile) as fp:
+ for line in fp.readlines():
+ if line.startswith("#include <...>"):
+ in_incdirs = True
+ elif line.startswith("End of search list"):
+ in_incdirs = False
+ elif in_incdirs:
+ line = line.strip()
+ if line == '/usr/include':
+ MACOS_SDK_ROOT = '/'
+ elif line.endswith(".sdk/usr/include"):
+ MACOS_SDK_ROOT = line[:-12]
+ finally:
+ os.unlink(tmpfile)
+
+ return MACOS_SDK_ROOT
def is_macosx_sdk_path(path):
"""
[View Less]
1
0

bpo-34903: Document that some strptime formats only require 1 digit (GH-14149)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/35aa0b0ced91cfb48d9dcf80a2ca8683e6…
commit: 35aa0b0ced91cfb48d9dcf80a2ca8683e61f9b3e
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T12:21:27-07:00
summary:
bpo-34903: Document that some strptime formats only require 1 digit (GH-14149)
For datetime.datetime.strptime(), the leading zero for some two-digit formats is optional.
This adds a …
[View More]footnote to the strftime/strptime documentation to reflect this fact, and adds some tests to ensure that it is true.
bpo-34903
(cherry picked from commit 6b9c204ee77a0de87d6f51a3d4547a18604cef9e)
Co-authored-by: Mike Gleen <mike.gleen(a)gmail.com>
files:
A Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
M Doc/library/datetime.rst
M Lib/test/datetimetester.py
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index fb41aeeb5bed..c935e3526512 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -2093,7 +2093,7 @@ format codes.
| | where 0 is Sunday and 6 is | | |
| | Saturday. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%d`` | Day of the month as a | 01, 02, ..., 31 | |
+| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
@@ -2106,29 +2106,29 @@ format codes.
| | || Januar, Februar, ..., | |
| | | Dezember (de_DE) | |
+-----------+--------------------------------+------------------------+-------+
-| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | |
+| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) |
| | decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%y`` | Year without century as a | 00, 01, ..., 99 | |
+| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
| | number. | 2014, ..., 9998, 9999 | |
+-----------+--------------------------------+------------------------+-------+
-| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | |
+| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | |
+| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
| | AM or PM. || am, pm (de_DE) | \(3) |
+-----------+--------------------------------+------------------------+-------+
-| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | |
+| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) |
| | decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4) |
-| | decimal number. | | |
+| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
+| | decimal number. | | \(9) |
+-----------+--------------------------------+------------------------+-------+
| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
| | number, zero-padded on the | 999999 | |
@@ -2142,19 +2142,19 @@ format codes.
| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
| | if the object is naive). | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%j`` | Day of the year as a | 001, 002, ..., 366 | |
+| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7) |
-| | (Sunday as the first day of | | |
+| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), |
+| | (Sunday as the first day of | | \(9) |
| | the week) as a zero padded | | |
| | decimal number. All days in a | | |
| | new year preceding the first | | |
| | Sunday are considered to be in | | |
| | week 0. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7) |
-| | (Monday as the first day of | | |
+| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), |
+| | (Monday as the first day of | | \(9) |
| | the week) as a decimal number. | | |
| | All days in a new year | | |
| | preceding the first Monday | | |
@@ -2194,8 +2194,8 @@ incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
| | number where 1 is Monday. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8) |
-| | number with Monday as | | |
+| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), |
+| | number with Monday as | | \(9) |
| | the first day of the week. | | |
| | Week 01 is the week containing | | |
| | Jan 4. | | |
@@ -2291,6 +2291,11 @@ Notes:
:meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
interchangeable.
+(9)
+ When used with the :meth:`strptime` method, the leading zero is optional
+ for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``,
+ ``%W``, and ``%V``. Format ``%y`` does require a leading zero.
+
.. rubric:: Footnotes
.. [#] If, that is, we ignore the effects of Relativity
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index 239a0b5ac830..53de0658773c 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -2501,6 +2501,7 @@ def test_strptime(self):
self.assertEqual(expected, got)
strptime = self.theclass.strptime
+
self.assertEqual(strptime("+0002", "%z").utcoffset(), 2 * MINUTE)
self.assertEqual(strptime("-0002", "%z").utcoffset(), -2 * MINUTE)
self.assertEqual(
@@ -2535,6 +2536,40 @@ def test_strptime(self):
with self.assertRaises(ValueError): strptime("-2400", "%z")
with self.assertRaises(ValueError): strptime("-000", "%z")
+ def test_strptime_single_digit(self):
+ # bpo-34903: Check that single digit dates and times are allowed.
+
+ strptime = self.theclass.strptime
+
+ with self.assertRaises(ValueError):
+ # %y does require two digits.
+ newdate = strptime('01/02/3 04:05:06', '%d/%m/%y %H:%M:%S')
+ dt1 = self.theclass(2003, 2, 1, 4, 5, 6)
+ dt2 = self.theclass(2003, 1, 2, 4, 5, 6)
+ dt3 = self.theclass(2003, 2, 1, 0, 0, 0)
+ dt4 = self.theclass(2003, 1, 25, 0, 0, 0)
+ inputs = [
+ ('%d', '1/02/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%m', '01/2/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%H', '01/02/03 4:05:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%M', '01/02/03 04:5:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%S', '01/02/03 04:05:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%j', '2/03 04am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%I', '02/03 4am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%w', '6/04/03', '%w/%U/%y', dt3),
+ # %u requires a single digit.
+ ('%W', '6/4/2003', '%u/%W/%Y', dt3),
+ ('%V', '6/4/2003', '%u/%V/%G', dt4),
+ ]
+ for reason, string, format, target in inputs:
+ reason = 'test single digit ' + reason
+ with self.subTest(reason=reason,
+ string=string,
+ format=format,
+ target=target):
+ newdate = strptime(string, format)
+ self.assertEqual(newdate, target, msg=reason)
+
def test_more_timetuple(self):
# This tests fields beyond those tested by the TestDate.test_timetuple.
t = self.theclass(2004, 12, 31, 6, 22, 33)
diff --git a/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst b/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
new file mode 100644
index 000000000000..7e277f4ec1ae
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
@@ -0,0 +1 @@
+Documented that in :meth:`datetime.datetime.strptime()`, the leading zero in some two-digit formats is optional. Patch by Mike Gleen.
[View Less]
1
0
https://github.com/python/cpython/commit/d287215df5c967da5a9141c1182d240bdb…
commit: d287215df5c967da5a9141c1182d240bdb46ec4a
branch: master
author: Paul Ganssle <pganssle(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T19:57:45+01:00
summary:
Add pganssle to CODEOWNERS and ACKS (GH-14138)
Also adds abalkin to CODEOWNERS for date and time related files.
files:
M .github/CODEOWNERS
M Misc/ACKS
diff --git a/.github/CODEOWNERS b/.github/…
[View More]CODEOWNERS
index 963ab4dcff42..8c3970babcc5 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -43,6 +43,15 @@ Objects/dict* @methane
# CSPRNG
Python/bootstrap_hash.c @python/crypto-team @tiran
+# Dates and times
+**/*datetime* @pganssle @abalkin
+**/*str*time* @pganssle @abalkin
+Doc/library/time.rst @pganssle @abalkin
+Lib/test/test_time.py @pganssle @abalkin
+Modules/timemodule.c @pganssle @abalkin
+Python/pytime.c @pganssle @abalkin
+Include/pytime.h @pganssle @abalkin
+
# Email and related
**/*mail* @python/email-team
**/*smtp* @python/email-team
diff --git a/Misc/ACKS b/Misc/ACKS
index 082fa567f23a..05a3e61f6941 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -541,6 +541,7 @@ Riccardo Attilio Galli
Raymund Galvin
Nitin Ganatra
Fred Gansevles
+Paul Ganssle
Lars Marius Garshol
Jake Garver
Dan Gass
[View Less]
1
0

bpo-34903: Document that some strptime formats only require 1 digit (GH-14149)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/452b417e34489614b3003b8d0814826909…
commit: 452b417e34489614b3003b8d08148269096239d5
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T11:55:27-07:00
summary:
bpo-34903: Document that some strptime formats only require 1 digit (GH-14149)
For datetime.datetime.strptime(), the leading zero for some two-digit formats is optional.
This adds a …
[View More]footnote to the strftime/strptime documentation to reflect this fact, and adds some tests to ensure that it is true.
bpo-34903
(cherry picked from commit 6b9c204ee77a0de87d6f51a3d4547a18604cef9e)
Co-authored-by: Mike Gleen <mike.gleen(a)gmail.com>
files:
A Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
M Doc/library/datetime.rst
M Lib/test/datetimetester.py
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index 15b500f770f0..270b2386d716 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -2076,7 +2076,7 @@ format codes.
| | where 0 is Sunday and 6 is | | |
| | Saturday. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%d`` | Day of the month as a | 01, 02, ..., 31 | |
+| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
@@ -2089,29 +2089,29 @@ format codes.
| | || Januar, Februar, ..., | |
| | | Dezember (de_DE) | |
+-----------+--------------------------------+------------------------+-------+
-| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | |
+| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) |
| | decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%y`` | Year without century as a | 00, 01, ..., 99 | |
+| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
| | number. | 2014, ..., 9998, 9999 | |
+-----------+--------------------------------+------------------------+-------+
-| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | |
+| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | |
+| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
| | AM or PM. || am, pm (de_DE) | \(3) |
+-----------+--------------------------------+------------------------+-------+
-| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | |
+| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) |
| | decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4) |
-| | decimal number. | | |
+| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
+| | decimal number. | | \(9) |
+-----------+--------------------------------+------------------------+-------+
| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
| | number, zero-padded on the | 999999 | |
@@ -2125,19 +2125,19 @@ format codes.
| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
| | if the object is naive). | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%j`` | Day of the year as a | 001, 002, ..., 366 | |
+| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7) |
-| | (Sunday as the first day of | | |
+| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), |
+| | (Sunday as the first day of | | \(9) |
| | the week) as a zero padded | | |
| | decimal number. All days in a | | |
| | new year preceding the first | | |
| | Sunday are considered to be in | | |
| | week 0. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7) |
-| | (Monday as the first day of | | |
+| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), |
+| | (Monday as the first day of | | \(9) |
| | the week) as a decimal number. | | |
| | All days in a new year | | |
| | preceding the first Monday | | |
@@ -2177,8 +2177,8 @@ incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
| | number where 1 is Monday. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8) |
-| | number with Monday as | | |
+| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), |
+| | number with Monday as | | \(9) |
| | the first day of the week. | | |
| | Week 01 is the week containing | | |
| | Jan 4. | | |
@@ -2274,6 +2274,11 @@ Notes:
:meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
interchangeable.
+(9)
+ When used with the :meth:`strptime` method, the leading zero is optional
+ for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``,
+ ``%W``, and ``%V``. Format ``%y`` does require a leading zero.
+
.. rubric:: Footnotes
.. [#] If, that is, we ignore the effects of Relativity
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index b9bf49476f16..2f8975d8c07f 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -2387,6 +2387,7 @@ def test_strptime(self):
self.assertEqual(expected, got)
strptime = self.theclass.strptime
+
self.assertEqual(strptime("+0002", "%z").utcoffset(), 2 * MINUTE)
self.assertEqual(strptime("-0002", "%z").utcoffset(), -2 * MINUTE)
self.assertEqual(
@@ -2421,6 +2422,40 @@ def test_strptime(self):
with self.assertRaises(ValueError): strptime("-2400", "%z")
with self.assertRaises(ValueError): strptime("-000", "%z")
+ def test_strptime_single_digit(self):
+ # bpo-34903: Check that single digit dates and times are allowed.
+
+ strptime = self.theclass.strptime
+
+ with self.assertRaises(ValueError):
+ # %y does require two digits.
+ newdate = strptime('01/02/3 04:05:06', '%d/%m/%y %H:%M:%S')
+ dt1 = self.theclass(2003, 2, 1, 4, 5, 6)
+ dt2 = self.theclass(2003, 1, 2, 4, 5, 6)
+ dt3 = self.theclass(2003, 2, 1, 0, 0, 0)
+ dt4 = self.theclass(2003, 1, 25, 0, 0, 0)
+ inputs = [
+ ('%d', '1/02/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%m', '01/2/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%H', '01/02/03 4:05:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%M', '01/02/03 04:5:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%S', '01/02/03 04:05:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%j', '2/03 04am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%I', '02/03 4am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%w', '6/04/03', '%w/%U/%y', dt3),
+ # %u requires a single digit.
+ ('%W', '6/4/2003', '%u/%W/%Y', dt3),
+ ('%V', '6/4/2003', '%u/%V/%G', dt4),
+ ]
+ for reason, string, format, target in inputs:
+ reason = 'test single digit ' + reason
+ with self.subTest(reason=reason,
+ string=string,
+ format=format,
+ target=target):
+ newdate = strptime(string, format)
+ self.assertEqual(newdate, target, msg=reason)
+
def test_more_timetuple(self):
# This tests fields beyond those tested by the TestDate.test_timetuple.
t = self.theclass(2004, 12, 31, 6, 22, 33)
diff --git a/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst b/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
new file mode 100644
index 000000000000..7e277f4ec1ae
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
@@ -0,0 +1 @@
+Documented that in :meth:`datetime.datetime.strptime()`, the leading zero in some two-digit formats is optional. Patch by Mike Gleen.
[View Less]
1
0

bpo-34903: Document that some strptime formats only require 1 digit (GH-14149)
by Paul Ganssle June 18, 2019
by Paul Ganssle June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/6b9c204ee77a0de87d6f51a3d4547a1860…
commit: 6b9c204ee77a0de87d6f51a3d4547a18604cef9e
branch: master
author: Mike Gleen <mike.gleen(a)gmail.com>
committer: Paul Ganssle <pganssle(a)users.noreply.github.com>
date: 2019-06-18T19:14:57+01:00
summary:
bpo-34903: Document that some strptime formats only require 1 digit (GH-14149)
For datetime.datetime.strptime(), the leading zero for some two-digit formats is optional.
This adds a footnote to …
[View More]the strftime/strptime documentation to reflect this fact, and adds some tests to ensure that it is true.
bpo-34903
files:
A Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
M Doc/library/datetime.rst
M Lib/test/datetimetester.py
diff --git a/Doc/library/datetime.rst b/Doc/library/datetime.rst
index fb41aeeb5bed..c935e3526512 100644
--- a/Doc/library/datetime.rst
+++ b/Doc/library/datetime.rst
@@ -2093,7 +2093,7 @@ format codes.
| | where 0 is Sunday and 6 is | | |
| | Saturday. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%d`` | Day of the month as a | 01, 02, ..., 31 | |
+| ``%d`` | Day of the month as a | 01, 02, ..., 31 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%b`` | Month as locale's abbreviated || Jan, Feb, ..., Dec | \(1) |
@@ -2106,29 +2106,29 @@ format codes.
| | || Januar, Februar, ..., | |
| | | Dezember (de_DE) | |
+-----------+--------------------------------+------------------------+-------+
-| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | |
+| ``%m`` | Month as a zero-padded | 01, 02, ..., 12 | \(9) |
| | decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%y`` | Year without century as a | 00, 01, ..., 99 | |
+| ``%y`` | Year without century as a | 00, 01, ..., 99 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%Y`` | Year with century as a decimal | 0001, 0002, ..., 2013, | \(2) |
| | number. | 2014, ..., 9998, 9999 | |
+-----------+--------------------------------+------------------------+-------+
-| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | |
+| ``%H`` | Hour (24-hour clock) as a | 00, 01, ..., 23 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | |
+| ``%I`` | Hour (12-hour clock) as a | 01, 02, ..., 12 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
| ``%p`` | Locale's equivalent of either || AM, PM (en_US); | \(1), |
| | AM or PM. || am, pm (de_DE) | \(3) |
+-----------+--------------------------------+------------------------+-------+
-| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | |
+| ``%M`` | Minute as a zero-padded | 00, 01, ..., 59 | \(9) |
| | decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4) |
-| | decimal number. | | |
+| ``%S`` | Second as a zero-padded | 00, 01, ..., 59 | \(4), |
+| | decimal number. | | \(9) |
+-----------+--------------------------------+------------------------+-------+
| ``%f`` | Microsecond as a decimal | 000000, 000001, ..., | \(5) |
| | number, zero-padded on the | 999999 | |
@@ -2142,19 +2142,19 @@ format codes.
| ``%Z`` | Time zone name (empty string | (empty), UTC, EST, CST | |
| | if the object is naive). | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%j`` | Day of the year as a | 001, 002, ..., 366 | |
+| ``%j`` | Day of the year as a | 001, 002, ..., 366 | \(9) |
| | zero-padded decimal number. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7) |
-| | (Sunday as the first day of | | |
+| ``%U`` | Week number of the year | 00, 01, ..., 53 | \(7), |
+| | (Sunday as the first day of | | \(9) |
| | the week) as a zero padded | | |
| | decimal number. All days in a | | |
| | new year preceding the first | | |
| | Sunday are considered to be in | | |
| | week 0. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7) |
-| | (Monday as the first day of | | |
+| ``%W`` | Week number of the year | 00, 01, ..., 53 | \(7), |
+| | (Monday as the first day of | | \(9) |
| | the week) as a decimal number. | | |
| | All days in a new year | | |
| | preceding the first Monday | | |
@@ -2194,8 +2194,8 @@ incomplete or ambiguous ISO 8601 directives will raise a :exc:`ValueError`.
| ``%u`` | ISO 8601 weekday as a decimal | 1, 2, ..., 7 | |
| | number where 1 is Monday. | | |
+-----------+--------------------------------+------------------------+-------+
-| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8) |
-| | number with Monday as | | |
+| ``%V`` | ISO 8601 week as a decimal | 01, 02, ..., 53 | \(8), |
+| | number with Monday as | | \(9) |
| | the first day of the week. | | |
| | Week 01 is the week containing | | |
| | Jan 4. | | |
@@ -2291,6 +2291,11 @@ Notes:
:meth:`strptime` format string. Also note that ``%G`` and ``%Y`` are not
interchangeable.
+(9)
+ When used with the :meth:`strptime` method, the leading zero is optional
+ for formats ``%d``, ``%m``, ``%H``, ``%I``, ``%M``, ``%S``, ``%J``, ``%U``,
+ ``%W``, and ``%V``. Format ``%y`` does require a leading zero.
+
.. rubric:: Footnotes
.. [#] If, that is, we ignore the effects of Relativity
diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py
index 239a0b5ac830..53de0658773c 100644
--- a/Lib/test/datetimetester.py
+++ b/Lib/test/datetimetester.py
@@ -2501,6 +2501,7 @@ def test_strptime(self):
self.assertEqual(expected, got)
strptime = self.theclass.strptime
+
self.assertEqual(strptime("+0002", "%z").utcoffset(), 2 * MINUTE)
self.assertEqual(strptime("-0002", "%z").utcoffset(), -2 * MINUTE)
self.assertEqual(
@@ -2535,6 +2536,40 @@ def test_strptime(self):
with self.assertRaises(ValueError): strptime("-2400", "%z")
with self.assertRaises(ValueError): strptime("-000", "%z")
+ def test_strptime_single_digit(self):
+ # bpo-34903: Check that single digit dates and times are allowed.
+
+ strptime = self.theclass.strptime
+
+ with self.assertRaises(ValueError):
+ # %y does require two digits.
+ newdate = strptime('01/02/3 04:05:06', '%d/%m/%y %H:%M:%S')
+ dt1 = self.theclass(2003, 2, 1, 4, 5, 6)
+ dt2 = self.theclass(2003, 1, 2, 4, 5, 6)
+ dt3 = self.theclass(2003, 2, 1, 0, 0, 0)
+ dt4 = self.theclass(2003, 1, 25, 0, 0, 0)
+ inputs = [
+ ('%d', '1/02/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%m', '01/2/03 4:5:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%H', '01/02/03 4:05:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%M', '01/02/03 04:5:06', '%d/%m/%y %H:%M:%S', dt1),
+ ('%S', '01/02/03 04:05:6', '%d/%m/%y %H:%M:%S', dt1),
+ ('%j', '2/03 04am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%I', '02/03 4am:05:06', '%j/%y %I%p:%M:%S',dt2),
+ ('%w', '6/04/03', '%w/%U/%y', dt3),
+ # %u requires a single digit.
+ ('%W', '6/4/2003', '%u/%W/%Y', dt3),
+ ('%V', '6/4/2003', '%u/%V/%G', dt4),
+ ]
+ for reason, string, format, target in inputs:
+ reason = 'test single digit ' + reason
+ with self.subTest(reason=reason,
+ string=string,
+ format=format,
+ target=target):
+ newdate = strptime(string, format)
+ self.assertEqual(newdate, target, msg=reason)
+
def test_more_timetuple(self):
# This tests fields beyond those tested by the TestDate.test_timetuple.
t = self.theclass(2004, 12, 31, 6, 22, 33)
diff --git a/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst b/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
new file mode 100644
index 000000000000..7e277f4ec1ae
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2019-06-17-09-36-46.bpo-34903.r_wGRc.rst
@@ -0,0 +1 @@
+Documented that in :meth:`datetime.datetime.strptime()`, the leading zero in some two-digit formats is optional. Patch by Mike Gleen.
[View Less]
1
0
https://github.com/python/cpython/commit/59543347d12a7717235f941e7fd363d4df…
commit: 59543347d12a7717235f941e7fd363d4df92984a
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-18T20:05:41+09:00
summary:
bpo-37151: remove _PyFunction_FastCallDict (GH-13864)
files:
M Include/funcobject.h
M Objects/call.c
M Objects/funcobject.c
diff --git a/Include/funcobject.h b/Include/funcobject.h
index e563a74a15b6..…
[View More]c6dd67d6124d 100644
--- a/Include/funcobject.h
+++ b/Include/funcobject.h
@@ -60,12 +60,6 @@ PyAPI_FUNC(PyObject *) PyFunction_GetAnnotations(PyObject *);
PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
#ifndef Py_LIMITED_API
-PyAPI_FUNC(PyObject *) _PyFunction_FastCallDict(
- PyObject *func,
- PyObject *const *args,
- Py_ssize_t nargs,
- PyObject *kwargs);
-
PyAPI_FUNC(PyObject *) _PyFunction_Vectorcall(
PyObject *func,
PyObject *const *stack,
diff --git a/Objects/call.c b/Objects/call.c
index f9a3207e9622..75dbd6f52623 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -303,94 +303,6 @@ function_code_fastcall(PyCodeObject *co, PyObject *const *args, Py_ssize_t nargs
}
-PyObject *
-_PyFunction_FastCallDict(PyObject *func, PyObject *const *args, Py_ssize_t nargs,
- PyObject *kwargs)
-{
- PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
- PyObject *globals = PyFunction_GET_GLOBALS(func);
- PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
- PyObject *kwdefs, *closure, *name, *qualname;
- PyObject *kwtuple, **k;
- PyObject **d;
- Py_ssize_t nd, nk;
- PyObject *result;
-
- assert(func != NULL);
- assert(nargs >= 0);
- assert(nargs == 0 || args != NULL);
- assert(kwargs == NULL || PyDict_Check(kwargs));
-
- if (co->co_kwonlyargcount == 0 &&
- (kwargs == NULL || PyDict_GET_SIZE(kwargs) == 0) &&
- (co->co_flags & ~PyCF_MASK) == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE))
- {
- /* Fast paths */
- if (argdefs == NULL && co->co_argcount == nargs) {
- return function_code_fastcall(co, args, nargs, globals);
- }
- else if (nargs == 0 && argdefs != NULL
- && co->co_argcount == PyTuple_GET_SIZE(argdefs)) {
- /* function called with no arguments, but all parameters have
- a default value: use default values as arguments .*/
- args = _PyTuple_ITEMS(argdefs);
- return function_code_fastcall(co, args, PyTuple_GET_SIZE(argdefs),
- globals);
- }
- }
-
- nk = (kwargs != NULL) ? PyDict_GET_SIZE(kwargs) : 0;
- if (nk != 0) {
- Py_ssize_t pos, i;
-
- /* bpo-29318, bpo-27840: Caller and callee functions must not share
- the dictionary: kwargs must be copied. */
- kwtuple = PyTuple_New(2 * nk);
- if (kwtuple == NULL) {
- return NULL;
- }
-
- k = _PyTuple_ITEMS(kwtuple);
- pos = i = 0;
- while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
- /* We must hold strong references because keyword arguments can be
- indirectly modified while the function is called:
- see issue #2016 and test_extcall */
- Py_INCREF(k[i]);
- Py_INCREF(k[i+1]);
- i += 2;
- }
- assert(i / 2 == nk);
- }
- else {
- kwtuple = NULL;
- k = NULL;
- }
-
- kwdefs = PyFunction_GET_KW_DEFAULTS(func);
- closure = PyFunction_GET_CLOSURE(func);
- name = ((PyFunctionObject *)func) -> func_name;
- qualname = ((PyFunctionObject *)func) -> func_qualname;
-
- if (argdefs != NULL) {
- d = _PyTuple_ITEMS(argdefs);
- nd = PyTuple_GET_SIZE(argdefs);
- }
- else {
- d = NULL;
- nd = 0;
- }
-
- result = _PyEval_EvalCodeWithName((PyObject*)co, globals, (PyObject *)NULL,
- args, nargs,
- k, k != NULL ? k + 1 : NULL, nk, 2,
- d, nd, kwdefs,
- closure, name, qualname);
- Py_XDECREF(kwtuple);
- return result;
-}
-
-
PyObject *
_PyFunction_Vectorcall(PyObject *func, PyObject* const* stack,
size_t nargsf, PyObject *kwnames)
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index df5cc2d3f570..a65c1f4a55bb 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -622,17 +622,6 @@ func_traverse(PyFunctionObject *f, visitproc visit, void *arg)
return 0;
}
-static PyObject *
-function_call(PyObject *func, PyObject *args, PyObject *kwargs)
-{
- PyObject **stack;
- Py_ssize_t nargs;
-
- stack = _PyTuple_ITEMS(args);
- nargs = PyTuple_GET_SIZE(args);
- return _PyFunction_FastCallDict(func, stack, nargs, kwargs);
-}
-
/* Bind a function to an object */
static PyObject *
func_descr_get(PyObject *func, PyObject *obj, PyObject *type)
@@ -659,7 +648,7 @@ PyTypeObject PyFunction_Type = {
0, /* tp_as_sequence */
0, /* tp_as_mapping */
0, /* tp_hash */
- function_call, /* tp_call */
+ PyVectorcall_Call, /* tp_call */
0, /* tp_str */
0, /* tp_getattro */
0, /* tp_setattro */
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/a5b1b222077870f194ca7c8c0326eeda01…
commit: a5b1b222077870f194ca7c8c0326eeda014f0452
branch: 2.7
author: Ned Deily <nad(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T06:48:53-04:00
summary:
bpo-34631: Updated OpenSSL to 1.0.2s in macOS installer. (GH-14198)
files:
A Misc/NEWS.d/next/macOS/2019-06-18-05-39-01.bpo-34631.StdZhE.rst
M Mac/BuildScript/build-installer.py
diff --git a/Mac/BuildScript/build-installer.py b/…
[View More]Mac/BuildScript/build-installer.py
index 58d798476488..e24d28e97e9e 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -213,9 +213,9 @@ def library_recipes():
result.extend([
dict(
- name="OpenSSL 1.0.2q",
- url="https://www.openssl.org/source/openssl-1.0.2q.tar.gz",
- checksum='7563e1ce046cb21948eeb6ba1a0eb71c',
+ name="OpenSSL 1.0.2s",
+ url="https://www.openssl.org/source/openssl-1.0.2s.tar.gz",
+ checksum='98ec4e085962689b91d25e1dcdfc14a2',
buildrecipe=build_universal_openssl,
configure=None,
install=None,
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-05-39-01.bpo-34631.StdZhE.rst b/Misc/NEWS.d/next/macOS/2019-06-18-05-39-01.bpo-34631.StdZhE.rst
new file mode 100644
index 000000000000..2b62a469a6c0
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-05-39-01.bpo-34631.StdZhE.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.0.2s in macOS installer.
[View Less]
1
0

bpo-35360: Update macOS installer to use SQLite 3.28.0 (GH-14180)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/624c9a27b10df4355eb2caf04654c730df…
commit: 624c9a27b10df4355eb2caf04654c730dfa412dd
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T03:24:20-07:00
summary:
bpo-35360: Update macOS installer to use SQLite 3.28.0 (GH-14180)
(cherry picked from commit d8f336fdc10decdd82d3bc81a63aea8be149c0c8)
Co-authored-by: animalize <animalize(a)users.…
[View More]noreply.github.com>
files:
A Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
M Mac/BuildScript/build-installer.py
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index e83febd38db0..024ec910ab0a 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -313,9 +313,9 @@ def library_recipes():
),
),
dict(
- name="SQLite 3.22.0",
- url="https://www.sqlite.org/2018/sqlite-autoconf-3220000.tar.gz",
- checksum='96b5648d542e8afa6ab7ffb8db8ddc3d',
+ name="SQLite 3.28.0",
+ url="https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz",
+ checksum='3c68eb400f8354605736cd55400e1572',
extra_cflags=('-Os '
'-DSQLITE_ENABLE_FTS5 '
'-DSQLITE_ENABLE_FTS4 '
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst b/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
new file mode 100644
index 000000000000..5e05ac56b095
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
@@ -0,0 +1 @@
+Update macOS installer to use SQLite 3.28.0.
[View Less]
1
0

bpo-35360: Update macOS installer to use SQLite 3.28.0 (GH-14180)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/a7072ff56e216683f949b353255cce099f…
commit: a7072ff56e216683f949b353255cce099f5cdb24
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T03:15:55-07:00
summary:
bpo-35360: Update macOS installer to use SQLite 3.28.0 (GH-14180)
(cherry picked from commit d8f336fdc10decdd82d3bc81a63aea8be149c0c8)
Co-authored-by: animalize <animalize(a)users.…
[View More]noreply.github.com>
files:
A Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
M Mac/BuildScript/build-installer.py
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index fe86f1621ecc..88e34322200f 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -313,9 +313,9 @@ def library_recipes():
),
),
dict(
- name="SQLite 3.22.0",
- url="https://www.sqlite.org/2018/sqlite-autoconf-3220000.tar.gz",
- checksum='96b5648d542e8afa6ab7ffb8db8ddc3d',
+ name="SQLite 3.28.0",
+ url="https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz",
+ checksum='3c68eb400f8354605736cd55400e1572',
extra_cflags=('-Os '
'-DSQLITE_ENABLE_FTS5 '
'-DSQLITE_ENABLE_FTS4 '
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst b/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
new file mode 100644
index 000000000000..5e05ac56b095
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
@@ -0,0 +1 @@
+Update macOS installer to use SQLite 3.28.0.
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/373dace8d7ee5107cb38cd2e4fa5fd67dc…
commit: 373dace8d7ee5107cb38cd2e4fa5fd67dcad42dd
branch: 2.7
author: animalize <animalize(a)users.noreply.github.com>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-18T05:59:53-04:00
summary:
[2.7] bpo-35360: Update macOS installer to use SQLite 3.28.0 (GH-14183)
files:
A Misc/NEWS.d/next/macOS/2019-06-18-10-02-11.bpo-35360.-CWbfy.rst
M Mac/BuildScript/README.txt
M Mac/BuildScript/build-installer.…
[View More]py
diff --git a/Mac/BuildScript/README.txt b/Mac/BuildScript/README.txt
index 32e7edc8f48f..c2bc429678c6 100644
--- a/Mac/BuildScript/README.txt
+++ b/Mac/BuildScript/README.txt
@@ -40,7 +40,7 @@ yet integrated into ``build-installer.py``.
* libcrypto and libssl from OpenSSL 1.0.1
* NCurses 5.9
- * SQLite 3.7.13
+ * SQLite 3.28.0
* Oracle Sleepycat DB 4.8 (Python 2.x only)
- uses system-supplied versions of third-party libraries
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index bf038797c5e9..58d798476488 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -311,9 +311,9 @@ def library_recipes():
),
),
dict(
- name="SQLite 3.22.0",
- url="https://www.sqlite.org/2018/sqlite-autoconf-3220000.tar.gz",
- checksum='96b5648d542e8afa6ab7ffb8db8ddc3d',
+ name="SQLite 3.28.0",
+ url="https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz",
+ checksum='3c68eb400f8354605736cd55400e1572',
extra_cflags=('-Os '
'-DSQLITE_ENABLE_FTS5 '
'-DSQLITE_ENABLE_FTS4 '
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-10-02-11.bpo-35360.-CWbfy.rst b/Misc/NEWS.d/next/macOS/2019-06-18-10-02-11.bpo-35360.-CWbfy.rst
new file mode 100644
index 000000000000..5e05ac56b095
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-10-02-11.bpo-35360.-CWbfy.rst
@@ -0,0 +1 @@
+Update macOS installer to use SQLite 3.28.0.
[View Less]
1
0

bpo-35031: also disable TLS 1.3 for test_start_tls_server_1 on macOS (GH-14188) (GH-14192)
by Ned Deily June 18, 2019
by Ned Deily June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/c101d1a88a8e0b0cec479307b4e0ae6866…
commit: c101d1a88a8e0b0cec479307b4e0ae6866958a49
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-18T05:45:10-04:00
summary:
bpo-35031: also disable TLS 1.3 for test_start_tls_server_1 on macOS (GH-14188) (GH-14192)
(cherry picked from commit a514f782b822bd7bca7c8d78be7bd53bc25c1908)
Co-authored-by: Ned …
[View More]Deily <nad(a)python.org>
files:
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 685e3dc58e9a..866ef81fb2ee 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -495,11 +495,13 @@ def test_start_tls_server_1(self):
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
- if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
+ if (sys.platform.startswith('freebsd')
+ or sys.platform.startswith('win')
+ or sys.platform.startswith('darwin')):
# bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
# as the eof was not being received by the server if the payload
# size is not big enough. This behaviour only appears if the
- # client is using TLS1.3.
+ # client is using TLS1.3. Also seen on macOS.
client_context.options |= ssl.OP_NO_TLSv1_3
answer = None
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/d8f336fdc10decdd82d3bc81a63aea8be1…
commit: d8f336fdc10decdd82d3bc81a63aea8be149c0c8
branch: master
author: animalize <animalize(a)users.noreply.github.com>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-18T05:25:19-04:00
summary:
bpo-35360: Update macOS installer to use SQLite 3.28.0 (GH-14180)
files:
A Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
M Mac/BuildScript/build-installer.py
diff --git a/Mac/BuildScript/…
[View More]build-installer.py b/Mac/BuildScript/build-installer.py
index fe86f1621ecc..88e34322200f 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -313,9 +313,9 @@ def library_recipes():
),
),
dict(
- name="SQLite 3.22.0",
- url="https://www.sqlite.org/2018/sqlite-autoconf-3220000.tar.gz",
- checksum='96b5648d542e8afa6ab7ffb8db8ddc3d',
+ name="SQLite 3.28.0",
+ url="https://www.sqlite.org/2019/sqlite-autoconf-3280000.tar.gz",
+ checksum='3c68eb400f8354605736cd55400e1572',
extra_cflags=('-Os '
'-DSQLITE_ENABLE_FTS5 '
'-DSQLITE_ENABLE_FTS4 '
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst b/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
new file mode 100644
index 000000000000..5e05ac56b095
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-08-58-30.bpo-35360.-CWbfy.rst
@@ -0,0 +1 @@
+Update macOS installer to use SQLite 3.28.0.
[View Less]
1
0

bpo-37233: use _PY_FASTCALL_SMALL_STACK in method_vectorcall (GH-13974)
by Inada Naoki June 18, 2019
by Inada Naoki June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/988e6aa322fb61651812fa5a61ec73316c…
commit: 988e6aa322fb61651812fa5a61ec73316c71b041
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-18T17:56:53+09:00
summary:
bpo-37233: use _PY_FASTCALL_SMALL_STACK in method_vectorcall (GH-13974)
files:
M Objects/classobject.c
diff --git a/Objects/classobject.c b/Objects/classobject.c
index ec4d2b9910a2..3062890f53e6 100644
--- …
[View More]a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -64,10 +64,16 @@ method_vectorcall(PyObject *method, PyObject *const *args,
Py_ssize_t nkwargs = (kwnames == NULL) ? 0 : PyTuple_GET_SIZE(kwnames);
PyObject **newargs;
Py_ssize_t totalargs = nargs + nkwargs;
- newargs = PyMem_Malloc((totalargs+1) * sizeof(PyObject *));
- if (newargs == NULL) {
- PyErr_NoMemory();
- return NULL;
+ PyObject *newargs_stack[_PY_FASTCALL_SMALL_STACK];
+ if (totalargs <= (Py_ssize_t)Py_ARRAY_LENGTH(newargs_stack) - 1) {
+ newargs = newargs_stack;
+ }
+ else {
+ newargs = PyMem_Malloc((totalargs+1) * sizeof(PyObject *));
+ if (newargs == NULL) {
+ PyErr_NoMemory();
+ return NULL;
+ }
}
/* use borrowed references */
newargs[0] = self;
@@ -77,7 +83,9 @@ method_vectorcall(PyObject *method, PyObject *const *args,
memcpy(newargs + 1, args, totalargs * sizeof(PyObject *));
}
result = _PyObject_Vectorcall(func, newargs, nargs+1, kwnames);
- PyMem_Free(newargs);
+ if (newargs != newargs_stack) {
+ PyMem_Free(newargs);
+ }
}
return result;
}
[View Less]
1
0

bpo-35031: also disable TLS 1.3 for test_start_tls_server_1 on macOS (GH-14188)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/f49c85d0cb098ba75191a9e272d149ed64…
commit: f49c85d0cb098ba75191a9e272d149ed6466dfb7
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T01:56:51-07:00
summary:
bpo-35031: also disable TLS 1.3 for test_start_tls_server_1 on macOS (GH-14188)
(cherry picked from commit a514f782b822bd7bca7c8d78be7bd53bc25c1908)
Co-authored-by: Ned Deily <nad(…
[View More]a)python.org>
files:
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 4645cc044a59..1c2285063ef6 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -498,11 +498,13 @@ def test_start_tls_server_1(self):
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
- if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
+ if (sys.platform.startswith('freebsd')
+ or sys.platform.startswith('win')
+ or sys.platform.startswith('darwin')):
# bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
# as the eof was not being received by the server if the payload
# size is not big enough. This behaviour only appears if the
- # client is using TLS1.3.
+ # client is using TLS1.3. Also seen on macOS.
client_context.options |= ssl.OP_NO_TLSv1_3
answer = None
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/c78fe320dbb0da3412d640797eb850753d…
commit: c78fe320dbb0da3412d640797eb850753d45c07b
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-18T17:50:28+09:00
summary:
bpo-37151: use PyVectorcall_Call for all calls of "method" (GH-13972)
files:
M Objects/classobject.c
diff --git a/Objects/classobject.c b/Objects/classobject.c
index f26a85c62371..ec4d2b9910a2 100644
--- a/…
[View More]Objects/classobject.c
+++ b/Objects/classobject.c
@@ -329,17 +329,6 @@ method_traverse(PyMethodObject *im, visitproc visit, void *arg)
return 0;
}
-static PyObject *
-method_call(PyObject *method, PyObject *args, PyObject *kwargs)
-{
- PyObject *self, *func;
-
- self = PyMethod_GET_SELF(method);
- func = PyMethod_GET_FUNCTION(method);
-
- return _PyObject_Call_Prepend(func, self, args, kwargs);
-}
-
static PyObject *
method_descr_get(PyObject *meth, PyObject *obj, PyObject *cls)
{
@@ -362,7 +351,7 @@ PyTypeObject PyMethod_Type = {
0, /* tp_as_sequence */
0, /* tp_as_mapping */
(hashfunc)method_hash, /* tp_hash */
- method_call, /* tp_call */
+ PyVectorcall_Call, /* tp_call */
0, /* tp_str */
method_getattro, /* tp_getattro */
PyObject_GenericSetAttr, /* tp_setattro */
[View Less]
1
0

bpo-34631: Updated OpenSSL to 1.1.1c in macOS installer (GH-14187)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/0f3abbc29f5750706be1a255784eea5003…
commit: 0f3abbc29f5750706be1a255784eea5003c25901
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T01:40:05-07:00
summary:
bpo-34631: Updated OpenSSL to 1.1.1c in macOS installer (GH-14187)
(cherry picked from commit f3fb8393e3cbbdc0ec79e0fdefaadec6977e1491)
Co-authored-by: Ned Deily <nad(a)python.org…
[View More]>
files:
A Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
M Mac/BuildScript/build-installer.py
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 3ee2fba82688..e83febd38db0 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -215,9 +215,9 @@ def library_recipes():
result.extend([
dict(
- name="OpenSSL 1.1.0j",
- url="https://www.openssl.org/source/openssl-1.1.0j.tar.gz",
- checksum='b4ca5b78ae6ae79da80790b30dbedbdc',
+ name="OpenSSL 1.1.1c",
+ url="https://www.openssl.org/source/openssl-1.1.1c.tar.gz",
+ checksum='15e21da6efe8aa0e0768ffd8cd37a5f6',
buildrecipe=build_universal_openssl,
configure=None,
install=None,
@@ -810,6 +810,16 @@ def build_openssl_arch(archbase, arch):
"ppc": ["darwin-ppc-cc"],
"ppc64": ["darwin64-ppc-cc"],
}
+
+ # Somewhere between OpenSSL 1.1.0j and 1.1.1c, changes cause the
+ # "enable-ec_nistp_64_gcc_128" option to get compile errors when
+ # building on our 10.6 gcc-4.2 environment. There have been other
+ # reports of projects running into this when using older compilers.
+ # So, for now, do not try to use "enable-ec_nistp_64_gcc_128" when
+ # building for 10.6.
+ if getDeptargetTuple() == (10, 6):
+ arch_opts['x86_64'].remove('enable-ec_nistp_64_gcc_128')
+
configure_opts = [
"no-idea",
"no-mdc2",
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst b/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
new file mode 100644
index 000000000000..164950a37c83
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.1.1c in macOS installer.
[View Less]
1
0

bpo-34631: Updated OpenSSL to 1.1.1c in macOS installer (GH-14187)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/bd75abfefed31316fc627069597cc3c508…
commit: bd75abfefed31316fc627069597cc3c5087a885b
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T01:39:53-07:00
summary:
bpo-34631: Updated OpenSSL to 1.1.1c in macOS installer (GH-14187)
(cherry picked from commit f3fb8393e3cbbdc0ec79e0fdefaadec6977e1491)
Co-authored-by: Ned Deily <nad(a)python.org…
[View More]>
files:
A Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
M Mac/BuildScript/build-installer.py
diff --git a/Mac/BuildScript/build-installer.py b/Mac/BuildScript/build-installer.py
index 2c606b9df674..fe86f1621ecc 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -215,9 +215,9 @@ def library_recipes():
result.extend([
dict(
- name="OpenSSL 1.1.0j",
- url="https://www.openssl.org/source/openssl-1.1.0j.tar.gz",
- checksum='b4ca5b78ae6ae79da80790b30dbedbdc',
+ name="OpenSSL 1.1.1c",
+ url="https://www.openssl.org/source/openssl-1.1.1c.tar.gz",
+ checksum='15e21da6efe8aa0e0768ffd8cd37a5f6',
buildrecipe=build_universal_openssl,
configure=None,
install=None,
@@ -810,6 +810,16 @@ def build_openssl_arch(archbase, arch):
"ppc": ["darwin-ppc-cc"],
"ppc64": ["darwin64-ppc-cc"],
}
+
+ # Somewhere between OpenSSL 1.1.0j and 1.1.1c, changes cause the
+ # "enable-ec_nistp_64_gcc_128" option to get compile errors when
+ # building on our 10.6 gcc-4.2 environment. There have been other
+ # reports of projects running into this when using older compilers.
+ # So, for now, do not try to use "enable-ec_nistp_64_gcc_128" when
+ # building for 10.6.
+ if getDeptargetTuple() == (10, 6):
+ arch_opts['x86_64'].remove('enable-ec_nistp_64_gcc_128')
+
configure_opts = [
"no-idea",
"no-mdc2",
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst b/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
new file mode 100644
index 000000000000..164950a37c83
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.1.1c in macOS installer.
[View Less]
1
0

bpo-35031: also disable TLS 1.3 for test_start_tls_server_1 on macOS (GH-14188)
by Ned Deily June 18, 2019
by Ned Deily June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/a514f782b822bd7bca7c8d78be7bd53bc2…
commit: a514f782b822bd7bca7c8d78be7bd53bc25c1908
branch: master
author: Ned Deily <nad(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T04:37:13-04:00
summary:
bpo-35031: also disable TLS 1.3 for test_start_tls_server_1 on macOS (GH-14188)
files:
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
…
[View More]index 4645cc044a59..1c2285063ef6 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -498,11 +498,13 @@ def test_start_tls_server_1(self):
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
- if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
+ if (sys.platform.startswith('freebsd')
+ or sys.platform.startswith('win')
+ or sys.platform.startswith('darwin')):
# bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
# as the eof was not being received by the server if the payload
# size is not big enough. This behaviour only appears if the
- # client is using TLS1.3.
+ # client is using TLS1.3. Also seen on macOS.
client_context.options |= ssl.OP_NO_TLSv1_3
answer = None
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/f3fb8393e3cbbdc0ec79e0fdefaadec697…
commit: f3fb8393e3cbbdc0ec79e0fdefaadec6977e1491
branch: master
author: Ned Deily <nad(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T04:17:33-04:00
summary:
bpo-34631: Updated OpenSSL to 1.1.1c in macOS installer (GH-14187)
files:
A Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
M Mac/BuildScript/build-installer.py
diff --git a/Mac/BuildScript/build-installer.py …
[View More]b/Mac/BuildScript/build-installer.py
index 2c606b9df674..fe86f1621ecc 100755
--- a/Mac/BuildScript/build-installer.py
+++ b/Mac/BuildScript/build-installer.py
@@ -215,9 +215,9 @@ def library_recipes():
result.extend([
dict(
- name="OpenSSL 1.1.0j",
- url="https://www.openssl.org/source/openssl-1.1.0j.tar.gz",
- checksum='b4ca5b78ae6ae79da80790b30dbedbdc',
+ name="OpenSSL 1.1.1c",
+ url="https://www.openssl.org/source/openssl-1.1.1c.tar.gz",
+ checksum='15e21da6efe8aa0e0768ffd8cd37a5f6',
buildrecipe=build_universal_openssl,
configure=None,
install=None,
@@ -810,6 +810,16 @@ def build_openssl_arch(archbase, arch):
"ppc": ["darwin-ppc-cc"],
"ppc64": ["darwin64-ppc-cc"],
}
+
+ # Somewhere between OpenSSL 1.1.0j and 1.1.1c, changes cause the
+ # "enable-ec_nistp_64_gcc_128" option to get compile errors when
+ # building on our 10.6 gcc-4.2 environment. There have been other
+ # reports of projects running into this when using older compilers.
+ # So, for now, do not try to use "enable-ec_nistp_64_gcc_128" when
+ # building for 10.6.
+ if getDeptargetTuple() == (10, 6):
+ arch_opts['x86_64'].remove('enable-ec_nistp_64_gcc_128')
+
configure_opts = [
"no-idea",
"no-mdc2",
diff --git a/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst b/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
new file mode 100644
index 000000000000..164950a37c83
--- /dev/null
+++ b/Misc/NEWS.d/next/macOS/2019-06-18-00-30-40.bpo-34631.vSifcv.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.1.1c in macOS installer.
[View Less]
1
0
https://github.com/python/cpython/commit/9bbece9d7a9d6d38886abeb248e34c96bc…
commit: 9bbece9d7a9d6d38886abeb248e34c96bc08576c
branch: master
author: David Carlier <dcarlier(a)afilias.info>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-18T15:36:34+09:00
summary:
remove dead code (GH-14104)
default case ought to handle the "unexpected".
files:
M Python/ast.c
diff --git a/Python/ast.c b/Python/ast.c
index 2a5941572148..16895ce62ec0 100644
--- a/Python/ast.c
+++ b/…
[View More]Python/ast.c
@@ -3684,9 +3684,6 @@ alias_for_import_name(struct compiling *c, const node *n, int store)
"unexpected import name: %d", TYPE(n));
return NULL;
}
-
- PyErr_SetString(PyExc_SystemError, "unhandled import name condition");
- return NULL;
}
static stmt_ty
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/81f7899f517f18a45ab111598f9dd6d721…
commit: 81f7899f517f18a45ab111598f9dd6d7210956a8
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T19:47:55-07:00
summary:
bpo-5680: IDLE: Customize running a module (GH-13763)
The initialize options are 1) add command line options, which are appended to sys.argv as if passed on a real command line, and …
[View More]2) skip the shell restart. The customization dialog is accessed by a new entry on the Run menu.
(cherry picked from commit 201bc2d18b60adb05810d2a6ab396047bc527088)
Co-authored-by: Cheryl Sabella <cheryl.sabella(a)gmail.com>
files:
A Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
M Doc/library/idle.rst
M Lib/idlelib/config-keys.def
M Lib/idlelib/config.py
M Lib/idlelib/editor.py
M Lib/idlelib/help.html
M Lib/idlelib/idle_test/htest.py
M Lib/idlelib/idle_test/test_query.py
M Lib/idlelib/mainmenu.py
M Lib/idlelib/query.py
M Lib/idlelib/runscript.py
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index d494c9766eb7..fb886a714d74 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -207,9 +207,13 @@ Strip trailing whitespace
Run menu (Editor window only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. _python-shell:
+
Python Shell
Open or wake up the Python Shell window.
+.. _check-module:
+
Check Module
Check the syntax of the module currently open in the Editor window. If the
module has not been saved IDLE will either prompt the user to save or
@@ -217,8 +221,10 @@ Check Module
there is a syntax error, the approximate location is indicated in the
Editor window.
+.. _run-module:
+
Run Module
- Do Check Module (above). If no error, restart the shell to clean the
+ Do :ref:`Check Module <check-module>`. If no error, restart the shell to clean the
environment, then execute the module. Output is displayed in the Shell
window. Note that output requires use of ``print`` or ``write``.
When execution is complete, the Shell retains focus and displays a prompt.
@@ -226,6 +232,14 @@ Run Module
This is similar to executing a file with ``python -i file`` at a command
line.
+.. _run-custom:
+
+Run... Customized
+ Same as :ref:`Run Module <run-module>`, but run the module with customized
+ settings. *Command Line Arguments* extend :data:`sys.argv` as if passed
+ on a command line. The module can be run in the Shell without restarting.
+
+
Shell menu (Shell window only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Lib/idlelib/config-keys.def b/Lib/idlelib/config-keys.def
index fd235194dfc9..f71269b5b49f 100644
--- a/Lib/idlelib/config-keys.def
+++ b/Lib/idlelib/config-keys.def
@@ -63,6 +63,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -122,6 +123,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -181,6 +183,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -240,6 +243,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Option-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Option-Key-x>
zoom-height= <Option-Key-0>
@@ -300,5 +304,6 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Option-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Option-Key-x>
zoom-height= <Option-Key-0>
diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py
index 12113c19c086..2233dacd66ba 100644
--- a/Lib/idlelib/config.py
+++ b/Lib/idlelib/config.py
@@ -591,7 +591,9 @@ def IsCoreBinding(self, virtualEvent):
former_extension_events = { # Those with user-configurable keys.
'<<force-open-completions>>', '<<expand-word>>',
'<<force-open-calltip>>', '<<flash-paren>>', '<<format-paragraph>>',
- '<<run-module>>', '<<check-module>>', '<<zoom-height>>'}
+ '<<run-module>>', '<<check-module>>', '<<zoom-height>>',
+ '<<run-custom>>',
+ }
def GetCoreKeys(self, keySetName=None):
"""Return dict of core virtual-key keybindings for keySetName.
@@ -658,6 +660,7 @@ def GetCoreKeys(self, keySetName=None):
'<<flash-paren>>': ['<Control-Key-0>'],
'<<format-paragraph>>': ['<Alt-Key-q>'],
'<<run-module>>': ['<Key-F5>'],
+ '<<run-custom>>': ['<Shift-Key-F5>'],
'<<check-module>>': ['<Alt-Key-x>'],
'<<zoom-height>>': ['<Alt-Key-2>'],
}
diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py
index a6674728cd93..606de71a6add 100644
--- a/Lib/idlelib/editor.py
+++ b/Lib/idlelib/editor.py
@@ -304,6 +304,7 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
scriptbinding = ScriptBinding(self)
text.bind("<<check-module>>", scriptbinding.check_module_event)
text.bind("<<run-module>>", scriptbinding.run_module_event)
+ text.bind("<<run-custom>>", scriptbinding.run_custom_event)
text.bind("<<do-rstrip>>", self.Rstrip(self).do_rstrip)
ctip = self.Calltip(self)
text.bind("<<try-open-calltip>>", ctip.try_open_calltip_event)
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index e27ec8d6e173..91803fd06c8f 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -248,17 +248,21 @@ <h3>Edit menu (Shell and Editor)<a class="headerlink" href="#edit-menu-shell-and
</div>
<div class="section" id="run-menu-editor-window-only">
<span id="index-2"></span><h3>Run menu (Editor window only)<a class="headerlink" href="#run-menu-editor-window-only" title="Permalink to this headline">¶</a></h3>
-<dl class="docutils">
+<dl class="docutils" id="python-shell">
<dt>Python Shell</dt>
<dd>Open or wake up the Python Shell window.</dd>
+</dl>
+<dl class="docutils" id="check-module">
<dt>Check Module</dt>
<dd>Check the syntax of the module currently open in the Editor window. If the
module has not been saved IDLE will either prompt the user to save or
autosave, as selected in the General tab of the Idle Settings dialog. If
there is a syntax error, the approximate location is indicated in the
Editor window.</dd>
+</dl>
+<dl class="docutils" id="run-module">
<dt>Run Module</dt>
-<dd>Do Check Module (above). If no error, restart the shell to clean the
+<dd>Do <a class="reference internal" href="#check-module"><span class="std std-ref">Check Module</span></a>. If no error, restart the shell to clean the
environment, then execute the module. Output is displayed in the Shell
window. Note that output requires use of <code class="docutils literal notranslate"><span class="pre">print</span></code> or <code class="docutils literal notranslate"><span class="pre">write</span></code>.
When execution is complete, the Shell retains focus and displays a prompt.
@@ -266,6 +270,12 @@ <h3>Edit menu (Shell and Editor)<a class="headerlink" href="#edit-menu-shell-and
This is similar to executing a file with <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">-i</span> <span class="pre">file</span></code> at a command
line.</dd>
</dl>
+<dl class="docutils" id="run-custom">
+<dt>Run… Customized</dt>
+<dd>Same as <a class="reference internal" href="#run-module"><span class="std std-ref">Run Module</span></a>, but run the module with customized
+settings. <em>Command Line Arguments</em> extend <a class="reference internal" href="sys.html#sys.argv" title="sys.argv"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.argv</span></code></a> as if passed
+on a command line. The module can be run in the Shell without restarting.</dd>
+</dl>
</div>
<div class="section" id="shell-menu-shell-window-only">
<h3>Shell menu (Shell window only)<a class="headerlink" href="#shell-menu-shell-window-only" title="Permalink to this headline">¶</a></h3>
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
index 6e3398ed0bc8..6ce8cc8a5f60 100644
--- a/Lib/idlelib/idle_test/htest.py
+++ b/Lib/idlelib/idle_test/htest.py
@@ -108,6 +108,15 @@ def _wrapper(parent): # htest #
"The default color scheme is in idlelib/config-highlight.def"
}
+CustomRun_spec = {
+ 'file': 'query',
+ 'kwds': {'title': 'Custom Run Args',
+ '_htest': True},
+ 'msg': "Enter with <Return> or [Ok]. Print valid entry to Shell\n"
+ "Arguments are parsed into a list\n"
+ "Close dialog with valid entry, <Escape>, [Cancel], [X]"
+ }
+
ConfigDialog_spec = {
'file': 'configdialog',
'kwds': {'title': 'ConfigDialogTest',
diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py
index c1c4a25cc506..3b444de15d7c 100644
--- a/Lib/idlelib/idle_test/test_query.py
+++ b/Lib/idlelib/idle_test/test_query.py
@@ -1,4 +1,4 @@
-"""Test query, coverage 91%).
+"""Test query, coverage 93%).
Non-gui tests for Query, SectionName, ModuleName, and HelpSource use
dummy versions that extract the non-gui methods and add other needed
@@ -30,11 +30,9 @@ class Dummy_Query:
ok = query.Query.ok
cancel = query.Query.cancel
# Add attributes and initialization needed for tests.
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
self.result = None
self.destroyed = False
def showerror(self, message):
@@ -80,11 +78,9 @@ class SectionNameTest(unittest.TestCase):
class Dummy_SectionName:
entry_ok = query.SectionName.entry_ok # Function being tested.
used_names = ['used']
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
def showerror(self, message):
self.entry_error['text'] = message
@@ -115,11 +111,9 @@ class ModuleNameTest(unittest.TestCase):
class Dummy_ModuleName:
entry_ok = query.ModuleName.entry_ok # Function being tested.
text0 = ''
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
def showerror(self, message):
self.entry_error['text'] = message
@@ -144,9 +138,7 @@ def test_good_module_name(self):
self.assertEqual(dialog.entry_error['text'], '')
-# 3 HelpSource test classes each test one function.
-
-orig_platform = query.platform
+# 3 HelpSource test classes each test one method.
class HelpsourceBrowsefileTest(unittest.TestCase):
"Test browse_file method of ModuleName subclass of Query."
@@ -178,17 +170,16 @@ class HelpsourcePathokTest(unittest.TestCase):
class Dummy_HelpSource:
path_ok = query.HelpSource.path_ok
- path = Var()
- path_error = {}
def __init__(self, dummy_path):
- self.path.set(dummy_path)
- self.path_error['text'] = ''
+ self.path = Var(value=dummy_path)
+ self.path_error = {'text': ''}
def showerror(self, message, widget=None):
self.path_error['text'] = message
+ orig_platform = query.platform # Set in test_path_ok_file.
@classmethod
def tearDownClass(cls):
- query.platform = orig_platform
+ query.platform = cls.orig_platform
def test_path_ok_blank(self):
dialog = self.Dummy_HelpSource(' ')
@@ -242,6 +233,56 @@ def test_entry_ok_helpsource(self):
self.assertEqual(dialog.entry_ok(), result)
+# 2 CustomRun test classes each test one method.
+
+class CustomRunCLIargsokTest(unittest.TestCase):
+ "Test cli_ok method of the CustomRun subclass of Query."
+
+ class Dummy_CustomRun:
+ cli_args_ok = query.CustomRun.cli_args_ok
+ def __init__(self, dummy_entry):
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
+ def showerror(self, message):
+ self.entry_error['text'] = message
+
+ def test_blank_args(self):
+ dialog = self.Dummy_CustomRun(' ')
+ self.assertEqual(dialog.cli_args_ok(), [])
+
+ def test_invalid_args(self):
+ dialog = self.Dummy_CustomRun("'no-closing-quote")
+ self.assertEqual(dialog.cli_args_ok(), None)
+ self.assertIn('No closing', dialog.entry_error['text'])
+
+ def test_good_args(self):
+ args = ['-n', '10', '--verbose', '-p', '/path', '--name']
+ dialog = self.Dummy_CustomRun(' '.join(args) + ' "my name"')
+ self.assertEqual(dialog.cli_args_ok(), args + ["my name"])
+ self.assertEqual(dialog.entry_error['text'], '')
+
+
+class CustomRunEntryokTest(unittest.TestCase):
+ "Test entry_ok method of the CustomRun subclass of Query."
+
+ class Dummy_CustomRun:
+ entry_ok = query.CustomRun.entry_ok
+ entry_error = {}
+ restartvar = Var()
+ def cli_args_ok(self):
+ return self.cli_args
+
+ def test_entry_ok_customrun(self):
+ dialog = self.Dummy_CustomRun()
+ for restart in {True, False}:
+ dialog.restartvar.set(restart)
+ for cli_args, result in ((None, None),
+ (['my arg'], (['my arg'], restart))):
+ with self.subTest(restart=restart, cli_args=cli_args):
+ dialog.cli_args = cli_args
+ self.assertEqual(dialog.entry_ok(), result)
+
+
# GUI TESTS
class QueryGuiTest(unittest.TestCase):
@@ -302,9 +343,7 @@ def test_click_section_name(self):
dialog.entry.insert(0, 'okay')
dialog.button_ok.invoke()
self.assertEqual(dialog.result, 'okay')
- del dialog
root.destroy()
- del root
class ModulenameGuiTest(unittest.TestCase):
@@ -321,9 +360,7 @@ def test_click_module_name(self):
self.assertEqual(dialog.entry.get(), 'idlelib')
dialog.button_ok.invoke()
self.assertTrue(dialog.result.endswith('__init__.py'))
- del dialog
root.destroy()
- del root
class HelpsourceGuiTest(unittest.TestCase):
@@ -343,9 +380,23 @@ def test_click_help_source(self):
dialog.button_ok.invoke()
prefix = "file://" if sys.platform == 'darwin' else ''
Equal(dialog.result, ('__test__', prefix + __file__))
- del dialog
root.destroy()
- del root
+
+
+class CustomRunGuiTest(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ requires('gui')
+
+ def test_click_args(self):
+ root = Tk()
+ root.withdraw()
+ dialog = query.CustomRun(root, 'Title', _utest=True)
+ dialog.entry.insert(0, 'okay')
+ dialog.button_ok.invoke()
+ self.assertEqual(dialog.result, (['okay'], True))
+ root.destroy()
if __name__ == '__main__':
diff --git a/Lib/idlelib/mainmenu.py b/Lib/idlelib/mainmenu.py
index f834220fc2bb..1b8dc475650d 100644
--- a/Lib/idlelib/mainmenu.py
+++ b/Lib/idlelib/mainmenu.py
@@ -76,6 +76,7 @@
('Python Shell', '<<open-python-shell>>'),
('C_heck Module', '<<check-module>>'),
('R_un Module', '<<run-module>>'),
+ ('Run... _Customized', '<<run-custom>>'),
]),
('shell', [
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index f0b72553db87..9b3bb1d186b8 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -21,10 +21,11 @@
import importlib
import os
+import shlex
from sys import executable, platform # Platform is set for one test.
-from tkinter import Toplevel, StringVar, W, E, S
-from tkinter.ttk import Frame, Button, Entry, Label
+from tkinter import Toplevel, StringVar, BooleanVar, W, E, S
+from tkinter.ttk import Frame, Button, Entry, Label, Checkbutton
from tkinter import filedialog
from tkinter.font import Font
@@ -83,7 +84,7 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
self.deiconify() # Unhide now that geometry set.
self.wait_window()
- def create_widgets(self): # Call from override, if any.
+ def create_widgets(self, ok_text='OK'): # Call from override, if any.
# Bind to self widgets needed for entry_ok or unittest.
self.frame = frame = Frame(self, padding=10)
frame.grid(column=0, row=0, sticky='news')
@@ -99,7 +100,7 @@ def create_widgets(self): # Call from override, if any.
self.entry_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
self.button_ok = Button(
- frame, text='OK', default='active', command=self.ok)
+ frame, text=ok_text, default='active', command=self.ok)
self.button_cancel = Button(
frame, text='Cancel', command=self.cancel)
@@ -302,10 +303,56 @@ def entry_ok(self):
path = self.path_ok()
return None if name is None or path is None else (name, path)
+class CustomRun(Query):
+ """Get settings for custom run of module.
+
+ 1. Command line arguments to extend sys.argv.
+ 2. Whether to restart Shell or not.
+ """
+ # Used in runscript.run_custom_event
+
+ def __init__(self, parent, title, *, cli_args='',
+ _htest=False, _utest=False):
+ # TODO Use cli_args to pre-populate entry.
+ message = 'Command Line Arguments for sys.argv:'
+ super().__init__(
+ parent, title, message, text0=cli_args,
+ _htest=_htest, _utest=_utest)
+
+ def create_widgets(self):
+ super().create_widgets(ok_text='Run')
+ frame = self.frame
+ self.restartvar = BooleanVar(self, value=True)
+ restart = Checkbutton(frame, variable=self.restartvar, onvalue=True,
+ offvalue=False, text='Restart shell')
+ self.args_error = Label(frame, text=' ', foreground='red',
+ font=self.error_font)
+
+ restart.grid(column=0, row=4, columnspan=3, padx=5, sticky='w')
+ self.args_error.grid(column=0, row=12, columnspan=3, padx=5,
+ sticky='we')
+
+ def cli_args_ok(self):
+ "Validity check and parsing for command line arguments."
+ cli_string = self.entry.get().strip()
+ try:
+ cli_args = shlex.split(cli_string, posix=True)
+ except ValueError as err:
+ self.showerror(str(err))
+ return None
+ return cli_args
+
+ def entry_ok(self):
+ "Return apparently valid (cli_args, restart) or None"
+ self.entry_error['text'] = ''
+ cli_args = self.cli_args_ok()
+ restart = self.restartvar.get()
+ return None if cli_args is None else (cli_args, restart)
+
if __name__ == '__main__':
from unittest import main
main('idlelib.idle_test.test_query', verbosity=2, exit=False)
from idlelib.idle_test.htest import run
- run(Query, HelpSource)
+ run(Query, HelpSource, CustomRun)
diff --git a/Lib/idlelib/runscript.py b/Lib/idlelib/runscript.py
index 83433b1cf0a4..b041e56fb840 100644
--- a/Lib/idlelib/runscript.py
+++ b/Lib/idlelib/runscript.py
@@ -18,6 +18,7 @@
from idlelib.config import idleConf
from idlelib import macosx
from idlelib import pyshell
+from idlelib.query import CustomRun
indent_message = """Error: Inconsistent indentation detected!
@@ -108,20 +109,24 @@ def run_module_event(self, event):
# tries to run a module using the keyboard shortcut
# (the menu item works fine).
self.editwin.text_frame.after(200,
- lambda: self.editwin.text_frame.event_generate('<<run-module-event-2>>'))
+ lambda: self.editwin.text_frame.event_generate(
+ '<<run-module-event-2>>'))
return 'break'
else:
return self._run_module_event(event)
- def _run_module_event(self, event):
+ def run_custom_event(self, event):
+ return self._run_module_event(event, customize=True)
+
+ def _run_module_event(self, event, *, customize=False):
"""Run the module after setting up the environment.
- First check the syntax. If OK, make sure the shell is active and
- then transfer the arguments, set the run environment's working
- directory to the directory of the module being executed and also
- add that directory to its sys.path if not already included.
+ First check the syntax. Next get customization. If OK, make
+ sure the shell is active and then transfer the arguments, set
+ the run environment's working directory to the directory of the
+ module being executed and also add that directory to its
+ sys.path if not already included.
"""
-
filename = self.getfilename()
if not filename:
return 'break'
@@ -130,23 +135,34 @@ def _run_module_event(self, event):
return 'break'
if not self.tabnanny(filename):
return 'break'
+ if customize:
+ title = f"Customize {self.editwin.short_title()} Run"
+ run_args = CustomRun(self.shell.text, title).result
+ if not run_args: # User cancelled.
+ return 'break'
+ cli_args, restart = run_args if customize else ([], True)
interp = self.shell.interp
- if pyshell.use_subprocess:
- interp.restart_subprocess(with_cwd=False, filename=
- self.editwin._filename_to_unicode(filename))
+ if pyshell.use_subprocess and restart:
+ interp.restart_subprocess(
+ with_cwd=False, filename=
+ self.editwin._filename_to_unicode(filename))
dirname = os.path.dirname(filename)
- # XXX Too often this discards arguments the user just set...
- interp.runcommand("""if 1:
+ argv = [filename]
+ if cli_args:
+ argv += cli_args
+ interp.runcommand(f"""if 1:
__file__ = {filename!r}
import sys as _sys
from os.path import basename as _basename
+ argv = {argv!r}
if (not _sys.argv or
- _basename(_sys.argv[0]) != _basename(__file__)):
- _sys.argv = [__file__]
+ _basename(_sys.argv[0]) != _basename(__file__) or
+ len(argv) > 1):
+ _sys.argv = argv
import os as _os
_os.chdir({dirname!r})
del _sys, _basename, _os
- \n""".format(filename=filename, dirname=dirname))
+ \n""")
interp.prepend_syspath(filename)
# XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still
# go to __stderr__. With subprocess, they go to the shell.
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst b/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
new file mode 100644
index 000000000000..9fc642077488
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
@@ -0,0 +1,3 @@
+Add 'Run... Customized' to the Run menu to run a module with customized
+settings. Any 'command line arguments' entered are added to sys.argv.
+One can suppress the normal Shell main module restart.
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/ae526ee320d3feabba0aa4dffa9d52e39f…
commit: ae526ee320d3feabba0aa4dffa9d52e39f8941dc
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T19:47:55-07:00
summary:
bpo-5680: IDLE: Customize running a module (GH-13763)
The initialize options are 1) add command line options, which are appended to sys.argv as if passed on a real command line, and …
[View More]2) skip the shell restart. The customization dialog is accessed by a new entry on the Run menu.
(cherry picked from commit 201bc2d18b60adb05810d2a6ab396047bc527088)
Co-authored-by: Cheryl Sabella <cheryl.sabella(a)gmail.com>
files:
A Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
M Doc/library/idle.rst
M Lib/idlelib/config-keys.def
M Lib/idlelib/config.py
M Lib/idlelib/editor.py
M Lib/idlelib/help.html
M Lib/idlelib/idle_test/htest.py
M Lib/idlelib/idle_test/test_query.py
M Lib/idlelib/mainmenu.py
M Lib/idlelib/query.py
M Lib/idlelib/runscript.py
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index d494c9766eb7..fb886a714d74 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -207,9 +207,13 @@ Strip trailing whitespace
Run menu (Editor window only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. _python-shell:
+
Python Shell
Open or wake up the Python Shell window.
+.. _check-module:
+
Check Module
Check the syntax of the module currently open in the Editor window. If the
module has not been saved IDLE will either prompt the user to save or
@@ -217,8 +221,10 @@ Check Module
there is a syntax error, the approximate location is indicated in the
Editor window.
+.. _run-module:
+
Run Module
- Do Check Module (above). If no error, restart the shell to clean the
+ Do :ref:`Check Module <check-module>`. If no error, restart the shell to clean the
environment, then execute the module. Output is displayed in the Shell
window. Note that output requires use of ``print`` or ``write``.
When execution is complete, the Shell retains focus and displays a prompt.
@@ -226,6 +232,14 @@ Run Module
This is similar to executing a file with ``python -i file`` at a command
line.
+.. _run-custom:
+
+Run... Customized
+ Same as :ref:`Run Module <run-module>`, but run the module with customized
+ settings. *Command Line Arguments* extend :data:`sys.argv` as if passed
+ on a command line. The module can be run in the Shell without restarting.
+
+
Shell menu (Shell window only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Lib/idlelib/config-keys.def b/Lib/idlelib/config-keys.def
index fd235194dfc9..f71269b5b49f 100644
--- a/Lib/idlelib/config-keys.def
+++ b/Lib/idlelib/config-keys.def
@@ -63,6 +63,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -122,6 +123,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -181,6 +183,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -240,6 +243,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Option-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Option-Key-x>
zoom-height= <Option-Key-0>
@@ -300,5 +304,6 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Option-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Option-Key-x>
zoom-height= <Option-Key-0>
diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py
index 12113c19c086..2233dacd66ba 100644
--- a/Lib/idlelib/config.py
+++ b/Lib/idlelib/config.py
@@ -591,7 +591,9 @@ def IsCoreBinding(self, virtualEvent):
former_extension_events = { # Those with user-configurable keys.
'<<force-open-completions>>', '<<expand-word>>',
'<<force-open-calltip>>', '<<flash-paren>>', '<<format-paragraph>>',
- '<<run-module>>', '<<check-module>>', '<<zoom-height>>'}
+ '<<run-module>>', '<<check-module>>', '<<zoom-height>>',
+ '<<run-custom>>',
+ }
def GetCoreKeys(self, keySetName=None):
"""Return dict of core virtual-key keybindings for keySetName.
@@ -658,6 +660,7 @@ def GetCoreKeys(self, keySetName=None):
'<<flash-paren>>': ['<Control-Key-0>'],
'<<format-paragraph>>': ['<Alt-Key-q>'],
'<<run-module>>': ['<Key-F5>'],
+ '<<run-custom>>': ['<Shift-Key-F5>'],
'<<check-module>>': ['<Alt-Key-x>'],
'<<zoom-height>>': ['<Alt-Key-2>'],
}
diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py
index a6674728cd93..606de71a6add 100644
--- a/Lib/idlelib/editor.py
+++ b/Lib/idlelib/editor.py
@@ -304,6 +304,7 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
scriptbinding = ScriptBinding(self)
text.bind("<<check-module>>", scriptbinding.check_module_event)
text.bind("<<run-module>>", scriptbinding.run_module_event)
+ text.bind("<<run-custom>>", scriptbinding.run_custom_event)
text.bind("<<do-rstrip>>", self.Rstrip(self).do_rstrip)
ctip = self.Calltip(self)
text.bind("<<try-open-calltip>>", ctip.try_open_calltip_event)
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index e27ec8d6e173..91803fd06c8f 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -248,17 +248,21 @@ <h3>Edit menu (Shell and Editor)<a class="headerlink" href="#edit-menu-shell-and
</div>
<div class="section" id="run-menu-editor-window-only">
<span id="index-2"></span><h3>Run menu (Editor window only)<a class="headerlink" href="#run-menu-editor-window-only" title="Permalink to this headline">¶</a></h3>
-<dl class="docutils">
+<dl class="docutils" id="python-shell">
<dt>Python Shell</dt>
<dd>Open or wake up the Python Shell window.</dd>
+</dl>
+<dl class="docutils" id="check-module">
<dt>Check Module</dt>
<dd>Check the syntax of the module currently open in the Editor window. If the
module has not been saved IDLE will either prompt the user to save or
autosave, as selected in the General tab of the Idle Settings dialog. If
there is a syntax error, the approximate location is indicated in the
Editor window.</dd>
+</dl>
+<dl class="docutils" id="run-module">
<dt>Run Module</dt>
-<dd>Do Check Module (above). If no error, restart the shell to clean the
+<dd>Do <a class="reference internal" href="#check-module"><span class="std std-ref">Check Module</span></a>. If no error, restart the shell to clean the
environment, then execute the module. Output is displayed in the Shell
window. Note that output requires use of <code class="docutils literal notranslate"><span class="pre">print</span></code> or <code class="docutils literal notranslate"><span class="pre">write</span></code>.
When execution is complete, the Shell retains focus and displays a prompt.
@@ -266,6 +270,12 @@ <h3>Edit menu (Shell and Editor)<a class="headerlink" href="#edit-menu-shell-and
This is similar to executing a file with <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">-i</span> <span class="pre">file</span></code> at a command
line.</dd>
</dl>
+<dl class="docutils" id="run-custom">
+<dt>Run… Customized</dt>
+<dd>Same as <a class="reference internal" href="#run-module"><span class="std std-ref">Run Module</span></a>, but run the module with customized
+settings. <em>Command Line Arguments</em> extend <a class="reference internal" href="sys.html#sys.argv" title="sys.argv"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.argv</span></code></a> as if passed
+on a command line. The module can be run in the Shell without restarting.</dd>
+</dl>
</div>
<div class="section" id="shell-menu-shell-window-only">
<h3>Shell menu (Shell window only)<a class="headerlink" href="#shell-menu-shell-window-only" title="Permalink to this headline">¶</a></h3>
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
index 6e3398ed0bc8..6ce8cc8a5f60 100644
--- a/Lib/idlelib/idle_test/htest.py
+++ b/Lib/idlelib/idle_test/htest.py
@@ -108,6 +108,15 @@ def _wrapper(parent): # htest #
"The default color scheme is in idlelib/config-highlight.def"
}
+CustomRun_spec = {
+ 'file': 'query',
+ 'kwds': {'title': 'Custom Run Args',
+ '_htest': True},
+ 'msg': "Enter with <Return> or [Ok]. Print valid entry to Shell\n"
+ "Arguments are parsed into a list\n"
+ "Close dialog with valid entry, <Escape>, [Cancel], [X]"
+ }
+
ConfigDialog_spec = {
'file': 'configdialog',
'kwds': {'title': 'ConfigDialogTest',
diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py
index c1c4a25cc506..3b444de15d7c 100644
--- a/Lib/idlelib/idle_test/test_query.py
+++ b/Lib/idlelib/idle_test/test_query.py
@@ -1,4 +1,4 @@
-"""Test query, coverage 91%).
+"""Test query, coverage 93%).
Non-gui tests for Query, SectionName, ModuleName, and HelpSource use
dummy versions that extract the non-gui methods and add other needed
@@ -30,11 +30,9 @@ class Dummy_Query:
ok = query.Query.ok
cancel = query.Query.cancel
# Add attributes and initialization needed for tests.
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
self.result = None
self.destroyed = False
def showerror(self, message):
@@ -80,11 +78,9 @@ class SectionNameTest(unittest.TestCase):
class Dummy_SectionName:
entry_ok = query.SectionName.entry_ok # Function being tested.
used_names = ['used']
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
def showerror(self, message):
self.entry_error['text'] = message
@@ -115,11 +111,9 @@ class ModuleNameTest(unittest.TestCase):
class Dummy_ModuleName:
entry_ok = query.ModuleName.entry_ok # Function being tested.
text0 = ''
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
def showerror(self, message):
self.entry_error['text'] = message
@@ -144,9 +138,7 @@ def test_good_module_name(self):
self.assertEqual(dialog.entry_error['text'], '')
-# 3 HelpSource test classes each test one function.
-
-orig_platform = query.platform
+# 3 HelpSource test classes each test one method.
class HelpsourceBrowsefileTest(unittest.TestCase):
"Test browse_file method of ModuleName subclass of Query."
@@ -178,17 +170,16 @@ class HelpsourcePathokTest(unittest.TestCase):
class Dummy_HelpSource:
path_ok = query.HelpSource.path_ok
- path = Var()
- path_error = {}
def __init__(self, dummy_path):
- self.path.set(dummy_path)
- self.path_error['text'] = ''
+ self.path = Var(value=dummy_path)
+ self.path_error = {'text': ''}
def showerror(self, message, widget=None):
self.path_error['text'] = message
+ orig_platform = query.platform # Set in test_path_ok_file.
@classmethod
def tearDownClass(cls):
- query.platform = orig_platform
+ query.platform = cls.orig_platform
def test_path_ok_blank(self):
dialog = self.Dummy_HelpSource(' ')
@@ -242,6 +233,56 @@ def test_entry_ok_helpsource(self):
self.assertEqual(dialog.entry_ok(), result)
+# 2 CustomRun test classes each test one method.
+
+class CustomRunCLIargsokTest(unittest.TestCase):
+ "Test cli_ok method of the CustomRun subclass of Query."
+
+ class Dummy_CustomRun:
+ cli_args_ok = query.CustomRun.cli_args_ok
+ def __init__(self, dummy_entry):
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
+ def showerror(self, message):
+ self.entry_error['text'] = message
+
+ def test_blank_args(self):
+ dialog = self.Dummy_CustomRun(' ')
+ self.assertEqual(dialog.cli_args_ok(), [])
+
+ def test_invalid_args(self):
+ dialog = self.Dummy_CustomRun("'no-closing-quote")
+ self.assertEqual(dialog.cli_args_ok(), None)
+ self.assertIn('No closing', dialog.entry_error['text'])
+
+ def test_good_args(self):
+ args = ['-n', '10', '--verbose', '-p', '/path', '--name']
+ dialog = self.Dummy_CustomRun(' '.join(args) + ' "my name"')
+ self.assertEqual(dialog.cli_args_ok(), args + ["my name"])
+ self.assertEqual(dialog.entry_error['text'], '')
+
+
+class CustomRunEntryokTest(unittest.TestCase):
+ "Test entry_ok method of the CustomRun subclass of Query."
+
+ class Dummy_CustomRun:
+ entry_ok = query.CustomRun.entry_ok
+ entry_error = {}
+ restartvar = Var()
+ def cli_args_ok(self):
+ return self.cli_args
+
+ def test_entry_ok_customrun(self):
+ dialog = self.Dummy_CustomRun()
+ for restart in {True, False}:
+ dialog.restartvar.set(restart)
+ for cli_args, result in ((None, None),
+ (['my arg'], (['my arg'], restart))):
+ with self.subTest(restart=restart, cli_args=cli_args):
+ dialog.cli_args = cli_args
+ self.assertEqual(dialog.entry_ok(), result)
+
+
# GUI TESTS
class QueryGuiTest(unittest.TestCase):
@@ -302,9 +343,7 @@ def test_click_section_name(self):
dialog.entry.insert(0, 'okay')
dialog.button_ok.invoke()
self.assertEqual(dialog.result, 'okay')
- del dialog
root.destroy()
- del root
class ModulenameGuiTest(unittest.TestCase):
@@ -321,9 +360,7 @@ def test_click_module_name(self):
self.assertEqual(dialog.entry.get(), 'idlelib')
dialog.button_ok.invoke()
self.assertTrue(dialog.result.endswith('__init__.py'))
- del dialog
root.destroy()
- del root
class HelpsourceGuiTest(unittest.TestCase):
@@ -343,9 +380,23 @@ def test_click_help_source(self):
dialog.button_ok.invoke()
prefix = "file://" if sys.platform == 'darwin' else ''
Equal(dialog.result, ('__test__', prefix + __file__))
- del dialog
root.destroy()
- del root
+
+
+class CustomRunGuiTest(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ requires('gui')
+
+ def test_click_args(self):
+ root = Tk()
+ root.withdraw()
+ dialog = query.CustomRun(root, 'Title', _utest=True)
+ dialog.entry.insert(0, 'okay')
+ dialog.button_ok.invoke()
+ self.assertEqual(dialog.result, (['okay'], True))
+ root.destroy()
if __name__ == '__main__':
diff --git a/Lib/idlelib/mainmenu.py b/Lib/idlelib/mainmenu.py
index f834220fc2bb..1b8dc475650d 100644
--- a/Lib/idlelib/mainmenu.py
+++ b/Lib/idlelib/mainmenu.py
@@ -76,6 +76,7 @@
('Python Shell', '<<open-python-shell>>'),
('C_heck Module', '<<check-module>>'),
('R_un Module', '<<run-module>>'),
+ ('Run... _Customized', '<<run-custom>>'),
]),
('shell', [
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index f0b72553db87..9b3bb1d186b8 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -21,10 +21,11 @@
import importlib
import os
+import shlex
from sys import executable, platform # Platform is set for one test.
-from tkinter import Toplevel, StringVar, W, E, S
-from tkinter.ttk import Frame, Button, Entry, Label
+from tkinter import Toplevel, StringVar, BooleanVar, W, E, S
+from tkinter.ttk import Frame, Button, Entry, Label, Checkbutton
from tkinter import filedialog
from tkinter.font import Font
@@ -83,7 +84,7 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
self.deiconify() # Unhide now that geometry set.
self.wait_window()
- def create_widgets(self): # Call from override, if any.
+ def create_widgets(self, ok_text='OK'): # Call from override, if any.
# Bind to self widgets needed for entry_ok or unittest.
self.frame = frame = Frame(self, padding=10)
frame.grid(column=0, row=0, sticky='news')
@@ -99,7 +100,7 @@ def create_widgets(self): # Call from override, if any.
self.entry_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
self.button_ok = Button(
- frame, text='OK', default='active', command=self.ok)
+ frame, text=ok_text, default='active', command=self.ok)
self.button_cancel = Button(
frame, text='Cancel', command=self.cancel)
@@ -302,10 +303,56 @@ def entry_ok(self):
path = self.path_ok()
return None if name is None or path is None else (name, path)
+class CustomRun(Query):
+ """Get settings for custom run of module.
+
+ 1. Command line arguments to extend sys.argv.
+ 2. Whether to restart Shell or not.
+ """
+ # Used in runscript.run_custom_event
+
+ def __init__(self, parent, title, *, cli_args='',
+ _htest=False, _utest=False):
+ # TODO Use cli_args to pre-populate entry.
+ message = 'Command Line Arguments for sys.argv:'
+ super().__init__(
+ parent, title, message, text0=cli_args,
+ _htest=_htest, _utest=_utest)
+
+ def create_widgets(self):
+ super().create_widgets(ok_text='Run')
+ frame = self.frame
+ self.restartvar = BooleanVar(self, value=True)
+ restart = Checkbutton(frame, variable=self.restartvar, onvalue=True,
+ offvalue=False, text='Restart shell')
+ self.args_error = Label(frame, text=' ', foreground='red',
+ font=self.error_font)
+
+ restart.grid(column=0, row=4, columnspan=3, padx=5, sticky='w')
+ self.args_error.grid(column=0, row=12, columnspan=3, padx=5,
+ sticky='we')
+
+ def cli_args_ok(self):
+ "Validity check and parsing for command line arguments."
+ cli_string = self.entry.get().strip()
+ try:
+ cli_args = shlex.split(cli_string, posix=True)
+ except ValueError as err:
+ self.showerror(str(err))
+ return None
+ return cli_args
+
+ def entry_ok(self):
+ "Return apparently valid (cli_args, restart) or None"
+ self.entry_error['text'] = ''
+ cli_args = self.cli_args_ok()
+ restart = self.restartvar.get()
+ return None if cli_args is None else (cli_args, restart)
+
if __name__ == '__main__':
from unittest import main
main('idlelib.idle_test.test_query', verbosity=2, exit=False)
from idlelib.idle_test.htest import run
- run(Query, HelpSource)
+ run(Query, HelpSource, CustomRun)
diff --git a/Lib/idlelib/runscript.py b/Lib/idlelib/runscript.py
index 83433b1cf0a4..b041e56fb840 100644
--- a/Lib/idlelib/runscript.py
+++ b/Lib/idlelib/runscript.py
@@ -18,6 +18,7 @@
from idlelib.config import idleConf
from idlelib import macosx
from idlelib import pyshell
+from idlelib.query import CustomRun
indent_message = """Error: Inconsistent indentation detected!
@@ -108,20 +109,24 @@ def run_module_event(self, event):
# tries to run a module using the keyboard shortcut
# (the menu item works fine).
self.editwin.text_frame.after(200,
- lambda: self.editwin.text_frame.event_generate('<<run-module-event-2>>'))
+ lambda: self.editwin.text_frame.event_generate(
+ '<<run-module-event-2>>'))
return 'break'
else:
return self._run_module_event(event)
- def _run_module_event(self, event):
+ def run_custom_event(self, event):
+ return self._run_module_event(event, customize=True)
+
+ def _run_module_event(self, event, *, customize=False):
"""Run the module after setting up the environment.
- First check the syntax. If OK, make sure the shell is active and
- then transfer the arguments, set the run environment's working
- directory to the directory of the module being executed and also
- add that directory to its sys.path if not already included.
+ First check the syntax. Next get customization. If OK, make
+ sure the shell is active and then transfer the arguments, set
+ the run environment's working directory to the directory of the
+ module being executed and also add that directory to its
+ sys.path if not already included.
"""
-
filename = self.getfilename()
if not filename:
return 'break'
@@ -130,23 +135,34 @@ def _run_module_event(self, event):
return 'break'
if not self.tabnanny(filename):
return 'break'
+ if customize:
+ title = f"Customize {self.editwin.short_title()} Run"
+ run_args = CustomRun(self.shell.text, title).result
+ if not run_args: # User cancelled.
+ return 'break'
+ cli_args, restart = run_args if customize else ([], True)
interp = self.shell.interp
- if pyshell.use_subprocess:
- interp.restart_subprocess(with_cwd=False, filename=
- self.editwin._filename_to_unicode(filename))
+ if pyshell.use_subprocess and restart:
+ interp.restart_subprocess(
+ with_cwd=False, filename=
+ self.editwin._filename_to_unicode(filename))
dirname = os.path.dirname(filename)
- # XXX Too often this discards arguments the user just set...
- interp.runcommand("""if 1:
+ argv = [filename]
+ if cli_args:
+ argv += cli_args
+ interp.runcommand(f"""if 1:
__file__ = {filename!r}
import sys as _sys
from os.path import basename as _basename
+ argv = {argv!r}
if (not _sys.argv or
- _basename(_sys.argv[0]) != _basename(__file__)):
- _sys.argv = [__file__]
+ _basename(_sys.argv[0]) != _basename(__file__) or
+ len(argv) > 1):
+ _sys.argv = argv
import os as _os
_os.chdir({dirname!r})
del _sys, _basename, _os
- \n""".format(filename=filename, dirname=dirname))
+ \n""")
interp.prepend_syspath(filename)
# XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still
# go to __stderr__. With subprocess, they go to the shell.
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst b/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
new file mode 100644
index 000000000000..9fc642077488
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
@@ -0,0 +1,3 @@
+Add 'Run... Customized' to the Run menu to run a module with customized
+settings. Any 'command line arguments' entered are added to sys.argv.
+One can suppress the normal Shell main module restart.
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/201bc2d18b60adb05810d2a6ab396047bc…
commit: 201bc2d18b60adb05810d2a6ab396047bc527088
branch: master
author: Cheryl Sabella <cheryl.sabella(a)gmail.com>
committer: Terry Jan Reedy <tjreedy(a)udel.edu>
date: 2019-06-17T22:24:10-04:00
summary:
bpo-5680: IDLE: Customize running a module (GH-13763)
The initialize options are 1) add command line options, which are appended to sys.argv as if passed on a real command line, and 2) skip the shell …
[View More]restart. The customization dialog is accessed by a new entry on the Run menu.
files:
A Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
M Doc/library/idle.rst
M Lib/idlelib/config-keys.def
M Lib/idlelib/config.py
M Lib/idlelib/editor.py
M Lib/idlelib/help.html
M Lib/idlelib/idle_test/htest.py
M Lib/idlelib/idle_test/test_query.py
M Lib/idlelib/mainmenu.py
M Lib/idlelib/query.py
M Lib/idlelib/runscript.py
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index d494c9766eb7..fb886a714d74 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -207,9 +207,13 @@ Strip trailing whitespace
Run menu (Editor window only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+.. _python-shell:
+
Python Shell
Open or wake up the Python Shell window.
+.. _check-module:
+
Check Module
Check the syntax of the module currently open in the Editor window. If the
module has not been saved IDLE will either prompt the user to save or
@@ -217,8 +221,10 @@ Check Module
there is a syntax error, the approximate location is indicated in the
Editor window.
+.. _run-module:
+
Run Module
- Do Check Module (above). If no error, restart the shell to clean the
+ Do :ref:`Check Module <check-module>`. If no error, restart the shell to clean the
environment, then execute the module. Output is displayed in the Shell
window. Note that output requires use of ``print`` or ``write``.
When execution is complete, the Shell retains focus and displays a prompt.
@@ -226,6 +232,14 @@ Run Module
This is similar to executing a file with ``python -i file`` at a command
line.
+.. _run-custom:
+
+Run... Customized
+ Same as :ref:`Run Module <run-module>`, but run the module with customized
+ settings. *Command Line Arguments* extend :data:`sys.argv` as if passed
+ on a command line. The module can be run in the Shell without restarting.
+
+
Shell menu (Shell window only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Lib/idlelib/config-keys.def b/Lib/idlelib/config-keys.def
index fd235194dfc9..f71269b5b49f 100644
--- a/Lib/idlelib/config-keys.def
+++ b/Lib/idlelib/config-keys.def
@@ -63,6 +63,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -122,6 +123,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -181,6 +183,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Alt-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Alt-Key-x>
zoom-height= <Alt-Key-2>
@@ -240,6 +243,7 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Option-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Option-Key-x>
zoom-height= <Option-Key-0>
@@ -300,5 +304,6 @@ force-open-calltip= <Control-Key-backslash>
format-paragraph= <Option-Key-q>
flash-paren= <Control-Key-0>
run-module= <Key-F5>
+run-custom= <Shift-Key-F5>
check-module= <Option-Key-x>
zoom-height= <Option-Key-0>
diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py
index 12113c19c086..2233dacd66ba 100644
--- a/Lib/idlelib/config.py
+++ b/Lib/idlelib/config.py
@@ -591,7 +591,9 @@ def IsCoreBinding(self, virtualEvent):
former_extension_events = { # Those with user-configurable keys.
'<<force-open-completions>>', '<<expand-word>>',
'<<force-open-calltip>>', '<<flash-paren>>', '<<format-paragraph>>',
- '<<run-module>>', '<<check-module>>', '<<zoom-height>>'}
+ '<<run-module>>', '<<check-module>>', '<<zoom-height>>',
+ '<<run-custom>>',
+ }
def GetCoreKeys(self, keySetName=None):
"""Return dict of core virtual-key keybindings for keySetName.
@@ -658,6 +660,7 @@ def GetCoreKeys(self, keySetName=None):
'<<flash-paren>>': ['<Control-Key-0>'],
'<<format-paragraph>>': ['<Alt-Key-q>'],
'<<run-module>>': ['<Key-F5>'],
+ '<<run-custom>>': ['<Shift-Key-F5>'],
'<<check-module>>': ['<Alt-Key-x>'],
'<<zoom-height>>': ['<Alt-Key-2>'],
}
diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py
index a6674728cd93..606de71a6add 100644
--- a/Lib/idlelib/editor.py
+++ b/Lib/idlelib/editor.py
@@ -304,6 +304,7 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
scriptbinding = ScriptBinding(self)
text.bind("<<check-module>>", scriptbinding.check_module_event)
text.bind("<<run-module>>", scriptbinding.run_module_event)
+ text.bind("<<run-custom>>", scriptbinding.run_custom_event)
text.bind("<<do-rstrip>>", self.Rstrip(self).do_rstrip)
ctip = self.Calltip(self)
text.bind("<<try-open-calltip>>", ctip.try_open_calltip_event)
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index e27ec8d6e173..91803fd06c8f 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -248,17 +248,21 @@ <h3>Edit menu (Shell and Editor)<a class="headerlink" href="#edit-menu-shell-and
</div>
<div class="section" id="run-menu-editor-window-only">
<span id="index-2"></span><h3>Run menu (Editor window only)<a class="headerlink" href="#run-menu-editor-window-only" title="Permalink to this headline">¶</a></h3>
-<dl class="docutils">
+<dl class="docutils" id="python-shell">
<dt>Python Shell</dt>
<dd>Open or wake up the Python Shell window.</dd>
+</dl>
+<dl class="docutils" id="check-module">
<dt>Check Module</dt>
<dd>Check the syntax of the module currently open in the Editor window. If the
module has not been saved IDLE will either prompt the user to save or
autosave, as selected in the General tab of the Idle Settings dialog. If
there is a syntax error, the approximate location is indicated in the
Editor window.</dd>
+</dl>
+<dl class="docutils" id="run-module">
<dt>Run Module</dt>
-<dd>Do Check Module (above). If no error, restart the shell to clean the
+<dd>Do <a class="reference internal" href="#check-module"><span class="std std-ref">Check Module</span></a>. If no error, restart the shell to clean the
environment, then execute the module. Output is displayed in the Shell
window. Note that output requires use of <code class="docutils literal notranslate"><span class="pre">print</span></code> or <code class="docutils literal notranslate"><span class="pre">write</span></code>.
When execution is complete, the Shell retains focus and displays a prompt.
@@ -266,6 +270,12 @@ <h3>Edit menu (Shell and Editor)<a class="headerlink" href="#edit-menu-shell-and
This is similar to executing a file with <code class="docutils literal notranslate"><span class="pre">python</span> <span class="pre">-i</span> <span class="pre">file</span></code> at a command
line.</dd>
</dl>
+<dl class="docutils" id="run-custom">
+<dt>Run… Customized</dt>
+<dd>Same as <a class="reference internal" href="#run-module"><span class="std std-ref">Run Module</span></a>, but run the module with customized
+settings. <em>Command Line Arguments</em> extend <a class="reference internal" href="sys.html#sys.argv" title="sys.argv"><code class="xref py py-data docutils literal notranslate"><span class="pre">sys.argv</span></code></a> as if passed
+on a command line. The module can be run in the Shell without restarting.</dd>
+</dl>
</div>
<div class="section" id="shell-menu-shell-window-only">
<h3>Shell menu (Shell window only)<a class="headerlink" href="#shell-menu-shell-window-only" title="Permalink to this headline">¶</a></h3>
diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py
index 6e3398ed0bc8..6ce8cc8a5f60 100644
--- a/Lib/idlelib/idle_test/htest.py
+++ b/Lib/idlelib/idle_test/htest.py
@@ -108,6 +108,15 @@ def _wrapper(parent): # htest #
"The default color scheme is in idlelib/config-highlight.def"
}
+CustomRun_spec = {
+ 'file': 'query',
+ 'kwds': {'title': 'Custom Run Args',
+ '_htest': True},
+ 'msg': "Enter with <Return> or [Ok]. Print valid entry to Shell\n"
+ "Arguments are parsed into a list\n"
+ "Close dialog with valid entry, <Escape>, [Cancel], [X]"
+ }
+
ConfigDialog_spec = {
'file': 'configdialog',
'kwds': {'title': 'ConfigDialogTest',
diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py
index c1c4a25cc506..3b444de15d7c 100644
--- a/Lib/idlelib/idle_test/test_query.py
+++ b/Lib/idlelib/idle_test/test_query.py
@@ -1,4 +1,4 @@
-"""Test query, coverage 91%).
+"""Test query, coverage 93%).
Non-gui tests for Query, SectionName, ModuleName, and HelpSource use
dummy versions that extract the non-gui methods and add other needed
@@ -30,11 +30,9 @@ class Dummy_Query:
ok = query.Query.ok
cancel = query.Query.cancel
# Add attributes and initialization needed for tests.
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
self.result = None
self.destroyed = False
def showerror(self, message):
@@ -80,11 +78,9 @@ class SectionNameTest(unittest.TestCase):
class Dummy_SectionName:
entry_ok = query.SectionName.entry_ok # Function being tested.
used_names = ['used']
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
def showerror(self, message):
self.entry_error['text'] = message
@@ -115,11 +111,9 @@ class ModuleNameTest(unittest.TestCase):
class Dummy_ModuleName:
entry_ok = query.ModuleName.entry_ok # Function being tested.
text0 = ''
- entry = Var()
- entry_error = {}
def __init__(self, dummy_entry):
- self.entry.set(dummy_entry)
- self.entry_error['text'] = ''
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
def showerror(self, message):
self.entry_error['text'] = message
@@ -144,9 +138,7 @@ def test_good_module_name(self):
self.assertEqual(dialog.entry_error['text'], '')
-# 3 HelpSource test classes each test one function.
-
-orig_platform = query.platform
+# 3 HelpSource test classes each test one method.
class HelpsourceBrowsefileTest(unittest.TestCase):
"Test browse_file method of ModuleName subclass of Query."
@@ -178,17 +170,16 @@ class HelpsourcePathokTest(unittest.TestCase):
class Dummy_HelpSource:
path_ok = query.HelpSource.path_ok
- path = Var()
- path_error = {}
def __init__(self, dummy_path):
- self.path.set(dummy_path)
- self.path_error['text'] = ''
+ self.path = Var(value=dummy_path)
+ self.path_error = {'text': ''}
def showerror(self, message, widget=None):
self.path_error['text'] = message
+ orig_platform = query.platform # Set in test_path_ok_file.
@classmethod
def tearDownClass(cls):
- query.platform = orig_platform
+ query.platform = cls.orig_platform
def test_path_ok_blank(self):
dialog = self.Dummy_HelpSource(' ')
@@ -242,6 +233,56 @@ def test_entry_ok_helpsource(self):
self.assertEqual(dialog.entry_ok(), result)
+# 2 CustomRun test classes each test one method.
+
+class CustomRunCLIargsokTest(unittest.TestCase):
+ "Test cli_ok method of the CustomRun subclass of Query."
+
+ class Dummy_CustomRun:
+ cli_args_ok = query.CustomRun.cli_args_ok
+ def __init__(self, dummy_entry):
+ self.entry = Var(value=dummy_entry)
+ self.entry_error = {'text': ''}
+ def showerror(self, message):
+ self.entry_error['text'] = message
+
+ def test_blank_args(self):
+ dialog = self.Dummy_CustomRun(' ')
+ self.assertEqual(dialog.cli_args_ok(), [])
+
+ def test_invalid_args(self):
+ dialog = self.Dummy_CustomRun("'no-closing-quote")
+ self.assertEqual(dialog.cli_args_ok(), None)
+ self.assertIn('No closing', dialog.entry_error['text'])
+
+ def test_good_args(self):
+ args = ['-n', '10', '--verbose', '-p', '/path', '--name']
+ dialog = self.Dummy_CustomRun(' '.join(args) + ' "my name"')
+ self.assertEqual(dialog.cli_args_ok(), args + ["my name"])
+ self.assertEqual(dialog.entry_error['text'], '')
+
+
+class CustomRunEntryokTest(unittest.TestCase):
+ "Test entry_ok method of the CustomRun subclass of Query."
+
+ class Dummy_CustomRun:
+ entry_ok = query.CustomRun.entry_ok
+ entry_error = {}
+ restartvar = Var()
+ def cli_args_ok(self):
+ return self.cli_args
+
+ def test_entry_ok_customrun(self):
+ dialog = self.Dummy_CustomRun()
+ for restart in {True, False}:
+ dialog.restartvar.set(restart)
+ for cli_args, result in ((None, None),
+ (['my arg'], (['my arg'], restart))):
+ with self.subTest(restart=restart, cli_args=cli_args):
+ dialog.cli_args = cli_args
+ self.assertEqual(dialog.entry_ok(), result)
+
+
# GUI TESTS
class QueryGuiTest(unittest.TestCase):
@@ -302,9 +343,7 @@ def test_click_section_name(self):
dialog.entry.insert(0, 'okay')
dialog.button_ok.invoke()
self.assertEqual(dialog.result, 'okay')
- del dialog
root.destroy()
- del root
class ModulenameGuiTest(unittest.TestCase):
@@ -321,9 +360,7 @@ def test_click_module_name(self):
self.assertEqual(dialog.entry.get(), 'idlelib')
dialog.button_ok.invoke()
self.assertTrue(dialog.result.endswith('__init__.py'))
- del dialog
root.destroy()
- del root
class HelpsourceGuiTest(unittest.TestCase):
@@ -343,9 +380,23 @@ def test_click_help_source(self):
dialog.button_ok.invoke()
prefix = "file://" if sys.platform == 'darwin' else ''
Equal(dialog.result, ('__test__', prefix + __file__))
- del dialog
root.destroy()
- del root
+
+
+class CustomRunGuiTest(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ requires('gui')
+
+ def test_click_args(self):
+ root = Tk()
+ root.withdraw()
+ dialog = query.CustomRun(root, 'Title', _utest=True)
+ dialog.entry.insert(0, 'okay')
+ dialog.button_ok.invoke()
+ self.assertEqual(dialog.result, (['okay'], True))
+ root.destroy()
if __name__ == '__main__':
diff --git a/Lib/idlelib/mainmenu.py b/Lib/idlelib/mainmenu.py
index f834220fc2bb..1b8dc475650d 100644
--- a/Lib/idlelib/mainmenu.py
+++ b/Lib/idlelib/mainmenu.py
@@ -76,6 +76,7 @@
('Python Shell', '<<open-python-shell>>'),
('C_heck Module', '<<check-module>>'),
('R_un Module', '<<run-module>>'),
+ ('Run... _Customized', '<<run-custom>>'),
]),
('shell', [
diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py
index f0b72553db87..9b3bb1d186b8 100644
--- a/Lib/idlelib/query.py
+++ b/Lib/idlelib/query.py
@@ -21,10 +21,11 @@
import importlib
import os
+import shlex
from sys import executable, platform # Platform is set for one test.
-from tkinter import Toplevel, StringVar, W, E, S
-from tkinter.ttk import Frame, Button, Entry, Label
+from tkinter import Toplevel, StringVar, BooleanVar, W, E, S
+from tkinter.ttk import Frame, Button, Entry, Label, Checkbutton
from tkinter import filedialog
from tkinter.font import Font
@@ -83,7 +84,7 @@ def __init__(self, parent, title, message, *, text0='', used_names={},
self.deiconify() # Unhide now that geometry set.
self.wait_window()
- def create_widgets(self): # Call from override, if any.
+ def create_widgets(self, ok_text='OK'): # Call from override, if any.
# Bind to self widgets needed for entry_ok or unittest.
self.frame = frame = Frame(self, padding=10)
frame.grid(column=0, row=0, sticky='news')
@@ -99,7 +100,7 @@ def create_widgets(self): # Call from override, if any.
self.entry_error = Label(frame, text=' ', foreground='red',
font=self.error_font)
self.button_ok = Button(
- frame, text='OK', default='active', command=self.ok)
+ frame, text=ok_text, default='active', command=self.ok)
self.button_cancel = Button(
frame, text='Cancel', command=self.cancel)
@@ -302,10 +303,56 @@ def entry_ok(self):
path = self.path_ok()
return None if name is None or path is None else (name, path)
+class CustomRun(Query):
+ """Get settings for custom run of module.
+
+ 1. Command line arguments to extend sys.argv.
+ 2. Whether to restart Shell or not.
+ """
+ # Used in runscript.run_custom_event
+
+ def __init__(self, parent, title, *, cli_args='',
+ _htest=False, _utest=False):
+ # TODO Use cli_args to pre-populate entry.
+ message = 'Command Line Arguments for sys.argv:'
+ super().__init__(
+ parent, title, message, text0=cli_args,
+ _htest=_htest, _utest=_utest)
+
+ def create_widgets(self):
+ super().create_widgets(ok_text='Run')
+ frame = self.frame
+ self.restartvar = BooleanVar(self, value=True)
+ restart = Checkbutton(frame, variable=self.restartvar, onvalue=True,
+ offvalue=False, text='Restart shell')
+ self.args_error = Label(frame, text=' ', foreground='red',
+ font=self.error_font)
+
+ restart.grid(column=0, row=4, columnspan=3, padx=5, sticky='w')
+ self.args_error.grid(column=0, row=12, columnspan=3, padx=5,
+ sticky='we')
+
+ def cli_args_ok(self):
+ "Validity check and parsing for command line arguments."
+ cli_string = self.entry.get().strip()
+ try:
+ cli_args = shlex.split(cli_string, posix=True)
+ except ValueError as err:
+ self.showerror(str(err))
+ return None
+ return cli_args
+
+ def entry_ok(self):
+ "Return apparently valid (cli_args, restart) or None"
+ self.entry_error['text'] = ''
+ cli_args = self.cli_args_ok()
+ restart = self.restartvar.get()
+ return None if cli_args is None else (cli_args, restart)
+
if __name__ == '__main__':
from unittest import main
main('idlelib.idle_test.test_query', verbosity=2, exit=False)
from idlelib.idle_test.htest import run
- run(Query, HelpSource)
+ run(Query, HelpSource, CustomRun)
diff --git a/Lib/idlelib/runscript.py b/Lib/idlelib/runscript.py
index 83433b1cf0a4..b041e56fb840 100644
--- a/Lib/idlelib/runscript.py
+++ b/Lib/idlelib/runscript.py
@@ -18,6 +18,7 @@
from idlelib.config import idleConf
from idlelib import macosx
from idlelib import pyshell
+from idlelib.query import CustomRun
indent_message = """Error: Inconsistent indentation detected!
@@ -108,20 +109,24 @@ def run_module_event(self, event):
# tries to run a module using the keyboard shortcut
# (the menu item works fine).
self.editwin.text_frame.after(200,
- lambda: self.editwin.text_frame.event_generate('<<run-module-event-2>>'))
+ lambda: self.editwin.text_frame.event_generate(
+ '<<run-module-event-2>>'))
return 'break'
else:
return self._run_module_event(event)
- def _run_module_event(self, event):
+ def run_custom_event(self, event):
+ return self._run_module_event(event, customize=True)
+
+ def _run_module_event(self, event, *, customize=False):
"""Run the module after setting up the environment.
- First check the syntax. If OK, make sure the shell is active and
- then transfer the arguments, set the run environment's working
- directory to the directory of the module being executed and also
- add that directory to its sys.path if not already included.
+ First check the syntax. Next get customization. If OK, make
+ sure the shell is active and then transfer the arguments, set
+ the run environment's working directory to the directory of the
+ module being executed and also add that directory to its
+ sys.path if not already included.
"""
-
filename = self.getfilename()
if not filename:
return 'break'
@@ -130,23 +135,34 @@ def _run_module_event(self, event):
return 'break'
if not self.tabnanny(filename):
return 'break'
+ if customize:
+ title = f"Customize {self.editwin.short_title()} Run"
+ run_args = CustomRun(self.shell.text, title).result
+ if not run_args: # User cancelled.
+ return 'break'
+ cli_args, restart = run_args if customize else ([], True)
interp = self.shell.interp
- if pyshell.use_subprocess:
- interp.restart_subprocess(with_cwd=False, filename=
- self.editwin._filename_to_unicode(filename))
+ if pyshell.use_subprocess and restart:
+ interp.restart_subprocess(
+ with_cwd=False, filename=
+ self.editwin._filename_to_unicode(filename))
dirname = os.path.dirname(filename)
- # XXX Too often this discards arguments the user just set...
- interp.runcommand("""if 1:
+ argv = [filename]
+ if cli_args:
+ argv += cli_args
+ interp.runcommand(f"""if 1:
__file__ = {filename!r}
import sys as _sys
from os.path import basename as _basename
+ argv = {argv!r}
if (not _sys.argv or
- _basename(_sys.argv[0]) != _basename(__file__)):
- _sys.argv = [__file__]
+ _basename(_sys.argv[0]) != _basename(__file__) or
+ len(argv) > 1):
+ _sys.argv = argv
import os as _os
_os.chdir({dirname!r})
del _sys, _basename, _os
- \n""".format(filename=filename, dirname=dirname))
+ \n""")
interp.prepend_syspath(filename)
# XXX KBK 03Jul04 When run w/o subprocess, runtime warnings still
# go to __stderr__. With subprocess, they go to the shell.
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst b/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
new file mode 100644
index 000000000000..9fc642077488
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-03-00-39-29.bpo-5680.VCQfOO.rst
@@ -0,0 +1,3 @@
+Add 'Run... Customized' to the Run menu to run a module with customized
+settings. Any 'command line arguments' entered are added to sys.argv.
+One can suppress the normal Shell main module restart.
[View Less]
1
0

[2.7] Update link in colorsys docs to be https (GH-14062) (GH-14110)
by Miss Islington (bot) June 18, 2019
by Miss Islington (bot) June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/eb8b55927b224d2e50a6e9bf6a976d3cfc…
commit: eb8b55927b224d2e50a6e9bf6a976d3cfcba9f27
branch: 2.7
author: Alex Gaynor <alex.gaynor(a)gmail.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-17T18:41:44-07:00
summary:
[2.7] Update link in colorsys docs to be https (GH-14062) (GH-14110)
files:
M Doc/library/colorsys.rst
diff --git a/Doc/library/colorsys.rst b/Doc/library/colorsys.rst
index …
[View More]f1447e83b0c1..32eac8e3eea1 100644
--- a/Doc/library/colorsys.rst
+++ b/Doc/library/colorsys.rst
@@ -20,7 +20,7 @@ spaces, the coordinates are all between 0 and 1.
.. seealso::
More information about color spaces can be found at
- http://www.poynton.com/ColorFAQ.html and
+ https://www.poynton.com/ColorFAQ.html and
https://www.cambridgeincolour.com/tutorials/color-spaces.htm.
The :mod:`colorsys` module defines the following functions:
[View Less]
1
0

June 18, 2019
https://github.com/python/cpython/commit/7fb3190bcf9872dca3d83a7f9e3e65cbce…
commit: 7fb3190bcf9872dca3d83a7f9e3e65cbce8be9ed
branch: master
author: Brett Cannon <54418+brettcannon(a)users.noreply.github.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-17T18:30:56-07:00
summary:
Add sponsorship details for GitHub Sponsor button (GH-14181)
files:
A .github/FUNDING.yml
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new …
[View More]file mode 100644
index 000000000000..36c4e2771843
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+custom: https://www.python.org/psf/donations/python-dev/
[View Less]
1
0

bpo-33529, email: Fix infinite loop in email header encoding (GH-12020) (GH-14162)
by Ned Deily June 18, 2019
by Ned Deily June 18, 2019
June 18, 2019
https://github.com/python/cpython/commit/516a6a254814d2bc6a90290dfc44d77fdf…
commit: 516a6a254814d2bc6a90290dfc44d77fdfb4050b
branch: 3.6
author: Victor Stinner <vstinner(a)redhat.com>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-17T20:13:57-04:00
summary:
bpo-33529, email: Fix infinite loop in email header encoding (GH-12020) (GH-14162)
(cherry picked from commit c1f5667be1e3ec5871560c677402c1252c6018a6)
files:
A Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.…
[View More]wpNNBD.rst
M Lib/email/_header_value_parser.py
M Lib/test/test_email/test_headerregistry.py
M Lib/test/test_email/test_policy.py
diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py
index 1fb8cb448a01..f42cde203cef 100644
--- a/Lib/email/_header_value_parser.py
+++ b/Lib/email/_header_value_parser.py
@@ -2725,16 +2725,19 @@ def _fold_as_ew(to_encode, lines, maxlen, last_ew, ew_combine_allowed, charset):
lines.append(' ')
# XXX We'll get an infinite loop here if maxlen is <= 7
continue
- first_part = to_encode[:text_space]
- ew = _ew.encode(first_part, charset=encode_as)
- excess = len(ew) - remaining_space
- if excess > 0:
- # encode always chooses the shortest encoding, so this
- # is guaranteed to fit at this point.
- first_part = first_part[:-excess]
- ew = _ew.encode(first_part)
- lines[-1] += ew
- to_encode = to_encode[len(first_part):]
+
+ to_encode_word = to_encode[:text_space]
+ encoded_word = _ew.encode(to_encode_word, charset=encode_as)
+ excess = len(encoded_word) - remaining_space
+ while excess > 0:
+ # Since the chunk to encode is guaranteed to fit into less than 100 characters,
+ # shrinking it by one at a time shouldn't take long.
+ to_encode_word = to_encode_word[:-1]
+ encoded_word = _ew.encode(to_encode_word, charset=encode_as)
+ excess = len(encoded_word) - remaining_space
+ lines[-1] += encoded_word
+ to_encode = to_encode[len(to_encode_word):]
+
if to_encode:
lines.append(' ')
new_last_ew = len(lines[-1])
diff --git a/Lib/test/test_email/test_headerregistry.py b/Lib/test/test_email/test_headerregistry.py
index 30ce0ba54e47..d1007099f666 100644
--- a/Lib/test/test_email/test_headerregistry.py
+++ b/Lib/test/test_email/test_headerregistry.py
@@ -1643,10 +1643,10 @@ def test_fold_overlong_words_using_RFC2047(self):
self.assertEqual(
h.fold(policy=policy.default),
'X-Report-Abuse: =?utf-8?q?=3Chttps=3A//www=2Emailitapp=2E'
- 'com/report=5F?=\n'
- ' =?utf-8?q?abuse=2Ephp=3Fmid=3Dxxx-xxx-xxxx'
- 'xxxxxxxxxxxxxxxxxxxx=3D=3D-xxx-?=\n'
- ' =?utf-8?q?xx-xx=3E?=\n')
+ 'com/report=5Fabuse?=\n'
+ ' =?utf-8?q?=2Ephp=3Fmid=3Dxxx-xxx-xxxx'
+ 'xxxxxxxxxxxxxxxxxxxx=3D=3D-xxx-xx-xx?=\n'
+ ' =?utf-8?q?=3E?=\n')
if __name__ == '__main__':
diff --git a/Lib/test/test_email/test_policy.py b/Lib/test/test_email/test_policy.py
index 8fecb8a5fcd5..c2c437e6ac26 100644
--- a/Lib/test/test_email/test_policy.py
+++ b/Lib/test/test_email/test_policy.py
@@ -237,6 +237,14 @@ def test_adding_default_policies_preserves_default_factory(self):
email.policy.EmailPolicy.header_factory)
self.assertEqual(newpolicy.__dict__, {'raise_on_defect': True})
+ def test_non_ascii_chars_do_not_cause_inf_loop(self):
+ policy = email.policy.default.clone(max_line_length=20)
+ actual = policy.fold('Subject', 'ą' * 12)
+ self.assertEqual(
+ actual,
+ 'Subject: \n' +
+ 12 * ' =?utf-8?q?=C4=85?=\n')
+
# XXX: Need subclassing tests.
# For adding subclassed objects, make sure the usual rules apply (subclass
# wins), but that the order still works (right overrides left).
diff --git a/Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.wpNNBD.rst b/Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.wpNNBD.rst
new file mode 100644
index 000000000000..84d16f5a56ae
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2019-02-24-18-48-16.bpo-33529.wpNNBD.rst
@@ -0,0 +1,2 @@
+Prevent fold function used in email header encoding from entering infinite
+loop when there are too many non-ASCII characters in a header.
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/f29a5770c2448c5ffb9281357c17073fd5…
commit: f29a5770c2448c5ffb9281357c17073fd551d4fc
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Steve Dower <steve.dower(a)python.org>
date: 2019-06-17T16:32:05-07:00
summary:
Improve release build performance using new artifacts tasks (GH-14175)
(cherry picked from commit fe2ad927f457043cb9f3a1148ed737af05a2b1c4)
Co-authored-by: Steve Dower <…
[View More]steve.dower(a)python.org>
files:
M .azure-pipelines/windows-release/build-steps.yml
M .azure-pipelines/windows-release/layout-command.yml
M .azure-pipelines/windows-release/msi-steps.yml
M .azure-pipelines/windows-release/stage-build.yml
M .azure-pipelines/windows-release/stage-layout-embed.yml
M .azure-pipelines/windows-release/stage-layout-full.yml
M .azure-pipelines/windows-release/stage-layout-msix.yml
M .azure-pipelines/windows-release/stage-layout-nuget.yml
M .azure-pipelines/windows-release/stage-pack-msix.yml
M .azure-pipelines/windows-release/stage-pack-nuget.yml
M .azure-pipelines/windows-release/stage-sign.yml
M .azure-pipelines/windows-release/stage-test-msi.yml
diff --git a/.azure-pipelines/windows-release/build-steps.yml b/.azure-pipelines/windows-release/build-steps.yml
index 508d73b0865f..d4563cd0d722 100644
--- a/.azure-pipelines/windows-release/build-steps.yml
+++ b/.azure-pipelines/windows-release/build-steps.yml
@@ -53,19 +53,19 @@ steps:
env:
CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
-- task: PublishBuildArtifacts@1
+- task: PublishPipelineArtifact@0
displayName: 'Publish binaries'
condition: and(succeeded(), not(and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate'])))
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
- ArtifactName: bin_$(Name)
+ targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ artifactName: bin_$(Name)
-- task: PublishBuildArtifacts@1
+- task: PublishPipelineArtifact@0
displayName: 'Publish binaries for signing'
condition: and(succeeded(), and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate']))
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
- ArtifactName: unsigned_bin_$(Name)
+ targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ artifactName: unsigned_bin_$(Name)
- task: CopyFiles@2
displayName: 'Layout Artifact: symbols'
diff --git a/.azure-pipelines/windows-release/layout-command.yml b/.azure-pipelines/windows-release/layout-command.yml
index 3ec9b69ad712..2dcd6ed26ca3 100644
--- a/.azure-pipelines/windows-release/layout-command.yml
+++ b/.azure-pipelines/windows-release/layout-command.yml
@@ -2,19 +2,14 @@ steps:
- powershell: >
Write-Host (
'##vso[task.setvariable variable=LayoutCmd]&
- "{0}"
+ "{0}\bin\python.exe"
"{1}\PC\layout"
-vv
--source "{1}"
- --build "{2}"
- --temp "{3}"
- --include-cat "{2}\python.cat"
- --doc-build "{4}"'
- -f (
- "$(PYTHON)",
- "$(Build.SourcesDirectory)",
- (Split-Path -Parent "$(PYTHON)"),
- "$(Build.BinariesDirectory)\layout-temp",
- "$(Build.BinariesDirectory)\doc"
- ))
+ --build "{0}\bin"
+ --temp "{0}\layout-temp"
+ --include-cat "{0}\bin\python.cat"
+ --doc-build "{0}\doc"'
+ -f ("$(Build.BinariesDirectory)", "$(Build.SourcesDirectory)")
+ )
displayName: 'Set LayoutCmd'
diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml
index 153408271c71..c55fa534eaec 100644
--- a/.azure-pipelines/windows-release/msi-steps.yml
+++ b/.azure-pipelines/windows-release/msi-steps.yml
@@ -1,11 +1,11 @@
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: doc'
inputs:
artifactName: doc
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\doc
- task: CopyFiles@2
displayName: 'Merge documentation files'
@@ -15,63 +15,41 @@ steps:
contents: |
htmlhelp\*.chm
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_win32'
inputs:
artifactName: bin_win32
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\win32
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_win32_d'
inputs:
artifactName: bin_win32_d
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\win32
- - task: CopyFiles@2
- displayName: 'Merge win32 debug files'
- inputs:
- sourceFolder: $(Build.BinariesDirectory)\bin_win32_d
- targetFolder: $(Build.BinariesDirectory)\bin_win32
- contents: |
- **\*_d.*
-
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_amd64'
inputs:
artifactName: bin_amd64
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\amd64
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_amd64_d'
inputs:
artifactName: bin_amd64_d
- downloadPath: $(Build.BinariesDirectory)
-
- - task: CopyFiles@2
- displayName: 'Merge amd64 debug files'
- inputs:
- sourceFolder: $(Build.BinariesDirectory)\bin_amd64_d
- targetFolder: $(Build.BinariesDirectory)\bin_amd64
- contents: |
- **\*_d.*
+ targetPath: $(Build.BinariesDirectory)\amd64
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_win32'
inputs:
artifactName: tcltk_lib_win32
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib_win32
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_amd64'
inputs:
artifactName: tcltk_lib_amd64
- downloadPath: $(Build.BinariesDirectory)
-
- - script: |
- ren bin_win32 win32
- ren bin_amd64 amd64
- displayName: 'Correct artifact directory names'
- workingDirectory: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib_amd64
- script: |
call Tools\msi\get_externals.bat
@@ -139,8 +117,8 @@ steps:
*.cab
*.exe
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish MSI'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\msi'
- ArtifactName: msi
+ targetPath: '$(Build.ArtifactStagingDirectory)\msi'
+ artifactName: msi
diff --git a/.azure-pipelines/windows-release/stage-build.yml b/.azure-pipelines/windows-release/stage-build.yml
index a5093a04f087..ce7b38176935 100644
--- a/.azure-pipelines/windows-release/stage-build.yml
+++ b/.azure-pipelines/windows-release/stage-build.yml
@@ -33,11 +33,11 @@ jobs:
html\**\*
htmlhelp\*.chm
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: doc'
inputs:
- PathtoPublish: $(Build.ArtifactStagingDirectory)\Doc
- ArtifactName: doc
+ targetPath: $(Build.ArtifactStagingDirectory)\Doc
+ artifactName: doc
- job: Build_Python
displayName: Python build
@@ -147,14 +147,14 @@ jobs:
platform: x64
msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_amd64"
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: tcltk_lib_win32'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_win32'
- ArtifactName: tcltk_lib_win32
+ targetPath: '$(Build.ArtifactStagingDirectory)\tcl_win32'
+ artifactName: tcltk_lib_win32
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: tcltk_lib_amd64'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
- ArtifactName: tcltk_lib_amd64
+ targetPath: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
+ artifactName: tcltk_lib_amd64
diff --git a/.azure-pipelines/windows-release/stage-layout-embed.yml b/.azure-pipelines/windows-release/stage-layout-embed.yml
index e2689dbb603d..09857ff676b3 100644
--- a/.azure-pipelines/windows-release/stage-layout-embed.yml
+++ b/.azure-pipelines/windows-release/stage-layout-embed.yml
@@ -13,21 +13,21 @@ jobs:
matrix:
win32:
Name: win32
- Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ Python: $(Build.BinariesDirectory)\bin\python.exe
PYTHONHOME: $(Build.SourcesDirectory)
amd64:
Name: amd64
- Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ Python: $(Build.BinariesDirectory)\bin\python.exe
PYTHONHOME: $(Build.SourcesDirectory)
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- template: ./layout-command.yml
@@ -43,11 +43,11 @@ jobs:
--preset-embed
displayName: 'Generate embeddable layout'
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_embed_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
- ArtifactName: layout_embed_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\layout'
+ artifactName: layout_embed_$(Name)
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: embed'
diff --git a/.azure-pipelines/windows-release/stage-layout-full.yml b/.azure-pipelines/windows-release/stage-layout-full.yml
index 3593cf0a3f69..8b412dffcc82 100644
--- a/.azure-pipelines/windows-release/stage-layout-full.yml
+++ b/.azure-pipelines/windows-release/stage-layout-full.yml
@@ -23,29 +23,29 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)_d'
inputs:
artifactName: bin_$(Name)_d
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: doc'
inputs:
artifactName: doc
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\doc
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_$(Name)'
inputs:
artifactName: tcltk_lib_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib
- template: ./layout-command.yml
@@ -53,10 +53,10 @@ jobs:
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
displayName: 'Generate full layout'
env:
- TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_full_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
- ArtifactName: layout_full_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\layout'
+ artifactName: layout_full_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-msix.yml b/.azure-pipelines/windows-release/stage-layout-msix.yml
index 1a1e0a2fd685..7d66e8f9821c 100644
--- a/.azure-pipelines/windows-release/stage-layout-msix.yml
+++ b/.azure-pipelines/windows-release/stage-layout-msix.yml
@@ -22,23 +22,23 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)_d'
inputs:
artifactName: bin_$(Name)_d
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_$(Name)'
inputs:
artifactName: tcltk_lib_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib
- template: ./layout-command.yml
@@ -47,20 +47,20 @@ jobs:
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
displayName: 'Generate store APPX layout'
env:
- TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_appxstore_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx-store'
- ArtifactName: layout_appxstore_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\appx-store'
+ artifactName: layout_appxstore_$(Name)
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: cert'
condition: and(succeeded(), variables['SigningCertificate'])
inputs:
artifactName: cert
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\cert
- powershell: |
$info = (gc "$(Build.BinariesDirectory)\cert\certinfo.json" | ConvertFrom-JSON)
@@ -75,12 +75,10 @@ jobs:
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
displayName: 'Generate sideloading APPX layout'
env:
- TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
- APPX_DATA_PUBLISHER: $(APPX_DATA_PUBLISHER)
- APPX_DATA_SHA256: $(APPX_DATA_SHA256)
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_appx_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx'
- ArtifactName: layout_appx_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\appx'
+ artifactName: layout_appx_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-nuget.yml b/.azure-pipelines/windows-release/stage-layout-nuget.yml
index ca4213d9e5c2..01512975e9db 100644
--- a/.azure-pipelines/windows-release/stage-layout-nuget.yml
+++ b/.azure-pipelines/windows-release/stage-layout-nuget.yml
@@ -23,11 +23,11 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- template: ./layout-command.yml
@@ -37,8 +37,8 @@ jobs:
env:
TCL_LIBRARY: $(Build.BinariesDirectory)\bin_$(Name)\tcl\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_nuget_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\nuget'
- ArtifactName: layout_nuget_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\nuget'
+ artifactName: layout_nuget_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-pack-msix.yml b/.azure-pipelines/windows-release/stage-pack-msix.yml
index 6f1846e581ef..eebc63fb8809 100644
--- a/.azure-pipelines/windows-release/stage-pack-msix.yml
+++ b/.azure-pipelines/windows-release/stage-pack-msix.yml
@@ -24,11 +24,11 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: layout_$(Artifact)_$(Name)'
inputs:
artifactName: layout_$(Artifact)_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\layout
- task: DownloadBuildArtifacts@0
displayName: 'Download artifact: symbols'
@@ -46,7 +46,7 @@ jobs:
displayName: 'Extract version numbers'
- powershell: |
- ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout_$(Artifact)_$(Name)" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
+ ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
displayName: 'Build msix'
- powershell: |
diff --git a/.azure-pipelines/windows-release/stage-pack-nuget.yml b/.azure-pipelines/windows-release/stage-pack-nuget.yml
index 5aa394fa48a1..f59bbe9b39a8 100644
--- a/.azure-pipelines/windows-release/stage-pack-nuget.yml
+++ b/.azure-pipelines/windows-release/stage-pack-nuget.yml
@@ -19,11 +19,11 @@ jobs:
steps:
- checkout: none
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: layout_nuget_$(Name)'
inputs:
artifactName: layout_nuget_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\layout
- task: NugetToolInstaller@0
displayName: 'Install Nuget'
@@ -31,7 +31,7 @@ jobs:
versionSpec: '>=5.0'
- powershell: |
- nuget pack "$(Build.BinariesDirectory)\layout_nuget_$(Name)\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
+ nuget pack "$(Build.BinariesDirectory)\layout\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
displayName: 'Create nuget package'
- task: PublishBuildArtifacts@1
diff --git a/.azure-pipelines/windows-release/stage-sign.yml b/.azure-pipelines/windows-release/stage-sign.yml
index 3d6ca9457f1c..d6984a0a137c 100644
--- a/.azure-pipelines/windows-release/stage-sign.yml
+++ b/.azure-pipelines/windows-release/stage-sign.yml
@@ -24,17 +24,17 @@ jobs:
Write-Host "##vso[build.addbuildtag]signed"
displayName: 'Add build tags'
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: unsigned_bin_$(Name)'
inputs:
artifactName: unsigned_bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- powershell: |
$files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
signtool sign /a /n "$(SigningCertificate)" /fd sha256 /d "$(SigningDescription)" $files
displayName: 'Sign binaries'
- workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+ workingDirectory: $(Build.BinariesDirectory)\bin
- powershell: |
$files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
@@ -51,14 +51,14 @@ jobs:
Write-Host "##vso[task.logissue type=error]Failed to timestamp files"
}
displayName: 'Timestamp binaries'
- workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+ workingDirectory: $(Build.BinariesDirectory)\bin
continueOnError: true
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: bin_$(Name)'
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\unsigned_bin_$(Name)'
- ArtifactName: bin_$(Name)
+ targetPath: '$(Build.BinariesDirectory)\bin'
+ artifactName: bin_$(Name)
- job: Dump_CertInfo
@@ -91,11 +91,11 @@ jobs:
$info | ConvertTo-JSON -Compress | Out-File -Encoding utf8 "$d\certinfo.json"
displayName: "Extract certificate info"
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: cert'
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\cert'
- ArtifactName: cert
+ targetPath: '$(Build.BinariesDirectory)\cert'
+ artifactName: cert
- job: Mark_Unsigned
diff --git a/.azure-pipelines/windows-release/stage-test-msi.yml b/.azure-pipelines/windows-release/stage-test-msi.yml
index 10039295a184..27b0c96987a7 100644
--- a/.azure-pipelines/windows-release/stage-test-msi.yml
+++ b/.azure-pipelines/windows-release/stage-test-msi.yml
@@ -30,11 +30,11 @@ jobs:
steps:
- checkout: none
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: msi'
inputs:
artifactName: msi
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\msi
- powershell: |
$p = (gci -r *.exe | ?{ $_.Name -match '$(ExeMatch)' } | select -First 1)
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/8cb8d5de4bcc587b35d1b2f4166dad98c2…
commit: 8cb8d5de4bcc587b35d1b2f4166dad98c202805c
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T15:42:30-07:00
summary:
bpo-37189: Export old PyRun_XXX() functions (GH-14142)
Many PyRun_XXX() functions like PyRun_String() were no longer
exported in libpython38.dll by mistake. Export them again to fix …
[View More]the
ABI compatibiliy.
(cherry picked from commit 343ed0ffe0d5ddd4f17c31e14a656a04ac7dfc19)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
A Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst
M Include/pythonrun.h
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 196355cb8f40..46091e092163 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -9,7 +9,6 @@ extern "C" {
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
-PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
PyAPI_FUNC(int) PyRun_AnyFileExFlags(
FILE *fp,
const char *filename, /* decoded from the filesystem encoding */
@@ -122,7 +121,7 @@ PyAPI_FUNC(struct symtable *) Py_SymtableString(
PyAPI_FUNC(const char *) _Py_SourceAsString(
PyObject *cmd,
const char *funcname,
- const char *what,
+ const char *what,
PyCompilerFlags *cf,
PyObject **cmd_copy);
@@ -143,6 +142,23 @@ PyAPI_FUNC(void) PyErr_PrintEx(int);
PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *);
#ifndef Py_LIMITED_API
+/* A function flavor is also exported by libpython. It is required when
+ libpython is accessed directly rather than using header files which defines
+ macros below. On Windows, for example, PyAPI_FUNC() uses dllexport to
+ export functions in pythonXX.dll. */
+PyAPI_FUNC(PyObject *) PyRun_String(const char *str, int s, PyObject *g, PyObject *l);
+PyAPI_FUNC(int) PyRun_AnyFile(FILE *fp, const char *name);
+PyAPI_FUNC(int) PyRun_AnyFileEx(FILE *fp, const char *name, int closeit);
+PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
+PyAPI_FUNC(int) PyRun_SimpleString(const char *s);
+PyAPI_FUNC(int) PyRun_SimpleFile(FILE *f, const char *p);
+PyAPI_FUNC(int) PyRun_SimpleFileEx(FILE *f, const char *p, int c);
+PyAPI_FUNC(int) PyRun_InteractiveOne(FILE *f, const char *p);
+PyAPI_FUNC(int) PyRun_InteractiveLoop(FILE *f, const char *p);
+PyAPI_FUNC(PyObject *) PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l);
+PyAPI_FUNC(PyObject *) PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c);
+PyAPI_FUNC(PyObject *) PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, PyCompilerFlags *flags);
+
/* Use macros for a bunch of old variants */
#define PyRun_String(str, s, g, l) PyRun_StringFlags(str, s, g, l, NULL)
#define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags(fp, name, 0, NULL)
diff --git a/Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst b/Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst
new file mode 100644
index 000000000000..f11f2746e5a0
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst
@@ -0,0 +1,3 @@
+Many ``PyRun_XXX()`` functions like :c:func:`PyRun_String` were no longer
+exported in ``libpython38.dll`` by mistake. Export them again to fix the ABI
+compatibiliy.
[View Less]
1
0

Fix test_embed.test_pre_initialization_sys_options() env vars (GH-14172)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/69610f86d3754839e7f476c46995a92e1c…
commit: 69610f86d3754839e7f476c46995a92e1cbc7ed2
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T15:31:43-07:00
summary:
Fix test_embed.test_pre_initialization_sys_options() env vars (GH-14172)
test_pre_initialization_sys_options() of test_embed now removes
PYTHON* environment variables like …
[View More]PYTHONWARNINGS.
(cherry picked from commit dbdc991a62bc2b3393d287e90292e3603f47d98a)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
M Lib/test/test_embed.py
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index a39ef2babbdb..1bc8d3aaee02 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -26,6 +26,15 @@
API_ISOLATED = 3
+def remove_python_envvars():
+ env = dict(os.environ)
+ # Remove PYTHON* environment variables to get deterministic environment
+ for key in list(env):
+ if key.startswith('PYTHON'):
+ del env[key]
+ return env
+
+
class EmbeddingTestsMixin:
def setUp(self):
here = os.path.abspath(__file__)
@@ -232,7 +241,8 @@ def test_pre_initialization_sys_options(self):
Checks that sys.warnoptions and sys._xoptions can be set before the
runtime is initialized (otherwise they won't be effective).
"""
- env = dict(os.environ, PYTHONPATH=os.pathsep.join(sys.path))
+ env = remove_python_envvars()
+ env['PYTHONPATH'] = os.pathsep.join(sys.path)
out, err = self.run_embedded_interpreter(
"test_pre_initialization_sys_options", env=env)
expected_output = (
@@ -591,11 +601,7 @@ def check_global_config(self, configs):
def check_all_configs(self, testname, expected_config=None,
expected_preconfig=None, add_path=None, stderr=None,
*, api):
- env = dict(os.environ)
- # Remove PYTHON* environment variables to get deterministic environment
- for key in list(env):
- if key.startswith('PYTHON'):
- del env[key]
+ env = remove_python_envvars()
if api == API_ISOLATED:
default_preconfig = self.PRE_CONFIG_ISOLATED
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/fe2ad927f457043cb9f3a1148ed737af05…
commit: fe2ad927f457043cb9f3a1148ed737af05a2b1c4
branch: master
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T15:27:36-07:00
summary:
Improve release build performance using new artifacts tasks (GH-14175)
files:
M .azure-pipelines/windows-release/build-steps.yml
M .azure-pipelines/windows-release/layout-command.yml
M .azure-pipelines/windows-…
[View More]release/msi-steps.yml
M .azure-pipelines/windows-release/stage-build.yml
M .azure-pipelines/windows-release/stage-layout-embed.yml
M .azure-pipelines/windows-release/stage-layout-full.yml
M .azure-pipelines/windows-release/stage-layout-msix.yml
M .azure-pipelines/windows-release/stage-layout-nuget.yml
M .azure-pipelines/windows-release/stage-pack-msix.yml
M .azure-pipelines/windows-release/stage-pack-nuget.yml
M .azure-pipelines/windows-release/stage-sign.yml
M .azure-pipelines/windows-release/stage-test-msi.yml
diff --git a/.azure-pipelines/windows-release/build-steps.yml b/.azure-pipelines/windows-release/build-steps.yml
index 508d73b0865f..d4563cd0d722 100644
--- a/.azure-pipelines/windows-release/build-steps.yml
+++ b/.azure-pipelines/windows-release/build-steps.yml
@@ -53,19 +53,19 @@ steps:
env:
CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
-- task: PublishBuildArtifacts@1
+- task: PublishPipelineArtifact@0
displayName: 'Publish binaries'
condition: and(succeeded(), not(and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate'])))
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
- ArtifactName: bin_$(Name)
+ targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ artifactName: bin_$(Name)
-- task: PublishBuildArtifacts@1
+- task: PublishPipelineArtifact@0
displayName: 'Publish binaries for signing'
condition: and(succeeded(), and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate']))
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
- ArtifactName: unsigned_bin_$(Name)
+ targetPath: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ artifactName: unsigned_bin_$(Name)
- task: CopyFiles@2
displayName: 'Layout Artifact: symbols'
diff --git a/.azure-pipelines/windows-release/layout-command.yml b/.azure-pipelines/windows-release/layout-command.yml
index 3ec9b69ad712..2dcd6ed26ca3 100644
--- a/.azure-pipelines/windows-release/layout-command.yml
+++ b/.azure-pipelines/windows-release/layout-command.yml
@@ -2,19 +2,14 @@ steps:
- powershell: >
Write-Host (
'##vso[task.setvariable variable=LayoutCmd]&
- "{0}"
+ "{0}\bin\python.exe"
"{1}\PC\layout"
-vv
--source "{1}"
- --build "{2}"
- --temp "{3}"
- --include-cat "{2}\python.cat"
- --doc-build "{4}"'
- -f (
- "$(PYTHON)",
- "$(Build.SourcesDirectory)",
- (Split-Path -Parent "$(PYTHON)"),
- "$(Build.BinariesDirectory)\layout-temp",
- "$(Build.BinariesDirectory)\doc"
- ))
+ --build "{0}\bin"
+ --temp "{0}\layout-temp"
+ --include-cat "{0}\bin\python.cat"
+ --doc-build "{0}\doc"'
+ -f ("$(Build.BinariesDirectory)", "$(Build.SourcesDirectory)")
+ )
displayName: 'Set LayoutCmd'
diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml
index 153408271c71..c55fa534eaec 100644
--- a/.azure-pipelines/windows-release/msi-steps.yml
+++ b/.azure-pipelines/windows-release/msi-steps.yml
@@ -1,11 +1,11 @@
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: doc'
inputs:
artifactName: doc
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\doc
- task: CopyFiles@2
displayName: 'Merge documentation files'
@@ -15,63 +15,41 @@ steps:
contents: |
htmlhelp\*.chm
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_win32'
inputs:
artifactName: bin_win32
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\win32
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_win32_d'
inputs:
artifactName: bin_win32_d
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\win32
- - task: CopyFiles@2
- displayName: 'Merge win32 debug files'
- inputs:
- sourceFolder: $(Build.BinariesDirectory)\bin_win32_d
- targetFolder: $(Build.BinariesDirectory)\bin_win32
- contents: |
- **\*_d.*
-
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_amd64'
inputs:
artifactName: bin_amd64
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\amd64
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_amd64_d'
inputs:
artifactName: bin_amd64_d
- downloadPath: $(Build.BinariesDirectory)
-
- - task: CopyFiles@2
- displayName: 'Merge amd64 debug files'
- inputs:
- sourceFolder: $(Build.BinariesDirectory)\bin_amd64_d
- targetFolder: $(Build.BinariesDirectory)\bin_amd64
- contents: |
- **\*_d.*
+ targetPath: $(Build.BinariesDirectory)\amd64
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_win32'
inputs:
artifactName: tcltk_lib_win32
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib_win32
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_amd64'
inputs:
artifactName: tcltk_lib_amd64
- downloadPath: $(Build.BinariesDirectory)
-
- - script: |
- ren bin_win32 win32
- ren bin_amd64 amd64
- displayName: 'Correct artifact directory names'
- workingDirectory: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib_amd64
- script: |
call Tools\msi\get_externals.bat
@@ -139,8 +117,8 @@ steps:
*.cab
*.exe
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish MSI'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\msi'
- ArtifactName: msi
+ targetPath: '$(Build.ArtifactStagingDirectory)\msi'
+ artifactName: msi
diff --git a/.azure-pipelines/windows-release/stage-build.yml b/.azure-pipelines/windows-release/stage-build.yml
index a5093a04f087..ce7b38176935 100644
--- a/.azure-pipelines/windows-release/stage-build.yml
+++ b/.azure-pipelines/windows-release/stage-build.yml
@@ -33,11 +33,11 @@ jobs:
html\**\*
htmlhelp\*.chm
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: doc'
inputs:
- PathtoPublish: $(Build.ArtifactStagingDirectory)\Doc
- ArtifactName: doc
+ targetPath: $(Build.ArtifactStagingDirectory)\Doc
+ artifactName: doc
- job: Build_Python
displayName: Python build
@@ -147,14 +147,14 @@ jobs:
platform: x64
msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_amd64"
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: tcltk_lib_win32'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_win32'
- ArtifactName: tcltk_lib_win32
+ targetPath: '$(Build.ArtifactStagingDirectory)\tcl_win32'
+ artifactName: tcltk_lib_win32
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: tcltk_lib_amd64'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
- ArtifactName: tcltk_lib_amd64
+ targetPath: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
+ artifactName: tcltk_lib_amd64
diff --git a/.azure-pipelines/windows-release/stage-layout-embed.yml b/.azure-pipelines/windows-release/stage-layout-embed.yml
index e2689dbb603d..09857ff676b3 100644
--- a/.azure-pipelines/windows-release/stage-layout-embed.yml
+++ b/.azure-pipelines/windows-release/stage-layout-embed.yml
@@ -13,21 +13,21 @@ jobs:
matrix:
win32:
Name: win32
- Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ Python: $(Build.BinariesDirectory)\bin\python.exe
PYTHONHOME: $(Build.SourcesDirectory)
amd64:
Name: amd64
- Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ Python: $(Build.BinariesDirectory)\bin\python.exe
PYTHONHOME: $(Build.SourcesDirectory)
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- template: ./layout-command.yml
@@ -43,11 +43,11 @@ jobs:
--preset-embed
displayName: 'Generate embeddable layout'
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_embed_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
- ArtifactName: layout_embed_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\layout'
+ artifactName: layout_embed_$(Name)
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact: embed'
diff --git a/.azure-pipelines/windows-release/stage-layout-full.yml b/.azure-pipelines/windows-release/stage-layout-full.yml
index 3593cf0a3f69..8b412dffcc82 100644
--- a/.azure-pipelines/windows-release/stage-layout-full.yml
+++ b/.azure-pipelines/windows-release/stage-layout-full.yml
@@ -23,29 +23,29 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)_d'
inputs:
artifactName: bin_$(Name)_d
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: doc'
inputs:
artifactName: doc
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\doc
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_$(Name)'
inputs:
artifactName: tcltk_lib_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib
- template: ./layout-command.yml
@@ -53,10 +53,10 @@ jobs:
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
displayName: 'Generate full layout'
env:
- TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_full_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
- ArtifactName: layout_full_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\layout'
+ artifactName: layout_full_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-msix.yml b/.azure-pipelines/windows-release/stage-layout-msix.yml
index 1a1e0a2fd685..7d66e8f9821c 100644
--- a/.azure-pipelines/windows-release/stage-layout-msix.yml
+++ b/.azure-pipelines/windows-release/stage-layout-msix.yml
@@ -22,23 +22,23 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)_d'
inputs:
artifactName: bin_$(Name)_d
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: tcltk_lib_$(Name)'
inputs:
artifactName: tcltk_lib_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\tcltk_lib
- template: ./layout-command.yml
@@ -47,20 +47,20 @@ jobs:
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
displayName: 'Generate store APPX layout'
env:
- TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_appxstore_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx-store'
- ArtifactName: layout_appxstore_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\appx-store'
+ artifactName: layout_appxstore_$(Name)
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: cert'
condition: and(succeeded(), variables['SigningCertificate'])
inputs:
artifactName: cert
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\cert
- powershell: |
$info = (gc "$(Build.BinariesDirectory)\cert\certinfo.json" | ConvertFrom-JSON)
@@ -75,12 +75,10 @@ jobs:
$(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
displayName: 'Generate sideloading APPX layout'
env:
- TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
- APPX_DATA_PUBLISHER: $(APPX_DATA_PUBLISHER)
- APPX_DATA_SHA256: $(APPX_DATA_SHA256)
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_appx_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx'
- ArtifactName: layout_appx_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\appx'
+ artifactName: layout_appx_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-nuget.yml b/.azure-pipelines/windows-release/stage-layout-nuget.yml
index ca4213d9e5c2..01512975e9db 100644
--- a/.azure-pipelines/windows-release/stage-layout-nuget.yml
+++ b/.azure-pipelines/windows-release/stage-layout-nuget.yml
@@ -23,11 +23,11 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: bin_$(Name)'
inputs:
artifactName: bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- template: ./layout-command.yml
@@ -37,8 +37,8 @@ jobs:
env:
TCL_LIBRARY: $(Build.BinariesDirectory)\bin_$(Name)\tcl\tcl8
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish Artifact: layout_nuget_$(Name)'
inputs:
- PathtoPublish: '$(Build.ArtifactStagingDirectory)\nuget'
- ArtifactName: layout_nuget_$(Name)
+ targetPath: '$(Build.ArtifactStagingDirectory)\nuget'
+ artifactName: layout_nuget_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-pack-msix.yml b/.azure-pipelines/windows-release/stage-pack-msix.yml
index 6f1846e581ef..eebc63fb8809 100644
--- a/.azure-pipelines/windows-release/stage-pack-msix.yml
+++ b/.azure-pipelines/windows-release/stage-pack-msix.yml
@@ -24,11 +24,11 @@ jobs:
steps:
- template: ./checkout.yml
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: layout_$(Artifact)_$(Name)'
inputs:
artifactName: layout_$(Artifact)_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\layout
- task: DownloadBuildArtifacts@0
displayName: 'Download artifact: symbols'
@@ -46,7 +46,7 @@ jobs:
displayName: 'Extract version numbers'
- powershell: |
- ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout_$(Artifact)_$(Name)" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
+ ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
displayName: 'Build msix'
- powershell: |
diff --git a/.azure-pipelines/windows-release/stage-pack-nuget.yml b/.azure-pipelines/windows-release/stage-pack-nuget.yml
index 5aa394fa48a1..f59bbe9b39a8 100644
--- a/.azure-pipelines/windows-release/stage-pack-nuget.yml
+++ b/.azure-pipelines/windows-release/stage-pack-nuget.yml
@@ -19,11 +19,11 @@ jobs:
steps:
- checkout: none
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: layout_nuget_$(Name)'
inputs:
artifactName: layout_nuget_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\layout
- task: NugetToolInstaller@0
displayName: 'Install Nuget'
@@ -31,7 +31,7 @@ jobs:
versionSpec: '>=5.0'
- powershell: |
- nuget pack "$(Build.BinariesDirectory)\layout_nuget_$(Name)\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
+ nuget pack "$(Build.BinariesDirectory)\layout\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
displayName: 'Create nuget package'
- task: PublishBuildArtifacts@1
diff --git a/.azure-pipelines/windows-release/stage-sign.yml b/.azure-pipelines/windows-release/stage-sign.yml
index 3d6ca9457f1c..d6984a0a137c 100644
--- a/.azure-pipelines/windows-release/stage-sign.yml
+++ b/.azure-pipelines/windows-release/stage-sign.yml
@@ -24,17 +24,17 @@ jobs:
Write-Host "##vso[build.addbuildtag]signed"
displayName: 'Add build tags'
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: unsigned_bin_$(Name)'
inputs:
artifactName: unsigned_bin_$(Name)
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\bin
- powershell: |
$files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
signtool sign /a /n "$(SigningCertificate)" /fd sha256 /d "$(SigningDescription)" $files
displayName: 'Sign binaries'
- workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+ workingDirectory: $(Build.BinariesDirectory)\bin
- powershell: |
$files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
@@ -51,14 +51,14 @@ jobs:
Write-Host "##vso[task.logissue type=error]Failed to timestamp files"
}
displayName: 'Timestamp binaries'
- workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+ workingDirectory: $(Build.BinariesDirectory)\bin
continueOnError: true
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: bin_$(Name)'
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\unsigned_bin_$(Name)'
- ArtifactName: bin_$(Name)
+ targetPath: '$(Build.BinariesDirectory)\bin'
+ artifactName: bin_$(Name)
- job: Dump_CertInfo
@@ -91,11 +91,11 @@ jobs:
$info | ConvertTo-JSON -Compress | Out-File -Encoding utf8 "$d\certinfo.json"
displayName: "Extract certificate info"
- - task: PublishBuildArtifacts@1
+ - task: PublishPipelineArtifact@0
displayName: 'Publish artifact: cert'
inputs:
- PathtoPublish: '$(Build.BinariesDirectory)\cert'
- ArtifactName: cert
+ targetPath: '$(Build.BinariesDirectory)\cert'
+ artifactName: cert
- job: Mark_Unsigned
diff --git a/.azure-pipelines/windows-release/stage-test-msi.yml b/.azure-pipelines/windows-release/stage-test-msi.yml
index 10039295a184..27b0c96987a7 100644
--- a/.azure-pipelines/windows-release/stage-test-msi.yml
+++ b/.azure-pipelines/windows-release/stage-test-msi.yml
@@ -30,11 +30,11 @@ jobs:
steps:
- checkout: none
- - task: DownloadBuildArtifacts@0
+ - task: DownloadPipelineArtifact@1
displayName: 'Download artifact: msi'
inputs:
artifactName: msi
- downloadPath: $(Build.BinariesDirectory)
+ targetPath: $(Build.BinariesDirectory)\msi
- powershell: |
$p = (gci -r *.exe | ?{ $_.Name -match '$(ExeMatch)' } | select -First 1)
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/14bac0088271d0a5c428e3468ef94fe7c7…
commit: 14bac0088271d0a5c428e3468ef94fe7c73e93f7
branch: 3.7
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T15:26:43-07:00
summary:
bpo-34631: Updated OpenSSL to 1.1.1c in Windows installer (GH-14163)
files:
A Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
M PCbuild/get_externals.bat
M PCbuild/python.props
M PCbuild/readme.txt
…
[View More]diff --git a/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst b/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
new file mode 100644
index 000000000000..90aa30192fc8
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.1.1c in Windows installer
diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat
index 27722bb9c4d6..3f70653b2ec4 100644
--- a/PCbuild/get_externals.bat
+++ b/PCbuild/get_externals.bat
@@ -49,7 +49,7 @@ echo.Fetching external libraries...
set libraries=
set libraries=%libraries% bzip2-1.0.6
-if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1b
+if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1c
set libraries=%libraries% sqlite-3.21.0.0
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.9.0
@@ -72,7 +72,7 @@ for %%e in (%libraries%) do (
echo.Fetching external binaries...
set binaries=
-if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1b
+if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1c
if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.9.0
if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 58877ee06698..2dd01fda8fd5 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -49,8 +49,8 @@
<sqlite3Dir>$(ExternalsDir)sqlite-3.21.0.0\</sqlite3Dir>
<bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir>
<lzmaDir>$(ExternalsDir)xz-5.2.2\</lzmaDir>
- <opensslDir>$(ExternalsDir)openssl-1.1.1b\</opensslDir>
- <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1b\$(ArchName)\</opensslOutDir>
+ <opensslDir>$(ExternalsDir)openssl-1.1.1c\</opensslDir>
+ <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1c\$(ArchName)\</opensslOutDir>
<opensslIncludeDir>$(opensslOutDir)include</opensslIncludeDir>
<nasmDir>$(ExternalsDir)\nasm-2.11.06\</nasmDir>
<zlibDir>$(ExternalsDir)\zlib-1.2.11\</zlibDir>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index c44722b98887..8f759361fd7a 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -165,7 +165,7 @@ _lzma
Homepage:
http://tukaani.org/xz/
_ssl
- Python wrapper for version 1.1.1b of the OpenSSL secure sockets
+ Python wrapper for version 1.1.1c of the OpenSSL secure sockets
library, which is downloaded from our binaries repository at
https://github.com/python/cpython-bin-deps.
[View Less]
1
0
https://github.com/python/cpython/commit/343ed0ffe0d5ddd4f17c31e14a656a04ac…
commit: 343ed0ffe0d5ddd4f17c31e14a656a04ac7dfc19
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T00:15:13+02:00
summary:
bpo-37189: Export old PyRun_XXX() functions (#14142)
Many PyRun_XXX() functions like PyRun_String() were no longer
exported in libpython38.dll by mistake. Export them again to fix the
ABI compatibiliy.
files:
A …
[View More]Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst
M Include/pythonrun.h
diff --git a/Include/pythonrun.h b/Include/pythonrun.h
index 196355cb8f40..46091e092163 100644
--- a/Include/pythonrun.h
+++ b/Include/pythonrun.h
@@ -9,7 +9,6 @@ extern "C" {
#ifndef Py_LIMITED_API
PyAPI_FUNC(int) PyRun_SimpleStringFlags(const char *, PyCompilerFlags *);
-PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
PyAPI_FUNC(int) PyRun_AnyFileExFlags(
FILE *fp,
const char *filename, /* decoded from the filesystem encoding */
@@ -122,7 +121,7 @@ PyAPI_FUNC(struct symtable *) Py_SymtableString(
PyAPI_FUNC(const char *) _Py_SourceAsString(
PyObject *cmd,
const char *funcname,
- const char *what,
+ const char *what,
PyCompilerFlags *cf,
PyObject **cmd_copy);
@@ -143,6 +142,23 @@ PyAPI_FUNC(void) PyErr_PrintEx(int);
PyAPI_FUNC(void) PyErr_Display(PyObject *, PyObject *, PyObject *);
#ifndef Py_LIMITED_API
+/* A function flavor is also exported by libpython. It is required when
+ libpython is accessed directly rather than using header files which defines
+ macros below. On Windows, for example, PyAPI_FUNC() uses dllexport to
+ export functions in pythonXX.dll. */
+PyAPI_FUNC(PyObject *) PyRun_String(const char *str, int s, PyObject *g, PyObject *l);
+PyAPI_FUNC(int) PyRun_AnyFile(FILE *fp, const char *name);
+PyAPI_FUNC(int) PyRun_AnyFileEx(FILE *fp, const char *name, int closeit);
+PyAPI_FUNC(int) PyRun_AnyFileFlags(FILE *, const char *, PyCompilerFlags *);
+PyAPI_FUNC(int) PyRun_SimpleString(const char *s);
+PyAPI_FUNC(int) PyRun_SimpleFile(FILE *f, const char *p);
+PyAPI_FUNC(int) PyRun_SimpleFileEx(FILE *f, const char *p, int c);
+PyAPI_FUNC(int) PyRun_InteractiveOne(FILE *f, const char *p);
+PyAPI_FUNC(int) PyRun_InteractiveLoop(FILE *f, const char *p);
+PyAPI_FUNC(PyObject *) PyRun_File(FILE *fp, const char *p, int s, PyObject *g, PyObject *l);
+PyAPI_FUNC(PyObject *) PyRun_FileEx(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, int c);
+PyAPI_FUNC(PyObject *) PyRun_FileFlags(FILE *fp, const char *p, int s, PyObject *g, PyObject *l, PyCompilerFlags *flags);
+
/* Use macros for a bunch of old variants */
#define PyRun_String(str, s, g, l) PyRun_StringFlags(str, s, g, l, NULL)
#define PyRun_AnyFile(fp, name) PyRun_AnyFileExFlags(fp, name, 0, NULL)
diff --git a/Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst b/Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst
new file mode 100644
index 000000000000..f11f2746e5a0
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2019-06-17-09-40-59.bpo-37189.j5ebdT.rst
@@ -0,0 +1,3 @@
+Many ``PyRun_XXX()`` functions like :c:func:`PyRun_String` were no longer
+exported in ``libpython38.dll`` by mistake. Export them again to fix the ABI
+compatibiliy.
[View Less]
1
0

Fix test_embed.test_pre_initialization_sys_options() env vars (GH-14172)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/dbdc991a62bc2b3393d287e90292e3603f…
commit: dbdc991a62bc2b3393d287e90292e3603f47d98a
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T00:11:00+02:00
summary:
Fix test_embed.test_pre_initialization_sys_options() env vars (GH-14172)
test_pre_initialization_sys_options() of test_embed now removes
PYTHON* environment variables like PYTHONWARNINGS.
files:
M Lib/test/…
[View More]test_embed.py
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index a39ef2babbdb..1bc8d3aaee02 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -26,6 +26,15 @@
API_ISOLATED = 3
+def remove_python_envvars():
+ env = dict(os.environ)
+ # Remove PYTHON* environment variables to get deterministic environment
+ for key in list(env):
+ if key.startswith('PYTHON'):
+ del env[key]
+ return env
+
+
class EmbeddingTestsMixin:
def setUp(self):
here = os.path.abspath(__file__)
@@ -232,7 +241,8 @@ def test_pre_initialization_sys_options(self):
Checks that sys.warnoptions and sys._xoptions can be set before the
runtime is initialized (otherwise they won't be effective).
"""
- env = dict(os.environ, PYTHONPATH=os.pathsep.join(sys.path))
+ env = remove_python_envvars()
+ env['PYTHONPATH'] = os.pathsep.join(sys.path)
out, err = self.run_embedded_interpreter(
"test_pre_initialization_sys_options", env=env)
expected_output = (
@@ -591,11 +601,7 @@ def check_global_config(self, configs):
def check_all_configs(self, testname, expected_config=None,
expected_preconfig=None, add_path=None, stderr=None,
*, api):
- env = dict(os.environ)
- # Remove PYTHON* environment variables to get deterministic environment
- for key in list(env):
- if key.startswith('PYTHON'):
- del env[key]
+ env = remove_python_envvars()
if api == API_ISOLATED:
default_preconfig = self.PRE_CONFIG_ISOLATED
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/ac7b1a3f32cc81520e8962352294006d65…
commit: ac7b1a3f32cc81520e8962352294006d65744028
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-18T00:00:24+02:00
summary:
bpo-37320: Remove openfp() of aifc, sunau and wave (GH-14169)
aifc.openfp() alias to aifc.open(), sunau.openfp() alias to
sunau.open(), and wave.openfp() alias to wave.open() have been
removed. They were deprecated …
[View More]since Python 3.7.
files:
A Misc/NEWS.d/next/Library/2019-06-17-22-10-37.bpo-37320.ffieYa.rst
M Doc/library/sunau.rst
M Doc/library/wave.rst
M Doc/whatsnew/3.9.rst
M Lib/aifc.py
M Lib/sunau.py
M Lib/test/audiotests.py
M Lib/test/test_aifc.py
M Lib/test/test_pyclbr.py
M Lib/test/test_sunau.py
M Lib/test/test_wave.py
M Lib/wave.py
diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst
index 2064fd7e20bf..aad6f93b6bff 100644
--- a/Doc/library/sunau.rst
+++ b/Doc/library/sunau.rst
@@ -59,13 +59,6 @@ The :mod:`sunau` module defines the following functions:
or ``'wb'`` returns an :class:`AU_write` object.
-.. function:: openfp(file, mode)
-
- A synonym for :func:`.open`, maintained for backwards compatibility.
-
- .. deprecated-removed:: 3.7 3.9
-
-
The :mod:`sunau` module defines the following exception:
.. exception:: Error
diff --git a/Doc/library/wave.rst b/Doc/library/wave.rst
index 60d19a8d5f7d..f63e0d3dce19 100644
--- a/Doc/library/wave.rst
+++ b/Doc/library/wave.rst
@@ -47,13 +47,6 @@ The :mod:`wave` module defines the following function and exception:
.. versionchanged:: 3.4
Added support for unseekable files.
-.. function:: openfp(file, mode)
-
- A synonym for :func:`.open`, maintained for backwards compatibility.
-
- .. deprecated-removed:: 3.7 3.9
-
-
.. exception:: Error
An error raised when something is impossible because it violates the WAV
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 3da8b1685bde..446c8b9719e0 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -122,9 +122,14 @@ Deprecated
Removed
=======
-``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
-modules were deprecated since Python 3.7 which requires threading support.
-(Contributed by Victor Stinner in :issue:`37312`.)
+* ``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
+ modules were deprecated since Python 3.7 which requires threading support.
+ (Contributed by Victor Stinner in :issue:`37312`.)
+
+* ``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to
+ ``sunau.open()``, and ``wave.openfp()`` alias to ``wave.open()`` have been
+ removed. They were deprecated since Python 3.7.
+ (Contributed by Victor Stinner in :issue:`37320`.)
Porting to Python 3.9
diff --git a/Lib/aifc.py b/Lib/aifc.py
index 1916e7ef8e7e..ed5da7d8936f 100644
--- a/Lib/aifc.py
+++ b/Lib/aifc.py
@@ -138,7 +138,7 @@
import builtins
import warnings
-__all__ = ["Error", "open", "openfp"]
+__all__ = ["Error", "open"]
class Error(Exception):
pass
@@ -920,10 +920,6 @@ def open(f, mode=None):
else:
raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
-def openfp(f, mode=None):
- warnings.warn("aifc.openfp is deprecated since Python 3.7. "
- "Use aifc.open instead.", DeprecationWarning, stacklevel=2)
- return open(f, mode=mode)
if __name__ == '__main__':
import sys
diff --git a/Lib/sunau.py b/Lib/sunau.py
index 129502b0b417..79750a9d23eb 100644
--- a/Lib/sunau.py
+++ b/Lib/sunau.py
@@ -104,7 +104,7 @@
"""
from collections import namedtuple
-import warnings
+
_sunau_params = namedtuple('_sunau_params',
'nchannels sampwidth framerate nframes comptype compname')
@@ -524,8 +524,3 @@ def open(f, mode=None):
return Au_write(f)
else:
raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
-
-def openfp(f, mode=None):
- warnings.warn("sunau.openfp is deprecated since Python 3.7. "
- "Use sunau.open instead.", DeprecationWarning, stacklevel=2)
- return open(f, mode=mode)
diff --git a/Lib/test/audiotests.py b/Lib/test/audiotests.py
index 0dad01722922..d3e8e9ee44a1 100644
--- a/Lib/test/audiotests.py
+++ b/Lib/test/audiotests.py
@@ -1,7 +1,6 @@
from test.support import findfile, TESTFN, unlink
import array
import io
-from unittest import mock
import pickle
@@ -50,17 +49,6 @@ def check_params(self, f, nchannels, sampwidth, framerate, nframes,
self.assertEqual(pickle.loads(dump), params)
-class AudioMiscTests(AudioTests):
-
- def test_openfp_deprecated(self):
- arg = "arg"
- mode = "mode"
- with mock.patch(f"{self.module.__name__}.open") as mock_open, \
- self.assertWarns(DeprecationWarning):
- self.module.openfp(arg, mode=mode)
- mock_open.assert_called_with(arg, mode=mode)
-
-
class AudioWriteTests(AudioTests):
def create_file(self, testfile):
diff --git a/Lib/test/test_aifc.py b/Lib/test/test_aifc.py
index c74758413d6c..5a95099cc5cd 100644
--- a/Lib/test/test_aifc.py
+++ b/Lib/test/test_aifc.py
@@ -143,13 +143,12 @@ class AifcALAWTest(AifcTest, unittest.TestCase):
frames = byteswap(frames, 2)
-class AifcMiscTest(audiotests.AudioMiscTests, unittest.TestCase):
- module = aifc
-
+class AifcMiscTest(unittest.TestCase):
def test_skipunknown(self):
#Issue 2245
#This file contains chunk types aifc doesn't recognize.
- self.f = aifc.open(findfile('Sine-1000Hz-300ms.aif'))
+ f = aifc.open(findfile('Sine-1000Hz-300ms.aif'))
+ f.close()
def test_close_opened_files_on_error(self):
non_aifc_file = findfile('pluck-pcm8.wav', subdir='audiodata')
@@ -172,7 +171,8 @@ def test_params_added(self):
f.setparams((1, 1, 1, 1, b'NONE', b''))
f.close()
- f = self.f = aifc.open(TESTFN, 'rb')
+ f = aifc.open(TESTFN, 'rb')
+ self.addCleanup(f.close)
params = f.getparams()
self.assertEqual(params.nchannels, f.getnchannels())
self.assertEqual(params.sampwidth, f.getsampwidth())
@@ -208,7 +208,8 @@ def test_read_markers(self):
fout.setmark(2, 0, b'even')
fout.writeframes(b'\x00')
fout.close()
- f = self.f = aifc.open(TESTFN, 'rb')
+ f = aifc.open(TESTFN, 'rb')
+ self.addCleanup(f.close)
self.assertEqual(f.getmarkers(), [(1, 0, b'odd'), (2, 0, b'even')])
self.assertEqual(f.getmark(1), (1, 0, b'odd'))
self.assertEqual(f.getmark(2), (2, 0, b'even'))
diff --git a/Lib/test/test_pyclbr.py b/Lib/test/test_pyclbr.py
index 0b3934f6226e..531304021312 100644
--- a/Lib/test/test_pyclbr.py
+++ b/Lib/test/test_pyclbr.py
@@ -225,9 +225,7 @@ def test_others(self):
cm('random', ignore=('Random',)) # from _random import Random as CoreGenerator
cm('cgi', ignore=('log',)) # set with = in module
cm('pickle', ignore=('partial', 'PickleBuffer'))
- # TODO(briancurtin): openfp is deprecated as of 3.7.
- # Update this once it has been removed.
- cm('aifc', ignore=('openfp', '_aifc_params')) # set with = in module
+ cm('aifc', ignore=('_aifc_params',)) # set with = in module
cm('sre_parse', ignore=('dump', 'groups', 'pos')) # from sre_constants import *; property
cm('pdb')
cm('pydoc', ignore=('input', 'output',)) # properties
diff --git a/Lib/test/test_sunau.py b/Lib/test/test_sunau.py
index 470a1007b4d4..7f1c0a5cbded 100644
--- a/Lib/test/test_sunau.py
+++ b/Lib/test/test_sunau.py
@@ -119,10 +119,6 @@ class SunauULAWTest(SunauTest, unittest.TestCase):
frames = byteswap(frames, 2)
-class SunauMiscTests(audiotests.AudioMiscTests, unittest.TestCase):
- module = sunau
-
-
class SunauLowLevelTest(unittest.TestCase):
def test_read_bad_magic_number(self):
diff --git a/Lib/test/test_wave.py b/Lib/test/test_wave.py
index 8a42f8e47105..eb231cb19c6d 100644
--- a/Lib/test/test_wave.py
+++ b/Lib/test/test_wave.py
@@ -105,9 +105,7 @@ class WavePCM32Test(WaveTest, unittest.TestCase):
frames = byteswap(frames, 4)
-class MiscTestCase(audiotests.AudioMiscTests, unittest.TestCase):
- module = wave
-
+class MiscTestCase(unittest.TestCase):
def test__all__(self):
blacklist = {'WAVE_FORMAT_PCM'}
support.check__all__(self, wave, blacklist=blacklist)
diff --git a/Lib/wave.py b/Lib/wave.py
index f155879a9a76..100420db9e16 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -71,9 +71,15 @@
is destroyed.
"""
+from chunk import Chunk
+from collections import namedtuple
+import audioop
import builtins
+import struct
+import sys
+
-__all__ = ["open", "openfp", "Error", "Wave_read", "Wave_write"]
+__all__ = ["open", "Error", "Wave_read", "Wave_write"]
class Error(Exception):
pass
@@ -82,13 +88,6 @@ class Error(Exception):
_array_fmts = None, 'b', 'h', None, 'i'
-import audioop
-import struct
-import sys
-from chunk import Chunk
-from collections import namedtuple
-import warnings
-
_wave_params = namedtuple('_wave_params',
'nchannels sampwidth framerate nframes comptype compname')
@@ -512,8 +511,3 @@ def open(f, mode=None):
return Wave_write(f)
else:
raise Error("mode must be 'r', 'rb', 'w', or 'wb'")
-
-def openfp(f, mode=None):
- warnings.warn("wave.openfp is deprecated since Python 3.7. "
- "Use wave.open instead.", DeprecationWarning, stacklevel=2)
- return open(f, mode=mode)
diff --git a/Misc/NEWS.d/next/Library/2019-06-17-22-10-37.bpo-37320.ffieYa.rst b/Misc/NEWS.d/next/Library/2019-06-17-22-10-37.bpo-37320.ffieYa.rst
new file mode 100644
index 000000000000..bc5745261cfa
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-17-22-10-37.bpo-37320.ffieYa.rst
@@ -0,0 +1,3 @@
+``aifc.openfp()`` alias to ``aifc.open()``, ``sunau.openfp()`` alias to
+``sunau.open()``, and ``wave.openfp()`` alias to ``wave.open()`` have been
+removed. They were deprecated since Python 3.7.
[View Less]
1
0

bpo-37321: Edit IDLE subprocess connection error messages. (GH-14170)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/02f7f741e83c018015eb8fcb95bd592c17…
commit: 02f7f741e83c018015eb8fcb95bd592c1787fe5f
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T14:51:08-07:00
summary:
bpo-37321: Edit IDLE subprocess connection error messages. (GH-14170)
Mainly, add a doc reference to message in pyshell.
(cherry picked from commit …
[View More]8fac1221097aaf6ac37ed9ea727ee7892085e183)
Co-authored-by: Terry Jan Reedy <tjreedy(a)udel.edu>
files:
A Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/pyshell.py
M Lib/idlelib/run.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 7646aed59364..64636df957e4 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@ Released on 2019-10-20?
======================================
+bpo-37321: Both subprocess connection error messages now refer to
+the 'Startup failure' section of the IDLE doc.
+
bpo-37039: Adjust "Zoom Height" to individual screens by momemtarily
maximizing the window on first use with a particular screen. Changing
screen settings may invalidate the saved height. While a window is
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 6e0707d68bb6..7ad5a76c3bd5 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -824,10 +824,10 @@ def display_port_binding_error(self):
def display_no_subprocess_error(self):
tkMessageBox.showerror(
- "Subprocess Startup Error",
- "IDLE's subprocess didn't make connection. Either IDLE can't "
- "start a subprocess or personal firewall software is blocking "
- "the connection.",
+ "Subprocess Connection Error",
+ "IDLE's subprocess didn't make connection.\n"
+ "See the 'Startup failure' section of the IDLE doc, online at\n"
+ "https://docs.python.org/3/library/idle.html#startup-failure",
parent=self.tkconsole.text)
def display_executing_dialog(self):
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index 4075deec51d8..6b3928b7bf2b 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -199,11 +199,13 @@ def show_socket_error(err, address):
root = tkinter.Tk()
fix_scaling(root)
root.withdraw()
- msg = f"IDLE's subprocess can't connect to {address[0]}:{address[1]}.\n"\
- f"Fatal OSError #{err.errno}: {err.strerror}.\n"\
- f"See the 'Startup failure' section of the IDLE doc, online at\n"\
- f"https://docs.python.org/3/library/idle.html#startup-failure"
- showerror("IDLE Subprocess Error", msg, parent=root)
+ showerror(
+ "Subprocess Connection Error",
+ f"IDLE's subprocess can't connect to {address[0]}:{address[1]}.\n"
+ f"Fatal OSError #{err.errno}: {err.strerror}.\n"
+ "See the 'Startup failure' section of the IDLE doc, online at\n"
+ "https://docs.python.org/3/library/idle.html#startup-failure",
+ parent=root)
root.destroy()
def print_exception():
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst b/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
new file mode 100644
index 000000000000..1321986c5a2c
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
@@ -0,0 +1,2 @@
+Both subprocess connection error messages now refer to the 'Startup failure'
+section of the IDLE doc.
[View Less]
1
0

bpo-37321: Edit IDLE subprocess connection error messages. (GH-14170)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/336cf399546f3362033f9d2b475feae050…
commit: 336cf399546f3362033f9d2b475feae050373ef8
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T14:50:48-07:00
summary:
bpo-37321: Edit IDLE subprocess connection error messages. (GH-14170)
Mainly, add a doc reference to message in pyshell.
(cherry picked from commit …
[View More]8fac1221097aaf6ac37ed9ea727ee7892085e183)
Co-authored-by: Terry Jan Reedy <tjreedy(a)udel.edu>
files:
A Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/pyshell.py
M Lib/idlelib/run.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 2aea8c82997a..42227b60e7ae 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@ Released on 2019-06-24?
======================================
+bpo-37321: Both subprocess connection error messages now refer to
+the 'Startup failure' section of the IDLE doc.
+
bpo-37039: Adjust "Zoom Height" to individual screens by momemtarily
maximizing the window on first use with a particular screen. Changing
screen settings may invalidate the saved height. While a window is
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 6e0707d68bb6..7ad5a76c3bd5 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -824,10 +824,10 @@ def display_port_binding_error(self):
def display_no_subprocess_error(self):
tkMessageBox.showerror(
- "Subprocess Startup Error",
- "IDLE's subprocess didn't make connection. Either IDLE can't "
- "start a subprocess or personal firewall software is blocking "
- "the connection.",
+ "Subprocess Connection Error",
+ "IDLE's subprocess didn't make connection.\n"
+ "See the 'Startup failure' section of the IDLE doc, online at\n"
+ "https://docs.python.org/3/library/idle.html#startup-failure",
parent=self.tkconsole.text)
def display_executing_dialog(self):
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index 4075deec51d8..6b3928b7bf2b 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -199,11 +199,13 @@ def show_socket_error(err, address):
root = tkinter.Tk()
fix_scaling(root)
root.withdraw()
- msg = f"IDLE's subprocess can't connect to {address[0]}:{address[1]}.\n"\
- f"Fatal OSError #{err.errno}: {err.strerror}.\n"\
- f"See the 'Startup failure' section of the IDLE doc, online at\n"\
- f"https://docs.python.org/3/library/idle.html#startup-failure"
- showerror("IDLE Subprocess Error", msg, parent=root)
+ showerror(
+ "Subprocess Connection Error",
+ f"IDLE's subprocess can't connect to {address[0]}:{address[1]}.\n"
+ f"Fatal OSError #{err.errno}: {err.strerror}.\n"
+ "See the 'Startup failure' section of the IDLE doc, online at\n"
+ "https://docs.python.org/3/library/idle.html#startup-failure",
+ parent=root)
root.destroy()
def print_exception():
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst b/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
new file mode 100644
index 000000000000..1321986c5a2c
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
@@ -0,0 +1,2 @@
+Both subprocess connection error messages now refer to the 'Startup failure'
+section of the IDLE doc.
[View Less]
1
0

bpo-37321: Edit IDLE subprocess connection error messages. (#14170)
by Terry Jan Reedy June 17, 2019
by Terry Jan Reedy June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/8fac1221097aaf6ac37ed9ea727ee78920…
commit: 8fac1221097aaf6ac37ed9ea727ee7892085e183
branch: master
author: Terry Jan Reedy <tjreedy(a)udel.edu>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T17:23:28-04:00
summary:
bpo-37321: Edit IDLE subprocess connection error messages. (#14170)
Mainly, add a doc reference to message in pyshell.
files:
A Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
M Lib/idlelib/NEWS.txt
M …
[View More]Lib/idlelib/pyshell.py
M Lib/idlelib/run.py
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 7646aed59364..64636df957e4 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,9 @@ Released on 2019-10-20?
======================================
+bpo-37321: Both subprocess connection error messages now refer to
+the 'Startup failure' section of the IDLE doc.
+
bpo-37039: Adjust "Zoom Height" to individual screens by momemtarily
maximizing the window on first use with a particular screen. Changing
screen settings may invalidate the saved height. While a window is
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 6e0707d68bb6..7ad5a76c3bd5 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -824,10 +824,10 @@ def display_port_binding_error(self):
def display_no_subprocess_error(self):
tkMessageBox.showerror(
- "Subprocess Startup Error",
- "IDLE's subprocess didn't make connection. Either IDLE can't "
- "start a subprocess or personal firewall software is blocking "
- "the connection.",
+ "Subprocess Connection Error",
+ "IDLE's subprocess didn't make connection.\n"
+ "See the 'Startup failure' section of the IDLE doc, online at\n"
+ "https://docs.python.org/3/library/idle.html#startup-failure",
parent=self.tkconsole.text)
def display_executing_dialog(self):
diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py
index 4075deec51d8..6b3928b7bf2b 100644
--- a/Lib/idlelib/run.py
+++ b/Lib/idlelib/run.py
@@ -199,11 +199,13 @@ def show_socket_error(err, address):
root = tkinter.Tk()
fix_scaling(root)
root.withdraw()
- msg = f"IDLE's subprocess can't connect to {address[0]}:{address[1]}.\n"\
- f"Fatal OSError #{err.errno}: {err.strerror}.\n"\
- f"See the 'Startup failure' section of the IDLE doc, online at\n"\
- f"https://docs.python.org/3/library/idle.html#startup-failure"
- showerror("IDLE Subprocess Error", msg, parent=root)
+ showerror(
+ "Subprocess Connection Error",
+ f"IDLE's subprocess can't connect to {address[0]}:{address[1]}.\n"
+ f"Fatal OSError #{err.errno}: {err.strerror}.\n"
+ "See the 'Startup failure' section of the IDLE doc, online at\n"
+ "https://docs.python.org/3/library/idle.html#startup-failure",
+ parent=root)
root.destroy()
def print_exception():
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst b/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
new file mode 100644
index 000000000000..1321986c5a2c
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-17-16-35-30.bpo-37321.zVTTGS.rst
@@ -0,0 +1,2 @@
+Both subprocess connection error messages now refer to the 'Startup failure'
+section of the IDLE doc.
[View Less]
1
0

bpo-37039: Make IDLE's Zoom Height adjust to users' screens (GH-13678) (GH-14168)
by Terry Jan Reedy June 17, 2019
by Terry Jan Reedy June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/4b68a8eb0df7317d6c57b021d40cc0b31e…
commit: 4b68a8eb0df7317d6c57b021d40cc0b31e3f1cd3
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Terry Jan Reedy <tjreedy(a)udel.edu>
date: 2019-06-17T16:15:53-04:00
summary:
bpo-37039: Make IDLE's Zoom Height adjust to users' screens (GH-13678) (GH-14168)
Measure required height by quickly maximizing once per screen.
A search for a better method …
[View More]failed.
(cherry picked from commit 5bff3c86ab77e9d831b3cd19b45654c7eef22931)
Co-authored-by: Tal Einat <taleinat+github(a)gmail.com>
files:
A Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
M Doc/library/idle.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/help.html
M Lib/idlelib/zoomheight.py
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index bd24695c7282..d494c9766eb7 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -289,7 +289,10 @@ Show/Hide Code Context (Editor Window only)
Zoom/Restore Height
Toggles the window between normal size and maximum height. The initial size
defaults to 40 lines by 80 chars unless changed on the General tab of the
- Configure IDLE dialog.
+ Configure IDLE dialog. The maximum height for a screen is determined by
+ momentarily maximizing a window the first time one is zoomed on the screen.
+ Changing screen settings may invalidate the saved height. This toogle has
+ no effect when a window is maximized.
Window menu (Shell and Editor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 982af7767251..7646aed59364 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,14 @@ Released on 2019-10-20?
======================================
+bpo-37039: Adjust "Zoom Height" to individual screens by momemtarily
+maximizing the window on first use with a particular screen. Changing
+screen settings may invalidate the saved height. While a window is
+maximized, "Zoom Height" has no effect.
+
+bpo-35763: Make calltip reminder about '/' meaning positional-only less
+obtrusive by only adding it when there is room on the first line.
+
bpo-35610: Replace now redundant editor.context_use_ps1 with
.prompt_last_line. This finishes change started in bpo-31858.
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index 228b3195cf92..e27ec8d6e173 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -6,7 +6,7 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>IDLE — Python 3.8.0a4 documentation</title>
+ <title>IDLE — Python 3.9.0a0 documentation</title>
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
@@ -19,7 +19,7 @@
<script type="text/javascript" src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
- title="Search within Python 3.8.0a4 documentation"
+ title="Search within Python 3.9.0a0 documentation"
href="../_static/opensearch.xml"/>
<link rel="author" title="About these documents" href="../about.html" />
<link rel="index" title="Index" href="../genindex.html" />
@@ -50,6 +50,7 @@
</head><body>
+
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
@@ -72,7 +73,7 @@ <h3>Navigation</h3>
<li>
- <a href="../index.html">3.8.0a4 Documentation</a> »
+ <a href="../index.html">3.9.0a0 Documentation</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
@@ -320,7 +321,10 @@ <h3>Options menu (Shell and Editor)<a class="headerlink" href="#options-menu-she
<dt>Zoom/Restore Height</dt>
<dd>Toggles the window between normal size and maximum height. The initial size
defaults to 40 lines by 80 chars unless changed on the General tab of the
-Configure IDLE dialog.</dd>
+Configure IDLE dialog. The maximum height for a screen is determined by
+momentarily maximizing a window the first time one is zoomed on the screen.
+Changing screen settings may invalidate the saved height. This toogle has
+no effect when a window is maximized.</dd>
</dl>
</div>
<div class="section" id="window-menu-shell-and-editor">
@@ -912,7 +916,7 @@ <h3>Navigation</h3>
<li>
- <a href="../index.html">3.8.0a4 Documentation</a> »
+ <a href="../index.html">3.9.0a0 Documentation</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
@@ -943,7 +947,7 @@ <h3>Navigation</h3>
<br />
<br />
- Last updated on May 25, 2019.
+ Last updated on Jun 17, 2019.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
diff --git a/Lib/idlelib/zoomheight.py b/Lib/idlelib/zoomheight.py
index 523f5d51e02f..cd50c91c183e 100644
--- a/Lib/idlelib/zoomheight.py
+++ b/Lib/idlelib/zoomheight.py
@@ -2,42 +2,119 @@
import re
import sys
+import tkinter
-from idlelib import macosx
+
+class WmInfoGatheringError(Exception):
+ pass
class ZoomHeight:
+ # Cached values for maximized window dimensions, one for each set
+ # of screen dimensions.
+ _max_height_and_y_coords = {}
def __init__(self, editwin):
self.editwin = editwin
+ self.top = self.editwin.top
def zoom_height_event(self, event=None):
- top = self.editwin.top
- zoomed = zoom_height(top)
- menu_status = 'Restore' if zoomed else 'Zoom'
- self.editwin.update_menu_label(menu='options', index='* Height',
- label=f'{menu_status} Height')
+ zoomed = self.zoom_height()
+
+ if zoomed is None:
+ self.top.bell()
+ else:
+ menu_status = 'Restore' if zoomed else 'Zoom'
+ self.editwin.update_menu_label(menu='options', index='* Height',
+ label=f'{menu_status} Height')
+
return "break"
+ def zoom_height(self):
+ top = self.top
+
+ width, height, x, y = get_window_geometry(top)
+
+ if top.wm_state() != 'normal':
+ # Can't zoom/restore window height for windows not in the 'normal'
+ # state, e.g. maximized and full-screen windows.
+ return None
+
+ try:
+ maxheight, maxy = self.get_max_height_and_y_coord()
+ except WmInfoGatheringError:
+ return None
+
+ if height != maxheight:
+ # Maximize the window's height.
+ set_window_geometry(top, (width, maxheight, x, maxy))
+ return True
+ else:
+ # Restore the window's height.
+ #
+ # .wm_geometry('') makes the window revert to the size requested
+ # by the widgets it contains.
+ top.wm_geometry('')
+ return False
+
+ def get_max_height_and_y_coord(self):
+ top = self.top
+
+ screen_dimensions = (top.winfo_screenwidth(),
+ top.winfo_screenheight())
+ if screen_dimensions not in self._max_height_and_y_coords:
+ orig_state = top.wm_state()
-def zoom_height(top):
+ # Get window geometry info for maximized windows.
+ try:
+ top.wm_state('zoomed')
+ except tkinter.TclError:
+ # The 'zoomed' state is not supported by some esoteric WMs,
+ # such as Xvfb.
+ raise WmInfoGatheringError(
+ 'Failed getting geometry of maximized windows, because ' +
+ 'the "zoomed" window state is unavailable.')
+ top.update()
+ maxwidth, maxheight, maxx, maxy = get_window_geometry(top)
+ if sys.platform == 'win32':
+ # On Windows, the returned Y coordinate is the one before
+ # maximizing, so we use 0 which is correct unless a user puts
+ # their dock on the top of the screen (very rare).
+ maxy = 0
+ maxrooty = top.winfo_rooty()
+
+ # Get the "root y" coordinate for non-maximized windows with their
+ # y coordinate set to that of maximized windows. This is needed
+ # to properly handle different title bar heights for non-maximized
+ # vs. maximized windows, as seen e.g. in Windows 10.
+ top.wm_state('normal')
+ top.update()
+ orig_geom = get_window_geometry(top)
+ max_y_geom = orig_geom[:3] + (maxy,)
+ set_window_geometry(top, max_y_geom)
+ top.update()
+ max_y_geom_rooty = top.winfo_rooty()
+
+ # Adjust the maximum window height to account for the different
+ # title bar heights of non-maximized vs. maximized windows.
+ maxheight += maxrooty - max_y_geom_rooty
+
+ self._max_height_and_y_coords[screen_dimensions] = maxheight, maxy
+
+ set_window_geometry(top, orig_geom)
+ top.wm_state(orig_state)
+
+ return self._max_height_and_y_coords[screen_dimensions]
+
+
+def get_window_geometry(top):
geom = top.wm_geometry()
m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom)
- if not m:
- top.bell()
- return
- width, height, x, y = map(int, m.groups())
- newheight = top.winfo_screenheight()
-
- # The constants below for Windows and Mac Aqua are visually determined
- # to avoid taskbar or menubar and app icons.
- newy, bot_y = ((0, 72) if sys.platform == 'win32' else
- (22, 88) if macosx.isAquaTk() else
- (0, 88) ) # Guess for anything else.
- newheight = newheight - newy - bot_y
- newgeom = '' if height >= newheight else f"{width}x{newheight}+{x}+{newy}"
- top.wm_geometry(newgeom)
- return newgeom != ""
+ return tuple(map(int, m.groups()))
+
+
+def set_window_geometry(top, geometry):
+ top.wm_geometry("{:d}x{:d}+{:d}+{:d}".format(*geometry))
if __name__ == "__main__":
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst b/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
new file mode 100644
index 000000000000..71c8c892ba6a
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
@@ -0,0 +1,4 @@
+Adjust "Zoom Height" to individual screens by momemtarily maximizing the
+window on first use with a particular screen. Changing screen settings
+may invalidate the saved height. While a window is maximized,
+"Zoom Height" has no effect.
[View Less]
1
0

bpo-37039: Make IDLE's Zoom Height adjust to users' screens (GH-13678)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/0f31a2d3e85d3644de30626a00439ab3c7…
commit: 0f31a2d3e85d3644de30626a00439ab3c7424105
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T13:06:39-07:00
summary:
bpo-37039: Make IDLE's Zoom Height adjust to users' screens (GH-13678)
Measure required height by quickly maximizing once per screen.
A search for a better method failed.
(cherry …
[View More]picked from commit 5bff3c86ab77e9d831b3cd19b45654c7eef22931)
Co-authored-by: Tal Einat <taleinat+github(a)gmail.com>
files:
A Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
M Doc/library/idle.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/help.html
M Lib/idlelib/zoomheight.py
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index bd24695c7282..d494c9766eb7 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -289,7 +289,10 @@ Show/Hide Code Context (Editor Window only)
Zoom/Restore Height
Toggles the window between normal size and maximum height. The initial size
defaults to 40 lines by 80 chars unless changed on the General tab of the
- Configure IDLE dialog.
+ Configure IDLE dialog. The maximum height for a screen is determined by
+ momentarily maximizing a window the first time one is zoomed on the screen.
+ Changing screen settings may invalidate the saved height. This toogle has
+ no effect when a window is maximized.
Window menu (Shell and Editor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 172fdc00d237..2aea8c82997a 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,14 @@ Released on 2019-06-24?
======================================
+bpo-37039: Adjust "Zoom Height" to individual screens by momemtarily
+maximizing the window on first use with a particular screen. Changing
+screen settings may invalidate the saved height. While a window is
+maximized, "Zoom Height" has no effect.
+
+bpo-35763: Make calltip reminder about '/' meaning positional-only less
+obtrusive by only adding it when there is room on the first line.
+
bpo-35610: Replace now redundant editor.context_use_ps1 with
.prompt_last_line. This finishes change started in bpo-31858.
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index 228b3195cf92..e27ec8d6e173 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -6,7 +6,7 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>IDLE — Python 3.8.0a4 documentation</title>
+ <title>IDLE — Python 3.9.0a0 documentation</title>
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
@@ -19,7 +19,7 @@
<script type="text/javascript" src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
- title="Search within Python 3.8.0a4 documentation"
+ title="Search within Python 3.9.0a0 documentation"
href="../_static/opensearch.xml"/>
<link rel="author" title="About these documents" href="../about.html" />
<link rel="index" title="Index" href="../genindex.html" />
@@ -50,6 +50,7 @@
</head><body>
+
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
@@ -72,7 +73,7 @@ <h3>Navigation</h3>
<li>
- <a href="../index.html">3.8.0a4 Documentation</a> »
+ <a href="../index.html">3.9.0a0 Documentation</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
@@ -320,7 +321,10 @@ <h3>Options menu (Shell and Editor)<a class="headerlink" href="#options-menu-she
<dt>Zoom/Restore Height</dt>
<dd>Toggles the window between normal size and maximum height. The initial size
defaults to 40 lines by 80 chars unless changed on the General tab of the
-Configure IDLE dialog.</dd>
+Configure IDLE dialog. The maximum height for a screen is determined by
+momentarily maximizing a window the first time one is zoomed on the screen.
+Changing screen settings may invalidate the saved height. This toogle has
+no effect when a window is maximized.</dd>
</dl>
</div>
<div class="section" id="window-menu-shell-and-editor">
@@ -912,7 +916,7 @@ <h3>Navigation</h3>
<li>
- <a href="../index.html">3.8.0a4 Documentation</a> »
+ <a href="../index.html">3.9.0a0 Documentation</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
@@ -943,7 +947,7 @@ <h3>Navigation</h3>
<br />
<br />
- Last updated on May 25, 2019.
+ Last updated on Jun 17, 2019.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
diff --git a/Lib/idlelib/zoomheight.py b/Lib/idlelib/zoomheight.py
index 523f5d51e02f..cd50c91c183e 100644
--- a/Lib/idlelib/zoomheight.py
+++ b/Lib/idlelib/zoomheight.py
@@ -2,42 +2,119 @@
import re
import sys
+import tkinter
-from idlelib import macosx
+
+class WmInfoGatheringError(Exception):
+ pass
class ZoomHeight:
+ # Cached values for maximized window dimensions, one for each set
+ # of screen dimensions.
+ _max_height_and_y_coords = {}
def __init__(self, editwin):
self.editwin = editwin
+ self.top = self.editwin.top
def zoom_height_event(self, event=None):
- top = self.editwin.top
- zoomed = zoom_height(top)
- menu_status = 'Restore' if zoomed else 'Zoom'
- self.editwin.update_menu_label(menu='options', index='* Height',
- label=f'{menu_status} Height')
+ zoomed = self.zoom_height()
+
+ if zoomed is None:
+ self.top.bell()
+ else:
+ menu_status = 'Restore' if zoomed else 'Zoom'
+ self.editwin.update_menu_label(menu='options', index='* Height',
+ label=f'{menu_status} Height')
+
return "break"
+ def zoom_height(self):
+ top = self.top
+
+ width, height, x, y = get_window_geometry(top)
+
+ if top.wm_state() != 'normal':
+ # Can't zoom/restore window height for windows not in the 'normal'
+ # state, e.g. maximized and full-screen windows.
+ return None
+
+ try:
+ maxheight, maxy = self.get_max_height_and_y_coord()
+ except WmInfoGatheringError:
+ return None
+
+ if height != maxheight:
+ # Maximize the window's height.
+ set_window_geometry(top, (width, maxheight, x, maxy))
+ return True
+ else:
+ # Restore the window's height.
+ #
+ # .wm_geometry('') makes the window revert to the size requested
+ # by the widgets it contains.
+ top.wm_geometry('')
+ return False
+
+ def get_max_height_and_y_coord(self):
+ top = self.top
+
+ screen_dimensions = (top.winfo_screenwidth(),
+ top.winfo_screenheight())
+ if screen_dimensions not in self._max_height_and_y_coords:
+ orig_state = top.wm_state()
-def zoom_height(top):
+ # Get window geometry info for maximized windows.
+ try:
+ top.wm_state('zoomed')
+ except tkinter.TclError:
+ # The 'zoomed' state is not supported by some esoteric WMs,
+ # such as Xvfb.
+ raise WmInfoGatheringError(
+ 'Failed getting geometry of maximized windows, because ' +
+ 'the "zoomed" window state is unavailable.')
+ top.update()
+ maxwidth, maxheight, maxx, maxy = get_window_geometry(top)
+ if sys.platform == 'win32':
+ # On Windows, the returned Y coordinate is the one before
+ # maximizing, so we use 0 which is correct unless a user puts
+ # their dock on the top of the screen (very rare).
+ maxy = 0
+ maxrooty = top.winfo_rooty()
+
+ # Get the "root y" coordinate for non-maximized windows with their
+ # y coordinate set to that of maximized windows. This is needed
+ # to properly handle different title bar heights for non-maximized
+ # vs. maximized windows, as seen e.g. in Windows 10.
+ top.wm_state('normal')
+ top.update()
+ orig_geom = get_window_geometry(top)
+ max_y_geom = orig_geom[:3] + (maxy,)
+ set_window_geometry(top, max_y_geom)
+ top.update()
+ max_y_geom_rooty = top.winfo_rooty()
+
+ # Adjust the maximum window height to account for the different
+ # title bar heights of non-maximized vs. maximized windows.
+ maxheight += maxrooty - max_y_geom_rooty
+
+ self._max_height_and_y_coords[screen_dimensions] = maxheight, maxy
+
+ set_window_geometry(top, orig_geom)
+ top.wm_state(orig_state)
+
+ return self._max_height_and_y_coords[screen_dimensions]
+
+
+def get_window_geometry(top):
geom = top.wm_geometry()
m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom)
- if not m:
- top.bell()
- return
- width, height, x, y = map(int, m.groups())
- newheight = top.winfo_screenheight()
-
- # The constants below for Windows and Mac Aqua are visually determined
- # to avoid taskbar or menubar and app icons.
- newy, bot_y = ((0, 72) if sys.platform == 'win32' else
- (22, 88) if macosx.isAquaTk() else
- (0, 88) ) # Guess for anything else.
- newheight = newheight - newy - bot_y
- newgeom = '' if height >= newheight else f"{width}x{newheight}+{x}+{newy}"
- top.wm_geometry(newgeom)
- return newgeom != ""
+ return tuple(map(int, m.groups()))
+
+
+def set_window_geometry(top, geometry):
+ top.wm_geometry("{:d}x{:d}+{:d}+{:d}".format(*geometry))
if __name__ == "__main__":
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst b/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
new file mode 100644
index 000000000000..71c8c892ba6a
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
@@ -0,0 +1,4 @@
+Adjust "Zoom Height" to individual screens by momemtarily maximizing the
+window on first use with a particular screen. Changing screen settings
+may invalidate the saved height. While a window is maximized,
+"Zoom Height" has no effect.
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/c28c1358245b9fe42e9559c34eae01befc…
commit: c28c1358245b9fe42e9559c34eae01befce73a1f
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Steve Dower <steve.dower(a)python.org>
date: 2019-06-17T12:54:18-07:00
summary:
bpo-34631: Updated OpenSSL to 1.1.1c in Windows installer (GH-14163)
(cherry picked from commit a268edd6a411480281222b1fdb0f78053434d17f)
Co-authored-by: Steve Dower <…
[View More]steve.dower(a)python.org>
files:
A Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
M PCbuild/get_externals.bat
M PCbuild/python.props
M PCbuild/readme.txt
diff --git a/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst b/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
new file mode 100644
index 000000000000..90aa30192fc8
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.1.1c in Windows installer
diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat
index 42ffe6f485fa..1640769e40d6 100644
--- a/PCbuild/get_externals.bat
+++ b/PCbuild/get_externals.bat
@@ -53,7 +53,7 @@ echo.Fetching external libraries...
set libraries=
set libraries=%libraries% bzip2-1.0.6
if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.3.0-rc0-r1
-if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1b
+if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1c
set libraries=%libraries% sqlite-3.21.0.0
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.9.0
@@ -77,7 +77,7 @@ echo.Fetching external binaries...
set binaries=
if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi
-if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1b
+if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1c
if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.9.0
if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06
diff --git a/PCbuild/python.props b/PCbuild/python.props
index b13837d394b1..0f93a0038366 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -62,8 +62,8 @@
<libffiDir>$(ExternalsDir)libffi\</libffiDir>
<libffiOutDir>$(ExternalsDir)libffi\$(ArchName)\</libffiOutDir>
<libffiIncludeDir>$(libffiOutDir)include</libffiIncludeDir>
- <opensslDir>$(ExternalsDir)openssl-1.1.1b\</opensslDir>
- <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1b\$(ArchName)\</opensslOutDir>
+ <opensslDir>$(ExternalsDir)openssl-1.1.1c\</opensslDir>
+ <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1c\$(ArchName)\</opensslOutDir>
<opensslIncludeDir>$(opensslOutDir)include</opensslIncludeDir>
<nasmDir>$(ExternalsDir)\nasm-2.11.06\</nasmDir>
<zlibDir>$(ExternalsDir)\zlib-1.2.11\</zlibDir>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index cf4aa4c91754..33481569628c 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -165,7 +165,7 @@ _lzma
Homepage:
http://tukaani.org/xz/
_ssl
- Python wrapper for version 1.1.1b of the OpenSSL secure sockets
+ Python wrapper for version 1.1.1c of the OpenSSL secure sockets
library, which is downloaded from our binaries repository at
https://github.com/python/cpython-bin-deps.
[View Less]
1
0

bpo-37039: Make IDLE's Zoom Height adjust to users' screens (GH-13678)
by Terry Jan Reedy June 17, 2019
by Terry Jan Reedy June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/5bff3c86ab77e9d831b3cd19b45654c7ee…
commit: 5bff3c86ab77e9d831b3cd19b45654c7eef22931
branch: master
author: Tal Einat <taleinat+github(a)gmail.com>
committer: Terry Jan Reedy <tjreedy(a)udel.edu>
date: 2019-06-17T15:41:00-04:00
summary:
bpo-37039: Make IDLE's Zoom Height adjust to users' screens (GH-13678)
Measure required height by quickly maximizing once per screen.
A search for a better method failed.
files:
A Misc/NEWS.d/next/IDLE/2019-…
[View More]06-04-23-27-33.bpo-37039.FN_fBf.rst
M Doc/library/idle.rst
M Lib/idlelib/NEWS.txt
M Lib/idlelib/help.html
M Lib/idlelib/zoomheight.py
diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst
index bd24695c7282..d494c9766eb7 100644
--- a/Doc/library/idle.rst
+++ b/Doc/library/idle.rst
@@ -289,7 +289,10 @@ Show/Hide Code Context (Editor Window only)
Zoom/Restore Height
Toggles the window between normal size and maximum height. The initial size
defaults to 40 lines by 80 chars unless changed on the General tab of the
- Configure IDLE dialog.
+ Configure IDLE dialog. The maximum height for a screen is determined by
+ momentarily maximizing a window the first time one is zoomed on the screen.
+ Changing screen settings may invalidate the saved height. This toogle has
+ no effect when a window is maximized.
Window menu (Shell and Editor)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index 982af7767251..7646aed59364 100644
--- a/Lib/idlelib/NEWS.txt
+++ b/Lib/idlelib/NEWS.txt
@@ -3,6 +3,14 @@ Released on 2019-10-20?
======================================
+bpo-37039: Adjust "Zoom Height" to individual screens by momemtarily
+maximizing the window on first use with a particular screen. Changing
+screen settings may invalidate the saved height. While a window is
+maximized, "Zoom Height" has no effect.
+
+bpo-35763: Make calltip reminder about '/' meaning positional-only less
+obtrusive by only adding it when there is room on the first line.
+
bpo-35610: Replace now redundant editor.context_use_ps1 with
.prompt_last_line. This finishes change started in bpo-31858.
diff --git a/Lib/idlelib/help.html b/Lib/idlelib/help.html
index 228b3195cf92..e27ec8d6e173 100644
--- a/Lib/idlelib/help.html
+++ b/Lib/idlelib/help.html
@@ -6,7 +6,7 @@
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>IDLE — Python 3.8.0a4 documentation</title>
+ <title>IDLE — Python 3.9.0a0 documentation</title>
<link rel="stylesheet" href="../_static/pydoctheme.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
@@ -19,7 +19,7 @@
<script type="text/javascript" src="../_static/sidebar.js"></script>
<link rel="search" type="application/opensearchdescription+xml"
- title="Search within Python 3.8.0a4 documentation"
+ title="Search within Python 3.9.0a0 documentation"
href="../_static/opensearch.xml"/>
<link rel="author" title="About these documents" href="../about.html" />
<link rel="index" title="Index" href="../genindex.html" />
@@ -50,6 +50,7 @@
</head><body>
+
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
@@ -72,7 +73,7 @@ <h3>Navigation</h3>
<li>
- <a href="../index.html">3.8.0a4 Documentation</a> »
+ <a href="../index.html">3.9.0a0 Documentation</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
@@ -320,7 +321,10 @@ <h3>Options menu (Shell and Editor)<a class="headerlink" href="#options-menu-she
<dt>Zoom/Restore Height</dt>
<dd>Toggles the window between normal size and maximum height. The initial size
defaults to 40 lines by 80 chars unless changed on the General tab of the
-Configure IDLE dialog.</dd>
+Configure IDLE dialog. The maximum height for a screen is determined by
+momentarily maximizing a window the first time one is zoomed on the screen.
+Changing screen settings may invalidate the saved height. This toogle has
+no effect when a window is maximized.</dd>
</dl>
</div>
<div class="section" id="window-menu-shell-and-editor">
@@ -912,7 +916,7 @@ <h3>Navigation</h3>
<li>
- <a href="../index.html">3.8.0a4 Documentation</a> »
+ <a href="../index.html">3.9.0a0 Documentation</a> »
</li>
<li class="nav-item nav-item-1"><a href="index.html" >The Python Standard Library</a> »</li>
@@ -943,7 +947,7 @@ <h3>Navigation</h3>
<br />
<br />
- Last updated on May 25, 2019.
+ Last updated on Jun 17, 2019.
<a href="https://docs.python.org/3/bugs.html">Found a bug</a>?
<br />
diff --git a/Lib/idlelib/zoomheight.py b/Lib/idlelib/zoomheight.py
index 523f5d51e02f..cd50c91c183e 100644
--- a/Lib/idlelib/zoomheight.py
+++ b/Lib/idlelib/zoomheight.py
@@ -2,42 +2,119 @@
import re
import sys
+import tkinter
-from idlelib import macosx
+
+class WmInfoGatheringError(Exception):
+ pass
class ZoomHeight:
+ # Cached values for maximized window dimensions, one for each set
+ # of screen dimensions.
+ _max_height_and_y_coords = {}
def __init__(self, editwin):
self.editwin = editwin
+ self.top = self.editwin.top
def zoom_height_event(self, event=None):
- top = self.editwin.top
- zoomed = zoom_height(top)
- menu_status = 'Restore' if zoomed else 'Zoom'
- self.editwin.update_menu_label(menu='options', index='* Height',
- label=f'{menu_status} Height')
+ zoomed = self.zoom_height()
+
+ if zoomed is None:
+ self.top.bell()
+ else:
+ menu_status = 'Restore' if zoomed else 'Zoom'
+ self.editwin.update_menu_label(menu='options', index='* Height',
+ label=f'{menu_status} Height')
+
return "break"
+ def zoom_height(self):
+ top = self.top
+
+ width, height, x, y = get_window_geometry(top)
+
+ if top.wm_state() != 'normal':
+ # Can't zoom/restore window height for windows not in the 'normal'
+ # state, e.g. maximized and full-screen windows.
+ return None
+
+ try:
+ maxheight, maxy = self.get_max_height_and_y_coord()
+ except WmInfoGatheringError:
+ return None
+
+ if height != maxheight:
+ # Maximize the window's height.
+ set_window_geometry(top, (width, maxheight, x, maxy))
+ return True
+ else:
+ # Restore the window's height.
+ #
+ # .wm_geometry('') makes the window revert to the size requested
+ # by the widgets it contains.
+ top.wm_geometry('')
+ return False
+
+ def get_max_height_and_y_coord(self):
+ top = self.top
+
+ screen_dimensions = (top.winfo_screenwidth(),
+ top.winfo_screenheight())
+ if screen_dimensions not in self._max_height_and_y_coords:
+ orig_state = top.wm_state()
-def zoom_height(top):
+ # Get window geometry info for maximized windows.
+ try:
+ top.wm_state('zoomed')
+ except tkinter.TclError:
+ # The 'zoomed' state is not supported by some esoteric WMs,
+ # such as Xvfb.
+ raise WmInfoGatheringError(
+ 'Failed getting geometry of maximized windows, because ' +
+ 'the "zoomed" window state is unavailable.')
+ top.update()
+ maxwidth, maxheight, maxx, maxy = get_window_geometry(top)
+ if sys.platform == 'win32':
+ # On Windows, the returned Y coordinate is the one before
+ # maximizing, so we use 0 which is correct unless a user puts
+ # their dock on the top of the screen (very rare).
+ maxy = 0
+ maxrooty = top.winfo_rooty()
+
+ # Get the "root y" coordinate for non-maximized windows with their
+ # y coordinate set to that of maximized windows. This is needed
+ # to properly handle different title bar heights for non-maximized
+ # vs. maximized windows, as seen e.g. in Windows 10.
+ top.wm_state('normal')
+ top.update()
+ orig_geom = get_window_geometry(top)
+ max_y_geom = orig_geom[:3] + (maxy,)
+ set_window_geometry(top, max_y_geom)
+ top.update()
+ max_y_geom_rooty = top.winfo_rooty()
+
+ # Adjust the maximum window height to account for the different
+ # title bar heights of non-maximized vs. maximized windows.
+ maxheight += maxrooty - max_y_geom_rooty
+
+ self._max_height_and_y_coords[screen_dimensions] = maxheight, maxy
+
+ set_window_geometry(top, orig_geom)
+ top.wm_state(orig_state)
+
+ return self._max_height_and_y_coords[screen_dimensions]
+
+
+def get_window_geometry(top):
geom = top.wm_geometry()
m = re.match(r"(\d+)x(\d+)\+(-?\d+)\+(-?\d+)", geom)
- if not m:
- top.bell()
- return
- width, height, x, y = map(int, m.groups())
- newheight = top.winfo_screenheight()
-
- # The constants below for Windows and Mac Aqua are visually determined
- # to avoid taskbar or menubar and app icons.
- newy, bot_y = ((0, 72) if sys.platform == 'win32' else
- (22, 88) if macosx.isAquaTk() else
- (0, 88) ) # Guess for anything else.
- newheight = newheight - newy - bot_y
- newgeom = '' if height >= newheight else f"{width}x{newheight}+{x}+{newy}"
- top.wm_geometry(newgeom)
- return newgeom != ""
+ return tuple(map(int, m.groups()))
+
+
+def set_window_geometry(top, geometry):
+ top.wm_geometry("{:d}x{:d}+{:d}+{:d}".format(*geometry))
if __name__ == "__main__":
diff --git a/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst b/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
new file mode 100644
index 000000000000..71c8c892ba6a
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-06-04-23-27-33.bpo-37039.FN_fBf.rst
@@ -0,0 +1,4 @@
+Adjust "Zoom Height" to individual screens by momemtarily maximizing the
+window on first use with a particular screen. Changing screen settings
+may invalidate the saved height. While a window is maximized,
+"Zoom Height" has no effect.
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/a268edd6a411480281222b1fdb0f780534…
commit: a268edd6a411480281222b1fdb0f78053434d17f
branch: master
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T11:36:08-07:00
summary:
bpo-34631: Updated OpenSSL to 1.1.1c in Windows installer (GH-14163)
files:
A Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
M PCbuild/get_externals.bat
M PCbuild/python.props
M PCbuild/readme.…
[View More]txt
diff --git a/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst b/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
new file mode 100644
index 000000000000..90aa30192fc8
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2019-06-17-09-34-25.bpo-34631.DBfM4j.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.1.1c in Windows installer
diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat
index 42ffe6f485fa..1640769e40d6 100644
--- a/PCbuild/get_externals.bat
+++ b/PCbuild/get_externals.bat
@@ -53,7 +53,7 @@ echo.Fetching external libraries...
set libraries=
set libraries=%libraries% bzip2-1.0.6
if NOT "%IncludeLibffiSrc%"=="false" set libraries=%libraries% libffi-3.3.0-rc0-r1
-if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1b
+if NOT "%IncludeSSLSrc%"=="false" set libraries=%libraries% openssl-1.1.1c
set libraries=%libraries% sqlite-3.21.0.0
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tcl-core-8.6.9.0
if NOT "%IncludeTkinterSrc%"=="false" set libraries=%libraries% tk-8.6.9.0
@@ -77,7 +77,7 @@ echo.Fetching external binaries...
set binaries=
if NOT "%IncludeLibffi%"=="false" set binaries=%binaries% libffi
-if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1b
+if NOT "%IncludeSSL%"=="false" set binaries=%binaries% openssl-bin-1.1.1c
if NOT "%IncludeTkinter%"=="false" set binaries=%binaries% tcltk-8.6.9.0
if NOT "%IncludeSSLSrc%"=="false" set binaries=%binaries% nasm-2.11.06
diff --git a/PCbuild/python.props b/PCbuild/python.props
index b13837d394b1..0f93a0038366 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -62,8 +62,8 @@
<libffiDir>$(ExternalsDir)libffi\</libffiDir>
<libffiOutDir>$(ExternalsDir)libffi\$(ArchName)\</libffiOutDir>
<libffiIncludeDir>$(libffiOutDir)include</libffiIncludeDir>
- <opensslDir>$(ExternalsDir)openssl-1.1.1b\</opensslDir>
- <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1b\$(ArchName)\</opensslOutDir>
+ <opensslDir>$(ExternalsDir)openssl-1.1.1c\</opensslDir>
+ <opensslOutDir>$(ExternalsDir)openssl-bin-1.1.1c\$(ArchName)\</opensslOutDir>
<opensslIncludeDir>$(opensslOutDir)include</opensslIncludeDir>
<nasmDir>$(ExternalsDir)\nasm-2.11.06\</nasmDir>
<zlibDir>$(ExternalsDir)\zlib-1.2.11\</zlibDir>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index 312fa6a588a6..b32595b86ddc 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -165,7 +165,7 @@ _lzma
Homepage:
http://tukaani.org/xz/
_ssl
- Python wrapper for version 1.1.1b of the OpenSSL secure sockets
+ Python wrapper for version 1.1.1c of the OpenSSL secure sockets
library, which is downloaded from our binaries repository at
https://github.com/python/cpython-bin-deps.
[View Less]
1
0
To: python-checkins(a)python.org
Subject: bpo-34556: Add --upgrade-deps to venv module (#13100)
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
https://github.com/python/cpython/commit/4acdbf11b1fae1af24c47413a6caa59301…
1b6f
commit: 4acdbf11b1fae1af24c47413a6caa593010d1b6f
branch: master
author: Cooper Lees <cooper(a)fb.com>
committer: =C5=81ukasz Langa <lukasz(a)langa.pl>
date: 2019-06-17T19:18:13+01:00
summary:
bpo-34556: …
[View More]Add --upgrade-deps to venv module (#13100)
Add --upgrade-deps to venv module
- This allows for pip + setuptools to be automatically upgraded to the latest=
version on PyPI
- Update documentation to represent this change
bpo-34556: Add --upgrade to venv module
files:
A Misc/NEWS.d/next/Core and Builtins/2019-05-05-18-09-40.bpo-34556.o9kfpu.rst
M Doc/library/venv.rst
M Doc/using/venv-create.inc
M Lib/test/test_venv.py
M Lib/venv/__init__.py
diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst
index 4f083a3181e7..d3d5ae2b007d 100644
--- a/Doc/library/venv.rst
+++ b/Doc/library/venv.rst
@@ -97,7 +97,7 @@ creation according to their needs, the :class:`EnvBuilder` =
class.
=20
.. class:: EnvBuilder(system_site_packages=3DFalse, clear=3DFalse, \
symlinks=3DFalse, upgrade=3DFalse, with_pip=3DFalse, \
- prompt=3DNone)
+ prompt=3DNone, upgrade_deps=3DFalse)
=20
The :class:`EnvBuilder` class accepts the following keyword arguments on
instantiation:
@@ -123,12 +123,17 @@ creation according to their needs, the :class:`EnvBuild=
er` class.
(defaults to ``None`` which means directory name of the environment wo=
uld
be used).
=20
+ * ``upgrade_deps`` -- Update the base venv modules to the latest on PyPI
+
.. versionchanged:: 3.4
Added the ``with_pip`` parameter
=20
.. versionadded:: 3.6
Added the ``prompt`` parameter
=20
+ .. versionadded:: 3.8
+ Added the ``upgrade_deps`` parameter
+
Creators of third-party virtual environment tools will be free to use the
provided ``EnvBuilder`` class as a base class.
=20
diff --git a/Doc/using/venv-create.inc b/Doc/using/venv-create.inc
index 1ada83c07a67..8fd107b33202 100644
--- a/Doc/using/venv-create.inc
+++ b/Doc/using/venv-create.inc
@@ -35,7 +35,7 @@ your :ref:`Python installation <using-on-windows>`::
The command, if run with ``-h``, will show the available options::
=20
usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--cle=
ar]
- [--upgrade] [--without-pip] [--prompt PROMPT]
+ [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-dep=
s]
ENV_DIR [ENV_DIR ...]
=20
Creates virtual Python environments in one or more target directories.
@@ -60,10 +60,15 @@ The command, if run with ``-h``, will show the available =
options::
environment (pip is bootstrapped by default)
--prompt PROMPT Provides an alternative prompt prefix for this
environment.
+ --upgrade-deps Upgrade core dependencies: pip setuptools to the
+ latest version in PyPI
=20
Once an environment has been created, you may wish to activate it, e.g. =
by
sourcing an activate script in its bin directory.
=20
+.. versionchanged:: 3.8
+ Add ``--upgrade-deps`` option to upgrade pip + setuptools to the latest o=
n PyPI
+
.. versionchanged:: 3.4
Installs pip by default, added the ``--without-pip`` and ``--copies``
options
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index 24d3a69b1878..4f6c11b2663e 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -16,9 +16,9 @@
from test.support import (captured_stdout, captured_stderr, requires_zlib,
can_symlink, EnvironmentVarGuard, rmtree,
import_module)
-import threading
import unittest
import venv
+from unittest.mock import patch
=20
try:
import ctypes
@@ -131,6 +131,28 @@ def test_prompt(self):
self.assertEqual(context.prompt, '(My prompt) ')
self.assertIn("prompt =3D 'My prompt'\n", data)
=20
+ def test_upgrade_dependencies(self):
+ builder =3D venv.EnvBuilder()
+ bin_path =3D 'Scripts' if sys.platform =3D=3D 'win32' else 'bin'
+ pip_exe =3D 'pip.exe' if sys.platform =3D=3D 'win32' else 'pip'
+ 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),
+ 'install',
+ '-U',
+ 'pip',
+ 'setuptools'
+ ]
+ )
+
+ fake_context =3D builder.ensure_directories(fake_env_dir)
+ with patch('venv.subprocess.check_call', pip_cmd_checker):
+ builder.upgrade_dependencies(fake_context)
+
@requireVenvCreate
def test_prefixes(self):
"""
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index 4a49b240b8e2..b64125fa4fe1 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -12,6 +12,8 @@
import sysconfig
import types
=20
+
+CORE_VENV_DEPS =3D ('pip', 'setuptools')
logger =3D logging.getLogger(__name__)
=20
=20
@@ -38,16 +40,19 @@ class EnvBuilder:
:param with_pip: If True, ensure pip is installed in the virtual
environment
:param prompt: Alternative terminal prefix for the environment.
+ :param upgrade_deps: Update the base venv modules to the latest on PyPI
"""
=20
def __init__(self, system_site_packages=3DFalse, clear=3DFalse,
- symlinks=3DFalse, upgrade=3DFalse, with_pip=3DFalse, prompt=
=3DNone):
+ symlinks=3DFalse, upgrade=3DFalse, with_pip=3DFalse, prompt=
=3DNone,
+ upgrade_deps=3DFalse):
self.system_site_packages =3D system_site_packages
self.clear =3D clear
self.symlinks =3D symlinks
self.upgrade =3D upgrade
self.with_pip =3D with_pip
self.prompt =3D prompt
+ self.upgrade_deps =3D upgrade_deps
=20
def create(self, env_dir):
"""
@@ -74,6 +79,8 @@ def create(self, env_dir):
# restore it and rewrite the configuration
self.system_site_packages =3D True
self.create_configuration(context)
+ if self.upgrade_deps:
+ self.upgrade_dependencies(context)
=20
def clear_directory(self, path):
for fn in os.listdir(path):
@@ -105,7 +112,6 @@ def create_if_needed(d):
prompt =3D self.prompt if self.prompt is not None else context.env_n=
ame
context.prompt =3D '(%s) ' % prompt
create_if_needed(env_dir)
- env =3D os.environ
executable =3D getattr(sys, '_base_executable', sys.executable)
dirname, exename =3D os.path.split(os.path.abspath(executable))
context.executable =3D executable
@@ -363,13 +369,25 @@ def install_scripts(self, context, path):
f.write(data)
shutil.copymode(srcfile, dstfile)
=20
+ def upgrade_dependencies(self, context):
+ logger.debug(
+ f'Upgrading {CORE_VENV_DEPS} packages in {context.bin_path}'
+ )
+ if sys.platform =3D=3D 'win32':
+ pip_exe =3D os.path.join(context.bin_path, 'pip.exe')
+ else:
+ pip_exe =3D os.path.join(context.bin_path, 'pip')
+ cmd =3D [pip_exe, 'install', '-U']
+ cmd.extend(CORE_VENV_DEPS)
+ subprocess.check_call(cmd)
+
=20
def create(env_dir, system_site_packages=3DFalse, clear=3DFalse,
- symlinks=3DFalse, with_pip=3DFalse, prompt=3DNone):
+ symlinks=3DFalse, with_pip=3DFalse, prompt=3DNone, upgrade_deps=
=3DFalse):
"""Create a virtual environment in a directory."""
builder =3D EnvBuilder(system_site_packages=3Dsystem_site_packages,
clear=3Dclear, symlinks=3Dsymlinks, with_pip=3Dwith=
_pip,
- prompt=3Dprompt)
+ prompt=3Dprompt, upgrade_deps=3Dupgrade_deps)
builder.create(env_dir)
=20
def main(args=3DNone):
@@ -432,6 +450,11 @@ def main(args=3DNone):
parser.add_argument('--prompt',
help=3D'Provides an alternative prompt prefix fo=
r '
'this environment.')
+ parser.add_argument('--upgrade-deps', default=3DFalse, action=3D'sto=
re_true',
+ dest=3D'upgrade_deps',
+ help=3D'Upgrade core dependencies: {} to the lat=
est '
+ 'version in PyPI'.format(
+ ' '.join(CORE_VENV_DEPS)))
options =3D parser.parse_args(args)
if options.upgrade and options.clear:
raise ValueError('you cannot supply --upgrade and --clear togeth=
er.')
@@ -440,7 +463,8 @@ def main(args=3DNone):
symlinks=3Doptions.symlinks,
upgrade=3Doptions.upgrade,
with_pip=3Doptions.with_pip,
- prompt=3Doptions.prompt)
+ prompt=3Doptions.prompt,
+ upgrade_deps=3Doptions.upgrade_deps)
for d in options.dirs:
builder.create(d)
=20
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-05-05-18-09-40.bpo-34556=
.o9kfpu.rst b/Misc/NEWS.d/next/Core and Builtins/2019-05-05-18-09-40.bpo-3455=
6.o9kfpu.rst
new file mode 100644
index 000000000000..7861eac5cb25
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-05-05-18-09-40.bpo-34556.o9kfpu=
.rst=09
@@ -0,0 +1 @@
+Add ``--upgrade-deps`` to venv module. Patch by Cooper Ry Lees
[View Less]
1
0

bpo-37111: Add 'encoding' and 'errors' parameters to logging.basicCon… (GH-14008)
by Vinay Sajip June 17, 2019
by Vinay Sajip June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/ca7b504a4d4c3a5fde1ee4607b9501c2ba…
commit: ca7b504a4d4c3a5fde1ee4607b9501c2bab6e743
branch: master
author: Vinay Sajip <vinay_sajip(a)yahoo.co.uk>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T17:40:52+01:00
summary:
bpo-37111: Add 'encoding' and 'errors' parameters to logging.basicCon… (GH-14008)
files:
A Misc/NEWS.d/next/Library/2019-06-09-17-22-33.bpo-37111.2I0z2k.rst
M Doc/howto/logging.rst
M Doc/library/logging.handlers.…
[View More]rst
M Doc/library/logging.rst
M Doc/tools/susp-ignored.csv
M Lib/logging/__init__.py
M Lib/logging/handlers.py
M Lib/test/test_logging.py
diff --git a/Doc/howto/logging.rst b/Doc/howto/logging.rst
index 7a68ca89199c..fbe5a118d186 100644
--- a/Doc/howto/logging.rst
+++ b/Doc/howto/logging.rst
@@ -128,10 +128,18 @@ look at that next. Be sure to try the following in a newly-started Python
interpreter, and don't just continue from the session described above::
import logging
- logging.basicConfig(filename='example.log',level=logging.DEBUG)
+ logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
+ logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
+
+.. versionchanged:: 3.9
+ The *encoding* argument was added. In earlier Python versions, or if not
+ specified, the encoding used is the default value used by :func:`open`. While
+ not shown in the above example, an *errors* argument can also now be passed,
+ which determines how encoding errors are handled. For available values and
+ the default, see the documentation for :func:`open`.
And now if we open the file and look at what we have, we should find the log
messages:
@@ -141,6 +149,7 @@ messages:
DEBUG:root:This message should go to the log file
INFO:root:So should this
WARNING:root:And this, too
+ ERROR:root:And non-ASCII stuff, too, like Øresund and Malmö
This example also shows how you can set the logging level which acts as the
threshold for tracking. In this case, because we set the threshold to
diff --git a/Doc/library/logging.handlers.rst b/Doc/library/logging.handlers.rst
index dee9a84e3337..822f82dffcfd 100644
--- a/Doc/library/logging.handlers.rst
+++ b/Doc/library/logging.handlers.rst
@@ -89,18 +89,22 @@ sends logging output to a disk file. It inherits the output functionality from
:class:`StreamHandler`.
-.. class:: FileHandler(filename, mode='a', encoding=None, delay=False)
+.. class:: FileHandler(filename, mode='a', encoding=None, delay=False, errors=None)
Returns a new instance of the :class:`FileHandler` class. The specified file is
opened and used as the stream for logging. If *mode* is not specified,
:const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file
with that encoding. If *delay* is true, then file opening is deferred until the
- first call to :meth:`emit`. By default, the file grows indefinitely.
+ first call to :meth:`emit`. By default, the file grows indefinitely. If
+ *errors* is specified, it's used to determine how encoding errors are handled.
.. versionchanged:: 3.6
As well as string values, :class:`~pathlib.Path` objects are also accepted
for the *filename* argument.
+ .. versionchanged:: 3.9
+ The *errors* parameter was added.
+
.. method:: close()
Closes the file.
@@ -168,18 +172,22 @@ exclusive locks - and so there is no need for such a handler. Furthermore,
for this value.
-.. class:: WatchedFileHandler(filename, mode='a', encoding=None, delay=False)
+.. class:: WatchedFileHandler(filename, mode='a', encoding=None, delay=False, errors=None)
Returns a new instance of the :class:`WatchedFileHandler` class. The specified
file is opened and used as the stream for logging. If *mode* is not specified,
:const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file
with that encoding. If *delay* is true, then file opening is deferred until the
- first call to :meth:`emit`. By default, the file grows indefinitely.
+ first call to :meth:`emit`. By default, the file grows indefinitely. If
+ *errors* is provided, it determines how encoding errors are handled.
.. versionchanged:: 3.6
As well as string values, :class:`~pathlib.Path` objects are also accepted
for the *filename* argument.
+ .. versionchanged:: 3.9
+ The *errors* parameter was added.
+
.. method:: reopenIfNeeded()
Checks to see if the file has changed. If it has, the existing stream is
@@ -205,7 +213,7 @@ module, is the base class for the rotating file handlers,
not need to instantiate this class, but it has attributes and methods you may
need to override.
-.. class:: BaseRotatingHandler(filename, mode, encoding=None, delay=False)
+.. class:: BaseRotatingHandler(filename, mode, encoding=None, delay=False, errors=None)
The parameters are as for :class:`FileHandler`. The attributes are:
@@ -284,13 +292,14 @@ The :class:`RotatingFileHandler` class, located in the :mod:`logging.handlers`
module, supports rotation of disk log files.
-.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
+.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False, errors=None)
Returns a new instance of the :class:`RotatingFileHandler` class. The specified
file is opened and used as the stream for logging. If *mode* is not specified,
``'a'`` is used. If *encoding* is not ``None``, it is used to open the file
with that encoding. If *delay* is true, then file opening is deferred until the
- first call to :meth:`emit`. By default, the file grows indefinitely.
+ first call to :meth:`emit`. By default, the file grows indefinitely. If
+ *errors* is provided, it determines how encoding errors are handled.
You can use the *maxBytes* and *backupCount* values to allow the file to
:dfn:`rollover` at a predetermined size. When the size is about to be exceeded,
@@ -311,6 +320,9 @@ module, supports rotation of disk log files.
As well as string values, :class:`~pathlib.Path` objects are also accepted
for the *filename* argument.
+ .. versionchanged:: 3.9
+ The *errors* parameter was added.
+
.. method:: doRollover()
Does a rollover, as described above.
@@ -331,7 +343,7 @@ The :class:`TimedRotatingFileHandler` class, located in the
timed intervals.
-.. class:: TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)
+.. class:: TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None, errors=None)
Returns a new instance of the :class:`TimedRotatingFileHandler` class. The
specified file is opened and used as the stream for logging. On rotating it also
@@ -391,6 +403,9 @@ timed intervals.
rollover, and subsequent rollovers would be calculated via the normal
interval calculation.
+ If *errors* is specified, it's used to determine how encoding errors are
+ handled.
+
.. note:: Calculation of the initial rollover time is done when the handler
is initialised. Calculation of subsequent rollover times is done only
when rollover occurs, and rollover occurs only when emitting output. If
@@ -411,6 +426,9 @@ timed intervals.
As well as string values, :class:`~pathlib.Path` objects are also accepted
for the *filename* argument.
+ .. versionchanged:: 3.9
+ The *errors* parameter was added.
+
.. method:: doRollover()
Does a rollover, as described above.
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index 08555c3a3576..3e4d7deee8cf 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -1196,6 +1196,21 @@ functions.
| | carrying out the configuration as specified |
| | by the other arguments. |
+--------------+---------------------------------------------+
+ | *encoding* | If this keyword argument is specified along |
+ | | with *filename*, its value is used when the |
+ | | FileHandler is created, and thus used when |
+ | | opening the output file. |
+ +--------------+---------------------------------------------+
+ | *errors* | If this keyword argument is specified along |
+ | | with *filename*, its value is used when the |
+ | | FileHandler is created, and thus used when |
+ | | opening the output file. If not specified, |
+ | | the value 'backslashreplace' is used. Note |
+ | | that if ``None`` is specified, it will be |
+ | | passed as such to func:`open`, which means |
+ | | that it will be treated the same as passing |
+ | | 'errors'. |
+ +--------------+---------------------------------------------+
.. versionchanged:: 3.2
The *style* argument was added.
@@ -1209,6 +1224,9 @@ functions.
.. versionchanged:: 3.8
The *force* argument was added.
+ .. versionchanged:: 3.9
+ The *encoding* and *errors* arguments were added.
+
.. function:: shutdown()
Informs the logging system to perform an orderly shutdown by flushing and
diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv
index 85263d47c8bb..fcf556ec0daf 100644
--- a/Doc/tools/susp-ignored.csv
+++ b/Doc/tools/susp-ignored.csv
@@ -81,6 +81,7 @@ howto/ipaddress,,::,IPv6Address('2001:db8::ffff:ffff')
howto/ipaddress,,:ffff,IPv6Address('2001:db8::ffff:ffff')
howto/logging,,:And,"WARNING:And this, too"
howto/logging,,:And,"WARNING:root:And this, too"
+howto/logging,,:And,"ERROR:root:And non-ASCII stuff, too, like "
howto/logging,,:Doing,INFO:root:Doing something
howto/logging,,:Finished,INFO:root:Finished
howto/logging,,:logger,severity:logger name:message
@@ -90,6 +91,7 @@ howto/logging,,:root,DEBUG:root:This message should go to the log file
howto/logging,,:root,INFO:root:Doing something
howto/logging,,:root,INFO:root:Finished
howto/logging,,:root,INFO:root:So should this
+howto/logging,,:root,"ERROR:root:And non-ASCII stuff, too, like "
howto/logging,,:root,INFO:root:Started
howto/logging,,:root,"WARNING:root:And this, too"
howto/logging,,:root,WARNING:root:Look before you leap!
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 16812ec8d556..645e0b3c3a67 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2001-2017 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2019 by Vinay Sajip. All Rights Reserved.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
@@ -18,7 +18,7 @@
Logging package for Python. Based on PEP 282 and comments thereto in
comp.lang.python.
-Copyright (C) 2001-2017 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2019 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging' and log away!
"""
@@ -1122,7 +1122,7 @@ class FileHandler(StreamHandler):
"""
A handler class which writes formatted logging records to disk files.
"""
- def __init__(self, filename, mode='a', encoding=None, delay=False):
+ def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None):
"""
Open the specified file and use it as the stream for logging.
"""
@@ -1133,6 +1133,7 @@ def __init__(self, filename, mode='a', encoding=None, delay=False):
self.baseFilename = os.path.abspath(filename)
self.mode = mode
self.encoding = encoding
+ self.errors = errors
self.delay = delay
if delay:
#We don't open the stream, but we still need to call the
@@ -1169,7 +1170,8 @@ def _open(self):
Open the current base file with the (original) mode and encoding.
Return the resulting stream.
"""
- return open(self.baseFilename, self.mode, encoding=self.encoding)
+ return open(self.baseFilename, self.mode, encoding=self.encoding,
+ errors=self.errors)
def emit(self, record):
"""
@@ -1928,15 +1930,20 @@ def basicConfig(**kwargs):
attached to the root logger are removed and closed, before
carrying out the configuration as specified by the other
arguments.
+ encoding If specified together with a filename, this encoding is passed to
+ the created FileHandler, causing it to be used when the file is
+ opened.
+ errors If specified together with a filename, this value is passed to the
+ created FileHandler, causing it to be used when the file is
+ opened in text mode. If not specified, the default value is
+ `backslashreplace`.
+
Note that you could specify a stream created using open(filename, mode)
rather than passing the filename and mode in. However, it should be
remembered that StreamHandler does not close its stream (since it may be
using sys.stdout or sys.stderr), whereas FileHandler closes its stream
when the handler is closed.
- .. versionchanged:: 3.8
- Added the ``force`` parameter.
-
.. versionchanged:: 3.2
Added the ``style`` parameter.
@@ -1946,12 +1953,20 @@ def basicConfig(**kwargs):
``filename``/``filemode``, or ``filename``/``filemode`` specified
together with ``stream``, or ``handlers`` specified together with
``stream``.
+
+ .. versionchanged:: 3.8
+ Added the ``force`` parameter.
+
+ .. versionchanged:: 3.9
+ Added the ``encoding`` and ``errors`` parameters.
"""
# Add thread safety in case someone mistakenly calls
# basicConfig() from multiple threads
_acquireLock()
try:
force = kwargs.pop('force', False)
+ encoding = kwargs.pop('encoding', None)
+ errors = kwargs.pop('errors', 'backslashreplace')
if force:
for h in root.handlers[:]:
root.removeHandler(h)
@@ -1970,7 +1985,10 @@ def basicConfig(**kwargs):
filename = kwargs.pop("filename", None)
mode = kwargs.pop("filemode", 'a')
if filename:
- h = FileHandler(filename, mode)
+ if 'b'in mode:
+ errors = None
+ h = FileHandler(filename, mode,
+ encoding=encoding, errors=errors)
else:
stream = kwargs.pop("stream", None)
h = StreamHandler(stream)
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index 34ff7a056ef5..5641fee57355 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -48,13 +48,16 @@ class BaseRotatingHandler(logging.FileHandler):
Not meant to be instantiated directly. Instead, use RotatingFileHandler
or TimedRotatingFileHandler.
"""
- def __init__(self, filename, mode, encoding=None, delay=False):
+ def __init__(self, filename, mode, encoding=None, delay=False, errors=None):
"""
Use the specified filename for streamed logging
"""
- logging.FileHandler.__init__(self, filename, mode, encoding, delay)
+ logging.FileHandler.__init__(self, filename, mode=mode,
+ encoding=encoding, delay=delay,
+ errors=errors)
self.mode = mode
self.encoding = encoding
+ self.errors = errors
self.namer = None
self.rotator = None
@@ -117,7 +120,8 @@ class RotatingFileHandler(BaseRotatingHandler):
Handler for logging to a set of files, which switches from one file
to the next when the current file reaches a certain size.
"""
- def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False):
+ def __init__(self, filename, mode='a', maxBytes=0, backupCount=0,
+ encoding=None, delay=False, errors=None):
"""
Open the specified file and use it as the stream for logging.
@@ -145,7 +149,8 @@ def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None,
# on each run.
if maxBytes > 0:
mode = 'a'
- BaseRotatingHandler.__init__(self, filename, mode, encoding, delay)
+ BaseRotatingHandler.__init__(self, filename, mode, encoding=encoding,
+ delay=delay, errors=errors)
self.maxBytes = maxBytes
self.backupCount = backupCount
@@ -196,8 +201,11 @@ class TimedRotatingFileHandler(BaseRotatingHandler):
If backupCount is > 0, when rollover is done, no more than backupCount
files are kept - the oldest ones are deleted.
"""
- def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None):
- BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
+ def __init__(self, filename, when='h', interval=1, backupCount=0,
+ encoding=None, delay=False, utc=False, atTime=None,
+ errors=None):
+ BaseRotatingHandler.__init__(self, filename, 'a', encoding=encoding,
+ delay=delay, errors=errors)
self.when = when.upper()
self.backupCount = backupCount
self.utc = utc
@@ -431,8 +439,11 @@ class WatchedFileHandler(logging.FileHandler):
This handler is based on a suggestion and patch by Chad J.
Schroeder.
"""
- def __init__(self, filename, mode='a', encoding=None, delay=False):
- logging.FileHandler.__init__(self, filename, mode, encoding, delay)
+ def __init__(self, filename, mode='a', encoding=None, delay=False,
+ errors=None):
+ logging.FileHandler.__init__(self, filename, mode=mode,
+ encoding=encoding, delay=delay,
+ errors=errors)
self.dev, self.ino = -1, -1
self._statstream()
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 50148dc2f252..ac8919de8f2f 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -1,4 +1,4 @@
-# Copyright 2001-2017 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2019 by Vinay Sajip. All Rights Reserved.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
@@ -16,7 +16,7 @@
"""Test harness for the logging module. Run all tests.
-Copyright (C) 2001-2017 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2019 Vinay Sajip. All Rights Reserved.
"""
import logging
@@ -4445,6 +4445,99 @@ def test_force(self):
self.assertEqual(new_string_io.getvalue().strip(),
'WARNING:root:warn\nINFO:root:info')
+ def test_encoding(self):
+ try:
+ encoding = 'utf-8'
+ logging.basicConfig(filename='test.log', encoding=encoding,
+ errors='strict',
+ format='%(message)s', level=logging.DEBUG)
+
+ self.assertEqual(len(logging.root.handlers), 1)
+ handler = logging.root.handlers[0]
+ self.assertIsInstance(handler, logging.FileHandler)
+ self.assertEqual(handler.encoding, encoding)
+ logging.debug('The Øresund Bridge joins Copenhagen to Malmö')
+ finally:
+ handler.close()
+ with open('test.log', encoding='utf-8') as f:
+ data = f.read().strip()
+ os.remove('test.log')
+ self.assertEqual(data,
+ 'The Øresund Bridge joins Copenhagen to Malmö')
+
+ def test_encoding_errors(self):
+ try:
+ encoding = 'ascii'
+ logging.basicConfig(filename='test.log', encoding=encoding,
+ errors='ignore',
+ format='%(message)s', level=logging.DEBUG)
+
+ self.assertEqual(len(logging.root.handlers), 1)
+ handler = logging.root.handlers[0]
+ self.assertIsInstance(handler, logging.FileHandler)
+ self.assertEqual(handler.encoding, encoding)
+ logging.debug('The Øresund Bridge joins Copenhagen to Malmö')
+ finally:
+ handler.close()
+ with open('test.log', encoding='utf-8') as f:
+ data = f.read().strip()
+ os.remove('test.log')
+ self.assertEqual(data, 'The resund Bridge joins Copenhagen to Malm')
+
+ def test_encoding_errors_default(self):
+ try:
+ encoding = 'ascii'
+ logging.basicConfig(filename='test.log', encoding=encoding,
+ format='%(message)s', level=logging.DEBUG)
+
+ self.assertEqual(len(logging.root.handlers), 1)
+ handler = logging.root.handlers[0]
+ self.assertIsInstance(handler, logging.FileHandler)
+ self.assertEqual(handler.encoding, encoding)
+ self.assertEqual(handler.errors, 'backslashreplace')
+ logging.debug('😂: ☃️: The Øresund Bridge joins Copenhagen to Malmö')
+ finally:
+ handler.close()
+ with open('test.log', encoding='utf-8') as f:
+ data = f.read().strip()
+ os.remove('test.log')
+ self.assertEqual(data, r'\U0001f602: \u2603\ufe0f: The \xd8resund '
+ r'Bridge joins Copenhagen to Malm\xf6')
+
+ def test_encoding_errors_none(self):
+ # Specifying None should behave as 'strict'
+ try:
+ encoding = 'ascii'
+ logging.basicConfig(filename='test.log', encoding=encoding,
+ errors=None,
+ format='%(message)s', level=logging.DEBUG)
+
+ self.assertEqual(len(logging.root.handlers), 1)
+ handler = logging.root.handlers[0]
+ self.assertIsInstance(handler, logging.FileHandler)
+ self.assertEqual(handler.encoding, encoding)
+ self.assertIsNone(handler.errors)
+
+ message = []
+
+ def dummy_handle_error(record):
+ _, v, _ = sys.exc_info()
+ message.append(str(v))
+
+ handler.handleError = dummy_handle_error
+ logging.debug('The Øresund Bridge joins Copenhagen to Malmö')
+ self.assertTrue(message)
+ self.assertIn("'ascii' codec can't encode "
+ "character '\\xd8' in position 4:", message[0])
+ finally:
+ handler.close()
+ with open('test.log', encoding='utf-8') as f:
+ data = f.read().strip()
+ os.remove('test.log')
+ # didn't write anything due to the encoding error
+ self.assertEqual(data, r'')
+
+
def _test_log(self, method, level=None):
# logging.root has no handlers so basicConfig should be called
called = []
diff --git a/Misc/NEWS.d/next/Library/2019-06-09-17-22-33.bpo-37111.2I0z2k.rst b/Misc/NEWS.d/next/Library/2019-06-09-17-22-33.bpo-37111.2I0z2k.rst
new file mode 100644
index 000000000000..39821ed1419d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-09-17-22-33.bpo-37111.2I0z2k.rst
@@ -0,0 +1 @@
+Added ``encoding`` and ``errors`` keyword parameters to ``logging.basicConfig``.
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/d8e3a8af775d683c606f3618d04f2be4e9…
commit: d8e3a8af775d683c606f3618d04f2be4e97ac3c0
branch: 2.7
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T09:33:11-07:00
summary:
bpo-34631: Updated OpenSSL to 1.0.2s in Windows installer (GH-14161)
files:
A Misc/NEWS.d/next/Security/2019-06-17-08-43-19.bpo-34631.pJ8CGR.rst
M PCbuild/get_externals.bat
M PCbuild/python.props
M PCbuild/readme.txt
…
[View More]diff --git a/Misc/NEWS.d/next/Security/2019-06-17-08-43-19.bpo-34631.pJ8CGR.rst b/Misc/NEWS.d/next/Security/2019-06-17-08-43-19.bpo-34631.pJ8CGR.rst
new file mode 100644
index 000000000000..41a972e9665a
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2019-06-17-08-43-19.bpo-34631.pJ8CGR.rst
@@ -0,0 +1 @@
+Updated OpenSSL to 1.0.2s in Windows installer
diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat
index ed6a79f11db6..f0a4b9946d86 100644
--- a/PCbuild/get_externals.bat
+++ b/PCbuild/get_externals.bat
@@ -47,7 +47,7 @@ rem files in both this dir and PC\VS9.0
set libraries=
set libraries=%libraries% bzip2-1.0.6
if NOT "%IncludeBsddb%"=="false" set libraries=%libraries% bsddb-4.7.25.0
-if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2q
+if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2s
set libraries=%libraries% sqlite-3.14.2.0
if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-8.5.19.0
if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tk-8.5.19.0
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 6673ff31368e..b3dc1da3dffd 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -35,7 +35,7 @@
<sqlite3Dir>$(ExternalsDir)sqlite-3.14.2.0\</sqlite3Dir>
<bz2Dir>$(ExternalsDir)bzip2-1.0.6\</bz2Dir>
<bsddbDir>$(ExternalsDir)bsddb-4.7.25.0</bsddbDir>
- <opensslDir>$(ExternalsDir)openssl-1.0.2q\</opensslDir>
+ <opensslDir>$(ExternalsDir)openssl-1.0.2s\</opensslDir>
<opensslIncludeDir>$(opensslDir)include32</opensslIncludeDir>
<opensslIncludeDir Condition="'$(ArchName)' == 'amd64'">$(opensslDir)include64</opensslIncludeDir>
<nasmDir>$(ExternalsDir)\nasm-2.11.06\</nasmDir>
diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt
index 556a8f25ca98..ab4b6d0760a7 100644
--- a/PCbuild/readme.txt
+++ b/PCbuild/readme.txt
@@ -192,7 +192,7 @@ _bz2
Homepage:
http://www.bzip.org/
_ssl
- Python wrapper for version 1.0.2o of the OpenSSL secure sockets
+ Python wrapper for version 1.0.2s of the OpenSSL secure sockets
library, which is built by ssl.vcxproj
Homepage:
http://www.openssl.org/
[View Less]
1
0

bpo-37288: Fix Windows build when --no-tkinter is specified (GH-14096)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/79d8204c4f02d02b3c6570de94c85863c2…
commit: 79d8204c4f02d02b3c6570de94c85863c27ddecb
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T08:43:35-07:00
summary:
bpo-37288: Fix Windows build when --no-tkinter is specified (GH-14096)
(cherry picked from commit 00f6493084c385033fe5574314223217d9a26672)
Co-authored-by: Paul Monson <paulmon(a)…
[View More]users.noreply.github.com>
files:
M PCbuild/python.vcxproj
diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj
index fdf8f12037aa..e37bcfb0b6e1 100644
--- a/PCbuild/python.vcxproj
+++ b/PCbuild/python.vcxproj
@@ -150,10 +150,10 @@ $(_PGOPath)
<LicenseFiles Include="$(PySourcePath)LICENSE;
$(PySourcePath)PC\crtlicense.txt;
$(bz2Dir)LICENSE;
- $(opensslOutDir)LICENSE;
- $(tcltkDir)tcllicense.terms;
+ $(opensslOutDir)LICENSE;" />
+ <LicenseFiles Include="$(tcltkDir)tcllicense.terms;
$(tcltkDir)tklicense.terms;
- $(tcltkDir)tixlicense.terms" />
+ $(tcltkDir)tixlicense.terms" Condition="$(IncludeTkinter)" />
<_LicenseFiles Include="@(LicenseFiles)">
<Content>$([System.IO.File]::ReadAllText(%(FullPath)))</Content>
</_LicenseFiles>
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/00f6493084c385033fe5574314223217d9…
commit: 00f6493084c385033fe5574314223217d9a26672
branch: master
author: Paul Monson <paulmon(a)users.noreply.github.com>
committer: Steve Dower <steve.dower(a)python.org>
date: 2019-06-17T08:21:28-07:00
summary:
bpo-37288: Fix Windows build when --no-tkinter is specified (GH-14096)
files:
M PCbuild/python.vcxproj
diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj
index fdf8f12037aa..…
[View More]e37bcfb0b6e1 100644
--- a/PCbuild/python.vcxproj
+++ b/PCbuild/python.vcxproj
@@ -150,10 +150,10 @@ $(_PGOPath)
<LicenseFiles Include="$(PySourcePath)LICENSE;
$(PySourcePath)PC\crtlicense.txt;
$(bz2Dir)LICENSE;
- $(opensslOutDir)LICENSE;
- $(tcltkDir)tcllicense.terms;
+ $(opensslOutDir)LICENSE;" />
+ <LicenseFiles Include="$(tcltkDir)tcllicense.terms;
$(tcltkDir)tklicense.terms;
- $(tcltkDir)tixlicense.terms" />
+ $(tcltkDir)tixlicense.terms" Condition="$(IncludeTkinter)" />
<_LicenseFiles Include="@(LicenseFiles)">
<Content>$([System.IO.File]::ReadAllText(%(FullPath)))</Content>
</_LicenseFiles>
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/5352cc41fa4eb5f0dc847709392e88473b…
commit: 5352cc41fa4eb5f0dc847709392e88473b8593b0
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T17:15:36+02:00
summary:
bpo-37194: Add PyObject_CallNoArgs() rationale (GH-14159)
Explain in the doc why PyObject_CallNoArgs() should be preferred over
other existing ways to call a function without any arguments.
files:
M Doc/c-api/…
[View More]object.rst
M Doc/whatsnew/3.9.rst
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index e4787ad39c08..13f13b3489b8 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -255,7 +255,8 @@ Object Protocol
.. c:function:: PyObject* PyObject_CallNoArgs(PyObject *callable)
- Call a callable Python object *callable* without any arguments.
+ Call a callable Python object *callable* without any arguments. It is the
+ most efficient way to call a callable Python object without any argument.
Return the result of the call on success, or raise an exception and return
*NULL* on failure.
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index c5cb626a1b6b..3da8b1685bde 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -103,7 +103,10 @@ Build and C API Changes
=======================
* Add a new public :c:func:`PyObject_CallNoArgs` function to the C API:
- call a callable Python object without any arguments.
+ call a callable Python object without any arguments. It is the most efficient
+ way to call a callable Python object without any argument.
+ (Contributed by Victor Stinner in :issue:`37194`.)
+
Deprecated
[View Less]
1
0

bpo-35431: Test math.comb() and math.perm() for OverflowError only on CPython. (GH-14146)
by Serhiy Storchaka June 17, 2019
by Serhiy Storchaka June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/1b8a46d59734a77cd1f5ffcf3bdfcaafd5…
commit: 1b8a46d59734a77cd1f5ffcf3bdfcaafd58a87e7
branch: master
author: Serhiy Storchaka <storchaka(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T16:58:32+03:00
summary:
bpo-35431: Test math.comb() and math.perm() for OverflowError only on CPython. (GH-14146)
Other implementation can raise MemoryError, but it can takes hours.
files:
M Lib/test/test_math.py
diff --git a/Lib/test/…
[View More]test_math.py b/Lib/test/test_math.py
index f25913941b8a..fa690441be43 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -525,7 +525,7 @@ def testFactorialNonIntegers(self):
# Other implementations may place different upper bounds.
@support.cpython_only
def testFactorialHugeInputs(self):
- # Currently raises ValueError for inputs that are too large
+ # Currently raises OverflowError for inputs that are too large
# to fit into a C long.
self.assertRaises(OverflowError, math.factorial, 10**100)
with self.assertWarns(DeprecationWarning):
@@ -1922,7 +1922,8 @@ def testPerm(self):
self.assertEqual(perm(n, 0), 1)
self.assertEqual(perm(n, 1), n)
self.assertEqual(perm(n, 2), n * (n-1))
- self.assertRaises((OverflowError, MemoryError), perm, n, n)
+ if support.check_impl_detail(cpython=True):
+ self.assertRaises(OverflowError, perm, n, n)
for n, k in (True, True), (True, False), (False, False):
self.assertEqual(perm(n, k), 1)
@@ -1991,7 +1992,8 @@ def testComb(self):
self.assertEqual(comb(n, n), 1)
self.assertEqual(comb(n, n-1), n)
self.assertEqual(comb(n, n-2), n * (n-1) // 2)
- self.assertRaises((OverflowError, MemoryError), comb, n, n//2)
+ if support.check_impl_detail(cpython=True):
+ self.assertRaises(OverflowError, comb, n, n//2)
for n, k in (True, True), (True, False), (False, False):
self.assertEqual(comb(n, k), 1)
[View Less]
1
0

bpo-37315: Deprecate accepting floats in math.factorial(). (GH-14147)
by Serhiy Storchaka June 17, 2019
by Serhiy Storchaka June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/231aad38493c871dd32930a21d256cbacd…
commit: 231aad38493c871dd32930a21d256cbacd2ae20c
branch: master
author: Serhiy Storchaka <storchaka(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T16:57:27+03:00
summary:
bpo-37315: Deprecate accepting floats in math.factorial(). (GH-14147)
files:
A Misc/NEWS.d/next/Library/2019-06-17-11-59-52.bpo-37315.o1xFC0.rst
M Doc/library/math.rst
M Doc/whatsnew/3.9.rst
M Lib/test/test_math.…
[View More]py
M Modules/mathmodule.c
diff --git a/Doc/library/math.rst b/Doc/library/math.rst
index ff937d27c6ce..bfce41a7f4c4 100644
--- a/Doc/library/math.rst
+++ b/Doc/library/math.rst
@@ -71,6 +71,9 @@ Number-theoretic and representation functions
Return *x* factorial as an integer. Raises :exc:`ValueError` if *x* is not integral or
is negative.
+ .. deprecated:: 3.9
+ Accepting floats with integral values (like ``5.0``) is deprecated.
+
.. function:: floor(x)
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 62b013f7721c..c5cb626a1b6b 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -109,6 +109,11 @@ Build and C API Changes
Deprecated
==========
+* Currently :func:`math.factorial` accepts :class:`float` instances with
+ non-negative integer values (like ``5.0``). It raises a :exc:`ValueError`
+ for non-integral and negative floats. It is deprecated now. In future
+ Python versions it will raise a :exc:`TypeError` for all floats.
+ (Contributed by Serhiy Storchaka in :issue:`37315`.)
Removed
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index adefa07a4041..f25913941b8a 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -501,21 +501,25 @@ def testFabs(self):
def testFactorial(self):
self.assertEqual(math.factorial(0), 1)
- self.assertEqual(math.factorial(0.0), 1)
total = 1
for i in range(1, 1000):
total *= i
self.assertEqual(math.factorial(i), total)
- self.assertEqual(math.factorial(float(i)), total)
self.assertEqual(math.factorial(i), py_factorial(i))
self.assertRaises(ValueError, math.factorial, -1)
- self.assertRaises(ValueError, math.factorial, -1.0)
self.assertRaises(ValueError, math.factorial, -10**100)
- self.assertRaises(ValueError, math.factorial, -1e100)
- self.assertRaises(ValueError, math.factorial, math.pi)
def testFactorialNonIntegers(self):
- self.assertRaises(TypeError, math.factorial, decimal.Decimal(5.2))
+ with self.assertWarns(DeprecationWarning):
+ self.assertEqual(math.factorial(5.0), 120)
+ with self.assertWarns(DeprecationWarning):
+ self.assertRaises(ValueError, math.factorial, 5.2)
+ with self.assertWarns(DeprecationWarning):
+ self.assertRaises(ValueError, math.factorial, -1.0)
+ with self.assertWarns(DeprecationWarning):
+ self.assertRaises(ValueError, math.factorial, -1e100)
+ self.assertRaises(TypeError, math.factorial, decimal.Decimal('5'))
+ self.assertRaises(TypeError, math.factorial, decimal.Decimal('5.2'))
self.assertRaises(TypeError, math.factorial, "5")
# Other implementations may place different upper bounds.
@@ -524,7 +528,8 @@ def testFactorialHugeInputs(self):
# Currently raises ValueError for inputs that are too large
# to fit into a C long.
self.assertRaises(OverflowError, math.factorial, 10**100)
- self.assertRaises(OverflowError, math.factorial, 1e100)
+ with self.assertWarns(DeprecationWarning):
+ self.assertRaises(OverflowError, math.factorial, 1e100)
def testFloor(self):
self.assertRaises(TypeError, math.floor)
diff --git a/Misc/NEWS.d/next/Library/2019-06-17-11-59-52.bpo-37315.o1xFC0.rst b/Misc/NEWS.d/next/Library/2019-06-17-11-59-52.bpo-37315.o1xFC0.rst
new file mode 100644
index 000000000000..fd5981989b7d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-17-11-59-52.bpo-37315.o1xFC0.rst
@@ -0,0 +1,2 @@
+Deprecated accepting floats with integral value (like ``5.0``) in
+:func:`math.factorial`.
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 82a9a14724f5..a75a3c929e7b 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -1981,6 +1981,12 @@ math_factorial(PyObject *module, PyObject *arg)
PyObject *result, *odd_part, *pyint_form;
if (PyFloat_Check(arg)) {
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "Using factorial() with floats is deprecated",
+ 1) < 0)
+ {
+ return NULL;
+ }
PyObject *lx;
double dx = PyFloat_AS_DOUBLE((PyFloatObject *)arg);
if (!(Py_IS_FINITE(dx) && dx == floor(dx))) {
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/71031cf4ed5ac9e330c8890b92379d9df3…
commit: 71031cf4ed5ac9e330c8890b92379d9df383925b
branch: 3.8
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T15:23:59+02:00
summary:
bpo-37194: Complete PyObject_CallXXX() docs (GH-14156) (GH-14157)
Mention explicitly that PyObject_CallXXX() functions raise an
exception an failure.
(cherry picked from commit 1ce2656f13e726b3b99d4c968926908cff1f460a)…
[View More]
files:
M Doc/c-api/object.rst
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index ce0d05942f4e..187a025a67cb 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -261,7 +261,8 @@ Object Protocol
*args* must not be *NULL*, use an empty tuple if no arguments are needed.
If no named arguments are needed, *kwargs* can be *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``callable(*args, **kwargs)``.
@@ -272,7 +273,8 @@ Object Protocol
Call a callable Python object *callable*, with arguments given by the
tuple *args*. If no arguments are needed, then *args* can be *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression: ``callable(*args)``.
@@ -283,7 +285,8 @@ Object Protocol
The C arguments are described using a :c:func:`Py_BuildValue` style format
string. The format can be *NULL*, indicating that no arguments are provided.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression: ``callable(*args)``.
@@ -302,7 +305,8 @@ Object Protocol
The format can be *NULL*, indicating that no arguments are provided.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``obj.name(arg1, arg2, ...)``.
@@ -320,7 +324,8 @@ Object Protocol
:c:type:`PyObject\*` arguments. The arguments are provided as a variable number
of parameters followed by *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``callable(arg1, arg2, ...)``.
@@ -331,7 +336,9 @@ Object Protocol
Calls a method of the Python object *obj*, where the name of the method is given as a
Python string object in *name*. It is called with a variable number of
:c:type:`PyObject\*` arguments. The arguments are provided as a variable number
- of parameters followed by *NULL*. Returns the result of the call on success, or
+ of parameters followed by *NULL*.
+
+ Return the result of the call on success, or raise an exception and return
*NULL* on failure.
@@ -355,7 +362,8 @@ Object Protocol
*kwnames* must contain only objects of type ``str`` (not a subclass),
and all keys must be unique.
- Return the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This uses the vectorcall protocol if the callable supports it;
otherwise, the arguments are converted to use
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/ac4202ee4d53d6c0a07109e03795b70d91…
commit: ac4202ee4d53d6c0a07109e03795b70d91edbbb3
branch: 3.7
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T15:23:52+02:00
summary:
bpo-37194: Complete PyObject_CallXXX() docs (GH-14156) (GH-14158)
Mention explicitly that PyObject_CallXXX() functions raise an
exception an failure.
(cherry picked from commit 1ce2656f13e726b3b99d4c968926908cff1f460a)…
[View More]
files:
M Doc/c-api/object.rst
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index a64ff2e6b58b..c09d97a66c01 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -261,7 +261,8 @@ Object Protocol
*args* must not be *NULL*, use an empty tuple if no arguments are needed.
If no named arguments are needed, *kwargs* can be *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``callable(*args, **kwargs)``.
@@ -272,7 +273,8 @@ Object Protocol
Call a callable Python object *callable*, with arguments given by the
tuple *args*. If no arguments are needed, then *args* can be *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression: ``callable(*args)``.
@@ -283,7 +285,8 @@ Object Protocol
The C arguments are described using a :c:func:`Py_BuildValue` style format
string. The format can be *NULL*, indicating that no arguments are provided.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression: ``callable(*args)``.
@@ -302,7 +305,8 @@ Object Protocol
The format can be *NULL*, indicating that no arguments are provided.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``obj.name(arg1, arg2, ...)``.
@@ -320,7 +324,8 @@ Object Protocol
:c:type:`PyObject\*` arguments. The arguments are provided as a variable number
of parameters followed by *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``callable(arg1, arg2, ...)``.
@@ -331,7 +336,9 @@ Object Protocol
Calls a method of the Python object *obj*, where the name of the method is given as a
Python string object in *name*. It is called with a variable number of
:c:type:`PyObject\*` arguments. The arguments are provided as a variable number
- of parameters followed by *NULL*. Returns the result of the call on success, or
+ of parameters followed by *NULL*.
+
+ Return the result of the call on success, or raise an exception and return
*NULL* on failure.
[View Less]
1
0

June 17, 2019
https://github.com/python/cpython/commit/1ce2656f13e726b3b99d4c968926908cff…
commit: 1ce2656f13e726b3b99d4c968926908cff1f460a
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T14:58:10+02:00
summary:
bpo-37194: Complete PyObject_CallXXX() docs (GH-14156)
Mention explicitly that PyObject_CallXXX() functions raise an
exception an failure.
files:
M Doc/c-api/object.rst
diff --git a/Doc/c-api/object.rst b/Doc/c-…
[View More]api/object.rst
index aecd001a216e..e4787ad39c08 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -257,7 +257,7 @@ Object Protocol
Call a callable Python object *callable* without any arguments.
- Returns the result of the call on success, or raise an exception and return
+ Return the result of the call on success, or raise an exception and return
*NULL* on failure.
.. versionadded:: 3.9
@@ -271,7 +271,8 @@ Object Protocol
*args* must not be *NULL*, use an empty tuple if no arguments are needed.
If no named arguments are needed, *kwargs* can be *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``callable(*args, **kwargs)``.
@@ -282,7 +283,8 @@ Object Protocol
Call a callable Python object *callable*, with arguments given by the
tuple *args*. If no arguments are needed, then *args* can be *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression: ``callable(*args)``.
@@ -293,7 +295,8 @@ Object Protocol
The C arguments are described using a :c:func:`Py_BuildValue` style format
string. The format can be *NULL*, indicating that no arguments are provided.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression: ``callable(*args)``.
@@ -312,7 +315,8 @@ Object Protocol
The format can be *NULL*, indicating that no arguments are provided.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``obj.name(arg1, arg2, ...)``.
@@ -330,7 +334,8 @@ Object Protocol
:c:type:`PyObject\*` arguments. The arguments are provided as a variable number
of parameters followed by *NULL*.
- Returns the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This is the equivalent of the Python expression:
``callable(arg1, arg2, ...)``.
@@ -341,7 +346,9 @@ Object Protocol
Calls a method of the Python object *obj*, where the name of the method is given as a
Python string object in *name*. It is called with a variable number of
:c:type:`PyObject\*` arguments. The arguments are provided as a variable number
- of parameters followed by *NULL*. Returns the result of the call on success, or
+ of parameters followed by *NULL*.
+
+ Return the result of the call on success, or raise an exception and return
*NULL* on failure.
@@ -365,7 +372,8 @@ Object Protocol
*kwnames* must contain only objects of type ``str`` (not a subclass),
and all keys must be unique.
- Return the result of the call on success, or *NULL* on failure.
+ Return the result of the call on success, or raise an exception and return
+ *NULL* on failure.
This uses the vectorcall protocol if the callable supports it;
otherwise, the arguments are converted to use
[View Less]
1
0

bpo-37194: Add a new public PyObject_CallNoArgs() function (GH-13890)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/2ff58a24e8a1c7e290d025d69ebaea0bbe…
commit: 2ff58a24e8a1c7e290d025d69ebaea0bbead3b8c
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T14:27:23+02:00
summary:
bpo-37194: Add a new public PyObject_CallNoArgs() function (GH-13890)
Add a new public PyObject_CallNoArgs() function to the C API: call a
callable Python object without any arguments.
It is the most efficient way …
[View More]to call a callback without any argument.
On x86-64, for example, PyObject_CallFunctionObjArgs(func, NULL)
allocates 960 bytes on the stack per call, whereas
PyObject_CallNoArgs(func) only allocates 624 bytes per call.
It is excluded from stable ABI 3.8.
Replace private _PyObject_CallNoArg() with public
PyObject_CallNoArgs() in C extensions: _asyncio, _datetime,
_elementtree, _pickle, _tkinter and readline.
files:
A Misc/NEWS.d/next/C API/2019-06-07-14-03-52.bpo-37194.uck7MD.rst
M Doc/c-api/object.rst
M Doc/whatsnew/3.9.rst
M Include/abstract.h
M Include/cpython/abstract.h
M Modules/_asynciomodule.c
M Modules/_datetimemodule.c
M Modules/_elementtree.c
M Modules/_pickle.c
M Modules/_tkinter.c
M Modules/readline.c
M Objects/call.c
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index ce0d05942f4e..aecd001a216e 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -253,6 +253,16 @@ Object Protocol
and ``0`` otherwise. This function always succeeds.
+.. c:function:: PyObject* PyObject_CallNoArgs(PyObject *callable)
+
+ Call a callable Python object *callable* without any arguments.
+
+ Returns the result of the call on success, or raise an exception and return
+ *NULL* on failure.
+
+ .. versionadded:: 3.9
+
+
.. c:function:: PyObject* PyObject_Call(PyObject *callable, PyObject *args, PyObject *kwargs)
Call a callable Python object *callable*, with arguments given by the
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index ed558385464a..62b013f7721c 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -102,6 +102,8 @@ Optimizations
Build and C API Changes
=======================
+* Add a new public :c:func:`PyObject_CallNoArgs` function to the C API:
+ call a callable Python object without any arguments.
Deprecated
diff --git a/Include/abstract.h b/Include/abstract.h
index c226aab9b730..f36fafb43c9e 100644
--- a/Include/abstract.h
+++ b/Include/abstract.h
@@ -141,6 +141,12 @@ extern "C" {
#endif
+#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
+/* Call a callable Python object without any arguments */
+PyAPI_FUNC(PyObject *) PyObject_CallNoArgs(PyObject *func);
+#endif
+
+
/* Call a callable Python object 'callable' with arguments given by the
tuple 'args' and keywords arguments given by the dictionary 'kwargs'.
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index d0369122287b..415f3e15f974 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -144,7 +144,9 @@ _PyObject_FastCall(PyObject *func, PyObject *const *args, Py_ssize_t nargs)
return _PyObject_Vectorcall(func, args, (size_t)nargs, NULL);
}
-/* Call a callable without any arguments */
+/* Call a callable without any arguments
+ Private static inline function variant of public function
+ PyObject_CallNoArgs(). */
static inline PyObject *
_PyObject_CallNoArg(PyObject *func) {
return _PyObject_Vectorcall(func, NULL, 0, NULL);
diff --git a/Misc/NEWS.d/next/C API/2019-06-07-14-03-52.bpo-37194.uck7MD.rst b/Misc/NEWS.d/next/C API/2019-06-07-14-03-52.bpo-37194.uck7MD.rst
new file mode 100644
index 000000000000..c15d3720b010
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2019-06-07-14-03-52.bpo-37194.uck7MD.rst
@@ -0,0 +1,6 @@
+Add a new public :c:func:`PyObject_CallNoArgs` function to the C API: call a
+callable Python object without any arguments. It is the most efficient way to
+call a callback without any argument. On x86-64, for example,
+``PyObject_CallFunctionObjArgs(func, NULL)`` allocates 960 bytes on the stack
+per call, whereas ``PyObject_CallNoArgs(func)`` only allocates 624 bytes per
+call.
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 281161b68611..4caf3a466469 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -216,7 +216,7 @@ get_future_loop(PyObject *fut)
return NULL;
}
if (getloop != NULL) {
- PyObject *res = _PyObject_CallNoArg(getloop);
+ PyObject *res = PyObject_CallNoArgs(getloop);
Py_DECREF(getloop);
return res;
}
@@ -328,7 +328,7 @@ get_event_loop(void)
return loop;
}
- policy = _PyObject_CallNoArg(asyncio_get_event_loop_policy);
+ policy = PyObject_CallNoArgs(asyncio_get_event_loop_policy);
if (policy == NULL) {
return NULL;
}
@@ -510,7 +510,7 @@ future_init(FutureObj *fut, PyObject *loop)
method, which is called during the interpreter shutdown and the
traceback module is already unloaded.
*/
- fut->fut_source_tb = _PyObject_CallNoArg(traceback_extract_stack);
+ fut->fut_source_tb = PyObject_CallNoArgs(traceback_extract_stack);
if (fut->fut_source_tb == NULL) {
return -1;
}
@@ -553,7 +553,7 @@ future_set_exception(FutureObj *fut, PyObject *exc)
}
if (PyExceptionClass_Check(exc)) {
- exc_val = _PyObject_CallNoArg(exc);
+ exc_val = PyObject_CallNoArgs(exc);
if (exc_val == NULL) {
return NULL;
}
@@ -2593,7 +2593,7 @@ task_step_impl(TaskObj *task, PyObject *exc)
if (!exc) {
/* exc was not a CancelledError */
- exc = _PyObject_CallNoArg(asyncio_CancelledError);
+ exc = PyObject_CallNoArgs(asyncio_CancelledError);
if (!exc) {
goto fail;
}
@@ -3308,7 +3308,7 @@ module_init(void)
PyObject *weak_set;
WITH_MOD("weakref")
GET_MOD_ATTR(weak_set, "WeakSet");
- all_tasks = _PyObject_CallNoArg(weak_set);
+ all_tasks = PyObject_CallNoArgs(weak_set);
Py_CLEAR(weak_set);
if (all_tasks == NULL) {
goto fail;
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index 4d3562cbe64f..2e0211cbbef8 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -1528,8 +1528,8 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
ntoappend = 1;
}
else if ((ch = *pin++) == '\0') {
- /* Null byte follows %, copy only '%'.
- *
+ /* Null byte follows %, copy only '%'.
+ *
* Back the pin up one char so that we catch the null check
* the next time through the loop.*/
pin--;
@@ -1619,7 +1619,7 @@ wrap_strftime(PyObject *object, PyObject *format, PyObject *timetuple,
usednew += ntoappend;
assert(usednew <= totalnew);
} /* end while() */
-
+
if (_PyBytes_Resize(&newfmt, usednew) < 0)
goto Done;
{
@@ -3607,7 +3607,7 @@ tzinfo_reduce(PyObject *self, PyObject *Py_UNUSED(ignored))
getinitargs = _PyObject_GetAttrId(self, &PyId___getinitargs__);
if (getinitargs != NULL) {
- args = _PyObject_CallNoArg(getinitargs);
+ args = PyObject_CallNoArgs(getinitargs);
Py_DECREF(getinitargs);
if (args == NULL) {
return NULL;
@@ -3624,7 +3624,7 @@ tzinfo_reduce(PyObject *self, PyObject *Py_UNUSED(ignored))
getstate = _PyObject_GetAttrId(self, &PyId___getstate__);
if (getstate != NULL) {
- state = _PyObject_CallNoArg(getstate);
+ state = PyObject_CallNoArgs(getstate);
Py_DECREF(getstate);
if (state == NULL) {
Py_DECREF(args);
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index 8119c8b1e2b1..ee1b5e5882fa 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -3892,7 +3892,7 @@ _elementtree_XMLParser_close_impl(XMLParserObject *self)
}
else if (self->handle_close) {
Py_DECREF(res);
- return _PyObject_CallNoArg(self->handle_close);
+ return PyObject_CallNoArgs(self->handle_close);
}
else {
return res;
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index 34e11bd5f820..3adece0f0012 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -1274,7 +1274,7 @@ _Unpickler_ReadFromFile(UnpicklerObject *self, Py_ssize_t n)
return -1;
if (n == READ_WHOLE_LINE) {
- data = _PyObject_CallNoArg(self->readline);
+ data = PyObject_CallNoArgs(self->readline);
}
else {
PyObject *len;
@@ -4411,7 +4411,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
/* Check for a __reduce__ method. */
reduce_func = _PyObject_GetAttrId(obj, &PyId___reduce__);
if (reduce_func != NULL) {
- reduce_value = _PyObject_CallNoArg(reduce_func);
+ reduce_value = PyObject_CallNoArgs(reduce_func);
}
else {
PyErr_Format(st->PicklingError,
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 613a95b08972..a832099c0950 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -2768,7 +2768,7 @@ TimerHandler(ClientData clientData)
ENTER_PYTHON
- res = _PyObject_CallNoArg(func);
+ res = PyObject_CallNoArgs(func);
Py_DECREF(func);
Py_DECREF(v); /* See Tktt_New() */
diff --git a/Modules/readline.c b/Modules/readline.c
index 57335fe911bf..930e63975c5c 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -867,7 +867,7 @@ on_hook(PyObject *func)
int result = 0;
if (func != NULL) {
PyObject *r;
- r = _PyObject_CallNoArg(func);
+ r = PyObject_CallNoArgs(func);
if (r == NULL)
goto error;
if (r == Py_None)
diff --git a/Objects/call.c b/Objects/call.c
index 5bef9f566e8f..f9a3207e9622 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -70,6 +70,14 @@ _Py_CheckFunctionResult(PyObject *callable, PyObject *result, const char *where)
/* --- Core PyObject call functions ------------------------------- */
+/* Call a callable Python object without any arguments */
+PyObject *
+PyObject_CallNoArgs(PyObject *func)
+{
+ return _PyObject_CallNoArg(func);
+}
+
+
PyObject *
_PyObject_FastCallDict(PyObject *callable, PyObject *const *args,
size_t nargsf, PyObject *kwargs)
[View Less]
1
0

bpo-37312: Remove _dummy_thread and dummy_threading modules (GH-14143)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/8bf08ee45b7c2341f0d0175b91892843a3…
commit: 8bf08ee45b7c2341f0d0175b91892843a37c23da
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T14:18:43+02:00
summary:
bpo-37312: Remove _dummy_thread and dummy_threading modules (GH-14143)
Remove _dummy_thread and dummy_threading modules. These modules
were deprecated since Python 3.7 which requires threading support.
files:
A …
[View More]Misc/NEWS.d/next/Library/2019-06-17-10-03-52.bpo-37312.qKvBfF.rst
D Doc/library/_dummy_thread.rst
D Doc/library/dummy_threading.rst
D Lib/_dummy_thread.py
D Lib/dummy_threading.py
D Lib/test/test_dummy_thread.py
D Lib/test/test_dummy_threading.py
M Doc/library/concurrency.rst
M Doc/whatsnew/3.9.rst
M PCbuild/lib.pyproj
diff --git a/Doc/library/_dummy_thread.rst b/Doc/library/_dummy_thread.rst
deleted file mode 100644
index 7dccbc55475a..000000000000
--- a/Doc/library/_dummy_thread.rst
+++ /dev/null
@@ -1,22 +0,0 @@
-:mod:`_dummy_thread` --- Drop-in replacement for the :mod:`_thread` module
-==========================================================================
-
-.. module:: _dummy_thread
- :synopsis: Drop-in replacement for the _thread module.
-
-**Source code:** :source:`Lib/_dummy_thread.py`
-
-.. deprecated:: 3.7
- Python now always has threading enabled. Please use :mod:`_thread`
- (or, better, :mod:`threading`) instead.
-
---------------
-
-This module provides a duplicate interface to the :mod:`_thread` module.
-It was meant to be imported when the :mod:`_thread` module was not provided
-on a platform.
-
-Be careful to not use this module where deadlock might occur from a thread being
-created that blocks waiting for another thread to be created. This often occurs
-with blocking I/O.
-
diff --git a/Doc/library/concurrency.rst b/Doc/library/concurrency.rst
index 39cd9ff48265..b150990b83b7 100644
--- a/Doc/library/concurrency.rst
+++ b/Doc/library/concurrency.rst
@@ -28,5 +28,3 @@ The following are support modules for some of the above services:
.. toctree::
_thread.rst
- _dummy_thread.rst
- dummy_threading.rst
diff --git a/Doc/library/dummy_threading.rst b/Doc/library/dummy_threading.rst
deleted file mode 100644
index dfc3289abb15..000000000000
--- a/Doc/library/dummy_threading.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-:mod:`dummy_threading` --- Drop-in replacement for the :mod:`threading` module
-==============================================================================
-
-.. module:: dummy_threading
- :synopsis: Drop-in replacement for the threading module.
-
-**Source code:** :source:`Lib/dummy_threading.py`
-
-.. deprecated:: 3.7
- Python now always has threading enabled. Please use :mod:`threading` instead.
-
---------------
-
-This module provides a duplicate interface to the :mod:`threading` module.
-It was meant to be imported when the :mod:`_thread` module was not provided
-on a platform.
-
-Be careful to not use this module where deadlock might occur from a thread being
-created that blocks waiting for another thread to be created. This often occurs
-with blocking I/O.
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index ef30743b708d..ed558385464a 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -112,6 +112,9 @@ Deprecated
Removed
=======
+``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
+modules were deprecated since Python 3.7 which requires threading support.
+(Contributed by Victor Stinner in :issue:`37312`.)
Porting to Python 3.9
diff --git a/Lib/_dummy_thread.py b/Lib/_dummy_thread.py
deleted file mode 100644
index 6af68e53a335..000000000000
--- a/Lib/_dummy_thread.py
+++ /dev/null
@@ -1,197 +0,0 @@
-"""Drop-in replacement for the thread module.
-
-Meant to be used as a brain-dead substitute so that threaded code does
-not need to be rewritten for when the thread module is not present.
-
-Suggested usage is::
-
- try:
- import _thread
- except ImportError:
- import _dummy_thread as _thread
-
-"""
-# Exports only things specified by thread documentation;
-# skipping obsolete synonyms allocate(), start_new(), exit_thread().
-__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock',
- 'interrupt_main', 'LockType', 'RLock']
-
-# A dummy value
-TIMEOUT_MAX = 2**31
-
-# NOTE: this module can be imported early in the extension building process,
-# and so top level imports of other modules should be avoided. Instead, all
-# imports are done when needed on a function-by-function basis. Since threads
-# are disabled, the import lock should not be an issue anyway (??).
-
-error = RuntimeError
-
-def start_new_thread(function, args, kwargs={}):
- """Dummy implementation of _thread.start_new_thread().
-
- Compatibility is maintained by making sure that ``args`` is a
- tuple and ``kwargs`` is a dictionary. If an exception is raised
- and it is SystemExit (which can be done by _thread.exit()) it is
- caught and nothing is done; all other exceptions are printed out
- by using traceback.print_exc().
-
- If the executed function calls interrupt_main the KeyboardInterrupt will be
- raised when the function returns.
-
- """
- if type(args) != type(tuple()):
- raise TypeError("2nd arg must be a tuple")
- if type(kwargs) != type(dict()):
- raise TypeError("3rd arg must be a dict")
- global _main
- _main = False
- try:
- function(*args, **kwargs)
- except SystemExit:
- pass
- except:
- import traceback
- traceback.print_exc()
- _main = True
- global _interrupt
- if _interrupt:
- _interrupt = False
- raise KeyboardInterrupt
-
-def exit():
- """Dummy implementation of _thread.exit()."""
- raise SystemExit
-
-def get_ident():
- """Dummy implementation of _thread.get_ident().
-
- Since this module should only be used when _threadmodule is not
- available, it is safe to assume that the current process is the
- only thread. Thus a constant can be safely returned.
- """
- return 1
-
-def allocate_lock():
- """Dummy implementation of _thread.allocate_lock()."""
- return LockType()
-
-def stack_size(size=None):
- """Dummy implementation of _thread.stack_size()."""
- if size is not None:
- raise error("setting thread stack size not supported")
- return 0
-
-def _set_sentinel():
- """Dummy implementation of _thread._set_sentinel()."""
- return LockType()
-
-class LockType(object):
- """Class implementing dummy implementation of _thread.LockType.
-
- Compatibility is maintained by maintaining self.locked_status
- which is a boolean that stores the state of the lock. Pickling of
- the lock, though, should not be done since if the _thread module is
- then used with an unpickled ``lock()`` from here problems could
- occur from this class not having atomic methods.
-
- """
-
- def __init__(self):
- self.locked_status = False
-
- def acquire(self, waitflag=None, timeout=-1):
- """Dummy implementation of acquire().
-
- For blocking calls, self.locked_status is automatically set to
- True and returned appropriately based on value of
- ``waitflag``. If it is non-blocking, then the value is
- actually checked and not set if it is already acquired. This
- is all done so that threading.Condition's assert statements
- aren't triggered and throw a little fit.
-
- """
- if waitflag is None or waitflag:
- self.locked_status = True
- return True
- else:
- if not self.locked_status:
- self.locked_status = True
- return True
- else:
- if timeout > 0:
- import time
- time.sleep(timeout)
- return False
-
- __enter__ = acquire
-
- def __exit__(self, typ, val, tb):
- self.release()
-
- def release(self):
- """Release the dummy lock."""
- # XXX Perhaps shouldn't actually bother to test? Could lead
- # to problems for complex, threaded code.
- if not self.locked_status:
- raise error
- self.locked_status = False
- return True
-
- def locked(self):
- return self.locked_status
-
- def __repr__(self):
- return "<%s %s.%s object at %s>" % (
- "locked" if self.locked_status else "unlocked",
- self.__class__.__module__,
- self.__class__.__qualname__,
- hex(id(self))
- )
-
-
-class RLock(LockType):
- """Dummy implementation of threading._RLock.
-
- Re-entrant lock can be aquired multiple times and needs to be released
- just as many times. This dummy implemention does not check wheter the
- current thread actually owns the lock, but does accounting on the call
- counts.
- """
- def __init__(self):
- super().__init__()
- self._levels = 0
-
- def acquire(self, waitflag=None, timeout=-1):
- """Aquire the lock, can be called multiple times in succession.
- """
- locked = super().acquire(waitflag, timeout)
- if locked:
- self._levels += 1
- return locked
-
- def release(self):
- """Release needs to be called once for every call to acquire().
- """
- if self._levels == 0:
- raise error
- if self._levels == 1:
- super().release()
- self._levels -= 1
-
-# Used to signal that interrupt_main was called in a "thread"
-_interrupt = False
-# True when not executing in a "thread"
-_main = True
-
-def interrupt_main():
- """Set _interrupt flag to True to have start_new_thread raise
- KeyboardInterrupt upon exiting."""
- if _main:
- raise KeyboardInterrupt
- else:
- global _interrupt
- _interrupt = True
-
-
-def _is_main_interpreter():
- return True
diff --git a/Lib/dummy_threading.py b/Lib/dummy_threading.py
deleted file mode 100644
index 1bb7eee338af..000000000000
--- a/Lib/dummy_threading.py
+++ /dev/null
@@ -1,78 +0,0 @@
-"""Faux ``threading`` version using ``dummy_thread`` instead of ``thread``.
-
-The module ``_dummy_threading`` is added to ``sys.modules`` in order
-to not have ``threading`` considered imported. Had ``threading`` been
-directly imported it would have made all subsequent imports succeed
-regardless of whether ``_thread`` was available which is not desired.
-
-"""
-from sys import modules as sys_modules
-
-import _dummy_thread
-
-# Declaring now so as to not have to nest ``try``s to get proper clean-up.
-holding_thread = False
-holding_threading = False
-holding__threading_local = False
-
-try:
- # Could have checked if ``_thread`` was not in sys.modules and gone
- # a different route, but decided to mirror technique used with
- # ``threading`` below.
- if '_thread' in sys_modules:
- held_thread = sys_modules['_thread']
- holding_thread = True
- # Must have some module named ``_thread`` that implements its API
- # in order to initially import ``threading``.
- sys_modules['_thread'] = sys_modules['_dummy_thread']
-
- if 'threading' in sys_modules:
- # If ``threading`` is already imported, might as well prevent
- # trying to import it more than needed by saving it if it is
- # already imported before deleting it.
- held_threading = sys_modules['threading']
- holding_threading = True
- del sys_modules['threading']
-
- if '_threading_local' in sys_modules:
- # If ``_threading_local`` is already imported, might as well prevent
- # trying to import it more than needed by saving it if it is
- # already imported before deleting it.
- held__threading_local = sys_modules['_threading_local']
- holding__threading_local = True
- del sys_modules['_threading_local']
-
- import threading
- # Need a copy of the code kept somewhere...
- sys_modules['_dummy_threading'] = sys_modules['threading']
- del sys_modules['threading']
- sys_modules['_dummy__threading_local'] = sys_modules['_threading_local']
- del sys_modules['_threading_local']
- from _dummy_threading import *
- from _dummy_threading import __all__
-
-finally:
- # Put back ``threading`` if we overwrote earlier
-
- if holding_threading:
- sys_modules['threading'] = held_threading
- del held_threading
- del holding_threading
-
- # Put back ``_threading_local`` if we overwrote earlier
-
- if holding__threading_local:
- sys_modules['_threading_local'] = held__threading_local
- del held__threading_local
- del holding__threading_local
-
- # Put back ``thread`` if we overwrote, else del the entry we made
- if holding_thread:
- sys_modules['_thread'] = held_thread
- del held_thread
- else:
- del sys_modules['_thread']
- del holding_thread
-
- del _dummy_thread
- del sys_modules
diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py
deleted file mode 100644
index 0f56fcf97336..000000000000
--- a/Lib/test/test_dummy_thread.py
+++ /dev/null
@@ -1,276 +0,0 @@
-import _dummy_thread as _thread
-import time
-import queue
-import random
-import unittest
-from test import support
-from unittest import mock
-
-DELAY = 0
-
-
-class LockTests(unittest.TestCase):
- """Test lock objects."""
-
- def setUp(self):
- # Create a lock
- self.lock = _thread.allocate_lock()
-
- def test_initlock(self):
- #Make sure locks start locked
- self.assertFalse(self.lock.locked(),
- "Lock object is not initialized unlocked.")
-
- def test_release(self):
- # Test self.lock.release()
- self.lock.acquire()
- self.lock.release()
- self.assertFalse(self.lock.locked(),
- "Lock object did not release properly.")
-
- def test_LockType_context_manager(self):
- with _thread.LockType():
- pass
- self.assertFalse(self.lock.locked(),
- "Acquired Lock was not released")
-
- def test_improper_release(self):
- #Make sure release of an unlocked thread raises RuntimeError
- self.assertRaises(RuntimeError, self.lock.release)
-
- def test_cond_acquire_success(self):
- #Make sure the conditional acquiring of the lock works.
- self.assertTrue(self.lock.acquire(0),
- "Conditional acquiring of the lock failed.")
-
- def test_cond_acquire_fail(self):
- #Test acquiring locked lock returns False
- self.lock.acquire(0)
- self.assertFalse(self.lock.acquire(0),
- "Conditional acquiring of a locked lock incorrectly "
- "succeeded.")
-
- def test_uncond_acquire_success(self):
- #Make sure unconditional acquiring of a lock works.
- self.lock.acquire()
- self.assertTrue(self.lock.locked(),
- "Uncondional locking failed.")
-
- def test_uncond_acquire_return_val(self):
- #Make sure that an unconditional locking returns True.
- self.assertIs(self.lock.acquire(1), True,
- "Unconditional locking did not return True.")
- self.assertIs(self.lock.acquire(), True)
-
- def test_uncond_acquire_blocking(self):
- #Make sure that unconditional acquiring of a locked lock blocks.
- def delay_unlock(to_unlock, delay):
- """Hold on to lock for a set amount of time before unlocking."""
- time.sleep(delay)
- to_unlock.release()
-
- self.lock.acquire()
- start_time = int(time.monotonic())
- _thread.start_new_thread(delay_unlock,(self.lock, DELAY))
- if support.verbose:
- print()
- print("*** Waiting for thread to release the lock "\
- "(approx. %s sec.) ***" % DELAY)
- self.lock.acquire()
- end_time = int(time.monotonic())
- if support.verbose:
- print("done")
- self.assertGreaterEqual(end_time - start_time, DELAY,
- "Blocking by unconditional acquiring failed.")
-
- @mock.patch('time.sleep')
- def test_acquire_timeout(self, mock_sleep):
- """Test invoking acquire() with a positive timeout when the lock is
- already acquired. Ensure that time.sleep() is invoked with the given
- timeout and that False is returned."""
-
- self.lock.acquire()
- retval = self.lock.acquire(waitflag=0, timeout=1)
- self.assertTrue(mock_sleep.called)
- mock_sleep.assert_called_once_with(1)
- self.assertEqual(retval, False)
-
- def test_lock_representation(self):
- self.lock.acquire()
- self.assertIn("locked", repr(self.lock))
- self.lock.release()
- self.assertIn("unlocked", repr(self.lock))
-
-
-class RLockTests(unittest.TestCase):
- """Test dummy RLock objects."""
-
- def setUp(self):
- self.rlock = _thread.RLock()
-
- def test_multiple_acquire(self):
- self.assertIn("unlocked", repr(self.rlock))
- self.rlock.acquire()
- self.rlock.acquire()
- self.assertIn("locked", repr(self.rlock))
- self.rlock.release()
- self.assertIn("locked", repr(self.rlock))
- self.rlock.release()
- self.assertIn("unlocked", repr(self.rlock))
- self.assertRaises(RuntimeError, self.rlock.release)
-
-
-class MiscTests(unittest.TestCase):
- """Miscellaneous tests."""
-
- def test_exit(self):
- self.assertRaises(SystemExit, _thread.exit)
-
- def test_ident(self):
- self.assertIsInstance(_thread.get_ident(), int,
- "_thread.get_ident() returned a non-integer")
- self.assertGreater(_thread.get_ident(), 0)
-
- def test_LockType(self):
- self.assertIsInstance(_thread.allocate_lock(), _thread.LockType,
- "_thread.LockType is not an instance of what "
- "is returned by _thread.allocate_lock()")
-
- def test_set_sentinel(self):
- self.assertIsInstance(_thread._set_sentinel(), _thread.LockType,
- "_thread._set_sentinel() did not return a "
- "LockType instance.")
-
- def test_interrupt_main(self):
- #Calling start_new_thread with a function that executes interrupt_main
- # should raise KeyboardInterrupt upon completion.
- def call_interrupt():
- _thread.interrupt_main()
-
- self.assertRaises(KeyboardInterrupt,
- _thread.start_new_thread,
- call_interrupt,
- tuple())
-
- def test_interrupt_in_main(self):
- self.assertRaises(KeyboardInterrupt, _thread.interrupt_main)
-
- def test_stack_size_None(self):
- retval = _thread.stack_size(None)
- self.assertEqual(retval, 0)
-
- def test_stack_size_not_None(self):
- with self.assertRaises(_thread.error) as cm:
- _thread.stack_size("")
- self.assertEqual(cm.exception.args[0],
- "setting thread stack size not supported")
-
-
-class ThreadTests(unittest.TestCase):
- """Test thread creation."""
-
- def test_arg_passing(self):
- #Make sure that parameter passing works.
- def arg_tester(queue, arg1=False, arg2=False):
- """Use to test _thread.start_new_thread() passes args properly."""
- queue.put((arg1, arg2))
-
- testing_queue = queue.Queue(1)
- _thread.start_new_thread(arg_tester, (testing_queue, True, True))
- result = testing_queue.get()
- self.assertTrue(result[0] and result[1],
- "Argument passing for thread creation "
- "using tuple failed")
-
- _thread.start_new_thread(
- arg_tester,
- tuple(),
- {'queue':testing_queue, 'arg1':True, 'arg2':True})
-
- result = testing_queue.get()
- self.assertTrue(result[0] and result[1],
- "Argument passing for thread creation "
- "using kwargs failed")
-
- _thread.start_new_thread(
- arg_tester,
- (testing_queue, True),
- {'arg2':True})
-
- result = testing_queue.get()
- self.assertTrue(result[0] and result[1],
- "Argument passing for thread creation using both tuple"
- " and kwargs failed")
-
- def test_multi_thread_creation(self):
- def queue_mark(queue, delay):
- time.sleep(delay)
- queue.put(_thread.get_ident())
-
- thread_count = 5
- testing_queue = queue.Queue(thread_count)
-
- if support.verbose:
- print()
- print("*** Testing multiple thread creation "
- "(will take approx. %s to %s sec.) ***" % (
- DELAY, thread_count))
-
- for count in range(thread_count):
- if DELAY:
- local_delay = round(random.random(), 1)
- else:
- local_delay = 0
- _thread.start_new_thread(queue_mark,
- (testing_queue, local_delay))
- time.sleep(DELAY)
- if support.verbose:
- print('done')
- self.assertEqual(testing_queue.qsize(), thread_count,
- "Not all %s threads executed properly "
- "after %s sec." % (thread_count, DELAY))
-
- def test_args_not_tuple(self):
- """
- Test invoking start_new_thread() with a non-tuple value for "args".
- Expect TypeError with a meaningful error message to be raised.
- """
- with self.assertRaises(TypeError) as cm:
- _thread.start_new_thread(mock.Mock(), [])
- self.assertEqual(cm.exception.args[0], "2nd arg must be a tuple")
-
- def test_kwargs_not_dict(self):
- """
- Test invoking start_new_thread() with a non-dict value for "kwargs".
- Expect TypeError with a meaningful error message to be raised.
- """
- with self.assertRaises(TypeError) as cm:
- _thread.start_new_thread(mock.Mock(), tuple(), kwargs=[])
- self.assertEqual(cm.exception.args[0], "3rd arg must be a dict")
-
- def test_SystemExit(self):
- """
- Test invoking start_new_thread() with a function that raises
- SystemExit.
- The exception should be discarded.
- """
- func = mock.Mock(side_effect=SystemExit())
- try:
- _thread.start_new_thread(func, tuple())
- except SystemExit:
- self.fail("start_new_thread raised SystemExit.")
-
- @mock.patch('traceback.print_exc')
- def test_RaiseException(self, mock_print_exc):
- """
- Test invoking start_new_thread() with a function that raises exception.
-
- The exception should be discarded and the traceback should be printed
- via traceback.print_exc()
- """
- func = mock.Mock(side_effect=Exception)
- _thread.start_new_thread(func, tuple())
- self.assertTrue(mock_print_exc.called)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/Lib/test/test_dummy_threading.py b/Lib/test/test_dummy_threading.py
deleted file mode 100644
index a0c2972a60e9..000000000000
--- a/Lib/test/test_dummy_threading.py
+++ /dev/null
@@ -1,60 +0,0 @@
-from test import support
-import unittest
-import dummy_threading as _threading
-import time
-
-class DummyThreadingTestCase(unittest.TestCase):
-
- class TestThread(_threading.Thread):
-
- def run(self):
- global running
- global sema
- global mutex
- # Uncomment if testing another module, such as the real 'threading'
- # module.
- #delay = random.random() * 2
- delay = 0
- if support.verbose:
- print('task', self.name, 'will run for', delay, 'sec')
- sema.acquire()
- mutex.acquire()
- running += 1
- if support.verbose:
- print(running, 'tasks are running')
- mutex.release()
- time.sleep(delay)
- if support.verbose:
- print('task', self.name, 'done')
- mutex.acquire()
- running -= 1
- if support.verbose:
- print(self.name, 'is finished.', running, 'tasks are running')
- mutex.release()
- sema.release()
-
- def setUp(self):
- self.numtasks = 10
- global sema
- sema = _threading.BoundedSemaphore(value=3)
- global mutex
- mutex = _threading.RLock()
- global running
- running = 0
- self.threads = []
-
- def test_tasks(self):
- for i in range(self.numtasks):
- t = self.TestThread(name="<thread %d>"%i)
- self.threads.append(t)
- t.start()
-
- if support.verbose:
- print('waiting for all tasks to complete')
- for t in self.threads:
- t.join()
- if support.verbose:
- print('all tasks done')
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2019-06-17-10-03-52.bpo-37312.qKvBfF.rst b/Misc/NEWS.d/next/Library/2019-06-17-10-03-52.bpo-37312.qKvBfF.rst
new file mode 100644
index 000000000000..eaaa0daf02b8
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-17-10-03-52.bpo-37312.qKvBfF.rst
@@ -0,0 +1,2 @@
+``_dummy_thread`` and ``dummy_threading`` modules have been removed. These
+modules were deprecated since Python 3.7 which requires threading support.
diff --git a/PCbuild/lib.pyproj b/PCbuild/lib.pyproj
index 7ed71bd819cb..683335e04489 100644
--- a/PCbuild/lib.pyproj
+++ b/PCbuild/lib.pyproj
@@ -250,7 +250,6 @@
<Compile Include="distutils\_msvccompiler.py" />
<Compile Include="distutils\__init__.py" />
<Compile Include="doctest.py" />
- <Compile Include="dummy_threading.py" />
<Compile Include="email\base64mime.py" />
<Compile Include="email\charset.py" />
<Compile Include="email\contentmanager.py" />
@@ -976,8 +975,6 @@
<Compile Include="test\test_doctest2.py" />
<Compile Include="test\test_docxmlrpc.py" />
<Compile Include="test\test_dtrace.py" />
- <Compile Include="test\test_dummy_thread.py" />
- <Compile Include="test\test_dummy_threading.py" />
<Compile Include="test\test_dynamic.py" />
<Compile Include="test\test_dynamicclassattribute.py" />
<Compile Include="test\test_eintr.py" />
@@ -1564,7 +1561,6 @@
<Compile Include="_collections_abc.py" />
<Compile Include="_compat_pickle.py" />
<Compile Include="_compression.py" />
- <Compile Include="_dummy_thread.py" />
<Compile Include="_markupbase.py" />
<Compile Include="_osx_support.py" />
<Compile Include="_pydecimal.py" />
[View Less]
1
0

bpo-36922: use Py_TPFLAGS_METHOD_DESCRIPTOR in lookup_maybe_method() (GH-13865)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/988fff5d0e7fccecbf776c08ec56695820…
commit: 988fff5d0e7fccecbf776c08ec56695820b3b4a8
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T05:12:42-07:00
summary:
bpo-36922: use Py_TPFLAGS_METHOD_DESCRIPTOR in lookup_maybe_method() (GH-13865)
(cherry picked from commit 2e9954d3472a23919b96323fcd5bb6c1d6927155)
Co-authored-by: Jeroen Demeyer &…
[View More]lt;J.Demeyer(a)UGent.be>
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst
M Lib/test/test_descr.py
M Objects/typeobject.c
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 6b018ccc56fa..9998a3cc77a2 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4647,9 +4647,11 @@ class Foo:
def test_mixing_slot_wrappers(self):
class X(dict):
__setattr__ = dict.__setitem__
+ __neg__ = dict.copy
x = X()
x.y = 42
self.assertEqual(x["y"], 42)
+ self.assertEqual(x, -x)
def test_slot_shadows_class_variable(self):
with self.assertRaises(ValueError) as cm:
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst
new file mode 100644
index 000000000000..c2a2ad4e8e73
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst
@@ -0,0 +1 @@
+Slot functions optimize any callable with ``Py_TPFLAGS_METHOD_DESCRIPTOR`` instead of only instances of ``function``.
\ No newline at end of file
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 006df8d1f090..01e95aea61af 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1412,7 +1412,7 @@ lookup_maybe_method(PyObject *self, _Py_Identifier *attrid, int *unbound)
return NULL;
}
- if (PyFunction_Check(res)) {
+ if (PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
/* Avoid temporary PyMethodObject */
*unbound = 1;
Py_INCREF(res);
[View Less]
1
0

bpo-36922: use Py_TPFLAGS_METHOD_DESCRIPTOR in lookup_maybe_method() (GH-13865)
by Inada Naoki June 17, 2019
by Inada Naoki June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/2e9954d3472a23919b96323fcd5bb6c1d6…
commit: 2e9954d3472a23919b96323fcd5bb6c1d6927155
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-17T20:53:20+09:00
summary:
bpo-36922: use Py_TPFLAGS_METHOD_DESCRIPTOR in lookup_maybe_method() (GH-13865)
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst
M Lib/test/test_descr.py
M Objects/…
[View More]typeobject.c
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 301a2d2a0fd2..0b43549efb83 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4647,9 +4647,11 @@ class Foo:
def test_mixing_slot_wrappers(self):
class X(dict):
__setattr__ = dict.__setitem__
+ __neg__ = dict.copy
x = X()
x.y = 42
self.assertEqual(x["y"], 42)
+ self.assertEqual(x, -x)
def test_slot_shadows_class_variable(self):
with self.assertRaises(ValueError) as cm:
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst
new file mode 100644
index 000000000000..c2a2ad4e8e73
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-06-13-59-52.bpo-36922.EMZ3TF.rst
@@ -0,0 +1 @@
+Slot functions optimize any callable with ``Py_TPFLAGS_METHOD_DESCRIPTOR`` instead of only instances of ``function``.
\ No newline at end of file
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index ba128a90778c..e4952511e33a 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1412,7 +1412,7 @@ lookup_maybe_method(PyObject *self, _Py_Identifier *attrid, int *unbound)
return NULL;
}
- if (PyFunction_Check(res)) {
+ if (PyType_HasFeature(Py_TYPE(res), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
/* Avoid temporary PyMethodObject */
*unbound = 1;
Py_INCREF(res);
[View Less]
1
0
https://github.com/python/cpython/commit/0456df4a55ec9a4e8f4425df92bbe63a29…
commit: 0456df4a55ec9a4e8f4425df92bbe63a290f3f2f
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-17T20:41:32+09:00
summary:
bpo-37231: remove _PyObject_FastCall_Prepend (GH-14153)
files:
M Include/cpython/abstract.h
M Objects/call.c
diff --git a/Include/cpython/abstract.h b/Include/cpython/abstract.h
index 7ab2045923d8..…
[View More]d0369122287b 100644
--- a/Include/cpython/abstract.h
+++ b/Include/cpython/abstract.h
@@ -156,12 +156,6 @@ PyAPI_FUNC(PyObject *) _PyObject_Call_Prepend(
PyObject *args,
PyObject *kwargs);
-PyAPI_FUNC(PyObject *) _PyObject_FastCall_Prepend(
- PyObject *callable,
- PyObject *obj,
- PyObject *const *args,
- Py_ssize_t nargs);
-
/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
as the method name. */
PyAPI_FUNC(PyObject *) _PyObject_CallMethodId(PyObject *obj,
diff --git a/Objects/call.c b/Objects/call.c
index 8eae1e10d8c5..5bef9f566e8f 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -837,42 +837,6 @@ PyObject_CallObject(PyObject *callable, PyObject *args)
}
-/* Positional arguments are obj followed by args:
- call callable(obj, *args, **kwargs) */
-PyObject *
-_PyObject_FastCall_Prepend(PyObject *callable, PyObject *obj,
- PyObject *const *args, Py_ssize_t nargs)
-{
- PyObject *small_stack[_PY_FASTCALL_SMALL_STACK];
- PyObject **args2;
- PyObject *result;
-
- nargs++;
- if (nargs <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
- args2 = small_stack;
- }
- else {
- args2 = PyMem_Malloc(nargs * sizeof(PyObject *));
- if (args2 == NULL) {
- PyErr_NoMemory();
- return NULL;
- }
- }
-
- /* use borrowed references */
- args2[0] = obj;
- if (nargs > 1) {
- memcpy(&args2[1], args, (nargs - 1) * sizeof(PyObject *));
- }
-
- result = _PyObject_FastCall(callable, args2, nargs);
- if (args2 != small_stack) {
- PyMem_Free(args2);
- }
- return result;
-}
-
-
/* Call callable(obj, *args, **kwargs). */
PyObject *
_PyObject_Call_Prepend(PyObject *callable,
[View Less]
1
0

bpo-35031, test_asycio: disable TLS 1.3 in test_start_tls_server_1() (GH-14148)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/0040903bbae043225499babae23649d896…
commit: 0040903bbae043225499babae23649d896ea2eec
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T03:10:48-07:00
summary:
bpo-35031, test_asycio: disable TLS 1.3 in test_start_tls_server_1() (GH-14148)
bpo-35031, bpo-35998: Reintroduce workaround on Windows and FreeBSD
in test_start_tls_server_1() of …
[View More]test_asyncio: disable TLS v1.3 on the
client context.
(cherry picked from commit c034b7824f5a7c50f2946ab3931633200e31d903)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 4d3c064eaf1f..685e3dc58e9a 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -495,6 +495,12 @@ def test_start_tls_server_1(self):
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
+ if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
+ # bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
+ # as the eof was not being received by the server if the payload
+ # size is not big enough. This behaviour only appears if the
+ # client is using TLS1.3.
+ client_context.options |= ssl.OP_NO_TLSv1_3
answer = None
def client(sock, addr):
[View Less]
1
0

bpo-35031, test_asycio: disable TLS 1.3 in test_start_tls_server_1() (GH-14148)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/a5ddbfbf50715e3d4b90ad367ed6827c6c…
commit: a5ddbfbf50715e3d4b90ad367ed6827c6cbcc52f
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T03:06:41-07:00
summary:
bpo-35031, test_asycio: disable TLS 1.3 in test_start_tls_server_1() (GH-14148)
bpo-35031, bpo-35998: Reintroduce workaround on Windows and FreeBSD
in test_start_tls_server_1() of …
[View More]test_asyncio: disable TLS v1.3 on the
client context.
(cherry picked from commit c034b7824f5a7c50f2946ab3931633200e31d903)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 5c861e92b7d6..4645cc044a59 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -498,6 +498,12 @@ def test_start_tls_server_1(self):
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
+ if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
+ # bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
+ # as the eof was not being received by the server if the payload
+ # size is not big enough. This behaviour only appears if the
+ # client is using TLS1.3.
+ client_context.options |= ssl.OP_NO_TLSv1_3
answer = None
def client(sock, addr):
[View Less]
1
0

bpo-35031, test_asycio: disable TLS 1.3 in test_start_tls_server_1() (GH-14148)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/c034b7824f5a7c50f2946ab3931633200e…
commit: c034b7824f5a7c50f2946ab3931633200e31d903
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T11:47:49+02:00
summary:
bpo-35031, test_asycio: disable TLS 1.3 in test_start_tls_server_1() (GH-14148)
bpo-35031, bpo-35998: Reintroduce workaround on Windows and FreeBSD
in test_start_tls_server_1() of test_asyncio: disable TLS v1.3 on …
[View More]the
client context.
files:
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 5c861e92b7d6..4645cc044a59 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -498,6 +498,12 @@ def test_start_tls_server_1(self):
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
+ if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
+ # bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
+ # as the eof was not being received by the server if the payload
+ # size is not big enough. This behaviour only appears if the
+ # client is using TLS1.3.
+ client_context.options |= ssl.OP_NO_TLSv1_3
answer = None
def client(sock, addr):
[View Less]
1
0

bpo-37267: Do not check for FILE_TYPE_CHAR in os.dup() on Windows (GH-14051) (GH-14140)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/693945d45dfe50c843970cab3e3aa1fa3a…
commit: 693945d45dfe50c843970cab3e3aa1fa3a3eddbe
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-17T10:45:26+02:00
summary:
bpo-37267: Do not check for FILE_TYPE_CHAR in os.dup() on Windows (GH-14051) (GH-14140)
On Windows, os.dup() no longer creates an inheritable fd when handling a
character …
[View More]file.
(cherry picked from commit 28fca0c422b425a6be43be31add0a5328c16b0b8)
Co-authored-by: Zackery Spytz <zspytz(a)gmail.com>
files:
A Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
M Lib/test/test_os.py
M Python/fileutils.c
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index a8eae6162057..b540fcbd4d73 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -3382,6 +3382,15 @@ def test_dup(self):
self.addCleanup(os.close, fd2)
self.assertEqual(os.get_inheritable(fd2), False)
+ @unittest.skipUnless(sys.platform == 'win32', 'win32-specific test')
+ def test_dup_nul(self):
+ # os.dup() was creating inheritable fds for character files.
+ fd1 = os.open('NUL', os.O_RDONLY)
+ self.addCleanup(os.close, fd1)
+ fd2 = os.dup(fd1)
+ self.addCleanup(os.close, fd2)
+ self.assertFalse(os.get_inheritable(fd2))
+
@unittest.skipUnless(hasattr(os, 'dup2'), "need os.dup2()")
def test_dup2(self):
fd = os.open(__file__, os.O_RDONLY)
diff --git a/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst b/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
new file mode 100644
index 000000000000..a4dcfcde35b0
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
@@ -0,0 +1,2 @@
+On Windows, :func:`os.dup` no longer creates an inheritable fd when handling
+a character file.
diff --git a/Python/fileutils.c b/Python/fileutils.c
index 178e2f1268f8..93c093f89b4b 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -1776,7 +1776,6 @@ _Py_dup(int fd)
{
#ifdef MS_WINDOWS
HANDLE handle;
- DWORD ftype;
#endif
assert(PyGILState_Check());
@@ -1790,9 +1789,6 @@ _Py_dup(int fd)
return -1;
}
- /* get the file type, ignore the error if it failed */
- ftype = GetFileType(handle);
-
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
fd = dup(fd);
@@ -1803,14 +1799,11 @@ _Py_dup(int fd)
return -1;
}
- /* Character files like console cannot be make non-inheritable */
- if (ftype != FILE_TYPE_CHAR) {
- if (_Py_set_inheritable(fd, 0, NULL) < 0) {
- _Py_BEGIN_SUPPRESS_IPH
- close(fd);
- _Py_END_SUPPRESS_IPH
- return -1;
- }
+ if (_Py_set_inheritable(fd, 0, NULL) < 0) {
+ _Py_BEGIN_SUPPRESS_IPH
+ close(fd);
+ _Py_END_SUPPRESS_IPH
+ return -1;
}
#elif defined(HAVE_FCNTL_H) && defined(F_DUPFD_CLOEXEC)
Py_BEGIN_ALLOW_THREADS
[View Less]
1
0

bpo-37267: Do not check for FILE_TYPE_CHAR in os.dup() on Windows (GH-14051) (GH-14141)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/71589491ad0da27f57789b97354f6094a9…
commit: 71589491ad0da27f57789b97354f6094a91e2eb3
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-17T10:45:04+02:00
summary:
bpo-37267: Do not check for FILE_TYPE_CHAR in os.dup() on Windows (GH-14051) (GH-14141)
On Windows, os.dup() no longer creates an inheritable fd when handling a
character …
[View More]file.
(cherry picked from commit 28fca0c422b425a6be43be31add0a5328c16b0b8)
Co-authored-by: Zackery Spytz <zspytz(a)gmail.com>
files:
A Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
M Lib/test/test_os.py
M Python/fileutils.c
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index fd9f70e30dba..a9170504004d 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -3240,6 +3240,15 @@ def test_dup(self):
self.addCleanup(os.close, fd2)
self.assertEqual(os.get_inheritable(fd2), False)
+ @unittest.skipUnless(sys.platform == 'win32', 'win32-specific test')
+ def test_dup_nul(self):
+ # os.dup() was creating inheritable fds for character files.
+ fd1 = os.open('NUL', os.O_RDONLY)
+ self.addCleanup(os.close, fd1)
+ fd2 = os.dup(fd1)
+ self.addCleanup(os.close, fd2)
+ self.assertFalse(os.get_inheritable(fd2))
+
@unittest.skipUnless(hasattr(os, 'dup2'), "need os.dup2()")
def test_dup2(self):
fd = os.open(__file__, os.O_RDONLY)
diff --git a/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst b/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
new file mode 100644
index 000000000000..a4dcfcde35b0
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
@@ -0,0 +1,2 @@
+On Windows, :func:`os.dup` no longer creates an inheritable fd when handling
+a character file.
diff --git a/Python/fileutils.c b/Python/fileutils.c
index 5e71d375260a..868fbf910312 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -1659,7 +1659,6 @@ _Py_dup(int fd)
{
#ifdef MS_WINDOWS
HANDLE handle;
- DWORD ftype;
#endif
assert(PyGILState_Check());
@@ -1673,9 +1672,6 @@ _Py_dup(int fd)
return -1;
}
- /* get the file type, ignore the error if it failed */
- ftype = GetFileType(handle);
-
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
fd = dup(fd);
@@ -1686,14 +1682,11 @@ _Py_dup(int fd)
return -1;
}
- /* Character files like console cannot be make non-inheritable */
- if (ftype != FILE_TYPE_CHAR) {
- if (_Py_set_inheritable(fd, 0, NULL) < 0) {
- _Py_BEGIN_SUPPRESS_IPH
- close(fd);
- _Py_END_SUPPRESS_IPH
- return -1;
- }
+ if (_Py_set_inheritable(fd, 0, NULL) < 0) {
+ _Py_BEGIN_SUPPRESS_IPH
+ close(fd);
+ _Py_END_SUPPRESS_IPH
+ return -1;
}
#elif defined(HAVE_FCNTL_H) && defined(F_DUPFD_CLOEXEC)
Py_BEGIN_ALLOW_THREADS
[View Less]
1
0

bpo-36688: Adding an implementation of RLock in _dummy_thread (GH-12943)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/ad505918a1829e6fa2a48a7665234d60a9…
commit: ad505918a1829e6fa2a48a7665234d60a9377e98
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T01:34:27-07:00
summary:
bpo-36688: Adding an implementation of RLock in _dummy_thread (GH-12943)
(cherry picked from commit c5905f39bcf4ef895d42eede41bb5a2f071a501d)
Co-authored-by: Joost Lek <vlabakje(a)…
[View More]gmail.com>
files:
M Lib/_dummy_thread.py
M Lib/test/test_dummy_thread.py
diff --git a/Lib/_dummy_thread.py b/Lib/_dummy_thread.py
index a2cae54b0580..2e46a07603be 100644
--- a/Lib/_dummy_thread.py
+++ b/Lib/_dummy_thread.py
@@ -14,7 +14,7 @@
# Exports only things specified by thread documentation;
# skipping obsolete synonyms allocate(), start_new(), exit_thread().
__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock',
- 'interrupt_main', 'LockType']
+ 'interrupt_main', 'LockType', 'RLock']
# A dummy value
TIMEOUT_MAX = 2**31
@@ -148,6 +148,36 @@ def __repr__(self):
hex(id(self))
)
+
+class RLock(LockType):
+ """Dummy implementation of threading._RLock.
+
+ Re-entrant lock can be aquired multiple times and needs to be released
+ just as many times. This dummy implemention does not check wheter the
+ current thread actually owns the lock, but does accounting on the call
+ counts.
+ """
+ def __init__(self):
+ super().__init__()
+ self._levels = 0
+
+ def acquire(self, waitflag=None, timeout=-1):
+ """Aquire the lock, can be called multiple times in succession.
+ """
+ locked = super().acquire(waitflag, timeout)
+ if locked:
+ self._levels += 1
+ return locked
+
+ def release(self):
+ """Release needs to be called once for every call to acquire().
+ """
+ if self._levels == 0:
+ raise error
+ if self._levels == 1:
+ super().release()
+ self._levels -= 1
+
# Used to signal that interrupt_main was called in a "thread"
_interrupt = False
# True when not executing in a "thread"
diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py
index da512167834f..0f56fcf97336 100644
--- a/Lib/test/test_dummy_thread.py
+++ b/Lib/test/test_dummy_thread.py
@@ -102,6 +102,24 @@ def test_lock_representation(self):
self.assertIn("unlocked", repr(self.lock))
+class RLockTests(unittest.TestCase):
+ """Test dummy RLock objects."""
+
+ def setUp(self):
+ self.rlock = _thread.RLock()
+
+ def test_multiple_acquire(self):
+ self.assertIn("unlocked", repr(self.rlock))
+ self.rlock.acquire()
+ self.rlock.acquire()
+ self.assertIn("locked", repr(self.rlock))
+ self.rlock.release()
+ self.assertIn("locked", repr(self.rlock))
+ self.rlock.release()
+ self.assertIn("unlocked", repr(self.rlock))
+ self.assertRaises(RuntimeError, self.rlock.release)
+
+
class MiscTests(unittest.TestCase):
"""Miscellaneous tests."""
@@ -253,3 +271,6 @@ def test_RaiseException(self, mock_print_exc):
func = mock.Mock(side_effect=Exception)
_thread.start_new_thread(func, tuple())
self.assertTrue(mock_print_exc.called)
+
+if __name__ == '__main__':
+ unittest.main()
[View Less]
1
0

bpo-36688: Adding an implementation of RLock in _dummy_thread (GH-12943)
by Miss Islington (bot) June 17, 2019
by Miss Islington (bot) June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/351b0e793e35510e8cbbcbb455a1b9544e…
commit: 351b0e793e35510e8cbbcbb455a1b9544e808cdd
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-17T01:28:43-07:00
summary:
bpo-36688: Adding an implementation of RLock in _dummy_thread (GH-12943)
(cherry picked from commit c5905f39bcf4ef895d42eede41bb5a2f071a501d)
Co-authored-by: Joost Lek <vlabakje(a)…
[View More]gmail.com>
files:
M Lib/_dummy_thread.py
M Lib/test/test_dummy_thread.py
diff --git a/Lib/_dummy_thread.py b/Lib/_dummy_thread.py
index a2cae54b0580..2e46a07603be 100644
--- a/Lib/_dummy_thread.py
+++ b/Lib/_dummy_thread.py
@@ -14,7 +14,7 @@
# Exports only things specified by thread documentation;
# skipping obsolete synonyms allocate(), start_new(), exit_thread().
__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock',
- 'interrupt_main', 'LockType']
+ 'interrupt_main', 'LockType', 'RLock']
# A dummy value
TIMEOUT_MAX = 2**31
@@ -148,6 +148,36 @@ def __repr__(self):
hex(id(self))
)
+
+class RLock(LockType):
+ """Dummy implementation of threading._RLock.
+
+ Re-entrant lock can be aquired multiple times and needs to be released
+ just as many times. This dummy implemention does not check wheter the
+ current thread actually owns the lock, but does accounting on the call
+ counts.
+ """
+ def __init__(self):
+ super().__init__()
+ self._levels = 0
+
+ def acquire(self, waitflag=None, timeout=-1):
+ """Aquire the lock, can be called multiple times in succession.
+ """
+ locked = super().acquire(waitflag, timeout)
+ if locked:
+ self._levels += 1
+ return locked
+
+ def release(self):
+ """Release needs to be called once for every call to acquire().
+ """
+ if self._levels == 0:
+ raise error
+ if self._levels == 1:
+ super().release()
+ self._levels -= 1
+
# Used to signal that interrupt_main was called in a "thread"
_interrupt = False
# True when not executing in a "thread"
diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py
index da512167834f..0f56fcf97336 100644
--- a/Lib/test/test_dummy_thread.py
+++ b/Lib/test/test_dummy_thread.py
@@ -102,6 +102,24 @@ def test_lock_representation(self):
self.assertIn("unlocked", repr(self.lock))
+class RLockTests(unittest.TestCase):
+ """Test dummy RLock objects."""
+
+ def setUp(self):
+ self.rlock = _thread.RLock()
+
+ def test_multiple_acquire(self):
+ self.assertIn("unlocked", repr(self.rlock))
+ self.rlock.acquire()
+ self.rlock.acquire()
+ self.assertIn("locked", repr(self.rlock))
+ self.rlock.release()
+ self.assertIn("locked", repr(self.rlock))
+ self.rlock.release()
+ self.assertIn("unlocked", repr(self.rlock))
+ self.assertRaises(RuntimeError, self.rlock.release)
+
+
class MiscTests(unittest.TestCase):
"""Miscellaneous tests."""
@@ -253,3 +271,6 @@ def test_RaiseException(self, mock_print_exc):
func = mock.Mock(side_effect=Exception)
_thread.start_new_thread(func, tuple())
self.assertTrue(mock_print_exc.called)
+
+if __name__ == '__main__':
+ unittest.main()
[View Less]
1
0

bpo-36688: Adding an implementation of RLock in _dummy_thread (GH-12943)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/c5905f39bcf4ef895d42eede41bb5a2f07…
commit: c5905f39bcf4ef895d42eede41bb5a2f071a501d
branch: master
author: Joost Lek <vlabakje(a)gmail.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-17T10:10:17+02:00
summary:
bpo-36688: Adding an implementation of RLock in _dummy_thread (GH-12943)
files:
M Lib/_dummy_thread.py
M Lib/test/test_dummy_thread.py
diff --git a/Lib/_dummy_thread.py b/Lib/_dummy_thread.py
index 2407f9bf5ddc..…
[View More]6af68e53a335 100644
--- a/Lib/_dummy_thread.py
+++ b/Lib/_dummy_thread.py
@@ -14,7 +14,7 @@
# Exports only things specified by thread documentation;
# skipping obsolete synonyms allocate(), start_new(), exit_thread().
__all__ = ['error', 'start_new_thread', 'exit', 'get_ident', 'allocate_lock',
- 'interrupt_main', 'LockType']
+ 'interrupt_main', 'LockType', 'RLock']
# A dummy value
TIMEOUT_MAX = 2**31
@@ -148,6 +148,36 @@ def __repr__(self):
hex(id(self))
)
+
+class RLock(LockType):
+ """Dummy implementation of threading._RLock.
+
+ Re-entrant lock can be aquired multiple times and needs to be released
+ just as many times. This dummy implemention does not check wheter the
+ current thread actually owns the lock, but does accounting on the call
+ counts.
+ """
+ def __init__(self):
+ super().__init__()
+ self._levels = 0
+
+ def acquire(self, waitflag=None, timeout=-1):
+ """Aquire the lock, can be called multiple times in succession.
+ """
+ locked = super().acquire(waitflag, timeout)
+ if locked:
+ self._levels += 1
+ return locked
+
+ def release(self):
+ """Release needs to be called once for every call to acquire().
+ """
+ if self._levels == 0:
+ raise error
+ if self._levels == 1:
+ super().release()
+ self._levels -= 1
+
# Used to signal that interrupt_main was called in a "thread"
_interrupt = False
# True when not executing in a "thread"
diff --git a/Lib/test/test_dummy_thread.py b/Lib/test/test_dummy_thread.py
index da512167834f..0f56fcf97336 100644
--- a/Lib/test/test_dummy_thread.py
+++ b/Lib/test/test_dummy_thread.py
@@ -102,6 +102,24 @@ def test_lock_representation(self):
self.assertIn("unlocked", repr(self.lock))
+class RLockTests(unittest.TestCase):
+ """Test dummy RLock objects."""
+
+ def setUp(self):
+ self.rlock = _thread.RLock()
+
+ def test_multiple_acquire(self):
+ self.assertIn("unlocked", repr(self.rlock))
+ self.rlock.acquire()
+ self.rlock.acquire()
+ self.assertIn("locked", repr(self.rlock))
+ self.rlock.release()
+ self.assertIn("locked", repr(self.rlock))
+ self.rlock.release()
+ self.assertIn("unlocked", repr(self.rlock))
+ self.assertRaises(RuntimeError, self.rlock.release)
+
+
class MiscTests(unittest.TestCase):
"""Miscellaneous tests."""
@@ -253,3 +271,6 @@ def test_RaiseException(self, mock_print_exc):
func = mock.Mock(side_effect=Exception)
_thread.start_new_thread(func, tuple())
self.assertTrue(mock_print_exc.called)
+
+if __name__ == '__main__':
+ unittest.main()
[View Less]
1
0

bpo-37267: Do not check for FILE_TYPE_CHAR in os.dup() on Windows (GH-14051)
by Victor Stinner June 17, 2019
by Victor Stinner June 17, 2019
June 17, 2019
https://github.com/python/cpython/commit/28fca0c422b425a6be43be31add0a5328c…
commit: 28fca0c422b425a6be43be31add0a5328c16b0b8
branch: master
author: Zackery Spytz <zspytz(a)gmail.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-17T09:17:14+02:00
summary:
bpo-37267: Do not check for FILE_TYPE_CHAR in os.dup() on Windows (GH-14051)
On Windows, os.dup() no longer creates an inheritable fd when handling a
character file.
files:
A Misc/NEWS.d/next/Windows/2019-06-…
[View More]13-04-15-51.bpo-37267.Ygo5ef.rst
M Lib/test/test_os.py
M Python/fileutils.c
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index a8eae6162057..b540fcbd4d73 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -3382,6 +3382,15 @@ def test_dup(self):
self.addCleanup(os.close, fd2)
self.assertEqual(os.get_inheritable(fd2), False)
+ @unittest.skipUnless(sys.platform == 'win32', 'win32-specific test')
+ def test_dup_nul(self):
+ # os.dup() was creating inheritable fds for character files.
+ fd1 = os.open('NUL', os.O_RDONLY)
+ self.addCleanup(os.close, fd1)
+ fd2 = os.dup(fd1)
+ self.addCleanup(os.close, fd2)
+ self.assertFalse(os.get_inheritable(fd2))
+
@unittest.skipUnless(hasattr(os, 'dup2'), "need os.dup2()")
def test_dup2(self):
fd = os.open(__file__, os.O_RDONLY)
diff --git a/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst b/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
new file mode 100644
index 000000000000..a4dcfcde35b0
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-06-13-04-15-51.bpo-37267.Ygo5ef.rst
@@ -0,0 +1,2 @@
+On Windows, :func:`os.dup` no longer creates an inheritable fd when handling
+a character file.
diff --git a/Python/fileutils.c b/Python/fileutils.c
index 178e2f1268f8..93c093f89b4b 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -1776,7 +1776,6 @@ _Py_dup(int fd)
{
#ifdef MS_WINDOWS
HANDLE handle;
- DWORD ftype;
#endif
assert(PyGILState_Check());
@@ -1790,9 +1789,6 @@ _Py_dup(int fd)
return -1;
}
- /* get the file type, ignore the error if it failed */
- ftype = GetFileType(handle);
-
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
fd = dup(fd);
@@ -1803,14 +1799,11 @@ _Py_dup(int fd)
return -1;
}
- /* Character files like console cannot be make non-inheritable */
- if (ftype != FILE_TYPE_CHAR) {
- if (_Py_set_inheritable(fd, 0, NULL) < 0) {
- _Py_BEGIN_SUPPRESS_IPH
- close(fd);
- _Py_END_SUPPRESS_IPH
- return -1;
- }
+ if (_Py_set_inheritable(fd, 0, NULL) < 0) {
+ _Py_BEGIN_SUPPRESS_IPH
+ close(fd);
+ _Py_END_SUPPRESS_IPH
+ return -1;
}
#elif defined(HAVE_FCNTL_H) && defined(F_DUPFD_CLOEXEC)
Py_BEGIN_ALLOW_THREADS
[View Less]
1
0
https://github.com/python/cpython/commit/e784f9f1c3fdd2102aae3fc0fe226408ff…
commit: e784f9f1c3fdd2102aae3fc0fe226408ff3a6029
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T16:25:37-07:00
summary:
bpo-28805: document METH_FASTCALL (GH-14079)
(cherry picked from commit 5600b5e1b24a3491e83f1b3038a7ea047a34c0bf)
Co-authored-by: Jeroen Demeyer <J.Demeyer(a)UGent.be>
files:
…
[View More]A Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
M Doc/c-api/structures.rst
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index 5e0cfd0264f9..5184ad511cd9 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -114,10 +114,20 @@ the definition of all other Python objects.
.. c:type:: PyCFunctionWithKeywords
- Type of the functions used to implement Python callables in C that take
- keyword arguments: they take three :c:type:`PyObject\*` parameters and return
- one such value. See :c:type:`PyCFunction` above for the meaning of the return
- value.
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_VARARGS | METH_KEYWORDS`.
+
+
+.. c:type:: _PyCFunctionFast
+
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_FASTCALL`.
+
+
+.. c:type:: _PyCFunctionFastWithKeywords
+
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
.. c:type:: PyMethodDef
@@ -149,10 +159,11 @@ specific C type of the *self* object.
The :attr:`ml_flags` field is a bitfield which can include the following flags.
The individual flags indicate either a calling convention or a binding
-convention. Of the calling convention flags, only :const:`METH_VARARGS` and
-:const:`METH_KEYWORDS` can be combined. Any of the calling convention flags
-can be combined with a binding flag.
+convention.
+There are four basic calling conventions for positional arguments
+and two of them can be combined with :const:`METH_KEYWORDS` to support
+also keyword arguments. So there are a total of 6 calling conventions:
.. data:: METH_VARARGS
@@ -164,13 +175,41 @@ can be combined with a binding flag.
using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`.
-.. data:: METH_KEYWORDS
+.. data:: METH_VARARGS | METH_KEYWORDS
Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`.
- The function expects three parameters: *self*, *args*, and a dictionary of
- all the keyword arguments. The flag must be combined with
- :const:`METH_VARARGS`, and the parameters are typically processed using
- :c:func:`PyArg_ParseTupleAndKeywords`.
+ The function expects three parameters: *self*, *args*, *kwargs* where
+ *kwargs* is a dictionary of all the keyword arguments or possibly *NULL*
+ if there are no keyword arguments. The parameters are typically processed
+ using :c:func:`PyArg_ParseTupleAndKeywords`.
+
+
+.. data:: METH_FASTCALL
+
+ Fast calling convention supporting only positional arguments.
+ The methods have the type :c:type:`_PyCFunctionFast`.
+ The first parameter is *self*, the second parameter is a C array
+ of :c:type:`PyObject\*` values indicating the arguments and the third
+ parameter is the number of arguments (the length of the array).
+
+ This is not part of the :ref:`limited API <stable>`.
+
+ .. versionadded:: 3.7
+
+
+.. data:: METH_FASTCALL | METH_KEYWORDS
+
+ Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
+ with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
+ Keyword arguments are passed the same way as in the vectorcall protocol:
+ there is an additional fourth :c:type:`PyObject\*` parameter
+ which is a tuple representing the names of the keyword arguments
+ or possibly *NULL* if there are no keywords. The values of the keyword
+ arguments are stored in the *args* array, after the positional arguments.
+
+ This is not part of the :ref:`limited API <stable>`.
+
+ .. versionadded:: 3.7
.. data:: METH_NOARGS
diff --git a/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst b/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
new file mode 100644
index 000000000000..6d6c4ad4af60
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
@@ -0,0 +1 @@
+The :const:`METH_FASTCALL` calling convention has been documented.
[View Less]
1
0
https://github.com/python/cpython/commit/b101fa7783615051a89500e488708b955e…
commit: b101fa7783615051a89500e488708b955eac94c5
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T16:24:06-07:00
summary:
bpo-28805: document METH_FASTCALL (GH-14079)
(cherry picked from commit 5600b5e1b24a3491e83f1b3038a7ea047a34c0bf)
Co-authored-by: Jeroen Demeyer <J.Demeyer(a)UGent.be>
files:
…
[View More]A Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
M Doc/c-api/structures.rst
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index da45da1d3c70..274beeef5d5b 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -114,10 +114,20 @@ the definition of all other Python objects.
.. c:type:: PyCFunctionWithKeywords
- Type of the functions used to implement Python callables in C that take
- keyword arguments: they take three :c:type:`PyObject\*` parameters and return
- one such value. See :c:type:`PyCFunction` above for the meaning of the return
- value.
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_VARARGS | METH_KEYWORDS`.
+
+
+.. c:type:: _PyCFunctionFast
+
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_FASTCALL`.
+
+
+.. c:type:: _PyCFunctionFastWithKeywords
+
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
.. c:type:: PyMethodDef
@@ -149,10 +159,11 @@ specific C type of the *self* object.
The :attr:`ml_flags` field is a bitfield which can include the following flags.
The individual flags indicate either a calling convention or a binding
-convention. Of the calling convention flags, only :const:`METH_VARARGS` and
-:const:`METH_KEYWORDS` can be combined. Any of the calling convention flags
-can be combined with a binding flag.
+convention.
+There are four basic calling conventions for positional arguments
+and two of them can be combined with :const:`METH_KEYWORDS` to support
+also keyword arguments. So there are a total of 6 calling conventions:
.. data:: METH_VARARGS
@@ -164,13 +175,41 @@ can be combined with a binding flag.
using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`.
-.. data:: METH_KEYWORDS
+.. data:: METH_VARARGS | METH_KEYWORDS
Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`.
- The function expects three parameters: *self*, *args*, and a dictionary of
- all the keyword arguments. The flag must be combined with
- :const:`METH_VARARGS`, and the parameters are typically processed using
- :c:func:`PyArg_ParseTupleAndKeywords`.
+ The function expects three parameters: *self*, *args*, *kwargs* where
+ *kwargs* is a dictionary of all the keyword arguments or possibly *NULL*
+ if there are no keyword arguments. The parameters are typically processed
+ using :c:func:`PyArg_ParseTupleAndKeywords`.
+
+
+.. data:: METH_FASTCALL
+
+ Fast calling convention supporting only positional arguments.
+ The methods have the type :c:type:`_PyCFunctionFast`.
+ The first parameter is *self*, the second parameter is a C array
+ of :c:type:`PyObject\*` values indicating the arguments and the third
+ parameter is the number of arguments (the length of the array).
+
+ This is not part of the :ref:`limited API <stable>`.
+
+ .. versionadded:: 3.7
+
+
+.. data:: METH_FASTCALL | METH_KEYWORDS
+
+ Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
+ with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
+ Keyword arguments are passed the same way as in the vectorcall protocol:
+ there is an additional fourth :c:type:`PyObject\*` parameter
+ which is a tuple representing the names of the keyword arguments
+ or possibly *NULL* if there are no keywords. The values of the keyword
+ arguments are stored in the *args* array, after the positional arguments.
+
+ This is not part of the :ref:`limited API <stable>`.
+
+ .. versionadded:: 3.7
.. data:: METH_NOARGS
diff --git a/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst b/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
new file mode 100644
index 000000000000..6d6c4ad4af60
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
@@ -0,0 +1 @@
+The :const:`METH_FASTCALL` calling convention has been documented.
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/2acaf496b71224ff6d170ea12b0876d651…
commit: 2acaf496b71224ff6d170ea12b0876d65195be7b
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T14:10:49-07:00
summary:
bpo-37220: Fix 2.7 test -R crash on Windows. (GH-13957)
The patch needed for 2.7 should make the test more stable on 3.x also.
(cherry picked from commit …
[View More]66d47da86aff15be34adbec02596bb3188684c0d)
Co-authored-by: Terry Jan Reedy <tjreedy(a)udel.edu>
files:
M Lib/idlelib/idle_test/test_searchbase.py
diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py
index e08268fde257..aee0c4c69929 100644
--- a/Lib/idlelib/idle_test/test_searchbase.py
+++ b/Lib/idlelib/idle_test/test_searchbase.py
@@ -48,7 +48,6 @@ def test_open_and_close(self):
self.dialog.default_command = None
toplevel = Toplevel(self.root)
- self.addCleanup(toplevel.destroy)
text = Text(toplevel)
self.dialog.open(text)
self.assertEqual(self.dialog.top.state(), 'normal')
@@ -57,7 +56,8 @@ def test_open_and_close(self):
self.dialog.open(text, searchphrase="hello")
self.assertEqual(self.dialog.ent.get(), 'hello')
- self.dialog.close()
+ toplevel.update_idletasks()
+ toplevel.destroy()
def test_create_widgets(self):
self.dialog.create_entries = Func()
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/0c45aee8036a27fb76d6d8d4bac61c3715…
commit: 0c45aee8036a27fb76d6d8d4bac61c3715aec22d
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T13:52:25-07:00
summary:
bpo-37220: Fix 2.7 test -R crash on Windows. (GH-13957)
The patch needed for 2.7 should make the test more stable on 3.x also.
(cherry picked from commit …
[View More]66d47da86aff15be34adbec02596bb3188684c0d)
Co-authored-by: Terry Jan Reedy <tjreedy(a)udel.edu>
files:
M Lib/idlelib/idle_test/test_searchbase.py
diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py
index e08268fde257..aee0c4c69929 100644
--- a/Lib/idlelib/idle_test/test_searchbase.py
+++ b/Lib/idlelib/idle_test/test_searchbase.py
@@ -48,7 +48,6 @@ def test_open_and_close(self):
self.dialog.default_command = None
toplevel = Toplevel(self.root)
- self.addCleanup(toplevel.destroy)
text = Text(toplevel)
self.dialog.open(text)
self.assertEqual(self.dialog.top.state(), 'normal')
@@ -57,7 +56,8 @@ def test_open_and_close(self):
self.dialog.open(text, searchphrase="hello")
self.assertEqual(self.dialog.ent.get(), 'hello')
- self.dialog.close()
+ toplevel.update_idletasks()
+ toplevel.destroy()
def test_create_widgets(self):
self.dialog.create_entries = Func()
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/722733e940199ce8957254236e2aa7c453…
commit: 722733e940199ce8957254236e2aa7c453044fde
branch: 2.7
author: Terry Jan Reedy <tjreedy(a)udel.edu>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T16:36:23-04:00
summary:
[2.7] Fix 2.7 test -R test_IDLE failure on Windows (GH-13958)
Cherry-picked from 66d47da.
files:
M Lib/idlelib/idle_test/test_searchdialogbase.py
diff --git a/Lib/idlelib/idle_test/test_searchdialogbase.py b/Lib/…
[View More]idlelib/idle_test/test_searchdialogbase.py
index 7ca6bbf69347..59b9bbf30f2e 100644
--- a/Lib/idlelib/idle_test/test_searchdialogbase.py
+++ b/Lib/idlelib/idle_test/test_searchdialogbase.py
@@ -46,7 +46,6 @@ def test_open_and_close(self):
self.dialog.default_command = None
toplevel = Toplevel(self.root)
- self.addCleanup(toplevel.destroy)
text = Text(toplevel)
self.dialog.open(text)
self.assertEqual(self.dialog.top.state(), 'normal')
@@ -55,7 +54,8 @@ def test_open_and_close(self):
self.dialog.open(text, searchphrase="hello")
self.assertEqual(self.dialog.ent.get(), 'hello')
- self.dialog.close()
+ toplevel.update_idletasks()
+ toplevel.destroy()
def test_create_widgets(self):
self.dialog.create_entries = Func()
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/66d47da86aff15be34adbec02596bb3188…
commit: 66d47da86aff15be34adbec02596bb3188684c0d
branch: master
author: Terry Jan Reedy <tjreedy(a)udel.edu>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T16:33:56-04:00
summary:
bpo-37220: Fix 2.7 test -R crash on Windows. (GH-13957)
The patch needed for 2.7 should make the test more stable on 3.x also.
files:
M Lib/idlelib/idle_test/test_searchbase.py
diff --git a/Lib/idlelib/idle_test/…
[View More]test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py
index e08268fde257..aee0c4c69929 100644
--- a/Lib/idlelib/idle_test/test_searchbase.py
+++ b/Lib/idlelib/idle_test/test_searchbase.py
@@ -48,7 +48,6 @@ def test_open_and_close(self):
self.dialog.default_command = None
toplevel = Toplevel(self.root)
- self.addCleanup(toplevel.destroy)
text = Text(toplevel)
self.dialog.open(text)
self.assertEqual(self.dialog.top.state(), 'normal')
@@ -57,7 +56,8 @@ def test_open_and_close(self):
self.dialog.open(text, searchphrase="hello")
self.assertEqual(self.dialog.ent.get(), 'hello')
- self.dialog.close()
+ toplevel.update_idletasks()
+ toplevel.destroy()
def test_create_widgets(self):
self.dialog.create_entries = Func()
[View Less]
1
0

closes bpo-37300: Remove unnecessary Py_XINCREF in classobject.c. (GH-14120)
by Benjamin Peterson June 16, 2019
by Benjamin Peterson June 16, 2019
June 16, 2019
https://github.com/python/cpython/commit/c83356cae2e375324ff4a3fb5d574ebde5…
commit: c83356cae2e375324ff4a3fb5d574ebde5c827a9
branch: master
author: Hai Shi <shihai1992(a)gmail.com>
committer: Benjamin Peterson <benjamin(a)python.org>
date: 2019-06-16T13:19:19-07:00
summary:
closes bpo-37300: Remove unnecessary Py_XINCREF in classobject.c. (GH-14120)
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-16-02-38-25.bpo-37300.WJkgKV.rst
M Objects/classobject.c
diff --git a/Misc/NEWS.…
[View More]d/next/Core and Builtins/2019-06-16-02-38-25.bpo-37300.WJkgKV.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-16-02-38-25.bpo-37300.WJkgKV.rst
new file mode 100644
index 000000000000..aae278e84981
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-16-02-38-25.bpo-37300.WJkgKV.rst
@@ -0,0 +1 @@
+Remove an unnecssary Py_XINCREF in classobject.c.
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 2415ed14cb15..f26a85c62371 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -110,7 +110,7 @@ PyMethod_New(PyObject *func, PyObject *self)
im->im_weakreflist = NULL;
Py_INCREF(func);
im->im_func = func;
- Py_XINCREF(self);
+ Py_INCREF(self);
im->im_self = self;
im->vectorcall = method_vectorcall;
_PyObject_GC_TRACK(im);
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/ecafe8e42464b2c91a507fd26de06ce120…
commit: ecafe8e42464b2c91a507fd26de06ce1203dd654
branch: 3.6
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-16T14:55:59-04:00
summary:
Doc: Remove an ugly space before a dot. (GH-14123) (GH-14130)
(cherry picked from commit 552951563cd5968d25e95306362e41f07d661a88)
Co-authored-by: Julien Palard <julien(a)palard.fr…
[View More]>
files:
M Doc/tools/templates/layout.html
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index e7c5d92c888f..7a7feb52e1a3 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -5,7 +5,7 @@
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
{% trans %}This document is for an old version of Python that is no longer supported.
You should upgrade, and read the {% endtrans %}
- <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release{% endtrans %}</a>.
</div>
{%- endif %}
{% endblock %}
[View Less]
1
0

Turn math.isqrt assertion into a comment to clarify its purpose. (GH-14131)
by Mark Dickinson June 16, 2019
by Mark Dickinson June 16, 2019
June 16, 2019
https://github.com/python/cpython/commit/3f3efed3315f06ca3412bc8f4506e994ab…
commit: 3f3efed3315f06ca3412bc8f4506e994ab84a8b3
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Mark Dickinson <dickinsm(a)gmail.com>
date: 2019-06-16T18:14:02+01:00
summary:
Turn math.isqrt assertion into a comment to clarify its purpose. (GH-14131)
(cherry picked from commit 2dfeaa9222e2ed6b6e32faaf08e5b0f77318f0a7)
Co-authored-by: Mark …
[View More]Dickinson <dickinsm(a)gmail.com>
files:
M Modules/mathmodule.c
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 76d821c65b4c..82a9a14724f5 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -1527,10 +1527,10 @@ Here's Python code equivalent to the C implementation below:
a = 1
d = 0
for s in reversed(range(c.bit_length())):
+ # Loop invariant: (a-1)**2 < (n >> 2*(c - d)) < (a+1)**2
e = d
d = c >> s
a = (a << d - e - 1) + (n >> 2*c - e - d + 1) // a
- assert (a-1)**2 < n >> 2*(c - d) < (a+1)**2
return a - (a*a > n)
[View Less]
1
0
https://github.com/python/cpython/commit/5600b5e1b24a3491e83f1b3038a7ea047a…
commit: 5600b5e1b24a3491e83f1b3038a7ea047a34c0bf
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-17T02:03:22+09:00
summary:
bpo-28805: document METH_FASTCALL (GH-14079)
files:
A Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
M Doc/c-api/structures.rst
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.…
[View More]rst
index 5e0cfd0264f9..5184ad511cd9 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -114,10 +114,20 @@ the definition of all other Python objects.
.. c:type:: PyCFunctionWithKeywords
- Type of the functions used to implement Python callables in C that take
- keyword arguments: they take three :c:type:`PyObject\*` parameters and return
- one such value. See :c:type:`PyCFunction` above for the meaning of the return
- value.
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_VARARGS | METH_KEYWORDS`.
+
+
+.. c:type:: _PyCFunctionFast
+
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_FASTCALL`.
+
+
+.. c:type:: _PyCFunctionFastWithKeywords
+
+ Type of the functions used to implement Python callables in C
+ with signature :const:`METH_FASTCALL | METH_KEYWORDS`.
.. c:type:: PyMethodDef
@@ -149,10 +159,11 @@ specific C type of the *self* object.
The :attr:`ml_flags` field is a bitfield which can include the following flags.
The individual flags indicate either a calling convention or a binding
-convention. Of the calling convention flags, only :const:`METH_VARARGS` and
-:const:`METH_KEYWORDS` can be combined. Any of the calling convention flags
-can be combined with a binding flag.
+convention.
+There are four basic calling conventions for positional arguments
+and two of them can be combined with :const:`METH_KEYWORDS` to support
+also keyword arguments. So there are a total of 6 calling conventions:
.. data:: METH_VARARGS
@@ -164,13 +175,41 @@ can be combined with a binding flag.
using :c:func:`PyArg_ParseTuple` or :c:func:`PyArg_UnpackTuple`.
-.. data:: METH_KEYWORDS
+.. data:: METH_VARARGS | METH_KEYWORDS
Methods with these flags must be of type :c:type:`PyCFunctionWithKeywords`.
- The function expects three parameters: *self*, *args*, and a dictionary of
- all the keyword arguments. The flag must be combined with
- :const:`METH_VARARGS`, and the parameters are typically processed using
- :c:func:`PyArg_ParseTupleAndKeywords`.
+ The function expects three parameters: *self*, *args*, *kwargs* where
+ *kwargs* is a dictionary of all the keyword arguments or possibly *NULL*
+ if there are no keyword arguments. The parameters are typically processed
+ using :c:func:`PyArg_ParseTupleAndKeywords`.
+
+
+.. data:: METH_FASTCALL
+
+ Fast calling convention supporting only positional arguments.
+ The methods have the type :c:type:`_PyCFunctionFast`.
+ The first parameter is *self*, the second parameter is a C array
+ of :c:type:`PyObject\*` values indicating the arguments and the third
+ parameter is the number of arguments (the length of the array).
+
+ This is not part of the :ref:`limited API <stable>`.
+
+ .. versionadded:: 3.7
+
+
+.. data:: METH_FASTCALL | METH_KEYWORDS
+
+ Extension of :const:`METH_FASTCALL` supporting also keyword arguments,
+ with methods of type :c:type:`_PyCFunctionFastWithKeywords`.
+ Keyword arguments are passed the same way as in the vectorcall protocol:
+ there is an additional fourth :c:type:`PyObject\*` parameter
+ which is a tuple representing the names of the keyword arguments
+ or possibly *NULL* if there are no keywords. The values of the keyword
+ arguments are stored in the *args* array, after the positional arguments.
+
+ This is not part of the :ref:`limited API <stable>`.
+
+ .. versionadded:: 3.7
.. data:: METH_NOARGS
diff --git a/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst b/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
new file mode 100644
index 000000000000..6d6c4ad4af60
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2019-06-14-14-03-51.bpo-28805.qZC0N_.rst
@@ -0,0 +1 @@
+The :const:`METH_FASTCALL` calling convention has been documented.
[View Less]
1
0

Turn math.isqrt assertion into a comment to clarify its purpose. (GH-14131)
by Mark Dickinson June 16, 2019
by Mark Dickinson June 16, 2019
June 16, 2019
https://github.com/python/cpython/commit/2dfeaa9222e2ed6b6e32faaf08e5b0f773…
commit: 2dfeaa9222e2ed6b6e32faaf08e5b0f77318f0a7
branch: master
author: Mark Dickinson <dickinsm(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T17:53:21+01:00
summary:
Turn math.isqrt assertion into a comment to clarify its purpose. (GH-14131)
files:
M Modules/mathmodule.c
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index 76d821c65b4c..82a9a14724f5 100644
--- a/…
[View More]Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -1527,10 +1527,10 @@ Here's Python code equivalent to the C implementation below:
a = 1
d = 0
for s in reversed(range(c.bit_length())):
+ # Loop invariant: (a-1)**2 < (n >> 2*(c - d)) < (a+1)**2
e = d
d = c >> s
a = (a << d - e - 1) + (n >> 2*c - e - d + 1) // a
- assert (a-1)**2 < n >> 2*(c - d) < (a+1)**2
return a - (a*a > n)
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/c289588905daac804ef9c4ebaf51fc13f9…
commit: c289588905daac804ef9c4ebaf51fc13f93b4a01
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T07:37:02-07:00
summary:
Doc: Remove an ugly space before a dot. (GH-14123)
(cherry picked from commit 552951563cd5968d25e95306362e41f07d661a88)
Co-authored-by: Julien Palard <julien(a)palard.fr>
…
[View More]files:
M Doc/tools/templates/layout.html
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index 1ea681cdcf2e..32e178b38eb8 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -5,7 +5,7 @@
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
{% trans %}This document is for an old version of Python that is no longer supported.
You should upgrade, and read the {% endtrans %}
- <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release{% endtrans %}</a>.
</div>
{%- endif %}
{% endblock %}
[View Less]
1
0

Simplify negativity checks in math.comb and math.perm. (GH-13870) (#14125)
by Mark Dickinson June 16, 2019
by Mark Dickinson June 16, 2019
June 16, 2019
https://github.com/python/cpython/commit/599f7ecb70f1b9714c702322b235b4d815…
commit: 599f7ecb70f1b9714c702322b235b4d8155205ae
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Mark Dickinson <dickinsm(a)gmail.com>
date: 2019-06-16T12:38:07+01:00
summary:
Simplify negativity checks in math.comb and math.perm. (GH-13870) (#14125)
(cherry picked from commit 45e0411eee023b21acf1615e995d26058d66c0f1)
Co-authored-by: Mark Dickinson …
[View More]<dickinsm(a)gmail.com>
files:
M Modules/mathmodule.c
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index ed1147675308..76d821c65b4c 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -3056,6 +3056,12 @@ math_perm_impl(PyObject *module, PyObject *n, PyObject *k)
"n must be a non-negative integer");
goto error;
}
+ if (Py_SIZE(k) < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "k must be a non-negative integer");
+ goto error;
+ }
+
cmp = PyObject_RichCompareBool(n, k, Py_LT);
if (cmp != 0) {
if (cmp > 0) {
@@ -3072,11 +3078,8 @@ math_perm_impl(PyObject *module, PyObject *n, PyObject *k)
LLONG_MAX);
goto error;
}
- else if (overflow < 0 || factors < 0) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_ValueError,
- "k must be a non-negative integer");
- }
+ else if (factors == -1) {
+ /* k is nonnegative, so a return value of -1 can only indicate error */
goto error;
}
@@ -3176,6 +3179,12 @@ math_comb_impl(PyObject *module, PyObject *n, PyObject *k)
"n must be a non-negative integer");
goto error;
}
+ if (Py_SIZE(k) < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "k must be a non-negative integer");
+ goto error;
+ }
+
/* k = min(k, n - k) */
temp = PyNumber_Subtract(n, k);
if (temp == NULL) {
@@ -3204,11 +3213,8 @@ math_comb_impl(PyObject *module, PyObject *n, PyObject *k)
LLONG_MAX);
goto error;
}
- else if (overflow < 0 || factors < 0) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_ValueError,
- "k must be a non-negative integer");
- }
+ if (factors == -1) {
+ /* k is nonnegative, so a return value of -1 can only indicate error */
goto error;
}
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/45e0411eee023b21acf1615e995d26058d…
commit: 45e0411eee023b21acf1615e995d26058d66c0f1
branch: master
author: Mark Dickinson <dickinsm(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T11:06:06+01:00
summary:
Simplify negativity checks in math.comb and math.perm. (GH-13870)
files:
M Modules/mathmodule.c
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index ed1147675308..76d821c65b4c 100644
--- a/Modules/…
[View More]mathmodule.c
+++ b/Modules/mathmodule.c
@@ -3056,6 +3056,12 @@ math_perm_impl(PyObject *module, PyObject *n, PyObject *k)
"n must be a non-negative integer");
goto error;
}
+ if (Py_SIZE(k) < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "k must be a non-negative integer");
+ goto error;
+ }
+
cmp = PyObject_RichCompareBool(n, k, Py_LT);
if (cmp != 0) {
if (cmp > 0) {
@@ -3072,11 +3078,8 @@ math_perm_impl(PyObject *module, PyObject *n, PyObject *k)
LLONG_MAX);
goto error;
}
- else if (overflow < 0 || factors < 0) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_ValueError,
- "k must be a non-negative integer");
- }
+ else if (factors == -1) {
+ /* k is nonnegative, so a return value of -1 can only indicate error */
goto error;
}
@@ -3176,6 +3179,12 @@ math_comb_impl(PyObject *module, PyObject *n, PyObject *k)
"n must be a non-negative integer");
goto error;
}
+ if (Py_SIZE(k) < 0) {
+ PyErr_SetString(PyExc_ValueError,
+ "k must be a non-negative integer");
+ goto error;
+ }
+
/* k = min(k, n - k) */
temp = PyNumber_Subtract(n, k);
if (temp == NULL) {
@@ -3204,11 +3213,8 @@ math_comb_impl(PyObject *module, PyObject *n, PyObject *k)
LLONG_MAX);
goto error;
}
- else if (overflow < 0 || factors < 0) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_ValueError,
- "k must be a non-negative integer");
- }
+ if (factors == -1) {
+ /* k is nonnegative, so a return value of -1 can only indicate error */
goto error;
}
[View Less]
1
0

June 16, 2019
https://github.com/python/cpython/commit/b0cb988420d7f1fa8e09fd44d053c0af05…
commit: b0cb988420d7f1fa8e09fd44d053c0af05c635f3
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T01:32:30-07:00
summary:
Doc: Remove an ugly space before a dot. (GH-14123)
(cherry picked from commit 552951563cd5968d25e95306362e41f07d661a88)
Co-authored-by: Julien Palard <julien(a)palard.fr>
…
[View More]files:
M Doc/tools/templates/layout.html
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index 77915c8431b6..17592d74a4eb 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -5,7 +5,7 @@
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
{% trans %}This document is for an old version of Python that is no longer supported.
You should upgrade, and read the {% endtrans %}
- <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release{% endtrans %}</a>.
</div>
{%- endif %}
{% endblock %}
[View Less]
1
0
https://github.com/python/cpython/commit/552951563cd5968d25e95306362e41f07d…
commit: 552951563cd5968d25e95306362e41f07d661a88
branch: master
author: Julien Palard <julien(a)palard.fr>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T10:25:05+02:00
summary:
Doc: Remove an ugly space before a dot. (GH-14123)
files:
M Doc/tools/templates/layout.html
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index 77915c8431b6..17592d74a4eb 100644
--- a/…
[View More]Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -5,7 +5,7 @@
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
{% trans %}This document is for an old version of Python that is no longer supported.
You should upgrade, and read the {% endtrans %}
- <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release{% endtrans %}</a>.
</div>
{%- endif %}
{% endblock %}
[View Less]
1
0

bpo-35922: Fix RobotFileParser when robots.txt has no relevant crawl delay or request rate (GH-11791)
by Miss Islington (bot) June 16, 2019
by Miss Islington (bot) June 16, 2019
June 16, 2019
https://github.com/python/cpython/commit/45d6547acfb9ae1639adbe03dd14f38cd0…
commit: 45d6547acfb9ae1639adbe03dd14f38cd0642ca2
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T00:10:06-07:00
summary:
bpo-35922: Fix RobotFileParser when robots.txt has no relevant crawl delay or request rate (GH-11791)
Co-Authored-By: Tal Einat <taleinat+github(a)gmail.com>
(cherry picked …
[View More]from commit 8047e0e1c620f69cc21f9ca48b24bf2cdd5c3668)
Co-authored-by: Rémi Lapeyre <remi.lapeyre(a)henki.fr>
files:
A Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
M Lib/test/test_robotparser.py
M Lib/urllib/robotparser.py
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
index 140636590aa8..d478e7f127fd 100644
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -76,30 +76,38 @@ class RejectAllRobotsTest(BaseRobotTest, unittest.TestCase):
class BaseRequestRateTest(BaseRobotTest):
+ request_rate = None
+ crawl_delay = None
def test_request_rate(self):
+ parser = self.parser
for url in self.good + self.bad:
agent, url = self.get_agent_and_url(url)
with self.subTest(url=url, agent=agent):
- if self.crawl_delay:
- self.assertEqual(
- self.parser.crawl_delay(agent), self.crawl_delay
- )
- if self.request_rate:
+ self.assertEqual(parser.crawl_delay(agent), self.crawl_delay)
+
+ parsed_request_rate = parser.request_rate(agent)
+ self.assertEqual(parsed_request_rate, self.request_rate)
+ if self.request_rate is not None:
self.assertIsInstance(
- self.parser.request_rate(agent),
+ parsed_request_rate,
urllib.robotparser.RequestRate
)
self.assertEqual(
- self.parser.request_rate(agent).requests,
+ parsed_request_rate.requests,
self.request_rate.requests
)
self.assertEqual(
- self.parser.request_rate(agent).seconds,
+ parsed_request_rate.seconds,
self.request_rate.seconds
)
+class EmptyFileTest(BaseRequestRateTest, unittest.TestCase):
+ robots_txt = ''
+ good = ['/foo']
+
+
class CrawlDelayAndRequestRateTest(BaseRequestRateTest, unittest.TestCase):
robots_txt = """\
User-agent: figtree
@@ -120,10 +128,6 @@ class CrawlDelayAndRequestRateTest(BaseRequestRateTest, unittest.TestCase):
class DifferentAgentTest(CrawlDelayAndRequestRateTest):
agent = 'FigTree Robot libwww-perl/5.04'
- # these are not actually tested, but we still need to parse it
- # in order to accommodate the input parameters
- request_rate = None
- crawl_delay = None
class InvalidRequestRateTest(BaseRobotTest, unittest.TestCase):
diff --git a/Lib/urllib/robotparser.py b/Lib/urllib/robotparser.py
index 883ef249210e..f3bd806f0726 100644
--- a/Lib/urllib/robotparser.py
+++ b/Lib/urllib/robotparser.py
@@ -179,7 +179,9 @@ def crawl_delay(self, useragent):
for entry in self.entries:
if entry.applies_to(useragent):
return entry.delay
- return self.default_entry.delay
+ if self.default_entry:
+ return self.default_entry.delay
+ return None
def request_rate(self, useragent):
if not self.mtime():
@@ -187,7 +189,9 @@ def request_rate(self, useragent):
for entry in self.entries:
if entry.applies_to(useragent):
return entry.req_rate
- return self.default_entry.req_rate
+ if self.default_entry:
+ return self.default_entry.req_rate
+ return None
def __str__(self):
entries = self.entries
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst b/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
new file mode 100644
index 000000000000..5271a495624d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
@@ -0,0 +1,4 @@
+Fix :meth:`RobotFileParser.crawl_delay` and
+:meth:`RobotFileParser.request_rate` to return ``None`` rather than
+raise :exc:`AttributeError` when no relevant rule is defined in the
+robots.txt file. Patch by Rémi Lapeyre.
[View Less]
1
0

bpo-35922: Fix RobotFileParser when robots.txt has no relevant crawl delay or request rate (GH-11791)
by Miss Islington (bot) June 16, 2019
by Miss Islington (bot) June 16, 2019
June 16, 2019
https://github.com/python/cpython/commit/58a1a76baefc92d9e2392a5dbf65e39e44…
commit: 58a1a76baefc92d9e2392a5dbf65e39e44fb8f55
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-16T00:07:54-07:00
summary:
bpo-35922: Fix RobotFileParser when robots.txt has no relevant crawl delay or request rate (GH-11791)
Co-Authored-By: Tal Einat <taleinat+github(a)gmail.com>
(cherry picked …
[View More]from commit 8047e0e1c620f69cc21f9ca48b24bf2cdd5c3668)
Co-authored-by: Rémi Lapeyre <remi.lapeyre(a)henki.fr>
files:
A Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
M Lib/test/test_robotparser.py
M Lib/urllib/robotparser.py
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
index 84a267ad9567..77cd7c4d29df 100644
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -97,30 +97,38 @@ class RejectAllRobotsTest(BaseRobotTest, unittest.TestCase):
class BaseRequestRateTest(BaseRobotTest):
+ request_rate = None
+ crawl_delay = None
def test_request_rate(self):
+ parser = self.parser
for url in self.good + self.bad:
agent, url = self.get_agent_and_url(url)
with self.subTest(url=url, agent=agent):
- if self.crawl_delay:
- self.assertEqual(
- self.parser.crawl_delay(agent), self.crawl_delay
- )
- if self.request_rate:
+ self.assertEqual(parser.crawl_delay(agent), self.crawl_delay)
+
+ parsed_request_rate = parser.request_rate(agent)
+ self.assertEqual(parsed_request_rate, self.request_rate)
+ if self.request_rate is not None:
self.assertIsInstance(
- self.parser.request_rate(agent),
+ parsed_request_rate,
urllib.robotparser.RequestRate
)
self.assertEqual(
- self.parser.request_rate(agent).requests,
+ parsed_request_rate.requests,
self.request_rate.requests
)
self.assertEqual(
- self.parser.request_rate(agent).seconds,
+ parsed_request_rate.seconds,
self.request_rate.seconds
)
+class EmptyFileTest(BaseRequestRateTest, unittest.TestCase):
+ robots_txt = ''
+ good = ['/foo']
+
+
class CrawlDelayAndRequestRateTest(BaseRequestRateTest, unittest.TestCase):
robots_txt = """\
User-agent: figtree
@@ -141,10 +149,6 @@ class CrawlDelayAndRequestRateTest(BaseRequestRateTest, unittest.TestCase):
class DifferentAgentTest(CrawlDelayAndRequestRateTest):
agent = 'FigTree Robot libwww-perl/5.04'
- # these are not actually tested, but we still need to parse it
- # in order to accommodate the input parameters
- request_rate = None
- crawl_delay = None
class InvalidRequestRateTest(BaseRobotTest, unittest.TestCase):
diff --git a/Lib/urllib/robotparser.py b/Lib/urllib/robotparser.py
index 7089916a4f81..c58565e39451 100644
--- a/Lib/urllib/robotparser.py
+++ b/Lib/urllib/robotparser.py
@@ -186,7 +186,9 @@ def crawl_delay(self, useragent):
for entry in self.entries:
if entry.applies_to(useragent):
return entry.delay
- return self.default_entry.delay
+ if self.default_entry:
+ return self.default_entry.delay
+ return None
def request_rate(self, useragent):
if not self.mtime():
@@ -194,7 +196,9 @@ def request_rate(self, useragent):
for entry in self.entries:
if entry.applies_to(useragent):
return entry.req_rate
- return self.default_entry.req_rate
+ if self.default_entry:
+ return self.default_entry.req_rate
+ return None
def site_maps(self):
if not self.sitemaps:
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst b/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
new file mode 100644
index 000000000000..5271a495624d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
@@ -0,0 +1,4 @@
+Fix :meth:`RobotFileParser.crawl_delay` and
+:meth:`RobotFileParser.request_rate` to return ``None`` rather than
+raise :exc:`AttributeError` when no relevant rule is defined in the
+robots.txt file. Patch by Rémi Lapeyre.
[View Less]
1
0

bpo-35922: Fix RobotFileParser when robots.txt has no relevant crawl delay or request rate (GH-11791)
by Tal Einat June 16, 2019
by Tal Einat June 16, 2019
June 16, 2019
https://github.com/python/cpython/commit/8047e0e1c620f69cc21f9ca48b24bf2cdd…
commit: 8047e0e1c620f69cc21f9ca48b24bf2cdd5c3668
branch: master
author: Rémi Lapeyre <remi.lapeyre(a)henki.fr>
committer: Tal Einat <taleinat(a)gmail.com>
date: 2019-06-16T09:48:57+03:00
summary:
bpo-35922: Fix RobotFileParser when robots.txt has no relevant crawl delay or request rate (GH-11791)
Co-Authored-By: Tal Einat <taleinat+github(a)gmail.com>
files:
A Misc/NEWS.d/next/Library/2019-06-11-19-…
[View More]34-29.bpo-35922.rxpzWr.rst
M Lib/test/test_robotparser.py
M Lib/urllib/robotparser.py
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
index 84a267ad9567..77cd7c4d29df 100644
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -97,30 +97,38 @@ class RejectAllRobotsTest(BaseRobotTest, unittest.TestCase):
class BaseRequestRateTest(BaseRobotTest):
+ request_rate = None
+ crawl_delay = None
def test_request_rate(self):
+ parser = self.parser
for url in self.good + self.bad:
agent, url = self.get_agent_and_url(url)
with self.subTest(url=url, agent=agent):
- if self.crawl_delay:
- self.assertEqual(
- self.parser.crawl_delay(agent), self.crawl_delay
- )
- if self.request_rate:
+ self.assertEqual(parser.crawl_delay(agent), self.crawl_delay)
+
+ parsed_request_rate = parser.request_rate(agent)
+ self.assertEqual(parsed_request_rate, self.request_rate)
+ if self.request_rate is not None:
self.assertIsInstance(
- self.parser.request_rate(agent),
+ parsed_request_rate,
urllib.robotparser.RequestRate
)
self.assertEqual(
- self.parser.request_rate(agent).requests,
+ parsed_request_rate.requests,
self.request_rate.requests
)
self.assertEqual(
- self.parser.request_rate(agent).seconds,
+ parsed_request_rate.seconds,
self.request_rate.seconds
)
+class EmptyFileTest(BaseRequestRateTest, unittest.TestCase):
+ robots_txt = ''
+ good = ['/foo']
+
+
class CrawlDelayAndRequestRateTest(BaseRequestRateTest, unittest.TestCase):
robots_txt = """\
User-agent: figtree
@@ -141,10 +149,6 @@ class CrawlDelayAndRequestRateTest(BaseRequestRateTest, unittest.TestCase):
class DifferentAgentTest(CrawlDelayAndRequestRateTest):
agent = 'FigTree Robot libwww-perl/5.04'
- # these are not actually tested, but we still need to parse it
- # in order to accommodate the input parameters
- request_rate = None
- crawl_delay = None
class InvalidRequestRateTest(BaseRobotTest, unittest.TestCase):
diff --git a/Lib/urllib/robotparser.py b/Lib/urllib/robotparser.py
index 7089916a4f81..c58565e39451 100644
--- a/Lib/urllib/robotparser.py
+++ b/Lib/urllib/robotparser.py
@@ -186,7 +186,9 @@ def crawl_delay(self, useragent):
for entry in self.entries:
if entry.applies_to(useragent):
return entry.delay
- return self.default_entry.delay
+ if self.default_entry:
+ return self.default_entry.delay
+ return None
def request_rate(self, useragent):
if not self.mtime():
@@ -194,7 +196,9 @@ def request_rate(self, useragent):
for entry in self.entries:
if entry.applies_to(useragent):
return entry.req_rate
- return self.default_entry.req_rate
+ if self.default_entry:
+ return self.default_entry.req_rate
+ return None
def site_maps(self):
if not self.sitemaps:
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst b/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
new file mode 100644
index 000000000000..5271a495624d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-11-19-34-29.bpo-35922.rxpzWr.rst
@@ -0,0 +1,4 @@
+Fix :meth:`RobotFileParser.crawl_delay` and
+:meth:`RobotFileParser.request_rate` to return ``None`` rather than
+raise :exc:`AttributeError` when no relevant rule is defined in the
+robots.txt file. Patch by Rémi Lapeyre.
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/a8e7ebe2880f4c1d3b91d40b9730bb4032…
commit: a8e7ebe2880f4c1d3b91d40b9730bb4032d514d0
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T11:42:45-07:00
summary:
Doc: Deprecation header: More precise wording. (GH-14109)
(cherry picked from commit cfa0394b9760941bbdd089913a6420d2af54314a)
Co-authored-by: Julien Palard <julien(a)palard.fr…
[View More]>
files:
M Doc/tools/templates/layout.html
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index a765a5de8a2d..77915c8431b6 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -5,7 +5,7 @@
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
{% trans %}This document is for an old version of Python that is no longer supported.
You should upgrade, and read the {% endtrans %}
- <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the last stable release {% endtrans %}</a>.
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
</div>
{%- endif %}
{% endblock %}
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/159ae24895272dce5fd53dd8e54809743e…
commit: 159ae24895272dce5fd53dd8e54809743e4f394f
branch: 3.7
author: Julien Palard <julien(a)palard.fr>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-15T14:27:10-04:00
summary:
[3.7] Doc: Add an optional obsolete header. (GH-13638). (GH-13655)
* [3.7] Doc: Add an optional obsolete header. (GH-13638).
(cherry picked from commit 46ed90dd014010703c7a3b2a61c4927644fa8210)
Co-authored-by: Julien …
[View More]Palard <julien(a)palard.fr>
files:
M Doc/README.rst
M Doc/tools/templates/layout.html
diff --git a/Doc/README.rst b/Doc/README.rst
index d7bcc5ba7919..9fc39834f8b5 100644
--- a/Doc/README.rst
+++ b/Doc/README.rst
@@ -113,6 +113,15 @@ Then, from the ``Doc`` directory, run ::
where ``<builder>`` is one of html, text, latex, or htmlhelp (for explanations
see the make targets above).
+Deprecation header
+==================
+
+You can define the ``outdated`` variable in ``html_context`` to show a
+red banner on each page redirecting to the "latest" version.
+
+The link points to the same page on ``/3/``, sadly for the moment the
+language is lost during the process.
+
Contributing
============
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index 8cf903dec6ef..1ea681cdcf2e 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -1,4 +1,15 @@
{% extends "!layout.html" %}
+
+{% block header %}
+{%- if outdated %}
+<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
+ {% trans %}This document is for an old version of Python that is no longer supported.
+ You should upgrade, and read the {% endtrans %}
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
+</div>
+{%- endif %}
+{% endblock %}
+
{% block rootrellink %}
<li><img src="{{ pathto('_static/py.png', 1) }}" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/78309c9a09c896b30918ef1732df910e33…
commit: 78309c9a09c896b30918ef1732df910e33cdaee1
branch: 3.6
author: Julien Palard <julien(a)palard.fr>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-15T14:25:02-04:00
summary:
[3.6] Doc: Add an optional obsolete header. (GH-13638). (GH-13657)
(cherry picked from commit 46ed90dd014010703c7a3b2a61c4927644fa8210)
Co-authored-by: Julien Palard <julien(a)palard.fr>
files:
M Doc/README.rst
M …
[View More]Doc/tools/templates/layout.html
diff --git a/Doc/README.rst b/Doc/README.rst
index d7bcc5ba7919..9fc39834f8b5 100644
--- a/Doc/README.rst
+++ b/Doc/README.rst
@@ -113,6 +113,15 @@ Then, from the ``Doc`` directory, run ::
where ``<builder>`` is one of html, text, latex, or htmlhelp (for explanations
see the make targets above).
+Deprecation header
+==================
+
+You can define the ``outdated`` variable in ``html_context`` to show a
+red banner on each page redirecting to the "latest" version.
+
+The link points to the same page on ``/3/``, sadly for the moment the
+language is lost during the process.
+
Contributing
============
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index c2106678ac60..e7c5d92c888f 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -1,4 +1,15 @@
{% extends "!layout.html" %}
+
+{% block header %}
+{%- if outdated %}
+<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
+ {% trans %}This document is for an old version of Python that is no longer supported.
+ You should upgrade, and read the {% endtrans %}
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
+</div>
+{%- endif %}
+{% endblock %}
+
{% block rootrellink %}
<li><img src="{{ pathto('_static/py.png', 1) }}" alt=""
style="vertical-align: middle; margin-top: -1px"/></li>
[View Less]
1
0

[2.7] bpo-35647: Fix path check in cookiejar. (GH-11436) (GH-13427)
by Serhiy Storchaka June 15, 2019
by Serhiy Storchaka June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/ee15aa2b8501718cb77e339381f72409a4…
commit: ee15aa2b8501718cb77e339381f72409a416f801
branch: 2.7
author: Xtreak <tir.karthi(a)gmail.com>
committer: Serhiy Storchaka <storchaka(a)gmail.com>
date: 2019-06-15T19:29:29+03:00
summary:
[2.7] bpo-35647: Fix path check in cookiejar. (GH-11436) (GH-13427)
files:
A Misc/NEWS.d/next/Security/2019-05-20-00-49-29.bpo-35647.oWmiGU.rst
M Lib/cookielib.py
M Lib/test/test_cookielib.py
diff --git a/Lib/…
[View More]cookielib.py b/Lib/cookielib.py
index 0b471a42f296..1d56d3fe4c0a 100644
--- a/Lib/cookielib.py
+++ b/Lib/cookielib.py
@@ -984,7 +984,7 @@ def set_ok_path(self, cookie, request):
req_path = request_path(request)
if ((cookie.version > 0 or
(cookie.version == 0 and self.strict_ns_set_path)) and
- not req_path.startswith(cookie.path)):
+ not self.path_return_ok(cookie.path, request)):
_debug(" path attribute %s is not a prefix of request "
"path %s", cookie.path, req_path)
return False
@@ -1191,11 +1191,15 @@ def domain_return_ok(self, domain, request):
def path_return_ok(self, path, request):
_debug("- checking cookie path=%s", path)
req_path = request_path(request)
- if not req_path.startswith(path):
- _debug(" %s does not path-match %s", req_path, path)
- return False
- return True
+ pathlen = len(path)
+ if req_path == path:
+ return True
+ elif (req_path.startswith(path) and
+ (path.endswith("/") or req_path[pathlen:pathlen+1] == "/")):
+ return True
+ _debug(" %s does not path-match %s", req_path, path)
+ return False
def vals_sorted_by_key(adict):
keys = adict.keys()
diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py
index 7f7ff614d61d..a93bbfb640b6 100644
--- a/Lib/test/test_cookielib.py
+++ b/Lib/test/test_cookielib.py
@@ -649,6 +649,35 @@ def test_request_path(self):
req = Request("http://www.example.com")
self.assertEqual(request_path(req), "/")
+ def test_path_prefix_match(self):
+ from cookielib import CookieJar, DefaultCookiePolicy
+ from urllib2 import Request
+
+ pol = DefaultCookiePolicy()
+ strict_ns_path_pol = DefaultCookiePolicy(strict_ns_set_path=True)
+
+ c = CookieJar(pol)
+ base_url = "http://bar.com"
+ interact_netscape(c, base_url, 'spam=eggs; Path=/foo')
+ cookie = c._cookies['bar.com']['/foo']['spam']
+
+ for path, ok in [('/foo', True),
+ ('/foo/', True),
+ ('/foo/bar', True),
+ ('/', False),
+ ('/foobad/foo', False)]:
+ url = '{0}{1}'.format(base_url, path)
+ req = Request(url)
+ h = interact_netscape(c, url)
+ if ok:
+ self.assertIn('spam=eggs', h,
+ "cookie not set for {0}".format(path))
+ self.assertTrue(strict_ns_path_pol.set_ok_path(cookie, req))
+ else:
+ self.assertNotIn('spam=eggs', h,
+ "cookie set for {0}".format(path))
+ self.assertFalse(strict_ns_path_pol.set_ok_path(cookie, req))
+
def test_request_port(self):
from urllib2 import Request
from cookielib import request_port, DEFAULT_HTTP_PORT
diff --git a/Misc/NEWS.d/next/Security/2019-05-20-00-49-29.bpo-35647.oWmiGU.rst b/Misc/NEWS.d/next/Security/2019-05-20-00-49-29.bpo-35647.oWmiGU.rst
new file mode 100644
index 000000000000..032e1e2c00bc
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2019-05-20-00-49-29.bpo-35647.oWmiGU.rst
@@ -0,0 +1,3 @@
+Don't set cookie for a request when the request path is a prefix match of
+the cookie's path attribute but doesn't end with "/". Patch by Karthikeyan
+Singaravelan.
[View Less]
1
0

bpo-28009: Fix uuid SkipUnless logic to be based on platform programs capable of introspection (GH-12777)
by Miss Islington (bot) June 15, 2019
by Miss Islington (bot) June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/f0e5c01182daefa20c624383c8a37c25ea…
commit: f0e5c01182daefa20c624383c8a37c25eacfde43
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T09:10:34-07:00
summary:
bpo-28009: Fix uuid SkipUnless logic to be based on platform programs capable of introspection (GH-12777)
uuid could try fallback methods that had no chance of working on a …
[View More]particular
platform, and this could cause spurious test failures, as well as degraded
performance as fallback options were tried and failed.
This fixes both the uuid module and its test's SkipUnless logic to use a
prefiltered list of techniques that may at least potentially work on that platform.
Patch by Michael Felt (aixtools).
(cherry picked from commit 3a1d50e7e573efb577714146bed5c03b9c95f466)
Co-authored-by: Michael Felt <aixtools(a)users.noreply.github.com>
files:
A Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst
M Lib/test/test_uuid.py
M Lib/uuid.py
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index 992ef0cbf804..92642d239b92 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -462,8 +462,7 @@ def test_uuid1_eui64(self):
with unittest.mock.patch.multiple(
self.uuid,
_node=None, # Ignore any cached node value.
- _NODE_GETTERS_WIN32=[too_large_getter],
- _NODE_GETTERS_UNIX=[too_large_getter],
+ _GETTERS=[too_large_getter],
):
node = self.uuid.getnode()
self.assertTrue(0 < node < (1 << 48), '%012x' % node)
@@ -673,7 +672,7 @@ class TestUUIDWithExtModule(BaseTestUUID, unittest.TestCase):
class BaseTestInternals:
- uuid = None
+ _uuid = py_uuid
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_find_mac(self):
@@ -708,27 +707,32 @@ def check_node(self, node, requires=None):
self.assertTrue(0 < node < (1 << 48),
"%s is not an RFC 4122 node ID" % hex)
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._ifconfig_getnode in _uuid._GETTERS,
+ "ifconfig is not used for introspection on this platform")
def test_ifconfig_getnode(self):
node = self.uuid._ifconfig_getnode()
self.check_node(node, 'ifconfig')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._ip_getnode in _uuid._GETTERS,
+ "ip is not used for introspection on this platform")
def test_ip_getnode(self):
node = self.uuid._ip_getnode()
self.check_node(node, 'ip')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._arp_getnode in _uuid._GETTERS,
+ "arp is not used for introspection on this platform")
def test_arp_getnode(self):
node = self.uuid._arp_getnode()
self.check_node(node, 'arp')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._lanscan_getnode in _uuid._GETTERS,
+ "lanscan is not used for introspection on this platform")
def test_lanscan_getnode(self):
node = self.uuid._lanscan_getnode()
self.check_node(node, 'lanscan')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._netstat_getnode in _uuid._GETTERS,
+ "netstat is not used for introspection on this platform")
def test_netstat_getnode(self):
node = self.uuid._netstat_getnode()
self.check_node(node, 'netstat')
diff --git a/Lib/uuid.py b/Lib/uuid.py
index ddc63ccd082c..7aa01bb5c355 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -45,6 +45,7 @@
"""
import os
+import platform
import sys
from enum import Enum
@@ -52,6 +53,12 @@
__author__ = 'Ka-Ping Yee <ping(a)zesty.ca>'
+# The recognized platforms - known behaviors
+_AIX = platform.system() == 'AIX'
+_DARWIN = platform.system() == 'Darwin'
+_LINUX = platform.system() == 'Linux'
+_WINDOWS = platform.system() == 'Windows'
+
RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [
'reserved for NCS compatibility', 'specified in RFC 4122',
'reserved for Microsoft compatibility', 'reserved for future definition']
@@ -673,12 +680,31 @@ def _random_getnode():
return random.getrandbits(48) | (1 << 40)
-_node = None
-
-_NODE_GETTERS_WIN32 = [_windll_getnode, _netbios_getnode, _ipconfig_getnode]
+# _OS_GETTERS, when known, are targetted for a specific OS or platform.
+# The order is by 'common practice' on the specified platform.
+# Note: 'posix' and 'windows' _OS_GETTERS are prefixed by a dll/dlload() method
+# which, when successful, means none of these "external" methods are called.
+# _GETTERS is (also) used by test_uuid.py to SkipUnless(), e.g.,
+# @unittest.skipUnless(_uuid._ifconfig_getnode in _uuid._GETTERS, ...)
+if _LINUX:
+ _OS_GETTERS = [_ip_getnode, _ifconfig_getnode]
+elif _DARWIN:
+ _OS_GETTERS = [_ifconfig_getnode, _arp_getnode, _netstat_getnode]
+elif _WINDOWS:
+ _OS_GETTERS = [_netbios_getnode, _ipconfig_getnode]
+elif _AIX:
+ _OS_GETTERS = [_netstat_getnode]
+else:
+ _OS_GETTERS = [_ifconfig_getnode, _ip_getnode, _arp_getnode,
+ _netstat_getnode, _lanscan_getnode]
+if os.name == 'posix':
+ _GETTERS = [_unix_getnode] + _OS_GETTERS
+elif os.name == 'nt':
+ _GETTERS = [_windll_getnode] + _OS_GETTERS
+else:
+ _GETTERS = _OS_GETTERS
-_NODE_GETTERS_UNIX = [_unix_getnode, _ifconfig_getnode, _ip_getnode,
- _arp_getnode, _lanscan_getnode, _netstat_getnode]
+_node = None
def getnode(*, getters=None):
"""Get the hardware address as a 48-bit positive integer.
@@ -692,12 +718,7 @@ def getnode(*, getters=None):
if _node is not None:
return _node
- if sys.platform == 'win32':
- getters = _NODE_GETTERS_WIN32
- else:
- getters = _NODE_GETTERS_UNIX
-
- for getter in getters + [_random_getnode]:
+ for getter in _GETTERS + [_random_getnode]:
try:
_node = getter()
except:
diff --git a/Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst b/Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst
new file mode 100644
index 000000000000..233640716d15
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst
@@ -0,0 +1,3 @@
+Modify the test_uuid logic to test when a program is available
+AND can be used to obtain a MACADDR as basis for an UUID.
+Patch by M. Felt
[View Less]
1
0
https://github.com/python/cpython/commit/298023633fde5cd60926a2923a01d89655…
commit: 298023633fde5cd60926a2923a01d896550cbf84
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T09:02:57-07:00
summary:
bpo-36785: PEP 574 What's New entry (GH-13931)
(cherry picked from commit c879ff247ae1b67a790ff98d2d59145302cd4e4e)
Co-authored-by: Antoine Pitrou <antoine(a)python.org>
files:…
[View More]
M Doc/whatsnew/3.8.rst
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 21ad11254730..1312a7433022 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -54,7 +54,6 @@ For full details, see the :ref:`changelog <changelog>`.
Some notable items not yet covered here:
- * :pep:`574` - Pickle protocol 5 with out-of-band data buffer support
* :pep:`578` - Runtime audit hooks for potentially sensitive operations
* ``python -m asyncio`` runs a natively async REPL
* ...
@@ -261,6 +260,23 @@ See :pep:`590` for a full description.
(Contributed by Jeroen Demeyer and Mark Shannon in :issue:`36974`.)
+Pickle protocol 5 with out-of-band data buffers
+-----------------------------------------------
+
+When :mod:`pickle` is used to transfer large data between Python processes
+in order to take advantage of multi-core or multi-machine processing,
+it is important to optimize the transfer by reducing memory copies, and
+possibly by applying custom techniques such as data-dependent compression.
+
+The :mod:`pickle` protocol 5 introduces support for out-of-band buffers
+where :pep:`3118`-compatible data can be transmitted separately from the
+main pickle stream, at the discretion of the communication layer.
+
+See :pep:`574` for a full description.
+
+(Contributed by Antoine Pitrou in :issue:`36785`.)
+
+
Other Language Changes
======================
[View Less]
1
0

bpo-28009: Fix uuid SkipUnless logic to be based on platform programs capable of introspection (GH-12777)
by Nick Coghlan June 15, 2019
by Nick Coghlan June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/3a1d50e7e573efb577714146bed5c03b9c…
commit: 3a1d50e7e573efb577714146bed5c03b9c95f466
branch: master
author: Michael Felt <aixtools(a)users.noreply.github.com>
committer: Nick Coghlan <ncoghlan(a)gmail.com>
date: 2019-06-16T01:52:29+10:00
summary:
bpo-28009: Fix uuid SkipUnless logic to be based on platform programs capable of introspection (GH-12777)
uuid could try fallback methods that had no chance of working on a particular
platform, and …
[View More]this could cause spurious test failures, as well as degraded
performance as fallback options were tried and failed.
This fixes both the uuid module and its test's SkipUnless logic to use a
prefiltered list of techniques that may at least potentially work on that platform.
Patch by Michael Felt (aixtools).
files:
A Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst
M Lib/test/test_uuid.py
M Lib/uuid.py
diff --git a/Lib/test/test_uuid.py b/Lib/test/test_uuid.py
index 992ef0cbf804..92642d239b92 100644
--- a/Lib/test/test_uuid.py
+++ b/Lib/test/test_uuid.py
@@ -462,8 +462,7 @@ def test_uuid1_eui64(self):
with unittest.mock.patch.multiple(
self.uuid,
_node=None, # Ignore any cached node value.
- _NODE_GETTERS_WIN32=[too_large_getter],
- _NODE_GETTERS_UNIX=[too_large_getter],
+ _GETTERS=[too_large_getter],
):
node = self.uuid.getnode()
self.assertTrue(0 < node < (1 << 48), '%012x' % node)
@@ -673,7 +672,7 @@ class TestUUIDWithExtModule(BaseTestUUID, unittest.TestCase):
class BaseTestInternals:
- uuid = None
+ _uuid = py_uuid
@unittest.skipUnless(os.name == 'posix', 'requires Posix')
def test_find_mac(self):
@@ -708,27 +707,32 @@ def check_node(self, node, requires=None):
self.assertTrue(0 < node < (1 << 48),
"%s is not an RFC 4122 node ID" % hex)
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._ifconfig_getnode in _uuid._GETTERS,
+ "ifconfig is not used for introspection on this platform")
def test_ifconfig_getnode(self):
node = self.uuid._ifconfig_getnode()
self.check_node(node, 'ifconfig')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._ip_getnode in _uuid._GETTERS,
+ "ip is not used for introspection on this platform")
def test_ip_getnode(self):
node = self.uuid._ip_getnode()
self.check_node(node, 'ip')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._arp_getnode in _uuid._GETTERS,
+ "arp is not used for introspection on this platform")
def test_arp_getnode(self):
node = self.uuid._arp_getnode()
self.check_node(node, 'arp')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._lanscan_getnode in _uuid._GETTERS,
+ "lanscan is not used for introspection on this platform")
def test_lanscan_getnode(self):
node = self.uuid._lanscan_getnode()
self.check_node(node, 'lanscan')
- @unittest.skipUnless(os.name == 'posix', 'requires Posix')
+ @unittest.skipUnless(_uuid._netstat_getnode in _uuid._GETTERS,
+ "netstat is not used for introspection on this platform")
def test_netstat_getnode(self):
node = self.uuid._netstat_getnode()
self.check_node(node, 'netstat')
diff --git a/Lib/uuid.py b/Lib/uuid.py
index ddc63ccd082c..7aa01bb5c355 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -45,6 +45,7 @@
"""
import os
+import platform
import sys
from enum import Enum
@@ -52,6 +53,12 @@
__author__ = 'Ka-Ping Yee <ping(a)zesty.ca>'
+# The recognized platforms - known behaviors
+_AIX = platform.system() == 'AIX'
+_DARWIN = platform.system() == 'Darwin'
+_LINUX = platform.system() == 'Linux'
+_WINDOWS = platform.system() == 'Windows'
+
RESERVED_NCS, RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE = [
'reserved for NCS compatibility', 'specified in RFC 4122',
'reserved for Microsoft compatibility', 'reserved for future definition']
@@ -673,12 +680,31 @@ def _random_getnode():
return random.getrandbits(48) | (1 << 40)
-_node = None
-
-_NODE_GETTERS_WIN32 = [_windll_getnode, _netbios_getnode, _ipconfig_getnode]
+# _OS_GETTERS, when known, are targetted for a specific OS or platform.
+# The order is by 'common practice' on the specified platform.
+# Note: 'posix' and 'windows' _OS_GETTERS are prefixed by a dll/dlload() method
+# which, when successful, means none of these "external" methods are called.
+# _GETTERS is (also) used by test_uuid.py to SkipUnless(), e.g.,
+# @unittest.skipUnless(_uuid._ifconfig_getnode in _uuid._GETTERS, ...)
+if _LINUX:
+ _OS_GETTERS = [_ip_getnode, _ifconfig_getnode]
+elif _DARWIN:
+ _OS_GETTERS = [_ifconfig_getnode, _arp_getnode, _netstat_getnode]
+elif _WINDOWS:
+ _OS_GETTERS = [_netbios_getnode, _ipconfig_getnode]
+elif _AIX:
+ _OS_GETTERS = [_netstat_getnode]
+else:
+ _OS_GETTERS = [_ifconfig_getnode, _ip_getnode, _arp_getnode,
+ _netstat_getnode, _lanscan_getnode]
+if os.name == 'posix':
+ _GETTERS = [_unix_getnode] + _OS_GETTERS
+elif os.name == 'nt':
+ _GETTERS = [_windll_getnode] + _OS_GETTERS
+else:
+ _GETTERS = _OS_GETTERS
-_NODE_GETTERS_UNIX = [_unix_getnode, _ifconfig_getnode, _ip_getnode,
- _arp_getnode, _lanscan_getnode, _netstat_getnode]
+_node = None
def getnode(*, getters=None):
"""Get the hardware address as a 48-bit positive integer.
@@ -692,12 +718,7 @@ def getnode(*, getters=None):
if _node is not None:
return _node
- if sys.platform == 'win32':
- getters = _NODE_GETTERS_WIN32
- else:
- getters = _NODE_GETTERS_UNIX
-
- for getter in getters + [_random_getnode]:
+ for getter in _GETTERS + [_random_getnode]:
try:
_node = getter()
except:
diff --git a/Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst b/Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst
new file mode 100644
index 000000000000..233640716d15
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-04-11-07-59-43.bpo-28009.s85urF.rst
@@ -0,0 +1,3 @@
+Modify the test_uuid logic to test when a program is available
+AND can be used to obtain a MACADDR as basis for an UUID.
+Patch by M. Felt
[View Less]
1
0

[2.7] bpo-35121: prefix dot in domain for proper subdomain validation (GH-10258) (GH-13426)
by Miss Islington (bot) June 15, 2019
by Miss Islington (bot) June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/979daae300916adb399ab5b51410b6ebd0…
commit: 979daae300916adb399ab5b51410b6ebd0888f13
branch: 2.7
author: Xtreak <tir.karthi(a)gmail.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-15T08:29:43-07:00
summary:
[2.7] bpo-35121: prefix dot in domain for proper subdomain validation (GH-10258) (GH-13426)
This is a manual backport of ca7fe5063593958e5efdf90f068582837f07bd14 since 2.7 has `…
[View More]http.cookiejar` in `cookielib`
https://bugs.python.org/issue35121
files:
A Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst
M Lib/cookielib.py
M Lib/test/test_cookielib.py
diff --git a/Lib/cookielib.py b/Lib/cookielib.py
index 2dd7c48728e0..0b471a42f296 100644
--- a/Lib/cookielib.py
+++ b/Lib/cookielib.py
@@ -1139,6 +1139,11 @@ def return_ok_domain(self, cookie, request):
req_host, erhn = eff_request_host(request)
domain = cookie.domain
+ if domain and not domain.startswith("."):
+ dotdomain = "." + domain
+ else:
+ dotdomain = domain
+
# strict check of non-domain cookies: Mozilla does this, MSIE5 doesn't
if (cookie.version == 0 and
(self.strict_ns_domain & self.DomainStrictNonDomain) and
@@ -1151,7 +1156,7 @@ def return_ok_domain(self, cookie, request):
_debug(" effective request-host name %s does not domain-match "
"RFC 2965 cookie domain %s", erhn, domain)
return False
- if cookie.version == 0 and not ("."+erhn).endswith(domain):
+ if cookie.version == 0 and not ("."+erhn).endswith(dotdomain):
_debug(" request-host %s does not match Netscape cookie domain "
"%s", req_host, domain)
return False
@@ -1165,7 +1170,11 @@ def domain_return_ok(self, domain, request):
req_host = "."+req_host
if not erhn.startswith("."):
erhn = "."+erhn
- if not (req_host.endswith(domain) or erhn.endswith(domain)):
+ if domain and not domain.startswith("."):
+ dotdomain = "." + domain
+ else:
+ dotdomain = domain
+ if not (req_host.endswith(dotdomain) or erhn.endswith(dotdomain)):
#_debug(" request domain %s does not match cookie domain %s",
# req_host, domain)
return False
diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py
index f2dd9727d137..7f7ff614d61d 100644
--- a/Lib/test/test_cookielib.py
+++ b/Lib/test/test_cookielib.py
@@ -368,6 +368,7 @@ def test_domain_return_ok(self):
("http://foo.bar.com/", ".foo.bar.com", True),
("http://foo.bar.com/", "foo.bar.com", True),
("http://foo.bar.com/", ".bar.com", True),
+ ("http://foo.bar.com/", "bar.com", True),
("http://foo.bar.com/", "com", True),
("http://foo.com/", "rhubarb.foo.com", False),
("http://foo.com/", ".foo.com", True),
@@ -378,6 +379,8 @@ def test_domain_return_ok(self):
("http://foo/", "foo", True),
("http://foo/", "foo.local", True),
("http://foo/", ".local", True),
+ ("http://barfoo.com", ".foo.com", False),
+ ("http://barfoo.com", "foo.com", False),
]:
request = urllib2.Request(url)
r = pol.domain_return_ok(domain, request)
@@ -938,6 +941,33 @@ def test_domain_block(self):
c.add_cookie_header(req)
self.assertFalse(req.has_header("Cookie"))
+ c.clear()
+
+ pol.set_blocked_domains([])
+ req = Request("http://acme.com/")
+ res = FakeResponse(headers, "http://acme.com/")
+ cookies = c.make_cookies(res, req)
+ c.extract_cookies(res, req)
+ self.assertEqual(len(c), 1)
+
+ req = Request("http://acme.com/")
+ c.add_cookie_header(req)
+ self.assertTrue(req.has_header("Cookie"))
+
+ req = Request("http://badacme.com/")
+ c.add_cookie_header(req)
+ self.assertFalse(pol.return_ok(cookies[0], req))
+ self.assertFalse(req.has_header("Cookie"))
+
+ p = pol.set_blocked_domains(["acme.com"])
+ req = Request("http://acme.com/")
+ c.add_cookie_header(req)
+ self.assertFalse(req.has_header("Cookie"))
+
+ req = Request("http://badacme.com/")
+ c.add_cookie_header(req)
+ self.assertFalse(req.has_header("Cookie"))
+
def test_secure(self):
from cookielib import CookieJar, DefaultCookiePolicy
diff --git a/Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst b/Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst
new file mode 100644
index 000000000000..77251806163b
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2019-05-20-00-35-12.bpo-35121.RRi-HU.rst
@@ -0,0 +1,4 @@
+Don't send cookies of domain A without Domain attribute to domain B when
+domain A is a suffix match of domain B while using a cookiejar with
+:class:`cookielib.DefaultCookiePolicy` policy. Patch by Karthikeyan
+Singaravelan.
[View Less]
1
0

bpo-37289: Remove 'if False' handling in the peephole optimizer (GH-14099) (GH-14111)
by Pablo Galindo June 15, 2019
by Pablo Galindo June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/81fecf7b7a6e766a213c6e670219c1da52…
commit: 81fecf7b7a6e766a213c6e670219c1da52461589
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Pablo Galindo <Pablogsal(a)gmail.com>
date: 2019-06-15T16:22:34+01:00
summary:
bpo-37289: Remove 'if False' handling in the peephole optimizer (GH-14099) (GH-14111)
(cherry picked from commit 7a68f8c28bb78d957555a5001dac4df6345434a0)
Co-authored-by: …
[View More]Pablo Galindo <Pablogsal(a)gmail.com>
files:
M Python/peephole.c
diff --git a/Python/peephole.c b/Python/peephole.c
index f1b71ed1a730..277a216ae075 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -309,18 +309,12 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
}
PyObject* cnt = PyList_GET_ITEM(consts, get_arg(codestr, i));
int is_true = PyObject_IsTrue(cnt);
+ if (is_true == -1) {
+ goto exitError;
+ }
if (is_true == 1) {
fill_nops(codestr, op_start, nexti + 1);
cumlc = 0;
- } else if (is_true == 0) {
- if (i > 1 &&
- (_Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_TRUE ||
- _Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_FALSE)) {
- break;
- }
- h = get_arg(codestr, nexti) / sizeof(_Py_CODEUNIT);
- tgt = find_op(codestr, codelen, h);
- fill_nops(codestr, op_start, tgt);
}
break;
[View Less]
1
0

bpo-37289: Remove 'if False' handling in the peephole optimizer (GH-14099) (GH-14112)
by Pablo Galindo June 15, 2019
by Pablo Galindo June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/284daeade210d3aac049f4278a1fb76d19…
commit: 284daeade210d3aac049f4278a1fb76d19e6d78a
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Pablo Galindo <Pablogsal(a)gmail.com>
date: 2019-06-15T16:22:08+01:00
summary:
bpo-37289: Remove 'if False' handling in the peephole optimizer (GH-14099) (GH-14112)
(cherry picked from commit 7a68f8c28bb78d957555a5001dac4df6345434a0)
Co-authored-by: …
[View More]Pablo Galindo <Pablogsal(a)gmail.com>
files:
M Python/peephole.c
diff --git a/Python/peephole.c b/Python/peephole.c
index d7b1dfc4d9c1..3e56e788b007 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -311,18 +311,12 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
}
PyObject* cnt = PyList_GET_ITEM(consts, get_arg(codestr, i));
int is_true = PyObject_IsTrue(cnt);
+ if (is_true == -1) {
+ goto exitError;
+ }
if (is_true == 1) {
fill_nops(codestr, op_start, nexti + 1);
cumlc = 0;
- } else if (is_true == 0) {
- if (i > 1 &&
- (_Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_TRUE ||
- _Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_FALSE)) {
- break;
- }
- h = get_arg(codestr, nexti) / sizeof(_Py_CODEUNIT);
- tgt = find_op(codestr, codelen, h);
- fill_nops(codestr, op_start, tgt);
}
break;
[View Less]
1
0

bpo-37289: Remove 'if False' handling in the peephole optimizer (GH-14099)
by Pablo Galindo June 15, 2019
by Pablo Galindo June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/7a68f8c28bb78d957555a5001dac4df634…
commit: 7a68f8c28bb78d957555a5001dac4df6345434a0
branch: master
author: Pablo Galindo <Pablogsal(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T15:58:00+01:00
summary:
bpo-37289: Remove 'if False' handling in the peephole optimizer (GH-14099)
files:
M Python/peephole.c
diff --git a/Python/peephole.c b/Python/peephole.c
index d7b1dfc4d9c1..3e56e788b007 100644
--- a/Python/peephole.…
[View More]c
+++ b/Python/peephole.c
@@ -311,18 +311,12 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
}
PyObject* cnt = PyList_GET_ITEM(consts, get_arg(codestr, i));
int is_true = PyObject_IsTrue(cnt);
+ if (is_true == -1) {
+ goto exitError;
+ }
if (is_true == 1) {
fill_nops(codestr, op_start, nexti + 1);
cumlc = 0;
- } else if (is_true == 0) {
- if (i > 1 &&
- (_Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_TRUE ||
- _Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_FALSE)) {
- break;
- }
- h = get_arg(codestr, nexti) / sizeof(_Py_CODEUNIT);
- tgt = find_op(codestr, codelen, h);
- fill_nops(codestr, op_start, tgt);
}
break;
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/cfa0394b9760941bbdd089913a6420d2af…
commit: cfa0394b9760941bbdd089913a6420d2af54314a
branch: master
author: Julien Palard <julien(a)palard.fr>
committer: Carol Willing <carolcode(a)willingconsulting.com>
date: 2019-06-15T10:21:37-04:00
summary:
Doc: Deprecation header: More precise wording. (GH-14109)
files:
M Doc/tools/templates/layout.html
diff --git a/Doc/tools/templates/layout.html b/Doc/tools/templates/layout.html
index a765a5de8a2d..…
[View More]77915c8431b6 100644
--- a/Doc/tools/templates/layout.html
+++ b/Doc/tools/templates/layout.html
@@ -5,7 +5,7 @@
<div id="outdated-warning" style="padding: .5em; text-align: center; background-color: #FFBABA; color: #6A0E0E;">
{% trans %}This document is for an old version of Python that is no longer supported.
You should upgrade, and read the {% endtrans %}
- <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the last stable release {% endtrans %}</a>.
+ <a href="/3/{{ pagename }}{{ file_suffix }}">{% trans %} Python documentation for the current stable release {% endtrans %}</a>.
</div>
{%- endif %}
{% endblock %}
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/6ef4d323bdb0f910d6e5e4d81a654253d4…
commit: 6ef4d323bdb0f910d6e5e4d81a654253d4d1bcd5
branch: master
author: Alex Gaynor <alex.gaynor(a)gmail.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-15T07:09:36-07:00
summary:
Update link in colorsys docs to be https (GH-14062)
files:
M Doc/library/colorsys.rst
diff --git a/Doc/library/colorsys.rst b/Doc/library/colorsys.rst
index 1360c7cc9f1d..…
[View More]b672a05b3914 100644
--- a/Doc/library/colorsys.rst
+++ b/Doc/library/colorsys.rst
@@ -21,7 +21,7 @@ spaces, the coordinates are all between 0 and 1.
.. seealso::
More information about color spaces can be found at
- http://poynton.ca/ColorFAQ.html and
+ https://poynton.ca/ColorFAQ.html and
https://www.cambridgeincolour.com/tutorials/color-spaces.htm.
The :mod:`colorsys` module defines the following functions:
[View Less]
1
0
https://github.com/python/cpython/commit/7d23dbe6d17bb872da5b89a5674cb32a7a…
commit: 7d23dbe6d17bb872da5b89a5674cb32a7a1a2b9c
branch: master
author: Julien Palard <julien(a)palard.fr>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T15:41:58+02:00
summary:
Doc: Bump Sphinx verison. (#13785)
To reflect the one we're using in production.
files:
M .azure-pipelines/docs-steps.yml
M .travis.yml
M Doc/Makefile
diff --git a/.azure-pipelines/docs-steps.yml b/.azure-pipelines/…
[View More]docs-steps.yml
index 492e4e34bb2d..96361961ea75 100644
--- a/.azure-pipelines/docs-steps.yml
+++ b/.azure-pipelines/docs-steps.yml
@@ -12,7 +12,7 @@ steps:
inputs:
versionSpec: '>=3.6'
-- script: python -m pip install sphinx==1.8.2 blurb python-docs-theme
+- script: python -m pip install sphinx==2.0.1 blurb python-docs-theme
displayName: 'Install build dependencies'
- ${{ if ne(parameters.latex, 'true') }}:
diff --git a/.travis.yml b/.travis.yml
index 02de997750ab..addff7733479 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -55,7 +55,7 @@ matrix:
# Sphinx is pinned so that new versions that introduce new warnings won't suddenly cause build failures.
# (Updating the version is fine as long as no warnings are raised by doing so.)
# The theme used by the docs is stored separately, so we need to install that as well.
- - python -m pip install sphinx==1.8.2 blurb python-docs-theme
+ - python -m pip install sphinx==2.0.1 blurb python-docs-theme
script:
- make check suspicious html SPHINXOPTS="-q -W -j4"
- name: "Documentation tests"
diff --git a/Doc/Makefile b/Doc/Makefile
index 6f86728ea834..3bcd9f23752b 100644
--- a/Doc/Makefile
+++ b/Doc/Makefile
@@ -133,7 +133,7 @@ clean:
venv:
$(PYTHON) -m venv $(VENVDIR)
$(VENVDIR)/bin/python3 -m pip install -U pip setuptools
- $(VENVDIR)/bin/python3 -m pip install -U Sphinx blurb python-docs-theme
+ $(VENVDIR)/bin/python3 -m pip install -U Sphinx==2.0.1 blurb python-docs-theme
@echo "The venv has been created in the $(VENVDIR) directory"
dist:
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/d799fd34689f61560891339677200c2251…
commit: d799fd34689f61560891339677200c225176796e
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T05:11:15-07:00
summary:
Fix typo in Lib/concurrent/futures/thread.py (GH-13953)
(cherry picked from commit 552ace7498722f1add9f3782751b0d365f4c24c8)
Co-authored-by: ubordignon <48903745+ubordignon(a)…
[View More]users.noreply.github.com>
files:
M Lib/concurrent/futures/process.py
M Lib/concurrent/futures/thread.py
diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py
index 6c6905380eff..9106552c5d06 100644
--- a/Lib/concurrent/futures/process.py
+++ b/Lib/concurrent/futures/process.py
@@ -504,7 +504,7 @@ def __init__(self, max_workers=None, mp_context=None,
worker processes will be created as the machine has processors.
mp_context: A multiprocessing context to launch the workers. This
object should provide SimpleQueue, Queue and Process.
- initializer: An callable used to initialize worker processes.
+ initializer: A callable used to initialize worker processes.
initargs: A tuple of arguments to pass to the initializer.
"""
_check_system_limits()
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py
index c7c9ef44c60b..9e3fb8b69294 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -118,7 +118,7 @@ def __init__(self, max_workers=None, thread_name_prefix='',
max_workers: The maximum number of threads that can be used to
execute the given calls.
thread_name_prefix: An optional name prefix to give our threads.
- initializer: An callable used to initialize worker threads.
+ initializer: A callable used to initialize worker threads.
initargs: A tuple of arguments to pass to the initializer.
"""
if max_workers is None:
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/687af44df8caa69312b65d1bd7bf1f05dd…
commit: 687af44df8caa69312b65d1bd7bf1f05dd1e5778
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T05:02:34-07:00
summary:
Fix typo in Lib/concurrent/futures/thread.py (GH-13953)
(cherry picked from commit 552ace7498722f1add9f3782751b0d365f4c24c8)
Co-authored-by: ubordignon <48903745+ubordignon(a)…
[View More]users.noreply.github.com>
files:
M Lib/concurrent/futures/process.py
M Lib/concurrent/futures/thread.py
diff --git a/Lib/concurrent/futures/process.py b/Lib/concurrent/futures/process.py
index dd14eaec907d..2b2b78eedd78 100644
--- a/Lib/concurrent/futures/process.py
+++ b/Lib/concurrent/futures/process.py
@@ -505,7 +505,7 @@ def __init__(self, max_workers=None, mp_context=None,
worker processes will be created as the machine has processors.
mp_context: A multiprocessing context to launch the workers. This
object should provide SimpleQueue, Queue and Process.
- initializer: An callable used to initialize worker processes.
+ initializer: A callable used to initialize worker processes.
initargs: A tuple of arguments to pass to the initializer.
"""
_check_system_limits()
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py
index 2426e94de91f..9e669b21962a 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -125,7 +125,7 @@ def __init__(self, max_workers=None, thread_name_prefix='',
max_workers: The maximum number of threads that can be used to
execute the given calls.
thread_name_prefix: An optional name prefix to give our threads.
- initializer: An callable used to initialize worker threads.
+ initializer: A callable used to initialize worker threads.
initargs: A tuple of arguments to pass to the initializer.
"""
if max_workers is None:
[View Less]
1
0

[3.7] bpo-37279: Fix asyncio sendfile support when extra data are sent in fallback mode. (GH-14075). (GH-14103)
by Andrew Svetlov June 15, 2019
by Andrew Svetlov June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/e5d67f1e31381d28b24f6e1c0f8388d9bf…
commit: e5d67f1e31381d28b24f6e1c0f8388d9bf0bfc5f
branch: 3.7
author: Andrew Svetlov <andrew.svetlov(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T14:56:27+03:00
summary:
[3.7] bpo-37279: Fix asyncio sendfile support when extra data are sent in fallback mode. (GH-14075). (GH-14103)
(cherry picked from commit ef2152354f03a165c5e3adb53e2276934fabd50a)
Co-authored-by: Andrew Svetlov …
[View More]<andrew.svetlov(a)gmail.com>
files:
A Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
M Lib/asyncio/base_events.py
M Lib/test/test_asyncio/test_events.py
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index a9660ca1089c..52134372fa9f 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -827,7 +827,7 @@ def _getaddrinfo_debug(self, host, port, family, type, proto, flags):
read = await self.run_in_executor(None, file.readinto, view)
if not read:
break # EOF
- await self.sock_sendall(sock, view)
+ await self.sock_sendall(sock, view[:read])
total_sent += read
return total_sent
finally:
@@ -1082,7 +1082,7 @@ def _check_sendfile_params(self, sock, file, offset, count):
if not read:
return total_sent # EOF
await proto.drain()
- transp.write(view)
+ transp.write(view[:read])
total_sent += read
finally:
if total_sent > 0 and hasattr(file, 'seek'):
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index 9466111b8ef7..d2c1d7c8a671 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -2117,7 +2117,8 @@ def test_subprocess_shell_invalid_args(self):
class SendfileBase:
- DATA = b"SendfileBaseData" * (1024 * 8) # 128 KiB
+ # 128 KiB plus small unaligned to buffer chunk
+ DATA = b"SendfileBaseData" * (1024 * 8 + 1)
# Reduce socket buffer size to test on relative small data sets.
BUF_SIZE = 4 * 1024 # 4 KiB
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst b/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
new file mode 100644
index 000000000000..d740b9b62b08
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
@@ -0,0 +1,2 @@
+Fix asyncio sendfile support when sendfile sends extra data in fallback
+mode.
[View Less]
1
0

[3.8] Use threadpool for reading from file in sendfile fallback mode (GH-14076) (GH-14102)
by Andrew Svetlov June 15, 2019
by Andrew Svetlov June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/b6ff2cd8c5bc1d4e4e61b9138436b507b3…
commit: b6ff2cd8c5bc1d4e4e61b9138436b507b31c6c7a
branch: 3.8
author: Andrew Svetlov <andrew.svetlov(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T14:55:52+03:00
summary:
[3.8] Use threadpool for reading from file in sendfile fallback mode (GH-14076) (GH-14102)
(cherry picked from commit 0237265e8287141c40faa8719da3a2d21d511d0d)
Co-authored-by: Andrew Svetlov <andrew.svetlov(a)…
[View More]gmail.com>
files:
A Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
M Lib/asyncio/base_events.py
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 90de8587a3bb..14b80bdda9c0 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -1141,7 +1141,7 @@ def _check_sendfile_params(self, sock, file, offset, count):
if blocksize <= 0:
return total_sent
view = memoryview(buf)[:blocksize]
- read = file.readinto(view)
+ read = await self.run_in_executor(None, file.readinto, view)
if not read:
return total_sent # EOF
await proto.drain()
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst b/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
new file mode 100644
index 000000000000..7cdc56a72ce4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
@@ -0,0 +1 @@
+Use threadpool for reading from file for sendfile fallback mode.
[View Less]
1
0
https://github.com/python/cpython/commit/30cac20101717e7cbb13db470787f8437b…
commit: 30cac20101717e7cbb13db470787f8437bd98b04
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T04:50:11-07:00
summary:
Update weakref.rst (GH-14098)
(cherry picked from commit f475729a714a9fb13672f8989c4abbafb783e09b)
Co-authored-by: Géry Ogam <gery.ogam(a)gmail.com>
files:
M Doc/library/…
[View More]weakref.rst
diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst
index 7f3d267d74c2..8d8a0b5df268 100644
--- a/Doc/library/weakref.rst
+++ b/Doc/library/weakref.rst
@@ -65,8 +65,8 @@ exposed by the :mod:`weakref` module for the benefit of advanced uses.
Not all objects can be weakly referenced; those objects which can include class
instances, functions written in Python (but not in C), instance methods, sets,
-frozensets, some :term:`file objects <file object>`, :term:`generator`\s, type
-objects, sockets, arrays, deques, regular expression pattern objects, and code
+frozensets, some :term:`file objects <file object>`, :term:`generators <generator>`,
+type objects, sockets, arrays, deques, regular expression pattern objects, and code
objects.
.. versionchanged:: 3.2
@@ -80,9 +80,10 @@ support weak references but can add support through subclassing::
obj = Dict(red=1, green=2, blue=3) # this object is weak referenceable
-Other built-in types such as :class:`tuple` and :class:`int` do not support weak
-references even when subclassed (This is an implementation detail and may be
-different across various Python implementations.).
+.. impl-detail::
+
+ Other built-in types such as :class:`tuple` and :class:`int` do not support weak
+ references even when subclassed.
Extension types can easily be made to support weak references; see
:ref:`weakref-support`.
[View Less]
1
0
https://github.com/python/cpython/commit/68878140694faa8dc53daeb5d9fee4d60e…
commit: 68878140694faa8dc53daeb5d9fee4d60ed2b672
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T04:49:43-07:00
summary:
Update weakref.rst (GH-14098)
(cherry picked from commit f475729a714a9fb13672f8989c4abbafb783e09b)
Co-authored-by: Géry Ogam <gery.ogam(a)gmail.com>
files:
M Doc/library/…
[View More]weakref.rst
diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst
index a28d71060f38..b3c8e3545533 100644
--- a/Doc/library/weakref.rst
+++ b/Doc/library/weakref.rst
@@ -65,8 +65,8 @@ exposed by the :mod:`weakref` module for the benefit of advanced uses.
Not all objects can be weakly referenced; those objects which can include class
instances, functions written in Python (but not in C), instance methods, sets,
-frozensets, some :term:`file objects <file object>`, :term:`generator`\s, type
-objects, sockets, arrays, deques, regular expression pattern objects, and code
+frozensets, some :term:`file objects <file object>`, :term:`generators <generator>`,
+type objects, sockets, arrays, deques, regular expression pattern objects, and code
objects.
.. versionchanged:: 3.2
@@ -80,9 +80,10 @@ support weak references but can add support through subclassing::
obj = Dict(red=1, green=2, blue=3) # this object is weak referenceable
-Other built-in types such as :class:`tuple` and :class:`int` do not support weak
-references even when subclassed (This is an implementation detail and may be
-different across various Python implementations.).
+.. impl-detail::
+
+ Other built-in types such as :class:`tuple` and :class:`int` do not support weak
+ references even when subclassed.
Extension types can easily be made to support weak references; see
:ref:`weakref-support`.
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/552ace7498722f1add9f3782751b0d365f…
commit: 552ace7498722f1add9f3782751b0d365f4c24c8
branch: master
author: ubordignon <48903745+ubordignon(a)users.noreply.github.com>
committer: Cheryl Sabella <cheryl.sabella(a)gmail.com>
date: 2019-06-15T07:43:10-04:00
summary:
Fix typo in Lib/concurrent/futures/thread.py (GH-13953)
files:
M Lib/concurrent/futures/process.py
M Lib/concurrent/futures/thread.py
diff --git a/Lib/concurrent/futures/process.…
[View More]py b/Lib/concurrent/futures/process.py
index cfdcd3ed7ea9..9e2ab9db64f6 100644
--- a/Lib/concurrent/futures/process.py
+++ b/Lib/concurrent/futures/process.py
@@ -505,7 +505,7 @@ def __init__(self, max_workers=None, mp_context=None,
worker processes will be created as the machine has processors.
mp_context: A multiprocessing context to launch the workers. This
object should provide SimpleQueue, Queue and Process.
- initializer: An callable used to initialize worker processes.
+ initializer: A callable used to initialize worker processes.
initargs: A tuple of arguments to pass to the initializer.
"""
_check_system_limits()
diff --git a/Lib/concurrent/futures/thread.py b/Lib/concurrent/futures/thread.py
index 75d05a76be3f..d84b3aa7da0c 100644
--- a/Lib/concurrent/futures/thread.py
+++ b/Lib/concurrent/futures/thread.py
@@ -125,7 +125,7 @@ def __init__(self, max_workers=None, thread_name_prefix='',
max_workers: The maximum number of threads that can be used to
execute the given calls.
thread_name_prefix: An optional name prefix to give our threads.
- initializer: An callable used to initialize worker threads.
+ initializer: A callable used to initialize worker threads.
initargs: A tuple of arguments to pass to the initializer.
"""
if max_workers is None:
[View Less]
1
0
https://github.com/python/cpython/commit/f475729a714a9fb13672f8989c4abbafb7…
commit: f475729a714a9fb13672f8989c4abbafb783e09b
branch: master
author: Géry Ogam <gery.ogam(a)gmail.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-15T04:33:23-07:00
summary:
Update weakref.rst (GH-14098)
files:
M Doc/library/weakref.rst
diff --git a/Doc/library/weakref.rst b/Doc/library/weakref.rst
index a5c4295ef1fa..c3519e45beb6 100644
--- a/Doc/…
[View More]library/weakref.rst
+++ b/Doc/library/weakref.rst
@@ -65,8 +65,8 @@ exposed by the :mod:`weakref` module for the benefit of advanced uses.
Not all objects can be weakly referenced; those objects which can include class
instances, functions written in Python (but not in C), instance methods, sets,
-frozensets, some :term:`file objects <file object>`, :term:`generator`\s, type
-objects, sockets, arrays, deques, regular expression pattern objects, and code
+frozensets, some :term:`file objects <file object>`, :term:`generators <generator>`,
+type objects, sockets, arrays, deques, regular expression pattern objects, and code
objects.
.. versionchanged:: 3.2
@@ -80,9 +80,10 @@ support weak references but can add support through subclassing::
obj = Dict(red=1, green=2, blue=3) # this object is weak referenceable
-Other built-in types such as :class:`tuple` and :class:`int` do not support weak
-references even when subclassed (This is an implementation detail and may be
-different across various Python implementations.).
+.. impl-detail::
+
+ Other built-in types such as :class:`tuple` and :class:`int` do not support weak
+ references even when subclassed.
Extension types can easily be made to support weak references; see
:ref:`weakref-support`.
[View Less]
1
0

Use threadpool for reading from file in sendfile fallback mode (GH-14076)
by Miss Islington (bot) June 15, 2019
by Miss Islington (bot) June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/5e97450d83d4f4240315f46419686ec193…
commit: 5e97450d83d4f4240315f46419686ec193273e13
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T04:27:10-07:00
summary:
Use threadpool for reading from file in sendfile fallback mode (GH-14076)
(cherry picked from commit 0237265e8287141c40faa8719da3a2d21d511d0d)
Co-authored-by: Andrew Svetlov <…
[View More]andrew.svetlov(a)gmail.com>
files:
A Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
M Lib/asyncio/base_events.py
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index a736d01d6f37..a9660ca1089c 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -1078,7 +1078,7 @@ def _check_sendfile_params(self, sock, file, offset, count):
if blocksize <= 0:
return total_sent
view = memoryview(buf)[:blocksize]
- read = file.readinto(view)
+ read = await self.run_in_executor(None, file.readinto, view)
if not read:
return total_sent # EOF
await proto.drain()
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst b/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
new file mode 100644
index 000000000000..7cdc56a72ce4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
@@ -0,0 +1 @@
+Use threadpool for reading from file for sendfile fallback mode.
[View Less]
1
0

bpo-37279: Fix asyncio sendfile support when extra data are sent in fallback mode. (GH-14075)
by Miss Islington (bot) June 15, 2019
by Miss Islington (bot) June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/bb07321c6a7e1cbe597c3fc5fa275a85d0…
commit: bb07321c6a7e1cbe597c3fc5fa275a85d0f50acb
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T04:24:16-07:00
summary:
bpo-37279: Fix asyncio sendfile support when extra data are sent in fallback mode. (GH-14075)
(cherry picked from commit ef2152354f03a165c5e3adb53e2276934fabd50a)
Co-authored-by: …
[View More]Andrew Svetlov <andrew.svetlov(a)gmail.com>
files:
A Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
M Lib/asyncio/base_events.py
M Lib/test/test_asyncio/test_sendfile.py
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index e0025397fa8a..90de8587a3bb 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -861,7 +861,7 @@ def _getaddrinfo_debug(self, host, port, family, type, proto, flags):
read = await self.run_in_executor(None, file.readinto, view)
if not read:
break # EOF
- await self.sock_sendall(sock, view)
+ await self.sock_sendall(sock, view[:read])
total_sent += read
return total_sent
finally:
@@ -1145,7 +1145,7 @@ def _check_sendfile_params(self, sock, file, offset, count):
if not read:
return total_sent # EOF
await proto.drain()
- transp.write(view)
+ transp.write(view[:read])
total_sent += read
finally:
if total_sent > 0 and hasattr(file, 'seek'):
diff --git a/Lib/test/test_asyncio/test_sendfile.py b/Lib/test/test_asyncio/test_sendfile.py
index f148fe27e6ad..3b7f784c5ee3 100644
--- a/Lib/test/test_asyncio/test_sendfile.py
+++ b/Lib/test/test_asyncio/test_sendfile.py
@@ -86,7 +86,8 @@ def connection_lost(self, exc):
class SendfileBase:
- DATA = b"SendfileBaseData" * (1024 * 8) # 128 KiB
+ # 128 KiB plus small unaligned to buffer chunk
+ DATA = b"SendfileBaseData" * (1024 * 8 + 1)
# Reduce socket buffer size to test on relative small data sets.
BUF_SIZE = 4 * 1024 # 4 KiB
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst b/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
new file mode 100644
index 000000000000..d740b9b62b08
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
@@ -0,0 +1,2 @@
+Fix asyncio sendfile support when sendfile sends extra data in fallback
+mode.
[View Less]
1
0

Use threadpool for reading from file in sendfile fallback mode (#14076)
by Andrew Svetlov June 15, 2019
by Andrew Svetlov June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/0237265e8287141c40faa8719da3a2d21d…
commit: 0237265e8287141c40faa8719da3a2d21d511d0d
branch: master
author: Andrew Svetlov <andrew.svetlov(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T14:05:35+03:00
summary:
Use threadpool for reading from file in sendfile fallback mode (#14076)
files:
A Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
M Lib/asyncio/base_events.py
diff --git a/Lib/asyncio/…
[View More]base_events.py b/Lib/asyncio/base_events.py
index 90de8587a3bb..14b80bdda9c0 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -1141,7 +1141,7 @@ def _check_sendfile_params(self, sock, file, offset, count):
if blocksize <= 0:
return total_sent
view = memoryview(buf)[:blocksize]
- read = file.readinto(view)
+ read = await self.run_in_executor(None, file.readinto, view)
if not read:
return total_sent # EOF
await proto.drain()
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst b/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
new file mode 100644
index 000000000000..7cdc56a72ce4
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-13-30-47.bpo-37280.Fxur0F.rst
@@ -0,0 +1 @@
+Use threadpool for reading from file for sendfile fallback mode.
[View Less]
1
0

bpo-37279: Fix asyncio sendfile support when extra data are sent in fallback mode. (GH-14075)
by Andrew Svetlov June 15, 2019
by Andrew Svetlov June 15, 2019
June 15, 2019
https://github.com/python/cpython/commit/ef2152354f03a165c5e3adb53e2276934f…
commit: ef2152354f03a165c5e3adb53e2276934fabd50a
branch: master
author: Andrew Svetlov <andrew.svetlov(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T14:05:08+03:00
summary:
bpo-37279: Fix asyncio sendfile support when extra data are sent in fallback mode. (GH-14075)
files:
A Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
M Lib/asyncio/base_events.py
M Lib/test/…
[View More]test_asyncio/test_sendfile.py
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index e0025397fa8a..90de8587a3bb 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -861,7 +861,7 @@ def _getaddrinfo_debug(self, host, port, family, type, proto, flags):
read = await self.run_in_executor(None, file.readinto, view)
if not read:
break # EOF
- await self.sock_sendall(sock, view)
+ await self.sock_sendall(sock, view[:read])
total_sent += read
return total_sent
finally:
@@ -1145,7 +1145,7 @@ def _check_sendfile_params(self, sock, file, offset, count):
if not read:
return total_sent # EOF
await proto.drain()
- transp.write(view)
+ transp.write(view[:read])
total_sent += read
finally:
if total_sent > 0 and hasattr(file, 'seek'):
diff --git a/Lib/test/test_asyncio/test_sendfile.py b/Lib/test/test_asyncio/test_sendfile.py
index f148fe27e6ad..3b7f784c5ee3 100644
--- a/Lib/test/test_asyncio/test_sendfile.py
+++ b/Lib/test/test_asyncio/test_sendfile.py
@@ -86,7 +86,8 @@ def connection_lost(self, exc):
class SendfileBase:
- DATA = b"SendfileBaseData" * (1024 * 8) # 128 KiB
+ # 128 KiB plus small unaligned to buffer chunk
+ DATA = b"SendfileBaseData" * (1024 * 8 + 1)
# Reduce socket buffer size to test on relative small data sets.
BUF_SIZE = 4 * 1024 # 4 KiB
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst b/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
new file mode 100644
index 000000000000..d740b9b62b08
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-13-25-56.bpo-37279.OHlW6l.rst
@@ -0,0 +1,2 @@
+Fix asyncio sendfile support when sendfile sends extra data in fallback
+mode.
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/3fde750cc4e4057076650a92946ec1d492…
commit: 3fde750cc4e4057076650a92946ec1d492464799
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T18:31:44-07:00
summary:
bpo-36707: Document "m" removal from sys.abiflags (GH-14090)
(cherry picked from commit 7efc526e5cfb929a79c192ac2dcf7eb78d3a4401)
Co-authored-by: Victor Stinner <vstinner(a)redhat.…
[View More]com>
files:
M Doc/library/sys.rst
M Doc/whatsnew/3.8.rst
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 817c3f1e56f9..c073431c8948 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -16,6 +16,10 @@ always available.
On POSIX systems where Python was built with the standard ``configure``
script, this contains the ABI flags as specified by :pep:`3149`.
+ .. versionchanged:: 3.8
+ Default flags became an empty string (``m`` flag for pymalloc has been
+ removed).
+
.. versionadded:: 3.2
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 05d2ecc698b4..21ad11254730 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -936,6 +936,22 @@ Optimizations
Build and C API Changes
=======================
+* Default :data:`sys.abiflags` became an empty string: the ``m`` flag for
+ pymalloc became useless (builds with and without pymalloc are ABI compatible)
+ and so has been removed. (Contributed by Victor Stinner in :issue:`36707`.)
+
+ Example of changes:
+
+ * Only ``python3.8`` program is installed, ``python3.8m`` program is gone.
+ * Only ``python3.8-config`` script is installed, ``python3.8m-config`` script
+ is gone.
+ * The ``m`` flag has been removed from the suffix of dynamic library
+ filenames: extension modules in the standard library as well as those
+ produced and installed by third-party packages, like those downloaded from
+ PyPI. On Linux, for example, the Python 3.7 suffix
+ ``.cpython-37m-x86_64-linux-gnu.so`` became
+ ``.cpython-38-x86_64-linux-gnu.so`` in Python 3.8.
+
* The header files have been reorganized to better separate the different kinds
of APIs:
[View Less]
1
0

June 15, 2019
https://github.com/python/cpython/commit/7efc526e5cfb929a79c192ac2dcf7eb78d…
commit: 7efc526e5cfb929a79c192ac2dcf7eb78d3a4401
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-15T03:24:41+02:00
summary:
bpo-36707: Document "m" removal from sys.abiflags (GH-14090)
files:
M Doc/library/sys.rst
M Doc/whatsnew/3.8.rst
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 817c3f1e56f9..c073431c8948 100644
--- a/…
[View More]Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -16,6 +16,10 @@ always available.
On POSIX systems where Python was built with the standard ``configure``
script, this contains the ABI flags as specified by :pep:`3149`.
+ .. versionchanged:: 3.8
+ Default flags became an empty string (``m`` flag for pymalloc has been
+ removed).
+
.. versionadded:: 3.2
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index b63bcef5de47..cc3fb76e9c55 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -955,6 +955,22 @@ Optimizations
Build and C API Changes
=======================
+* Default :data:`sys.abiflags` became an empty string: the ``m`` flag for
+ pymalloc became useless (builds with and without pymalloc are ABI compatible)
+ and so has been removed. (Contributed by Victor Stinner in :issue:`36707`.)
+
+ Example of changes:
+
+ * Only ``python3.8`` program is installed, ``python3.8m`` program is gone.
+ * Only ``python3.8-config`` script is installed, ``python3.8m-config`` script
+ is gone.
+ * The ``m`` flag has been removed from the suffix of dynamic library
+ filenames: extension modules in the standard library as well as those
+ produced and installed by third-party packages, like those downloaded from
+ PyPI. On Linux, for example, the Python 3.7 suffix
+ ``.cpython-37m-x86_64-linux-gnu.so`` became
+ ``.cpython-38-x86_64-linux-gnu.so`` in Python 3.8.
+
* The header files have been reorganized to better separate the different kinds
of APIs:
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/f78e66c3c9cd3a65cedba8d35f8e715e05…
commit: f78e66c3c9cd3a65cedba8d35f8e715e0535d8bf
branch: 3.8
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T14:20:16-07:00
summary:
Implement Windows release builds in Azure Pipelines (GH-14065)
Includes backported fixes from GH-14091
files:
A .azure-pipelines/windows-release.yml
A .azure-pipelines/windows-release/build-steps.yml
A .azure-…
[View More]pipelines/windows-release/checkout.yml
A .azure-pipelines/windows-release/find-sdk.yml
A .azure-pipelines/windows-release/layout-command.yml
A .azure-pipelines/windows-release/mingw-lib.yml
A .azure-pipelines/windows-release/msi-steps.yml
A .azure-pipelines/windows-release/stage-build.yml
A .azure-pipelines/windows-release/stage-layout-embed.yml
A .azure-pipelines/windows-release/stage-layout-full.yml
A .azure-pipelines/windows-release/stage-layout-msix.yml
A .azure-pipelines/windows-release/stage-layout-nuget.yml
A .azure-pipelines/windows-release/stage-msi.yml
A .azure-pipelines/windows-release/stage-pack-msix.yml
A .azure-pipelines/windows-release/stage-pack-nuget.yml
A .azure-pipelines/windows-release/stage-publish-nugetorg.yml
A .azure-pipelines/windows-release/stage-publish-pythonorg.yml
A .azure-pipelines/windows-release/stage-publish-store.yml
A .azure-pipelines/windows-release/stage-sign.yml
A .azure-pipelines/windows-release/stage-test-embed.yml
A .azure-pipelines/windows-release/stage-test-msi.yml
A .azure-pipelines/windows-release/stage-test-nuget.yml
A PC/crtlicense.txt
A PC/layout/support/nuspec.py
D Tools/msi/exe/crtlicense.txt
M Doc/make.bat
M PC/layout/main.py
M PC/layout/support/appxmanifest.py
M PC/layout/support/options.py
M PC/layout/support/pip.py
M PC/layout/support/props.py
M PC/python_uwp.cpp
M PCbuild/_tkinter.vcxproj
M PCbuild/build.bat
M PCbuild/pyproject.props
M PCbuild/python.props
M PCbuild/python.vcxproj
M PCbuild/tcltk.props
M Tools/msi/buildrelease.bat
M Tools/msi/dev/dev.wixproj
M Tools/msi/exe/exe.wixproj
M Tools/msi/exe/exe_files.wxs
M Tools/msi/make_cat.ps1
M Tools/msi/msi.props
M Tools/msi/msi.targets
M Tools/msi/sign_build.ps1
M Tools/msi/tcltk/tcltk.wixproj
M Tools/msi/uploadrelease.ps1
diff --git a/.azure-pipelines/windows-release.yml b/.azure-pipelines/windows-release.yml
new file mode 100644
index 000000000000..774585792484
--- /dev/null
+++ b/.azure-pipelines/windows-release.yml
@@ -0,0 +1,96 @@
+name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+# QUEUE TIME VARIABLES
+# variables:
+# GitRemote: python
+# SourceTag:
+# DoPGO: true
+# SigningCertificate: 'Python Software Foundation'
+# SigningDescription: 'Built: $(Build.BuildNumber)'
+# DoLayout: true
+# DoMSIX: true
+# DoNuget: true
+# DoEmbed: true
+# DoMSI: true
+# DoPublish: false
+
+trigger: none
+pr: none
+
+stages:
+- stage: Build
+ displayName: Build binaries
+ jobs:
+ - template: windows-release/stage-build.yml
+
+- stage: Sign
+ displayName: Sign binaries
+ dependsOn: Build
+ jobs:
+ - template: windows-release/stage-sign.yml
+
+- stage: Layout
+ displayName: Generate layouts
+ dependsOn: Sign
+ jobs:
+ - template: windows-release/stage-layout-full.yml
+ - template: windows-release/stage-layout-embed.yml
+ - template: windows-release/stage-layout-nuget.yml
+
+- stage: Pack
+ dependsOn: Layout
+ jobs:
+ - template: windows-release/stage-pack-nuget.yml
+
+- stage: Test
+ dependsOn: Pack
+ jobs:
+ - template: windows-release/stage-test-embed.yml
+ - template: windows-release/stage-test-nuget.yml
+
+- stage: Layout_MSIX
+ displayName: Generate MSIX layouts
+ dependsOn: Sign
+ condition: and(succeeded(), eq(variables['DoMSIX'], 'true'))
+ jobs:
+ - template: windows-release/stage-layout-msix.yml
+
+- stage: Pack_MSIX
+ displayName: Package MSIX
+ dependsOn: Layout_MSIX
+ jobs:
+ - template: windows-release/stage-pack-msix.yml
+
+- stage: Build_MSI
+ displayName: Build MSI installer
+ dependsOn: Sign
+ condition: and(succeeded(), eq(variables['DoMSI'], 'true'))
+ jobs:
+ - template: windows-release/stage-msi.yml
+
+- stage: Test_MSI
+ displayName: Test MSI installer
+ dependsOn: Build_MSI
+ jobs:
+ - template: windows-release/stage-test-msi.yml
+
+- stage: PublishPyDotOrg
+ displayName: Publish to python.org
+ dependsOn: ['Test_MSI', 'Test']
+ condition: and(succeeded(), eq(variables['DoPublish'], 'true'))
+ jobs:
+ - template: windows-release/stage-publish-pythonorg.yml
+
+- stage: PublishNuget
+ displayName: Publish to nuget.org
+ dependsOn: Test
+ condition: and(succeeded(), eq(variables['DoPublish'], 'true'))
+ jobs:
+ - template: windows-release/stage-publish-nugetorg.yml
+
+- stage: PublishStore
+ displayName: Publish to Store
+ dependsOn: Pack_MSIX
+ condition: and(succeeded(), eq(variables['DoPublish'], 'true'))
+ jobs:
+ - template: windows-release/stage-publish-store.yml
diff --git a/.azure-pipelines/windows-release/build-steps.yml b/.azure-pipelines/windows-release/build-steps.yml
new file mode 100644
index 000000000000..508d73b0865f
--- /dev/null
+++ b/.azure-pipelines/windows-release/build-steps.yml
@@ -0,0 +1,83 @@
+parameters:
+ ShouldPGO: false
+
+steps:
+- template: ./checkout.yml
+
+- powershell: |
+ $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+ Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
+ Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
+ Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
+ Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
+ Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)"
+ Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)-$(Name)"
+ displayName: 'Extract version numbers'
+
+- ${{ if eq(parameters.ShouldPGO, 'false') }}:
+ - powershell: |
+ $env:SigningCertificate = $null
+ .\PCbuild\build.bat -v -p $(Platform) -c $(Configuration)
+ displayName: 'Run build'
+ env:
+ IncludeUwp: true
+ Py_OutDir: '$(Build.BinariesDirectory)\bin'
+
+- ${{ if eq(parameters.ShouldPGO, 'true') }}:
+ - powershell: |
+ $env:SigningCertificate = $null
+ .\PCbuild\build.bat -v -p $(Platform) --pgo
+ displayName: 'Run build with PGO'
+ env:
+ IncludeUwp: true
+ Py_OutDir: '$(Build.BinariesDirectory)\bin'
+
+- powershell: |
+ $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
+ $tool = (gci -r "$kitroot\Bin\*\x64\signtool.exe" | sort FullName -Desc | select -First 1)
+ if (-not $tool) {
+ throw "SDK is not available"
+ }
+ Write-Host "##vso[task.prependpath]$($tool.Directory)"
+ displayName: 'Add WinSDK tools to path'
+
+- powershell: |
+ $env:SigningCertificate = $null
+ .\python.bat PC\layout -vv -t "$(Build.BinariesDirectory)\catalog" --catalog "${env:CAT}.cdf" --preset-default
+ makecat "${env:CAT}.cdf"
+ del "${env:CAT}.cdf"
+ if (-not (Test-Path "${env:CAT}.cat")) {
+ throw "Failed to build catalog file"
+ }
+ displayName: 'Generate catalog'
+ env:
+ CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
+
+- task: PublishBuildArtifacts@1
+ displayName: 'Publish binaries'
+ condition: and(succeeded(), not(and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate'])))
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ ArtifactName: bin_$(Name)
+
+- task: PublishBuildArtifacts@1
+ displayName: 'Publish binaries for signing'
+ condition: and(succeeded(), and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate']))
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ ArtifactName: unsigned_bin_$(Name)
+
+- task: CopyFiles@2
+ displayName: 'Layout Artifact: symbols'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\bin\$(Arch)
+ targetFolder: $(Build.ArtifactStagingDirectory)\symbols\$(Name)
+ flatten: true
+ contents: |
+ **\*.pdb
+
+- task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: symbols'
+ inputs:
+ PathToPublish: '$(Build.ArtifactStagingDirectory)\symbols'
+ ArtifactName: symbols
diff --git a/.azure-pipelines/windows-release/checkout.yml b/.azure-pipelines/windows-release/checkout.yml
new file mode 100644
index 000000000000..d42d55fff08d
--- /dev/null
+++ b/.azure-pipelines/windows-release/checkout.yml
@@ -0,0 +1,21 @@
+parameters:
+ depth: 3
+
+steps:
+- checkout: none
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch https://github.com/$(GitRemote)/cpython.git .
+ displayName: 'git clone ($(GitRemote)/$(SourceTag))'
+ condition: and(succeeded(), and(variables['GitRemote'], variables['SourceTag']))
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch $(Build.Repository.Uri) .
+ displayName: 'git clone (<default>/$(SourceTag))'
+ condition: and(succeeded(), and(not(variables['GitRemote']), variables['SourceTag']))
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch https://github.com/$(GitRemote)/cpython.git .
+ displayName: 'git clone ($(GitRemote)/<default>)'
+ condition: and(succeeded(), and(variables['GitRemote'], not(variables['SourceTag'])))
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch $(Build.Repository.Uri) .
+ displayName: 'git clone'
+ condition: and(succeeded(), and(not(variables['GitRemote']), not(variables['SourceTag'])))
diff --git a/.azure-pipelines/windows-release/find-sdk.yml b/.azure-pipelines/windows-release/find-sdk.yml
new file mode 100644
index 000000000000..e4de78555b3f
--- /dev/null
+++ b/.azure-pipelines/windows-release/find-sdk.yml
@@ -0,0 +1,17 @@
+# Locate the Windows SDK and add its binaries directory to PATH
+#
+# `toolname` can be overridden to use a different marker file.
+
+parameters:
+ toolname: signtool.exe
+
+steps:
+ - powershell: |
+ $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
+ $tool = (gci -r "$kitroot\Bin\*\${{ parameters.toolname }}" | sort FullName -Desc | select -First 1)
+ if (-not $tool) {
+ throw "SDK is not available"
+ }
+ Write-Host "##vso[task.prependpath]$($tool.Directory)"
+ Write-Host "Adding $($tool.Directory) to PATH"
+ displayName: 'Add WinSDK tools to path'
diff --git a/.azure-pipelines/windows-release/layout-command.yml b/.azure-pipelines/windows-release/layout-command.yml
new file mode 100644
index 000000000000..3ec9b69ad712
--- /dev/null
+++ b/.azure-pipelines/windows-release/layout-command.yml
@@ -0,0 +1,20 @@
+steps:
+- powershell: >
+ Write-Host (
+ '##vso[task.setvariable variable=LayoutCmd]&
+ "{0}"
+ "{1}\PC\layout"
+ -vv
+ --source "{1}"
+ --build "{2}"
+ --temp "{3}"
+ --include-cat "{2}\python.cat"
+ --doc-build "{4}"'
+ -f (
+ "$(PYTHON)",
+ "$(Build.SourcesDirectory)",
+ (Split-Path -Parent "$(PYTHON)"),
+ "$(Build.BinariesDirectory)\layout-temp",
+ "$(Build.BinariesDirectory)\doc"
+ ))
+ displayName: 'Set LayoutCmd'
diff --git a/.azure-pipelines/windows-release/mingw-lib.yml b/.azure-pipelines/windows-release/mingw-lib.yml
new file mode 100644
index 000000000000..30f7d34fa61d
--- /dev/null
+++ b/.azure-pipelines/windows-release/mingw-lib.yml
@@ -0,0 +1,13 @@
+parameters:
+ DllToolOpt: -m i386:x86-64
+ #DllToolOpt: -m i386 --as-flags=--32
+
+steps:
+- powershell: |
+ git clone https://github.com/python/cpython-bin-deps --branch binutils --single-branch --depth 1 --progress -v "binutils"
+ gci "bin\$(Arch)\python*.dll" | %{
+ & "binutils\gendef.exe" $_ | Out-File -Encoding ascii tmp.def
+ & "binutils\dlltool.exe" --dllname $($_.BaseName).dll --def tmp.def --output-lib "$($_.Directory)\lib$($_.BaseName).a" ${{ parameters.DllToolOpt }}
+ }
+ displayName: 'Generate MinGW import library'
+ workingDirectory: $(Build.BinariesDirectory)
diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml
new file mode 100644
index 000000000000..153408271c71
--- /dev/null
+++ b/.azure-pipelines/windows-release/msi-steps.yml
@@ -0,0 +1,146 @@
+steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: doc'
+ inputs:
+ artifactName: doc
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: CopyFiles@2
+ displayName: 'Merge documentation files'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\doc
+ targetFolder: $(Build.SourcesDirectory)\Doc\build
+ contents: |
+ htmlhelp\*.chm
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_win32'
+ inputs:
+ artifactName: bin_win32
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_win32_d'
+ inputs:
+ artifactName: bin_win32_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: CopyFiles@2
+ displayName: 'Merge win32 debug files'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\bin_win32_d
+ targetFolder: $(Build.BinariesDirectory)\bin_win32
+ contents: |
+ **\*_d.*
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_amd64'
+ inputs:
+ artifactName: bin_amd64
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_amd64_d'
+ inputs:
+ artifactName: bin_amd64_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: CopyFiles@2
+ displayName: 'Merge amd64 debug files'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\bin_amd64_d
+ targetFolder: $(Build.BinariesDirectory)\bin_amd64
+ contents: |
+ **\*_d.*
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_win32'
+ inputs:
+ artifactName: tcltk_lib_win32
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_amd64'
+ inputs:
+ artifactName: tcltk_lib_amd64
+ downloadPath: $(Build.BinariesDirectory)
+
+ - script: |
+ ren bin_win32 win32
+ ren bin_amd64 amd64
+ displayName: 'Correct artifact directory names'
+ workingDirectory: $(Build.BinariesDirectory)
+
+ - script: |
+ call Tools\msi\get_externals.bat
+ call PCbuild\find_python.bat
+ echo ##vso[task.setvariable variable=PYTHON]%PYTHON%
+ call PCbuild/find_msbuild.bat
+ echo ##vso[task.setvariable variable=MSBUILD]%MSBUILD%
+ displayName: 'Get external dependencies'
+
+ - script: |
+ %PYTHON% -m pip install blurb
+ %PYTHON% -m blurb merge -f Misc\NEWS
+ displayName: 'Merge NEWS file'
+
+ - script: |
+ %MSBUILD% Tools\msi\launcher\launcher.wixproj
+ displayName: 'Build launcher installer'
+ env:
+ Platform: x86
+ Py_OutDir: $(Build.BinariesDirectory)
+
+ - script: |
+ %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
+ %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false
+ displayName: 'Build win32 installer'
+ env:
+ Platform: x86
+ Py_OutDir: $(Build.BinariesDirectory)
+ PYTHON: $(Build.BinariesDirectory)\win32\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32
+ BuildForRelease: true
+ SuppressMinGWLib: true
+
+ - script: |
+ %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
+ %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false
+ displayName: 'Build amd64 installer'
+ env:
+ Platform: x64
+ Py_OutDir: $(Build.BinariesDirectory)
+ PYTHON: $(Build.BinariesDirectory)\amd64\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64
+ BuildForRelease: true
+ SuppressMinGWLib: true
+
+ - task: CopyFiles@2
+ displayName: 'Assemble artifact: msi (1/2)'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\win32\en-us
+ targetFolder: $(Build.ArtifactStagingDirectory)\msi\win32
+ contents: |
+ *.msi
+ *.cab
+ *.exe
+
+ - task: CopyFiles@2
+ displayName: 'Assemble artifact: msi (2/2)'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\amd64\en-us
+ targetFolder: $(Build.ArtifactStagingDirectory)\msi\amd64
+ contents: |
+ *.msi
+ *.cab
+ *.exe
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish MSI'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msi'
+ ArtifactName: msi
diff --git a/.azure-pipelines/windows-release/stage-build.yml b/.azure-pipelines/windows-release/stage-build.yml
new file mode 100644
index 000000000000..a5093a04f087
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-build.yml
@@ -0,0 +1,160 @@
+jobs:
+- job: Build_Docs
+ displayName: Docs build
+ pool:
+ name: 'Windows Release'
+ #vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: ./checkout.yml
+
+ - script: Doc\make.bat html
+ displayName: 'Build HTML docs'
+ env:
+ BUILDDIR: $(Build.BinariesDirectory)\Doc
+
+ #- powershell: iwr "https://www.python.org/ftp/python/3.7.3/python373.chm" -OutFile "$(Build.BinariesDirectory)\python390a0.chm"
+ # displayName: 'Cheat at building CHM docs'
+
+ - script: Doc\make.bat htmlhelp
+ displayName: 'Build CHM docs'
+ env:
+ BUILDDIR: $(Build.BinariesDirectory)\Doc
+
+ - task: CopyFiles@2
+ displayName: 'Assemble artifact: Doc'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\Doc
+ targetFolder: $(Build.ArtifactStagingDirectory)\Doc
+ contents: |
+ html\**\*
+ htmlhelp\*.chm
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: doc'
+ inputs:
+ PathtoPublish: $(Build.ArtifactStagingDirectory)\Doc
+ ArtifactName: doc
+
+- job: Build_Python
+ displayName: Python build
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Arch: win32
+ Platform: x86
+ Configuration: Release
+ win32_d:
+ Name: win32_d
+ Arch: win32
+ Platform: x86
+ Configuration: Debug
+ amd64_d:
+ Name: amd64_d
+ Arch: amd64
+ Platform: x64
+ Configuration: Debug
+
+ steps:
+ - template: ./build-steps.yml
+
+- job: Build_Python_NonPGO
+ displayName: Python non-PGO build
+ condition: and(succeeded(), ne(variables['DoPGO'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ Arch: amd64
+ Platform: x64
+ Configuration: Release
+
+ steps:
+ - template: ./build-steps.yml
+
+
+- job: Build_Python_PGO
+ displayName: Python PGO build
+ condition: and(succeeded(), eq(variables['DoPGO'], 'true'))
+
+ # Allow up to five hours for PGO
+ timeoutInMinutes: 300
+
+ pool:
+ name: 'Windows Release'
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ Arch: amd64
+ Platform: x64
+ Configuration: Release
+
+ steps:
+ - template: ./build-steps.yml
+ parameters:
+ ShouldPGO: true
+
+
+- job: TclTk_Lib
+ displayName: Publish Tcl/Tk Library
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: ./checkout.yml
+
+ - script: PCbuild\get_externals.bat --no-openssl --no-libffi
+ displayName: 'Get external dependencies'
+
+ - task: MSBuild@1
+ displayName: 'Copy Tcl/Tk lib for publish'
+ inputs:
+ solution: PCbuild\tcltk.props
+ platform: x86
+ msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_win32"
+
+ - task: MSBuild@1
+ displayName: 'Copy Tcl/Tk lib for publish'
+ inputs:
+ solution: PCbuild\tcltk.props
+ platform: x64
+ msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_amd64"
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: tcltk_lib_win32'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_win32'
+ ArtifactName: tcltk_lib_win32
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: tcltk_lib_amd64'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
+ ArtifactName: tcltk_lib_amd64
diff --git a/.azure-pipelines/windows-release/stage-layout-embed.yml b/.azure-pipelines/windows-release/stage-layout-embed.yml
new file mode 100644
index 000000000000..e2689dbb603d
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-embed.yml
@@ -0,0 +1,56 @@
+jobs:
+- job: Make_Embed_Layout
+ displayName: Make embeddable layout
+ condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+ Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
+ displayName: 'Extract version numbers'
+
+ - powershell: >
+ $(LayoutCmd)
+ --copy "$(Build.ArtifactStagingDirectory)\layout"
+ --zip "$(Build.ArtifactStagingDirectory)\embed\python-$(VersionText)-embed-$(Name).zip"
+ --preset-embed
+ displayName: 'Generate embeddable layout'
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_embed_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
+ ArtifactName: layout_embed_$(Name)
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: embed'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\embed'
+ ArtifactName: embed
diff --git a/.azure-pipelines/windows-release/stage-layout-full.yml b/.azure-pipelines/windows-release/stage-layout-full.yml
new file mode 100644
index 000000000000..3593cf0a3f69
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-full.yml
@@ -0,0 +1,62 @@
+jobs:
+- job: Make_Layouts
+ displayName: Make layouts
+ condition: and(succeeded(), eq(variables['DoLayout'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)_d'
+ inputs:
+ artifactName: bin_$(Name)_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: doc'
+ inputs:
+ artifactName: doc
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_$(Name)'
+ inputs:
+ artifactName: tcltk_lib_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
+ displayName: 'Generate full layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_full_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
+ ArtifactName: layout_full_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-msix.yml b/.azure-pipelines/windows-release/stage-layout-msix.yml
new file mode 100644
index 000000000000..1a1e0a2fd685
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-msix.yml
@@ -0,0 +1,86 @@
+jobs:
+- job: Make_MSIX_Layout
+ displayName: Make MSIX layout
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ #win32:
+ # Name: win32
+ # Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ # PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)_d'
+ inputs:
+ artifactName: bin_$(Name)_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_$(Name)'
+ inputs:
+ artifactName: tcltk_lib_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ Remove-Item "$(Build.ArtifactStagingDirectory)\appx-store" -Recurse -Force -EA 0
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
+ displayName: 'Generate store APPX layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_appxstore_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx-store'
+ ArtifactName: layout_appxstore_$(Name)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: cert'
+ condition: and(succeeded(), variables['SigningCertificate'])
+ inputs:
+ artifactName: cert
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $info = (gc "$(Build.BinariesDirectory)\cert\certinfo.json" | ConvertFrom-JSON)
+ Write-Host "Side-loadable APPX must be signed with '$($info.Subject)'"
+ Write-Host "##vso[task.setvariable variable=APPX_DATA_PUBLISHER]$($info.Subject)"
+ Write-Host "##vso[task.setvariable variable=APPX_DATA_SHA256]$($info.SHA256)"
+ displayName: 'Override signing parameters'
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ - powershell: |
+ Remove-Item "$(Build.ArtifactStagingDirectory)\appx" -Recurse -Force -EA 0
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
+ displayName: 'Generate sideloading APPX layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+ APPX_DATA_PUBLISHER: $(APPX_DATA_PUBLISHER)
+ APPX_DATA_SHA256: $(APPX_DATA_SHA256)
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_appx_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx'
+ ArtifactName: layout_appx_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-nuget.yml b/.azure-pipelines/windows-release/stage-layout-nuget.yml
new file mode 100644
index 000000000000..ca4213d9e5c2
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-nuget.yml
@@ -0,0 +1,44 @@
+jobs:
+- job: Make_Nuget_Layout
+ displayName: Make Nuget layout
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
+ displayName: 'Generate nuget layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\bin_$(Name)\tcl\tcl8
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_nuget_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\nuget'
+ ArtifactName: layout_nuget_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-msi.yml b/.azure-pipelines/windows-release/stage-msi.yml
new file mode 100644
index 000000000000..7afc816a0c6e
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-msi.yml
@@ -0,0 +1,36 @@
+jobs:
+- job: Make_MSI
+ displayName: Make MSI
+ condition: and(succeeded(), not(variables['SigningCertificate']))
+
+ pool:
+ vmName: win2016-vs2017
+
+ variables:
+ ReleaseUri: http://www.python.org/{arch}
+ DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
+ Py_OutDir: $(Build.BinariesDirectory)
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: msi-steps.yml
+
+- job: Make_Signed_MSI
+ displayName: Make signed MSI
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ variables:
+ ReleaseUri: http://www.python.org/{arch}
+ DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
+ Py_OutDir: $(Build.BinariesDirectory)
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: msi-steps.yml
diff --git a/.azure-pipelines/windows-release/stage-pack-msix.yml b/.azure-pipelines/windows-release/stage-pack-msix.yml
new file mode 100644
index 000000000000..6f1846e581ef
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-pack-msix.yml
@@ -0,0 +1,127 @@
+jobs:
+- job: Pack_MSIX
+ displayName: Pack MSIX bundles
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ Artifact: appx
+ Suffix:
+ ShouldSign: true
+ amd64_store:
+ Name: amd64
+ Artifact: appxstore
+ Suffix: -store
+ Upload: true
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: layout_$(Artifact)_$(Name)'
+ inputs:
+ artifactName: layout_$(Artifact)_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: symbols'
+ inputs:
+ artifactName: symbols
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+ Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
+ Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
+ Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
+ Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
+ Write-Host "##vso[task.setvariable variable=Filename]python-$($d.PythonVersion)-$(Name)$(Suffix)"
+ displayName: 'Extract version numbers'
+
+ - powershell: |
+ ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout_$(Artifact)_$(Name)" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
+ displayName: 'Build msix'
+
+ - powershell: |
+ 7z a -tzip "$(Build.ArtifactStagingDirectory)\msix\$(Filename).appxsym" *.pdb
+ displayName: 'Build appxsym'
+ workingDirectory: $(Build.BinariesDirectory)\symbols\$(Name)
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIX'
+ condition: and(succeeded(), or(ne(variables['ShouldSign'], 'true'), not(variables['SigningCertificate'])))
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
+ ArtifactName: msix
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIX'
+ condition: and(succeeded(), and(eq(variables['ShouldSign'], 'true'), variables['SigningCertificate']))
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
+ ArtifactName: unsigned_msix
+
+ - powershell: |
+ 7z a -tzip "$(Build.ArtifactStagingDirectory)\msixupload\$(Filename).msixupload" *
+ displayName: 'Build msixupload'
+ condition: and(succeeded(), eq(variables['Upload'], 'true'))
+ workingDirectory: $(Build.ArtifactStagingDirectory)\msix
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIXUpload'
+ condition: and(succeeded(), eq(variables['Upload'], 'true'))
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msixupload'
+ ArtifactName: msixupload
+
+
+- job: Sign_MSIX
+ displayName: Sign side-loadable MSIX bundles
+ dependsOn:
+ - Pack_MSIX
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+ - template: ./find-sdk.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download Artifact: unsigned_msix'
+ inputs:
+ artifactName: unsigned_msix
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $failed = $true
+ foreach ($retry in 1..3) {
+ signtool sign /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "$(SigningDescription)" (gi *.msix)
+ if ($?) {
+ $failed = $false
+ break
+ }
+ sleep 1
+ }
+ if ($failed) {
+ throw "Failed to sign MSIX"
+ }
+ displayName: 'Sign MSIX'
+ workingDirectory: $(Build.BinariesDirectory)\unsigned_msix
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIX'
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\unsigned_msix'
+ ArtifactName: msix
diff --git a/.azure-pipelines/windows-release/stage-pack-nuget.yml b/.azure-pipelines/windows-release/stage-pack-nuget.yml
new file mode 100644
index 000000000000..5aa394fa48a1
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-pack-nuget.yml
@@ -0,0 +1,41 @@
+jobs:
+- job: Pack_Nuget
+ displayName: Pack Nuget bundles
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ win32:
+ Name: win32
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: layout_nuget_$(Name)'
+ inputs:
+ artifactName: layout_nuget_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: NugetToolInstaller@0
+ displayName: 'Install Nuget'
+ inputs:
+ versionSpec: '>=5.0'
+
+ - powershell: |
+ nuget pack "$(Build.BinariesDirectory)\layout_nuget_$(Name)\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
+ displayName: 'Create nuget package'
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: nuget'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)'
+ ArtifactName: nuget
diff --git a/.azure-pipelines/windows-release/stage-publish-nugetorg.yml b/.azure-pipelines/windows-release/stage-publish-nugetorg.yml
new file mode 100644
index 000000000000..7586d850f340
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-publish-nugetorg.yml
@@ -0,0 +1,28 @@
+jobs:
+- job: Publish_Nuget
+ displayName: Publish Nuget packages
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: nuget'
+ inputs:
+ artifactName: nuget
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: NuGetCommand@2
+ displayName: Push packages
+ condition: and(succeeded(), eq(variables['SigningCertificate'], 'Python Software Foundation'))
+ inputs:
+ command: push
+ packagesToPush: $(Build.BinariesDirectory)\nuget\*.nupkg'
+ nuGetFeedType: external
+ publishFeedCredentials: 'Python on Nuget'
diff --git a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
new file mode 100644
index 000000000000..2215a56d4bc2
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
@@ -0,0 +1,34 @@
+jobs:
+- job: Publish_Python
+ displayName: Publish python.org packages
+ condition: and(succeeded(), and(eq(variables['DoMSI'], 'true'), eq(variables['DoEmbed'], 'true')))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: Doc'
+ inputs:
+ artifactName: Doc
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: msi'
+ inputs:
+ artifactName: msi
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: embed'
+ inputs:
+ artifactName: embed
+ downloadPath: $(Build.BinariesDirectory)
+
+ # TODO: eq(variables['SigningCertificate'], 'Python Software Foundation')
+ # If we are not real-signed, DO NOT PUBLISH
diff --git a/.azure-pipelines/windows-release/stage-publish-store.yml b/.azure-pipelines/windows-release/stage-publish-store.yml
new file mode 100644
index 000000000000..06884c4f35b7
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-publish-store.yml
@@ -0,0 +1,22 @@
+jobs:
+- job: Publish_Store
+ displayName: Publish Store packages
+ condition: and(succeeded(), eq(variables['DoMSIX'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: msixupload'
+ inputs:
+ artifactName: msixupload
+ downloadPath: $(Build.BinariesDirectory)
+
+ # TODO: eq(variables['SigningCertificate'], 'Python Software Foundation')
+ # If we are not real-signed, DO NOT PUBLISH
diff --git a/.azure-pipelines/windows-release/stage-sign.yml b/.azure-pipelines/windows-release/stage-sign.yml
new file mode 100644
index 000000000000..3d6ca9457f1c
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-sign.yml
@@ -0,0 +1,113 @@
+jobs:
+- job: Sign_Python
+ displayName: Sign Python binaries
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ amd64:
+ Name: amd64
+
+ steps:
+ - checkout: none
+ - template: ./find-sdk.yml
+
+ - powershell: |
+ Write-Host "##vso[build.addbuildtag]signed"
+ displayName: 'Add build tags'
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: unsigned_bin_$(Name)'
+ inputs:
+ artifactName: unsigned_bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
+ signtool sign /a /n "$(SigningCertificate)" /fd sha256 /d "$(SigningDescription)" $files
+ displayName: 'Sign binaries'
+ workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+
+ - powershell: |
+ $files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
+ $failed = $true
+ foreach ($retry in 1..10) {
+ signtool timestamp /t http://timestamp.verisign.com/scripts/timestamp.dll $files
+ if ($?) {
+ $failed = $false
+ break
+ }
+ sleep 5
+ }
+ if ($failed) {
+ Write-Host "##vso[task.logissue type=error]Failed to timestamp files"
+ }
+ displayName: 'Timestamp binaries'
+ workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+ continueOnError: true
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: bin_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\unsigned_bin_$(Name)'
+ ArtifactName: bin_$(Name)
+
+
+- job: Dump_CertInfo
+ displayName: Capture certificate info
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ steps:
+ - checkout: none
+
+ - powershell: |
+ $m = 'CN=$(SigningCertificate)'
+ $c = ((gci Cert:\CurrentUser\My), (gci Cert:\LocalMachine\My)) | %{ $_ } | `
+ ?{ $_.Subject -match $m } | `
+ select -First 1
+ if (-not $c) {
+ Write-Host "Failed to find certificate for $(SigningCertificate)"
+ exit
+ }
+ $d = mkdir "$(Build.BinariesDirectory)\tmp" -Force
+ $cf = "$d\cert.cer"
+ [IO.File]::WriteAllBytes($cf, $c.Export("Cer"))
+ $csha = (certutil -dump $cf | sls "Cert Hash\(sha256\): (.+)").Matches.Groups[1].Value
+
+ $info = @{ Subject=$c.Subject; SHA256=$csha; }
+
+ $d = mkdir "$(Build.BinariesDirectory)\cert" -Force
+ $info | ConvertTo-JSON -Compress | Out-File -Encoding utf8 "$d\certinfo.json"
+ displayName: "Extract certificate info"
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: cert'
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\cert'
+ ArtifactName: cert
+
+
+- job: Mark_Unsigned
+ displayName: Tag unsigned build
+ condition: and(succeeded(), not(variables['SigningCertificate']))
+
+ pool:
+ vmName: win2016-vs2017
+
+ steps:
+ - checkout: none
+
+ - powershell: |
+ Write-Host "##vso[build.addbuildtag]unsigned"
+ displayName: 'Add build tag'
diff --git a/.azure-pipelines/windows-release/stage-test-embed.yml b/.azure-pipelines/windows-release/stage-test-embed.yml
new file mode 100644
index 000000000000..b33176266a20
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-test-embed.yml
@@ -0,0 +1,41 @@
+jobs:
+- job: Test_Embed
+ displayName: Test Embed
+ condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ amd64:
+ Name: amd64
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: embed'
+ inputs:
+ artifactName: embed
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $p = gi "$(Build.BinariesDirectory)\embed\python*embed-$(Name).zip"
+ Expand-Archive -Path $p -DestinationPath "$(Build.BinariesDirectory)\Python"
+ $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
+ Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
+ displayName: 'Install Python and add to PATH'
+
+ - script: |
+ python -c "import sys; print(sys.version)"
+ displayName: 'Collect version number'
+
+ - script: |
+ python -m site
+ displayName: 'Collect site'
diff --git a/.azure-pipelines/windows-release/stage-test-msi.yml b/.azure-pipelines/windows-release/stage-test-msi.yml
new file mode 100644
index 000000000000..10039295a184
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-test-msi.yml
@@ -0,0 +1,108 @@
+jobs:
+- job: Test_MSI
+ displayName: Test MSI
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32_User:
+ ExeMatch: 'python-[\dabrc.]+-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\win32_User
+ InstallAllUsers: 0
+ win32_Machine:
+ ExeMatch: 'python-[\dabrc.]+-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\win32_Machine
+ InstallAllUsers: 1
+ amd64_User:
+ ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_User
+ InstallAllUsers: 0
+ amd64_Machine:
+ ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_Machine
+ InstallAllUsers: 1
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: msi'
+ inputs:
+ artifactName: msi
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $p = (gci -r *.exe | ?{ $_.Name -match '$(ExeMatch)' } | select -First 1)
+ Write-Host "##vso[task.setvariable variable=SetupExe]$($p.FullName)"
+ Write-Host "##vso[task.setvariable variable=SetupExeName]$($p.Name)"
+ displayName: 'Find installer executable'
+ workingDirectory: $(Build.BinariesDirectory)\msi
+
+ - script: >
+ "$(SetupExe)"
+ /passive
+ /log "$(Logs)\install\log.txt"
+ TargetDir="$(Build.BinariesDirectory)\Python"
+ Include_debug=1
+ Include_symbols=1
+ InstallAllUsers=$(InstallAllUsers)
+ displayName: 'Install Python'
+
+ - powershell: |
+ $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
+ Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
+ displayName: 'Add test Python to PATH'
+
+ - script: |
+ python -c "import sys; print(sys.version)"
+ displayName: 'Collect version number'
+
+ - script: |
+ python -m site
+ displayName: 'Collect site'
+
+ - powershell: |
+ gci -r "${env:PROGRAMDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
+ displayName: 'Capture per-machine Start Menu items'
+ - powershell: |
+ gci -r "${env:APPDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
+ displayName: 'Capture per-user Start Menu items'
+
+ - powershell: |
+ gci -r "HKLM:\Software\WOW6432Node\Python"
+ displayName: 'Capture per-machine 32-bit registry'
+ - powershell: |
+ gci -r "HKLM:\Software\Python"
+ displayName: 'Capture per-machine native registry'
+ - powershell: |
+ gci -r "HKCU:\Software\Python"
+ displayName: 'Capture current-user registry'
+
+ - script: |
+ python -m pip install "azure<0.10"
+ python -m pip uninstall -y azure python-dateutil six
+ displayName: 'Test (un)install package'
+
+ - script: |
+ python -m test -uall -v test_ttk_guionly test_tk test_idle
+ displayName: 'Test Tkinter and Idle'
+
+ - script: >
+ "$(SetupExe)"
+ /passive
+ /uninstall
+ /log "$(Logs)\uninstall\log.txt"
+ displayName: 'Uninstall Python'
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: logs'
+ condition: true
+ continueOnError: true
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\logs'
+ ArtifactName: msi_testlogs
diff --git a/.azure-pipelines/windows-release/stage-test-nuget.yml b/.azure-pipelines/windows-release/stage-test-nuget.yml
new file mode 100644
index 000000000000..1f8b601d0d02
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-test-nuget.yml
@@ -0,0 +1,58 @@
+jobs:
+- job: Test_Nuget
+ displayName: Test Nuget
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Package: pythonx86
+ amd64:
+ Package: python
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: nuget'
+ inputs:
+ artifactName: nuget
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: NugetToolInstaller@0
+ inputs:
+ versionSpec: '>= 5'
+
+ - powershell: >
+ nuget install
+ $(Package)
+ -Source "$(Build.BinariesDirectory)\nuget"
+ -OutputDirectory "$(Build.BinariesDirectory)\install"
+ -Prerelease
+ -ExcludeVersion
+ -NonInteractive
+ displayName: 'Install Python'
+
+ - powershell: |
+ $p = gi "$(Build.BinariesDirectory)\install\$(Package)\tools\python.exe"
+ Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
+ displayName: 'Add test Python to PATH'
+
+ - script: |
+ python -c "import sys; print(sys.version)"
+ displayName: 'Collect version number'
+
+ - script: |
+ python -m site
+ displayName: 'Collect site'
+
+ - script: |
+ python -m pip install "azure<0.10"
+ python -m pip uninstall -y azure python-dateutil six
+ displayName: 'Test (un)install package'
diff --git a/Doc/make.bat b/Doc/make.bat
index e6604956ea91..dfc622f66615 100644
--- a/Doc/make.bat
+++ b/Doc/make.bat
@@ -117,13 +117,13 @@ if not exist "%BUILDDIR%" mkdir "%BUILDDIR%"
rem PY_MISC_NEWS_DIR is also used by our Sphinx extension in tools/extensions/pyspecific.py
if not defined PY_MISC_NEWS_DIR set PY_MISC_NEWS_DIR=%BUILDDIR%\%1
+if not exist "%PY_MISC_NEWS_DIR%" mkdir "%PY_MISC_NEWS_DIR%"
if exist ..\Misc\NEWS (
echo.Copying Misc\NEWS to %PY_MISC_NEWS_DIR%\NEWS
copy ..\Misc\NEWS "%PY_MISC_NEWS_DIR%\NEWS" > nul
) else if exist ..\Misc\NEWS.D (
if defined BLURB (
echo.Merging Misc/NEWS with %BLURB%
- if not exist build mkdir build
%BLURB% merge -f "%PY_MISC_NEWS_DIR%\NEWS"
) else (
echo.No Misc/NEWS file and Blurb is not available.
diff --git a/Tools/msi/exe/crtlicense.txt b/PC/crtlicense.txt
similarity index 100%
rename from Tools/msi/exe/crtlicense.txt
rename to PC/crtlicense.txt
diff --git a/PC/layout/main.py b/PC/layout/main.py
index 624033e721b7..c39aab208d35 100644
--- a/PC/layout/main.py
+++ b/PC/layout/main.py
@@ -31,6 +31,7 @@
from .support.options import *
from .support.pip import *
from .support.props import *
+from .support.nuspec import *
BDIST_WININST_FILES_ONLY = FileNameSet("wininst-*", "bdist_wininst.py")
BDIST_WININST_STUB = "PC/layout/support/distutils.command.bdist_wininst.py"
@@ -66,6 +67,7 @@
TOOLS_DIRS = FileNameSet("scripts", "i18n", "pynche", "demo", "parser")
TOOLS_FILES = FileSuffixSet(".py", ".pyw", ".txt")
+
def copy_if_modified(src, dest):
try:
dest_stat = os.stat(dest)
@@ -73,12 +75,15 @@ def copy_if_modified(src, dest):
do_copy = True
else:
src_stat = os.stat(src)
- do_copy = (src_stat.st_mtime != dest_stat.st_mtime or
- src_stat.st_size != dest_stat.st_size)
+ do_copy = (
+ src_stat.st_mtime != dest_stat.st_mtime
+ or src_stat.st_size != dest_stat.st_size
+ )
if do_copy:
shutil.copy2(src, dest)
+
def get_lib_layout(ns):
def _c(f):
if f in EXCLUDE_FROM_LIB:
@@ -119,7 +124,7 @@ def get_tcltk_lib(ns):
except FileNotFoundError:
pass
if not tcl_lib or not os.path.isdir(tcl_lib):
- warn("Failed to find TCL_LIBRARY")
+ log_warning("Failed to find TCL_LIBRARY")
return
for dest, src in rglob(Path(tcl_lib).parent, "**/*"):
@@ -168,7 +173,7 @@ def in_build(f, dest="", new_name=None):
for dest, src in rglob(ns.build, "vcruntime*.dll"):
yield dest, src
- yield "LICENSE.txt", ns.source / "LICENSE"
+ yield "LICENSE.txt", ns.build / "LICENSE.txt"
for dest, src in rglob(ns.build, ("*.pyd", "*.dll")):
if src.stem.endswith("_d") != bool(ns.debug) and src not in REQUIRED_DLLS:
@@ -222,15 +227,12 @@ def _c(d):
yield dest, src
if ns.include_pip:
- pip_dir = get_pip_dir(ns)
- if not pip_dir.is_dir():
- log_warning("Failed to find {} - pip will not be included", pip_dir)
- else:
- pkg_root = "packages/{}" if ns.zip_lib else "Lib/site-packages/{}"
- for dest, src in rglob(pip_dir, "**/*"):
- if src in EXCLUDE_FROM_LIB or src in EXCLUDE_FROM_PACKAGED_LIB:
- continue
- yield pkg_root.format(dest), src
+ for dest, src in get_pip_layout(ns):
+ if isinstance(src, tuple) or not (
+ src in EXCLUDE_FROM_LIB or src in EXCLUDE_FROM_PACKAGED_LIB
+ ):
+ continue
+ yield dest, src
if ns.include_chm:
for dest, src in rglob(ns.doc_build / "htmlhelp", PYTHON_CHM_NAME):
@@ -244,6 +246,10 @@ def _c(d):
for dest, src in get_props_layout(ns):
yield dest, src
+ if ns.include_nuspec:
+ for dest, src in get_nuspec_layout(ns):
+ yield dest, src
+
for dest, src in get_appx_layout(ns):
yield dest, src
@@ -287,7 +293,9 @@ def _py_temp_compile(src, ns, dest_dir=None, checked=True):
return None
dest = (dest_dir or ns.temp) / (src.stem + ".py")
- return _compile_one_py(src, dest.with_suffix(".pyc"), dest, optimize=2, checked=checked)
+ return _compile_one_py(
+ src, dest.with_suffix(".pyc"), dest, optimize=2, checked=checked
+ )
def _write_to_zip(zf, dest, src, ns, checked=True):
@@ -361,28 +369,9 @@ def generate_source_files(ns):
print("# Uncomment to run site.main() automatically", file=f)
print("#import site", file=f)
- if ns.include_appxmanifest:
- log_info("Generating AppxManifest.xml in {}", ns.temp)
- ns.temp.mkdir(parents=True, exist_ok=True)
-
- with open(ns.temp / "AppxManifest.xml", "wb") as f:
- f.write(get_appxmanifest(ns))
-
- with open(ns.temp / "_resources.xml", "wb") as f:
- f.write(get_resources_xml(ns))
-
if ns.include_pip:
- pip_dir = get_pip_dir(ns)
- if not (pip_dir / "pip").is_dir():
- log_info("Extracting pip to {}", pip_dir)
- pip_dir.mkdir(parents=True, exist_ok=True)
- extract_pip_files(ns)
-
- if ns.include_props:
- log_info("Generating {} in {}", PYTHON_PROPS_NAME, ns.temp)
- ns.temp.mkdir(parents=True, exist_ok=True)
- with open(ns.temp / PYTHON_PROPS_NAME, "wb") as f:
- f.write(get_props(ns))
+ log_info("Extracting pip")
+ extract_pip_files(ns)
def _create_zip_file(ns):
@@ -427,6 +416,18 @@ def copy_files(files, ns):
log_info("Processed {} files", count)
log_debug("Processing {!s}", src)
+ if isinstance(src, tuple):
+ src, content = src
+ if ns.copy:
+ log_debug("Copy {} -> {}", src, ns.copy / dest)
+ (ns.copy / dest).parent.mkdir(parents=True, exist_ok=True)
+ with open(ns.copy / dest, "wb") as f:
+ f.write(content)
+ if ns.zip:
+ log_debug("Zip {} into {}", src, ns.zip)
+ zip_file.writestr(str(dest), content)
+ continue
+
if (
ns.precompile
and src in PY_FILES
diff --git a/PC/layout/support/appxmanifest.py b/PC/layout/support/appxmanifest.py
index 49a35fa1f046..58fba8443f17 100644
--- a/PC/layout/support/appxmanifest.py
+++ b/PC/layout/support/appxmanifest.py
@@ -17,12 +17,7 @@
from .constants import *
-__all__ = []
-
-
-def public(f):
- __all__.append(f.__name__)
- return f
+__all__ = ["get_appx_layout"]
APPX_DATA = dict(
@@ -166,9 +161,7 @@ def public(f):
"Help": {
"Main Python Documentation": {
"_condition": lambda ns: ns.include_chm,
- "": "[{{AppVPackageRoot}}]\\Doc\\{}".format(
- PYTHON_CHM_NAME
- ),
+ "": "[{{AppVPackageRoot}}]\\Doc\\{}".format(PYTHON_CHM_NAME),
},
"Local Python Documentation": {
"_condition": lambda ns: ns.include_html_doc,
@@ -239,31 +232,6 @@ def _fixup_sccd(ns, sccd, new_hash=None):
return sccd
-@public
-def get_appx_layout(ns):
- if not ns.include_appxmanifest:
- return
-
- yield "AppxManifest.xml", ns.temp / "AppxManifest.xml"
- yield "_resources.xml", ns.temp / "_resources.xml"
- icons = ns.source / "PC" / "icons"
- yield "_resources/pythonx44.png", icons / "pythonx44.png"
- yield "_resources/pythonx44$targetsize-44_altform-unplated.png", icons / "pythonx44.png"
- yield "_resources/pythonx50.png", icons / "pythonx50.png"
- yield "_resources/pythonx50$targetsize-50_altform-unplated.png", icons / "pythonx50.png"
- yield "_resources/pythonx150.png", icons / "pythonx150.png"
- yield "_resources/pythonx150$targetsize-150_altform-unplated.png", icons / "pythonx150.png"
- yield "_resources/pythonwx44.png", icons / "pythonwx44.png"
- yield "_resources/pythonwx44$targetsize-44_altform-unplated.png", icons / "pythonwx44.png"
- yield "_resources/pythonwx150.png", icons / "pythonwx150.png"
- yield "_resources/pythonwx150$targetsize-150_altform-unplated.png", icons / "pythonwx150.png"
- sccd = ns.source / SCCD_FILENAME
- if sccd.is_file():
- # This should only be set for side-loading purposes.
- sccd = _fixup_sccd(ns, sccd, os.getenv("APPX_DATA_SHA256"))
- yield sccd.name, sccd
-
-
def find_or_add(xml, element, attr=None, always_add=False):
if always_add:
e = None
@@ -393,7 +361,6 @@ def disable_registry_virtualization(xml):
e = find_or_add(e, "rescap:Capability", ("Name", "unvirtualizedResources"))
-@public
def get_appxmanifest(ns):
for k, v in APPXMANIFEST_NS.items():
ET.register_namespace(k, v)
@@ -481,6 +448,29 @@ def get_appxmanifest(ns):
return buffer.getbuffer()
-@public
def get_resources_xml(ns):
return RESOURCES_XML_TEMPLATE.encode("utf-8")
+
+
+def get_appx_layout(ns):
+ if not ns.include_appxmanifest:
+ return
+
+ yield "AppxManifest.xml", ("AppxManifest.xml", get_appxmanifest(ns))
+ yield "_resources.xml", ("_resources.xml", get_resources_xml(ns))
+ icons = ns.source / "PC" / "icons"
+ yield "_resources/pythonx44.png", icons / "pythonx44.png"
+ yield "_resources/pythonx44$targetsize-44_altform-unplated.png", icons / "pythonx44.png"
+ yield "_resources/pythonx50.png", icons / "pythonx50.png"
+ yield "_resources/pythonx50$targetsize-50_altform-unplated.png", icons / "pythonx50.png"
+ yield "_resources/pythonx150.png", icons / "pythonx150.png"
+ yield "_resources/pythonx150$targetsize-150_altform-unplated.png", icons / "pythonx150.png"
+ yield "_resources/pythonwx44.png", icons / "pythonwx44.png"
+ yield "_resources/pythonwx44$targetsize-44_altform-unplated.png", icons / "pythonwx44.png"
+ yield "_resources/pythonwx150.png", icons / "pythonwx150.png"
+ yield "_resources/pythonwx150$targetsize-150_altform-unplated.png", icons / "pythonwx150.png"
+ sccd = ns.source / SCCD_FILENAME
+ if sccd.is_file():
+ # This should only be set for side-loading purposes.
+ sccd = _fixup_sccd(ns, sccd, os.getenv("APPX_DATA_SHA256"))
+ yield sccd.name, sccd
diff --git a/PC/layout/support/nuspec.py b/PC/layout/support/nuspec.py
new file mode 100644
index 000000000000..ba26ff337e91
--- /dev/null
+++ b/PC/layout/support/nuspec.py
@@ -0,0 +1,66 @@
+"""
+Provides .props file.
+"""
+
+import os
+
+from .constants import *
+
+__all__ = ["get_nuspec_layout"]
+
+PYTHON_NUSPEC_NAME = "python.nuspec"
+
+NUSPEC_DATA = {
+ "PYTHON_TAG": VER_DOT,
+ "PYTHON_VERSION": os.getenv("PYTHON_NUSPEC_VERSION"),
+ "PYTHON_BITNESS": "64-bit" if IS_X64 else "32-bit",
+ "PACKAGENAME": os.getenv("PYTHON_NUSPEC_PACKAGENAME"),
+ "PACKAGETITLE": os.getenv("PYTHON_NUSPEC_PACKAGETITLE"),
+ "FILELIST": r' <file src="**\*" target="tools" />',
+}
+
+if not NUSPEC_DATA["PYTHON_VERSION"]:
+ if VER_NAME:
+ NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}-{}{}".format(
+ VER_DOT, VER_MICRO, VER_NAME, VER_SERIAL
+ )
+ else:
+ NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}".format(VER_DOT, VER_MICRO)
+
+if not NUSPEC_DATA["PACKAGETITLE"]:
+ NUSPEC_DATA["PACKAGETITLE"] = "Python" if IS_X64 else "Python (32-bit)"
+
+if not NUSPEC_DATA["PACKAGENAME"]:
+ NUSPEC_DATA["PACKAGENAME"] = "python" if IS_X64 else "pythonx86"
+
+FILELIST_WITH_PROPS = r""" <file src="**\*" exclude="python.props" target="tools" />
+ <file src="python.props" target="build\native" />"""
+
+NUSPEC_TEMPLATE = r"""<?xml version="1.0"?>
+<package>
+ <metadata>
+ <id>{PACKAGENAME}</id>
+ <title>{PACKAGETITLE}</title>
+ <version>{PYTHON_VERSION}</version>
+ <authors>Python Software Foundation</authors>
+ <license type="file">tools\LICENSE.txt</license>
+ <projectUrl>https://www.python.org/</projectUrl>
+ <description>Installs {PYTHON_BITNESS} Python for use in build scenarios.</description>
+ <iconUrl>https://www.python.org/static/favicon.ico</iconUrl>
+ <tags>python</tags>
+ </metadata>
+ <files>
+{FILELIST}
+ </files>
+</package>
+"""
+
+
+def get_nuspec_layout(ns):
+ if ns.include_all or ns.include_nuspec:
+ data = NUSPEC_DATA
+ if ns.include_all or ns.include_props:
+ data = dict(data)
+ data["FILELIST"] = FILELIST_WITH_PROPS
+ nuspec = NUSPEC_TEMPLATE.format_map(data)
+ yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))
diff --git a/PC/layout/support/options.py b/PC/layout/support/options.py
index 00f05667ebb7..c8ae4e30a8c4 100644
--- a/PC/layout/support/options.py
+++ b/PC/layout/support/options.py
@@ -30,6 +30,7 @@ def public(f):
"launchers": {"help": "specific launchers"},
"appxmanifest": {"help": "an appxmanifest"},
"props": {"help": "a python.props file"},
+ "nuspec": {"help": "a python.nuspec file"},
"chm": {"help": "the CHM documentation"},
"html-doc": {"help": "the HTML documentation"},
}
@@ -60,13 +61,11 @@ def public(f):
"stable",
"distutils",
"venv",
- "props"
+ "props",
+ "nuspec",
],
},
- "iot": {
- "help": "Windows IoT Core",
- "options": ["stable", "pip"],
- },
+ "iot": {"help": "Windows IoT Core", "options": ["stable", "pip"]},
"default": {
"help": "development kit package",
"options": [
diff --git a/PC/layout/support/pip.py b/PC/layout/support/pip.py
index 369a923ce139..eada456655ec 100644
--- a/PC/layout/support/pip.py
+++ b/PC/layout/support/pip.py
@@ -11,15 +11,11 @@
import subprocess
import sys
-__all__ = []
+from .filesets import *
+__all__ = ["extract_pip_files", "get_pip_layout"]
-def public(f):
- __all__.append(f.__name__)
- return f
-
-@public
def get_pip_dir(ns):
if ns.copy:
if ns.zip_lib:
@@ -29,10 +25,23 @@ def get_pip_dir(ns):
return ns.temp / "packages"
-@public
+def get_pip_layout(ns):
+ pip_dir = get_pip_dir(ns)
+ if not pip_dir.is_dir():
+ log_warning("Failed to find {} - pip will not be included", pip_dir)
+ else:
+ pkg_root = "packages/{}" if ns.zip_lib else "Lib/site-packages/{}"
+ for dest, src in rglob(pip_dir, "**/*"):
+ yield pkg_root.format(dest), src
+ yield "pip.ini", ("pip.ini", b"[global]\nuser=yes")
+
+
def extract_pip_files(ns):
dest = get_pip_dir(ns)
- dest.mkdir(parents=True, exist_ok=True)
+ try:
+ dest.mkdir(parents=True, exist_ok=False)
+ except IOError:
+ return
src = ns.source / "Lib" / "ensurepip" / "_bundled"
@@ -58,6 +67,7 @@ def extract_pip_files(ns):
"--target",
str(dest),
"--no-index",
+ "--no-compile",
"--no-cache-dir",
"-f",
str(src),
diff --git a/PC/layout/support/props.py b/PC/layout/support/props.py
index 3a047d215058..4d3b06195f6e 100644
--- a/PC/layout/support/props.py
+++ b/PC/layout/support/props.py
@@ -6,13 +6,7 @@
from .constants import *
-__all__ = ["PYTHON_PROPS_NAME"]
-
-
-def public(f):
- __all__.append(f.__name__)
- return f
-
+__all__ = ["get_props_layout"]
PYTHON_PROPS_NAME = "python.props"
@@ -97,14 +91,8 @@ def public(f):
"""
-@public
def get_props_layout(ns):
if ns.include_all or ns.include_props:
- yield "python.props", ns.temp / "python.props"
-
-
-@public
-def get_props(ns):
- # TODO: Filter contents of props file according to included/excluded items
- props = PROPS_TEMPLATE.format_map(PROPS_DATA)
- return props.encode("utf-8")
+ # TODO: Filter contents of props file according to included/excluded items
+ props = PROPS_TEMPLATE.format_map(PROPS_DATA)
+ yield "python.props", ("python.props", props.encode("utf-8"))
diff --git a/PC/python_uwp.cpp b/PC/python_uwp.cpp
index 5c8caa6666c4..dd1edde73092 100644
--- a/PC/python_uwp.cpp
+++ b/PC/python_uwp.cpp
@@ -182,9 +182,9 @@ wmain(int argc, wchar_t **argv)
if (*p++ == L'\\') {
if (wcsnicmp(p, L"pip", 3) == 0) {
moduleName = L"pip";
+ /* No longer required when pip 19.1 is added */
_wputenv_s(L"PIP_USER", L"true");
- }
- else if (wcsnicmp(p, L"idle", 4) == 0) {
+ } else if (wcsnicmp(p, L"idle", 4) == 0) {
moduleName = L"idlelib";
}
}
diff --git a/PCbuild/_tkinter.vcxproj b/PCbuild/_tkinter.vcxproj
index fdfa59648aa9..af813b77c1d1 100644
--- a/PCbuild/_tkinter.vcxproj
+++ b/PCbuild/_tkinter.vcxproj
@@ -122,7 +122,7 @@
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<Target Name="_CopyTclTkDLL" Inputs="@(_TclTkDLL)" Outputs="@(_TclTkDLL->'$(OutDir)%(Filename)%(Extension)')" AfterTargets="Build">
- <Copy SourceFiles="@(_TclTkDLL)" DestinationFolder="$(OutDir)" />
+ <Copy SourceFiles="@(_TclTkDLL)" DestinationFolder="$(OutDir)" UseHardlinksIfPossible="true" />
</Target>
<Target Name="_CleanTclTkDLL" BeforeTargets="Clean">
<Delete Files="@(_TclTkDLL->'$(OutDir)%(Filename)%(Extension)')" />
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index 6f0c85e4a45a..bce599329e73 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -76,7 +76,7 @@ if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts
if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts
if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts
if "%~1"=="--test-marker" (set UseTestMarker=true) & shift & goto CheckOpts
-if "%~1"=="-V" shift & goto Version
+if "%~1"=="-V" shift & goto :Version
rem These use the actual property names used by MSBuild. We could just let
rem them in through the environment, but we specify them on the command line
rem anyway for visibility so set defaults after this
@@ -111,10 +111,16 @@ call "%dir%find_msbuild.bat" %MSBUILD%
if ERRORLEVEL 1 (echo Cannot locate MSBuild.exe on PATH or as MSBUILD variable & exit /b 2)
if "%kill%"=="true" call :Kill
+if ERRORLEVEL 1 exit /B 3
if "%do_pgo%"=="true" (
set conf=PGInstrument
call :Build %1 %2 %3 %4 %5 %6 %7 %8 %9
+)
+rem %VARS% are evaluated eagerly, which would lose the ERRORLEVEL
+rem value if we didn't split it out here.
+if "%do_pgo%"=="true" if ERRORLEVEL 1 exit /B %ERRORLEVEL%
+if "%do_pgo%"=="true" (
del /s "%dir%\*.pgc"
del /s "%dir%\..\Lib\*.pyc"
echo on
@@ -124,7 +130,8 @@ if "%do_pgo%"=="true" (
set conf=PGUpdate
set target=Build
)
-goto Build
+goto :Build
+
:Kill
echo on
%MSBUILD% "%dir%\pythoncore.vcxproj" /t:KillPython %verbose%^
@@ -132,7 +139,7 @@ echo on
/p:KillPython=true
@echo off
-goto :eof
+exit /B %ERRORLEVEL%
:Build
rem Call on MSBuild to do the work, echo the command.
@@ -148,9 +155,11 @@ echo on
%1 %2 %3 %4 %5 %6 %7 %8 %9
@echo off
-goto :eof
+exit /b %ERRORLEVEL%
:Version
rem Display the current build version information
call "%dir%find_msbuild.bat" %MSBUILD%
-if not ERRORLEVEL 1 %MSBUILD% "%dir%pythoncore.vcxproj" /t:ShowVersionInfo /v:m /nologo %1 %2 %3 %4 %5 %6 %7 %8 %9
+if ERRORLEVEL 1 (echo Cannot locate MSBuild.exe on PATH or as MSBUILD variable & exit /b 2)
+%MSBUILD% "%dir%pythoncore.vcxproj" /t:ShowVersionInfo /v:m /nologo %1 %2 %3 %4 %5 %6 %7 %8 %9
+if ERRORLEVEL 1 exit /b 3
\ No newline at end of file
diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props
index 12f07dd51287..7c0f50be9ea8 100644
--- a/PCbuild/pyproject.props
+++ b/PCbuild/pyproject.props
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" TreatAsLocalProperty="Py_IntDir">
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" TreatAsLocalProperty="Py_IntDir">
+ <Import Project="python.props" Condition="$(__Python_Props_Imported) != 'true'" />
<PropertyGroup Label="Globals">
+ <__PyProject_Props_Imported>true</__PyProject_Props_Imported>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<OutDir>$(BuildPath)</OutDir>
@@ -29,7 +31,7 @@
<ClCompile>
<AdditionalIncludeDirectories>$(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
-
+
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<StringPooling>true</StringPooling>
@@ -147,15 +149,15 @@ public override bool Execute() {
</Code>
</Task>
</UsingTask>
-
+
<Target Name="KillPython" BeforeTargets="PrepareForBuild" Condition="'$(KillPython)' == 'true'">
<Message Text="Killing any running python$(PyDebugExt)$(PyTestExt).exe instances..." Importance="high" />
<KillPython FileName="$(OutDir)python$(PyDebugExt)$(PyTestExt).exe" />
</Target>
-
+
<!--
A default target to handle msbuild pcbuild.proj /t:CleanAll.
-
+
Some externals projects don't respond to /t:Clean, so we invoke
CleanAll on them when we really want to clean up.
-->
@@ -189,8 +191,8 @@ public override bool Execute() {
<SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot81)\bin\x86</SdkBinPath>
<SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot)\bin\x86</SdkBinPath>
<SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A@InstallationFolder)\Bin\</SdkBinPath>
- <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /q /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
- <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificateSha1)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /q /a /sha1 "$(SigningCertificateSha1)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
+ <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
+ <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificateSha1)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /sha1 "$(SigningCertificateSha1)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
<_MakeCatCommand Condition="Exists($(SdkBinPath))">"$(SdkBinPath)\makecat.exe"</_MakeCatCommand>
</PropertyGroup>
diff --git a/PCbuild/python.props b/PCbuild/python.props
index e6642fc4818a..b13837d394b1 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
+ <__Python_Props_Imported>true</__Python_Props_Imported>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
<!--
@@ -215,6 +216,7 @@
<Message Importance="high" Text="PythonVersionNumber: $(PythonVersionNumber)" />
<Message Importance="high" Text="PythonVersion: $(PythonVersion)" />
<Message Importance="high" Text="PythonVersionHex: 0x$([System.UInt32]::Parse($(PythonVersionHex)).ToString(`X08`))" />
+ <Message Importance="high" Text="PythonVersionUnique: $(MajorVersionNumber).$(MinorVersionNumber).$(Field3Value)" />
<Message Importance="high" Text="Field3Value: $(Field3Value)" />
<Message Importance="high" Text="SysWinVer: $(SysWinVer)" />
<Message Importance="high" Text="PyDllName: $(PyDllName)" />
diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj
index bd051461e9cd..fdf8f12037aa 100644
--- a/PCbuild/python.vcxproj
+++ b/PCbuild/python.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
@@ -82,6 +82,7 @@
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="pyproject.props" />
+ <Import Project="tcltk.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
@@ -144,4 +145,22 @@ $(_PGOPath)
</PropertyGroup>
<WriteLinesToFile File="$(PySourcePath)python.bat" Lines="$(_Content)" Overwrite="true" Condition="'$(_Content)' != '$(_ExistingContent)'" />
</Target>
+ <Target Name="GenerateLicense" AfterTargets="AfterBuild">
+ <ItemGroup>
+ <LicenseFiles Include="$(PySourcePath)LICENSE;
+ $(PySourcePath)PC\crtlicense.txt;
+ $(bz2Dir)LICENSE;
+ $(opensslOutDir)LICENSE;
+ $(tcltkDir)tcllicense.terms;
+ $(tcltkDir)tklicense.terms;
+ $(tcltkDir)tixlicense.terms" />
+ <_LicenseFiles Include="@(LicenseFiles)">
+ <Content>$([System.IO.File]::ReadAllText(%(FullPath)))</Content>
+ </_LicenseFiles>
+ </ItemGroup>
+
+ <WriteLinesToFile File="$(OutDir)LICENSE.txt"
+ Overwrite="true"
+ Lines="@(_LicenseFiles->'%(Content)')" />
+ </Target>
</Project>
diff --git a/PCbuild/tcltk.props b/PCbuild/tcltk.props
index b185cb7b1e28..7fcd3e1c618c 100644
--- a/PCbuild/tcltk.props
+++ b/PCbuild/tcltk.props
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="pyproject.props" />
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="pyproject.props" Condition="$(__PyProject_Props_Imported) != 'true'" />
<PropertyGroup>
<TclMajorVersion>8</TclMajorVersion>
<TclMinorVersion>6</TclMinorVersion>
@@ -42,4 +42,19 @@
<BuildDirTop Condition="$(PlatformToolset) == 'v110'">$(BuildDirTop)_VC11</BuildDirTop>
<BuildDirTop Condition="$(PlatformToolset) == 'v100'">$(BuildDirTop)_VC10</BuildDirTop>
</PropertyGroup>
+
+ <!--
+ Helper target for copying the lib to a specific directory.
+
+ Using "msbuild tcltk.props /t:CopyTclTkLib /p:OutDir=..." is generally
+ easier than trying to extract the value of $(tcltkdir).
+ -->
+ <Target Name="CopyTclTkLib">
+ <ItemGroup>
+ <_TclTkLib Include="$(tcltkdir)\lib\**\*" />
+ </ItemGroup>
+ <Copy SourceFiles="@(_TclTkLib)"
+ DestinationFiles="$(OutDir)\%(RecursiveDir)\%(Filename)%(Extension)"
+ UseHardlinksIfPossible="true" />
+ </Target>
</Project>
diff --git a/Tools/msi/buildrelease.bat b/Tools/msi/buildrelease.bat
index 45e189b537f6..b72eedecb23c 100644
--- a/Tools/msi/buildrelease.bat
+++ b/Tools/msi/buildrelease.bat
@@ -29,7 +29,7 @@ set DOWNLOAD_URL=https://www.python.org/ftp/python/{version}/{arch}{releasename}
set D=%~dp0
set PCBUILD=%D%..\..\PCbuild\
-if "%Py_OutDir%"=="" set Py_OutDir=%PCBUILD%
+if NOT DEFINED Py_OutDir set Py_OutDir=%PCBUILD%
set EXTERNALS=%D%..\..\externals\windows-installer\
set BUILDX86=
diff --git a/Tools/msi/dev/dev.wixproj b/Tools/msi/dev/dev.wixproj
index 4a56cec35722..c6e3bcf709c6 100644
--- a/Tools/msi/dev/dev.wixproj
+++ b/Tools/msi/dev/dev.wixproj
@@ -8,7 +8,7 @@
</PropertyGroup>
<Import Project="..\msi.props" />
<PropertyGroup>
- <DefineConstants Condition="$(BuildForRelease)">
+ <DefineConstants Condition="$(BuildForRelease) and $(SuppressMinGWLib) == ''">
$(DefineConstants);
IncludeMinGWLib=1;
</DefineConstants>
@@ -35,7 +35,7 @@
Inputs="$(BuildPath)$(PyDllName).dll"
Outputs="$(BuildPath)lib$(PyDllName).a"
AfterTargets="PrepareForBuild"
- Condition="$(BuildForRelease)">
+ Condition="$(BuildForRelease) and $(SuppressMinGWLib) == ''">
<!-- Build libpython##.a as part of this project. This requires gendef and dlltool on the path. -->
<PropertyGroup>
<_DllToolOpts>-m i386 --as-flags=--32</_DllToolOpts>
diff --git a/Tools/msi/exe/exe.wixproj b/Tools/msi/exe/exe.wixproj
index 071501ce6e6f..326766bf2d47 100644
--- a/Tools/msi/exe/exe.wixproj
+++ b/Tools/msi/exe/exe.wixproj
@@ -21,25 +21,6 @@
<WxlTemplate Include="*.wxl_template" />
</ItemGroup>
- <Target Name="_GenerateLicense" AfterTargets="PrepareForBuild">
- <ItemGroup>
- <LicenseFiles Include="$(PySourcePath)LICENSE;
- crtlicense.txt;
- $(bz2Dir)LICENSE;
- $(opensslOutDir)LICENSE;
- $(tcltkDir)tcllicense.terms;
- $(tcltkDir)tklicense.terms;
- $(tcltkDir)tixlicense.terms" />
- <_LicenseFiles Include="@(LicenseFiles)">
- <Content>$([System.IO.File]::ReadAllText(%(FullPath)))</Content>
- </_LicenseFiles>
- </ItemGroup>
-
- <WriteLinesToFile File="$(BuildPath)LICENSE"
- Overwrite="true"
- Lines="@(_LicenseFiles->'%(Content)')" />
- </Target>
-
<Target Name="_CopyMiscNews" AfterTargets="PrepareForBuild" Condition="Exists('$(PySourcePath)Misc\NEWS')">
<Copy SourceFiles="$(PySourcePath)Misc\NEWS" DestinationFiles="$(BuildPath)NEWS.txt" />
</Target>
diff --git a/Tools/msi/exe/exe_files.wxs b/Tools/msi/exe/exe_files.wxs
index 394b4de47354..483d06c65b2e 100644
--- a/Tools/msi/exe/exe_files.wxs
+++ b/Tools/msi/exe/exe_files.wxs
@@ -3,7 +3,7 @@
<Fragment>
<ComponentGroup Id="exe_txt">
<Component Id="LICENSE.txt" Directory="InstallDirectory" Guid="*">
- <File Name="LICENSE.txt" Source="LICENSE" KeyPath="yes" />
+ <File Name="LICENSE.txt" Source="LICENSE.txt" KeyPath="yes" />
</Component>
<Component Id="NEWS.txt" Directory="InstallDirectory" Guid="*">
<File Name="NEWS.txt" KeyPath="yes" />
diff --git a/Tools/msi/make_cat.ps1 b/Tools/msi/make_cat.ps1
index cc3cd4a2b50c..9ea3ddd49571 100644
--- a/Tools/msi/make_cat.ps1
+++ b/Tools/msi/make_cat.ps1
@@ -7,6 +7,8 @@
The path to the catalog definition file to compile and
sign. It is assumed that the .cat file will be the same
name with a new extension.
+.Parameter outfile
+ The path to move the built .cat file to (optional).
.Parameter description
The description to add to the signature (optional).
.Parameter certname
@@ -16,6 +18,7 @@
#>
param(
[Parameter(Mandatory=$true)][string]$catalog,
+ [string]$outfile,
[switch]$sign,
[string]$description,
[string]$certname,
@@ -35,3 +38,8 @@ if (-not $?) {
if ($sign) {
Sign-File -certname $certname -certsha1 $certsha1 -certfile $certfile -description $description -files @($catalog -replace 'cdf$', 'cat')
}
+
+if ($outfile) {
+ Split-Path -Parent $outfile | ?{ $_ } | %{ mkdir -Force $_; }
+ Move-Item ($catalog -replace 'cdf$', 'cat') $outfile
+}
diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props
index 5da901c0215a..3f14501446a1 100644
--- a/Tools/msi/msi.props
+++ b/Tools/msi/msi.props
@@ -56,6 +56,7 @@
<ReuseCabinetCache>true</ReuseCabinetCache>
<CRTRedist Condition="'$(CRTRedist)' == ''">$(ExternalsDir)\windows-installer\redist-1\$(Platform)</CRTRedist>
<CRTRedist>$([System.IO.Path]::GetFullPath($(CRTRedist)))</CRTRedist>
+ <TclTkLibraryDir Condition="$(TclTkLibraryDir) == ''">$(tcltkDir)lib</TclTkLibraryDir>
<DocFilename>python$(MajorVersionNumber)$(MinorVersionNumber)$(MicroVersionNumber)$(ReleaseLevelName).chm</DocFilename>
<InstallerVersion>$(MajorVersionNumber).$(MinorVersionNumber).$(Field3Value).0</InstallerVersion>
@@ -121,7 +122,7 @@
<LinkerBindInputPaths Include="$(PySourcePath)">
<BindName>src</BindName>
</LinkerBindInputPaths>
- <LinkerBindInputPaths Include="$(tcltkDir)">
+ <LinkerBindInputPaths Include="$(TclTkLibraryDir)">
<BindName>tcltk</BindName>
</LinkerBindInputPaths>
<LinkerBindInputPaths Include="$(CRTRedist)">
diff --git a/Tools/msi/msi.targets b/Tools/msi/msi.targets
index 9283a1ed6c30..4788a637a5d2 100644
--- a/Tools/msi/msi.targets
+++ b/Tools/msi/msi.targets
@@ -47,7 +47,7 @@ EncodingType=
<WriteLinesToFile File="$(_CatFileSourceTarget)" Lines="$(_CatFile)" Overwrite="true" />
<Exec Command='$(_MakeCatCommand) "$(_CatFileSourceTarget)"' WorkingDirectory="$(MSBuildThisFileDirectory)" />
- <Exec Command='$(_SignCommand) "$(_CatFileTarget)"' WorkingDirectory="$(MSBuildThisFileDirectory)"
+ <Exec Command='$(_SignCommand) "$(_CatFileTarget)" || $(_SignCommand) "$(_CatFileTarget)" || $(_SignCommand) "$(_CatFileTarget)"' WorkingDirectory="$(MSBuildThisFileDirectory)"
Condition="Exists($(_CatFileTarget)) and '$(_SignCommand)' != ''" />
<ItemGroup>
@@ -76,18 +76,18 @@ EncodingType=
<Target Name="SignCabs">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignCabs->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignCabs->'"%(FullPath)"',' ') || $(_SignCommand) @(SignCabs->'"%(FullPath)"',' ') || $(_SignCommand) @(SignCabs->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
<Target Name="SignMsi">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignMsi->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignMsi->'"%(FullPath)"',' ') || $(_SignCommand) @(SignMsi->'"%(FullPath)"',' ') || $(_SignCommand) @(SignMsi->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
<Target Name="SignBundleEngine">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
<Target Name="SignBundle">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignBundle->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignBundle->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundle->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundle->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
</Project>
\ No newline at end of file
diff --git a/Tools/msi/sign_build.ps1 b/Tools/msi/sign_build.ps1
index 6668eb33a2d1..d3f750454f52 100644
--- a/Tools/msi/sign_build.ps1
+++ b/Tools/msi/sign_build.ps1
@@ -16,7 +16,7 @@
#>
param(
[Parameter(Mandatory=$true)][string]$root,
- [string[]]$patterns=@("*.exe", "*.dll", "*.pyd"),
+ [string[]]$patterns=@("*.exe", "*.dll", "*.pyd", "*.cat"),
[string]$description,
[string]$certname,
[string]$certsha1,
diff --git a/Tools/msi/tcltk/tcltk.wixproj b/Tools/msi/tcltk/tcltk.wixproj
index fae353f5f50a..218f3d15ec88 100644
--- a/Tools/msi/tcltk/tcltk.wixproj
+++ b/Tools/msi/tcltk/tcltk.wixproj
@@ -20,10 +20,10 @@
<WxlTemplate Include="*.wxl_template" />
</ItemGroup>
<ItemGroup>
- <InstallFiles Include="$(tcltkDir)lib\**\*">
- <SourceBase>$(tcltkDir)</SourceBase>
+ <InstallFiles Include="$(TclTkLibraryDir)\**\*">
+ <SourceBase>$(TclTkLibraryDir)</SourceBase>
<Source>!(bindpath.tcltk)</Source>
- <TargetBase>$(tcltkDir)lib</TargetBase>
+ <TargetBase>$(TclTkLibraryDir)</TargetBase>
<Target_>tcl\</Target_>
<Group>tcltk_lib</Group>
</InstallFiles>
diff --git a/Tools/msi/uploadrelease.ps1 b/Tools/msi/uploadrelease.ps1
index 491df80be1e9..b6fbeea29810 100644
--- a/Tools/msi/uploadrelease.ps1
+++ b/Tools/msi/uploadrelease.ps1
@@ -15,6 +15,10 @@
The subdirectory on the host to copy files to.
.Parameter tests
The path to run download tests in.
+.Parameter doc_htmlhelp
+ Optional path besides -build to locate CHM files.
+.Parameter embed
+ Optional path besides -build to locate ZIP files.
.Parameter skipupload
Skip uploading
.Parameter skippurge
@@ -30,6 +34,8 @@ param(
[string]$server="python-downloads",
[string]$target="/srv/www.python.org/ftp/python",
[string]$tests=${env:TEMP},
+ [string]$doc_htmlhelp=$null,
+ [string]$embed=$null,
[switch]$skipupload,
[switch]$skippurge,
[switch]$skiptest,
@@ -73,32 +79,45 @@ if (-not $skipupload) {
"Upload using $pscp and $plink"
""
- pushd $build
- $doc = gci python*.chm, python*.chm.asc
+ if ($doc_htmlhelp) {
+ pushd $doc_htmlhelp
+ } else {
+ pushd $build
+ }
+ $chm = gci python*.chm, python*.chm.asc
popd
$d = "$target/$($p[0])/"
& $plink -batch $user@$server mkdir $d
& $plink -batch $user@$server chgrp downloads $d
& $plink -batch $user@$server chmod g-x,o+rx $d
- & $pscp -batch $doc.FullName "$user@${server}:$d"
+ & $pscp -batch $chm.FullName "$user@${server}:$d"
- foreach ($a in gci "$build" -Directory) {
+ $dirs = gci "$build" -Directory
+ if ($embed) {
+ $dirs = ($dirs, (gi $embed)) | %{ $_ }
+ }
+
+ foreach ($a in $dirs) {
"Uploading files from $($a.FullName)"
pushd "$($a.FullName)"
$exe = gci *.exe, *.exe.asc, *.zip, *.zip.asc
$msi = gci *.msi, *.msi.asc, *.msu, *.msu.asc
popd
- & $pscp -batch $exe.FullName "$user@${server}:$d"
+ if ($exe) {
+ & $pscp -batch $exe.FullName "$user@${server}:$d"
+ }
- $sd = "$d$($a.Name)$($p[1])/"
- & $plink -batch $user@$server mkdir $sd
- & $plink -batch $user@$server chgrp downloads $sd
- & $plink -batch $user@$server chmod g-x,o+rx $sd
- & $pscp -batch $msi.FullName "$user@${server}:$sd"
- & $plink -batch $user@$server chgrp downloads $sd*
- & $plink -batch $user@$server chmod g-x,o+r $sd*
+ if ($msi) {
+ $sd = "$d$($a.Name)$($p[1])/"
+ & $plink -batch $user@$server mkdir $sd
+ & $plink -batch $user@$server chgrp downloads $sd
+ & $plink -batch $user@$server chmod g-x,o+rx $sd
+ & $pscp -batch $msi.FullName "$user@${server}:$sd"
+ & $plink -batch $user@$server chgrp downloads $sd*
+ & $plink -batch $user@$server chmod g-x,o+r $sd*
+ }
}
& $plink -batch $user@$server chgrp downloads $d*
@@ -128,7 +147,18 @@ if (-not $skiptest) {
if (-not $skiphash) {
# Display MD5 hash and size of each downloadable file
pushd $build
- $hashes = gci python*.chm, *\*.exe, *\*.zip | `
+ $files = gci python*.chm, *\*.exe, *\*.zip
+ if ($doc_htmlhelp) {
+ cd $doc_htmlhelp
+ $files = ($files, (gci python*.chm)) | %{ $_ }
+ }
+ if ($embed) {
+ cd $embed
+ $files = ($files, (gci *.zip)) | %{ $_ }
+ }
+ popd
+
+ $hashes = $files | `
Sort-Object Name | `
Format-Table Name, @{Label="MD5"; Expression={(Get-FileHash $_ -Algorithm MD5).Hash}}, Length -AutoSize | `
Out-String -Width 4096
[View Less]
1
0
https://github.com/python/cpython/commit/749e73065dea1cc3a6d39a830380a2c124…
commit: 749e73065dea1cc3a6d39a830380a2c124f568c2
branch: master
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T14:19:25-07:00
summary:
Fix Windows release build issues (GH-14091)
* Increase timeout for PGO builds in Windows release
* Fix test step failures
* Disable MinGW step properly
* Fix embeddable distro name
files:
M .azure-pipelines/windows-…
[View More]release/msi-steps.yml
M .azure-pipelines/windows-release/stage-build.yml
M .azure-pipelines/windows-release/stage-layout-embed.yml
M .azure-pipelines/windows-release/stage-test-embed.yml
M Tools/msi/dev/dev.wixproj
diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml
index 2f80c34eeb7d..153408271c71 100644
--- a/.azure-pipelines/windows-release/msi-steps.yml
+++ b/.azure-pipelines/windows-release/msi-steps.yml
@@ -94,8 +94,8 @@ steps:
Py_OutDir: $(Build.BinariesDirectory)
- script: |
- %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true /p:BuildForRelease=true
- %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false /p:BuildForRelease=true
+ %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
+ %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false
displayName: 'Build win32 installer'
env:
Platform: x86
@@ -103,10 +103,12 @@ steps:
PYTHON: $(Build.BinariesDirectory)\win32\python.exe
PYTHONHOME: $(Build.SourcesDirectory)
TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32
+ BuildForRelease: true
+ SuppressMinGWLib: true
- script: |
- %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true /p:BuildForRelease=true
- %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false /p:BuildForRelease=true
+ %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true
+ %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false
displayName: 'Build amd64 installer'
env:
Platform: x64
@@ -114,6 +116,8 @@ steps:
PYTHON: $(Build.BinariesDirectory)\amd64\python.exe
PYTHONHOME: $(Build.SourcesDirectory)
TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64
+ BuildForRelease: true
+ SuppressMinGWLib: true
- task: CopyFiles@2
displayName: 'Assemble artifact: msi (1/2)'
diff --git a/.azure-pipelines/windows-release/stage-build.yml b/.azure-pipelines/windows-release/stage-build.yml
index 121e4b1a278e..a5093a04f087 100644
--- a/.azure-pipelines/windows-release/stage-build.yml
+++ b/.azure-pipelines/windows-release/stage-build.yml
@@ -95,6 +95,9 @@ jobs:
displayName: Python PGO build
condition: and(succeeded(), eq(variables['DoPGO'], 'true'))
+ # Allow up to five hours for PGO
+ timeoutInMinutes: 300
+
pool:
name: 'Windows Release'
diff --git a/.azure-pipelines/windows-release/stage-layout-embed.yml b/.azure-pipelines/windows-release/stage-layout-embed.yml
index c9d58b6b30a2..e2689dbb603d 100644
--- a/.azure-pipelines/windows-release/stage-layout-embed.yml
+++ b/.azure-pipelines/windows-release/stage-layout-embed.yml
@@ -39,7 +39,7 @@ jobs:
- powershell: >
$(LayoutCmd)
--copy "$(Build.ArtifactStagingDirectory)\layout"
- --zip "$(Build.ArtifactStagingDirectory)\embed\$(VersionText)-embed-$(Name).zip"
+ --zip "$(Build.ArtifactStagingDirectory)\embed\python-$(VersionText)-embed-$(Name).zip"
--preset-embed
displayName: 'Generate embeddable layout'
diff --git a/.azure-pipelines/windows-release/stage-test-embed.yml b/.azure-pipelines/windows-release/stage-test-embed.yml
index ab377fdfa8c9..b33176266a20 100644
--- a/.azure-pipelines/windows-release/stage-test-embed.yml
+++ b/.azure-pipelines/windows-release/stage-test-embed.yml
@@ -26,7 +26,8 @@ jobs:
downloadPath: $(Build.BinariesDirectory)
- powershell: |
- Expand-Archive -Path "$(Build.BinariesDirectory)\embed\embed-$(Name).zip" -DestinationPath "$(Build.BinariesDirectory)\Python"
+ $p = gi "$(Build.BinariesDirectory)\embed\python*embed-$(Name).zip"
+ Expand-Archive -Path $p -DestinationPath "$(Build.BinariesDirectory)\Python"
$p = gi "$(Build.BinariesDirectory)\Python\python.exe"
Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
displayName: 'Install Python and add to PATH'
diff --git a/Tools/msi/dev/dev.wixproj b/Tools/msi/dev/dev.wixproj
index 4a56cec35722..c6e3bcf709c6 100644
--- a/Tools/msi/dev/dev.wixproj
+++ b/Tools/msi/dev/dev.wixproj
@@ -8,7 +8,7 @@
</PropertyGroup>
<Import Project="..\msi.props" />
<PropertyGroup>
- <DefineConstants Condition="$(BuildForRelease)">
+ <DefineConstants Condition="$(BuildForRelease) and $(SuppressMinGWLib) == ''">
$(DefineConstants);
IncludeMinGWLib=1;
</DefineConstants>
@@ -35,7 +35,7 @@
Inputs="$(BuildPath)$(PyDllName).dll"
Outputs="$(BuildPath)lib$(PyDllName).a"
AfterTargets="PrepareForBuild"
- Condition="$(BuildForRelease)">
+ Condition="$(BuildForRelease) and $(SuppressMinGWLib) == ''">
<!-- Build libpython##.a as part of this project. This requires gendef and dlltool on the path. -->
<PropertyGroup>
<_DllToolOpts>-m i386 --as-flags=--32</_DllToolOpts>
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/322281e7caa161d5b9c0f3fbf79efd1529…
commit: 322281e7caa161d5b9c0f3fbf79efd15299f3594
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T10:51:32-07:00
summary:
Document C API changes in What's New in Python 3.8 (GH-14092)
(cherry picked from commit bd5798f6d4f6960fd6b49976bdf4326be77f4277)
Co-authored-by: Victor Stinner <vstinner(a)…
[View More]redhat.com>
files:
M Doc/whatsnew/3.8.rst
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 9989a0917434..05d2ecc698b4 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -936,6 +936,33 @@ Optimizations
Build and C API Changes
=======================
+* The header files have been reorganized to better separate the different kinds
+ of APIs:
+
+ * ``Include/*.h`` should be the portable public stable C API.
+ * ``Include/cpython/*.h`` should be the unstable C API specific to CPython;
+ public API, with some private API prefixed by ``_Py`` or ``_PY``.
+ * ``Include/internal/*.h`` is the private internal C API very specific to
+ CPython. This API comes with no backward compatibility warranty and should
+ not be used outside CPython. It is only exposed for very specific needs
+ like debuggers and profiles which has to access to CPython internals
+ without calling functions. This API is now installed by ``make install``.
+
+ (Contributed by Victor Stinner in :issue:`35134` and :issue:`35081`,
+ work initiated by Eric Snow in Python 3.7)
+
+* Some macros have been converted to static inline functions: parameter types
+ and return type are well defined, they don't have issues specific to macros,
+ variables have a local scopes. Examples:
+
+ * :c:func:`Py_INCREF`, :c:func:`Py_DECREF`
+ * :c:func:`Py_XINCREF`, :c:func:`Py_XDECREF`
+ * :c:func:`PyObject_INIT`, :c:func:`PyObject_INIT_VAR`
+ * Private functions: :c:func:`_PyObject_GC_TRACK`,
+ :c:func:`_PyObject_GC_UNTRACK`, :c:func:`_Py_Dealloc`
+
+ (Contributed by Victor Stinner in :issue:`35059`.)
+
* The :c:func:`PyByteArray_Init` and :c:func:`PyByteArray_Fini` functions have
been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were
excluded from the limited API (stable ABI), and were not documented.
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/e696b15a62dd0c85fe6ed3c9698b5f889c…
commit: e696b15a62dd0c85fe6ed3c9698b5f889c0bb1b3
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T10:49:22-07:00
summary:
bpo-35537: Rewrite setsid test for os.posix_spawn (GH-11721)
bpo-35537, bpo-35876: Fix also test_start_new_session() of
test_subprocess: use os.getsid() rather than os.getpgid().
(…
[View More]cherry picked from commit 5884043252473ac733aba1d3251d4debe72511e5)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
M Lib/test/test_posix.py
M Lib/test/test_subprocess.py
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 0f07a8f2e68d..afa1398d4edc 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -1639,23 +1639,35 @@ def test_setsigmask_wrong_type(self):
os.environ, setsigmask=[signal.NSIG,
signal.NSIG+1])
- @unittest.skipIf(True,
- "FIXME: bpo-35537: test fails is setsid is supported")
- def test_start_new_session(self):
- # For code coverage of calling setsid(). We don't care if we get an
- # EPERM error from it depending on the test execution environment, that
- # still indicates that it was called.
- code = "import os; print(os.getpgid(os.getpid()))"
+ def test_setsid(self):
+ rfd, wfd = os.pipe()
+ self.addCleanup(os.close, rfd)
try:
- self.spawn_func(sys.executable,
- [sys.executable, "-c", code],
- os.environ, setsid=True)
- except NotImplementedError as exc:
- self.skipTest("setsid is not supported: %s" % exc)
- else:
- parent_pgid = os.getpgid(os.getpid())
- child_pgid = int(output)
- self.assertNotEqual(parent_pgid, child_pgid)
+ os.set_inheritable(wfd, True)
+
+ code = textwrap.dedent(f"""
+ import os
+ fd = {wfd}
+ sid = os.getsid(0)
+ os.write(fd, str(sid).encode())
+ """)
+
+ try:
+ pid = self.spawn_func(sys.executable,
+ [sys.executable, "-c", code],
+ os.environ, setsid=True)
+ except NotImplementedError as exc:
+ self.skipTest(f"setsid is not supported: {exc!r}")
+ except PermissionError as exc:
+ self.skipTest(f"setsid failed with: {exc!r}")
+ finally:
+ os.close(wfd)
+
+ self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+ output = os.read(rfd, 100)
+ child_sid = int(output)
+ parent_sid = os.getsid(os.getpid())
+ self.assertNotEqual(parent_sid, child_sid)
@unittest.skipUnless(hasattr(signal, 'pthread_sigmask'),
'need signal.pthread_sigmask()')
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index fca3ed62099b..97d21904b9ce 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -1705,16 +1705,15 @@ def test_start_new_session(self):
# still indicates that it was called.
try:
output = subprocess.check_output(
- [sys.executable, "-c",
- "import os; print(os.getpgid(os.getpid()))"],
+ [sys.executable, "-c", "import os; print(os.getsid(0))"],
start_new_session=True)
except OSError as e:
if e.errno != errno.EPERM:
raise
else:
- parent_pgid = os.getpgid(os.getpid())
- child_pgid = int(output)
- self.assertNotEqual(parent_pgid, child_pgid)
+ parent_sid = os.getsid(0)
+ child_sid = int(output)
+ self.assertNotEqual(parent_sid, child_sid)
def test_run_abort(self):
# returncode handles signal termination
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/bd5798f6d4f6960fd6b49976bdf4326be7…
commit: bd5798f6d4f6960fd6b49976bdf4326be77f4277
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T19:43:43+02:00
summary:
Document C API changes in What's New in Python 3.8 (GH-14092)
files:
M Doc/whatsnew/3.8.rst
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 3e607130743d..b63bcef5de47 100644
--- a/Doc/whatsnew/3.8.…
[View More]rst
+++ b/Doc/whatsnew/3.8.rst
@@ -955,6 +955,33 @@ Optimizations
Build and C API Changes
=======================
+* The header files have been reorganized to better separate the different kinds
+ of APIs:
+
+ * ``Include/*.h`` should be the portable public stable C API.
+ * ``Include/cpython/*.h`` should be the unstable C API specific to CPython;
+ public API, with some private API prefixed by ``_Py`` or ``_PY``.
+ * ``Include/internal/*.h`` is the private internal C API very specific to
+ CPython. This API comes with no backward compatibility warranty and should
+ not be used outside CPython. It is only exposed for very specific needs
+ like debuggers and profiles which has to access to CPython internals
+ without calling functions. This API is now installed by ``make install``.
+
+ (Contributed by Victor Stinner in :issue:`35134` and :issue:`35081`,
+ work initiated by Eric Snow in Python 3.7)
+
+* Some macros have been converted to static inline functions: parameter types
+ and return type are well defined, they don't have issues specific to macros,
+ variables have a local scopes. Examples:
+
+ * :c:func:`Py_INCREF`, :c:func:`Py_DECREF`
+ * :c:func:`Py_XINCREF`, :c:func:`Py_XDECREF`
+ * :c:func:`PyObject_INIT`, :c:func:`PyObject_INIT_VAR`
+ * Private functions: :c:func:`_PyObject_GC_TRACK`,
+ :c:func:`_PyObject_GC_UNTRACK`, :c:func:`_Py_Dealloc`
+
+ (Contributed by Victor Stinner in :issue:`35059`.)
+
* The :c:func:`PyByteArray_Init` and :c:func:`PyByteArray_Fini` functions have
been removed. They did nothing since Python 2.7.4 and Python 3.2.0, were
excluded from the limited API (stable ABI), and were not documented.
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/5884043252473ac733aba1d3251d4debe7…
commit: 5884043252473ac733aba1d3251d4debe72511e5
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T19:31:43+02:00
summary:
bpo-35537: Rewrite setsid test for os.posix_spawn (GH-11721)
bpo-35537, bpo-35876: Fix also test_start_new_session() of
test_subprocess: use os.getsid() rather than os.getpgid().
files:
M Lib/test/test_posix.py
M …
[View More]Lib/test/test_subprocess.py
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 0f07a8f2e68d..afa1398d4edc 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -1639,23 +1639,35 @@ def test_setsigmask_wrong_type(self):
os.environ, setsigmask=[signal.NSIG,
signal.NSIG+1])
- @unittest.skipIf(True,
- "FIXME: bpo-35537: test fails is setsid is supported")
- def test_start_new_session(self):
- # For code coverage of calling setsid(). We don't care if we get an
- # EPERM error from it depending on the test execution environment, that
- # still indicates that it was called.
- code = "import os; print(os.getpgid(os.getpid()))"
+ def test_setsid(self):
+ rfd, wfd = os.pipe()
+ self.addCleanup(os.close, rfd)
try:
- self.spawn_func(sys.executable,
- [sys.executable, "-c", code],
- os.environ, setsid=True)
- except NotImplementedError as exc:
- self.skipTest("setsid is not supported: %s" % exc)
- else:
- parent_pgid = os.getpgid(os.getpid())
- child_pgid = int(output)
- self.assertNotEqual(parent_pgid, child_pgid)
+ os.set_inheritable(wfd, True)
+
+ code = textwrap.dedent(f"""
+ import os
+ fd = {wfd}
+ sid = os.getsid(0)
+ os.write(fd, str(sid).encode())
+ """)
+
+ try:
+ pid = self.spawn_func(sys.executable,
+ [sys.executable, "-c", code],
+ os.environ, setsid=True)
+ except NotImplementedError as exc:
+ self.skipTest(f"setsid is not supported: {exc!r}")
+ except PermissionError as exc:
+ self.skipTest(f"setsid failed with: {exc!r}")
+ finally:
+ os.close(wfd)
+
+ self.assertEqual(os.waitpid(pid, 0), (pid, 0))
+ output = os.read(rfd, 100)
+ child_sid = int(output)
+ parent_sid = os.getsid(os.getpid())
+ self.assertNotEqual(parent_sid, child_sid)
@unittest.skipUnless(hasattr(signal, 'pthread_sigmask'),
'need signal.pthread_sigmask()')
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index fca3ed62099b..97d21904b9ce 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -1705,16 +1705,15 @@ def test_start_new_session(self):
# still indicates that it was called.
try:
output = subprocess.check_output(
- [sys.executable, "-c",
- "import os; print(os.getpgid(os.getpid()))"],
+ [sys.executable, "-c", "import os; print(os.getsid(0))"],
start_new_session=True)
except OSError as e:
if e.errno != errno.EPERM:
raise
else:
- parent_pgid = os.getpgid(os.getpid())
- child_pgid = int(output)
- self.assertNotEqual(parent_pgid, child_pgid)
+ parent_sid = os.getsid(0)
+ child_sid = int(output)
+ self.assertNotEqual(parent_sid, child_sid)
def test_run_abort(self):
# returncode handles signal termination
[View Less]
1
0

bpo-37261: Document sys.unraisablehook corner cases (GH-14059)
by Miss Islington (bot) June 14, 2019
by Miss Islington (bot) June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/3b976d19c8c09e83eec63a5b62daf4d55b…
commit: 3b976d19c8c09e83eec63a5b62daf4d55bfd6aeb
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T09:59:54-07:00
summary:
bpo-37261: Document sys.unraisablehook corner cases (GH-14059)
Document reference cycle and resurrected objects issues in
sys.unraisablehook() and threading.excepthook() …
[View More]documentation.
Fix test.support.catch_unraisable_exception(): __exit__() no longer
ignores unraisable exceptions.
Fix test_io test_writer_close_error_on_close(): use a second
catch_unraisable_exception() to catch the BufferedWriter unraisable
exception.
(cherry picked from commit 212646cae6b7c4ddc8d98c8b9b6d39a5f259e864)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
M Doc/library/sys.rst
M Doc/library/test.rst
M Doc/library/threading.rst
M Lib/test/support/__init__.py
M Lib/test/test_io.py
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 5bde6870717c..817c3f1e56f9 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -1514,13 +1514,21 @@ always available.
* *err_msg*: Error message, can be ``None``.
* *object*: Object causing the exception, can be ``None``.
- :func:`sys.unraisablehook` can be overridden to control how unraisable
- exceptions are handled.
-
The default hook formats *err_msg* and *object* as:
``f'{err_msg}: {object!r}'``; use "Exception ignored in" error message
if *err_msg* is ``None``.
+ :func:`sys.unraisablehook` can be overridden to control how unraisable
+ exceptions are handled.
+
+ Storing *exc_value* using a custom hook can create a reference cycle. It
+ should be cleared explicitly to break the reference cycle when the
+ exception is no longer needed.
+
+ Storing *object* using a custom hook can resurrect it if it is set to an
+ object which is being finalized. Avoid storing *object* after the custom
+ hook completes to avoid resurrecting objects.
+
See also :func:`excepthook` which handles uncaught exceptions.
.. versionadded:: 3.8
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index 0a98c882465d..920c018084b8 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -1086,17 +1086,13 @@ The :mod:`test.support` module defines the following functions:
Context manager catching unraisable exception using
:func:`sys.unraisablehook`.
- If the *object* attribute of the unraisable hook is set and the object is
- being finalized, the object is resurrected because the context manager
- stores a strong reference to it (``cm.unraisable.object``).
-
Storing the exception value (``cm.unraisable.exc_value``) creates a
reference cycle. The reference cycle is broken explicitly when the context
manager exits.
- Exiting the context manager clears the stored unraisable exception. It can
- trigger a new unraisable exception (ex: the resurrected object is finalized
- again and raises the same exception): it is silently ignored in this case.
+ Storing the object (``cm.unraisable.object``) can resurrect it if it is set
+ to an object which is being finalized. Exiting the context manager clears
+ the stored object.
Usage::
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index 2907b65f5bca..9ffd5cd58179 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -58,6 +58,14 @@ This module defines the following functions:
:func:`threading.excepthook` can be overridden to control how uncaught
exceptions raised by :func:`Thread.run` are handled.
+ Storing *exc_value* using a custom hook can create a reference cycle. It
+ should be cleared explicitly to break the reference cycle when the
+ exception is no longer needed.
+
+ Storing *object* using a custom hook can resurrect it if it is set to an
+ object which is being finalized. Avoid storing *object* after the custom
+ hook completes to avoid resurrecting objects.
+
.. seealso::
:func:`sys.excepthook` handles uncaught exceptions.
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 174e0456dc71..7c0efc783edb 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -3040,17 +3040,13 @@ class catch_unraisable_exception:
"""
Context manager catching unraisable exception using sys.unraisablehook.
- If the *object* attribute of the unraisable hook is set and the object is
- being finalized, the object is resurrected because the context manager
- stores a strong reference to it (cm.unraisable.object).
-
Storing the exception value (cm.unraisable.exc_value) creates a reference
cycle. The reference cycle is broken explicitly when the context manager
exits.
- Exiting the context manager clears the stored unraisable exception. It can
- trigger a new unraisable exception (ex: the resurrected object is finalized
- again and raises the same exception): it is silently ignored in this case.
+ Storing the object (cm.unraisable.object) can resurrect it if it is set to
+ an object which is being finalized. Exiting the context manager clears the
+ stored object.
Usage:
@@ -3080,10 +3076,5 @@ def __enter__(self):
return self
def __exit__(self, *exc_info):
- # Clear the unraisable exception to explicitly break a reference cycle.
- # It can call _hook() again: ignore the new unraisable exception in
- # this case.
- self.unraisable = None
-
sys.unraisablehook = self._old_hook
del self.unraisable
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 55686d743983..fc474c99053d 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2072,8 +2072,12 @@ def writer_close():
writer.close = lambda: None
writer = None
+ # Ignore BufferedWriter (of the BufferedRWPair) unraisable exception
with support.catch_unraisable_exception():
- pair = None
+ # Ignore BufferedRWPair unraisable exception
+ with support.catch_unraisable_exception():
+ pair = None
+ support.gc_collect()
support.gc_collect()
def test_reader_writer_close_error_on_close(self):
[View Less]
1
0

bpo-37266: Daemon threads are now denied in subinterpreters (GH-14049)
by Victor Stinner June 14, 2019
by Victor Stinner June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/066e5b1a917ec2134e8997d2cadd815724…
commit: 066e5b1a917ec2134e8997d2cadd815724314252
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T18:55:22+02:00
summary:
bpo-37266: Daemon threads are now denied in subinterpreters (GH-14049)
In a subinterpreter, spawning a daemon thread now raises an
exception. Daemon threads were never supported in subinterpreters.
Previously, the …
[View More]subinterpreter finalization crashed with a Pyton
fatal error if a daemon thread was still running.
* Add _thread._is_main_interpreter()
* threading.Thread.start() now raises RuntimeError if the thread is a
daemon thread and the method is called from a subinterpreter.
* The _thread module now uses Argument Clinic for the new function.
* Use textwrap.dedent() in test_threading.SubinterpThreadingTests
files:
A Misc/NEWS.d/next/Library/2019-06-13-11-59-52.bpo-37266.goLjef.rst
A Modules/clinic/_threadmodule.c.h
M Doc/library/threading.rst
M Doc/whatsnew/3.9.rst
M Lib/_dummy_thread.py
M Lib/test/test_threading.py
M Lib/threading.py
M Modules/_threadmodule.c
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index 9ffd5cd58179..f80eb22e18fc 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -280,6 +280,8 @@ since it is impossible to detect the termination of alien threads.
base class constructor (``Thread.__init__()``) before doing anything else to
the thread.
+ Daemon threads must not be used in subinterpreters.
+
.. versionchanged:: 3.3
Added the *daemon* argument.
@@ -294,6 +296,12 @@ since it is impossible to detect the termination of alien threads.
This method will raise a :exc:`RuntimeError` if called more than once
on the same thread object.
+ Raise a :exc:`RuntimeError` if the thread is a daemon thread and the
+ method is called from a subinterpreter.
+
+ .. versionchanged:: 3.9
+ In a subinterpreter, spawning a daemon thread now raises an exception.
+
.. method:: run()
Method representing the thread's activity.
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
index 999519f0ce07..ef30743b708d 100644
--- a/Doc/whatsnew/3.9.rst
+++ b/Doc/whatsnew/3.9.rst
@@ -86,6 +86,14 @@ New Modules
Improved Modules
================
+threading
+---------
+
+In a subinterpreter, spawning a daemon thread now raises an exception. Daemon
+threads were never supported in subinterpreters. Previously, the subinterpreter
+finalization crashed with a Pyton fatal error if a daemon thread was still
+running.
+
Optimizations
=============
diff --git a/Lib/_dummy_thread.py b/Lib/_dummy_thread.py
index a2cae54b0580..2407f9bf5ddc 100644
--- a/Lib/_dummy_thread.py
+++ b/Lib/_dummy_thread.py
@@ -161,3 +161,7 @@ def interrupt_main():
else:
global _interrupt
_interrupt = True
+
+
+def _is_main_interpreter():
+ return True
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 0a0a62bdf9bf..a04d496001e3 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -17,6 +17,7 @@
import os
import subprocess
import signal
+import textwrap
from test import lock_tests
from test import support
@@ -928,14 +929,19 @@ def test_clear_threads_states_after_fork(self):
class SubinterpThreadingTests(BaseTestCase):
+ def pipe(self):
+ r, w = os.pipe()
+ self.addCleanup(os.close, r)
+ self.addCleanup(os.close, w)
+ if hasattr(os, 'set_blocking'):
+ os.set_blocking(r, False)
+ return (r, w)
def test_threads_join(self):
# Non-daemon threads should be joined at subinterpreter shutdown
# (issue #18808)
- r, w = os.pipe()
- self.addCleanup(os.close, r)
- self.addCleanup(os.close, w)
- code = r"""if 1:
+ r, w = self.pipe()
+ code = textwrap.dedent(r"""
import os
import random
import threading
@@ -953,7 +959,7 @@ def f():
threading.Thread(target=f).start()
random_sleep()
- """ % (w,)
+ """ % (w,))
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
# The thread was joined properly.
@@ -964,10 +970,8 @@ def test_threads_join_2(self):
# Python code returned but before the thread state is deleted.
# To achieve this, we register a thread-local object which sleeps
# a bit when deallocated.
- r, w = os.pipe()
- self.addCleanup(os.close, r)
- self.addCleanup(os.close, w)
- code = r"""if 1:
+ r, w = self.pipe()
+ code = textwrap.dedent(r"""
import os
import random
import threading
@@ -992,34 +996,38 @@ def f():
threading.Thread(target=f).start()
random_sleep()
- """ % (w,)
+ """ % (w,))
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
# The thread was joined properly.
self.assertEqual(os.read(r, 1), b"x")
- @cpython_only
- def test_daemon_threads_fatal_error(self):
- subinterp_code = r"""if 1:
- import os
+ def test_daemon_thread(self):
+ r, w = self.pipe()
+ code = textwrap.dedent(f"""
import threading
- import time
+ import sys
- def f():
- # Make sure the daemon thread is still running when
- # Py_EndInterpreter is called.
- time.sleep(10)
- threading.Thread(target=f, daemon=True).start()
- """
- script = r"""if 1:
- import _testcapi
+ channel = open({w}, "w", closefd=False)
+
+ def func():
+ pass
+
+ thread = threading.Thread(target=func, daemon=True)
+ try:
+ thread.start()
+ except RuntimeError as exc:
+ print("ok: %s" % exc, file=channel, flush=True)
+ else:
+ thread.join()
+ print("fail: RuntimeError not raised", file=channel, flush=True)
+ """)
+ ret = test.support.run_in_subinterp(code)
+ self.assertEqual(ret, 0)
- _testcapi.run_in_subinterp(%r)
- """ % (subinterp_code,)
- with test.support.SuppressCrashReport():
- rc, out, err = assert_python_failure("-c", script)
- self.assertIn("Fatal Python error: Py_EndInterpreter: "
- "not the last thread", err.decode())
+ msg = os.read(r, 100).decode().rstrip()
+ self.assertEqual("ok: daemon thread are not supported "
+ "in subinterpreters", msg)
class ThreadingExceptionTests(BaseTestCase):
diff --git a/Lib/threading.py b/Lib/threading.py
index 7c6d404bcd10..01a15a6fc075 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -34,6 +34,7 @@
_allocate_lock = _thread.allocate_lock
_set_sentinel = _thread._set_sentinel
get_ident = _thread.get_ident
+_is_main_interpreter = _thread._is_main_interpreter
try:
get_native_id = _thread.get_native_id
_HAVE_THREAD_NATIVE_ID = True
@@ -846,6 +847,11 @@ def start(self):
if self._started.is_set():
raise RuntimeError("threads can only be started once")
+
+ if self.daemon and not _is_main_interpreter():
+ raise RuntimeError("daemon thread are not supported "
+ "in subinterpreters")
+
with _active_limbo_lock:
_limbo[self] = self
try:
diff --git a/Misc/NEWS.d/next/Library/2019-06-13-11-59-52.bpo-37266.goLjef.rst b/Misc/NEWS.d/next/Library/2019-06-13-11-59-52.bpo-37266.goLjef.rst
new file mode 100644
index 000000000000..f41918185213
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-13-11-59-52.bpo-37266.goLjef.rst
@@ -0,0 +1,4 @@
+In a subinterpreter, spawning a daemon thread now raises an exception. Daemon
+threads were never supported in subinterpreters. Previously, the subinterpreter
+finalization crashed with a Pyton fatal error if a daemon thread was still
+running.
diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c
index d5e40ef999e3..9ab8e7a0ceb3 100644
--- a/Modules/_threadmodule.c
+++ b/Modules/_threadmodule.c
@@ -8,6 +8,14 @@
#include "structmember.h" /* offsetof */
#include "pythread.h"
+#include "clinic/_threadmodule.c.h"
+
+/*[clinic input]
+module _thread
+[clinic start generated code]*/
+/*[clinic end generated code: output=da39a3ee5e6b4b0d input=be8dbe5cc4b16df7]*/
+
+
static PyObject *ThreadError;
static PyObject *str_dict;
@@ -1442,6 +1450,21 @@ PyDoc_STRVAR(excepthook_doc,
\n\
Handle uncaught Thread.run() exception.");
+/*[clinic input]
+_thread._is_main_interpreter
+
+Return True if the current interpreter is the main Python interpreter.
+[clinic start generated code]*/
+
+static PyObject *
+_thread__is_main_interpreter_impl(PyObject *module)
+/*[clinic end generated code: output=7dd82e1728339adc input=cc1eb00fd4598915]*/
+{
+ _PyRuntimeState *runtime = &_PyRuntime;
+ PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
+ return PyBool_FromLong(interp == runtime->interpreters.main);
+}
+
static PyMethodDef thread_methods[] = {
{"start_new_thread", (PyCFunction)thread_PyThread_start_new_thread,
METH_VARARGS, start_new_doc},
@@ -1471,6 +1494,7 @@ static PyMethodDef thread_methods[] = {
METH_NOARGS, _set_sentinel_doc},
{"_excepthook", thread_excepthook,
METH_O, excepthook_doc},
+ _THREAD__IS_MAIN_INTERPRETER_METHODDEF
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/clinic/_threadmodule.c.h b/Modules/clinic/_threadmodule.c.h
new file mode 100644
index 000000000000..07ea08b1750d
--- /dev/null
+++ b/Modules/clinic/_threadmodule.c.h
@@ -0,0 +1,22 @@
+/*[clinic input]
+preserve
+[clinic start generated code]*/
+
+PyDoc_STRVAR(_thread__is_main_interpreter__doc__,
+"_is_main_interpreter($module, /)\n"
+"--\n"
+"\n"
+"Return True if the current interpreter is the main Python interpreter.");
+
+#define _THREAD__IS_MAIN_INTERPRETER_METHODDEF \
+ {"_is_main_interpreter", (PyCFunction)_thread__is_main_interpreter, METH_NOARGS, _thread__is_main_interpreter__doc__},
+
+static PyObject *
+_thread__is_main_interpreter_impl(PyObject *module);
+
+static PyObject *
+_thread__is_main_interpreter(PyObject *module, PyObject *Py_UNUSED(ignored))
+{
+ return _thread__is_main_interpreter_impl(module);
+}
+/*[clinic end generated code: output=505840d1b9101789 input=a9049054013a1b77]*/
[View Less]
1
0

bpo-19865: ctypes.create_unicode_buffer() supports non-BMP strings on Windows (GH-14081)
by Miss Islington (bot) June 14, 2019
by Miss Islington (bot) June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/b0f6fa8d7d4c6d8263094124df9ef9cf81…
commit: b0f6fa8d7d4c6d8263094124df9ef9cf816bbed6
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T09:43:22-07:00
summary:
bpo-19865: ctypes.create_unicode_buffer() supports non-BMP strings on Windows (GH-14081)
(cherry picked from commit 9765efcb39fc03d5b1abec3924388974470a8bd5)
Co-authored-by: Zackery …
[View More]Spytz <zspytz(a)gmail.com>
files:
A Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
M Lib/ctypes/__init__.py
M Lib/ctypes/test/test_buffers.py
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index 4107db3e3972..128155dbf4f2 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -274,7 +274,15 @@ def create_unicode_buffer(init, size=None):
"""
if isinstance(init, str):
if size is None:
- size = len(init)+1
+ if sizeof(c_wchar) == 2:
+ # UTF-16 requires a surrogate pair (2 wchar_t) for non-BMP
+ # characters (outside [U+0000; U+FFFF] range). +1 for trailing
+ # NUL character.
+ size = sum(2 if ord(c) > 0xFFFF else 1 for c in init) + 1
+ else:
+ # 32-bit wchar_t (1 wchar_t per Unicode character). +1 for
+ # trailing NUL character.
+ size = len(init) + 1
buftype = c_wchar * size
buf = buftype()
buf.value = init
diff --git a/Lib/ctypes/test/test_buffers.py b/Lib/ctypes/test/test_buffers.py
index 166faaf4e4b8..15782be757c8 100644
--- a/Lib/ctypes/test/test_buffers.py
+++ b/Lib/ctypes/test/test_buffers.py
@@ -60,5 +60,14 @@ def test_unicode_conversion(self):
self.assertEqual(b[::2], "ac")
self.assertEqual(b[::5], "a")
+ @need_symbol('c_wchar')
+ def test_create_unicode_buffer_non_bmp(self):
+ expected = 5 if sizeof(c_wchar) == 2 else 3
+ for s in '\U00010000\U00100000', '\U00010000\U0010ffff':
+ b = create_unicode_buffer(s)
+ self.assertEqual(len(b), expected)
+ self.assertEqual(b[-1], '\0')
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst b/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
new file mode 100644
index 000000000000..efd1f55c0135
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
@@ -0,0 +1,2 @@
+:func:`ctypes.create_unicode_buffer()` now also supports non-BMP characters
+on platforms with 16-bit :c:type:`wchar_t` (for example, Windows and AIX).
[View Less]
1
0

bpo-19865: ctypes.create_unicode_buffer() supports non-BMP strings on Windows (GH-14081)
by Miss Islington (bot) June 14, 2019
by Miss Islington (bot) June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/0b592d513b073cd3a4ba7632907c25b828…
commit: 0b592d513b073cd3a4ba7632907c25b8282f15ce
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T09:30:27-07:00
summary:
bpo-19865: ctypes.create_unicode_buffer() supports non-BMP strings on Windows (GH-14081)
(cherry picked from commit 9765efcb39fc03d5b1abec3924388974470a8bd5)
Co-authored-by: Zackery …
[View More]Spytz <zspytz(a)gmail.com>
files:
A Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
M Lib/ctypes/__init__.py
M Lib/ctypes/test/test_buffers.py
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index 614677398864..dae408a86724 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -279,7 +279,15 @@ def create_unicode_buffer(init, size=None):
"""
if isinstance(init, str):
if size is None:
- size = len(init)+1
+ if sizeof(c_wchar) == 2:
+ # UTF-16 requires a surrogate pair (2 wchar_t) for non-BMP
+ # characters (outside [U+0000; U+FFFF] range). +1 for trailing
+ # NUL character.
+ size = sum(2 if ord(c) > 0xFFFF else 1 for c in init) + 1
+ else:
+ # 32-bit wchar_t (1 wchar_t per Unicode character). +1 for
+ # trailing NUL character.
+ size = len(init) + 1
buftype = c_wchar * size
buf = buftype()
buf.value = init
diff --git a/Lib/ctypes/test/test_buffers.py b/Lib/ctypes/test/test_buffers.py
index 166faaf4e4b8..15782be757c8 100644
--- a/Lib/ctypes/test/test_buffers.py
+++ b/Lib/ctypes/test/test_buffers.py
@@ -60,5 +60,14 @@ def test_unicode_conversion(self):
self.assertEqual(b[::2], "ac")
self.assertEqual(b[::5], "a")
+ @need_symbol('c_wchar')
+ def test_create_unicode_buffer_non_bmp(self):
+ expected = 5 if sizeof(c_wchar) == 2 else 3
+ for s in '\U00010000\U00100000', '\U00010000\U0010ffff':
+ b = create_unicode_buffer(s)
+ self.assertEqual(len(b), expected)
+ self.assertEqual(b[-1], '\0')
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst b/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
new file mode 100644
index 000000000000..efd1f55c0135
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
@@ -0,0 +1,2 @@
+:func:`ctypes.create_unicode_buffer()` now also supports non-BMP characters
+on platforms with 16-bit :c:type:`wchar_t` (for example, Windows and AIX).
[View Less]
1
0

bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080) (GH-14086)
by Victor Stinner June 14, 2019
by Victor Stinner June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/33feb2e1a391cde91aefcb8d9cf5144b5f…
commit: 33feb2e1a391cde91aefcb8d9cf5144b5fbc5d87
branch: 3.7
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T18:26:37+02:00
summary:
bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080) (GH-14086)
(cherry picked from commit f0749da9a535375f05a2015e8960e8ae54877349)
files:
A Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.…
[View More]bpo-35998.yX82oD.rst
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 6d085f303546..4d3c064eaf1f 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -491,17 +491,14 @@ def eof_received(self):
def test_start_tls_server_1(self):
HELLO_MSG = b'1' * self.PAYLOAD_SIZE
+ ANSWER = b'answer'
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
- if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
- # bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
- # as the eof was not being received by the server if the payload
- # size is not big enough. This behaviour only appears if the
- # client is using TLS1.3.
- client_context.options |= ssl.OP_NO_TLSv1_3
+ answer = None
def client(sock, addr):
+ nonlocal answer
sock.settimeout(self.TIMEOUT)
sock.connect(addr)
@@ -510,33 +507,36 @@ def client(sock, addr):
sock.start_tls(client_context)
sock.sendall(HELLO_MSG)
-
- sock.shutdown(socket.SHUT_RDWR)
+ answer = sock.recv_all(len(ANSWER))
sock.close()
class ServerProto(asyncio.Protocol):
- def __init__(self, on_con, on_eof, on_con_lost):
+ def __init__(self, on_con, on_con_lost):
self.on_con = on_con
- self.on_eof = on_eof
self.on_con_lost = on_con_lost
self.data = b''
+ self.transport = None
def connection_made(self, tr):
+ self.transport = tr
self.on_con.set_result(tr)
+ def replace_transport(self, tr):
+ self.transport = tr
+
def data_received(self, data):
self.data += data
-
- def eof_received(self):
- self.on_eof.set_result(1)
+ if len(self.data) >= len(HELLO_MSG):
+ self.transport.write(ANSWER)
def connection_lost(self, exc):
+ self.transport = None
if exc is None:
self.on_con_lost.set_result(None)
else:
self.on_con_lost.set_exception(exc)
- async def main(proto, on_con, on_eof, on_con_lost):
+ async def main(proto, on_con, on_con_lost):
tr = await on_con
tr.write(HELLO_MSG)
@@ -547,16 +547,16 @@ def connection_lost(self, exc):
server_side=True,
ssl_handshake_timeout=self.TIMEOUT)
- await on_eof
+ proto.replace_transport(new_tr)
+
await on_con_lost
self.assertEqual(proto.data, HELLO_MSG)
new_tr.close()
async def run_main():
on_con = self.loop.create_future()
- on_eof = self.loop.create_future()
on_con_lost = self.loop.create_future()
- proto = ServerProto(on_con, on_eof, on_con_lost)
+ proto = ServerProto(on_con, on_con_lost)
server = await self.loop.create_server(
lambda: proto, '127.0.0.1', 0)
@@ -565,11 +565,12 @@ def connection_lost(self, exc):
with self.tcp_client(lambda sock: client(sock, addr),
timeout=self.TIMEOUT):
await asyncio.wait_for(
- main(proto, on_con, on_eof, on_con_lost),
+ main(proto, on_con, on_con_lost),
loop=self.loop, timeout=self.TIMEOUT)
server.close()
await server.wait_closed()
+ self.assertEqual(answer, ANSWER)
self.loop.run_until_complete(run_main())
diff --git a/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
new file mode 100644
index 000000000000..23b6d00f42c5
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
@@ -0,0 +1 @@
+Avoid TimeoutError in test_asyncio: test_start_tls_server_1()
[View Less]
1
0

bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080)
by Miss Islington (bot) June 14, 2019
by Miss Islington (bot) June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/0c2eb6d21013d77e1160250d3cf69ca802…
commit: 0c2eb6d21013d77e1160250d3cf69ca80215d064
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T09:12:48-07:00
summary:
bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080)
(cherry picked from commit f0749da9a535375f05a2015e8960e8ae54877349)
Co-authored-by: Andrew …
[View More]Svetlov <andrew.svetlov(a)gmail.com>
files:
A Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
M Lib/test/test_asyncio/test_sslproto.py
diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 4215abf5d863..5c861e92b7d6 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -494,17 +494,14 @@ def eof_received(self):
def test_start_tls_server_1(self):
HELLO_MSG = b'1' * self.PAYLOAD_SIZE
+ ANSWER = b'answer'
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
- if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
- # bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
- # as the eof was not being received by the server if the payload
- # size is not big enough. This behaviour only appears if the
- # client is using TLS1.3.
- client_context.options |= ssl.OP_NO_TLSv1_3
+ answer = None
def client(sock, addr):
+ nonlocal answer
sock.settimeout(self.TIMEOUT)
sock.connect(addr)
@@ -513,33 +510,36 @@ def client(sock, addr):
sock.start_tls(client_context)
sock.sendall(HELLO_MSG)
-
- sock.shutdown(socket.SHUT_RDWR)
+ answer = sock.recv_all(len(ANSWER))
sock.close()
class ServerProto(asyncio.Protocol):
- def __init__(self, on_con, on_eof, on_con_lost):
+ def __init__(self, on_con, on_con_lost):
self.on_con = on_con
- self.on_eof = on_eof
self.on_con_lost = on_con_lost
self.data = b''
+ self.transport = None
def connection_made(self, tr):
+ self.transport = tr
self.on_con.set_result(tr)
+ def replace_transport(self, tr):
+ self.transport = tr
+
def data_received(self, data):
self.data += data
-
- def eof_received(self):
- self.on_eof.set_result(1)
+ if len(self.data) >= len(HELLO_MSG):
+ self.transport.write(ANSWER)
def connection_lost(self, exc):
+ self.transport = None
if exc is None:
self.on_con_lost.set_result(None)
else:
self.on_con_lost.set_exception(exc)
- async def main(proto, on_con, on_eof, on_con_lost):
+ async def main(proto, on_con, on_con_lost):
tr = await on_con
tr.write(HELLO_MSG)
@@ -550,16 +550,16 @@ def connection_lost(self, exc):
server_side=True,
ssl_handshake_timeout=self.TIMEOUT)
- await on_eof
+ proto.replace_transport(new_tr)
+
await on_con_lost
self.assertEqual(proto.data, HELLO_MSG)
new_tr.close()
async def run_main():
on_con = self.loop.create_future()
- on_eof = self.loop.create_future()
on_con_lost = self.loop.create_future()
- proto = ServerProto(on_con, on_eof, on_con_lost)
+ proto = ServerProto(on_con, on_con_lost)
server = await self.loop.create_server(
lambda: proto, '127.0.0.1', 0)
@@ -568,11 +568,12 @@ def connection_lost(self, exc):
with self.tcp_client(lambda sock: client(sock, addr),
timeout=self.TIMEOUT):
await asyncio.wait_for(
- main(proto, on_con, on_eof, on_con_lost),
+ main(proto, on_con, on_con_lost),
timeout=self.TIMEOUT)
server.close()
await server.wait_closed()
+ self.assertEqual(answer, ANSWER)
self.loop.run_until_complete(run_main())
diff --git a/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
new file mode 100644
index 000000000000..23b6d00f42c5
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
@@ -0,0 +1 @@
+Avoid TimeoutError in test_asyncio: test_start_tls_server_1()
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/212646cae6b7c4ddc8d98c8b9b6d39a5f2…
commit: 212646cae6b7c4ddc8d98c8b9b6d39a5f259e864
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T18:03:22+02:00
summary:
bpo-37261: Document sys.unraisablehook corner cases (GH-14059)
Document reference cycle and resurrected objects issues in
sys.unraisablehook() and threading.excepthook() documentation.
Fix test.support.…
[View More]catch_unraisable_exception(): __exit__() no longer
ignores unraisable exceptions.
Fix test_io test_writer_close_error_on_close(): use a second
catch_unraisable_exception() to catch the BufferedWriter unraisable
exception.
files:
M Doc/library/sys.rst
M Doc/library/test.rst
M Doc/library/threading.rst
M Lib/test/support/__init__.py
M Lib/test/test_io.py
diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 5bde6870717c..817c3f1e56f9 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -1514,13 +1514,21 @@ always available.
* *err_msg*: Error message, can be ``None``.
* *object*: Object causing the exception, can be ``None``.
- :func:`sys.unraisablehook` can be overridden to control how unraisable
- exceptions are handled.
-
The default hook formats *err_msg* and *object* as:
``f'{err_msg}: {object!r}'``; use "Exception ignored in" error message
if *err_msg* is ``None``.
+ :func:`sys.unraisablehook` can be overridden to control how unraisable
+ exceptions are handled.
+
+ Storing *exc_value* using a custom hook can create a reference cycle. It
+ should be cleared explicitly to break the reference cycle when the
+ exception is no longer needed.
+
+ Storing *object* using a custom hook can resurrect it if it is set to an
+ object which is being finalized. Avoid storing *object* after the custom
+ hook completes to avoid resurrecting objects.
+
See also :func:`excepthook` which handles uncaught exceptions.
.. versionadded:: 3.8
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index 0a98c882465d..920c018084b8 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -1086,17 +1086,13 @@ The :mod:`test.support` module defines the following functions:
Context manager catching unraisable exception using
:func:`sys.unraisablehook`.
- If the *object* attribute of the unraisable hook is set and the object is
- being finalized, the object is resurrected because the context manager
- stores a strong reference to it (``cm.unraisable.object``).
-
Storing the exception value (``cm.unraisable.exc_value``) creates a
reference cycle. The reference cycle is broken explicitly when the context
manager exits.
- Exiting the context manager clears the stored unraisable exception. It can
- trigger a new unraisable exception (ex: the resurrected object is finalized
- again and raises the same exception): it is silently ignored in this case.
+ Storing the object (``cm.unraisable.object``) can resurrect it if it is set
+ to an object which is being finalized. Exiting the context manager clears
+ the stored object.
Usage::
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index 2907b65f5bca..9ffd5cd58179 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -58,6 +58,14 @@ This module defines the following functions:
:func:`threading.excepthook` can be overridden to control how uncaught
exceptions raised by :func:`Thread.run` are handled.
+ Storing *exc_value* using a custom hook can create a reference cycle. It
+ should be cleared explicitly to break the reference cycle when the
+ exception is no longer needed.
+
+ Storing *object* using a custom hook can resurrect it if it is set to an
+ object which is being finalized. Avoid storing *object* after the custom
+ hook completes to avoid resurrecting objects.
+
.. seealso::
:func:`sys.excepthook` handles uncaught exceptions.
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 174e0456dc71..7c0efc783edb 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -3040,17 +3040,13 @@ class catch_unraisable_exception:
"""
Context manager catching unraisable exception using sys.unraisablehook.
- If the *object* attribute of the unraisable hook is set and the object is
- being finalized, the object is resurrected because the context manager
- stores a strong reference to it (cm.unraisable.object).
-
Storing the exception value (cm.unraisable.exc_value) creates a reference
cycle. The reference cycle is broken explicitly when the context manager
exits.
- Exiting the context manager clears the stored unraisable exception. It can
- trigger a new unraisable exception (ex: the resurrected object is finalized
- again and raises the same exception): it is silently ignored in this case.
+ Storing the object (cm.unraisable.object) can resurrect it if it is set to
+ an object which is being finalized. Exiting the context manager clears the
+ stored object.
Usage:
@@ -3080,10 +3076,5 @@ def __enter__(self):
return self
def __exit__(self, *exc_info):
- # Clear the unraisable exception to explicitly break a reference cycle.
- # It can call _hook() again: ignore the new unraisable exception in
- # this case.
- self.unraisable = None
-
sys.unraisablehook = self._old_hook
del self.unraisable
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 55686d743983..fc474c99053d 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2072,8 +2072,12 @@ def writer_close():
writer.close = lambda: None
writer = None
+ # Ignore BufferedWriter (of the BufferedRWPair) unraisable exception
with support.catch_unraisable_exception():
- pair = None
+ # Ignore BufferedRWPair unraisable exception
+ with support.catch_unraisable_exception():
+ pair = None
+ support.gc_collect()
support.gc_collect()
def test_reader_writer_close_error_on_close(self):
[View Less]
1
0

bpo-19865: ctypes.create_unicode_buffer() supports non-BMP strings on Windows (GH-14081)
by Victor Stinner June 14, 2019
by Victor Stinner June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/9765efcb39fc03d5b1abec392438897447…
commit: 9765efcb39fc03d5b1abec3924388974470a8bd5
branch: master
author: Zackery Spytz <zspytz(a)gmail.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-14T17:53:59+02:00
summary:
bpo-19865: ctypes.create_unicode_buffer() supports non-BMP strings on Windows (GH-14081)
files:
A Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
M Lib/ctypes/__init__.py
M Lib/ctypes/test/…
[View More]test_buffers.py
diff --git a/Lib/ctypes/__init__.py b/Lib/ctypes/__init__.py
index 4107db3e3972..128155dbf4f2 100644
--- a/Lib/ctypes/__init__.py
+++ b/Lib/ctypes/__init__.py
@@ -274,7 +274,15 @@ def create_unicode_buffer(init, size=None):
"""
if isinstance(init, str):
if size is None:
- size = len(init)+1
+ if sizeof(c_wchar) == 2:
+ # UTF-16 requires a surrogate pair (2 wchar_t) for non-BMP
+ # characters (outside [U+0000; U+FFFF] range). +1 for trailing
+ # NUL character.
+ size = sum(2 if ord(c) > 0xFFFF else 1 for c in init) + 1
+ else:
+ # 32-bit wchar_t (1 wchar_t per Unicode character). +1 for
+ # trailing NUL character.
+ size = len(init) + 1
buftype = c_wchar * size
buf = buftype()
buf.value = init
diff --git a/Lib/ctypes/test/test_buffers.py b/Lib/ctypes/test/test_buffers.py
index 166faaf4e4b8..15782be757c8 100644
--- a/Lib/ctypes/test/test_buffers.py
+++ b/Lib/ctypes/test/test_buffers.py
@@ -60,5 +60,14 @@ def test_unicode_conversion(self):
self.assertEqual(b[::2], "ac")
self.assertEqual(b[::5], "a")
+ @need_symbol('c_wchar')
+ def test_create_unicode_buffer_non_bmp(self):
+ expected = 5 if sizeof(c_wchar) == 2 else 3
+ for s in '\U00010000\U00100000', '\U00010000\U0010ffff':
+ b = create_unicode_buffer(s)
+ self.assertEqual(len(b), expected)
+ self.assertEqual(b[-1], '\0')
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst b/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
new file mode 100644
index 000000000000..efd1f55c0135
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-14-08-30-16.bpo-19865.FRGH4I.rst
@@ -0,0 +1,2 @@
+:func:`ctypes.create_unicode_buffer()` now also supports non-BMP characters
+on platforms with 16-bit :c:type:`wchar_t` (for example, Windows and AIX).
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/21a92f8cda525d25a165b773fbe1bfffd3…
commit: 21a92f8cda525d25a165b773fbe1bfffd303a000
branch: master
author: Steve Dower <steve.dower(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T08:29:20-07:00
summary:
Implement Windows release builds in Azure Pipelines (GH-14065)
files:
A .azure-pipelines/windows-release.yml
A .azure-pipelines/windows-release/build-steps.yml
A .azure-pipelines/windows-release/checkout.yml
A .…
[View More]azure-pipelines/windows-release/find-sdk.yml
A .azure-pipelines/windows-release/layout-command.yml
A .azure-pipelines/windows-release/mingw-lib.yml
A .azure-pipelines/windows-release/msi-steps.yml
A .azure-pipelines/windows-release/stage-build.yml
A .azure-pipelines/windows-release/stage-layout-embed.yml
A .azure-pipelines/windows-release/stage-layout-full.yml
A .azure-pipelines/windows-release/stage-layout-msix.yml
A .azure-pipelines/windows-release/stage-layout-nuget.yml
A .azure-pipelines/windows-release/stage-msi.yml
A .azure-pipelines/windows-release/stage-pack-msix.yml
A .azure-pipelines/windows-release/stage-pack-nuget.yml
A .azure-pipelines/windows-release/stage-publish-nugetorg.yml
A .azure-pipelines/windows-release/stage-publish-pythonorg.yml
A .azure-pipelines/windows-release/stage-publish-store.yml
A .azure-pipelines/windows-release/stage-sign.yml
A .azure-pipelines/windows-release/stage-test-embed.yml
A .azure-pipelines/windows-release/stage-test-msi.yml
A .azure-pipelines/windows-release/stage-test-nuget.yml
A PC/crtlicense.txt
A PC/layout/support/nuspec.py
D Tools/msi/exe/crtlicense.txt
M Doc/make.bat
M PC/layout/main.py
M PC/layout/support/appxmanifest.py
M PC/layout/support/options.py
M PC/layout/support/pip.py
M PC/layout/support/props.py
M PC/python_uwp.cpp
M PCbuild/_tkinter.vcxproj
M PCbuild/build.bat
M PCbuild/pyproject.props
M PCbuild/python.props
M PCbuild/python.vcxproj
M PCbuild/tcltk.props
M Tools/msi/buildrelease.bat
M Tools/msi/exe/exe.wixproj
M Tools/msi/exe/exe_files.wxs
M Tools/msi/make_cat.ps1
M Tools/msi/msi.props
M Tools/msi/msi.targets
M Tools/msi/sign_build.ps1
M Tools/msi/tcltk/tcltk.wixproj
M Tools/msi/uploadrelease.ps1
diff --git a/.azure-pipelines/windows-release.yml b/.azure-pipelines/windows-release.yml
new file mode 100644
index 000000000000..774585792484
--- /dev/null
+++ b/.azure-pipelines/windows-release.yml
@@ -0,0 +1,96 @@
+name: Release_$(Build.SourceBranchName)_$(SourceTag)_$(Date:yyyyMMdd)$(Rev:.rr)
+
+# QUEUE TIME VARIABLES
+# variables:
+# GitRemote: python
+# SourceTag:
+# DoPGO: true
+# SigningCertificate: 'Python Software Foundation'
+# SigningDescription: 'Built: $(Build.BuildNumber)'
+# DoLayout: true
+# DoMSIX: true
+# DoNuget: true
+# DoEmbed: true
+# DoMSI: true
+# DoPublish: false
+
+trigger: none
+pr: none
+
+stages:
+- stage: Build
+ displayName: Build binaries
+ jobs:
+ - template: windows-release/stage-build.yml
+
+- stage: Sign
+ displayName: Sign binaries
+ dependsOn: Build
+ jobs:
+ - template: windows-release/stage-sign.yml
+
+- stage: Layout
+ displayName: Generate layouts
+ dependsOn: Sign
+ jobs:
+ - template: windows-release/stage-layout-full.yml
+ - template: windows-release/stage-layout-embed.yml
+ - template: windows-release/stage-layout-nuget.yml
+
+- stage: Pack
+ dependsOn: Layout
+ jobs:
+ - template: windows-release/stage-pack-nuget.yml
+
+- stage: Test
+ dependsOn: Pack
+ jobs:
+ - template: windows-release/stage-test-embed.yml
+ - template: windows-release/stage-test-nuget.yml
+
+- stage: Layout_MSIX
+ displayName: Generate MSIX layouts
+ dependsOn: Sign
+ condition: and(succeeded(), eq(variables['DoMSIX'], 'true'))
+ jobs:
+ - template: windows-release/stage-layout-msix.yml
+
+- stage: Pack_MSIX
+ displayName: Package MSIX
+ dependsOn: Layout_MSIX
+ jobs:
+ - template: windows-release/stage-pack-msix.yml
+
+- stage: Build_MSI
+ displayName: Build MSI installer
+ dependsOn: Sign
+ condition: and(succeeded(), eq(variables['DoMSI'], 'true'))
+ jobs:
+ - template: windows-release/stage-msi.yml
+
+- stage: Test_MSI
+ displayName: Test MSI installer
+ dependsOn: Build_MSI
+ jobs:
+ - template: windows-release/stage-test-msi.yml
+
+- stage: PublishPyDotOrg
+ displayName: Publish to python.org
+ dependsOn: ['Test_MSI', 'Test']
+ condition: and(succeeded(), eq(variables['DoPublish'], 'true'))
+ jobs:
+ - template: windows-release/stage-publish-pythonorg.yml
+
+- stage: PublishNuget
+ displayName: Publish to nuget.org
+ dependsOn: Test
+ condition: and(succeeded(), eq(variables['DoPublish'], 'true'))
+ jobs:
+ - template: windows-release/stage-publish-nugetorg.yml
+
+- stage: PublishStore
+ displayName: Publish to Store
+ dependsOn: Pack_MSIX
+ condition: and(succeeded(), eq(variables['DoPublish'], 'true'))
+ jobs:
+ - template: windows-release/stage-publish-store.yml
diff --git a/.azure-pipelines/windows-release/build-steps.yml b/.azure-pipelines/windows-release/build-steps.yml
new file mode 100644
index 000000000000..508d73b0865f
--- /dev/null
+++ b/.azure-pipelines/windows-release/build-steps.yml
@@ -0,0 +1,83 @@
+parameters:
+ ShouldPGO: false
+
+steps:
+- template: ./checkout.yml
+
+- powershell: |
+ $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+ Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
+ Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
+ Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
+ Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
+ Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)"
+ Write-Host "##vso[build.addbuildtag]$($d.PythonVersion)-$(Name)"
+ displayName: 'Extract version numbers'
+
+- ${{ if eq(parameters.ShouldPGO, 'false') }}:
+ - powershell: |
+ $env:SigningCertificate = $null
+ .\PCbuild\build.bat -v -p $(Platform) -c $(Configuration)
+ displayName: 'Run build'
+ env:
+ IncludeUwp: true
+ Py_OutDir: '$(Build.BinariesDirectory)\bin'
+
+- ${{ if eq(parameters.ShouldPGO, 'true') }}:
+ - powershell: |
+ $env:SigningCertificate = $null
+ .\PCbuild\build.bat -v -p $(Platform) --pgo
+ displayName: 'Run build with PGO'
+ env:
+ IncludeUwp: true
+ Py_OutDir: '$(Build.BinariesDirectory)\bin'
+
+- powershell: |
+ $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
+ $tool = (gci -r "$kitroot\Bin\*\x64\signtool.exe" | sort FullName -Desc | select -First 1)
+ if (-not $tool) {
+ throw "SDK is not available"
+ }
+ Write-Host "##vso[task.prependpath]$($tool.Directory)"
+ displayName: 'Add WinSDK tools to path'
+
+- powershell: |
+ $env:SigningCertificate = $null
+ .\python.bat PC\layout -vv -t "$(Build.BinariesDirectory)\catalog" --catalog "${env:CAT}.cdf" --preset-default
+ makecat "${env:CAT}.cdf"
+ del "${env:CAT}.cdf"
+ if (-not (Test-Path "${env:CAT}.cat")) {
+ throw "Failed to build catalog file"
+ }
+ displayName: 'Generate catalog'
+ env:
+ CAT: $(Build.BinariesDirectory)\bin\$(Arch)\python
+
+- task: PublishBuildArtifacts@1
+ displayName: 'Publish binaries'
+ condition: and(succeeded(), not(and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate'])))
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ ArtifactName: bin_$(Name)
+
+- task: PublishBuildArtifacts@1
+ displayName: 'Publish binaries for signing'
+ condition: and(succeeded(), and(eq(variables['Configuration'], 'Release'), variables['SigningCertificate']))
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\bin\$(Arch)'
+ ArtifactName: unsigned_bin_$(Name)
+
+- task: CopyFiles@2
+ displayName: 'Layout Artifact: symbols'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\bin\$(Arch)
+ targetFolder: $(Build.ArtifactStagingDirectory)\symbols\$(Name)
+ flatten: true
+ contents: |
+ **\*.pdb
+
+- task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: symbols'
+ inputs:
+ PathToPublish: '$(Build.ArtifactStagingDirectory)\symbols'
+ ArtifactName: symbols
diff --git a/.azure-pipelines/windows-release/checkout.yml b/.azure-pipelines/windows-release/checkout.yml
new file mode 100644
index 000000000000..d42d55fff08d
--- /dev/null
+++ b/.azure-pipelines/windows-release/checkout.yml
@@ -0,0 +1,21 @@
+parameters:
+ depth: 3
+
+steps:
+- checkout: none
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch https://github.com/$(GitRemote)/cpython.git .
+ displayName: 'git clone ($(GitRemote)/$(SourceTag))'
+ condition: and(succeeded(), and(variables['GitRemote'], variables['SourceTag']))
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(SourceTag) --single-branch $(Build.Repository.Uri) .
+ displayName: 'git clone (<default>/$(SourceTag))'
+ condition: and(succeeded(), and(not(variables['GitRemote']), variables['SourceTag']))
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch https://github.com/$(GitRemote)/cpython.git .
+ displayName: 'git clone ($(GitRemote)/<default>)'
+ condition: and(succeeded(), and(variables['GitRemote'], not(variables['SourceTag'])))
+
+- script: git clone --progress -v --depth ${{ parameters.depth }} --branch $(Build.SourceBranchName) --single-branch $(Build.Repository.Uri) .
+ displayName: 'git clone'
+ condition: and(succeeded(), and(not(variables['GitRemote']), not(variables['SourceTag'])))
diff --git a/.azure-pipelines/windows-release/find-sdk.yml b/.azure-pipelines/windows-release/find-sdk.yml
new file mode 100644
index 000000000000..e4de78555b3f
--- /dev/null
+++ b/.azure-pipelines/windows-release/find-sdk.yml
@@ -0,0 +1,17 @@
+# Locate the Windows SDK and add its binaries directory to PATH
+#
+# `toolname` can be overridden to use a different marker file.
+
+parameters:
+ toolname: signtool.exe
+
+steps:
+ - powershell: |
+ $kitroot = (gp 'HKLM:\SOFTWARE\Microsoft\Windows Kits\Installed Roots\').KitsRoot10
+ $tool = (gci -r "$kitroot\Bin\*\${{ parameters.toolname }}" | sort FullName -Desc | select -First 1)
+ if (-not $tool) {
+ throw "SDK is not available"
+ }
+ Write-Host "##vso[task.prependpath]$($tool.Directory)"
+ Write-Host "Adding $($tool.Directory) to PATH"
+ displayName: 'Add WinSDK tools to path'
diff --git a/.azure-pipelines/windows-release/layout-command.yml b/.azure-pipelines/windows-release/layout-command.yml
new file mode 100644
index 000000000000..3ec9b69ad712
--- /dev/null
+++ b/.azure-pipelines/windows-release/layout-command.yml
@@ -0,0 +1,20 @@
+steps:
+- powershell: >
+ Write-Host (
+ '##vso[task.setvariable variable=LayoutCmd]&
+ "{0}"
+ "{1}\PC\layout"
+ -vv
+ --source "{1}"
+ --build "{2}"
+ --temp "{3}"
+ --include-cat "{2}\python.cat"
+ --doc-build "{4}"'
+ -f (
+ "$(PYTHON)",
+ "$(Build.SourcesDirectory)",
+ (Split-Path -Parent "$(PYTHON)"),
+ "$(Build.BinariesDirectory)\layout-temp",
+ "$(Build.BinariesDirectory)\doc"
+ ))
+ displayName: 'Set LayoutCmd'
diff --git a/.azure-pipelines/windows-release/mingw-lib.yml b/.azure-pipelines/windows-release/mingw-lib.yml
new file mode 100644
index 000000000000..30f7d34fa61d
--- /dev/null
+++ b/.azure-pipelines/windows-release/mingw-lib.yml
@@ -0,0 +1,13 @@
+parameters:
+ DllToolOpt: -m i386:x86-64
+ #DllToolOpt: -m i386 --as-flags=--32
+
+steps:
+- powershell: |
+ git clone https://github.com/python/cpython-bin-deps --branch binutils --single-branch --depth 1 --progress -v "binutils"
+ gci "bin\$(Arch)\python*.dll" | %{
+ & "binutils\gendef.exe" $_ | Out-File -Encoding ascii tmp.def
+ & "binutils\dlltool.exe" --dllname $($_.BaseName).dll --def tmp.def --output-lib "$($_.Directory)\lib$($_.BaseName).a" ${{ parameters.DllToolOpt }}
+ }
+ displayName: 'Generate MinGW import library'
+ workingDirectory: $(Build.BinariesDirectory)
diff --git a/.azure-pipelines/windows-release/msi-steps.yml b/.azure-pipelines/windows-release/msi-steps.yml
new file mode 100644
index 000000000000..2f80c34eeb7d
--- /dev/null
+++ b/.azure-pipelines/windows-release/msi-steps.yml
@@ -0,0 +1,142 @@
+steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: doc'
+ inputs:
+ artifactName: doc
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: CopyFiles@2
+ displayName: 'Merge documentation files'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\doc
+ targetFolder: $(Build.SourcesDirectory)\Doc\build
+ contents: |
+ htmlhelp\*.chm
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_win32'
+ inputs:
+ artifactName: bin_win32
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_win32_d'
+ inputs:
+ artifactName: bin_win32_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: CopyFiles@2
+ displayName: 'Merge win32 debug files'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\bin_win32_d
+ targetFolder: $(Build.BinariesDirectory)\bin_win32
+ contents: |
+ **\*_d.*
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_amd64'
+ inputs:
+ artifactName: bin_amd64
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_amd64_d'
+ inputs:
+ artifactName: bin_amd64_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: CopyFiles@2
+ displayName: 'Merge amd64 debug files'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\bin_amd64_d
+ targetFolder: $(Build.BinariesDirectory)\bin_amd64
+ contents: |
+ **\*_d.*
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_win32'
+ inputs:
+ artifactName: tcltk_lib_win32
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_amd64'
+ inputs:
+ artifactName: tcltk_lib_amd64
+ downloadPath: $(Build.BinariesDirectory)
+
+ - script: |
+ ren bin_win32 win32
+ ren bin_amd64 amd64
+ displayName: 'Correct artifact directory names'
+ workingDirectory: $(Build.BinariesDirectory)
+
+ - script: |
+ call Tools\msi\get_externals.bat
+ call PCbuild\find_python.bat
+ echo ##vso[task.setvariable variable=PYTHON]%PYTHON%
+ call PCbuild/find_msbuild.bat
+ echo ##vso[task.setvariable variable=MSBUILD]%MSBUILD%
+ displayName: 'Get external dependencies'
+
+ - script: |
+ %PYTHON% -m pip install blurb
+ %PYTHON% -m blurb merge -f Misc\NEWS
+ displayName: 'Merge NEWS file'
+
+ - script: |
+ %MSBUILD% Tools\msi\launcher\launcher.wixproj
+ displayName: 'Build launcher installer'
+ env:
+ Platform: x86
+ Py_OutDir: $(Build.BinariesDirectory)
+
+ - script: |
+ %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true /p:BuildForRelease=true
+ %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false /p:BuildForRelease=true
+ displayName: 'Build win32 installer'
+ env:
+ Platform: x86
+ Py_OutDir: $(Build.BinariesDirectory)
+ PYTHON: $(Build.BinariesDirectory)\win32\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_win32
+
+ - script: |
+ %MSBUILD% Tools\msi\bundle\releaselocal.wixproj /t:Rebuild /p:RebuildAll=true /p:BuildForRelease=true
+ %MSBUILD% Tools\msi\bundle\releaseweb.wixproj /t:Rebuild /p:RebuildAll=false /p:BuildForRelease=true
+ displayName: 'Build amd64 installer'
+ env:
+ Platform: x64
+ Py_OutDir: $(Build.BinariesDirectory)
+ PYTHON: $(Build.BinariesDirectory)\amd64\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ TclTkLibraryDir: $(Build.BinariesDirectory)\tcltk_lib_amd64
+
+ - task: CopyFiles@2
+ displayName: 'Assemble artifact: msi (1/2)'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\win32\en-us
+ targetFolder: $(Build.ArtifactStagingDirectory)\msi\win32
+ contents: |
+ *.msi
+ *.cab
+ *.exe
+
+ - task: CopyFiles@2
+ displayName: 'Assemble artifact: msi (2/2)'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\amd64\en-us
+ targetFolder: $(Build.ArtifactStagingDirectory)\msi\amd64
+ contents: |
+ *.msi
+ *.cab
+ *.exe
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish MSI'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msi'
+ ArtifactName: msi
diff --git a/.azure-pipelines/windows-release/stage-build.yml b/.azure-pipelines/windows-release/stage-build.yml
new file mode 100644
index 000000000000..121e4b1a278e
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-build.yml
@@ -0,0 +1,157 @@
+jobs:
+- job: Build_Docs
+ displayName: Docs build
+ pool:
+ name: 'Windows Release'
+ #vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: ./checkout.yml
+
+ - script: Doc\make.bat html
+ displayName: 'Build HTML docs'
+ env:
+ BUILDDIR: $(Build.BinariesDirectory)\Doc
+
+ #- powershell: iwr "https://www.python.org/ftp/python/3.7.3/python373.chm" -OutFile "$(Build.BinariesDirectory)\python390a0.chm"
+ # displayName: 'Cheat at building CHM docs'
+
+ - script: Doc\make.bat htmlhelp
+ displayName: 'Build CHM docs'
+ env:
+ BUILDDIR: $(Build.BinariesDirectory)\Doc
+
+ - task: CopyFiles@2
+ displayName: 'Assemble artifact: Doc'
+ inputs:
+ sourceFolder: $(Build.BinariesDirectory)\Doc
+ targetFolder: $(Build.ArtifactStagingDirectory)\Doc
+ contents: |
+ html\**\*
+ htmlhelp\*.chm
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: doc'
+ inputs:
+ PathtoPublish: $(Build.ArtifactStagingDirectory)\Doc
+ ArtifactName: doc
+
+- job: Build_Python
+ displayName: Python build
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Arch: win32
+ Platform: x86
+ Configuration: Release
+ win32_d:
+ Name: win32_d
+ Arch: win32
+ Platform: x86
+ Configuration: Debug
+ amd64_d:
+ Name: amd64_d
+ Arch: amd64
+ Platform: x64
+ Configuration: Debug
+
+ steps:
+ - template: ./build-steps.yml
+
+- job: Build_Python_NonPGO
+ displayName: Python non-PGO build
+ condition: and(succeeded(), ne(variables['DoPGO'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ Arch: amd64
+ Platform: x64
+ Configuration: Release
+
+ steps:
+ - template: ./build-steps.yml
+
+
+- job: Build_Python_PGO
+ displayName: Python PGO build
+ condition: and(succeeded(), eq(variables['DoPGO'], 'true'))
+
+ pool:
+ name: 'Windows Release'
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ Arch: amd64
+ Platform: x64
+ Configuration: Release
+
+ steps:
+ - template: ./build-steps.yml
+ parameters:
+ ShouldPGO: true
+
+
+- job: TclTk_Lib
+ displayName: Publish Tcl/Tk Library
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: ./checkout.yml
+
+ - script: PCbuild\get_externals.bat --no-openssl --no-libffi
+ displayName: 'Get external dependencies'
+
+ - task: MSBuild@1
+ displayName: 'Copy Tcl/Tk lib for publish'
+ inputs:
+ solution: PCbuild\tcltk.props
+ platform: x86
+ msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_win32"
+
+ - task: MSBuild@1
+ displayName: 'Copy Tcl/Tk lib for publish'
+ inputs:
+ solution: PCbuild\tcltk.props
+ platform: x64
+ msbuildArguments: /t:CopyTclTkLib /p:OutDir="$(Build.ArtifactStagingDirectory)\tcl_amd64"
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: tcltk_lib_win32'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_win32'
+ ArtifactName: tcltk_lib_win32
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: tcltk_lib_amd64'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\tcl_amd64'
+ ArtifactName: tcltk_lib_amd64
diff --git a/.azure-pipelines/windows-release/stage-layout-embed.yml b/.azure-pipelines/windows-release/stage-layout-embed.yml
new file mode 100644
index 000000000000..c9d58b6b30a2
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-embed.yml
@@ -0,0 +1,56 @@
+jobs:
+- job: Make_Embed_Layout
+ displayName: Make embeddable layout
+ condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+ Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
+ displayName: 'Extract version numbers'
+
+ - powershell: >
+ $(LayoutCmd)
+ --copy "$(Build.ArtifactStagingDirectory)\layout"
+ --zip "$(Build.ArtifactStagingDirectory)\embed\$(VersionText)-embed-$(Name).zip"
+ --preset-embed
+ displayName: 'Generate embeddable layout'
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_embed_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
+ ArtifactName: layout_embed_$(Name)
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: embed'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\embed'
+ ArtifactName: embed
diff --git a/.azure-pipelines/windows-release/stage-layout-full.yml b/.azure-pipelines/windows-release/stage-layout-full.yml
new file mode 100644
index 000000000000..3593cf0a3f69
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-full.yml
@@ -0,0 +1,62 @@
+jobs:
+- job: Make_Layouts
+ displayName: Make layouts
+ condition: and(succeeded(), eq(variables['DoLayout'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)_d'
+ inputs:
+ artifactName: bin_$(Name)_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: doc'
+ inputs:
+ artifactName: doc
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_$(Name)'
+ inputs:
+ artifactName: tcltk_lib_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\layout" --preset-default
+ displayName: 'Generate full layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_full_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\layout'
+ ArtifactName: layout_full_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-msix.yml b/.azure-pipelines/windows-release/stage-layout-msix.yml
new file mode 100644
index 000000000000..1a1e0a2fd685
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-msix.yml
@@ -0,0 +1,86 @@
+jobs:
+- job: Make_MSIX_Layout
+ displayName: Make MSIX layout
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ #win32:
+ # Name: win32
+ # Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ # PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)_d'
+ inputs:
+ artifactName: bin_$(Name)_d
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: tcltk_lib_$(Name)'
+ inputs:
+ artifactName: tcltk_lib_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ Remove-Item "$(Build.ArtifactStagingDirectory)\appx-store" -Recurse -Force -EA 0
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx-store" --preset-appx --precompile
+ displayName: 'Generate store APPX layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_appxstore_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx-store'
+ ArtifactName: layout_appxstore_$(Name)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: cert'
+ condition: and(succeeded(), variables['SigningCertificate'])
+ inputs:
+ artifactName: cert
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $info = (gc "$(Build.BinariesDirectory)\cert\certinfo.json" | ConvertFrom-JSON)
+ Write-Host "Side-loadable APPX must be signed with '$($info.Subject)'"
+ Write-Host "##vso[task.setvariable variable=APPX_DATA_PUBLISHER]$($info.Subject)"
+ Write-Host "##vso[task.setvariable variable=APPX_DATA_SHA256]$($info.SHA256)"
+ displayName: 'Override signing parameters'
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ - powershell: |
+ Remove-Item "$(Build.ArtifactStagingDirectory)\appx" -Recurse -Force -EA 0
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\appx" --preset-appx --precompile --include-symbols --include-tests
+ displayName: 'Generate sideloading APPX layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\tcltk_lib_$(Name)\tcl8
+ APPX_DATA_PUBLISHER: $(APPX_DATA_PUBLISHER)
+ APPX_DATA_SHA256: $(APPX_DATA_SHA256)
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_appx_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\appx'
+ ArtifactName: layout_appx_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-layout-nuget.yml b/.azure-pipelines/windows-release/stage-layout-nuget.yml
new file mode 100644
index 000000000000..ca4213d9e5c2
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-layout-nuget.yml
@@ -0,0 +1,44 @@
+jobs:
+- job: Make_Nuget_Layout
+ displayName: Make Nuget layout
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+ amd64:
+ Name: amd64
+ Python: $(Build.BinariesDirectory)\bin_$(Name)\python.exe
+ PYTHONHOME: $(Build.SourcesDirectory)
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: bin_$(Name)'
+ inputs:
+ artifactName: bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - template: ./layout-command.yml
+
+ - powershell: |
+ $(LayoutCmd) --copy "$(Build.ArtifactStagingDirectory)\nuget" --preset-nuget
+ displayName: 'Generate nuget layout'
+ env:
+ TCL_LIBRARY: $(Build.BinariesDirectory)\bin_$(Name)\tcl\tcl8
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: layout_nuget_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\nuget'
+ ArtifactName: layout_nuget_$(Name)
diff --git a/.azure-pipelines/windows-release/stage-msi.yml b/.azure-pipelines/windows-release/stage-msi.yml
new file mode 100644
index 000000000000..7afc816a0c6e
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-msi.yml
@@ -0,0 +1,36 @@
+jobs:
+- job: Make_MSI
+ displayName: Make MSI
+ condition: and(succeeded(), not(variables['SigningCertificate']))
+
+ pool:
+ vmName: win2016-vs2017
+
+ variables:
+ ReleaseUri: http://www.python.org/{arch}
+ DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
+ Py_OutDir: $(Build.BinariesDirectory)
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: msi-steps.yml
+
+- job: Make_Signed_MSI
+ displayName: Make signed MSI
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ variables:
+ ReleaseUri: http://www.python.org/{arch}
+ DownloadUrl: https://www.python.org/ftp/python/{version}/{arch}{releasename}/{msi}
+ Py_OutDir: $(Build.BinariesDirectory)
+
+ workspace:
+ clean: all
+
+ steps:
+ - template: msi-steps.yml
diff --git a/.azure-pipelines/windows-release/stage-pack-msix.yml b/.azure-pipelines/windows-release/stage-pack-msix.yml
new file mode 100644
index 000000000000..6f1846e581ef
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-pack-msix.yml
@@ -0,0 +1,127 @@
+jobs:
+- job: Pack_MSIX
+ displayName: Pack MSIX bundles
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ Artifact: appx
+ Suffix:
+ ShouldSign: true
+ amd64_store:
+ Name: amd64
+ Artifact: appxstore
+ Suffix: -store
+ Upload: true
+
+ steps:
+ - template: ./checkout.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: layout_$(Artifact)_$(Name)'
+ inputs:
+ artifactName: layout_$(Artifact)_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: symbols'
+ inputs:
+ artifactName: symbols
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $d = (.\PCbuild\build.bat -V) | %{ if($_ -match '\s+(\w+):\s*(.+)\s*$') { @{$Matches[1] = $Matches[2];} }};
+ Write-Host "##vso[task.setvariable variable=VersionText]$($d.PythonVersion)"
+ Write-Host "##vso[task.setvariable variable=VersionNumber]$($d.PythonVersionNumber)"
+ Write-Host "##vso[task.setvariable variable=VersionHex]$($d.PythonVersionHex)"
+ Write-Host "##vso[task.setvariable variable=VersionUnique]$($d.PythonVersionUnique)"
+ Write-Host "##vso[task.setvariable variable=Filename]python-$($d.PythonVersion)-$(Name)$(Suffix)"
+ displayName: 'Extract version numbers'
+
+ - powershell: |
+ ./Tools/msi/make_appx.ps1 -layout "$(Build.BinariesDirectory)\layout_$(Artifact)_$(Name)" -msix "$(Build.ArtifactStagingDirectory)\msix\$(Filename).msix"
+ displayName: 'Build msix'
+
+ - powershell: |
+ 7z a -tzip "$(Build.ArtifactStagingDirectory)\msix\$(Filename).appxsym" *.pdb
+ displayName: 'Build appxsym'
+ workingDirectory: $(Build.BinariesDirectory)\symbols\$(Name)
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIX'
+ condition: and(succeeded(), or(ne(variables['ShouldSign'], 'true'), not(variables['SigningCertificate'])))
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
+ ArtifactName: msix
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIX'
+ condition: and(succeeded(), and(eq(variables['ShouldSign'], 'true'), variables['SigningCertificate']))
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msix'
+ ArtifactName: unsigned_msix
+
+ - powershell: |
+ 7z a -tzip "$(Build.ArtifactStagingDirectory)\msixupload\$(Filename).msixupload" *
+ displayName: 'Build msixupload'
+ condition: and(succeeded(), eq(variables['Upload'], 'true'))
+ workingDirectory: $(Build.ArtifactStagingDirectory)\msix
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIXUpload'
+ condition: and(succeeded(), eq(variables['Upload'], 'true'))
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\msixupload'
+ ArtifactName: msixupload
+
+
+- job: Sign_MSIX
+ displayName: Sign side-loadable MSIX bundles
+ dependsOn:
+ - Pack_MSIX
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+ - template: ./find-sdk.yml
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download Artifact: unsigned_msix'
+ inputs:
+ artifactName: unsigned_msix
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $failed = $true
+ foreach ($retry in 1..3) {
+ signtool sign /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "$(SigningDescription)" (gi *.msix)
+ if ($?) {
+ $failed = $false
+ break
+ }
+ sleep 1
+ }
+ if ($failed) {
+ throw "Failed to sign MSIX"
+ }
+ displayName: 'Sign MSIX'
+ workingDirectory: $(Build.BinariesDirectory)\unsigned_msix
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: MSIX'
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\unsigned_msix'
+ ArtifactName: msix
diff --git a/.azure-pipelines/windows-release/stage-pack-nuget.yml b/.azure-pipelines/windows-release/stage-pack-nuget.yml
new file mode 100644
index 000000000000..5aa394fa48a1
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-pack-nuget.yml
@@ -0,0 +1,41 @@
+jobs:
+- job: Pack_Nuget
+ displayName: Pack Nuget bundles
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ amd64:
+ Name: amd64
+ win32:
+ Name: win32
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: layout_nuget_$(Name)'
+ inputs:
+ artifactName: layout_nuget_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: NugetToolInstaller@0
+ displayName: 'Install Nuget'
+ inputs:
+ versionSpec: '>=5.0'
+
+ - powershell: |
+ nuget pack "$(Build.BinariesDirectory)\layout_nuget_$(Name)\python.nuspec" -OutputDirectory $(Build.ArtifactStagingDirectory) -NoPackageAnalysis -NonInteractive
+ displayName: 'Create nuget package'
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: nuget'
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)'
+ ArtifactName: nuget
diff --git a/.azure-pipelines/windows-release/stage-publish-nugetorg.yml b/.azure-pipelines/windows-release/stage-publish-nugetorg.yml
new file mode 100644
index 000000000000..7586d850f340
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-publish-nugetorg.yml
@@ -0,0 +1,28 @@
+jobs:
+- job: Publish_Nuget
+ displayName: Publish Nuget packages
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: nuget'
+ inputs:
+ artifactName: nuget
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: NuGetCommand@2
+ displayName: Push packages
+ condition: and(succeeded(), eq(variables['SigningCertificate'], 'Python Software Foundation'))
+ inputs:
+ command: push
+ packagesToPush: $(Build.BinariesDirectory)\nuget\*.nupkg'
+ nuGetFeedType: external
+ publishFeedCredentials: 'Python on Nuget'
diff --git a/.azure-pipelines/windows-release/stage-publish-pythonorg.yml b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
new file mode 100644
index 000000000000..2215a56d4bc2
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-publish-pythonorg.yml
@@ -0,0 +1,34 @@
+jobs:
+- job: Publish_Python
+ displayName: Publish python.org packages
+ condition: and(succeeded(), and(eq(variables['DoMSI'], 'true'), eq(variables['DoEmbed'], 'true')))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: Doc'
+ inputs:
+ artifactName: Doc
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: msi'
+ inputs:
+ artifactName: msi
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: embed'
+ inputs:
+ artifactName: embed
+ downloadPath: $(Build.BinariesDirectory)
+
+ # TODO: eq(variables['SigningCertificate'], 'Python Software Foundation')
+ # If we are not real-signed, DO NOT PUBLISH
diff --git a/.azure-pipelines/windows-release/stage-publish-store.yml b/.azure-pipelines/windows-release/stage-publish-store.yml
new file mode 100644
index 000000000000..06884c4f35b7
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-publish-store.yml
@@ -0,0 +1,22 @@
+jobs:
+- job: Publish_Store
+ displayName: Publish Store packages
+ condition: and(succeeded(), eq(variables['DoMSIX'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: msixupload'
+ inputs:
+ artifactName: msixupload
+ downloadPath: $(Build.BinariesDirectory)
+
+ # TODO: eq(variables['SigningCertificate'], 'Python Software Foundation')
+ # If we are not real-signed, DO NOT PUBLISH
diff --git a/.azure-pipelines/windows-release/stage-sign.yml b/.azure-pipelines/windows-release/stage-sign.yml
new file mode 100644
index 000000000000..3d6ca9457f1c
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-sign.yml
@@ -0,0 +1,113 @@
+jobs:
+- job: Sign_Python
+ displayName: Sign Python binaries
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ amd64:
+ Name: amd64
+
+ steps:
+ - checkout: none
+ - template: ./find-sdk.yml
+
+ - powershell: |
+ Write-Host "##vso[build.addbuildtag]signed"
+ displayName: 'Add build tags'
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: unsigned_bin_$(Name)'
+ inputs:
+ artifactName: unsigned_bin_$(Name)
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
+ signtool sign /a /n "$(SigningCertificate)" /fd sha256 /d "$(SigningDescription)" $files
+ displayName: 'Sign binaries'
+ workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+
+ - powershell: |
+ $files = (gi *.exe, *.dll, *.pyd, *.cat -Exclude vcruntime*, libffi*, libcrypto*, libssl*)
+ $failed = $true
+ foreach ($retry in 1..10) {
+ signtool timestamp /t http://timestamp.verisign.com/scripts/timestamp.dll $files
+ if ($?) {
+ $failed = $false
+ break
+ }
+ sleep 5
+ }
+ if ($failed) {
+ Write-Host "##vso[task.logissue type=error]Failed to timestamp files"
+ }
+ displayName: 'Timestamp binaries'
+ workingDirectory: $(Build.BinariesDirectory)\unsigned_bin_$(Name)
+ continueOnError: true
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: bin_$(Name)'
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\unsigned_bin_$(Name)'
+ ArtifactName: bin_$(Name)
+
+
+- job: Dump_CertInfo
+ displayName: Capture certificate info
+ condition: and(succeeded(), variables['SigningCertificate'])
+
+ pool:
+ name: 'Windows Release'
+
+ steps:
+ - checkout: none
+
+ - powershell: |
+ $m = 'CN=$(SigningCertificate)'
+ $c = ((gci Cert:\CurrentUser\My), (gci Cert:\LocalMachine\My)) | %{ $_ } | `
+ ?{ $_.Subject -match $m } | `
+ select -First 1
+ if (-not $c) {
+ Write-Host "Failed to find certificate for $(SigningCertificate)"
+ exit
+ }
+ $d = mkdir "$(Build.BinariesDirectory)\tmp" -Force
+ $cf = "$d\cert.cer"
+ [IO.File]::WriteAllBytes($cf, $c.Export("Cer"))
+ $csha = (certutil -dump $cf | sls "Cert Hash\(sha256\): (.+)").Matches.Groups[1].Value
+
+ $info = @{ Subject=$c.Subject; SHA256=$csha; }
+
+ $d = mkdir "$(Build.BinariesDirectory)\cert" -Force
+ $info | ConvertTo-JSON -Compress | Out-File -Encoding utf8 "$d\certinfo.json"
+ displayName: "Extract certificate info"
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish artifact: cert'
+ inputs:
+ PathtoPublish: '$(Build.BinariesDirectory)\cert'
+ ArtifactName: cert
+
+
+- job: Mark_Unsigned
+ displayName: Tag unsigned build
+ condition: and(succeeded(), not(variables['SigningCertificate']))
+
+ pool:
+ vmName: win2016-vs2017
+
+ steps:
+ - checkout: none
+
+ - powershell: |
+ Write-Host "##vso[build.addbuildtag]unsigned"
+ displayName: 'Add build tag'
diff --git a/.azure-pipelines/windows-release/stage-test-embed.yml b/.azure-pipelines/windows-release/stage-test-embed.yml
new file mode 100644
index 000000000000..ab377fdfa8c9
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-test-embed.yml
@@ -0,0 +1,40 @@
+jobs:
+- job: Test_Embed
+ displayName: Test Embed
+ condition: and(succeeded(), eq(variables['DoEmbed'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Name: win32
+ amd64:
+ Name: amd64
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: embed'
+ inputs:
+ artifactName: embed
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ Expand-Archive -Path "$(Build.BinariesDirectory)\embed\embed-$(Name).zip" -DestinationPath "$(Build.BinariesDirectory)\Python"
+ $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
+ Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
+ displayName: 'Install Python and add to PATH'
+
+ - script: |
+ python -c "import sys; print(sys.version)"
+ displayName: 'Collect version number'
+
+ - script: |
+ python -m site
+ displayName: 'Collect site'
diff --git a/.azure-pipelines/windows-release/stage-test-msi.yml b/.azure-pipelines/windows-release/stage-test-msi.yml
new file mode 100644
index 000000000000..10039295a184
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-test-msi.yml
@@ -0,0 +1,108 @@
+jobs:
+- job: Test_MSI
+ displayName: Test MSI
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32_User:
+ ExeMatch: 'python-[\dabrc.]+-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\win32_User
+ InstallAllUsers: 0
+ win32_Machine:
+ ExeMatch: 'python-[\dabrc.]+-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\win32_Machine
+ InstallAllUsers: 1
+ amd64_User:
+ ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_User
+ InstallAllUsers: 0
+ amd64_Machine:
+ ExeMatch: 'python-[\dabrc.]+-amd64-webinstall\.exe'
+ Logs: $(Build.ArtifactStagingDirectory)\logs\amd64_Machine
+ InstallAllUsers: 1
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: msi'
+ inputs:
+ artifactName: msi
+ downloadPath: $(Build.BinariesDirectory)
+
+ - powershell: |
+ $p = (gci -r *.exe | ?{ $_.Name -match '$(ExeMatch)' } | select -First 1)
+ Write-Host "##vso[task.setvariable variable=SetupExe]$($p.FullName)"
+ Write-Host "##vso[task.setvariable variable=SetupExeName]$($p.Name)"
+ displayName: 'Find installer executable'
+ workingDirectory: $(Build.BinariesDirectory)\msi
+
+ - script: >
+ "$(SetupExe)"
+ /passive
+ /log "$(Logs)\install\log.txt"
+ TargetDir="$(Build.BinariesDirectory)\Python"
+ Include_debug=1
+ Include_symbols=1
+ InstallAllUsers=$(InstallAllUsers)
+ displayName: 'Install Python'
+
+ - powershell: |
+ $p = gi "$(Build.BinariesDirectory)\Python\python.exe"
+ Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
+ displayName: 'Add test Python to PATH'
+
+ - script: |
+ python -c "import sys; print(sys.version)"
+ displayName: 'Collect version number'
+
+ - script: |
+ python -m site
+ displayName: 'Collect site'
+
+ - powershell: |
+ gci -r "${env:PROGRAMDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
+ displayName: 'Capture per-machine Start Menu items'
+ - powershell: |
+ gci -r "${env:APPDATA}\Microsoft\Windows\Start Menu\Programs\Python*"
+ displayName: 'Capture per-user Start Menu items'
+
+ - powershell: |
+ gci -r "HKLM:\Software\WOW6432Node\Python"
+ displayName: 'Capture per-machine 32-bit registry'
+ - powershell: |
+ gci -r "HKLM:\Software\Python"
+ displayName: 'Capture per-machine native registry'
+ - powershell: |
+ gci -r "HKCU:\Software\Python"
+ displayName: 'Capture current-user registry'
+
+ - script: |
+ python -m pip install "azure<0.10"
+ python -m pip uninstall -y azure python-dateutil six
+ displayName: 'Test (un)install package'
+
+ - script: |
+ python -m test -uall -v test_ttk_guionly test_tk test_idle
+ displayName: 'Test Tkinter and Idle'
+
+ - script: >
+ "$(SetupExe)"
+ /passive
+ /uninstall
+ /log "$(Logs)\uninstall\log.txt"
+ displayName: 'Uninstall Python'
+
+ - task: PublishBuildArtifacts@1
+ displayName: 'Publish Artifact: logs'
+ condition: true
+ continueOnError: true
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)\logs'
+ ArtifactName: msi_testlogs
diff --git a/.azure-pipelines/windows-release/stage-test-nuget.yml b/.azure-pipelines/windows-release/stage-test-nuget.yml
new file mode 100644
index 000000000000..1f8b601d0d02
--- /dev/null
+++ b/.azure-pipelines/windows-release/stage-test-nuget.yml
@@ -0,0 +1,58 @@
+jobs:
+- job: Test_Nuget
+ displayName: Test Nuget
+ condition: and(succeeded(), eq(variables['DoNuget'], 'true'))
+
+ pool:
+ vmName: win2016-vs2017
+
+ workspace:
+ clean: all
+
+ strategy:
+ matrix:
+ win32:
+ Package: pythonx86
+ amd64:
+ Package: python
+
+ steps:
+ - checkout: none
+
+ - task: DownloadBuildArtifacts@0
+ displayName: 'Download artifact: nuget'
+ inputs:
+ artifactName: nuget
+ downloadPath: $(Build.BinariesDirectory)
+
+ - task: NugetToolInstaller@0
+ inputs:
+ versionSpec: '>= 5'
+
+ - powershell: >
+ nuget install
+ $(Package)
+ -Source "$(Build.BinariesDirectory)\nuget"
+ -OutputDirectory "$(Build.BinariesDirectory)\install"
+ -Prerelease
+ -ExcludeVersion
+ -NonInteractive
+ displayName: 'Install Python'
+
+ - powershell: |
+ $p = gi "$(Build.BinariesDirectory)\install\$(Package)\tools\python.exe"
+ Write-Host "##vso[task.prependpath]$(Split-Path -Parent $p)"
+ displayName: 'Add test Python to PATH'
+
+ - script: |
+ python -c "import sys; print(sys.version)"
+ displayName: 'Collect version number'
+
+ - script: |
+ python -m site
+ displayName: 'Collect site'
+
+ - script: |
+ python -m pip install "azure<0.10"
+ python -m pip uninstall -y azure python-dateutil six
+ displayName: 'Test (un)install package'
diff --git a/Doc/make.bat b/Doc/make.bat
index e6604956ea91..dfc622f66615 100644
--- a/Doc/make.bat
+++ b/Doc/make.bat
@@ -117,13 +117,13 @@ if not exist "%BUILDDIR%" mkdir "%BUILDDIR%"
rem PY_MISC_NEWS_DIR is also used by our Sphinx extension in tools/extensions/pyspecific.py
if not defined PY_MISC_NEWS_DIR set PY_MISC_NEWS_DIR=%BUILDDIR%\%1
+if not exist "%PY_MISC_NEWS_DIR%" mkdir "%PY_MISC_NEWS_DIR%"
if exist ..\Misc\NEWS (
echo.Copying Misc\NEWS to %PY_MISC_NEWS_DIR%\NEWS
copy ..\Misc\NEWS "%PY_MISC_NEWS_DIR%\NEWS" > nul
) else if exist ..\Misc\NEWS.D (
if defined BLURB (
echo.Merging Misc/NEWS with %BLURB%
- if not exist build mkdir build
%BLURB% merge -f "%PY_MISC_NEWS_DIR%\NEWS"
) else (
echo.No Misc/NEWS file and Blurb is not available.
diff --git a/Tools/msi/exe/crtlicense.txt b/PC/crtlicense.txt
similarity index 100%
rename from Tools/msi/exe/crtlicense.txt
rename to PC/crtlicense.txt
diff --git a/PC/layout/main.py b/PC/layout/main.py
index 624033e721b7..c39aab208d35 100644
--- a/PC/layout/main.py
+++ b/PC/layout/main.py
@@ -31,6 +31,7 @@
from .support.options import *
from .support.pip import *
from .support.props import *
+from .support.nuspec import *
BDIST_WININST_FILES_ONLY = FileNameSet("wininst-*", "bdist_wininst.py")
BDIST_WININST_STUB = "PC/layout/support/distutils.command.bdist_wininst.py"
@@ -66,6 +67,7 @@
TOOLS_DIRS = FileNameSet("scripts", "i18n", "pynche", "demo", "parser")
TOOLS_FILES = FileSuffixSet(".py", ".pyw", ".txt")
+
def copy_if_modified(src, dest):
try:
dest_stat = os.stat(dest)
@@ -73,12 +75,15 @@ def copy_if_modified(src, dest):
do_copy = True
else:
src_stat = os.stat(src)
- do_copy = (src_stat.st_mtime != dest_stat.st_mtime or
- src_stat.st_size != dest_stat.st_size)
+ do_copy = (
+ src_stat.st_mtime != dest_stat.st_mtime
+ or src_stat.st_size != dest_stat.st_size
+ )
if do_copy:
shutil.copy2(src, dest)
+
def get_lib_layout(ns):
def _c(f):
if f in EXCLUDE_FROM_LIB:
@@ -119,7 +124,7 @@ def get_tcltk_lib(ns):
except FileNotFoundError:
pass
if not tcl_lib or not os.path.isdir(tcl_lib):
- warn("Failed to find TCL_LIBRARY")
+ log_warning("Failed to find TCL_LIBRARY")
return
for dest, src in rglob(Path(tcl_lib).parent, "**/*"):
@@ -168,7 +173,7 @@ def in_build(f, dest="", new_name=None):
for dest, src in rglob(ns.build, "vcruntime*.dll"):
yield dest, src
- yield "LICENSE.txt", ns.source / "LICENSE"
+ yield "LICENSE.txt", ns.build / "LICENSE.txt"
for dest, src in rglob(ns.build, ("*.pyd", "*.dll")):
if src.stem.endswith("_d") != bool(ns.debug) and src not in REQUIRED_DLLS:
@@ -222,15 +227,12 @@ def _c(d):
yield dest, src
if ns.include_pip:
- pip_dir = get_pip_dir(ns)
- if not pip_dir.is_dir():
- log_warning("Failed to find {} - pip will not be included", pip_dir)
- else:
- pkg_root = "packages/{}" if ns.zip_lib else "Lib/site-packages/{}"
- for dest, src in rglob(pip_dir, "**/*"):
- if src in EXCLUDE_FROM_LIB or src in EXCLUDE_FROM_PACKAGED_LIB:
- continue
- yield pkg_root.format(dest), src
+ for dest, src in get_pip_layout(ns):
+ if isinstance(src, tuple) or not (
+ src in EXCLUDE_FROM_LIB or src in EXCLUDE_FROM_PACKAGED_LIB
+ ):
+ continue
+ yield dest, src
if ns.include_chm:
for dest, src in rglob(ns.doc_build / "htmlhelp", PYTHON_CHM_NAME):
@@ -244,6 +246,10 @@ def _c(d):
for dest, src in get_props_layout(ns):
yield dest, src
+ if ns.include_nuspec:
+ for dest, src in get_nuspec_layout(ns):
+ yield dest, src
+
for dest, src in get_appx_layout(ns):
yield dest, src
@@ -287,7 +293,9 @@ def _py_temp_compile(src, ns, dest_dir=None, checked=True):
return None
dest = (dest_dir or ns.temp) / (src.stem + ".py")
- return _compile_one_py(src, dest.with_suffix(".pyc"), dest, optimize=2, checked=checked)
+ return _compile_one_py(
+ src, dest.with_suffix(".pyc"), dest, optimize=2, checked=checked
+ )
def _write_to_zip(zf, dest, src, ns, checked=True):
@@ -361,28 +369,9 @@ def generate_source_files(ns):
print("# Uncomment to run site.main() automatically", file=f)
print("#import site", file=f)
- if ns.include_appxmanifest:
- log_info("Generating AppxManifest.xml in {}", ns.temp)
- ns.temp.mkdir(parents=True, exist_ok=True)
-
- with open(ns.temp / "AppxManifest.xml", "wb") as f:
- f.write(get_appxmanifest(ns))
-
- with open(ns.temp / "_resources.xml", "wb") as f:
- f.write(get_resources_xml(ns))
-
if ns.include_pip:
- pip_dir = get_pip_dir(ns)
- if not (pip_dir / "pip").is_dir():
- log_info("Extracting pip to {}", pip_dir)
- pip_dir.mkdir(parents=True, exist_ok=True)
- extract_pip_files(ns)
-
- if ns.include_props:
- log_info("Generating {} in {}", PYTHON_PROPS_NAME, ns.temp)
- ns.temp.mkdir(parents=True, exist_ok=True)
- with open(ns.temp / PYTHON_PROPS_NAME, "wb") as f:
- f.write(get_props(ns))
+ log_info("Extracting pip")
+ extract_pip_files(ns)
def _create_zip_file(ns):
@@ -427,6 +416,18 @@ def copy_files(files, ns):
log_info("Processed {} files", count)
log_debug("Processing {!s}", src)
+ if isinstance(src, tuple):
+ src, content = src
+ if ns.copy:
+ log_debug("Copy {} -> {}", src, ns.copy / dest)
+ (ns.copy / dest).parent.mkdir(parents=True, exist_ok=True)
+ with open(ns.copy / dest, "wb") as f:
+ f.write(content)
+ if ns.zip:
+ log_debug("Zip {} into {}", src, ns.zip)
+ zip_file.writestr(str(dest), content)
+ continue
+
if (
ns.precompile
and src in PY_FILES
diff --git a/PC/layout/support/appxmanifest.py b/PC/layout/support/appxmanifest.py
index 49a35fa1f046..58fba8443f17 100644
--- a/PC/layout/support/appxmanifest.py
+++ b/PC/layout/support/appxmanifest.py
@@ -17,12 +17,7 @@
from .constants import *
-__all__ = []
-
-
-def public(f):
- __all__.append(f.__name__)
- return f
+__all__ = ["get_appx_layout"]
APPX_DATA = dict(
@@ -166,9 +161,7 @@ def public(f):
"Help": {
"Main Python Documentation": {
"_condition": lambda ns: ns.include_chm,
- "": "[{{AppVPackageRoot}}]\\Doc\\{}".format(
- PYTHON_CHM_NAME
- ),
+ "": "[{{AppVPackageRoot}}]\\Doc\\{}".format(PYTHON_CHM_NAME),
},
"Local Python Documentation": {
"_condition": lambda ns: ns.include_html_doc,
@@ -239,31 +232,6 @@ def _fixup_sccd(ns, sccd, new_hash=None):
return sccd
-@public
-def get_appx_layout(ns):
- if not ns.include_appxmanifest:
- return
-
- yield "AppxManifest.xml", ns.temp / "AppxManifest.xml"
- yield "_resources.xml", ns.temp / "_resources.xml"
- icons = ns.source / "PC" / "icons"
- yield "_resources/pythonx44.png", icons / "pythonx44.png"
- yield "_resources/pythonx44$targetsize-44_altform-unplated.png", icons / "pythonx44.png"
- yield "_resources/pythonx50.png", icons / "pythonx50.png"
- yield "_resources/pythonx50$targetsize-50_altform-unplated.png", icons / "pythonx50.png"
- yield "_resources/pythonx150.png", icons / "pythonx150.png"
- yield "_resources/pythonx150$targetsize-150_altform-unplated.png", icons / "pythonx150.png"
- yield "_resources/pythonwx44.png", icons / "pythonwx44.png"
- yield "_resources/pythonwx44$targetsize-44_altform-unplated.png", icons / "pythonwx44.png"
- yield "_resources/pythonwx150.png", icons / "pythonwx150.png"
- yield "_resources/pythonwx150$targetsize-150_altform-unplated.png", icons / "pythonwx150.png"
- sccd = ns.source / SCCD_FILENAME
- if sccd.is_file():
- # This should only be set for side-loading purposes.
- sccd = _fixup_sccd(ns, sccd, os.getenv("APPX_DATA_SHA256"))
- yield sccd.name, sccd
-
-
def find_or_add(xml, element, attr=None, always_add=False):
if always_add:
e = None
@@ -393,7 +361,6 @@ def disable_registry_virtualization(xml):
e = find_or_add(e, "rescap:Capability", ("Name", "unvirtualizedResources"))
-@public
def get_appxmanifest(ns):
for k, v in APPXMANIFEST_NS.items():
ET.register_namespace(k, v)
@@ -481,6 +448,29 @@ def get_appxmanifest(ns):
return buffer.getbuffer()
-@public
def get_resources_xml(ns):
return RESOURCES_XML_TEMPLATE.encode("utf-8")
+
+
+def get_appx_layout(ns):
+ if not ns.include_appxmanifest:
+ return
+
+ yield "AppxManifest.xml", ("AppxManifest.xml", get_appxmanifest(ns))
+ yield "_resources.xml", ("_resources.xml", get_resources_xml(ns))
+ icons = ns.source / "PC" / "icons"
+ yield "_resources/pythonx44.png", icons / "pythonx44.png"
+ yield "_resources/pythonx44$targetsize-44_altform-unplated.png", icons / "pythonx44.png"
+ yield "_resources/pythonx50.png", icons / "pythonx50.png"
+ yield "_resources/pythonx50$targetsize-50_altform-unplated.png", icons / "pythonx50.png"
+ yield "_resources/pythonx150.png", icons / "pythonx150.png"
+ yield "_resources/pythonx150$targetsize-150_altform-unplated.png", icons / "pythonx150.png"
+ yield "_resources/pythonwx44.png", icons / "pythonwx44.png"
+ yield "_resources/pythonwx44$targetsize-44_altform-unplated.png", icons / "pythonwx44.png"
+ yield "_resources/pythonwx150.png", icons / "pythonwx150.png"
+ yield "_resources/pythonwx150$targetsize-150_altform-unplated.png", icons / "pythonwx150.png"
+ sccd = ns.source / SCCD_FILENAME
+ if sccd.is_file():
+ # This should only be set for side-loading purposes.
+ sccd = _fixup_sccd(ns, sccd, os.getenv("APPX_DATA_SHA256"))
+ yield sccd.name, sccd
diff --git a/PC/layout/support/nuspec.py b/PC/layout/support/nuspec.py
new file mode 100644
index 000000000000..ba26ff337e91
--- /dev/null
+++ b/PC/layout/support/nuspec.py
@@ -0,0 +1,66 @@
+"""
+Provides .props file.
+"""
+
+import os
+
+from .constants import *
+
+__all__ = ["get_nuspec_layout"]
+
+PYTHON_NUSPEC_NAME = "python.nuspec"
+
+NUSPEC_DATA = {
+ "PYTHON_TAG": VER_DOT,
+ "PYTHON_VERSION": os.getenv("PYTHON_NUSPEC_VERSION"),
+ "PYTHON_BITNESS": "64-bit" if IS_X64 else "32-bit",
+ "PACKAGENAME": os.getenv("PYTHON_NUSPEC_PACKAGENAME"),
+ "PACKAGETITLE": os.getenv("PYTHON_NUSPEC_PACKAGETITLE"),
+ "FILELIST": r' <file src="**\*" target="tools" />',
+}
+
+if not NUSPEC_DATA["PYTHON_VERSION"]:
+ if VER_NAME:
+ NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}-{}{}".format(
+ VER_DOT, VER_MICRO, VER_NAME, VER_SERIAL
+ )
+ else:
+ NUSPEC_DATA["PYTHON_VERSION"] = "{}.{}".format(VER_DOT, VER_MICRO)
+
+if not NUSPEC_DATA["PACKAGETITLE"]:
+ NUSPEC_DATA["PACKAGETITLE"] = "Python" if IS_X64 else "Python (32-bit)"
+
+if not NUSPEC_DATA["PACKAGENAME"]:
+ NUSPEC_DATA["PACKAGENAME"] = "python" if IS_X64 else "pythonx86"
+
+FILELIST_WITH_PROPS = r""" <file src="**\*" exclude="python.props" target="tools" />
+ <file src="python.props" target="build\native" />"""
+
+NUSPEC_TEMPLATE = r"""<?xml version="1.0"?>
+<package>
+ <metadata>
+ <id>{PACKAGENAME}</id>
+ <title>{PACKAGETITLE}</title>
+ <version>{PYTHON_VERSION}</version>
+ <authors>Python Software Foundation</authors>
+ <license type="file">tools\LICENSE.txt</license>
+ <projectUrl>https://www.python.org/</projectUrl>
+ <description>Installs {PYTHON_BITNESS} Python for use in build scenarios.</description>
+ <iconUrl>https://www.python.org/static/favicon.ico</iconUrl>
+ <tags>python</tags>
+ </metadata>
+ <files>
+{FILELIST}
+ </files>
+</package>
+"""
+
+
+def get_nuspec_layout(ns):
+ if ns.include_all or ns.include_nuspec:
+ data = NUSPEC_DATA
+ if ns.include_all or ns.include_props:
+ data = dict(data)
+ data["FILELIST"] = FILELIST_WITH_PROPS
+ nuspec = NUSPEC_TEMPLATE.format_map(data)
+ yield "python.nuspec", ("python.nuspec", nuspec.encode("utf-8"))
diff --git a/PC/layout/support/options.py b/PC/layout/support/options.py
index 00f05667ebb7..c8ae4e30a8c4 100644
--- a/PC/layout/support/options.py
+++ b/PC/layout/support/options.py
@@ -30,6 +30,7 @@ def public(f):
"launchers": {"help": "specific launchers"},
"appxmanifest": {"help": "an appxmanifest"},
"props": {"help": "a python.props file"},
+ "nuspec": {"help": "a python.nuspec file"},
"chm": {"help": "the CHM documentation"},
"html-doc": {"help": "the HTML documentation"},
}
@@ -60,13 +61,11 @@ def public(f):
"stable",
"distutils",
"venv",
- "props"
+ "props",
+ "nuspec",
],
},
- "iot": {
- "help": "Windows IoT Core",
- "options": ["stable", "pip"],
- },
+ "iot": {"help": "Windows IoT Core", "options": ["stable", "pip"]},
"default": {
"help": "development kit package",
"options": [
diff --git a/PC/layout/support/pip.py b/PC/layout/support/pip.py
index 369a923ce139..eada456655ec 100644
--- a/PC/layout/support/pip.py
+++ b/PC/layout/support/pip.py
@@ -11,15 +11,11 @@
import subprocess
import sys
-__all__ = []
+from .filesets import *
+__all__ = ["extract_pip_files", "get_pip_layout"]
-def public(f):
- __all__.append(f.__name__)
- return f
-
-@public
def get_pip_dir(ns):
if ns.copy:
if ns.zip_lib:
@@ -29,10 +25,23 @@ def get_pip_dir(ns):
return ns.temp / "packages"
-@public
+def get_pip_layout(ns):
+ pip_dir = get_pip_dir(ns)
+ if not pip_dir.is_dir():
+ log_warning("Failed to find {} - pip will not be included", pip_dir)
+ else:
+ pkg_root = "packages/{}" if ns.zip_lib else "Lib/site-packages/{}"
+ for dest, src in rglob(pip_dir, "**/*"):
+ yield pkg_root.format(dest), src
+ yield "pip.ini", ("pip.ini", b"[global]\nuser=yes")
+
+
def extract_pip_files(ns):
dest = get_pip_dir(ns)
- dest.mkdir(parents=True, exist_ok=True)
+ try:
+ dest.mkdir(parents=True, exist_ok=False)
+ except IOError:
+ return
src = ns.source / "Lib" / "ensurepip" / "_bundled"
@@ -58,6 +67,7 @@ def extract_pip_files(ns):
"--target",
str(dest),
"--no-index",
+ "--no-compile",
"--no-cache-dir",
"-f",
str(src),
diff --git a/PC/layout/support/props.py b/PC/layout/support/props.py
index 3a047d215058..4d3b06195f6e 100644
--- a/PC/layout/support/props.py
+++ b/PC/layout/support/props.py
@@ -6,13 +6,7 @@
from .constants import *
-__all__ = ["PYTHON_PROPS_NAME"]
-
-
-def public(f):
- __all__.append(f.__name__)
- return f
-
+__all__ = ["get_props_layout"]
PYTHON_PROPS_NAME = "python.props"
@@ -97,14 +91,8 @@ def public(f):
"""
-@public
def get_props_layout(ns):
if ns.include_all or ns.include_props:
- yield "python.props", ns.temp / "python.props"
-
-
-@public
-def get_props(ns):
- # TODO: Filter contents of props file according to included/excluded items
- props = PROPS_TEMPLATE.format_map(PROPS_DATA)
- return props.encode("utf-8")
+ # TODO: Filter contents of props file according to included/excluded items
+ props = PROPS_TEMPLATE.format_map(PROPS_DATA)
+ yield "python.props", ("python.props", props.encode("utf-8"))
diff --git a/PC/python_uwp.cpp b/PC/python_uwp.cpp
index 5c8caa6666c4..dd1edde73092 100644
--- a/PC/python_uwp.cpp
+++ b/PC/python_uwp.cpp
@@ -182,9 +182,9 @@ wmain(int argc, wchar_t **argv)
if (*p++ == L'\\') {
if (wcsnicmp(p, L"pip", 3) == 0) {
moduleName = L"pip";
+ /* No longer required when pip 19.1 is added */
_wputenv_s(L"PIP_USER", L"true");
- }
- else if (wcsnicmp(p, L"idle", 4) == 0) {
+ } else if (wcsnicmp(p, L"idle", 4) == 0) {
moduleName = L"idlelib";
}
}
diff --git a/PCbuild/_tkinter.vcxproj b/PCbuild/_tkinter.vcxproj
index fdfa59648aa9..af813b77c1d1 100644
--- a/PCbuild/_tkinter.vcxproj
+++ b/PCbuild/_tkinter.vcxproj
@@ -122,7 +122,7 @@
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
<Target Name="_CopyTclTkDLL" Inputs="@(_TclTkDLL)" Outputs="@(_TclTkDLL->'$(OutDir)%(Filename)%(Extension)')" AfterTargets="Build">
- <Copy SourceFiles="@(_TclTkDLL)" DestinationFolder="$(OutDir)" />
+ <Copy SourceFiles="@(_TclTkDLL)" DestinationFolder="$(OutDir)" UseHardlinksIfPossible="true" />
</Target>
<Target Name="_CleanTclTkDLL" BeforeTargets="Clean">
<Delete Files="@(_TclTkDLL->'$(OutDir)%(Filename)%(Extension)')" />
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index 6f0c85e4a45a..bce599329e73 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -76,7 +76,7 @@ if "%~1"=="-k" (set kill=true) & shift & goto CheckOpts
if "%~1"=="--pgo" (set do_pgo=true) & shift & goto CheckOpts
if "%~1"=="--pgo-job" (set do_pgo=true) & (set pgo_job=%~2) & shift & shift & goto CheckOpts
if "%~1"=="--test-marker" (set UseTestMarker=true) & shift & goto CheckOpts
-if "%~1"=="-V" shift & goto Version
+if "%~1"=="-V" shift & goto :Version
rem These use the actual property names used by MSBuild. We could just let
rem them in through the environment, but we specify them on the command line
rem anyway for visibility so set defaults after this
@@ -111,10 +111,16 @@ call "%dir%find_msbuild.bat" %MSBUILD%
if ERRORLEVEL 1 (echo Cannot locate MSBuild.exe on PATH or as MSBUILD variable & exit /b 2)
if "%kill%"=="true" call :Kill
+if ERRORLEVEL 1 exit /B 3
if "%do_pgo%"=="true" (
set conf=PGInstrument
call :Build %1 %2 %3 %4 %5 %6 %7 %8 %9
+)
+rem %VARS% are evaluated eagerly, which would lose the ERRORLEVEL
+rem value if we didn't split it out here.
+if "%do_pgo%"=="true" if ERRORLEVEL 1 exit /B %ERRORLEVEL%
+if "%do_pgo%"=="true" (
del /s "%dir%\*.pgc"
del /s "%dir%\..\Lib\*.pyc"
echo on
@@ -124,7 +130,8 @@ if "%do_pgo%"=="true" (
set conf=PGUpdate
set target=Build
)
-goto Build
+goto :Build
+
:Kill
echo on
%MSBUILD% "%dir%\pythoncore.vcxproj" /t:KillPython %verbose%^
@@ -132,7 +139,7 @@ echo on
/p:KillPython=true
@echo off
-goto :eof
+exit /B %ERRORLEVEL%
:Build
rem Call on MSBuild to do the work, echo the command.
@@ -148,9 +155,11 @@ echo on
%1 %2 %3 %4 %5 %6 %7 %8 %9
@echo off
-goto :eof
+exit /b %ERRORLEVEL%
:Version
rem Display the current build version information
call "%dir%find_msbuild.bat" %MSBUILD%
-if not ERRORLEVEL 1 %MSBUILD% "%dir%pythoncore.vcxproj" /t:ShowVersionInfo /v:m /nologo %1 %2 %3 %4 %5 %6 %7 %8 %9
+if ERRORLEVEL 1 (echo Cannot locate MSBuild.exe on PATH or as MSBUILD variable & exit /b 2)
+%MSBUILD% "%dir%pythoncore.vcxproj" /t:ShowVersionInfo /v:m /nologo %1 %2 %3 %4 %5 %6 %7 %8 %9
+if ERRORLEVEL 1 exit /b 3
\ No newline at end of file
diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props
index 12f07dd51287..7c0f50be9ea8 100644
--- a/PCbuild/pyproject.props
+++ b/PCbuild/pyproject.props
@@ -1,6 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" TreatAsLocalProperty="Py_IntDir">
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" TreatAsLocalProperty="Py_IntDir">
+ <Import Project="python.props" Condition="$(__Python_Props_Imported) != 'true'" />
<PropertyGroup Label="Globals">
+ <__PyProject_Props_Imported>true</__PyProject_Props_Imported>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<OutDir>$(BuildPath)</OutDir>
@@ -29,7 +31,7 @@
<ClCompile>
<AdditionalIncludeDirectories>$(PySourcePath)Include;$(PySourcePath)Include\internal;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions)</PreprocessorDefinitions>
-
+
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<StringPooling>true</StringPooling>
@@ -147,15 +149,15 @@ public override bool Execute() {
</Code>
</Task>
</UsingTask>
-
+
<Target Name="KillPython" BeforeTargets="PrepareForBuild" Condition="'$(KillPython)' == 'true'">
<Message Text="Killing any running python$(PyDebugExt)$(PyTestExt).exe instances..." Importance="high" />
<KillPython FileName="$(OutDir)python$(PyDebugExt)$(PyTestExt).exe" />
</Target>
-
+
<!--
A default target to handle msbuild pcbuild.proj /t:CleanAll.
-
+
Some externals projects don't respond to /t:Clean, so we invoke
CleanAll on them when we really want to clean up.
-->
@@ -189,8 +191,8 @@ public override bool Execute() {
<SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot81)\bin\x86</SdkBinPath>
<SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows Kits\Installed Roots@KitsRoot)\bin\x86</SdkBinPath>
<SdkBinPath Condition="!Exists($(SdkBinPath))">$(registry:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows\v7.1A@InstallationFolder)\Bin\</SdkBinPath>
- <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /q /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
- <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificateSha1)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /q /a /sha1 "$(SigningCertificateSha1)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
+ <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificate)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /n "$(SigningCertificate)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
+ <_SignCommand Condition="Exists($(SdkBinPath)) and '$(SigningCertificateSha1)' != '' and $(SupportSigning)">"$(SdkBinPath)\signtool.exe" sign /a /sha1 "$(SigningCertificateSha1)" /fd sha256 /t http://timestamp.verisign.com/scripts/timestamp.dll /d "Python $(PythonVersion)"</_SignCommand>
<_MakeCatCommand Condition="Exists($(SdkBinPath))">"$(SdkBinPath)\makecat.exe"</_MakeCatCommand>
</PropertyGroup>
diff --git a/PCbuild/python.props b/PCbuild/python.props
index e6642fc4818a..b13837d394b1 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
+ <__Python_Props_Imported>true</__Python_Props_Imported>
<Platform Condition="'$(Platform)' == ''">Win32</Platform>
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
<!--
@@ -215,6 +216,7 @@
<Message Importance="high" Text="PythonVersionNumber: $(PythonVersionNumber)" />
<Message Importance="high" Text="PythonVersion: $(PythonVersion)" />
<Message Importance="high" Text="PythonVersionHex: 0x$([System.UInt32]::Parse($(PythonVersionHex)).ToString(`X08`))" />
+ <Message Importance="high" Text="PythonVersionUnique: $(MajorVersionNumber).$(MinorVersionNumber).$(Field3Value)" />
<Message Importance="high" Text="Field3Value: $(Field3Value)" />
<Message Importance="high" Text="SysWinVer: $(SysWinVer)" />
<Message Importance="high" Text="PyDllName: $(PyDllName)" />
diff --git a/PCbuild/python.vcxproj b/PCbuild/python.vcxproj
index bd051461e9cd..fdf8f12037aa 100644
--- a/PCbuild/python.vcxproj
+++ b/PCbuild/python.vcxproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|ARM">
@@ -82,6 +82,7 @@
<ImportGroup Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="pyproject.props" />
+ <Import Project="tcltk.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
@@ -144,4 +145,22 @@ $(_PGOPath)
</PropertyGroup>
<WriteLinesToFile File="$(PySourcePath)python.bat" Lines="$(_Content)" Overwrite="true" Condition="'$(_Content)' != '$(_ExistingContent)'" />
</Target>
+ <Target Name="GenerateLicense" AfterTargets="AfterBuild">
+ <ItemGroup>
+ <LicenseFiles Include="$(PySourcePath)LICENSE;
+ $(PySourcePath)PC\crtlicense.txt;
+ $(bz2Dir)LICENSE;
+ $(opensslOutDir)LICENSE;
+ $(tcltkDir)tcllicense.terms;
+ $(tcltkDir)tklicense.terms;
+ $(tcltkDir)tixlicense.terms" />
+ <_LicenseFiles Include="@(LicenseFiles)">
+ <Content>$([System.IO.File]::ReadAllText(%(FullPath)))</Content>
+ </_LicenseFiles>
+ </ItemGroup>
+
+ <WriteLinesToFile File="$(OutDir)LICENSE.txt"
+ Overwrite="true"
+ Lines="@(_LicenseFiles->'%(Content)')" />
+ </Target>
</Project>
diff --git a/PCbuild/tcltk.props b/PCbuild/tcltk.props
index b185cb7b1e28..7fcd3e1c618c 100644
--- a/PCbuild/tcltk.props
+++ b/PCbuild/tcltk.props
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
- <Import Project="pyproject.props" />
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <Import Project="pyproject.props" Condition="$(__PyProject_Props_Imported) != 'true'" />
<PropertyGroup>
<TclMajorVersion>8</TclMajorVersion>
<TclMinorVersion>6</TclMinorVersion>
@@ -42,4 +42,19 @@
<BuildDirTop Condition="$(PlatformToolset) == 'v110'">$(BuildDirTop)_VC11</BuildDirTop>
<BuildDirTop Condition="$(PlatformToolset) == 'v100'">$(BuildDirTop)_VC10</BuildDirTop>
</PropertyGroup>
+
+ <!--
+ Helper target for copying the lib to a specific directory.
+
+ Using "msbuild tcltk.props /t:CopyTclTkLib /p:OutDir=..." is generally
+ easier than trying to extract the value of $(tcltkdir).
+ -->
+ <Target Name="CopyTclTkLib">
+ <ItemGroup>
+ <_TclTkLib Include="$(tcltkdir)\lib\**\*" />
+ </ItemGroup>
+ <Copy SourceFiles="@(_TclTkLib)"
+ DestinationFiles="$(OutDir)\%(RecursiveDir)\%(Filename)%(Extension)"
+ UseHardlinksIfPossible="true" />
+ </Target>
</Project>
diff --git a/Tools/msi/buildrelease.bat b/Tools/msi/buildrelease.bat
index 45e189b537f6..b72eedecb23c 100644
--- a/Tools/msi/buildrelease.bat
+++ b/Tools/msi/buildrelease.bat
@@ -29,7 +29,7 @@ set DOWNLOAD_URL=https://www.python.org/ftp/python/{version}/{arch}{releasename}
set D=%~dp0
set PCBUILD=%D%..\..\PCbuild\
-if "%Py_OutDir%"=="" set Py_OutDir=%PCBUILD%
+if NOT DEFINED Py_OutDir set Py_OutDir=%PCBUILD%
set EXTERNALS=%D%..\..\externals\windows-installer\
set BUILDX86=
diff --git a/Tools/msi/exe/exe.wixproj b/Tools/msi/exe/exe.wixproj
index 071501ce6e6f..326766bf2d47 100644
--- a/Tools/msi/exe/exe.wixproj
+++ b/Tools/msi/exe/exe.wixproj
@@ -21,25 +21,6 @@
<WxlTemplate Include="*.wxl_template" />
</ItemGroup>
- <Target Name="_GenerateLicense" AfterTargets="PrepareForBuild">
- <ItemGroup>
- <LicenseFiles Include="$(PySourcePath)LICENSE;
- crtlicense.txt;
- $(bz2Dir)LICENSE;
- $(opensslOutDir)LICENSE;
- $(tcltkDir)tcllicense.terms;
- $(tcltkDir)tklicense.terms;
- $(tcltkDir)tixlicense.terms" />
- <_LicenseFiles Include="@(LicenseFiles)">
- <Content>$([System.IO.File]::ReadAllText(%(FullPath)))</Content>
- </_LicenseFiles>
- </ItemGroup>
-
- <WriteLinesToFile File="$(BuildPath)LICENSE"
- Overwrite="true"
- Lines="@(_LicenseFiles->'%(Content)')" />
- </Target>
-
<Target Name="_CopyMiscNews" AfterTargets="PrepareForBuild" Condition="Exists('$(PySourcePath)Misc\NEWS')">
<Copy SourceFiles="$(PySourcePath)Misc\NEWS" DestinationFiles="$(BuildPath)NEWS.txt" />
</Target>
diff --git a/Tools/msi/exe/exe_files.wxs b/Tools/msi/exe/exe_files.wxs
index 394b4de47354..483d06c65b2e 100644
--- a/Tools/msi/exe/exe_files.wxs
+++ b/Tools/msi/exe/exe_files.wxs
@@ -3,7 +3,7 @@
<Fragment>
<ComponentGroup Id="exe_txt">
<Component Id="LICENSE.txt" Directory="InstallDirectory" Guid="*">
- <File Name="LICENSE.txt" Source="LICENSE" KeyPath="yes" />
+ <File Name="LICENSE.txt" Source="LICENSE.txt" KeyPath="yes" />
</Component>
<Component Id="NEWS.txt" Directory="InstallDirectory" Guid="*">
<File Name="NEWS.txt" KeyPath="yes" />
diff --git a/Tools/msi/make_cat.ps1 b/Tools/msi/make_cat.ps1
index cc3cd4a2b50c..9ea3ddd49571 100644
--- a/Tools/msi/make_cat.ps1
+++ b/Tools/msi/make_cat.ps1
@@ -7,6 +7,8 @@
The path to the catalog definition file to compile and
sign. It is assumed that the .cat file will be the same
name with a new extension.
+.Parameter outfile
+ The path to move the built .cat file to (optional).
.Parameter description
The description to add to the signature (optional).
.Parameter certname
@@ -16,6 +18,7 @@
#>
param(
[Parameter(Mandatory=$true)][string]$catalog,
+ [string]$outfile,
[switch]$sign,
[string]$description,
[string]$certname,
@@ -35,3 +38,8 @@ if (-not $?) {
if ($sign) {
Sign-File -certname $certname -certsha1 $certsha1 -certfile $certfile -description $description -files @($catalog -replace 'cdf$', 'cat')
}
+
+if ($outfile) {
+ Split-Path -Parent $outfile | ?{ $_ } | %{ mkdir -Force $_; }
+ Move-Item ($catalog -replace 'cdf$', 'cat') $outfile
+}
diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props
index 5da901c0215a..3f14501446a1 100644
--- a/Tools/msi/msi.props
+++ b/Tools/msi/msi.props
@@ -56,6 +56,7 @@
<ReuseCabinetCache>true</ReuseCabinetCache>
<CRTRedist Condition="'$(CRTRedist)' == ''">$(ExternalsDir)\windows-installer\redist-1\$(Platform)</CRTRedist>
<CRTRedist>$([System.IO.Path]::GetFullPath($(CRTRedist)))</CRTRedist>
+ <TclTkLibraryDir Condition="$(TclTkLibraryDir) == ''">$(tcltkDir)lib</TclTkLibraryDir>
<DocFilename>python$(MajorVersionNumber)$(MinorVersionNumber)$(MicroVersionNumber)$(ReleaseLevelName).chm</DocFilename>
<InstallerVersion>$(MajorVersionNumber).$(MinorVersionNumber).$(Field3Value).0</InstallerVersion>
@@ -121,7 +122,7 @@
<LinkerBindInputPaths Include="$(PySourcePath)">
<BindName>src</BindName>
</LinkerBindInputPaths>
- <LinkerBindInputPaths Include="$(tcltkDir)">
+ <LinkerBindInputPaths Include="$(TclTkLibraryDir)">
<BindName>tcltk</BindName>
</LinkerBindInputPaths>
<LinkerBindInputPaths Include="$(CRTRedist)">
diff --git a/Tools/msi/msi.targets b/Tools/msi/msi.targets
index 9283a1ed6c30..4788a637a5d2 100644
--- a/Tools/msi/msi.targets
+++ b/Tools/msi/msi.targets
@@ -47,7 +47,7 @@ EncodingType=
<WriteLinesToFile File="$(_CatFileSourceTarget)" Lines="$(_CatFile)" Overwrite="true" />
<Exec Command='$(_MakeCatCommand) "$(_CatFileSourceTarget)"' WorkingDirectory="$(MSBuildThisFileDirectory)" />
- <Exec Command='$(_SignCommand) "$(_CatFileTarget)"' WorkingDirectory="$(MSBuildThisFileDirectory)"
+ <Exec Command='$(_SignCommand) "$(_CatFileTarget)" || $(_SignCommand) "$(_CatFileTarget)" || $(_SignCommand) "$(_CatFileTarget)"' WorkingDirectory="$(MSBuildThisFileDirectory)"
Condition="Exists($(_CatFileTarget)) and '$(_SignCommand)' != ''" />
<ItemGroup>
@@ -76,18 +76,18 @@ EncodingType=
<Target Name="SignCabs">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignCabs->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignCabs->'"%(FullPath)"',' ') || $(_SignCommand) @(SignCabs->'"%(FullPath)"',' ') || $(_SignCommand) @(SignCabs->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
<Target Name="SignMsi">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignMsi->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignMsi->'"%(FullPath)"',' ') || $(_SignCommand) @(SignMsi->'"%(FullPath)"',' ') || $(_SignCommand) @(SignMsi->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
<Target Name="SignBundleEngine">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundleEngine->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
<Target Name="SignBundle">
<Error Text="Unable to locate signtool.exe. Set /p:SignToolPath and rebuild" Condition="'$(_SignCommand)' == ''" />
- <Exec Command="$(_SignCommand) @(SignBundle->'"%(FullPath)"',' ')" ContinueOnError="false" />
+ <Exec Command="$(_SignCommand) @(SignBundle->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundle->'"%(FullPath)"',' ') || $(_SignCommand) @(SignBundle->'"%(FullPath)"',' ')" ContinueOnError="false" />
</Target>
</Project>
\ No newline at end of file
diff --git a/Tools/msi/sign_build.ps1 b/Tools/msi/sign_build.ps1
index 6668eb33a2d1..d3f750454f52 100644
--- a/Tools/msi/sign_build.ps1
+++ b/Tools/msi/sign_build.ps1
@@ -16,7 +16,7 @@
#>
param(
[Parameter(Mandatory=$true)][string]$root,
- [string[]]$patterns=@("*.exe", "*.dll", "*.pyd"),
+ [string[]]$patterns=@("*.exe", "*.dll", "*.pyd", "*.cat"),
[string]$description,
[string]$certname,
[string]$certsha1,
diff --git a/Tools/msi/tcltk/tcltk.wixproj b/Tools/msi/tcltk/tcltk.wixproj
index fae353f5f50a..218f3d15ec88 100644
--- a/Tools/msi/tcltk/tcltk.wixproj
+++ b/Tools/msi/tcltk/tcltk.wixproj
@@ -20,10 +20,10 @@
<WxlTemplate Include="*.wxl_template" />
</ItemGroup>
<ItemGroup>
- <InstallFiles Include="$(tcltkDir)lib\**\*">
- <SourceBase>$(tcltkDir)</SourceBase>
+ <InstallFiles Include="$(TclTkLibraryDir)\**\*">
+ <SourceBase>$(TclTkLibraryDir)</SourceBase>
<Source>!(bindpath.tcltk)</Source>
- <TargetBase>$(tcltkDir)lib</TargetBase>
+ <TargetBase>$(TclTkLibraryDir)</TargetBase>
<Target_>tcl\</Target_>
<Group>tcltk_lib</Group>
</InstallFiles>
diff --git a/Tools/msi/uploadrelease.ps1 b/Tools/msi/uploadrelease.ps1
index 491df80be1e9..b6fbeea29810 100644
--- a/Tools/msi/uploadrelease.ps1
+++ b/Tools/msi/uploadrelease.ps1
@@ -15,6 +15,10 @@
The subdirectory on the host to copy files to.
.Parameter tests
The path to run download tests in.
+.Parameter doc_htmlhelp
+ Optional path besides -build to locate CHM files.
+.Parameter embed
+ Optional path besides -build to locate ZIP files.
.Parameter skipupload
Skip uploading
.Parameter skippurge
@@ -30,6 +34,8 @@ param(
[string]$server="python-downloads",
[string]$target="/srv/www.python.org/ftp/python",
[string]$tests=${env:TEMP},
+ [string]$doc_htmlhelp=$null,
+ [string]$embed=$null,
[switch]$skipupload,
[switch]$skippurge,
[switch]$skiptest,
@@ -73,32 +79,45 @@ if (-not $skipupload) {
"Upload using $pscp and $plink"
""
- pushd $build
- $doc = gci python*.chm, python*.chm.asc
+ if ($doc_htmlhelp) {
+ pushd $doc_htmlhelp
+ } else {
+ pushd $build
+ }
+ $chm = gci python*.chm, python*.chm.asc
popd
$d = "$target/$($p[0])/"
& $plink -batch $user@$server mkdir $d
& $plink -batch $user@$server chgrp downloads $d
& $plink -batch $user@$server chmod g-x,o+rx $d
- & $pscp -batch $doc.FullName "$user@${server}:$d"
+ & $pscp -batch $chm.FullName "$user@${server}:$d"
- foreach ($a in gci "$build" -Directory) {
+ $dirs = gci "$build" -Directory
+ if ($embed) {
+ $dirs = ($dirs, (gi $embed)) | %{ $_ }
+ }
+
+ foreach ($a in $dirs) {
"Uploading files from $($a.FullName)"
pushd "$($a.FullName)"
$exe = gci *.exe, *.exe.asc, *.zip, *.zip.asc
$msi = gci *.msi, *.msi.asc, *.msu, *.msu.asc
popd
- & $pscp -batch $exe.FullName "$user@${server}:$d"
+ if ($exe) {
+ & $pscp -batch $exe.FullName "$user@${server}:$d"
+ }
- $sd = "$d$($a.Name)$($p[1])/"
- & $plink -batch $user@$server mkdir $sd
- & $plink -batch $user@$server chgrp downloads $sd
- & $plink -batch $user@$server chmod g-x,o+rx $sd
- & $pscp -batch $msi.FullName "$user@${server}:$sd"
- & $plink -batch $user@$server chgrp downloads $sd*
- & $plink -batch $user@$server chmod g-x,o+r $sd*
+ if ($msi) {
+ $sd = "$d$($a.Name)$($p[1])/"
+ & $plink -batch $user@$server mkdir $sd
+ & $plink -batch $user@$server chgrp downloads $sd
+ & $plink -batch $user@$server chmod g-x,o+rx $sd
+ & $pscp -batch $msi.FullName "$user@${server}:$sd"
+ & $plink -batch $user@$server chgrp downloads $sd*
+ & $plink -batch $user@$server chmod g-x,o+r $sd*
+ }
}
& $plink -batch $user@$server chgrp downloads $d*
@@ -128,7 +147,18 @@ if (-not $skiptest) {
if (-not $skiphash) {
# Display MD5 hash and size of each downloadable file
pushd $build
- $hashes = gci python*.chm, *\*.exe, *\*.zip | `
+ $files = gci python*.chm, *\*.exe, *\*.zip
+ if ($doc_htmlhelp) {
+ cd $doc_htmlhelp
+ $files = ($files, (gci python*.chm)) | %{ $_ }
+ }
+ if ($embed) {
+ cd $embed
+ $files = ($files, (gci *.zip)) | %{ $_ }
+ }
+ popd
+
+ $hashes = $files | `
Sort-Object Name | `
Format-Table Name, @{Label="MD5"; Expression={(Get-FileHash $_ -Algorithm MD5).Hash}}, Length -AutoSize | `
Out-String -Width 4096
[View Less]
1
0

bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080)
by Victor Stinner June 14, 2019
by Victor Stinner June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/f0749da9a535375f05a2015e8960e8ae54…
commit: f0749da9a535375f05a2015e8960e8ae54877349
branch: master
author: Andrew Svetlov <andrew.svetlov(a)gmail.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-14T17:26:24+02:00
summary:
bpo-35998: Avoid TimeoutError in test_asyncio: test_start_tls_server_1() (GH-14080)
files:
A Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
M Lib/test/test_asyncio/test_sslproto.py
…
[View More]diff --git a/Lib/test/test_asyncio/test_sslproto.py b/Lib/test/test_asyncio/test_sslproto.py
index 4215abf5d863..5c861e92b7d6 100644
--- a/Lib/test/test_asyncio/test_sslproto.py
+++ b/Lib/test/test_asyncio/test_sslproto.py
@@ -494,17 +494,14 @@ def eof_received(self):
def test_start_tls_server_1(self):
HELLO_MSG = b'1' * self.PAYLOAD_SIZE
+ ANSWER = b'answer'
server_context = test_utils.simple_server_sslcontext()
client_context = test_utils.simple_client_sslcontext()
- if sys.platform.startswith('freebsd') or sys.platform.startswith('win'):
- # bpo-35031: Some FreeBSD and Windows buildbots fail to run this test
- # as the eof was not being received by the server if the payload
- # size is not big enough. This behaviour only appears if the
- # client is using TLS1.3.
- client_context.options |= ssl.OP_NO_TLSv1_3
+ answer = None
def client(sock, addr):
+ nonlocal answer
sock.settimeout(self.TIMEOUT)
sock.connect(addr)
@@ -513,33 +510,36 @@ def client(sock, addr):
sock.start_tls(client_context)
sock.sendall(HELLO_MSG)
-
- sock.shutdown(socket.SHUT_RDWR)
+ answer = sock.recv_all(len(ANSWER))
sock.close()
class ServerProto(asyncio.Protocol):
- def __init__(self, on_con, on_eof, on_con_lost):
+ def __init__(self, on_con, on_con_lost):
self.on_con = on_con
- self.on_eof = on_eof
self.on_con_lost = on_con_lost
self.data = b''
+ self.transport = None
def connection_made(self, tr):
+ self.transport = tr
self.on_con.set_result(tr)
+ def replace_transport(self, tr):
+ self.transport = tr
+
def data_received(self, data):
self.data += data
-
- def eof_received(self):
- self.on_eof.set_result(1)
+ if len(self.data) >= len(HELLO_MSG):
+ self.transport.write(ANSWER)
def connection_lost(self, exc):
+ self.transport = None
if exc is None:
self.on_con_lost.set_result(None)
else:
self.on_con_lost.set_exception(exc)
- async def main(proto, on_con, on_eof, on_con_lost):
+ async def main(proto, on_con, on_con_lost):
tr = await on_con
tr.write(HELLO_MSG)
@@ -550,16 +550,16 @@ def connection_lost(self, exc):
server_side=True,
ssl_handshake_timeout=self.TIMEOUT)
- await on_eof
+ proto.replace_transport(new_tr)
+
await on_con_lost
self.assertEqual(proto.data, HELLO_MSG)
new_tr.close()
async def run_main():
on_con = self.loop.create_future()
- on_eof = self.loop.create_future()
on_con_lost = self.loop.create_future()
- proto = ServerProto(on_con, on_eof, on_con_lost)
+ proto = ServerProto(on_con, on_con_lost)
server = await self.loop.create_server(
lambda: proto, '127.0.0.1', 0)
@@ -568,11 +568,12 @@ def connection_lost(self, exc):
with self.tcp_client(lambda sock: client(sock, addr),
timeout=self.TIMEOUT):
await asyncio.wait_for(
- main(proto, on_con, on_eof, on_con_lost),
+ main(proto, on_con, on_con_lost),
timeout=self.TIMEOUT)
server.close()
await server.wait_closed()
+ self.assertEqual(answer, ANSWER)
self.loop.run_until_complete(run_main())
diff --git a/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
new file mode 100644
index 000000000000..23b6d00f42c5
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-14-17-05-49.bpo-35998.yX82oD.rst
@@ -0,0 +1 @@
+Avoid TimeoutError in test_asyncio: test_start_tls_server_1()
[View Less]
1
0
https://github.com/python/cpython/commit/047fa1ddae856aa9aaee21c79934934865…
commit: 047fa1ddae856aa9aaee21c799349348657b8918
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T08:11:04-07:00
summary:
Update concurrent.futures.rst (GH-14061)
This PR adds missing details in the [`concurrent.futures`](https://docs.python.org/3/library/concurrent.futures.html) documentation:
* the …
[View More]mention that `Future.cancel` also returns `False` if the call finished running;
* the mention of the states for `Future` that did not complete: pending or running.
(cherry picked from commit 431478d5d74d880692817323198b9605af972fa5)
Co-authored-by: Géry Ogam <gery.ogam(a)gmail.com>
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index f2491dd24571..41d47c7ef153 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -306,9 +306,10 @@ The :class:`Future` class encapsulates the asynchronous execution of a callable.
.. method:: cancel()
- Attempt to cancel the call. If the call is currently being executed and
- cannot be cancelled then the method will return ``False``, otherwise the
- call will be cancelled and the method will return ``True``.
+ Attempt to cancel the call. If the call is currently being executed or
+ finished running and cannot be cancelled then the method will return
+ ``False``, otherwise the call will be cancelled and the method will
+ return ``True``.
.. method:: cancelled()
@@ -423,8 +424,9 @@ Module Functions
Wait for the :class:`Future` instances (possibly created by different
:class:`Executor` instances) given by *fs* to complete. Returns a named
2-tuple of sets. The first set, named ``done``, contains the futures that
- completed (finished or were cancelled) before the wait completed. The second
- set, named ``not_done``, contains uncompleted futures.
+ completed (finished or cancelled futures) before the wait completed. The
+ second set, named ``not_done``, contains the futures that did not complete
+ (pending or running futures).
*timeout* can be used to control the maximum number of seconds to wait before
returning. *timeout* can be an int or float. If *timeout* is not specified
@@ -455,7 +457,7 @@ Module Functions
Returns an iterator over the :class:`Future` instances (possibly created by
different :class:`Executor` instances) given by *fs* that yields futures as
- they complete (finished or were cancelled). Any futures given by *fs* that
+ they complete (finished or cancelled futures). Any futures given by *fs* that
are duplicated will be returned once. Any futures that completed before
:func:`as_completed` is called will be yielded first. The returned iterator
raises a :exc:`concurrent.futures.TimeoutError` if :meth:`~iterator.__next__`
[View Less]
1
0
https://github.com/python/cpython/commit/0bd1469a90648229f4c704741ba13f6709…
commit: 0bd1469a90648229f4c704741ba13f6709b166ea
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T07:52:14-07:00
summary:
Update concurrent.futures.rst (GH-14061)
This PR adds missing details in the [`concurrent.futures`](https://docs.python.org/3/library/concurrent.futures.html) documentation:
* the …
[View More]mention that `Future.cancel` also returns `False` if the call finished running;
* the mention of the states for `Future` that did not complete: pending or running.
(cherry picked from commit 431478d5d74d880692817323198b9605af972fa5)
Co-authored-by: Géry Ogam <gery.ogam(a)gmail.com>
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index 24d684a0123d..9295df84278d 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -293,9 +293,10 @@ The :class:`Future` class encapsulates the asynchronous execution of a callable.
.. method:: cancel()
- Attempt to cancel the call. If the call is currently being executed and
- cannot be cancelled then the method will return ``False``, otherwise the
- call will be cancelled and the method will return ``True``.
+ Attempt to cancel the call. If the call is currently being executed or
+ finished running and cannot be cancelled then the method will return
+ ``False``, otherwise the call will be cancelled and the method will
+ return ``True``.
.. method:: cancelled()
@@ -401,8 +402,9 @@ Module Functions
Wait for the :class:`Future` instances (possibly created by different
:class:`Executor` instances) given by *fs* to complete. Returns a named
2-tuple of sets. The first set, named ``done``, contains the futures that
- completed (finished or were cancelled) before the wait completed. The second
- set, named ``not_done``, contains uncompleted futures.
+ completed (finished or cancelled futures) before the wait completed. The
+ second set, named ``not_done``, contains the futures that did not complete
+ (pending or running futures).
*timeout* can be used to control the maximum number of seconds to wait before
returning. *timeout* can be an int or float. If *timeout* is not specified
@@ -433,7 +435,7 @@ Module Functions
Returns an iterator over the :class:`Future` instances (possibly created by
different :class:`Executor` instances) given by *fs* that yields futures as
- they complete (finished or were cancelled). Any futures given by *fs* that
+ they complete (finished or cancelled futures). Any futures given by *fs* that
are duplicated will be returned once. Any futures that completed before
:func:`as_completed` is called will be yielded first. The returned iterator
raises a :exc:`concurrent.futures.TimeoutError` if :meth:`~iterator.__next__`
[View Less]
1
0
https://github.com/python/cpython/commit/431478d5d74d880692817323198b9605af…
commit: 431478d5d74d880692817323198b9605af972fa5
branch: master
author: Géry Ogam <gery.ogam(a)gmail.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-14T07:39:43-07:00
summary:
Update concurrent.futures.rst (GH-14061)
This PR adds missing details in the [`concurrent.futures`](https://docs.python.org/3/library/concurrent.futures.html) documentation:
…
[View More]* the mention that `Future.cancel` also returns `False` if the call finished running;
* the mention of the states for `Future` that did not complete: pending or running.
files:
M Doc/library/concurrent.futures.rst
diff --git a/Doc/library/concurrent.futures.rst b/Doc/library/concurrent.futures.rst
index 34905c449d7f..d71f2d80c9e2 100644
--- a/Doc/library/concurrent.futures.rst
+++ b/Doc/library/concurrent.futures.rst
@@ -306,9 +306,10 @@ The :class:`Future` class encapsulates the asynchronous execution of a callable.
.. method:: cancel()
- Attempt to cancel the call. If the call is currently being executed and
- cannot be cancelled then the method will return ``False``, otherwise the
- call will be cancelled and the method will return ``True``.
+ Attempt to cancel the call. If the call is currently being executed or
+ finished running and cannot be cancelled then the method will return
+ ``False``, otherwise the call will be cancelled and the method will
+ return ``True``.
.. method:: cancelled()
@@ -423,8 +424,9 @@ Module Functions
Wait for the :class:`Future` instances (possibly created by different
:class:`Executor` instances) given by *fs* to complete. Returns a named
2-tuple of sets. The first set, named ``done``, contains the futures that
- completed (finished or were cancelled) before the wait completed. The second
- set, named ``not_done``, contains uncompleted futures.
+ completed (finished or cancelled futures) before the wait completed. The
+ second set, named ``not_done``, contains the futures that did not complete
+ (pending or running futures).
*timeout* can be used to control the maximum number of seconds to wait before
returning. *timeout* can be an int or float. If *timeout* is not specified
@@ -455,7 +457,7 @@ Module Functions
Returns an iterator over the :class:`Future` instances (possibly created by
different :class:`Executor` instances) given by *fs* that yields futures as
- they complete (finished or were cancelled). Any futures given by *fs* that
+ they complete (finished or cancelled futures). Any futures given by *fs* that
are duplicated will be returned once. Any futures that completed before
:func:`as_completed` is called will be yielded first. The returned iterator
raises a :exc:`concurrent.futures.TimeoutError` if :meth:`~iterator.__next__`
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/8b66dbb212d7dffbf9fb545dad2a3400ae…
commit: 8b66dbb212d7dffbf9fb545dad2a3400aead1461
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T04:53:13-07:00
summary:
bpo-37278: Fix test_asyncio ProactorLoopCtrlC (GH-14074)
Join the thread to prevent leaking a running thread and leaking a
reference.
Cleanup also the test:
* …
[View More]asyncioWindowsProactorEventLoopPolicy became the default policy,
there is no need to set it manually.
* Only start the thread once the loop is running.
* Use a shorter sleep in the thread (100 ms rather than 1 sec).
* Use close_loop(loop) rather than loop.close().
* Use longer variable names.
(cherry picked from commit 07559450b2d9179e4c99e0af088ce7550e549f94)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
A Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst
M Lib/test/test_asyncio/test_windows_events.py
diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py
index 13aef7cf1f77..1e1c01d713b5 100644
--- a/Lib/test/test_asyncio/test_windows_events.py
+++ b/Lib/test/test_asyncio/test_windows_events.py
@@ -45,20 +45,21 @@ class ProactorLoopCtrlC(test_utils.TestCase):
def test_ctrl_c(self):
def SIGINT_after_delay():
- time.sleep(1)
+ time.sleep(0.1)
signal.raise_signal(signal.SIGINT)
- asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
- l = asyncio.get_event_loop()
+ thread = threading.Thread(target=SIGINT_after_delay)
+ loop = asyncio.get_event_loop()
try:
- t = threading.Thread(target=SIGINT_after_delay)
- t.start()
- l.run_forever()
+ # only start the loop once the event loop is running
+ loop.call_soon(thread.start)
+ loop.run_forever()
self.fail("should not fall through 'run_forever'")
except KeyboardInterrupt:
pass
finally:
- l.close()
+ self.close_loop(loop)
+ thread.join()
class ProactorTests(test_utils.TestCase):
diff --git a/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst b/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst
new file mode 100644
index 000000000000..3d3011b51c5b
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst
@@ -0,0 +1,2 @@
+Fix test_asyncio ProactorLoopCtrlC: join the thread to prevent leaking a
+running thread and leaking a reference.
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/07559450b2d9179e4c99e0af088ce7550e…
commit: 07559450b2d9179e4c99e0af088ce7550e549f94
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T13:02:51+02:00
summary:
bpo-37278: Fix test_asyncio ProactorLoopCtrlC (GH-14074)
Join the thread to prevent leaking a running thread and leaking a
reference.
Cleanup also the test:
* asyncioWindowsProactorEventLoopPolicy became the …
[View More]default policy,
there is no need to set it manually.
* Only start the thread once the loop is running.
* Use a shorter sleep in the thread (100 ms rather than 1 sec).
* Use close_loop(loop) rather than loop.close().
* Use longer variable names.
files:
A Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst
M Lib/test/test_asyncio/test_windows_events.py
diff --git a/Lib/test/test_asyncio/test_windows_events.py b/Lib/test/test_asyncio/test_windows_events.py
index 13aef7cf1f77..1e1c01d713b5 100644
--- a/Lib/test/test_asyncio/test_windows_events.py
+++ b/Lib/test/test_asyncio/test_windows_events.py
@@ -45,20 +45,21 @@ class ProactorLoopCtrlC(test_utils.TestCase):
def test_ctrl_c(self):
def SIGINT_after_delay():
- time.sleep(1)
+ time.sleep(0.1)
signal.raise_signal(signal.SIGINT)
- asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
- l = asyncio.get_event_loop()
+ thread = threading.Thread(target=SIGINT_after_delay)
+ loop = asyncio.get_event_loop()
try:
- t = threading.Thread(target=SIGINT_after_delay)
- t.start()
- l.run_forever()
+ # only start the loop once the event loop is running
+ loop.call_soon(thread.start)
+ loop.run_forever()
self.fail("should not fall through 'run_forever'")
except KeyboardInterrupt:
pass
finally:
- l.close()
+ self.close_loop(loop)
+ thread.join()
class ProactorTests(test_utils.TestCase):
diff --git a/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst b/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst
new file mode 100644
index 000000000000..3d3011b51c5b
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-14-12-21-47.bpo-37278.z0HUOr.rst
@@ -0,0 +1,2 @@
+Fix test_asyncio ProactorLoopCtrlC: join the thread to prevent leaking a
+running thread and leaking a reference.
[View Less]
1
0

June 14, 2019
https://github.com/python/cpython/commit/b2f94730d947f25b8507c5f76202e91768…
commit: b2f94730d947f25b8507c5f76202e917683e76f7
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-14T19:37:15+09:00
summary:
bpo-37249: add declaration of _PyObject_GetMethod (GH-14015)
files:
M Include/cpython/object.h
M Objects/call.c
M Python/ceval.c
diff --git a/Include/cpython/object.h b/Include/cpython/object.h
index …
[View More]a65aaf648215..fd4e77103f01 100644
--- a/Include/cpython/object.h
+++ b/Include/cpython/object.h
@@ -318,6 +318,9 @@ PyAPI_FUNC(int) _PyObject_HasAttrId(PyObject *, struct _Py_Identifier *);
*/
PyAPI_FUNC(int) _PyObject_LookupAttr(PyObject *, PyObject *, PyObject **);
PyAPI_FUNC(int) _PyObject_LookupAttrId(PyObject *, struct _Py_Identifier *, PyObject **);
+
+PyAPI_FUNC(int) _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
+
PyAPI_FUNC(PyObject **) _PyObject_GetDictPtr(PyObject *);
PyAPI_FUNC(PyObject *) _PyObject_NextNotImplemented(PyObject *);
PyAPI_FUNC(void) PyObject_CallFinalizer(PyObject *);
diff --git a/Objects/call.c b/Objects/call.c
index 578e1b3ab619..8eae1e10d8c5 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -1211,9 +1211,6 @@ object_vacall(PyObject *base, PyObject *callable, va_list vargs)
}
-/* Private API for the LOAD_METHOD opcode. */
-extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **);
-
PyObject *
PyObject_CallMethodObjArgs(PyObject *obj, PyObject *name, ...)
{
diff --git a/Python/ceval.c b/Python/ceval.c
index bb0416f4ceba..60367a665d7d 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -38,10 +38,6 @@
# error "ceval.c must be build with Py_BUILD_CORE define for best performance"
#endif
-/* Private API for the LOAD_METHOD opcode. */
-extern int _PyObject_GetMethod(PyObject *, PyObject *, PyObject **);
-
-typedef PyObject *(*callproc)(PyObject *, PyObject *, PyObject *);
/* Forward declarations */
Py_LOCAL_INLINE(PyObject *) call_function(
[View Less]
1
0

[3.7] bpo-37269: Correctly optimise conditionals with constant booleans (GH-14071) (GH-14073)
by Pablo Galindo June 14, 2019
by Pablo Galindo June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/5292179afc6fd0dc533add054d4790773c…
commit: 5292179afc6fd0dc533add054d4790773c9766d0
branch: 3.7
author: Pablo Galindo <Pablogsal(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T07:18:51+01:00
summary:
[3.7] bpo-37269: Correctly optimise conditionals with constant booleans (GH-14071) (GH-14073)
Fix a regression introduced by af8646c8054d0f4180a2013383039b6a472f9698 that was causing code of the form:
if True and False:…
[View More]
do_something()
to be optimized incorrectly, eliminating the block..
(cherry picked from commit 05f831865545b08c9a21cfb7773af58b76ec64cb)
Co-authored-by: Pablo Galindo <Pablogsal(a)gmail.com>
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
M Lib/test/test_peepholer.py
M Python/peephole.c
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 0cc1e92907b5..1a031544fc01 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -311,6 +311,13 @@ def test_constant_folding(self):
self.assertFalse(instr.opname.startswith('BINARY_'))
self.assertFalse(instr.opname.startswith('BUILD_'))
+ def test_condition_with_binop_with_bools(self):
+ def f():
+ if True or False:
+ return 1
+ return 0
+ self.assertEqual(f(), 1)
+
class TestBuglets(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
new file mode 100644
index 000000000000..b9b79066774f
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
@@ -0,0 +1,2 @@
+Fix a bug in the peephole optimizer that was not treating correctly constant
+conditions with binary operators. Patch by Pablo Galindo.
diff --git a/Python/peephole.c b/Python/peephole.c
index 1ae62fa39a27..f1b71ed1a730 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -313,6 +313,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
fill_nops(codestr, op_start, nexti + 1);
cumlc = 0;
} else if (is_true == 0) {
+ if (i > 1 &&
+ (_Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_TRUE ||
+ _Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_FALSE)) {
+ break;
+ }
h = get_arg(codestr, nexti) / sizeof(_Py_CODEUNIT);
tgt = find_op(codestr, codelen, h);
fill_nops(codestr, op_start, tgt);
[View Less]
1
0

bpo-37269: Correctly optimise conditionals with constant booleans (GH-14071)
by Miss Islington (bot) June 14, 2019
by Miss Islington (bot) June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/7cd581a6bf82309b3c9b9251c54067d442…
commit: 7cd581a6bf82309b3c9b9251c54067d442732485
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T23:13:24-07:00
summary:
bpo-37269: Correctly optimise conditionals with constant booleans (GH-14071)
Fix a regression introduced by af8646c8054d0f4180a2013383039b6a472f9698 that was causing code of the form:…
[View More]
if True and False:
do_something()
to be optimized incorrectly, eliminating the block.
(cherry picked from commit 05f831865545b08c9a21cfb7773af58b76ec64cb)
Co-authored-by: Pablo Galindo <Pablogsal(a)gmail.com>
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
M Lib/test/test_peepholer.py
M Python/peephole.c
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 860ceeb003e7..5d00240e2595 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -414,6 +414,13 @@ def forloop():
pass
self.assertEqual(count_instr_recursively(forloop, 'BUILD_LIST'), 0)
+ def test_condition_with_binop_with_bools(self):
+ def f():
+ if True or False:
+ return 1
+ return 0
+ self.assertEqual(f(), 1)
+
class TestBuglets(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
new file mode 100644
index 000000000000..b9b79066774f
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
@@ -0,0 +1,2 @@
+Fix a bug in the peephole optimizer that was not treating correctly constant
+conditions with binary operators. Patch by Pablo Galindo.
diff --git a/Python/peephole.c b/Python/peephole.c
index 6f3e2ed88b2b..d7b1dfc4d9c1 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -315,6 +315,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
fill_nops(codestr, op_start, nexti + 1);
cumlc = 0;
} else if (is_true == 0) {
+ if (i > 1 &&
+ (_Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_TRUE ||
+ _Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_FALSE)) {
+ break;
+ }
h = get_arg(codestr, nexti) / sizeof(_Py_CODEUNIT);
tgt = find_op(codestr, codelen, h);
fill_nops(codestr, op_start, tgt);
[View Less]
1
0

bpo-37269: Correctly optimise conditionals with constant booleans (GH-14071)
by Pablo Galindo June 14, 2019
by Pablo Galindo June 14, 2019
June 14, 2019
https://github.com/python/cpython/commit/05f831865545b08c9a21cfb7773af58b76…
commit: 05f831865545b08c9a21cfb7773af58b76ec64cb
branch: master
author: Pablo Galindo <Pablogsal(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-14T06:54:53+01:00
summary:
bpo-37269: Correctly optimise conditionals with constant booleans (GH-14071)
Fix a regression introduced by af8646c8054d0f4180a2013383039b6a472f9698 that was causing code of the form:
if True and False:
…
[View More]do_something()
to be optimized incorrectly, eliminating the block.
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
M Lib/test/test_peepholer.py
M Python/peephole.c
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 860ceeb003e7..5d00240e2595 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -414,6 +414,13 @@ def forloop():
pass
self.assertEqual(count_instr_recursively(forloop, 'BUILD_LIST'), 0)
+ def test_condition_with_binop_with_bools(self):
+ def f():
+ if True or False:
+ return 1
+ return 0
+ self.assertEqual(f(), 1)
+
class TestBuglets(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
new file mode 100644
index 000000000000..b9b79066774f
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-14-06-32-33.bpo-37269.SjVVAe.rst
@@ -0,0 +1,2 @@
+Fix a bug in the peephole optimizer that was not treating correctly constant
+conditions with binary operators. Patch by Pablo Galindo.
diff --git a/Python/peephole.c b/Python/peephole.c
index 6f3e2ed88b2b..d7b1dfc4d9c1 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -315,6 +315,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
fill_nops(codestr, op_start, nexti + 1);
cumlc = 0;
} else if (is_true == 0) {
+ if (i > 1 &&
+ (_Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_TRUE ||
+ _Py_OPCODE(codestr[i - 1]) == POP_JUMP_IF_FALSE)) {
+ break;
+ }
h = get_arg(codestr, nexti) / sizeof(_Py_CODEUNIT);
tgt = find_op(codestr, codelen, h);
fill_nops(codestr, op_start, tgt);
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/886d83e5aa8df2dd2e93421d2f614438a3…
commit: 886d83e5aa8df2dd2e93421d2f614438a3244a1c
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T15:54:04-07:00
summary:
bpo-37077: Add native thread ID (TID) for AIX (GH-13624)
This is the followup for issue36084
https://bugs.python.org/issue37077
(cherry picked from commit …
[View More]d0eeb936d8daf05d7d89f6935e3f4c0dee49c5be)
Co-authored-by: Michael Felt <aixtools(a)users.noreply.github.com>
files:
A Misc/NEWS.d/next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst
M Doc/library/_thread.rst
M Doc/library/threading.rst
M Include/pythread.h
M Python/thread_pthread.h
diff --git a/Doc/library/_thread.rst b/Doc/library/_thread.rst
index 5b4fcde669e1..bd653ab32bb9 100644
--- a/Doc/library/_thread.rst
+++ b/Doc/library/_thread.rst
@@ -106,7 +106,7 @@ This module defines the following constants and functions:
Its value may be used to uniquely identify this particular thread system-wide
(until the thread terminates, after which the value may be recycled by the OS).
- .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD.
+ .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX.
.. versionadded:: 3.8
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index b4f4814c4ad3..2907b65f5bca 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -82,7 +82,7 @@ This module defines the following functions:
Its value may be used to uniquely identify this particular thread system-wide
(until the thread terminates, after which the value may be recycled by the OS).
- .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD.
+ .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX.
.. versionadded:: 3.8
diff --git a/Include/pythread.h b/Include/pythread.h
index 79a9210af3a4..f22e8c42c502 100644
--- a/Include/pythread.h
+++ b/Include/pythread.h
@@ -26,7 +26,7 @@ PyAPI_FUNC(unsigned long) PyThread_start_new_thread(void (*)(void *), void *);
PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void);
PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void);
-#if defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(_WIN32)
+#if defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(_WIN32) || defined(_AIX)
#define PY_HAVE_THREAD_NATIVE_ID
PyAPI_FUNC(unsigned long) PyThread_get_thread_native_id(void);
#endif
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst b/Misc/NEWS.d/next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst
new file mode 100644
index 000000000000..832dfc94ac49
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst
@@ -0,0 +1,2 @@
+Add :func:`threading.get_native_id` support for AIX.
+Patch by M. Felt
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h
index 9b4b23bdc7d7..a36d16c19ead 100644
--- a/Python/thread_pthread.h
+++ b/Python/thread_pthread.h
@@ -18,8 +18,10 @@
# include <pthread_np.h> /* pthread_getthreadid_np() */
#elif defined(__OpenBSD__)
# include <unistd.h> /* getthrid() */
-#elif defined(__NetBSD__) /* _lwp_self */
-# include <lwp.h>
+#elif defined(_AIX)
+# include <sys/thread.h> /* thread_self() */
+#elif defined(__NetBSD__)
+# include <lwp.h> /* _lwp_self() */
#endif
/* The POSIX spec requires that use of pthread_attr_setstacksize
@@ -330,6 +332,9 @@ PyThread_get_thread_native_id(void)
#elif defined(__OpenBSD__)
pid_t native_id;
native_id = getthrid();
+#elif defined(_AIX)
+ tid_t native_id;
+ native_id = thread_self();
#elif defined(__NetBSD__)
lwpid_t native_id;
native_id = _lwp_self();
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/d0eeb936d8daf05d7d89f6935e3f4c0dee…
commit: d0eeb936d8daf05d7d89f6935e3f4c0dee49c5be
branch: master
author: Michael Felt <aixtools(a)users.noreply.github.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-13T15:34:46-07:00
summary:
bpo-37077: Add native thread ID (TID) for AIX (GH-13624)
This is the followup for issue36084
https://bugs.python.org/issue37077
files:
A Misc/NEWS.d/…
[View More]next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst
M Doc/library/_thread.rst
M Doc/library/threading.rst
M Include/pythread.h
M Python/thread_pthread.h
diff --git a/Doc/library/_thread.rst b/Doc/library/_thread.rst
index 5b4fcde669e1..bd653ab32bb9 100644
--- a/Doc/library/_thread.rst
+++ b/Doc/library/_thread.rst
@@ -106,7 +106,7 @@ This module defines the following constants and functions:
Its value may be used to uniquely identify this particular thread system-wide
(until the thread terminates, after which the value may be recycled by the OS).
- .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD.
+ .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX.
.. versionadded:: 3.8
diff --git a/Doc/library/threading.rst b/Doc/library/threading.rst
index b4f4814c4ad3..2907b65f5bca 100644
--- a/Doc/library/threading.rst
+++ b/Doc/library/threading.rst
@@ -82,7 +82,7 @@ This module defines the following functions:
Its value may be used to uniquely identify this particular thread system-wide
(until the thread terminates, after which the value may be recycled by the OS).
- .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD.
+ .. availability:: Windows, FreeBSD, Linux, macOS, OpenBSD, NetBSD, AIX.
.. versionadded:: 3.8
diff --git a/Include/pythread.h b/Include/pythread.h
index 79a9210af3a4..f22e8c42c502 100644
--- a/Include/pythread.h
+++ b/Include/pythread.h
@@ -26,7 +26,7 @@ PyAPI_FUNC(unsigned long) PyThread_start_new_thread(void (*)(void *), void *);
PyAPI_FUNC(void) _Py_NO_RETURN PyThread_exit_thread(void);
PyAPI_FUNC(unsigned long) PyThread_get_thread_ident(void);
-#if defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(_WIN32)
+#if defined(__APPLE__) || defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(_WIN32) || defined(_AIX)
#define PY_HAVE_THREAD_NATIVE_ID
PyAPI_FUNC(unsigned long) PyThread_get_thread_native_id(void);
#endif
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst b/Misc/NEWS.d/next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst
new file mode 100644
index 000000000000..832dfc94ac49
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-05-28-11-47-44.bpo-37077.S1h0Fc.rst
@@ -0,0 +1,2 @@
+Add :func:`threading.get_native_id` support for AIX.
+Patch by M. Felt
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h
index 9b4b23bdc7d7..a36d16c19ead 100644
--- a/Python/thread_pthread.h
+++ b/Python/thread_pthread.h
@@ -18,8 +18,10 @@
# include <pthread_np.h> /* pthread_getthreadid_np() */
#elif defined(__OpenBSD__)
# include <unistd.h> /* getthrid() */
-#elif defined(__NetBSD__) /* _lwp_self */
-# include <lwp.h>
+#elif defined(_AIX)
+# include <sys/thread.h> /* thread_self() */
+#elif defined(__NetBSD__)
+# include <lwp.h> /* _lwp_self() */
#endif
/* The POSIX spec requires that use of pthread_attr_setstacksize
@@ -330,6 +332,9 @@ PyThread_get_thread_native_id(void)
#elif defined(__OpenBSD__)
pid_t native_id;
native_id = getthrid();
+#elif defined(_AIX)
+ tid_t native_id;
+ native_id = thread_self();
#elif defined(__NetBSD__)
lwpid_t native_id;
native_id = _lwp_self();
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/838f26402de82640698c38ea9d2be65c6c…
commit: 838f26402de82640698c38ea9d2be65c6cf780d6
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T22:41:23+02:00
summary:
bpo-36710: Pass explicitly tstate in sysmodule.c (GH-14060)
* Replace global var Py_VerboseFlag with interp->config.verbose.
* Add _PyErr_NoMemory(tstate) function.
* Add tstate parameter to …
[View More]_PyEval_SetCoroutineOriginTrackingDepth()
and move the function to the internal API.
* Replace _PySys_InitMain(runtime, interp)
with _PySys_InitMain(runtime, tstate).
files:
M Include/ceval.h
M Include/internal/pycore_ceval.h
M Include/internal/pycore_pyerrors.h
M Include/internal/pycore_pylifecycle.h
M Python/ceval.c
M Python/errors.c
M Python/pylifecycle.c
M Python/sysmodule.c
diff --git a/Include/ceval.h b/Include/ceval.h
index 36fd014a91a7..e78194d51237 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -31,7 +31,6 @@ PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
#ifndef Py_LIMITED_API
PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
-PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(int new_depth);
PyAPI_FUNC(int) _PyEval_GetCoroutineOriginTrackingDepth(void);
PyAPI_FUNC(void) _PyEval_SetAsyncGenFirstiter(PyObject *);
PyAPI_FUNC(PyObject *) _PyEval_GetAsyncGenFirstiter(void);
diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h
index 4c1c0e2439ee..30cd6c9e09e4 100644
--- a/Include/internal/pycore_ceval.h
+++ b/Include/internal/pycore_ceval.h
@@ -27,6 +27,9 @@ PyAPI_FUNC(void) _PyEval_SignalAsyncExc(
struct _ceval_runtime_state *ceval);
PyAPI_FUNC(void) _PyEval_ReInitThreads(
_PyRuntimeState *runtime);
+PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth(
+ PyThreadState *tstate,
+ int new_depth);
/* Private function */
void _PyEval_Fini(void);
diff --git a/Include/internal/pycore_pyerrors.h b/Include/internal/pycore_pyerrors.h
index 23327ef78397..2efbf4a62f81 100644
--- a/Include/internal/pycore_pyerrors.h
+++ b/Include/internal/pycore_pyerrors.h
@@ -39,6 +39,8 @@ PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
PyAPI_FUNC(void) _PyErr_SetNone(PyThreadState *tstate, PyObject *exception);
+PyAPI_FUNC(PyObject *) _PyErr_NoMemory(PyThreadState *tstate);
+
PyAPI_FUNC(void) _PyErr_SetString(
PyThreadState *tstate,
PyObject *exception,
diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h
index 8a692ea16495..6bfadd49eef8 100644
--- a/Include/internal/pycore_pylifecycle.h
+++ b/Include/internal/pycore_pylifecycle.h
@@ -45,7 +45,7 @@ extern PyStatus _PySys_Create(
extern PyStatus _PySys_SetPreliminaryStderr(PyObject *sysdict);
extern int _PySys_InitMain(
_PyRuntimeState *runtime,
- PyInterpreterState *interp);
+ PyThreadState *tstate);
extern PyStatus _PyImport_Init(PyInterpreterState *interp);
extern PyStatus _PyExc_Init(void);
extern PyStatus _PyErr_Init(void);
diff --git a/Python/ceval.c b/Python/ceval.c
index 7063647d584f..bb0416f4ceba 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -4728,10 +4728,9 @@ PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
}
void
-_PyEval_SetCoroutineOriginTrackingDepth(int new_depth)
+_PyEval_SetCoroutineOriginTrackingDepth(PyThreadState *tstate, int new_depth)
{
assert(new_depth >= 0);
- PyThreadState *tstate = _PyThreadState_GET();
tstate->coroutine_origin_tracking_depth = new_depth;
}
diff --git a/Python/errors.c b/Python/errors.c
index 8a94afdd8c41..b3b9ac94cd14 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -547,9 +547,8 @@ PyErr_BadArgument(void)
}
PyObject *
-PyErr_NoMemory(void)
+_PyErr_NoMemory(PyThreadState *tstate)
{
- PyThreadState *tstate = _PyThreadState_GET();
if (Py_TYPE(PyExc_MemoryError) == NULL) {
/* PyErr_NoMemory() has been called before PyExc_MemoryError has been
initialized by _PyExc_Init() */
@@ -560,6 +559,13 @@ PyErr_NoMemory(void)
return NULL;
}
+PyObject *
+PyErr_NoMemory(void)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return _PyErr_NoMemory(tstate);
+}
+
PyObject *
PyErr_SetFromErrnoWithFilenameObject(PyObject *exc, PyObject *filenameObject)
{
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 751c4d6d1d63..54e8ce2b1557 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -899,6 +899,7 @@ pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
}
/* Configure the main interpreter */
+ PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
PyConfig *config = &interp->config;
if (runtime->initialized) {
@@ -919,7 +920,7 @@ pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
return _PyStatus_ERR("can't initialize time");
}
- if (_PySys_InitMain(runtime, interp) < 0) {
+ if (_PySys_InitMain(runtime, tstate) < 0) {
return _PyStatus_ERR("can't finish initializing sys");
}
@@ -1456,7 +1457,7 @@ new_interpreter(PyThreadState **tstate_p)
}
Py_INCREF(interp->sysdict);
PyDict_SetItemString(interp->sysdict, "modules", modules);
- if (_PySys_InitMain(runtime, interp) < 0) {
+ if (_PySys_InitMain(runtime, tstate) < 0) {
return _PyStatus_ERR("can't finish initializing sys");
}
}
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 12b1bd7711d5..fcbcb3b24d52 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -17,10 +17,12 @@ Data members:
#include "Python.h"
#include "code.h"
#include "frameobject.h"
+#include "pycore_ceval.h"
#include "pycore_initconfig.h"
+#include "pycore_pathconfig.h"
+#include "pycore_pyerrors.h"
#include "pycore_pylifecycle.h"
#include "pycore_pymem.h"
-#include "pycore_pathconfig.h"
#include "pycore_pystate.h"
#include "pycore_tupleobject.h"
#include "pythread.h"
@@ -59,30 +61,38 @@ _Py_IDENTIFIER(stderr);
_Py_IDENTIFIER(warnoptions);
_Py_IDENTIFIER(write);
-PyObject *
-_PySys_GetObjectId(_Py_Identifier *key)
+static PyObject *
+sys_get_object_id(PyThreadState *tstate, _Py_Identifier *key)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyObject *sd = tstate->interp->sysdict;
if (sd == NULL) {
return NULL;
}
return _PyDict_GetItemId(sd, key);
}
+PyObject *
+_PySys_GetObjectId(_Py_Identifier *key)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return sys_get_object_id(tstate, key);
+}
+
PyObject *
PySys_GetObject(const char *name)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *sd = tstate->interp->sysdict;
if (sd == NULL) {
return NULL;
}
return PyDict_GetItemString(sd, name);
}
-int
-_PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
+static int
+sys_set_object_id(PyThreadState *tstate, _Py_Identifier *key, PyObject *v)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyObject *sd = tstate->interp->sysdict;
if (v == NULL) {
if (_PyDict_GetItemId(sd, key) == NULL) {
return 0;
@@ -97,9 +107,16 @@ _PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
}
int
-PySys_SetObject(const char *name, PyObject *v)
+_PySys_SetObjectId(_Py_Identifier *key, PyObject *v)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return sys_set_object_id(tstate, key, v);
+}
+
+static int
+sys_set_object(PyThreadState *tstate, const char *name, PyObject *v)
{
- PyObject *sd = _PyInterpreterState_GET_UNSAFE()->sysdict;
+ PyObject *sd = tstate->interp->sysdict;
if (v == NULL) {
if (PyDict_GetItemString(sd, name) == NULL) {
return 0;
@@ -113,10 +130,16 @@ PySys_SetObject(const char *name, PyObject *v)
}
}
+int
+PySys_SetObject(const char *name, PyObject *v)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ return sys_set_object(tstate, name, v);
+}
+
static int
-should_audit(void)
+should_audit(PyThreadState *ts)
{
- PyThreadState *ts = _PyThreadState_GET();
if (!ts) {
return 0;
}
@@ -134,6 +157,7 @@ PySys_Audit(const char *event, const char *argFormat, ...)
PyObject *hooks = NULL;
PyObject *hook = NULL;
int res = -1;
+ PyThreadState *ts = _PyThreadState_GET();
/* N format is inappropriate, because you do not know
whether the reference is consumed by the call.
@@ -141,18 +165,16 @@ PySys_Audit(const char *event, const char *argFormat, ...)
assert(!argFormat || !strchr(argFormat, 'N'));
/* Early exit when no hooks are registered */
- if (!should_audit()) {
+ if (!should_audit(ts)) {
return 0;
}
_Py_AuditHookEntry *e = _PyRuntime.audit_hook_head;
- PyThreadState *ts = _PyThreadState_GET();
- PyInterpreterState *is = ts ? ts->interp : NULL;
int dtrace = PyDTrace_AUDIT_ENABLED();
PyObject *exc_type, *exc_value, *exc_tb;
if (ts) {
- PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
+ _PyErr_Fetch(ts, &exc_type, &exc_value, &exc_tb);
}
/* Initialize event args now */
@@ -185,6 +207,7 @@ PySys_Audit(const char *event, const char *argFormat, ...)
}
/* Call interpreter hooks */
+ PyInterpreterState *is = ts ? ts->interp : NULL;
if (is && is->audit_hooks) {
eventName = PyUnicode_FromString(event);
if (!eventName) {
@@ -206,9 +229,9 @@ PySys_Audit(const char *event, const char *argFormat, ...)
if (o) {
canTrace = PyObject_IsTrue(o);
Py_DECREF(o);
- } else if (PyErr_Occurred() &&
- PyErr_ExceptionMatches(PyExc_AttributeError)) {
- PyErr_Clear();
+ } else if (_PyErr_Occurred(ts) &&
+ _PyErr_ExceptionMatches(ts, PyExc_AttributeError)) {
+ _PyErr_Clear(ts);
canTrace = 0;
}
if (canTrace < 0) {
@@ -232,7 +255,7 @@ PySys_Audit(const char *event, const char *argFormat, ...)
}
ts->use_tracing = (ts->c_tracefunc || ts->c_profilefunc);
ts->tracing--;
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(ts)) {
goto exit;
}
}
@@ -247,9 +270,9 @@ PySys_Audit(const char *event, const char *argFormat, ...)
if (ts) {
if (!res) {
- PyErr_Restore(exc_type, exc_value, exc_tb);
+ _PyErr_Restore(ts, exc_type, exc_value, exc_tb);
} else {
- assert(PyErr_Occurred());
+ assert(_PyErr_Occurred(ts));
Py_XDECREF(exc_type);
Py_XDECREF(exc_value);
Py_XDECREF(exc_tb);
@@ -263,22 +286,26 @@ PySys_Audit(const char *event, const char *argFormat, ...)
* finalization. In general, it should not need to be called,
* and as such it is not defined in any header files.
*/
-void _PySys_ClearAuditHooks(void) {
+void
+_PySys_ClearAuditHooks(void)
+{
/* Must be finalizing to clear hooks */
_PyRuntimeState *runtime = &_PyRuntime;
PyThreadState *ts = _PyRuntimeState_GetThreadState(runtime);
assert(!ts || _Py_CURRENTLY_FINALIZING(runtime, ts));
- if (!ts || !_Py_CURRENTLY_FINALIZING(runtime, ts))
+ if (!ts || !_Py_CURRENTLY_FINALIZING(runtime, ts)) {
return;
+ }
- if (Py_VerboseFlag) {
+ const PyConfig *config = &ts->interp->config;
+ if (config->verbose) {
PySys_WriteStderr("# clear sys.audit hooks\n");
}
/* Hooks can abort later hooks for this event, but cannot
abort the clear operation itself. */
PySys_Audit("cpython._PySys_ClearAuditHooks", NULL);
- PyErr_Clear();
+ _PyErr_Clear(ts);
_Py_AuditHookEntry *e = _PyRuntime.audit_hook_head, *n;
_PyRuntime.audit_hook_head = NULL;
@@ -292,13 +319,16 @@ void _PySys_ClearAuditHooks(void) {
int
PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)
{
+ _PyRuntimeState *runtime = &_PyRuntime;
+ PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
+
/* Invoke existing audit hooks to allow them an opportunity to abort. */
/* Cannot invoke hooks until we are initialized */
- if (Py_IsInitialized()) {
+ if (runtime->initialized) {
if (PySys_Audit("sys.addaudithook", NULL) < 0) {
- if (PyErr_ExceptionMatches(PyExc_Exception)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_Exception)) {
/* We do not report errors derived from Exception */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
return 0;
}
return -1;
@@ -310,15 +340,17 @@ PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)
e = (_Py_AuditHookEntry*)PyMem_RawMalloc(sizeof(_Py_AuditHookEntry));
_PyRuntime.audit_hook_head = e;
} else {
- while (e->next)
+ while (e->next) {
e = e->next;
+ }
e = e->next = (_Py_AuditHookEntry*)PyMem_RawMalloc(
sizeof(_Py_AuditHookEntry));
}
if (!e) {
- if (Py_IsInitialized())
- PyErr_NoMemory();
+ if (runtime->initialized) {
+ _PyErr_NoMemory(tstate);
+ }
return -1;
}
@@ -341,17 +373,19 @@ static PyObject *
sys_addaudithook_impl(PyObject *module, PyObject *hook)
/*[clinic end generated code: output=4f9c17aaeb02f44e input=0f3e191217a45e34]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
+
/* Invoke existing audit hooks to allow them an opportunity to abort. */
if (PySys_Audit("sys.addaudithook", NULL) < 0) {
- if (PyErr_ExceptionMatches(PyExc_Exception)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_Exception)) {
/* We do not report errors derived from Exception */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
Py_RETURN_NONE;
}
return NULL;
}
- PyInterpreterState *is = _PyInterpreterState_Get();
+ PyInterpreterState *is = tstate->interp;
if (is->audit_hooks == NULL) {
is->audit_hooks = PyList_New(0);
@@ -375,23 +409,29 @@ Passes the event to any audit hooks that are attached.");
static PyObject *
sys_audit(PyObject *self, PyObject *const *args, Py_ssize_t argc)
{
+ PyThreadState *tstate = _PyThreadState_GET();
+
if (argc == 0) {
- PyErr_SetString(PyExc_TypeError, "audit() missing 1 required positional argument: 'event'");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "audit() missing 1 required positional argument: "
+ "'event'");
return NULL;
}
- if (!should_audit()) {
+ if (!should_audit(tstate)) {
Py_RETURN_NONE;
}
PyObject *auditEvent = args[0];
if (!auditEvent) {
- PyErr_SetString(PyExc_TypeError, "expected str for argument 'event'");
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ "expected str for argument 'event'");
return NULL;
}
if (!PyUnicode_Check(auditEvent)) {
- PyErr_Format(PyExc_TypeError, "expected str for argument 'event', not %.200s",
- Py_TYPE(auditEvent)->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "expected str for argument 'event', not %.200s",
+ Py_TYPE(auditEvent)->tp_name);
return NULL;
}
const char *event = PyUnicode_AsUTF8(auditEvent);
@@ -418,7 +458,8 @@ sys_audit(PyObject *self, PyObject *const *args, Py_ssize_t argc)
static PyObject *
sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject *keywords)
{
- assert(!PyErr_Occurred());
+ PyThreadState *tstate = _PyThreadState_GET();
+ assert(!_PyErr_Occurred(tstate));
char *envar = Py_GETENV("PYTHONBREAKPOINT");
if (envar == NULL || strlen(envar) == 0) {
@@ -434,7 +475,7 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
* we need to save a copy of envar. */
envar = _PyMem_RawStrdup(envar);
if (envar == NULL) {
- PyErr_NoMemory();
+ _PyErr_NoMemory(tstate);
return NULL;
}
const char *last_dot = strrchr(envar, '.');
@@ -463,7 +504,7 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
Py_DECREF(modulepath);
if (module == NULL) {
- if (PyErr_ExceptionMatches(PyExc_ImportError)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_ImportError)) {
goto warn;
}
PyMem_RawFree(envar);
@@ -474,7 +515,7 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
Py_DECREF(module);
if (hook == NULL) {
- if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
goto warn;
}
PyMem_RawFree(envar);
@@ -487,7 +528,7 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
warn:
/* If any of the imports went wrong, then warn and ignore. */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
int status = PyErr_WarnFormat(
PyExc_RuntimeWarning, 0,
"Ignoring unimportable $PYTHONBREAKPOINT: \"%s\"", envar);
@@ -513,7 +554,7 @@ PyDoc_STRVAR(breakpointhook_doc,
Helper function for sys_displayhook(). */
static int
-sys_displayhook_unencodable(PyObject *outf, PyObject *o)
+sys_displayhook_unencodable(PyThreadState *tstate, PyObject *outf, PyObject *o)
{
PyObject *stdout_encoding = NULL;
PyObject *encoded, *escaped_str, *repr_str, *buffer, *result;
@@ -547,7 +588,7 @@ sys_displayhook_unencodable(PyObject *outf, PyObject *o)
Py_DECREF(result);
}
else {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
escaped_str = PyUnicode_FromEncodedObject(encoded,
stdout_encoding_str,
"strict");
@@ -585,11 +626,13 @@ sys_displayhook(PyObject *module, PyObject *o)
PyObject *builtins;
static PyObject *newline = NULL;
int err;
+ PyThreadState *tstate = _PyThreadState_GET();
builtins = _PyImport_GetModuleId(&PyId_builtins);
if (builtins == NULL) {
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_RuntimeError, "lost builtins module");
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_SetString(tstate, PyExc_RuntimeError,
+ "lost builtins module");
}
return NULL;
}
@@ -603,19 +646,20 @@ sys_displayhook(PyObject *module, PyObject *o)
}
if (_PyObject_SetAttrId(builtins, &PyId__, Py_None) != 0)
return NULL;
- outf = _PySys_GetObjectId(&PyId_stdout);
+ outf = sys_get_object_id(tstate, &PyId_stdout);
if (outf == NULL || outf == Py_None) {
- PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
+ _PyErr_SetString(tstate, PyExc_RuntimeError, "lost sys.stdout");
return NULL;
}
if (PyFile_WriteObject(o, outf, 0) != 0) {
- if (PyErr_ExceptionMatches(PyExc_UnicodeEncodeError)) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_UnicodeEncodeError)) {
/* repr(o) is not encodable to sys.stdout.encoding with
* sys.stdout.errors error handler (which is probably 'strict') */
- PyErr_Clear();
- err = sys_displayhook_unencodable(outf, o);
- if (err)
+ _PyErr_Clear(tstate);
+ err = sys_displayhook_unencodable(tstate, outf, o);
+ if (err) {
return NULL;
+ }
}
else {
return NULL;
@@ -722,7 +766,8 @@ sys_exit_impl(PyObject *module, PyObject *status)
/*[clinic end generated code: output=13870986c1ab2ec0 input=a737351f86685e9c]*/
{
/* Raise SystemExit so callers may catch it or clean up. */
- PyErr_SetObject(PyExc_SystemExit, status);
+ PyThreadState *tstate = _PyThreadState_GET();
+ _PyErr_SetObject(tstate, PyExc_SystemExit, status);
return NULL;
}
@@ -751,8 +796,8 @@ static PyObject *
sys_getfilesystemencoding_impl(PyObject *module)
/*[clinic end generated code: output=1dc4bdbe9be44aa7 input=8475f8649b8c7d8c]*/
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- const PyConfig *config = &interp->config;
+ PyThreadState *tstate = _PyThreadState_GET();
+ const PyConfig *config = &tstate->interp->config;
return PyUnicode_FromWideChar(config->filesystem_encoding, -1);
}
@@ -766,8 +811,8 @@ static PyObject *
sys_getfilesystemencodeerrors_impl(PyObject *module)
/*[clinic end generated code: output=ba77b36bbf7c96f5 input=22a1e8365566f1e5]*/
{
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- const PyConfig *config = &interp->config;
+ PyThreadState *tstate = _PyThreadState_GET();
+ const PyConfig *config = &tstate->interp->config;
return PyUnicode_FromWideChar(config->filesystem_errors, -1);
}
@@ -788,14 +833,15 @@ static PyObject *
sys_intern_impl(PyObject *module, PyObject *s)
/*[clinic end generated code: output=be680c24f5c9e5d6 input=849483c006924e2f]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
if (PyUnicode_CheckExact(s)) {
Py_INCREF(s);
PyUnicode_InternInPlace(&s);
return s;
}
else {
- PyErr_Format(PyExc_TypeError,
- "can't intern %.400s", s->ob_type->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "can't intern %.400s", s->ob_type->tp_name);
return NULL;
}
}
@@ -833,19 +879,17 @@ static PyObject *
call_trampoline(PyObject* callback,
PyFrameObject *frame, int what, PyObject *arg)
{
- PyObject *result;
- PyObject *stack[3];
-
if (PyFrame_FastToLocalsWithError(frame) < 0) {
return NULL;
}
+ PyObject *stack[3];
stack[0] = (PyObject *)frame;
stack[1] = whatstrings[what];
stack[2] = (arg != NULL) ? arg : Py_None;
/* call the Python-level function */
- result = _PyObject_FastCall(callback, stack, 3);
+ PyObject *result = _PyObject_FastCall(callback, stack, 3);
PyFrame_LocalsToFast(frame, 1);
if (result == NULL) {
@@ -1001,11 +1045,12 @@ sys_setcheckinterval_impl(PyObject *module, int n)
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"sys.getcheckinterval() and sys.setcheckinterval() "
"are deprecated. Use sys.setswitchinterval() "
- "instead.", 1) < 0)
+ "instead.", 1) < 0) {
return NULL;
+ }
- PyInterpreterState *interp = _PyInterpreterState_Get();
- interp->check_interval = n;
+ PyThreadState *tstate = _PyThreadState_GET();
+ tstate->interp->check_interval = n;
Py_RETURN_NONE;
}
@@ -1022,10 +1067,12 @@ sys_getcheckinterval_impl(PyObject *module)
if (PyErr_WarnEx(PyExc_DeprecationWarning,
"sys.getcheckinterval() and sys.setcheckinterval() "
"are deprecated. Use sys.getswitchinterval() "
- "instead.", 1) < 0)
+ "instead.", 1) < 0) {
return NULL;
- PyInterpreterState *interp = _PyInterpreterState_Get();
- return PyLong_FromLong(interp->check_interval);
+ }
+
+ PyThreadState *tstate = _PyThreadState_GET();
+ return PyLong_FromLong(tstate->interp->check_interval);
}
/*[clinic input]
@@ -1048,9 +1095,10 @@ static PyObject *
sys_setswitchinterval_impl(PyObject *module, double interval)
/*[clinic end generated code: output=65a19629e5153983 input=561b477134df91d9]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
if (interval <= 0.0) {
- PyErr_SetString(PyExc_ValueError,
- "switch interval must be strictly positive");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "switch interval must be strictly positive");
return NULL;
}
_PyEval_SetSwitchInterval((unsigned long) (1e6 * interval));
@@ -1089,11 +1137,11 @@ sys_setrecursionlimit_impl(PyObject *module, int new_limit)
/*[clinic end generated code: output=35e1c64754800ace input=b0f7a23393924af3]*/
{
int mark;
- PyThreadState *tstate;
+ PyThreadState *tstate = _PyThreadState_GET();
if (new_limit < 1) {
- PyErr_SetString(PyExc_ValueError,
- "recursion limit must be greater or equal than 1");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "recursion limit must be greater or equal than 1");
return NULL;
}
@@ -1107,12 +1155,11 @@ sys_setrecursionlimit_impl(PyObject *module, int new_limit)
the new low-water mark. Otherwise it may not be possible anymore to
reset the overflowed flag to 0. */
mark = _Py_RecursionLimitLowerWaterMark(new_limit);
- tstate = _PyThreadState_GET();
if (tstate->recursion_depth >= mark) {
- PyErr_Format(PyExc_RecursionError,
- "cannot set the recursion limit to %i at "
- "the recursion depth %i: the limit is too low",
- new_limit, tstate->recursion_depth);
+ _PyErr_Format(tstate, PyExc_RecursionError,
+ "cannot set the recursion limit to %i at "
+ "the recursion depth %i: the limit is too low",
+ new_limit, tstate->recursion_depth);
return NULL;
}
@@ -1137,11 +1184,12 @@ static PyObject *
sys_set_coroutine_origin_tracking_depth_impl(PyObject *module, int depth)
/*[clinic end generated code: output=0a2123c1cc6759c5 input=a1d0a05f89d2c426]*/
{
+ PyThreadState *tstate = _PyThreadState_GET();
if (depth < 0) {
- PyErr_SetString(PyExc_ValueError, "depth must be >= 0");
+ _PyErr_SetString(tstate, PyExc_ValueError, "depth must be >= 0");
return NULL;
}
- _PyEval_SetCoroutineOriginTrackingDepth(depth);
+ _PyEval_SetCoroutineOriginTrackingDepth(tstate, depth);
Py_RETURN_NONE;
}
@@ -1185,6 +1233,7 @@ sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
static char *keywords[] = {"firstiter", "finalizer", NULL};
PyObject *firstiter = NULL;
PyObject *finalizer = NULL;
+ PyThreadState *tstate = _PyThreadState_GET();
if (!PyArg_ParseTupleAndKeywords(
args, kw, "|OO", keywords,
@@ -1194,9 +1243,9 @@ sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
if (finalizer && finalizer != Py_None) {
if (!PyCallable_Check(finalizer)) {
- PyErr_Format(PyExc_TypeError,
- "callable finalizer expected, got %.50s",
- Py_TYPE(finalizer)->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "callable finalizer expected, got %.50s",
+ Py_TYPE(finalizer)->tp_name);
return NULL;
}
_PyEval_SetAsyncGenFinalizer(finalizer);
@@ -1207,9 +1256,9 @@ sys_set_asyncgen_hooks(PyObject *self, PyObject *args, PyObject *kw)
if (firstiter && firstiter != Py_None) {
if (!PyCallable_Check(firstiter)) {
- PyErr_Format(PyExc_TypeError,
- "callable firstiter expected, got %.50s",
- Py_TYPE(firstiter)->tp_name);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "callable firstiter expected, got %.50s",
+ Py_TYPE(firstiter)->tp_name);
return NULL;
}
_PyEval_SetAsyncGenFirstiter(firstiter);
@@ -1297,7 +1346,7 @@ static PyStructSequence_Desc hash_info_desc = {
};
static PyObject *
-get_hash_info(void)
+get_hash_info(PyThreadState *tstate)
{
PyObject *hash_info;
int field = 0;
@@ -1324,7 +1373,7 @@ get_hash_info(void)
PyLong_FromLong(hashfunc->seed_bits));
PyStructSequence_SET_ITEM(hash_info, field++,
PyLong_FromLong(Py_HASH_CUTOFF));
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_CLEAR(hash_info);
return NULL;
}
@@ -1408,6 +1457,7 @@ sys_getwindowsversion_impl(PyObject *module)
wchar_t kernel32_path[MAX_PATH];
LPVOID verblock;
DWORD verblock_size;
+ PyThreadState *tstate = _PyThreadState_GET();
ver.dwOSVersionInfoSize = sizeof(ver);
if (!GetVersionExW((OSVERSIONINFOW*) &ver))
@@ -1458,7 +1508,7 @@ sys_getwindowsversion_impl(PyObject *module)
realBuild
));
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_DECREF(version);
return NULL;
}
@@ -1515,8 +1565,8 @@ static PyObject *
sys_setdlopenflags_impl(PyObject *module, int new_val)
/*[clinic end generated code: output=ec918b7fe0a37281 input=4c838211e857a77f]*/
{
- PyInterpreterState *interp = _PyInterpreterState_Get();
- interp->dlopenflags = new_val;
+ PyThreadState *tstate = _PyThreadState_GET();
+ tstate->interp->dlopenflags = new_val;
Py_RETURN_NONE;
}
@@ -1533,8 +1583,8 @@ static PyObject *
sys_getdlopenflags_impl(PyObject *module)
/*[clinic end generated code: output=e92cd1bc5005da6e input=dc4ea0899c53b4b6]*/
{
- PyInterpreterState *interp = _PyInterpreterState_Get();
- return PyLong_FromLong(interp->dlopenflags);
+ PyThreadState *tstate = _PyThreadState_GET();
+ return PyLong_FromLong(tstate->interp->dlopenflags);
}
#endif /* HAVE_DLOPEN */
@@ -1566,17 +1616,20 @@ _PySys_GetSizeOf(PyObject *o)
PyObject *res = NULL;
PyObject *method;
Py_ssize_t size;
+ PyThreadState *tstate = _PyThreadState_GET();
/* Make sure the type is initialized. float gets initialized late */
- if (PyType_Ready(Py_TYPE(o)) < 0)
+ if (PyType_Ready(Py_TYPE(o)) < 0) {
return (size_t)-1;
+ }
method = _PyObject_LookupSpecial(o, &PyId___sizeof__);
if (method == NULL) {
- if (!PyErr_Occurred())
- PyErr_Format(PyExc_TypeError,
- "Type %.100s doesn't define __sizeof__",
- Py_TYPE(o)->tp_name);
+ if (!_PyErr_Occurred(tstate)) {
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "Type %.100s doesn't define __sizeof__",
+ Py_TYPE(o)->tp_name);
+ }
}
else {
res = _PyObject_CallNoArg(method);
@@ -1588,11 +1641,12 @@ _PySys_GetSizeOf(PyObject *o)
size = PyLong_AsSsize_t(res);
Py_DECREF(res);
- if (size == -1 && PyErr_Occurred())
+ if (size == -1 && _PyErr_Occurred(tstate))
return (size_t)-1;
if (size < 0) {
- PyErr_SetString(PyExc_ValueError, "__sizeof__() should return >= 0");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "__sizeof__() should return >= 0");
return (size_t)-1;
}
@@ -1608,17 +1662,19 @@ sys_getsizeof(PyObject *self, PyObject *args, PyObject *kwds)
static char *kwlist[] = {"object", "default", 0};
size_t size;
PyObject *o, *dflt = NULL;
+ PyThreadState *tstate = _PyThreadState_GET();
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:getsizeof",
- kwlist, &o, &dflt))
+ kwlist, &o, &dflt)) {
return NULL;
+ }
size = _PySys_GetSizeOf(o);
- if (size == (size_t)-1 && PyErr_Occurred()) {
+ if (size == (size_t)-1 && _PyErr_Occurred(tstate)) {
/* Has a default value been given */
- if (dflt != NULL && PyErr_ExceptionMatches(PyExc_TypeError)) {
- PyErr_Clear();
+ if (dflt != NULL && _PyErr_ExceptionMatches(tstate, PyExc_TypeError)) {
+ _PyErr_Clear(tstate);
Py_INCREF(dflt);
return dflt;
}
@@ -1716,7 +1772,8 @@ static PyObject *
sys__getframe_impl(PyObject *module, int depth)
/*[clinic end generated code: output=d438776c04d59804 input=c1be8a6464b11ee5]*/
{
- PyFrameObject *f = _PyThreadState_GET()->frame;
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyFrameObject *f = tstate->frame;
if (PySys_Audit("sys._getframe", "O", f) < 0) {
return NULL;
@@ -1727,8 +1784,8 @@ sys__getframe_impl(PyObject *module, int depth)
--depth;
}
if (f == NULL) {
- PyErr_SetString(PyExc_ValueError,
- "call stack is not deep enough");
+ _PyErr_SetString(tstate, PyExc_ValueError,
+ "call stack is not deep enough");
return NULL;
}
Py_INCREF(f);
@@ -2078,10 +2135,9 @@ _clear_all_preinit_options(void)
}
static int
-_PySys_ReadPreInitOptions(void)
+sys_read_preinit_options(PyThreadState *tstate)
{
/* Rerun the add commands with the actual sys module available */
- PyThreadState *tstate = _PyThreadState_GET();
if (tstate == NULL) {
/* Still don't have a thread state, so something is wrong! */
return -1;
@@ -2102,9 +2158,9 @@ _PySys_ReadPreInitOptions(void)
}
static PyObject *
-get_warnoptions(void)
+get_warnoptions(PyThreadState *tstate)
{
- PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+ PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
if (warnoptions == NULL || !PyList_Check(warnoptions)) {
/* PEP432 TODO: we can reach this if warnoptions is NULL in the main
* interpreter config. When that happens, we need to properly set
@@ -2117,9 +2173,10 @@ get_warnoptions(void)
* reachable again.
*/
warnoptions = PyList_New(0);
- if (warnoptions == NULL)
+ if (warnoptions == NULL) {
return NULL;
- if (_PySys_SetObjectId(&PyId_warnoptions, warnoptions)) {
+ }
+ if (sys_set_object_id(tstate, &PyId_warnoptions, warnoptions)) {
Py_DECREF(warnoptions);
return NULL;
}
@@ -2137,16 +2194,16 @@ PySys_ResetWarnOptions(void)
return;
}
- PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+ PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
if (warnoptions == NULL || !PyList_Check(warnoptions))
return;
PyList_SetSlice(warnoptions, 0, PyList_GET_SIZE(warnoptions), NULL);
}
static int
-_PySys_AddWarnOptionWithError(PyObject *option)
+_PySys_AddWarnOptionWithError(PyThreadState *tstate, PyObject *option)
{
- PyObject *warnoptions = get_warnoptions();
+ PyObject *warnoptions = get_warnoptions(tstate);
if (warnoptions == NULL) {
return -1;
}
@@ -2159,10 +2216,11 @@ _PySys_AddWarnOptionWithError(PyObject *option)
void
PySys_AddWarnOptionUnicode(PyObject *option)
{
- if (_PySys_AddWarnOptionWithError(option) < 0) {
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (_PySys_AddWarnOptionWithError(tstate, option) < 0) {
/* No return value, therefore clear error state if possible */
- if (_PyThreadState_UncheckedGet()) {
- PyErr_Clear();
+ if (tstate) {
+ _PyErr_Clear(tstate);
}
}
}
@@ -2186,15 +2244,16 @@ PySys_AddWarnOption(const wchar_t *s)
int
PySys_HasWarnOptions(void)
{
- PyObject *warnoptions = _PySys_GetObjectId(&PyId_warnoptions);
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *warnoptions = sys_get_object_id(tstate, &PyId_warnoptions);
return (warnoptions != NULL && PyList_Check(warnoptions)
&& PyList_GET_SIZE(warnoptions) > 0);
}
static PyObject *
-get_xoptions(void)
+get_xoptions(PyThreadState *tstate)
{
- PyObject *xoptions = _PySys_GetObjectId(&PyId__xoptions);
+ PyObject *xoptions = sys_get_object_id(tstate, &PyId__xoptions);
if (xoptions == NULL || !PyDict_Check(xoptions)) {
/* PEP432 TODO: we can reach this if xoptions is NULL in the main
* interpreter config. When that happens, we need to properly set
@@ -2207,9 +2266,10 @@ get_xoptions(void)
* reachable again.
*/
xoptions = PyDict_New();
- if (xoptions == NULL)
+ if (xoptions == NULL) {
return NULL;
- if (_PySys_SetObjectId(&PyId__xoptions, xoptions)) {
+ }
+ if (sys_set_object_id(tstate, &PyId__xoptions, xoptions)) {
Py_DECREF(xoptions);
return NULL;
}
@@ -2223,7 +2283,8 @@ _PySys_AddXOptionWithError(const wchar_t *s)
{
PyObject *name = NULL, *value = NULL;
- PyObject *opts = get_xoptions();
+ PyThreadState *tstate = _PyThreadState_GET();
+ PyObject *opts = get_xoptions(tstate);
if (opts == NULL) {
goto error;
}
@@ -2264,8 +2325,8 @@ PySys_AddXOption(const wchar_t *s)
}
if (_PySys_AddXOptionWithError(s) < 0) {
/* No return value, therefore clear error state if possible */
- if (_PyThreadState_UncheckedGet()) {
- PyErr_Clear();
+ if (tstate) {
+ _PyErr_Clear(tstate);
}
}
}
@@ -2273,7 +2334,8 @@ PySys_AddXOption(const wchar_t *s)
PyObject *
PySys_GetXOptions(void)
{
- return get_xoptions();
+ PyThreadState *tstate = _PyThreadState_GET();
+ return get_xoptions(tstate);
}
/* XXX This doc string is too long to be a single string literal in VC++ 5.0.
@@ -2413,12 +2475,12 @@ static PyStructSequence_Desc flags_desc = {
};
static PyObject*
-make_flags(_PyRuntimeState *runtime, PyInterpreterState *interp)
+make_flags(_PyRuntimeState *runtime, PyThreadState *tstate)
{
int pos = 0;
PyObject *seq;
const PyPreConfig *preconfig = &runtime->preconfig;
- const PyConfig *config = &interp->config;
+ const PyConfig *config = &tstate->interp->config;
seq = PyStructSequence_New(&FlagsType);
if (seq == NULL)
@@ -2446,7 +2508,7 @@ make_flags(_PyRuntimeState *runtime, PyInterpreterState *interp)
SetFlag(preconfig->utf8_mode);
#undef SetFlag
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_DECREF(seq);
return NULL;
}
@@ -2477,7 +2539,7 @@ static PyStructSequence_Desc version_info_desc = {
};
static PyObject *
-make_version_info(void)
+make_version_info(PyThreadState *tstate)
{
PyObject *version_info;
char *s;
@@ -2515,7 +2577,7 @@ make_version_info(void)
#undef SetIntItem
#undef SetStrItem
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
Py_CLEAR(version_info);
return NULL;
}
@@ -2633,7 +2695,7 @@ static struct PyModuleDef sysmodule = {
} while (0)
static PyStatus
-_PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
+_PySys_InitCore(_PyRuntimeState *runtime, PyThreadState *tstate,
PyObject *sysdict)
{
PyObject *version_info;
@@ -2678,7 +2740,7 @@ _PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
}
}
SET_SYS_FROM_STRING("hash_info",
- get_hash_info());
+ get_hash_info(tstate));
SET_SYS_FROM_STRING("maxunicode",
PyLong_FromLong(0x10FFFF));
SET_SYS_FROM_STRING("builtin_module_names",
@@ -2709,14 +2771,15 @@ _PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
goto type_init_failed;
}
}
- version_info = make_version_info();
+ version_info = make_version_info(tstate);
SET_SYS_FROM_STRING("version_info", version_info);
/* prevent user from creating new instances */
VersionInfoType.tp_init = NULL;
VersionInfoType.tp_new = NULL;
res = PyDict_DelItemString(VersionInfoType.tp_dict, "__new__");
- if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError))
- PyErr_Clear();
+ if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
+ }
/* implementation */
SET_SYS_FROM_STRING("implementation", make_impl_info(version_info));
@@ -2728,7 +2791,7 @@ _PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
}
}
/* Set flags to their default values (updated by _PySys_InitMain()) */
- SET_SYS_FROM_STRING("flags", make_flags(runtime, interp));
+ SET_SYS_FROM_STRING("flags", make_flags(runtime, tstate));
#if defined(MS_WINDOWS)
/* getwindowsversion */
@@ -2740,10 +2803,10 @@ _PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
/* prevent user from creating new instances */
WindowsVersionType.tp_init = NULL;
WindowsVersionType.tp_new = NULL;
- assert(!PyErr_Occurred());
+ assert(!_PyErr_Occurred(tstate));
res = PyDict_DelItemString(WindowsVersionType.tp_dict, "__new__");
- if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) {
- PyErr_Clear();
+ if (res < 0 && _PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
+ _PyErr_Clear(tstate);
}
#endif
@@ -2766,7 +2829,7 @@ _PySys_InitCore(_PyRuntimeState *runtime, PyInterpreterState *interp,
}
}
- if (PyErr_Occurred()) {
+ if (_PyErr_Occurred(tstate)) {
goto err_occurred;
}
return _PyStatus_OK();
@@ -2849,10 +2912,10 @@ sys_create_xoptions_dict(const PyConfig *config)
int
-_PySys_InitMain(_PyRuntimeState *runtime, PyInterpreterState *interp)
+_PySys_InitMain(_PyRuntimeState *runtime, PyThreadState *tstate)
{
- PyObject *sysdict = interp->sysdict;
- const PyConfig *config = &interp->config;
+ PyObject *sysdict = tstate->interp->sysdict;
+ const PyConfig *config = &tstate->interp->config;
int res;
#define COPY_LIST(KEY, VALUE) \
@@ -2903,34 +2966,37 @@ _PySys_InitMain(_PyRuntimeState *runtime, PyInterpreterState *interp)
#undef SET_SYS_FROM_WSTR
/* Set flags to their final values */
- SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags(runtime, interp));
+ SET_SYS_FROM_STRING_INT_RESULT("flags", make_flags(runtime, tstate));
/* prevent user from creating new instances */
FlagsType.tp_init = NULL;
FlagsType.tp_new = NULL;
res = PyDict_DelItemString(FlagsType.tp_dict, "__new__");
if (res < 0) {
- if (!PyErr_ExceptionMatches(PyExc_KeyError)) {
+ if (!_PyErr_ExceptionMatches(tstate, PyExc_KeyError)) {
return res;
}
- PyErr_Clear();
+ _PyErr_Clear(tstate);
}
SET_SYS_FROM_STRING_INT_RESULT("dont_write_bytecode",
PyBool_FromLong(!config->write_bytecode));
- if (get_warnoptions() == NULL)
+ if (get_warnoptions(tstate) == NULL) {
return -1;
+ }
- if (get_xoptions() == NULL)
+ if (get_xoptions(tstate) == NULL)
return -1;
/* Transfer any sys.warnoptions and sys._xoptions set directly
* by an embedding application from the linked list to the module. */
- if (_PySys_ReadPreInitOptions() != 0)
+ if (sys_read_preinit_options(tstate) != 0)
return -1;
- if (PyErr_Occurred())
- return -1;
+ if (_PyErr_Occurred(tstate)) {
+ goto err_occurred;
+ }
+
return 0;
err_occurred:
@@ -2973,6 +3039,8 @@ PyStatus
_PySys_Create(_PyRuntimeState *runtime, PyInterpreterState *interp,
PyObject **sysmod_p)
{
+ PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
+
PyObject *modules = PyDict_New();
if (modules == NULL) {
return _PyStatus_ERR("can't make modules dictionary");
@@ -3000,7 +3068,7 @@ _PySys_Create(_PyRuntimeState *runtime, PyInterpreterState *interp,
return status;
}
- status = _PySys_InitCore(runtime, interp, sysdict);
+ status = _PySys_InitCore(runtime, tstate, sysdict);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
@@ -3051,8 +3119,10 @@ PySys_SetPath(const wchar_t *path)
PyObject *v;
if ((v = makepathobject(path, DELIM)) == NULL)
Py_FatalError("can't create sys.path");
- if (_PySys_SetObjectId(&PyId_path, v) != 0)
+ PyThreadState *tstate = _PyThreadState_GET();
+ if (sys_set_object_id(tstate, &PyId_path, v) != 0) {
Py_FatalError("can't assign sys.path");
+ }
Py_DECREF(v);
}
@@ -3078,6 +3148,8 @@ make_sys_argv(int argc, wchar_t * const * argv)
void
PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
{
+ PyThreadState *tstate = _PyThreadState_GET();
+
if (argc < 1 || argv == NULL) {
/* Ensure at least one (empty) argument is seen */
wchar_t* empty_argv[1] = {L""};
@@ -3089,7 +3161,7 @@ PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
if (av == NULL) {
Py_FatalError("no mem for sys.argv");
}
- if (PySys_SetObject("argv", av) != 0) {
+ if (sys_set_object(tstate, "argv", av) != 0) {
Py_DECREF(av);
Py_FatalError("can't assign sys.argv");
}
@@ -3105,7 +3177,7 @@ PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
Py_FatalError("can't compute path0 from argv");
}
- PyObject *sys_path = _PySys_GetObjectId(&PyId_path);
+ PyObject *sys_path = sys_get_object_id(tstate, &PyId_path);
if (sys_path != NULL) {
if (PyList_Insert(sys_path, 0, path0) < 0) {
Py_DECREF(path0);
@@ -3208,12 +3280,13 @@ sys_write(_Py_Identifier *key, FILE *fp, const char *format, va_list va)
PyObject *error_type, *error_value, *error_traceback;
char buffer[1001];
int written;
+ PyThreadState *tstate = _PyThreadState_GET();
- PyErr_Fetch(&error_type, &error_value, &error_traceback);
- file = _PySys_GetObjectId(key);
+ _PyErr_Fetch(tstate, &error_type, &error_value, &error_traceback);
+ file = sys_get_object_id(tstate, key);
written = PyOS_vsnprintf(buffer, sizeof(buffer), format, va);
if (sys_pyfile_write(buffer, file) != 0) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
fputs(buffer, fp);
}
if (written < 0 || (size_t)written >= sizeof(buffer)) {
@@ -3221,7 +3294,7 @@ sys_write(_Py_Identifier *key, FILE *fp, const char *format, va_list va)
if (sys_pyfile_write(truncated, file) != 0)
fputs(truncated, fp);
}
- PyErr_Restore(error_type, error_value, error_traceback);
+ _PyErr_Restore(tstate, error_type, error_value, error_traceback);
}
void
@@ -3250,20 +3323,21 @@ sys_format(_Py_Identifier *key, FILE *fp, const char *format, va_list va)
PyObject *file, *message;
PyObject *error_type, *error_value, *error_traceback;
const char *utf8;
+ PyThreadState *tstate = _PyThreadState_GET();
- PyErr_Fetch(&error_type, &error_value, &error_traceback);
- file = _PySys_GetObjectId(key);
+ _PyErr_Fetch(tstate, &error_type, &error_value, &error_traceback);
+ file = sys_get_object_id(tstate, key);
message = PyUnicode_FromFormatV(format, va);
if (message != NULL) {
if (sys_pyfile_write_unicode(message, file) != 0) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
utf8 = PyUnicode_AsUTF8(message);
if (utf8 != NULL)
fputs(utf8, fp);
}
Py_DECREF(message);
}
- PyErr_Restore(error_type, error_value, error_traceback);
+ _PyErr_Restore(tstate, error_type, error_value, error_traceback);
}
void
[View Less]
1
0

bpo-37213: Handle negative line deltas correctly in the peephole optimizer (GH-13969)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/5282b3b1d2e0bdf13899b1616aea20a6e3…
commit: 5282b3b1d2e0bdf13899b1616aea20a6e3c4e13e
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T11:35:40-07:00
summary:
bpo-37213: Handle negative line deltas correctly in the peephole optimizer (GH-13969)
The peephole optimizer was not optimizing correctly bytecode after negative deltas were …
[View More]introduced. This is due to the fact that some special values (255) were being searched for in both instruction pointer delta and line number deltas.
(cherry picked from commit 3498c642f4e83f3d8e2214654c0fa8e0d51cebe5)
Co-authored-by: Pablo Galindo <Pablogsal(a)gmail.com>
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst
M Lib/test/test_peepholer.py
M Python/importlib.h
M Python/importlib_external.h
M Python/importlib_zipimport.h
M Python/peephole.c
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 794d104d5919..860ceeb003e7 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -1,5 +1,7 @@
import dis
import unittest
+import types
+import textwrap
from test.bytecode_helper import BytecodeTestCase
@@ -18,6 +20,27 @@ def count_instr_recursively(f, opname):
class TestTranforms(BytecodeTestCase):
+ def check_jump_targets(self, code):
+ instructions = list(dis.get_instructions(code))
+ targets = {instr.offset: instr for instr in instructions}
+ for instr in instructions:
+ if 'JUMP_' not in instr.opname:
+ continue
+ tgt = targets[instr.argval]
+ # jump to unconditional jump
+ if tgt.opname in ('JUMP_ABSOLUTE', 'JUMP_FORWARD'):
+ self.fail(f'{instr.opname} at {instr.offset} '
+ f'jumps to {tgt.opname} at {tgt.offset}')
+ # unconditional jump to RETURN_VALUE
+ if (instr.opname in ('JUMP_ABSOLUTE', 'JUMP_FORWARD') and
+ tgt.opname == 'RETURN_VALUE'):
+ self.fail(f'{instr.opname} at {instr.offset} '
+ f'jumps to {tgt.opname} at {tgt.offset}')
+ # JUMP_IF_*_OR_POP jump to conditional jump
+ if '_OR_POP' in instr.opname and 'JUMP_IF_' in tgt.opname:
+ self.fail(f'{instr.opname} at {instr.offset} '
+ f'jumps to {tgt.opname} at {tgt.offset}')
+
def test_unot(self):
# UNARY_NOT POP_JUMP_IF_FALSE --> POP_JUMP_IF_TRUE'
def unot(x):
@@ -259,13 +282,69 @@ def f(x):
def test_elim_jump_to_return(self):
# JUMP_FORWARD to RETURN --> RETURN
def f(cond, true_value, false_value):
- return true_value if cond else false_value
+ # Intentionally use two-line expression to test issue37213.
+ return (true_value if cond
+ else false_value)
+ self.check_jump_targets(f)
self.assertNotInBytecode(f, 'JUMP_FORWARD')
self.assertNotInBytecode(f, 'JUMP_ABSOLUTE')
returns = [instr for instr in dis.get_instructions(f)
if instr.opname == 'RETURN_VALUE']
self.assertEqual(len(returns), 2)
+ def test_elim_jump_to_uncond_jump(self):
+ # POP_JUMP_IF_FALSE to JUMP_FORWARD --> POP_JUMP_IF_FALSE to non-jump
+ def f():
+ if a:
+ # Intentionally use two-line expression to test issue37213.
+ if (c
+ or d):
+ foo()
+ else:
+ baz()
+ self.check_jump_targets(f)
+
+ def test_elim_jump_to_uncond_jump2(self):
+ # POP_JUMP_IF_FALSE to JUMP_ABSOLUTE --> POP_JUMP_IF_FALSE to non-jump
+ def f():
+ while a:
+ # Intentionally use two-line expression to test issue37213.
+ if (c
+ or d):
+ a = foo()
+ self.check_jump_targets(f)
+
+ def test_elim_jump_to_uncond_jump3(self):
+ # Intentionally use two-line expressions to test issue37213.
+ # JUMP_IF_FALSE_OR_POP to JUMP_IF_FALSE_OR_POP --> JUMP_IF_FALSE_OR_POP to non-jump
+ def f(a, b, c):
+ return ((a and b)
+ and c)
+ self.check_jump_targets(f)
+ self.assertEqual(count_instr_recursively(f, 'JUMP_IF_FALSE_OR_POP'), 2)
+ # JUMP_IF_TRUE_OR_POP to JUMP_IF_TRUE_OR_POP --> JUMP_IF_TRUE_OR_POP to non-jump
+ def f(a, b, c):
+ return ((a or b)
+ or c)
+ self.check_jump_targets(f)
+ self.assertEqual(count_instr_recursively(f, 'JUMP_IF_TRUE_OR_POP'), 2)
+ # JUMP_IF_FALSE_OR_POP to JUMP_IF_TRUE_OR_POP --> POP_JUMP_IF_FALSE to non-jump
+ def f(a, b, c):
+ return ((a and b)
+ or c)
+ self.check_jump_targets(f)
+ self.assertNotInBytecode(f, 'JUMP_IF_FALSE_OR_POP')
+ self.assertInBytecode(f, 'JUMP_IF_TRUE_OR_POP')
+ self.assertInBytecode(f, 'POP_JUMP_IF_FALSE')
+ # JUMP_IF_TRUE_OR_POP to JUMP_IF_FALSE_OR_POP --> POP_JUMP_IF_TRUE to non-jump
+ def f(a, b, c):
+ return ((a or b)
+ and c)
+ self.check_jump_targets(f)
+ self.assertNotInBytecode(f, 'JUMP_IF_TRUE_OR_POP')
+ self.assertInBytecode(f, 'JUMP_IF_FALSE_OR_POP')
+ self.assertInBytecode(f, 'POP_JUMP_IF_TRUE')
+
def test_elim_jump_after_return1(self):
# Eliminate dead code: jumps immediately after returns can't be reached
def f(cond1, cond2):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst
new file mode 100644
index 000000000000..b949883da9c2
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst
@@ -0,0 +1,2 @@
+Handle correctly negative line offsets in the peephole optimizer. Patch by
+Pablo Galindo.
diff --git a/Python/importlib.h b/Python/importlib.h
index 5bd1d179e2f0..a285a31e2065 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -670,1121 +670,1120 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
1,18,1,10,1,8,1,4,255,6,2,122,19,77,111,100,
117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,95,
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,114,0,0,0,124,0,
- 106,0,125,2,122,76,124,0,106,1,124,1,106,1,107,2,
+ 0,8,0,0,0,67,0,0,0,115,106,0,0,0,124,0,
+ 106,0,125,2,122,72,124,0,106,1,124,1,106,1,107,2,
111,76,124,0,106,2,124,1,106,2,107,2,111,76,124,0,
106,3,124,1,106,3,107,2,111,76,124,2,124,1,106,0,
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,87,0,
- 110,26,4,0,116,6,107,10,114,108,1,0,1,0,1,0,
- 89,0,100,1,83,0,89,0,110,2,88,0,100,0,83,0,
- 114,116,0,0,0,41,7,114,117,0,0,0,114,17,0,0,
- 0,114,109,0,0,0,114,113,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,106,0,0,0,41,3,114,30,0,0,0,90,5,111,
- 116,104,101,114,90,4,115,109,115,108,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,218,6,95,95,101,113,95,
- 95,108,1,0,0,115,30,0,0,0,0,1,6,1,2,1,
- 12,1,10,255,2,2,10,254,2,3,8,253,2,4,10,252,
- 2,5,10,251,8,6,14,1,122,17,77,111,100,117,108,101,
- 83,112,101,99,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,58,0,0,0,124,0,106,0,100,0,107,
- 8,114,52,124,0,106,1,100,0,107,9,114,52,124,0,106,
- 2,114,52,116,3,100,0,107,8,114,38,116,4,130,1,116,
- 3,160,5,124,0,106,1,161,1,124,0,95,0,124,0,106,
- 0,83,0,114,13,0,0,0,41,6,114,119,0,0,0,114,
- 113,0,0,0,114,118,0,0,0,218,19,95,98,111,111,116,
- 115,116,114,97,112,95,101,120,116,101,114,110,97,108,218,19,
- 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,
- 114,111,114,90,11,95,103,101,116,95,99,97,99,104,101,100,
- 114,47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 11,0,0,0,114,123,0,0,0,120,1,0,0,115,12,0,
- 0,0,0,2,10,1,16,1,8,1,4,1,14,1,122,17,
- 77,111,100,117,108,101,83,112,101,99,46,99,97,99,104,101,
- 100,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,10,0,0,0,124,
- 1,124,0,95,0,100,0,83,0,114,13,0,0,0,41,1,
- 114,119,0,0,0,41,2,114,30,0,0,0,114,123,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,123,0,0,0,129,1,0,0,115,2,0,0,0,0,2,
- 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,8,114,26,124,0,106,1,160,2,100,2,
- 161,1,100,3,25,0,83,0,124,0,106,1,83,0,100,1,
- 83,0,41,4,122,32,84,104,101,32,110,97,109,101,32,111,
- 102,32,116,104,101,32,109,111,100,117,108,101,39,115,32,112,
- 97,114,101,110,116,46,78,218,1,46,114,22,0,0,0,41,
- 3,114,117,0,0,0,114,17,0,0,0,218,10,114,112,97,
- 114,116,105,116,105,111,110,114,47,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,218,6,112,97,114,
- 101,110,116,133,1,0,0,115,6,0,0,0,0,3,10,1,
- 16,2,122,17,77,111,100,117,108,101,83,112,101,99,46,112,
- 97,114,101,110,116,99,1,0,0,0,0,0,0,0,0,0,
- 0,0,1,0,0,0,1,0,0,0,67,0,0,0,115,6,
- 0,0,0,124,0,106,0,83,0,114,13,0,0,0,41,1,
- 114,118,0,0,0,114,47,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,124,0,0,0,141,1,
- 0,0,115,2,0,0,0,0,2,122,23,77,111,100,117,108,
- 101,83,112,101,99,46,104,97,115,95,108,111,99,97,116,105,
- 111,110,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,14,0,0,0,
- 116,0,124,1,131,1,124,0,95,1,100,0,83,0,114,13,
- 0,0,0,41,2,218,4,98,111,111,108,114,118,0,0,0,
- 41,2,114,30,0,0,0,218,5,118,97,108,117,101,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,124,0,
- 0,0,145,1,0,0,115,2,0,0,0,0,2,41,12,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,48,0,0,0,114,125,0,
- 0,0,218,8,112,114,111,112,101,114,116,121,114,123,0,0,
- 0,218,6,115,101,116,116,101,114,114,130,0,0,0,114,124,
- 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,
- 0,0,114,11,0,0,0,114,112,0,0,0,49,1,0,0,
- 115,32,0,0,0,8,1,4,36,4,1,2,255,12,12,8,
- 10,8,12,2,1,10,8,4,1,10,3,2,1,10,7,2,
- 1,10,3,4,1,114,112,0,0,0,169,2,114,113,0,0,
- 0,114,115,0,0,0,99,2,0,0,0,0,0,0,0,2,
- 0,0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,
- 154,0,0,0,116,0,124,1,100,1,131,2,114,74,116,1,
- 100,2,107,8,114,22,116,2,130,1,116,1,106,3,125,4,
- 124,3,100,2,107,8,114,48,124,4,124,0,124,1,100,3,
- 141,2,83,0,124,3,114,56,103,0,110,2,100,2,125,5,
- 124,4,124,0,124,1,124,5,100,4,141,3,83,0,124,3,
- 100,2,107,8,114,138,116,0,124,1,100,5,131,2,114,134,
- 122,14,124,1,160,4,124,0,161,1,125,3,87,0,110,24,
- 4,0,116,5,107,10,114,130,1,0,1,0,1,0,100,2,
- 125,3,89,0,110,2,88,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,115,32,108,111,97,100,101,114,32,109,
- 101,116,104,111,100,115,46,90,12,103,101,116,95,102,105,108,
- 101,110,97,109,101,78,41,1,114,109,0,0,0,41,2,114,
- 109,0,0,0,114,117,0,0,0,114,115,0,0,0,70,114,
- 135,0,0,0,41,7,114,4,0,0,0,114,126,0,0,0,
- 114,127,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,114,115,
- 0,0,0,114,79,0,0,0,114,112,0,0,0,41,6,114,
- 17,0,0,0,114,109,0,0,0,114,113,0,0,0,114,115,
- 0,0,0,114,136,0,0,0,90,6,115,101,97,114,99,104,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
- 91,0,0,0,150,1,0,0,115,36,0,0,0,0,2,10,
- 1,8,1,4,1,6,2,8,1,12,1,12,1,6,1,2,
- 255,6,3,8,1,10,1,2,1,14,1,14,1,12,3,4,
- 2,114,91,0,0,0,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,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,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,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,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,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,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,113,0,0,0,70,84,41,13,114,105,0,0,0,114,
- 106,0,0,0,114,1,0,0,0,114,98,0,0,0,114,108,
- 0,0,0,218,7,95,79,82,73,71,73,78,218,10,95,95,
- 99,97,99,104,101,100,95,95,218,4,108,105,115,116,218,8,
- 95,95,112,97,116,104,95,95,114,112,0,0,0,114,118,0,
- 0,0,114,123,0,0,0,114,117,0,0,0,41,8,114,96,
- 0,0,0,114,109,0,0,0,114,113,0,0,0,114,95,0,
- 0,0,114,17,0,0,0,90,8,108,111,99,97,116,105,111,
- 110,114,123,0,0,0,114,117,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,218,17,95,115,112,101,
- 99,95,102,114,111,109,95,109,111,100,117,108,101,176,1,0,
- 0,115,72,0,0,0,0,2,2,1,10,1,14,1,6,2,
- 8,1,4,2,6,1,8,1,2,1,10,1,14,2,6,1,
- 2,1,10,1,14,1,10,1,8,1,8,1,2,1,10,1,
- 14,1,12,2,4,1,2,1,10,1,14,1,10,1,2,1,
- 14,1,16,1,10,2,14,1,20,1,6,1,6,1,114,142,
- 0,0,0,70,169,1,218,8,111,118,101,114,114,105,100,101,
- 99,2,0,0,0,0,0,0,0,1,0,0,0,5,0,0,
- 0,8,0,0,0,67,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,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,114,110,116,7,130,1,116,6,106,8,
- 125,4,124,4,160,9,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,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,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,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,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,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,0,0,114,98,0,0,0,218,11,95,
- 95,112,97,99,107,97,103,101,95,95,114,141,0,0,0,114,
- 108,0,0,0,114,139,0,0,0,41,21,114,6,0,0,0,
- 114,17,0,0,0,114,1,0,0,0,114,106,0,0,0,114,
- 109,0,0,0,114,117,0,0,0,114,126,0,0,0,114,127,
- 0,0,0,218,16,95,78,97,109,101,115,112,97,99,101,76,
- 111,97,100,101,114,218,7,95,95,110,101,119,95,95,90,5,
- 95,112,97,116,104,114,108,0,0,0,114,98,0,0,0,114,
- 130,0,0,0,114,145,0,0,0,114,105,0,0,0,114,141,
- 0,0,0,114,124,0,0,0,114,113,0,0,0,114,123,0,
- 0,0,114,139,0,0,0,41,5,114,95,0,0,0,114,96,
- 0,0,0,114,144,0,0,0,114,109,0,0,0,114,146,0,
+ 124,0,106,5,124,1,106,5,107,2,87,0,83,0,4,0,
+ 116,6,107,10,114,100,1,0,1,0,1,0,89,0,100,1,
+ 83,0,88,0,100,0,83,0,114,116,0,0,0,41,7,114,
+ 117,0,0,0,114,17,0,0,0,114,109,0,0,0,114,113,
+ 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,106,0,0,0,41,3,
+ 114,30,0,0,0,90,5,111,116,104,101,114,90,4,115,109,
+ 115,108,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,218,6,95,95,101,113,95,95,108,1,0,0,115,30,0,
+ 0,0,0,1,6,1,2,1,12,1,10,255,2,2,10,254,
+ 2,3,8,253,2,4,10,252,2,5,10,251,4,6,14,1,
+ 122,17,77,111,100,117,108,101,83,112,101,99,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,58,0,0,
+ 0,124,0,106,0,100,0,107,8,114,52,124,0,106,1,100,
+ 0,107,9,114,52,124,0,106,2,114,52,116,3,100,0,107,
+ 8,114,38,116,4,130,1,116,3,160,5,124,0,106,1,161,
+ 1,124,0,95,0,124,0,106,0,83,0,114,13,0,0,0,
+ 41,6,114,119,0,0,0,114,113,0,0,0,114,118,0,0,
+ 0,218,19,95,98,111,111,116,115,116,114,97,112,95,101,120,
+ 116,101,114,110,97,108,218,19,78,111,116,73,109,112,108,101,
+ 109,101,110,116,101,100,69,114,114,111,114,90,11,95,103,101,
+ 116,95,99,97,99,104,101,100,114,47,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,123,0,0,
+ 0,120,1,0,0,115,12,0,0,0,0,2,10,1,16,1,
+ 8,1,4,1,14,1,122,17,77,111,100,117,108,101,83,112,
+ 101,99,46,99,97,99,104,101,100,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,10,0,0,0,124,1,124,0,95,0,100,0,83,
+ 0,114,13,0,0,0,41,1,114,119,0,0,0,41,2,114,
+ 30,0,0,0,114,123,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,123,0,0,0,129,1,0,
+ 0,115,2,0,0,0,0,2,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,8,114,26,
+ 124,0,106,1,160,2,100,2,161,1,100,3,25,0,83,0,
+ 124,0,106,1,83,0,100,1,83,0,41,4,122,32,84,104,
+ 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,
+ 100,117,108,101,39,115,32,112,97,114,101,110,116,46,78,218,
+ 1,46,114,22,0,0,0,41,3,114,117,0,0,0,114,17,
+ 0,0,0,218,10,114,112,97,114,116,105,116,105,111,110,114,
+ 47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,218,6,112,97,114,101,110,116,133,1,0,0,115,
+ 6,0,0,0,0,3,10,1,16,2,122,17,77,111,100,117,
+ 108,101,83,112,101,99,46,112,97,114,101,110,116,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
+ 0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
+ 0,114,13,0,0,0,41,1,114,118,0,0,0,114,47,0,
0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
- 0,218,18,95,105,110,105,116,95,109,111,100,117,108,101,95,
- 97,116,116,114,115,221,1,0,0,115,96,0,0,0,0,4,
- 20,1,2,1,12,1,14,1,6,2,20,1,6,1,8,2,
- 10,1,8,1,4,1,6,2,10,1,8,1,6,11,6,1,
- 2,1,10,1,14,1,6,2,20,1,2,1,12,1,14,1,
- 6,2,2,1,10,1,16,1,6,2,24,1,12,1,2,1,
- 12,1,16,1,6,2,8,1,24,1,2,1,12,1,16,1,
- 6,2,24,1,12,1,2,1,12,1,16,1,6,1,114,148,
- 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,82,0,0,
- 0,100,1,125,1,116,0,124,0,106,1,100,2,131,2,114,
- 30,124,0,106,1,160,2,124,0,161,1,125,1,110,20,116,
- 0,124,0,106,1,100,3,131,2,114,50,116,3,100,4,131,
- 1,130,1,124,1,100,1,107,8,114,68,116,4,124,0,106,
- 5,131,1,125,1,116,6,124,0,124,1,131,2,1,0,124,
- 1,83,0,41,5,122,43,67,114,101,97,116,101,32,97,32,
- 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32,
- 116,104,101,32,112,114,111,118,105,100,101,100,32,115,112,101,
- 99,46,78,218,13,99,114,101,97,116,101,95,109,111,100,117,
- 108,101,218,11,101,120,101,99,95,109,111,100,117,108,101,122,
- 66,108,111,97,100,101,114,115,32,116,104,97,116,32,100,101,
- 102,105,110,101,32,101,120,101,99,95,109,111,100,117,108,101,
- 40,41,32,109,117,115,116,32,97,108,115,111,32,100,101,102,
- 105,110,101,32,99,114,101,97,116,101,95,109,111,100,117,108,
- 101,40,41,41,7,114,4,0,0,0,114,109,0,0,0,114,
- 149,0,0,0,114,79,0,0,0,114,18,0,0,0,114,17,
- 0,0,0,114,148,0,0,0,169,2,114,95,0,0,0,114,
- 96,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
- 0,0,0,218,16,109,111,100,117,108,101,95,102,114,111,109,
- 95,115,112,101,99,37,2,0,0,115,18,0,0,0,0,3,
- 4,1,12,3,14,1,12,1,8,2,8,1,10,1,10,1,
- 114,152,0,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,106,
- 0,0,0,124,0,106,0,100,1,107,8,114,14,100,2,110,
- 4,124,0,106,0,125,1,124,0,106,1,100,1,107,8,114,
- 66,124,0,106,2,100,1,107,8,114,50,100,3,160,3,124,
- 1,161,1,83,0,100,4,160,3,124,1,124,0,106,2,161,
- 2,83,0,110,36,124,0,106,4,114,86,100,5,160,3,124,
- 1,124,0,106,1,161,2,83,0,100,6,160,3,124,0,106,
- 0,124,0,106,1,161,2,83,0,100,1,83,0,41,7,122,
- 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114,
- 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32,
- 109,111,100,117,108,101,46,78,114,100,0,0,0,114,101,0,
- 0,0,114,102,0,0,0,114,103,0,0,0,250,18,60,109,
- 111,100,117,108,101,32,123,33,114,125,32,40,123,125,41,62,
- 41,5,114,17,0,0,0,114,113,0,0,0,114,109,0,0,
- 0,114,45,0,0,0,114,124,0,0,0,41,2,114,95,0,
- 0,0,114,17,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,114,107,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,107,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,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,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,53,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,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,143,0,0,0,114,150,0,0,0,41,14,
- 114,17,0,0,0,114,50,0,0,0,114,15,0,0,0,114,
- 92,0,0,0,114,34,0,0,0,114,45,0,0,0,114,79,
- 0,0,0,114,109,0,0,0,114,117,0,0,0,114,148,0,
- 0,0,114,4,0,0,0,218,11,108,111,97,100,95,109,111,
- 100,117,108,101,114,150,0,0,0,218,3,112,111,112,41,4,
- 114,95,0,0,0,114,96,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,93,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,93,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,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,98,0,0,0,114,145,0,0,0,114,141,0,
- 0,0,114,128,0,0,0,114,22,0,0,0,114,105,0,0,
- 0,41,14,114,109,0,0,0,114,155,0,0,0,114,17,0,
- 0,0,114,15,0,0,0,114,92,0,0,0,114,156,0,0,
- 0,114,6,0,0,0,114,98,0,0,0,114,106,0,0,0,
- 114,1,0,0,0,114,145,0,0,0,114,4,0,0,0,114,
- 129,0,0,0,114,105,0,0,0,114,151,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,158,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,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,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,5,124,0,106,7,124,0,
- 106,0,131,3,1,0,87,0,53,0,100,6,124,0,95,4,
- 88,0,124,1,83,0,41,7,78,114,150,0,0,0,84,114,
- 154,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,109,0,0,0,114,4,0,0,0,114,158,0,0,0,114,
- 152,0,0,0,90,13,95,105,110,105,116,105,97,108,105,122,
- 105,110,103,114,15,0,0,0,114,92,0,0,0,114,17,0,
- 0,0,114,117,0,0,0,114,79,0,0,0,114,150,0,0,
- 0,114,63,0,0,0,114,156,0,0,0,114,76,0,0,0,
- 114,151,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,159,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,50,
- 0,0,0,114,17,0,0,0,114,159,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,94,0,0,0,180,2,0,0,115,4,0,0,
- 0,0,9,12,1,114,94,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,136,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,6,100,19,100,5,100,6,132,1,131,1,90,7,101,6,
- 100,20,100,7,100,8,132,1,131,1,90,8,101,6,100,9,
- 100,10,132,0,131,1,90,9,101,6,100,11,100,12,132,0,
- 131,1,90,10,101,6,101,11,100,13,100,14,132,0,131,1,
- 131,1,90,12,101,6,101,11,100,15,100,16,132,0,131,1,
- 131,1,90,13,101,6,101,11,100,17,100,18,132,0,131,1,
- 131,1,90,14,101,6,101,15,131,1,90,16,100,4,83,0,
- 41,21,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,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,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,24,60,109,111,100,117,108,101,32,
- 123,33,114,125,32,40,98,117,105,108,116,45,105,110,41,62,
- 41,2,114,45,0,0,0,114,1,0,0,0,41,1,114,96,
+ 0,114,124,0,0,0,141,1,0,0,115,2,0,0,0,0,
+ 2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,97,
+ 115,95,108,111,99,97,116,105,111,110,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,14,0,0,0,116,0,124,1,131,1,124,0,
+ 95,1,100,0,83,0,114,13,0,0,0,41,2,218,4,98,
+ 111,111,108,114,118,0,0,0,41,2,114,30,0,0,0,218,
+ 5,118,97,108,117,101,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,124,0,0,0,145,1,0,0,115,2,
+ 0,0,0,0,2,41,12,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,48,0,0,0,114,125,0,0,0,218,8,112,114,111,112,
+ 101,114,116,121,114,123,0,0,0,218,6,115,101,116,116,101,
+ 114,114,130,0,0,0,114,124,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+ 112,0,0,0,49,1,0,0,115,32,0,0,0,8,1,4,
+ 36,4,1,2,255,12,12,8,10,8,12,2,1,10,8,4,
+ 1,10,3,2,1,10,7,2,1,10,3,4,1,114,112,0,
+ 0,0,169,2,114,113,0,0,0,114,115,0,0,0,99,2,
+ 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,8,
+ 0,0,0,67,0,0,0,115,154,0,0,0,116,0,124,1,
+ 100,1,131,2,114,74,116,1,100,2,107,8,114,22,116,2,
+ 130,1,116,1,106,3,125,4,124,3,100,2,107,8,114,48,
+ 124,4,124,0,124,1,100,3,141,2,83,0,124,3,114,56,
+ 103,0,110,2,100,2,125,5,124,4,124,0,124,1,124,5,
+ 100,4,141,3,83,0,124,3,100,2,107,8,114,138,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,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,115,32,
+ 108,111,97,100,101,114,32,109,101,116,104,111,100,115,46,90,
+ 12,103,101,116,95,102,105,108,101,110,97,109,101,78,41,1,
+ 114,109,0,0,0,41,2,114,109,0,0,0,114,117,0,0,
+ 0,114,115,0,0,0,70,114,135,0,0,0,41,7,114,4,
+ 0,0,0,114,126,0,0,0,114,127,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,114,115,0,0,0,114,79,0,0,0,
+ 114,112,0,0,0,41,6,114,17,0,0,0,114,109,0,0,
+ 0,114,113,0,0,0,114,115,0,0,0,114,136,0,0,0,
+ 90,6,115,101,97,114,99,104,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,91,0,0,0,150,1,0,0,
+ 115,36,0,0,0,0,2,10,1,8,1,4,1,6,2,8,
+ 1,12,1,12,1,6,1,2,255,6,3,8,1,10,1,2,
+ 1,14,1,14,1,12,3,4,2,114,91,0,0,0,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,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,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,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,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,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,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,113,0,0,0,70,84,
+ 41,13,114,105,0,0,0,114,106,0,0,0,114,1,0,0,
+ 0,114,98,0,0,0,114,108,0,0,0,218,7,95,79,82,
+ 73,71,73,78,218,10,95,95,99,97,99,104,101,100,95,95,
+ 218,4,108,105,115,116,218,8,95,95,112,97,116,104,95,95,
+ 114,112,0,0,0,114,118,0,0,0,114,123,0,0,0,114,
+ 117,0,0,0,41,8,114,96,0,0,0,114,109,0,0,0,
+ 114,113,0,0,0,114,95,0,0,0,114,17,0,0,0,90,
+ 8,108,111,99,97,116,105,111,110,114,123,0,0,0,114,117,
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,114,99,0,0,0,204,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,44,0,0,0,124,2,
- 100,0,107,9,114,12,100,0,83,0,116,0,160,1,124,1,
- 161,1,114,36,116,2,124,1,124,0,100,1,100,2,141,3,
- 83,0,100,0,83,0,100,0,83,0,41,3,78,122,8,98,
- 117,105,108,116,45,105,110,114,137,0,0,0,41,3,114,57,
- 0,0,0,90,10,105,115,95,98,117,105,108,116,105,110,114,
- 91,0,0,0,169,4,218,3,99,108,115,114,81,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,213,2,0,0,115,10,0,0,
- 0,0,2,8,1,4,1,10,1,14,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,109,0,
- 0,0,41,4,114,163,0,0,0,114,81,0,0,0,114,164,
- 0,0,0,114,95,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,222,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,77,0,0,0,114,16,0,0,0,
- 41,8,114,17,0,0,0,114,15,0,0,0,114,78,0,0,
- 0,114,79,0,0,0,114,45,0,0,0,114,67,0,0,0,
- 114,57,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,95,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,149,0,0,0,234,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,
+ 0,0,218,17,95,115,112,101,99,95,102,114,111,109,95,109,
+ 111,100,117,108,101,176,1,0,0,115,72,0,0,0,0,2,
+ 2,1,10,1,14,1,6,2,8,1,4,2,6,1,8,1,
+ 2,1,10,1,14,2,6,1,2,1,10,1,14,1,10,1,
+ 8,1,8,1,2,1,10,1,14,1,12,2,4,1,2,1,
+ 10,1,14,1,10,1,2,1,14,1,16,1,10,2,14,1,
+ 20,1,6,1,6,1,114,142,0,0,0,70,169,1,218,8,
+ 111,118,101,114,114,105,100,101,99,2,0,0,0,0,0,0,
+ 0,1,0,0,0,5,0,0,0,8,0,0,0,67,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,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,114,110,
+ 116,7,130,1,116,6,106,8,125,4,124,4,160,9,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,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,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,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,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,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,0,0,
+ 114,98,0,0,0,218,11,95,95,112,97,99,107,97,103,101,
+ 95,95,114,141,0,0,0,114,108,0,0,0,114,139,0,0,
+ 0,41,21,114,6,0,0,0,114,17,0,0,0,114,1,0,
+ 0,0,114,106,0,0,0,114,109,0,0,0,114,117,0,0,
+ 0,114,126,0,0,0,114,127,0,0,0,218,16,95,78,97,
+ 109,101,115,112,97,99,101,76,111,97,100,101,114,218,7,95,
+ 95,110,101,119,95,95,90,5,95,112,97,116,104,114,108,0,
+ 0,0,114,98,0,0,0,114,130,0,0,0,114,145,0,0,
+ 0,114,105,0,0,0,114,141,0,0,0,114,124,0,0,0,
+ 114,113,0,0,0,114,123,0,0,0,114,139,0,0,0,41,
+ 5,114,95,0,0,0,114,96,0,0,0,114,144,0,0,0,
+ 114,109,0,0,0,114,146,0,0,0,114,10,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,218,18,95,105,110,105,116,
+ 95,109,111,100,117,108,101,95,97,116,116,114,115,221,1,0,
+ 0,115,96,0,0,0,0,4,20,1,2,1,12,1,14,1,
+ 6,2,20,1,6,1,8,2,10,1,8,1,4,1,6,2,
+ 10,1,8,1,6,11,6,1,2,1,10,1,14,1,6,2,
+ 20,1,2,1,12,1,14,1,6,2,2,1,10,1,16,1,
+ 6,2,24,1,12,1,2,1,12,1,16,1,6,2,8,1,
+ 24,1,2,1,12,1,16,1,6,2,24,1,12,1,2,1,
+ 12,1,16,1,6,1,114,148,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,82,0,0,0,100,1,125,1,116,0,124,
+ 0,106,1,100,2,131,2,114,30,124,0,106,1,160,2,124,
+ 0,161,1,125,1,110,20,116,0,124,0,106,1,100,3,131,
+ 2,114,50,116,3,100,4,131,1,130,1,124,1,100,1,107,
+ 8,114,68,116,4,124,0,106,5,131,1,125,1,116,6,124,
+ 0,124,1,131,2,1,0,124,1,83,0,41,5,122,43,67,
+ 114,101,97,116,101,32,97,32,109,111,100,117,108,101,32,98,
+ 97,115,101,100,32,111,110,32,116,104,101,32,112,114,111,118,
+ 105,100,101,100,32,115,112,101,99,46,78,218,13,99,114,101,
+ 97,116,101,95,109,111,100,117,108,101,218,11,101,120,101,99,
+ 95,109,111,100,117,108,101,122,66,108,111,97,100,101,114,115,
+ 32,116,104,97,116,32,100,101,102,105,110,101,32,101,120,101,
+ 99,95,109,111,100,117,108,101,40,41,32,109,117,115,116,32,
+ 97,108,115,111,32,100,101,102,105,110,101,32,99,114,101,97,
+ 116,101,95,109,111,100,117,108,101,40,41,41,7,114,4,0,
+ 0,0,114,109,0,0,0,114,149,0,0,0,114,79,0,0,
+ 0,114,18,0,0,0,114,17,0,0,0,114,148,0,0,0,
+ 169,2,114,95,0,0,0,114,96,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,218,16,109,111,100,
+ 117,108,101,95,102,114,111,109,95,115,112,101,99,37,2,0,
+ 0,115,18,0,0,0,0,3,4,1,12,3,14,1,12,1,
+ 8,2,8,1,10,1,10,1,114,152,0,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,106,0,0,0,124,0,106,0,100,
+ 1,107,8,114,14,100,2,110,4,124,0,106,0,125,1,124,
+ 0,106,1,100,1,107,8,114,66,124,0,106,2,100,1,107,
+ 8,114,50,100,3,160,3,124,1,161,1,83,0,100,4,160,
+ 3,124,1,124,0,106,2,161,2,83,0,110,36,124,0,106,
+ 4,114,86,100,5,160,3,124,1,124,0,106,1,161,2,83,
+ 0,100,6,160,3,124,0,106,0,124,0,106,1,161,2,83,
+ 0,100,1,83,0,41,7,122,38,82,101,116,117,114,110,32,
+ 116,104,101,32,114,101,112,114,32,116,111,32,117,115,101,32,
+ 102,111,114,32,116,104,101,32,109,111,100,117,108,101,46,78,
+ 114,100,0,0,0,114,101,0,0,0,114,102,0,0,0,114,
+ 103,0,0,0,250,18,60,109,111,100,117,108,101,32,123,33,
+ 114,125,32,40,123,125,41,62,41,5,114,17,0,0,0,114,
+ 113,0,0,0,114,109,0,0,0,114,45,0,0,0,114,124,
+ 0,0,0,41,2,114,95,0,0,0,114,17,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,107,
+ 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,107,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,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,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,53,
+ 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,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,143,0,0,
+ 0,114,150,0,0,0,41,14,114,17,0,0,0,114,50,0,
+ 0,0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,
+ 0,114,45,0,0,0,114,79,0,0,0,114,109,0,0,0,
+ 114,117,0,0,0,114,148,0,0,0,114,4,0,0,0,218,
+ 11,108,111,97,100,95,109,111,100,117,108,101,114,150,0,0,
+ 0,218,3,112,111,112,41,4,114,95,0,0,0,114,96,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,93,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,93,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,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,98,0,0,0,
+ 114,145,0,0,0,114,141,0,0,0,114,128,0,0,0,114,
+ 22,0,0,0,114,105,0,0,0,41,14,114,109,0,0,0,
+ 114,155,0,0,0,114,17,0,0,0,114,15,0,0,0,114,
+ 92,0,0,0,114,156,0,0,0,114,6,0,0,0,114,98,
+ 0,0,0,114,106,0,0,0,114,1,0,0,0,114,145,0,
+ 0,0,114,4,0,0,0,114,129,0,0,0,114,105,0,0,
+ 0,114,151,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,
+ 158,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,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,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,5,124,0,106,7,124,0,106,0,131,3,1,0,87,0,
+ 53,0,100,6,124,0,95,4,88,0,124,1,83,0,41,7,
+ 78,114,150,0,0,0,84,114,154,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,109,0,0,0,114,4,0,
+ 0,0,114,158,0,0,0,114,152,0,0,0,90,13,95,105,
+ 110,105,116,105,97,108,105,122,105,110,103,114,15,0,0,0,
+ 114,92,0,0,0,114,17,0,0,0,114,117,0,0,0,114,
+ 79,0,0,0,114,150,0,0,0,114,63,0,0,0,114,156,
+ 0,0,0,114,76,0,0,0,114,151,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,159,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,50,0,0,0,114,17,0,0,0,
+ 114,159,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,94,0,0,0,
+ 180,2,0,0,115,4,0,0,0,0,9,12,1,114,94,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,136,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,6,100,19,100,5,100,6,
+ 132,1,131,1,90,7,101,6,100,20,100,7,100,8,132,1,
+ 131,1,90,8,101,6,100,9,100,10,132,0,131,1,90,9,
+ 101,6,100,11,100,12,132,0,131,1,90,10,101,6,101,11,
+ 100,13,100,14,132,0,131,1,131,1,90,12,101,6,101,11,
+ 100,15,100,16,132,0,131,1,131,1,90,13,101,6,101,11,
+ 100,17,100,18,132,0,131,1,131,1,90,14,101,6,101,15,
+ 131,1,90,16,100,4,83,0,41,21,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,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,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,24,
+ 60,109,111,100,117,108,101,32,123,33,114,125,32,40,98,117,
+ 105,108,116,45,105,110,41,62,41,2,114,45,0,0,0,114,
+ 1,0,0,0,41,1,114,96,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,114,99,0,0,0,204,
+ 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,44,0,0,0,124,2,100,0,107,9,114,12,100,0,
+ 83,0,116,0,160,1,124,1,161,1,114,36,116,2,124,1,
+ 124,0,100,1,100,2,141,3,83,0,100,0,83,0,100,0,
+ 83,0,41,3,78,122,8,98,117,105,108,116,45,105,110,114,
+ 137,0,0,0,41,3,114,57,0,0,0,90,10,105,115,95,
+ 98,117,105,108,116,105,110,114,91,0,0,0,169,4,218,3,
+ 99,108,115,114,81,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,
+ 213,2,0,0,115,10,0,0,0,0,2,8,1,4,1,10,
+ 1,14,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,109,0,0,0,41,4,114,163,0,0,
+ 0,114,81,0,0,0,114,164,0,0,0,114,95,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,222,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,77,
+ 0,0,0,114,16,0,0,0,41,8,114,17,0,0,0,114,
+ 15,0,0,0,114,78,0,0,0,114,79,0,0,0,114,45,
+ 0,0,0,114,67,0,0,0,114,57,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,95,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,149,0,0,0,234,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,67,0,0,0,114,
+ 57,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,96,0,0,0,114,10,
+ 0,0,0,114,10,0,0,0,114,11,0,0,0,114,150,0,
+ 0,0,242,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,81,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,247,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,253,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,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,115,0,0,0,3,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,17,114,1,0,
+ 0,0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,
+ 0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114,
+ 99,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,149,0,0,0,
+ 114,150,0,0,0,114,86,0,0,0,114,169,0,0,0,114,
+ 170,0,0,0,114,115,0,0,0,114,97,0,0,0,114,155,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,160,0,0,0,195,2,0,0,
+ 115,42,0,0,0,8,2,4,7,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,
+ 160,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,161,0,0,
+ 0,114,153,0,0,0,41,4,114,45,0,0,0,114,1,0,
+ 0,0,114,173,0,0,0,114,138,0,0,0,41,1,218,1,
+ 109,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
+ 114,99,0,0,0,23,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,41,2,78,
+ 114,137,0,0,0,41,4,114,57,0,0,0,114,88,0,0,
+ 0,114,91,0,0,0,114,138,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,32,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,57,0,0,0,114,88,0,0,0,41,3,114,163,0,
+ 0,0,114,81,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,
+ 39,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,95,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,149,0,0,0,48,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,87,0,0,0,41,10,114,105,0,0,0,
+ 114,17,0,0,0,114,57,0,0,0,114,88,0,0,0,114,
+ 79,0,0,0,114,45,0,0,0,114,67,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,96,
+ 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,150,0,
+ 0,0,52,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,97,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,
+ 61,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,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,67,0,0,0,114,57,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,96,0,0,0,114,10,0,0,0,114,10,0,0,0,
- 114,11,0,0,0,114,150,0,0,0,242,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,81,
- 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,247,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,253,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,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,
+ 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,57,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,115,0,0,0,3,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,17,114,1,0,0,0,114,0,0,0,0,114,
- 2,0,0,0,114,3,0,0,0,218,12,115,116,97,116,105,
- 99,109,101,116,104,111,100,114,99,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,149,0,0,0,114,150,0,0,0,114,86,0,
- 0,0,114,169,0,0,0,114,170,0,0,0,114,115,0,0,
- 0,114,97,0,0,0,114,155,0,0,0,114,10,0,0,0,
+ 114,169,0,0,0,70,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,
- 160,0,0,0,195,2,0,0,115,42,0,0,0,8,2,4,
- 7,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,160,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,161,0,0,0,114,153,0,0,0,41,4,
- 114,45,0,0,0,114,1,0,0,0,114,173,0,0,0,114,
- 138,0,0,0,41,1,218,1,109,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,99,0,0,0,23,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,41,2,78,114,137,0,0,0,41,4,114,
- 57,0,0,0,114,88,0,0,0,114,91,0,0,0,114,138,
- 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,32,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,57,0,0,0,114,88,
- 0,0,0,41,3,114,163,0,0,0,114,81,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,39,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,95,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,149,0,0,0,48,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,87,0,0,
- 0,41,10,114,105,0,0,0,114,17,0,0,0,114,57,0,
- 0,0,114,88,0,0,0,114,79,0,0,0,114,45,0,0,
- 0,114,67,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,96,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,150,0,0,0,52,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,97,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,61,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,57,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,70,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,76,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,57,
- 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,115,0,0,0,82,
- 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,138,0,0,0,114,171,0,0,0,114,99,0,0,
- 0,114,172,0,0,0,114,166,0,0,0,114,167,0,0,0,
- 114,149,0,0,0,114,150,0,0,0,114,155,0,0,0,114,
- 90,0,0,0,114,169,0,0,0,114,170,0,0,0,114,115,
- 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,12,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,57,0,0,0,
- 114,58,0,0,0,114,47,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,54,0,0,0,95,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,57,0,0,0,114,60,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,56,0,0,0,99,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,54,0,0,
- 0,114,56,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,91,
- 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,128,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,
- 218,10,86,97,108,117,101,69,114,114,111,114,114,45,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,104,3,0,0,115,10,0,0,0,0,2,16,1,12,
- 1,8,1,8,1,114,188,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,91,0,0,0,41,4,218,6,102,
- 105,110,100,101,114,114,17,0,0,0,114,164,0,0,0,114,
- 109,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,113,3,0,0,115,8,0,0,0,0,
- 3,12,1,8,1,4,1,114,190,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,79,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,92,0,0,0,114,178,0,0,0,
- 114,166,0,0,0,114,106,0,0,0,114,190,0,0,0,114,
- 105,0,0,0,41,10,114,17,0,0,0,114,164,0,0,0,
- 114,165,0,0,0,114,191,0,0,0,90,9,105,115,95,114,
- 101,108,111,97,100,114,189,0,0,0,114,166,0,0,0,114,
- 95,0,0,0,114,96,0,0,0,114,105,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,122,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,195,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,45,0,0,
- 0,114,14,0,0,0,114,185,0,0,0,114,79,0,0,0,
- 169,3,114,17,0,0,0,114,186,0,0,0,114,187,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,169,
- 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,128,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,129,0,0,0,114,15,0,0,
- 0,114,92,0,0,0,114,67,0,0,0,114,141,0,0,0,
- 114,106,0,0,0,218,8,95,69,82,82,95,77,83,71,114,
- 45,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,195,0,0,0,114,159,
- 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,130,0,
- 0,0,90,13,112,97,114,101,110,116,95,109,111,100,117,108,
- 101,114,157,0,0,0,114,95,0,0,0,114,96,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,188,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,50,0,0,0,114,15,0,0,
- 0,114,92,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,45,0,0,0,114,203,0,0,0,114,65,0,0,0,41,
- 4,114,17,0,0,0,114,204,0,0,0,114,96,0,0,0,
- 114,75,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,218,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,188,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,234,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,110,154,124,4,100,
- 5,107,2,114,108,124,3,115,106,116,5,124,0,100,6,131,
- 2,114,106,116,6,124,0,124,0,106,7,124,2,100,7,100,
- 8,141,4,1,0,110,112,116,5,124,0,124,4,131,2,115,
- 220,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,110,72,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,110,2,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,196,0,0,0,114,197,0,0,0,114,1,0,0,0,114,
- 198,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,45,0,0,0,114,67,0,0,0,114,
- 203,0,0,0,114,17,0,0,0,114,15,0,0,0,114,92,
- 0,0,0,114,34,0,0,0,114,206,0,0,0,41,8,114,
- 96,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,249,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,145,0,0,0,
- 114,105,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,141,0,0,0,114,128,0,0,0,114,22,
- 0,0,0,41,6,114,34,0,0,0,114,130,0,0,0,114,
- 192,0,0,0,114,193,0,0,0,114,194,0,0,0,114,129,
- 0,0,0,41,3,218,7,103,108,111,98,97,108,115,114,186,
- 0,0,0,114,95,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,30,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,128,0,0,0,114,141,
- 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,92,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,187,0,0,0,114,96,0,0,0,90,8,103,108,111,
- 98,97,108,115,95,114,186,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,57,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,
+ 170,0,0,0,76,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,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,160,
- 0,0,0,114,166,0,0,0,114,79,0,0,0,114,159,0,
- 0,0,41,2,114,17,0,0,0,114,95,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,94,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,192,0,0,0,114,64,0,0,0,78,41,15,114,57,0,
- 0,0,114,15,0,0,0,114,14,0,0,0,114,92,0,0,
- 0,218,5,105,116,101,109,115,114,196,0,0,0,114,78,0,
- 0,0,114,160,0,0,0,114,88,0,0,0,114,173,0,0,
- 0,114,142,0,0,0,114,148,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,96,0,0,0,114,109,0,0,
- 0,114,95,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,101,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,
- 191,0,0,0,114,120,0,0,0,114,160,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,136,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,126,0,0,0,
- 114,228,0,0,0,114,15,0,0,0,114,92,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,144,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,
- 126,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,49,0,0,0,114,50,0,0,
- 0,114,53,0,0,0,114,65,0,0,0,114,67,0,0,0,
- 114,76,0,0,0,114,86,0,0,0,114,90,0,0,0,114,
- 97,0,0,0,114,111,0,0,0,114,112,0,0,0,114,91,
- 0,0,0,114,142,0,0,0,114,148,0,0,0,114,152,0,
- 0,0,114,107,0,0,0,114,93,0,0,0,114,158,0,0,
- 0,114,159,0,0,0,114,94,0,0,0,114,160,0,0,0,
- 114,173,0,0,0,114,178,0,0,0,114,188,0,0,0,114,
- 190,0,0,0,114,195,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,73,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,
+ 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,57,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,115,0,0,0,82,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,138,0,0,0,114,
+ 171,0,0,0,114,99,0,0,0,114,172,0,0,0,114,166,
+ 0,0,0,114,167,0,0,0,114,149,0,0,0,114,150,0,
+ 0,0,114,155,0,0,0,114,90,0,0,0,114,169,0,0,
+ 0,114,170,0,0,0,114,115,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,12,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,57,0,0,0,114,58,0,0,0,114,47,0,
+ 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,114,54,0,0,0,95,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,57,0,0,
+ 0,114,60,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,56,0,0,0,99,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,54,0,0,0,114,56,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,91,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,
+ 128,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,218,10,86,97,108,117,101,69,
+ 114,114,111,114,114,45,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,104,3,0,0,115,10,
+ 0,0,0,0,2,16,1,12,1,8,1,8,1,114,188,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,91,
+ 0,0,0,41,4,218,6,102,105,110,100,101,114,114,17,0,
+ 0,0,114,164,0,0,0,114,109,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,113,3,
+ 0,0,115,8,0,0,0,0,3,12,1,8,1,4,1,114,
+ 190,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,79,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,92,
+ 0,0,0,114,178,0,0,0,114,166,0,0,0,114,106,0,
+ 0,0,114,190,0,0,0,114,105,0,0,0,41,10,114,17,
+ 0,0,0,114,164,0,0,0,114,165,0,0,0,114,191,0,
+ 0,0,90,9,105,115,95,114,101,108,111,97,100,114,189,0,
+ 0,0,114,166,0,0,0,114,95,0,0,0,114,96,0,0,
+ 0,114,105,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,122,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,195,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,45,0,0,0,114,14,0,0,0,114,185,
+ 0,0,0,114,79,0,0,0,169,3,114,17,0,0,0,114,
+ 186,0,0,0,114,187,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,169,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,128,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,
+ 129,0,0,0,114,15,0,0,0,114,92,0,0,0,114,67,
+ 0,0,0,114,141,0,0,0,114,106,0,0,0,218,8,95,
+ 69,82,82,95,77,83,71,114,45,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,195,0,0,0,114,159,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,130,0,0,0,90,13,112,97,114,101,
+ 110,116,95,109,111,100,117,108,101,114,157,0,0,0,114,95,
+ 0,0,0,114,96,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,
+ 188,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,
+ 50,0,0,0,114,15,0,0,0,114,92,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,45,0,0,0,114,203,0,
+ 0,0,114,65,0,0,0,41,4,114,17,0,0,0,114,204,
+ 0,0,0,114,96,0,0,0,114,75,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,218,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,188,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,234,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,196,0,0,0,114,197,0,
+ 0,0,114,1,0,0,0,114,198,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,45,0,
+ 0,0,114,67,0,0,0,114,203,0,0,0,114,17,0,0,
+ 0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,0,
+ 114,206,0,0,0,41,8,114,96,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,249,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,145,0,0,0,114,105,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,141,0,0,
+ 0,114,128,0,0,0,114,22,0,0,0,41,6,114,34,0,
+ 0,0,114,130,0,0,0,114,192,0,0,0,114,193,0,0,
+ 0,114,194,0,0,0,114,129,0,0,0,41,3,218,7,103,
+ 108,111,98,97,108,115,114,186,0,0,0,114,95,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,30,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,128,0,0,0,114,141,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,92,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,187,0,0,0,114,96,
+ 0,0,0,90,8,103,108,111,98,97,108,115,95,114,186,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,57,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,160,0,0,0,114,166,0,0,0,
+ 114,79,0,0,0,114,159,0,0,0,41,2,114,17,0,0,
+ 0,114,95,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,94,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,192,0,0,0,114,64,0,
+ 0,0,78,41,15,114,57,0,0,0,114,15,0,0,0,114,
+ 14,0,0,0,114,92,0,0,0,218,5,105,116,101,109,115,
+ 114,196,0,0,0,114,78,0,0,0,114,160,0,0,0,114,
+ 88,0,0,0,114,173,0,0,0,114,142,0,0,0,114,148,
+ 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,
+ 96,0,0,0,114,109,0,0,0,114,95,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,
+ 101,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,191,0,0,0,114,120,0,0,
+ 0,114,160,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,
+ 136,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,126,0,0,0,114,228,0,0,0,114,15,0,
+ 0,0,114,92,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,144,
+ 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,126,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,
+ 49,0,0,0,114,50,0,0,0,114,53,0,0,0,114,65,
+ 0,0,0,114,67,0,0,0,114,76,0,0,0,114,86,0,
+ 0,0,114,90,0,0,0,114,97,0,0,0,114,111,0,0,
+ 0,114,112,0,0,0,114,91,0,0,0,114,142,0,0,0,
+ 114,148,0,0,0,114,152,0,0,0,114,107,0,0,0,114,
+ 93,0,0,0,114,158,0,0,0,114,159,0,0,0,114,94,
+ 0,0,0,114,160,0,0,0,114,173,0,0,0,114,178,0,
+ 0,0,114,188,0,0,0,114,190,0,0,0,114,195,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,73,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 e724560d67a1..9b86fe6b72a9 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -1,1003 +1,1001 @@
/* Auto-generated by Programs/_freeze_importlib.c */
const unsigned char _Py_M__importlib_bootstrap_external[] = {
99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,5,0,0,0,64,0,0,0,115,52,2,0,0,100,0,
+ 0,5,0,0,0,64,0,0,0,115,32,2,0,0,100,0,
90,0,100,1,90,1,100,2,90,2,101,2,101,1,23,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,132,0,90,8,100,13,100,14,132,0,
90,9,100,15,100,16,132,0,90,10,100,17,100,18,132,0,
90,11,100,19,100,20,132,0,90,12,100,21,100,22,132,0,
- 90,13,100,23,100,24,132,0,90,14,100,25,102,1,100,26,
- 100,27,132,1,90,15,101,16,101,15,106,17,131,1,90,18,
- 100,28,160,19,100,29,100,30,161,2,100,31,23,0,90,20,
- 101,21,160,22,101,20,100,30,161,2,90,23,100,32,90,24,
- 100,33,90,25,100,34,103,1,90,26,100,35,103,1,90,27,
- 101,27,4,0,90,28,90,29,100,36,102,1,100,36,100,37,
- 156,1,100,38,100,39,132,3,90,30,100,40,100,41,132,0,
- 90,31,100,42,100,43,132,0,90,32,100,44,100,45,132,0,
- 90,33,100,46,100,47,132,0,90,34,100,48,100,49,132,0,
- 90,35,100,50,100,51,132,0,90,36,100,52,100,53,132,0,
- 90,37,100,54,100,55,132,0,90,38,100,56,100,57,132,0,
- 90,39,100,36,100,36,100,36,102,3,100,58,100,59,132,1,
- 90,40,100,60,100,60,102,2,100,61,100,62,132,1,90,41,
- 100,63,102,1,100,64,100,65,132,1,90,42,100,66,100,67,
- 132,0,90,43,101,44,131,0,90,45,100,36,102,1,100,36,
- 101,45,100,68,156,2,100,69,100,70,132,3,90,46,71,0,
- 100,71,100,72,132,0,100,72,131,2,90,47,71,0,100,73,
- 100,74,132,0,100,74,131,2,90,48,71,0,100,75,100,76,
- 132,0,100,76,101,48,131,3,90,49,71,0,100,77,100,78,
- 132,0,100,78,131,2,90,50,71,0,100,79,100,80,132,0,
- 100,80,101,50,101,49,131,4,90,51,71,0,100,81,100,82,
- 132,0,100,82,101,50,101,48,131,4,90,52,103,0,90,53,
- 71,0,100,83,100,84,132,0,100,84,101,50,101,48,131,4,
- 90,54,71,0,100,85,100,86,132,0,100,86,131,2,90,55,
- 71,0,100,87,100,88,132,0,100,88,131,2,90,56,71,0,
- 100,89,100,90,132,0,100,90,131,2,90,57,71,0,100,91,
- 100,92,132,0,100,92,131,2,90,58,100,36,102,1,100,93,
- 100,94,132,1,90,59,100,95,100,96,132,0,90,60,100,97,
- 100,98,132,0,90,61,100,99,100,100,132,0,90,62,100,36,
- 83,0,41,101,97,94,1,0,0,67,111,114,101,32,105,109,
- 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,
- 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114,
- 116,46,10,10,84,104,105,115,32,109,111,100,117,108,101,32,
- 105,115,32,78,79,84,32,109,101,97,110,116,32,116,111,32,
- 98,101,32,100,105,114,101,99,116,108,121,32,105,109,112,111,
- 114,116,101,100,33,32,73,116,32,104,97,115,32,98,101,101,
- 110,32,100,101,115,105,103,110,101,100,32,115,117,99,104,10,
- 116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,98,
- 111,111,116,115,116,114,97,112,112,101,100,32,105,110,116,111,
- 32,80,121,116,104,111,110,32,97,115,32,116,104,101,32,105,
- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,
- 32,105,109,112,111,114,116,46,32,65,115,10,115,117,99,104,
- 32,105,116,32,114,101,113,117,105,114,101,115,32,116,104,101,
- 32,105,110,106,101,99,116,105,111,110,32,111,102,32,115,112,
- 101,99,105,102,105,99,32,109,111,100,117,108,101,115,32,97,
- 110,100,32,97,116,116,114,105,98,117,116,101,115,32,105,110,
- 32,111,114,100,101,114,32,116,111,10,119,111,114,107,46,32,
- 79,110,101,32,115,104,111,117,108,100,32,117,115,101,32,105,
- 109,112,111,114,116,108,105,98,32,97,115,32,116,104,101,32,
- 112,117,98,108,105,99,45,102,97,99,105,110,103,32,118,101,
- 114,115,105,111,110,32,111,102,32,116,104,105,115,32,109,111,
- 100,117,108,101,46,10,10,41,1,218,3,119,105,110,41,2,
- 90,6,99,121,103,119,105,110,90,6,100,97,114,119,105,110,
- 99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
- 0,3,0,0,0,3,0,0,0,115,60,0,0,0,116,0,
- 106,1,160,2,116,3,161,1,114,48,116,0,106,1,160,2,
- 116,4,161,1,114,30,100,1,137,0,110,4,100,2,137,0,
- 135,0,102,1,100,3,100,4,132,8,125,0,110,8,100,5,
- 100,4,132,0,125,0,124,0,83,0,41,6,78,90,12,80,
- 89,84,72,79,78,67,65,83,69,79,75,115,12,0,0,0,
- 80,89,84,72,79,78,67,65,83,69,79,75,99,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
- 0,19,0,0,0,115,10,0,0,0,136,0,116,0,106,1,
- 107,6,83,0,41,1,250,53,84,114,117,101,32,105,102,32,
- 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,
- 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,
- 110,115,101,110,115,105,116,105,118,101,108,121,46,41,2,218,
- 3,95,111,115,90,7,101,110,118,105,114,111,110,169,0,169,
- 1,218,3,107,101,121,114,3,0,0,0,250,38,60,102,114,
- 111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,
- 98,111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,
- 97,108,62,218,11,95,114,101,108,97,120,95,99,97,115,101,
- 36,0,0,0,115,2,0,0,0,0,2,122,37,95,109,97,
- 107,101,95,114,101,108,97,120,95,99,97,115,101,46,60,108,
- 111,99,97,108,115,62,46,95,114,101,108,97,120,95,99,97,
- 115,101,99,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0,
- 100,1,83,0,41,2,114,1,0,0,0,70,114,3,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,7,0,0,0,40,0,0,0,115,2,
- 0,0,0,0,2,41,5,218,3,115,121,115,218,8,112,108,
- 97,116,102,111,114,109,218,10,115,116,97,114,116,115,119,105,
- 116,104,218,27,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,218,
- 35,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,83,84,82,
- 95,75,69,89,41,1,114,7,0,0,0,114,3,0,0,0,
- 114,4,0,0,0,114,6,0,0,0,218,16,95,109,97,107,
- 101,95,114,101,108,97,120,95,99,97,115,101,29,0,0,0,
- 115,14,0,0,0,0,1,12,1,12,1,6,2,4,2,14,
- 4,8,3,114,13,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,20,0,0,0,116,0,124,0,131,1,100,1,64,0,
- 160,1,100,2,100,3,161,2,83,0,41,4,122,42,67,111,
- 110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,105,
- 110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,101,
- 45,101,110,100,105,97,110,46,236,3,0,0,0,255,127,255,
- 127,3,0,233,4,0,0,0,218,6,108,105,116,116,108,101,
- 41,2,218,3,105,110,116,218,8,116,111,95,98,121,116,101,
- 115,41,1,218,1,120,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,12,95,112,97,99,107,95,117,105,110,
- 116,51,50,46,0,0,0,115,2,0,0,0,0,2,114,20,
- 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,116,0,124,0,131,1,100,1,107,2,115,16,116,1,130,
- 1,116,2,160,3,124,0,100,2,161,2,83,0,41,3,122,
- 47,67,111,110,118,101,114,116,32,52,32,98,121,116,101,115,
- 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97,
- 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46,
- 114,15,0,0,0,114,16,0,0,0,169,4,218,3,108,101,
- 110,218,14,65,115,115,101,114,116,105,111,110,69,114,114,111,
- 114,114,17,0,0,0,218,10,102,114,111,109,95,98,121,116,
- 101,115,169,1,218,4,100,97,116,97,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,14,95,117,110,112,97,
- 99,107,95,117,105,110,116,51,50,51,0,0,0,115,4,0,
- 0,0,0,2,16,1,114,27,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,116,0,124,0,131,1,100,
- 1,107,2,115,16,116,1,130,1,116,2,160,3,124,0,100,
- 2,161,2,83,0,41,3,122,47,67,111,110,118,101,114,116,
- 32,50,32,98,121,116,101,115,32,105,110,32,108,105,116,116,
- 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32,
- 105,110,116,101,103,101,114,46,233,2,0,0,0,114,16,0,
- 0,0,114,21,0,0,0,114,25,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,14,95,117,110,
- 112,97,99,107,95,117,105,110,116,49,54,56,0,0,0,115,
- 4,0,0,0,0,2,16,1,114,29,0,0,0,99,0,0,
- 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,
- 0,0,71,0,0,0,115,20,0,0,0,116,0,160,1,100,
- 1,100,2,132,0,124,0,68,0,131,1,161,1,83,0,41,
- 3,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,
- 111,114,32,111,115,46,112,97,116,104,46,106,111,105,110,40,
- 41,46,99,1,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,5,0,0,0,83,0,0,0,115,26,0,0,0,
- 103,0,124,0,93,18,125,1,124,1,114,22,124,1,160,0,
- 116,1,161,1,145,2,113,4,83,0,114,3,0,0,0,41,
- 2,218,6,114,115,116,114,105,112,218,15,112,97,116,104,95,
- 115,101,112,97,114,97,116,111,114,115,41,2,218,2,46,48,
- 218,4,112,97,114,116,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,10,60,108,105,115,116,99,111,109,112,
- 62,64,0,0,0,115,6,0,0,0,6,1,2,0,4,255,
- 122,30,95,112,97,116,104,95,106,111,105,110,46,60,108,111,
- 99,97,108,115,62,46,60,108,105,115,116,99,111,109,112,62,
- 41,2,218,8,112,97,116,104,95,115,101,112,218,4,106,111,
- 105,110,41,1,218,10,112,97,116,104,95,112,97,114,116,115,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 10,95,112,97,116,104,95,106,111,105,110,62,0,0,0,115,
- 6,0,0,0,0,2,10,1,2,255,114,38,0,0,0,99,
- 1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,
- 5,0,0,0,67,0,0,0,115,96,0,0,0,116,0,116,
- 1,131,1,100,1,107,2,114,36,124,0,160,2,116,3,161,
- 1,92,3,125,1,125,2,125,3,124,1,124,3,102,2,83,
- 0,116,4,124,0,131,1,68,0,93,42,125,4,124,4,116,
- 1,107,6,114,44,124,0,106,5,124,4,100,1,100,2,141,
- 2,92,2,125,1,125,3,124,1,124,3,102,2,2,0,1,
- 0,83,0,113,44,100,3,124,0,102,2,83,0,41,4,122,
- 32,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,
- 32,111,115,46,112,97,116,104,46,115,112,108,105,116,40,41,
- 46,233,1,0,0,0,41,1,90,8,109,97,120,115,112,108,
- 105,116,218,0,41,6,114,22,0,0,0,114,31,0,0,0,
- 218,10,114,112,97,114,116,105,116,105,111,110,114,35,0,0,
- 0,218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,
- 108,105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,
- 110,116,218,1,95,218,4,116,97,105,108,114,19,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 11,95,112,97,116,104,95,115,112,108,105,116,68,0,0,0,
- 115,16,0,0,0,0,2,12,1,16,1,8,1,12,1,8,
- 1,18,1,14,1,114,47,0,0,0,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,10,0,0,0,116,0,160,1,124,0,161,1,
- 83,0,41,1,122,126,83,116,97,116,32,116,104,101,32,112,
- 97,116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,
- 32,115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,
- 111,110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,
- 115,105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,
- 32,105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,
- 32,32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,
- 115,116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,
- 32,32,32,32,41,2,114,2,0,0,0,90,4,115,116,97,
- 116,169,1,114,44,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,218,10,95,112,97,116,104,95,115,
- 116,97,116,80,0,0,0,115,2,0,0,0,0,7,114,49,
- 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,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,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,115,112,101,99,105,102,105,101,100,32,109,111,
- 100,101,32,116,121,112,101,46,70,105,0,240,0,0,41,3,
- 114,49,0,0,0,218,7,79,83,69,114,114,111,114,218,7,
- 115,116,95,109,111,100,101,41,3,114,44,0,0,0,218,4,
- 109,111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,18,
- 95,112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,
- 112,101,90,0,0,0,115,10,0,0,0,0,2,2,1,12,
- 1,14,1,8,1,114,53,0,0,0,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,10,0,0,0,116,0,124,0,100,1,131,2,
- 83,0,41,2,122,31,82,101,112,108,97,99,101,109,101,110,
- 116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,115,
- 102,105,108,101,46,105,0,128,0,0,41,1,114,53,0,0,
- 0,114,48,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,12,95,112,97,116,104,95,105,115,102,
- 105,108,101,99,0,0,0,115,2,0,0,0,0,2,114,54,
- 0,0,0,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,22,0,0,
- 0,124,0,115,12,116,0,160,1,161,0,125,0,116,2,124,
- 0,100,1,131,2,83,0,41,2,122,30,82,101,112,108,97,
- 99,101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,
- 116,104,46,105,115,100,105,114,46,105,0,64,0,0,41,3,
- 114,2,0,0,0,218,6,103,101,116,99,119,100,114,53,0,
- 0,0,114,48,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,218,11,95,112,97,116,104,95,105,115,
- 100,105,114,104,0,0,0,115,6,0,0,0,0,2,4,1,
- 8,1,114,56,0,0,0,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,26,0,0,0,124,0,160,0,116,1,161,1,112,24,124,
- 0,100,1,100,2,133,2,25,0,116,2,107,6,83,0,41,
- 3,122,142,82,101,112,108,97,99,101,109,101,110,116,32,102,
- 111,114,32,111,115,46,112,97,116,104,46,105,115,97,98,115,
- 46,10,10,32,32,32,32,67,111,110,115,105,100,101,114,115,
- 32,97,32,87,105,110,100,111,119,115,32,100,114,105,118,101,
- 45,114,101,108,97,116,105,118,101,32,112,97,116,104,32,40,
- 110,111,32,100,114,105,118,101,44,32,98,117,116,32,115,116,
- 97,114,116,115,32,119,105,116,104,32,115,108,97,115,104,41,
- 32,116,111,10,32,32,32,32,115,116,105,108,108,32,98,101,
- 32,34,97,98,115,111,108,117,116,101,34,46,10,32,32,32,
- 32,114,39,0,0,0,233,3,0,0,0,41,3,114,10,0,
- 0,0,114,31,0,0,0,218,20,95,112,97,116,104,115,101,
- 112,115,95,119,105,116,104,95,99,111,108,111,110,114,48,0,
+ 90,13,100,23,100,24,132,0,90,14,100,101,100,26,100,27,
+ 132,1,90,15,101,16,101,15,106,17,131,1,90,18,100,28,
+ 160,19,100,29,100,30,161,2,100,31,23,0,90,20,101,21,
+ 160,22,101,20,100,30,161,2,90,23,100,32,90,24,100,33,
+ 90,25,100,34,103,1,90,26,100,35,103,1,90,27,101,27,
+ 4,0,90,28,90,29,100,102,100,36,100,37,156,1,100,38,
+ 100,39,132,3,90,30,100,40,100,41,132,0,90,31,100,42,
+ 100,43,132,0,90,32,100,44,100,45,132,0,90,33,100,46,
+ 100,47,132,0,90,34,100,48,100,49,132,0,90,35,100,50,
+ 100,51,132,0,90,36,100,52,100,53,132,0,90,37,100,54,
+ 100,55,132,0,90,38,100,56,100,57,132,0,90,39,100,103,
+ 100,58,100,59,132,1,90,40,100,104,100,61,100,62,132,1,
+ 90,41,100,105,100,64,100,65,132,1,90,42,100,66,100,67,
+ 132,0,90,43,101,44,131,0,90,45,100,106,100,36,101,45,
+ 100,68,156,2,100,69,100,70,132,3,90,46,71,0,100,71,
+ 100,72,132,0,100,72,131,2,90,47,71,0,100,73,100,74,
+ 132,0,100,74,131,2,90,48,71,0,100,75,100,76,132,0,
+ 100,76,101,48,131,3,90,49,71,0,100,77,100,78,132,0,
+ 100,78,131,2,90,50,71,0,100,79,100,80,132,0,100,80,
+ 101,50,101,49,131,4,90,51,71,0,100,81,100,82,132,0,
+ 100,82,101,50,101,48,131,4,90,52,103,0,90,53,71,0,
+ 100,83,100,84,132,0,100,84,101,50,101,48,131,4,90,54,
+ 71,0,100,85,100,86,132,0,100,86,131,2,90,55,71,0,
+ 100,87,100,88,132,0,100,88,131,2,90,56,71,0,100,89,
+ 100,90,132,0,100,90,131,2,90,57,71,0,100,91,100,92,
+ 132,0,100,92,131,2,90,58,100,107,100,93,100,94,132,1,
+ 90,59,100,95,100,96,132,0,90,60,100,97,100,98,132,0,
+ 90,61,100,99,100,100,132,0,90,62,100,36,83,0,41,108,
+ 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109,
+ 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104,
+ 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10,
+ 84,104,105,115,32,109,111,100,117,108,101,32,105,115,32,78,
+ 79,84,32,109,101,97,110,116,32,116,111,32,98,101,32,100,
+ 105,114,101,99,116,108,121,32,105,109,112,111,114,116,101,100,
+ 33,32,73,116,32,104,97,115,32,98,101,101,110,32,100,101,
+ 115,105,103,110,101,100,32,115,117,99,104,10,116,104,97,116,
+ 32,105,116,32,99,97,110,32,98,101,32,98,111,111,116,115,
+ 116,114,97,112,112,101,100,32,105,110,116,111,32,80,121,116,
+ 104,111,110,32,97,115,32,116,104,101,32,105,109,112,108,101,
+ 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,
+ 111,114,116,46,32,65,115,10,115,117,99,104,32,105,116,32,
+ 114,101,113,117,105,114,101,115,32,116,104,101,32,105,110,106,
+ 101,99,116,105,111,110,32,111,102,32,115,112,101,99,105,102,
+ 105,99,32,109,111,100,117,108,101,115,32,97,110,100,32,97,
+ 116,116,114,105,98,117,116,101,115,32,105,110,32,111,114,100,
+ 101,114,32,116,111,10,119,111,114,107,46,32,79,110,101,32,
+ 115,104,111,117,108,100,32,117,115,101,32,105,109,112,111,114,
+ 116,108,105,98,32,97,115,32,116,104,101,32,112,117,98,108,
+ 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111,
+ 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,
+ 46,10,10,41,1,218,3,119,105,110,41,2,90,6,99,121,
+ 103,119,105,110,90,6,100,97,114,119,105,110,99,0,0,0,
+ 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
+ 0,3,0,0,0,115,60,0,0,0,116,0,106,1,160,2,
+ 116,3,161,1,114,48,116,0,106,1,160,2,116,4,161,1,
+ 114,30,100,1,137,0,110,4,100,2,137,0,135,0,102,1,
+ 100,3,100,4,132,8,125,0,110,8,100,5,100,4,132,0,
+ 125,0,124,0,83,0,41,6,78,90,12,80,89,84,72,79,
+ 78,67,65,83,69,79,75,115,12,0,0,0,80,89,84,72,
+ 79,78,67,65,83,69,79,75,99,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0,
+ 0,115,10,0,0,0,136,0,116,0,106,1,107,6,83,0,
+ 41,1,250,53,84,114,117,101,32,105,102,32,102,105,108,101,
+ 110,97,109,101,115,32,109,117,115,116,32,98,101,32,99,104,
+ 101,99,107,101,100,32,99,97,115,101,45,105,110,115,101,110,
+ 115,105,116,105,118,101,108,121,46,41,2,218,3,95,111,115,
+ 90,7,101,110,118,105,114,111,110,169,0,169,1,218,3,107,
+ 101,121,114,3,0,0,0,250,38,60,102,114,111,122,101,110,
+ 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,
+ 115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218,
+ 11,95,114,101,108,97,120,95,99,97,115,101,36,0,0,0,
+ 115,2,0,0,0,0,2,122,37,95,109,97,107,101,95,114,
+ 101,108,97,120,95,99,97,115,101,46,60,108,111,99,97,108,
+ 115,62,46,95,114,101,108,97,120,95,99,97,115,101,99,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
+ 0,0,0,83,0,0,0,115,4,0,0,0,100,1,83,0,
+ 41,2,114,1,0,0,0,70,114,3,0,0,0,114,3,0,
+ 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,114,7,0,0,0,40,0,0,0,115,2,0,0,0,0,
+ 2,41,5,218,3,115,121,115,218,8,112,108,97,116,102,111,
+ 114,109,218,10,115,116,97,114,116,115,119,105,116,104,218,27,
+ 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,218,35,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,83,84,82,95,75,69,89,
+ 41,1,114,7,0,0,0,114,3,0,0,0,114,4,0,0,
+ 0,114,6,0,0,0,218,16,95,109,97,107,101,95,114,101,
+ 108,97,120,95,99,97,115,101,29,0,0,0,115,14,0,0,
+ 0,0,1,12,1,12,1,6,2,4,2,14,4,8,3,114,
+ 13,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,20,0,
+ 0,0,116,0,124,0,131,1,100,1,64,0,160,1,100,2,
+ 100,3,161,2,83,0,41,4,122,42,67,111,110,118,101,114,
+ 116,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103,
+ 101,114,32,116,111,32,108,105,116,116,108,101,45,101,110,100,
+ 105,97,110,46,236,3,0,0,0,255,127,255,127,3,0,233,
+ 4,0,0,0,218,6,108,105,116,116,108,101,41,2,218,3,
+ 105,110,116,218,8,116,111,95,98,121,116,101,115,41,1,218,
+ 1,120,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,218,12,95,112,97,99,107,95,117,105,110,116,51,50,46,
+ 0,0,0,115,2,0,0,0,0,2,114,20,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,116,0,124,
+ 0,131,1,100,1,107,2,115,16,116,1,130,1,116,2,160,
+ 3,124,0,100,2,161,2,83,0,41,3,122,47,67,111,110,
+ 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32,
+ 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111,
+ 32,97,110,32,105,110,116,101,103,101,114,46,114,15,0,0,
+ 0,114,16,0,0,0,169,4,218,3,108,101,110,218,14,65,
+ 115,115,101,114,116,105,111,110,69,114,114,111,114,114,17,0,
+ 0,0,218,10,102,114,111,109,95,98,121,116,101,115,169,1,
+ 218,4,100,97,116,97,114,3,0,0,0,114,3,0,0,0,
+ 114,6,0,0,0,218,14,95,117,110,112,97,99,107,95,117,
+ 105,110,116,51,50,51,0,0,0,115,4,0,0,0,0,2,
+ 16,1,114,27,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,116,0,124,0,131,1,100,1,107,2,115,
+ 16,116,1,130,1,116,2,160,3,124,0,100,2,161,2,83,
+ 0,41,3,122,47,67,111,110,118,101,114,116,32,50,32,98,
+ 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101,
+ 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101,
+ 103,101,114,46,233,2,0,0,0,114,16,0,0,0,114,21,
+ 0,0,0,114,25,0,0,0,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,218,14,95,117,110,112,97,99,107,
+ 95,117,105,110,116,49,54,56,0,0,0,115,4,0,0,0,
+ 0,2,16,1,114,29,0,0,0,99,0,0,0,0,0,0,
+ 0,0,0,0,0,0,1,0,0,0,4,0,0,0,71,0,
+ 0,0,115,20,0,0,0,116,0,160,1,100,1,100,2,132,
+ 0,124,0,68,0,131,1,161,1,83,0,41,3,122,31,82,
+ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,
+ 115,46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,
+ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,5,
+ 0,0,0,83,0,0,0,115,26,0,0,0,103,0,124,0,
+ 93,18,125,1,124,1,114,4,124,1,160,0,116,1,161,1,
+ 145,2,113,4,83,0,114,3,0,0,0,41,2,218,6,114,
+ 115,116,114,105,112,218,15,112,97,116,104,95,115,101,112,97,
+ 114,97,116,111,114,115,41,2,218,2,46,48,218,4,112,97,
+ 114,116,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,218,10,60,108,105,115,116,99,111,109,112,62,64,0,0,
+ 0,115,6,0,0,0,6,1,2,0,4,255,122,30,95,112,
+ 97,116,104,95,106,111,105,110,46,60,108,111,99,97,108,115,
+ 62,46,60,108,105,115,116,99,111,109,112,62,41,2,218,8,
+ 112,97,116,104,95,115,101,112,218,4,106,111,105,110,41,1,
+ 218,10,112,97,116,104,95,112,97,114,116,115,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,218,10,95,112,97,
+ 116,104,95,106,111,105,110,62,0,0,0,115,6,0,0,0,
+ 0,2,10,1,2,255,114,38,0,0,0,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
+ 67,0,0,0,115,96,0,0,0,116,0,116,1,131,1,100,
+ 1,107,2,114,36,124,0,160,2,116,3,161,1,92,3,125,
+ 1,125,2,125,3,124,1,124,3,102,2,83,0,116,4,124,
+ 0,131,1,68,0,93,42,125,4,124,4,116,1,107,6,114,
+ 44,124,0,106,5,124,4,100,1,100,2,141,2,92,2,125,
+ 1,125,3,124,1,124,3,102,2,2,0,1,0,83,0,113,
+ 44,100,3,124,0,102,2,83,0,41,4,122,32,82,101,112,
+ 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,
+ 112,97,116,104,46,115,112,108,105,116,40,41,46,233,1,0,
+ 0,0,41,1,90,8,109,97,120,115,112,108,105,116,218,0,
+ 41,6,114,22,0,0,0,114,31,0,0,0,218,10,114,112,
+ 97,114,116,105,116,105,111,110,114,35,0,0,0,218,8,114,
+ 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,
+ 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,
+ 95,218,4,116,97,105,108,114,19,0,0,0,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,218,11,95,112,97,
+ 116,104,95,115,112,108,105,116,68,0,0,0,115,16,0,0,
+ 0,0,2,12,1,16,1,8,1,12,1,8,1,18,1,14,
+ 1,114,47,0,0,0,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,
+ 10,0,0,0,116,0,160,1,124,0,161,1,83,0,41,1,
+ 122,126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,
+ 10,10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,
+ 97,114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,
+ 111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,
+ 32,116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,
+ 101,120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,
+ 40,101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,
+ 32,114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,
+ 41,2,114,2,0,0,0,90,4,115,116,97,116,169,1,114,
+ 44,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,80,
+ 0,0,0,115,2,0,0,0,0,7,114,49,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,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,
+ 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,
+ 115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,116,
+ 121,112,101,46,70,105,0,240,0,0,41,3,114,49,0,0,
+ 0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,
+ 111,100,101,41,3,114,44,0,0,0,218,4,109,111,100,101,
+ 90,9,115,116,97,116,95,105,110,102,111,114,3,0,0,0,
+ 114,3,0,0,0,114,6,0,0,0,218,18,95,112,97,116,
+ 104,95,105,115,95,109,111,100,101,95,116,121,112,101,90,0,
+ 0,0,115,10,0,0,0,0,2,2,1,12,1,14,1,8,
+ 1,114,53,0,0,0,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,
+ 10,0,0,0,116,0,124,0,100,1,131,2,83,0,41,2,
+ 122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,111,
+ 114,32,111,115,46,112,97,116,104,46,105,115,102,105,108,101,
+ 46,105,0,128,0,0,41,1,114,53,0,0,0,114,48,0,
0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,11,95,112,97,116,104,95,105,115,97,98,115,111,0,
- 0,0,115,2,0,0,0,0,6,114,59,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,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,60,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,50,0,0,0,
- 90,6,117,110,108,105,110,107,41,6,114,44,0,0,0,114,
- 26,0,0,0,114,52,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,69,0,0,0,105,82,13,0,0,114,28,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,
+ 0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,99,
+ 0,0,0,115,2,0,0,0,0,2,114,54,0,0,0,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,22,0,0,0,124,0,115,
+ 12,116,0,160,1,161,0,125,0,116,2,124,0,100,1,131,
+ 2,83,0,41,2,122,30,82,101,112,108,97,99,101,109,101,
+ 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,
+ 115,100,105,114,46,105,0,64,0,0,41,3,114,2,0,0,
+ 0,218,6,103,101,116,99,119,100,114,53,0,0,0,114,48,
+ 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
+ 0,0,218,11,95,112,97,116,104,95,105,115,100,105,114,104,
+ 0,0,0,115,6,0,0,0,0,2,4,1,8,1,114,56,
+ 0,0,0,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,26,0,0,
+ 0,124,0,160,0,116,1,161,1,112,24,124,0,100,1,100,
+ 2,133,2,25,0,116,2,107,6,83,0,41,3,122,142,82,
+ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,
+ 115,46,112,97,116,104,46,105,115,97,98,115,46,10,10,32,
+ 32,32,32,67,111,110,115,105,100,101,114,115,32,97,32,87,
+ 105,110,100,111,119,115,32,100,114,105,118,101,45,114,101,108,
+ 97,116,105,118,101,32,112,97,116,104,32,40,110,111,32,100,
+ 114,105,118,101,44,32,98,117,116,32,115,116,97,114,116,115,
+ 32,119,105,116,104,32,115,108,97,115,104,41,32,116,111,10,
+ 32,32,32,32,115,116,105,108,108,32,98,101,32,34,97,98,
+ 115,111,108,117,116,101,34,46,10,32,32,32,32,114,39,0,
+ 0,0,233,3,0,0,0,41,3,114,10,0,0,0,114,31,
+ 0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119,
+ 105,116,104,95,99,111,108,111,110,114,48,0,0,0,114,3,
+ 0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,
+ 112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,2,
+ 0,0,0,0,6,114,59,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,
+ 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,60,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,50,0,0,0,90,6,117,110,
+ 108,105,110,107,41,6,114,44,0,0,0,114,26,0,0,0,
+ 114,52,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,69,
+ 0,0,0,105,82,13,0,0,114,28,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,
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,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,40,0,0,0,114,39,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,28,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,47,0,0,0,114,41,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,36,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,62,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,59,0,0,0,114,38,0,0,0,114,55,0,
- 0,0,114,31,0,0,0,218,6,108,115,116,114,105,112,218,
- 8,95,80,89,67,65,67,72,69,41,12,114,44,0,0,0,
- 90,14,100,101,98,117,103,95,111,118,101,114,114,105,100,101,
- 114,70,0,0,0,218,7,109,101,115,115,97,103,101,218,4,
- 104,101,97,100,114,46,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,33,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,98,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,
+ 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,114,72,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,71,0,0,
- 0,62,2,0,0,0,114,28,0,0,0,114,57,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,
- 57,0,0,0,114,28,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,73,0,0,0,41,22,
- 114,8,0,0,0,114,80,0,0,0,114,81,0,0,0,114,
- 82,0,0,0,114,2,0,0,0,114,79,0,0,0,114,47,
- 0,0,0,114,90,0,0,0,114,30,0,0,0,114,31,0,
- 0,0,114,10,0,0,0,114,35,0,0,0,114,22,0,0,
- 0,114,92,0,0,0,114,87,0,0,0,218,5,99,111,117,
- 110,116,114,43,0,0,0,114,88,0,0,0,114,86,0,0,
- 0,218,9,112,97,114,116,105,116,105,111,110,114,38,0,0,
- 0,218,15,83,79,85,82,67,69,95,83,85,70,70,73,88,
- 69,83,41,10,114,44,0,0,0,114,94,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,70,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,104,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,103,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,73,0,0,0,
- 78,114,71,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,41,0,0,0,
- 218,5,108,111,119,101,114,114,103,0,0,0,114,82,0,0,
- 0,114,87,0,0,0,114,54,0,0,0,41,5,218,13,98,
- 121,116,101,99,111,100,101,95,112,97,116,104,114,96,0,0,
- 0,114,45,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,144,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,109,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,102,
- 0,0,0,114,98,0,0,0,114,82,0,0,0,114,89,0,
- 0,0,41,1,114,97,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,163,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,113,
- 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,60,0,0,
- 0,233,128,0,0,0,41,3,114,49,0,0,0,114,51,0,
- 0,0,114,50,0,0,0,41,2,114,44,0,0,0,114,52,
- 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,175,1,
- 0,0,115,12,0,0,0,0,2,2,1,14,1,14,1,10,
- 3,8,1,114,115,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,117,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,117,0,0,0,218,4,97,114,103,115,90,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,195,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,67,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,206,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,187,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,73,0,0,0,41,6,218,11,102,105,110,100,95,108,111,
- 97,100,101,114,114,22,0,0,0,114,75,0,0,0,114,76,
- 0,0,0,114,62,0,0,0,218,13,73,109,112,111,114,116,
- 87,97,114,110,105,110,103,41,5,114,119,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,215,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,
+ 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,40,0,0,0,114,39,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,28,
+ 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,47,0,0,0,114,41,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,36,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,62,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,
+ 59,0,0,0,114,38,0,0,0,114,55,0,0,0,114,31,
+ 0,0,0,218,6,108,115,116,114,105,112,218,8,95,80,89,
+ 67,65,67,72,69,41,12,114,44,0,0,0,90,14,100,101,
+ 98,117,103,95,111,118,101,114,114,105,100,101,114,70,0,0,
+ 0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100,
+ 114,46,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,33,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,98,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,72,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,71,0,0,0,62,2,0,
+ 0,0,114,28,0,0,0,114,57,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,57,0,0,0,
+ 114,28,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,73,0,0,0,41,22,114,8,0,0,
+ 0,114,80,0,0,0,114,81,0,0,0,114,82,0,0,0,
+ 114,2,0,0,0,114,79,0,0,0,114,47,0,0,0,114,
+ 90,0,0,0,114,30,0,0,0,114,31,0,0,0,114,10,
+ 0,0,0,114,35,0,0,0,114,22,0,0,0,114,92,0,
+ 0,0,114,87,0,0,0,218,5,99,111,117,110,116,114,43,
+ 0,0,0,114,88,0,0,0,114,86,0,0,0,218,9,112,
+ 97,114,116,105,116,105,111,110,114,38,0,0,0,218,15,83,
+ 79,85,82,67,69,95,83,85,70,70,73,88,69,83,41,10,
+ 114,44,0,0,0,114,94,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,70,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,104,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,103,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,73,0,0,0,78,114,71,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,41,0,0,0,218,5,108,111,
+ 119,101,114,114,103,0,0,0,114,82,0,0,0,114,87,0,
+ 0,0,114,54,0,0,0,41,5,218,13,98,121,116,101,99,
+ 111,100,101,95,112,97,116,104,114,96,0,0,0,114,45,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,144,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,109,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,102,0,0,0,114,
+ 98,0,0,0,114,82,0,0,0,114,89,0,0,0,41,1,
+ 114,97,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,163,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,113,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,60,0,0,0,233,128,0,
+ 0,0,41,3,114,49,0,0,0,114,51,0,0,0,114,50,
+ 0,0,0,41,2,114,44,0,0,0,114,52,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,175,1,0,0,115,12,
+ 0,0,0,0,2,2,1,14,1,14,1,10,3,8,1,114,
+ 115,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,117,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,117,
+ 0,0,0,218,4,97,114,103,115,90,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,195,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,67,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,206,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,187,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,73,0,0,
+ 0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114,
+ 114,22,0,0,0,114,75,0,0,0,114,76,0,0,0,114,
+ 62,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,
+ 105,110,103,41,5,114,119,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,215,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,118,0,0,0,114,22,0,0,0,
+ 218,8,69,79,70,69,114,114,111,114,114,27,0,0,0,41,
+ 6,114,26,0,0,0,114,117,0,0,0,218,11,101,120,99,
+ 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,
+ 93,0,0,0,114,83,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,232,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,27,0,0,0,114,134,0,0,0,114,149,0,0,0,
+ 114,118,0,0,0,41,6,114,26,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,117,0,0,0,114,151,0,0,
+ 0,114,93,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,9,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,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,118,0,0,0,114,
- 22,0,0,0,218,8,69,79,70,69,114,114,111,114,114,27,
- 0,0,0,41,6,114,26,0,0,0,114,117,0,0,0,218,
- 11,101,120,99,95,100,101,116,97,105,108,115,90,5,109,97,
- 103,105,99,114,93,0,0,0,114,83,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,232,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,27,0,0,0,114,134,0,0,0,114,
- 149,0,0,0,114,118,0,0,0,41,6,114,26,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,117,0,0,0,
- 114,151,0,0,0,114,93,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,9,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,118,0,0,0,
- 41,4,114,26,0,0,0,218,11,115,111,117,114,99,101,95,
- 104,97,115,104,114,117,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,37,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,82,0,0,0,116,0,160,1,124,0,161,
- 1,125,4,116,2,124,4,116,3,131,2,114,58,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,110,20,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,117,0,0,0,114,44,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,118,0,0,0,
- 114,62,0,0,0,41,5,114,26,0,0,0,114,117,0,0,
- 0,114,107,0,0,0,114,108,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,61,2,0,0,115,20,0,0,0,0,2,10,1,
- 10,1,12,1,8,1,12,1,6,2,10,1,2,0,2,255,
- 114,165,0,0,0,114,73,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,73,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,26,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,74,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,
+ 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,118,0,0,0,41,4,114,26,
+ 0,0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,
+ 114,117,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,37,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,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,116,5,130,1,124,3,160,2,124,1,161,1,1,
- 0,124,3,160,2,116,6,160,7,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,
- 39,0,0,0,114,146,0,0,0,41,8,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,23,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,26,0,0,0,114,83,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,84,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,73,0,0,0,78,84,
- 41,7,218,8,116,111,107,101,110,105,122,101,114,64,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,95,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,73,0,0,0,
- 41,17,114,128,0,0,0,114,179,0,0,0,114,118,0,0,
- 0,114,2,0,0,0,114,79,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,111,0,0,0,114,112,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,47,0,0,
- 0,218,6,97,112,112,101,110,100,41,9,114,117,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,112,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,86,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,9,100,9,102,2,100,10,100,11,132,1,
- 131,1,90,10,101,7,100,9,102,1,100,12,100,13,132,1,
- 131,1,90,11,100,9,83,0,41,14,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,110,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,50,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,192,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,118,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,26,4,0,116,9,107,10,114,112,1,0,1,
- 0,1,0,89,0,100,0,83,0,89,0,110,2,88,0,124,
+ 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,
+ 117,0,0,0,114,44,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,118,0,0,0,114,62,0,0,0,41,
+ 5,114,26,0,0,0,114,117,0,0,0,114,107,0,0,0,
+ 114,108,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,61,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,
+ 73,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,73,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,26,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,74,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,116,5,130,
+ 1,124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,
+ 6,160,7,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,39,0,0,0,114,146,
+ 0,0,0,41,8,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,23,
+ 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,26,0,0,0,114,83,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,84,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,73,0,0,0,78,84,41,7,218,8,116,111,
+ 107,101,110,105,122,101,114,64,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,95,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,73,0,0,0,41,17,114,128,0,0,
+ 0,114,179,0,0,0,114,118,0,0,0,114,2,0,0,0,
+ 114,79,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,111,0,0,0,114,112,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,47,0,0,0,218,6,97,112,112,
+ 101,110,100,41,9,114,117,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,112,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,110,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,50,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,192,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,28,0,
0,0,41,2,114,139,0,0,0,90,11,115,121,115,95,118,
101,114,115,105,111,110,114,40,0,0,0,41,10,218,11,68,
@@ -1013,7 +1011,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,199,
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,12,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,
@@ -1057,1781 +1055,1783 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,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,180,
- 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,
- 16,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,39,0,0,
- 0,114,71,0,0,0,114,73,0,0,0,114,28,0,0,0,
- 218,8,95,95,105,110,105,116,95,95,41,4,114,47,0,0,
- 0,114,179,0,0,0,114,43,0,0,0,114,41,0,0,0,
- 41,5,114,119,0,0,0,114,139,0,0,0,114,97,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,249,
- 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,119,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,1,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,118,0,0,0,114,62,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,119,
- 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,4,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,119,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,12,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,
- 244,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,50,0,0,0,169,2,114,119,0,0,0,114,44,
- 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,19,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,27,
- 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,119,0,0,0,114,108,0,0,0,90,10,99,
- 97,99,104,101,95,112,97,116,104,114,26,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,41,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,119,0,0,0,
- 114,44,0,0,0,114,26,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,114,225,0,0,0,51,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,116,0,0,0,78,41,5,114,179,0,0,0,218,8,
- 103,101,116,95,100,97,116,97,114,50,0,0,0,114,118,0,
- 0,0,114,176,0,0,0,41,5,114,119,0,0,0,114,139,
- 0,0,0,114,44,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,58,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,105,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,84,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,119,0,0,0,114,26,0,0,0,114,44,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,68,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,34,124,7,
- 115,254,116,9,106,10,100,11,107,2,144,1,114,34,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,39,0,0,0,114,73,0,0,0,
- 114,28,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,117,0,0,0,
- 114,107,0,0,0,114,108,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,98,0,0,0,114,82,0,0,0,
- 114,224,0,0,0,114,50,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,118,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,119,0,0,0,114,139,0,0,0,114,108,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,107,0,0,0,218,2,
- 115,116,114,26,0,0,0,114,151,0,0,0,114,83,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,76,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,17,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,
+ 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,180,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,4,0,0,0,0,0,0,0,115,124,0,0,0,101,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,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,119,0,0,0,114,139,0,0,0,
- 114,44,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,209,0,0,0,166,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,110,0,0,0,169,2,218,9,95,95,99,108,97,115,
- 115,95,95,114,131,0,0,0,169,2,114,119,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,172,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,110,0,0,0,169,3,218,4,104,97,115,104,114,117,
- 0,0,0,114,44,0,0,0,169,1,114,119,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,176,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,179,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,
+ 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,39,0,0,0,114,71,0,0,0,114,73,0,
+ 0,0,114,28,0,0,0,218,8,95,95,105,110,105,116,95,
+ 95,41,4,114,47,0,0,0,114,179,0,0,0,114,43,0,
+ 0,0,114,41,0,0,0,41,5,114,119,0,0,0,114,139,
+ 0,0,0,114,97,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,249,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,119,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,1,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,118,
+ 0,0,0,114,62,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,119,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,4,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,119,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,12,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,244,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,50,0,0,0,169,2,
+ 114,119,0,0,0,114,44,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,19,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,27,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,119,0,0,0,114,
+ 108,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104,
+ 114,26,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,41,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,119,0,0,0,114,44,0,0,0,114,26,0,0,
+ 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
+ 114,225,0,0,0,51,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,116,0,0,0,78,41,5,
+ 114,179,0,0,0,218,8,103,101,116,95,100,97,116,97,114,
+ 50,0,0,0,114,118,0,0,0,114,176,0,0,0,41,5,
+ 114,119,0,0,0,114,139,0,0,0,114,44,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,58,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,105,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,84,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,119,0,0,0,114,26,0,
+ 0,0,114,44,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,68,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,39,0,
+ 0,0,114,73,0,0,0,114,28,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,117,0,0,0,114,107,0,0,0,114,108,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,98,0,
+ 0,0,114,82,0,0,0,114,224,0,0,0,114,50,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,118,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,119,0,0,0,114,139,0,
+ 0,0,114,108,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,107,0,0,0,218,2,115,116,114,26,0,0,0,114,151,
+ 0,0,0,114,83,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,76,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,17,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,119,0,
+ 0,0,114,139,0,0,0,114,44,0,0,0,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,114,209,0,0,0,
+ 166,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,110,0,0,0,169,2,218,
+ 9,95,95,99,108,97,115,115,95,95,114,131,0,0,0,169,
+ 2,114,119,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,172,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,110,0,0,0,169,3,218,
+ 4,104,97,115,104,114,117,0,0,0,114,44,0,0,0,169,
+ 1,114,119,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,176,
+ 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,
- 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,48,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,191,
- 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,64,0,0,0,90,9,111,112,
- 101,110,95,99,111,100,101,114,85,0,0,0,90,4,114,101,
- 97,100,114,65,0,0,0,41,3,114,119,0,0,0,114,44,
- 0,0,0,114,68,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,114,227,0,0,0,196,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,110,0,0,0,41,1,114,182,0,0,0,
- 169,2,114,119,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,
- 207,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,73,0,0,0,114,251,0,0,0,41,5,114,38,0,0,
- 0,114,47,0,0,0,114,44,0,0,0,114,64,0,0,0,
- 114,65,0,0,0,169,3,114,119,0,0,0,90,8,114,101,
- 115,111,117,114,99,101,114,44,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,213,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,73,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,38,
- 0,0,0,114,47,0,0,0,114,44,0,0,0,114,255,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,179,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,48,0,0,0,114,219,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,
- 217,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,73,0,0,0,41,5,114,35,0,0,
- 0,114,38,0,0,0,114,47,0,0,0,114,44,0,0,0,
- 114,54,0,0,0,169,3,114,119,0,0,0,114,117,0,0,
- 0,114,44,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,2,1,0,0,223,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,47,0,0,0,114,44,0,0,0,114,246,
+ 0,114,179,0,0,0,191,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,64,
+ 0,0,0,90,9,111,112,101,110,95,99,111,100,101,114,85,
+ 0,0,0,90,4,114,101,97,100,114,65,0,0,0,41,3,
+ 114,119,0,0,0,114,44,0,0,0,114,68,0,0,0,114,
+ 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,227,
+ 0,0,0,196,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,110,0,0,0,
+ 41,1,114,182,0,0,0,169,2,114,119,0,0,0,114,216,
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,229,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,161,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,49,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,119,0,0,0,114,44,0,0,0,114,238,0,
+ 0,0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,
+ 95,114,101,97,100,101,114,207,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,73,0,0,0,114,251,0,0,
+ 0,41,5,114,38,0,0,0,114,47,0,0,0,114,44,0,
+ 0,0,114,64,0,0,0,114,65,0,0,0,169,3,114,119,
+ 0,0,0,90,8,114,101,115,111,117,114,99,101,114,44,0,
0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,224,0,0,0,237,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,115,0,0,0,114,225,0,0,0,41,5,
- 114,119,0,0,0,114,108,0,0,0,114,107,0,0,0,114,
- 26,0,0,0,114,52,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,226,0,0,0,242,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,60,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,
- 0,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,112,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,110,82,4,0,
- 116,7,107,10,114,112,1,0,1,0,1,0,89,0,113,60,
- 89,0,110,60,4,0,116,8,107,10,114,170,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,162,10,1,0,100,2,83,0,87,0,
- 53,0,100,2,125,8,126,8,88,0,89,0,110,2,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,250,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,47,0,0,0,114,56,0,0,0,114,186,0,0,0,
- 114,42,0,0,0,114,38,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,50,0,0,0,114,134,0,0,
- 0,114,149,0,0,0,114,69,0,0,0,41,9,114,119,0,
- 0,0,114,44,0,0,0,114,26,0,0,0,114,12,1,0,
- 0,218,6,112,97,114,101,110,116,114,97,0,0,0,114,37,
- 0,0,0,114,33,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,247,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,32,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,233,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,117,0,0,0,114,107,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,119,0,0,0,114,139,0,0,
- 0,114,44,0,0,0,114,26,0,0,0,114,151,0,0,0,
+ 0,218,13,111,112,101,110,95,114,101,115,111,117,114,99,101,
+ 213,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,73,
+ 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,38,0,0,0,114,47,0,0,0,114,
+ 44,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,217,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,73,0,0,
+ 0,41,5,114,35,0,0,0,114,38,0,0,0,114,47,0,
+ 0,0,114,44,0,0,0,114,54,0,0,0,169,3,114,119,
+ 0,0,0,114,117,0,0,0,114,44,0,0,0,114,3,0,
+ 0,0,114,3,0,0,0,114,6,0,0,0,114,2,1,0,
+ 0,223,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,47,0,0,0,
+ 114,44,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,229,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,161,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,49,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,119,0,0,0,114,
+ 44,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,237,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,115,0,0,0,
+ 114,225,0,0,0,41,5,114,119,0,0,0,114,108,0,0,
+ 0,114,107,0,0,0,114,26,0,0,0,114,52,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 213,0,0,0,26,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,42,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,
+ 226,0,0,0,242,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,60,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,47,0,0,0,114,56,0,0,0,114,186,
+ 0,0,0,114,42,0,0,0,114,38,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,50,0,0,0,114,
+ 134,0,0,0,114,149,0,0,0,114,69,0,0,0,41,9,
+ 114,119,0,0,0,114,44,0,0,0,114,26,0,0,0,114,
+ 12,1,0,0,218,6,112,97,114,101,110,116,114,97,0,0,
+ 0,114,37,0,0,0,114,33,0,0,0,114,228,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 15,1,0,0,22,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,110,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,59,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,110,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,63,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,110,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,67,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,117,0,0,0,114,44,0,0,0,41,3,114,119,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,70,
- 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,117,0,0,0,114,44,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,78,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,39,
- 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,32,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,87,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,47,0,0,0,
- 114,44,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,84,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,90,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,
+ 225,0,0,0,247,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,233,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,117,0,0,0,114,107,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,119,0,0,0,114,
+ 139,0,0,0,114,44,0,0,0,114,26,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,26,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,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,
+ 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,42,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,22,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,110,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,59,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,110,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,
+ 63,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,110,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,
+ 67,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,117,0,0,0,114,44,0,0,0,41,3,114,
+ 119,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,70,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,117,0,0,0,114,44,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,78,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,39,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,32,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,87,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,47,
+ 0,0,0,114,44,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,84,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,229,0,0,0,94,
- 4,0,0,115,2,0,0,0,0,2,122,30,69,120,116,101,
+ 114,3,0,0,0,114,6,0,0,0,114,213,0,0,0,90,
+ 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,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,48,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,98,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,
- 51,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,110,0,0,0,41,6,
- 218,5,95,110,97,109,101,218,5,95,112,97,116,104,114,112,
- 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,119,0,0,0,114,117,0,
- 0,0,114,44,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,111,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,71,0,0,0,114,40,0,
- 0,0,41,2,114,8,0,0,0,114,44,0,0,0,90,8,
- 95,95,112,97,116,104,95,95,41,2,114,23,1,0,0,114,
- 41,0,0,0,41,4,114,119,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,117,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,110,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,119,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,127,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,110,
- 0,0,0,41,8,114,112,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,
- 119,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,131,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,110,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,144,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,110,0,0,0,169,1,114,32,1,0,0,41,2,114,119,
- 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,147,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,110,0,0,0,41,1,
- 114,24,1,0,0,41,3,114,119,0,0,0,114,35,1,0,
- 0,114,44,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,150,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,110,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,153,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,62,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,156,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,
- 110,0,0,0,114,34,1,0,0,169,2,114,119,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,159,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,110,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,162,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,104,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,110,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,168,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,62,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,171,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,
+ 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,94,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,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,180,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,40,
- 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,183,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,40,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,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
+ 0,114,250,0,0,0,114,48,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,98,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,51,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,110,0,0,
+ 0,41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,
+ 104,114,112,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,119,0,0,0,
+ 114,117,0,0,0,114,44,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,111,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,71,0,0,0,
+ 114,40,0,0,0,41,2,114,8,0,0,0,114,44,0,0,
+ 0,90,8,95,95,112,97,116,104,95,95,41,2,114,23,1,
+ 0,0,114,41,0,0,0,41,4,114,119,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,117,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,110,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,119,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,127,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,110,0,0,0,41,8,114,112,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,119,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,131,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,110,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,144,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,110,0,0,0,169,1,114,32,1,0,0,41,
+ 2,114,119,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,147,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,110,0,0,
+ 0,41,1,114,24,1,0,0,41,3,114,119,0,0,0,114,
+ 35,1,0,0,114,44,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,150,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,110,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,153,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,62,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,156,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,110,0,0,0,114,34,1,0,0,169,2,114,119,
+ 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,159,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,110,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,213,0,0,0,186,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,189,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,114,186,0,0,0,162,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,104,
+ 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,110,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,168,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,62,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,171,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,180,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,0,83,0,114,110,
- 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,192,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,195,
- 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,167,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,
- 172,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,28,100,11,100,12,132,1,131,1,90,9,101,4,
- 100,29,100,13,100,14,132,1,131,1,90,10,101,4,100,30,
- 100,15,100,16,132,1,131,1,90,11,100,17,90,12,101,4,
- 100,31,100,18,100,19,132,1,131,1,90,13,101,4,100,20,
- 100,21,132,0,131,1,90,14,101,15,100,22,100,23,132,0,
- 131,1,90,16,101,4,100,24,100,25,132,0,131,1,90,17,
- 101,4,100,26,100,27,132,0,131,1,90,18,100,10,83,0,
- 41,32,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,117,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,213,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,75,
- 0,0,0,114,76,0,0,0,114,138,0,0,0,114,118,0,
- 0,0,41,3,114,193,0,0,0,114,44,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,
- 223,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,40,0,
- 0,0,78,41,7,114,2,0,0,0,114,55,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,44,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,236,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,
+ 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,
+ 78,114,40,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,183,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,40,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,186,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,189,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,110,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,192,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,195,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,167,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,172,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,28,100,11,100,12,132,1,131,1,90,
+ 9,101,4,100,29,100,13,100,14,132,1,131,1,90,10,101,
+ 4,100,30,100,15,100,16,132,1,131,1,90,11,100,17,90,
+ 12,101,4,100,31,100,18,100,19,132,1,131,1,90,13,101,
+ 4,100,20,100,21,132,0,131,1,90,14,101,15,100,22,100,
+ 23,132,0,131,1,90,16,101,4,100,24,100,25,132,0,131,
+ 1,90,17,101,4,100,26,100,27,132,0,131,1,90,18,100,
+ 10,83,0,41,32,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,117,
+ 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,213,
+ 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,75,0,0,0,114,76,0,0,0,114,138,0,0,0,
+ 114,118,0,0,0,41,3,114,193,0,0,0,114,44,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,223,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,40,0,0,0,78,41,7,114,2,0,0,0,114,55,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,44,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,236,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,2,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,85,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,118,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,44,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,
- 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,
- 99,2,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,85,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,118,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,44,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,17,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,44,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,44,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,49,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,
+ 9,95,103,101,116,95,115,112,101,99,17,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,44,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,44,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,49,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,
+ 73,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,122,45,40,63,58,123,112,
+ 97,116,116,101,114,110,125,40,45,46,42,41,63,92,46,40,
+ 100,105,115,116,124,101,103,103,41,45,105,110,102,111,124,69,
+ 71,71,45,73,78,70,79,41,99,3,0,0,0,0,0,0,
+ 0,0,0,0,0,7,0,0,0,4,0,0,0,67,0,0,
+ 0,115,78,0,0,0,100,1,100,2,108,0,125,3,100,1,
+ 100,3,108,1,109,2,125,4,1,0,124,2,100,2,107,8,
+ 114,34,116,3,106,4,125,2,124,1,100,2,107,8,114,46,
+ 100,4,110,8,124,3,160,5,124,1,161,1,125,5,124,0,
+ 160,6,124,5,124,2,161,2,125,6,116,7,124,4,124,6,
+ 131,2,83,0,41,5,97,37,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,
+ 116,104,101,32,96,96,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,110,111,116,32,115,117,112,112,108,105,
+ 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,112,97,116,104,96,96,32,
+ 40,100,101,102,97,117,108,116,115,32,116,111,32,115,121,115,
+ 46,112,97,116,104,41,46,10,32,32,32,32,32,32,32,32,
+ 114,73,0,0,0,78,41,1,218,16,80,97,116,104,68,105,
+ 115,116,114,105,98,117,116,105,111,110,122,2,46,42,41,8,
+ 218,2,114,101,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,114,8,0,
+ 0,0,114,44,0,0,0,90,6,101,115,99,97,112,101,218,
+ 13,95,115,101,97,114,99,104,95,112,97,116,104,115,218,3,
+ 109,97,112,41,7,114,193,0,0,0,114,117,0,0,0,114,
+ 44,0,0,0,114,60,1,0,0,114,59,1,0,0,218,7,
+ 112,97,116,116,101,114,110,90,5,102,111,117,110,100,114,3,
+ 0,0,0,114,3,0,0,0,114,6,0,0,0,218,18,102,
+ 105,110,100,95,100,105,115,116,114,105,98,117,116,105,111,110,
+ 115,88,5,0,0,115,14,0,0,0,0,10,8,1,12,1,
+ 8,1,6,1,22,1,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,99,3,0,0,0,0,0,0,0,
+ 0,0,0,0,4,0,0,0,6,0,0,0,3,0,0,0,
+ 115,44,0,0,0,100,1,100,2,108,0,125,3,124,3,106,
+ 1,160,2,135,0,135,1,102,2,100,3,100,4,132,8,116,
+ 3,136,0,106,4,124,2,131,2,68,0,131,1,161,1,83,
+ 0,41,5,122,49,70,105,110,100,32,109,101,116,97,100,97,
+ 116,97,32,100,105,114,101,99,116,111,114,105,101,115,32,105,
+ 110,32,112,97,116,104,115,32,104,101,117,114,105,115,116,105,
+ 99,97,108,108,121,46,114,73,0,0,0,78,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,
+ 0,51,0,0,0,115,26,0,0,0,124,0,93,18,125,1,
+ 136,0,160,0,124,1,136,1,161,2,86,0,1,0,113,2,
+ 100,0,83,0,114,110,0,0,0,41,1,218,12,95,115,101,
+ 97,114,99,104,95,112,97,116,104,41,2,114,32,0,0,0,
+ 114,44,0,0,0,169,2,114,193,0,0,0,114,63,1,0,
+ 0,114,3,0,0,0,114,6,0,0,0,114,19,1,0,0,
+ 110,5,0,0,115,4,0,0,0,4,2,2,255,122,43,80,
+ 97,116,104,70,105,110,100,101,114,46,95,115,101,97,114,99,
+ 104,95,112,97,116,104,115,46,60,108,111,99,97,108,115,62,
+ 46,60,103,101,110,101,120,112,114,62,41,5,218,9,105,116,
+ 101,114,116,111,111,108,115,90,5,99,104,97,105,110,90,13,
+ 102,114,111,109,95,105,116,101,114,97,98,108,101,114,62,1,
+ 0,0,218,12,95,115,119,105,116,99,104,95,112,97,116,104,
+ 41,4,114,193,0,0,0,114,63,1,0,0,90,5,112,97,
+ 116,104,115,114,67,1,0,0,114,3,0,0,0,114,66,1,
+ 0,0,114,6,0,0,0,114,61,1,0,0,106,5,0,0,
+ 115,8,0,0,0,0,3,8,1,18,2,10,254,122,24,80,
+ 97,116,104,70,105,110,100,101,114,46,95,115,101,97,114,99,
+ 104,95,112,97,116,104,115,99,1,0,0,0,0,0,0,0,
+ 0,0,0,0,4,0,0,0,10,0,0,0,67,0,0,0,
+ 115,78,0,0,0,100,1,100,2,108,0,109,1,125,1,1,
+ 0,100,1,100,0,108,2,125,2,100,1,100,3,108,3,109,
+ 4,125,3,1,0,124,1,116,5,131,1,143,24,1,0,124,
+ 2,160,4,124,0,161,1,87,0,2,0,53,0,81,0,82,
+ 0,163,0,83,0,81,0,82,0,88,0,124,3,124,0,131,
+ 1,83,0,41,4,78,114,73,0,0,0,41,1,218,8,115,
+ 117,112,112,114,101,115,115,41,1,218,4,80,97,116,104,41,
+ 6,90,10,99,111,110,116,101,120,116,108,105,98,114,69,1,
+ 0,0,218,7,122,105,112,102,105,108,101,90,7,112,97,116,
+ 104,108,105,98,114,70,1,0,0,218,9,69,120,99,101,112,
+ 116,105,111,110,41,4,114,44,0,0,0,114,69,1,0,0,
+ 114,71,1,0,0,114,70,1,0,0,114,3,0,0,0,114,
+ 3,0,0,0,114,6,0,0,0,114,68,1,0,0,115,5,
+ 0,0,115,12,0,0,0,0,2,12,1,8,1,12,1,10,
+ 1,28,1,122,23,80,97,116,104,70,105,110,100,101,114,46,
+ 95,115,119,105,116,99,104,95,112,97,116,104,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,32,0,0,0,100,1,100,0,108,0,
+ 125,4,124,4,106,1,124,1,116,2,124,3,106,3,131,1,
+ 124,4,106,4,100,2,141,3,83,0,41,3,78,114,73,0,
+ 0,0,41,1,114,83,0,0,0,41,5,114,60,1,0,0,
+ 90,5,109,97,116,99,104,114,85,0,0,0,114,117,0,0,
+ 0,90,10,73,71,78,79,82,69,67,65,83,69,41,5,114,
+ 193,0,0,0,114,63,1,0,0,218,4,114,111,111,116,114,
+ 41,1,0,0,114,60,1,0,0,114,3,0,0,0,114,3,
+ 0,0,0,114,6,0,0,0,218,10,95,112,114,101,100,105,
+ 99,97,116,101,124,5,0,0,115,4,0,0,0,0,2,8,
+ 1,122,21,80,97,116,104,70,105,110,100,101,114,46,95,112,
+ 114,101,100,105,99,97,116,101,99,3,0,0,0,0,0,0,
+ 0,0,0,0,0,4,0,0,0,4,0,0,0,3,0,0,
+ 0,115,64,0,0,0,136,2,160,0,161,0,115,12,100,1,
+ 83,0,124,2,160,1,100,2,100,3,161,2,125,3,136,0,
+ 106,2,106,3,124,3,100,4,141,1,137,1,135,0,135,1,
+ 135,2,102,3,100,5,100,6,132,8,136,2,160,4,161,0,
+ 68,0,131,1,83,0,41,7,78,114,3,0,0,0,250,1,
+ 45,114,45,0,0,0,41,1,114,63,1,0,0,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0,
+ 0,0,51,0,0,0,115,32,0,0,0,124,0,93,24,125,
+ 1,136,0,160,0,136,1,136,2,124,1,161,3,114,2,124,
+ 1,86,0,1,0,113,2,100,0,83,0,114,110,0,0,0,
+ 41,1,114,74,1,0,0,41,2,114,32,0,0,0,114,41,
+ 1,0,0,169,3,114,193,0,0,0,90,7,109,97,116,99,
+ 104,101,114,114,73,1,0,0,114,3,0,0,0,114,6,0,
+ 0,0,114,19,1,0,0,135,5,0,0,115,6,0,0,0,
+ 4,0,2,1,14,255,122,42,80,97,116,104,70,105,110,100,
+ 101,114,46,95,115,101,97,114,99,104,95,112,97,116,104,46,
+ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,
+ 114,62,41,5,90,6,105,115,95,100,105,114,114,67,0,0,
+ 0,218,15,115,101,97,114,99,104,95,116,101,109,112,108,97,
+ 116,101,114,62,0,0,0,90,7,105,116,101,114,100,105,114,
+ 41,4,114,193,0,0,0,114,73,1,0,0,114,63,1,0,
+ 0,90,10,110,111,114,109,97,108,105,122,101,100,114,3,0,
+ 0,0,114,76,1,0,0,114,6,0,0,0,114,65,1,0,
+ 0,129,5,0,0,115,10,0,0,0,0,2,8,1,4,1,
+ 12,1,14,1,122,23,80,97,116,104,70,105,110,100,101,114,
+ 46,95,115,101,97,114,99,104,95,112,97,116,104,41,1,78,
+ 41,2,78,78,41,1,78,41,2,78,78,41,19,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,77,1,0,0,114,64,
+ 1,0,0,114,61,1,0,0,218,12,115,116,97,116,105,99,
+ 109,101,116,104,111,100,114,68,1,0,0,114,74,1,0,0,
+ 114,65,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,209,4,
+ 0,0,115,52,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,4,2,2,1,12,17,2,1,10,
+ 8,2,1,10,8,2,1,10,4,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,110,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,154,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,71,0,0,0,114,105,0,0,0,78,41,7,114,
+ 167,0,0,0,218,8,95,108,111,97,100,101,114,115,114,44,
+ 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,119,0,0,0,114,44,
+ 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,80,1,0,0,114,6,0,0,0,
+ 114,209,0,0,0,148,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,105,
+ 0,0,0,78,41,1,114,82,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,162,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,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,73,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,122,45,40,63,58,123,112,97,116,116,
- 101,114,110,125,40,45,46,42,41,63,92,46,40,100,105,115,
- 116,124,101,103,103,41,45,105,110,102,111,124,69,71,71,45,
- 73,78,70,79,41,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,7,0,0,0,4,0,0,0,67,0,0,0,115,78,
- 0,0,0,100,1,100,2,108,0,125,3,100,1,100,3,108,
- 1,109,2,125,4,1,0,124,2,100,2,107,8,114,34,116,
- 3,106,4,125,2,124,1,100,2,107,8,114,46,100,4,110,
- 8,124,3,160,5,124,1,161,1,125,5,124,0,160,6,124,
- 5,124,2,161,2,125,6,116,7,124,4,124,6,131,2,83,
- 0,41,5,97,37,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,116,104,101,
- 32,96,96,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,110,111,116,32,115,117,112,112,108,105,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,112,97,116,104,96,96,32,40,100,101,
- 102,97,117,108,116,115,32,116,111,32,115,121,115,46,112,97,
- 116,104,41,46,10,32,32,32,32,32,32,32,32,114,73,0,
- 0,0,78,41,1,218,16,80,97,116,104,68,105,115,116,114,
- 105,98,117,116,105,111,110,122,2,46,42,41,8,218,2,114,
- 101,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,114,8,0,0,0,114,
- 44,0,0,0,90,6,101,115,99,97,112,101,218,13,95,115,
- 101,97,114,99,104,95,112,97,116,104,115,218,3,109,97,112,
- 41,7,114,193,0,0,0,114,117,0,0,0,114,44,0,0,
- 0,114,60,1,0,0,114,59,1,0,0,218,7,112,97,116,
- 116,101,114,110,90,5,102,111,117,110,100,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,18,102,105,110,100,
- 95,100,105,115,116,114,105,98,117,116,105,111,110,115,88,5,
- 0,0,115,14,0,0,0,0,10,8,1,12,1,8,1,6,
- 1,22,1,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,99,3,0,0,0,0,0,0,0,0,0,0,
- 0,4,0,0,0,6,0,0,0,3,0,0,0,115,44,0,
- 0,0,100,1,100,2,108,0,125,3,124,3,106,1,160,2,
- 135,0,135,1,102,2,100,3,100,4,132,8,116,3,136,0,
- 106,4,124,2,131,2,68,0,131,1,161,1,83,0,41,5,
- 122,49,70,105,110,100,32,109,101,116,97,100,97,116,97,32,
- 100,105,114,101,99,116,111,114,105,101,115,32,105,110,32,112,
- 97,116,104,115,32,104,101,117,114,105,115,116,105,99,97,108,
- 108,121,46,114,73,0,0,0,78,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,2,0,0,0,5,0,0,0,51,0,
- 0,0,115,26,0,0,0,124,0,93,18,125,1,136,0,160,
- 0,124,1,136,1,161,2,86,0,1,0,113,2,100,0,83,
- 0,114,110,0,0,0,41,1,218,12,95,115,101,97,114,99,
- 104,95,112,97,116,104,41,2,114,32,0,0,0,114,44,0,
- 0,0,169,2,114,193,0,0,0,114,63,1,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,19,1,0,0,110,5,0,
- 0,115,4,0,0,0,4,2,2,255,122,43,80,97,116,104,
- 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112,
- 97,116,104,115,46,60,108,111,99,97,108,115,62,46,60,103,
- 101,110,101,120,112,114,62,41,5,218,9,105,116,101,114,116,
- 111,111,108,115,90,5,99,104,97,105,110,90,13,102,114,111,
- 109,95,105,116,101,114,97,98,108,101,114,62,1,0,0,218,
- 12,95,115,119,105,116,99,104,95,112,97,116,104,41,4,114,
- 193,0,0,0,114,63,1,0,0,90,5,112,97,116,104,115,
- 114,67,1,0,0,114,3,0,0,0,114,66,1,0,0,114,
- 6,0,0,0,114,61,1,0,0,106,5,0,0,115,8,0,
- 0,0,0,3,8,1,18,2,10,254,122,24,80,97,116,104,
- 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112,
- 97,116,104,115,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,4,0,0,0,10,0,0,0,67,0,0,0,115,78,0,
- 0,0,100,1,100,2,108,0,109,1,125,1,1,0,100,1,
- 100,0,108,2,125,2,100,1,100,3,108,3,109,4,125,3,
- 1,0,124,1,116,5,131,1,143,24,1,0,124,2,160,4,
- 124,0,161,1,87,0,2,0,53,0,81,0,82,0,163,0,
- 83,0,81,0,82,0,88,0,124,3,124,0,131,1,83,0,
- 41,4,78,114,73,0,0,0,41,1,218,8,115,117,112,112,
- 114,101,115,115,41,1,218,4,80,97,116,104,41,6,90,10,
- 99,111,110,116,101,120,116,108,105,98,114,69,1,0,0,218,
- 7,122,105,112,102,105,108,101,90,7,112,97,116,104,108,105,
- 98,114,70,1,0,0,218,9,69,120,99,101,112,116,105,111,
- 110,41,4,114,44,0,0,0,114,69,1,0,0,114,71,1,
- 0,0,114,70,1,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,68,1,0,0,115,5,0,0,115,
- 12,0,0,0,0,2,12,1,8,1,12,1,10,1,28,1,
- 122,23,80,97,116,104,70,105,110,100,101,114,46,95,115,119,
- 105,116,99,104,95,112,97,116,104,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,32,0,0,0,100,1,100,0,108,0,125,4,124,
- 4,106,1,124,1,116,2,124,3,106,3,131,1,124,4,106,
- 4,100,2,141,3,83,0,41,3,78,114,73,0,0,0,41,
- 1,114,83,0,0,0,41,5,114,60,1,0,0,90,5,109,
- 97,116,99,104,114,85,0,0,0,114,117,0,0,0,90,10,
- 73,71,78,79,82,69,67,65,83,69,41,5,114,193,0,0,
- 0,114,63,1,0,0,218,4,114,111,111,116,114,41,1,0,
- 0,114,60,1,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,10,95,112,114,101,100,105,99,97,116,
- 101,124,5,0,0,115,4,0,0,0,0,2,8,1,122,21,
- 80,97,116,104,70,105,110,100,101,114,46,95,112,114,101,100,
- 105,99,97,116,101,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,4,0,0,0,4,0,0,0,3,0,0,0,115,64,
- 0,0,0,136,2,160,0,161,0,115,12,100,1,83,0,124,
- 2,160,1,100,2,100,3,161,2,125,3,136,0,106,2,106,
- 3,124,3,100,4,141,1,137,1,135,0,135,1,135,2,102,
- 3,100,5,100,6,132,8,136,2,160,4,161,0,68,0,131,
- 1,83,0,41,7,78,114,3,0,0,0,250,1,45,114,45,
- 0,0,0,41,1,114,63,1,0,0,99,1,0,0,0,0,
- 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,51,
- 0,0,0,115,32,0,0,0,124,0,93,24,125,1,136,0,
- 160,0,136,1,136,2,124,1,161,3,114,26,124,1,86,0,
- 1,0,113,2,100,0,83,0,114,110,0,0,0,41,1,114,
- 74,1,0,0,41,2,114,32,0,0,0,114,41,1,0,0,
- 169,3,114,193,0,0,0,90,7,109,97,116,99,104,101,114,
- 114,73,1,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 19,1,0,0,135,5,0,0,115,6,0,0,0,4,0,2,
- 1,14,255,122,42,80,97,116,104,70,105,110,100,101,114,46,
- 95,115,101,97,114,99,104,95,112,97,116,104,46,60,108,111,
- 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,41,
- 5,90,6,105,115,95,100,105,114,114,67,0,0,0,218,15,
- 115,101,97,114,99,104,95,116,101,109,112,108,97,116,101,114,
- 62,0,0,0,90,7,105,116,101,114,100,105,114,41,4,114,
- 193,0,0,0,114,73,1,0,0,114,63,1,0,0,90,10,
- 110,111,114,109,97,108,105,122,101,100,114,3,0,0,0,114,
- 76,1,0,0,114,6,0,0,0,114,65,1,0,0,129,5,
- 0,0,115,10,0,0,0,0,2,8,1,4,1,12,1,14,
- 1,122,23,80,97,116,104,70,105,110,100,101,114,46,95,115,
- 101,97,114,99,104,95,112,97,116,104,41,1,78,41,2,78,
- 78,41,1,78,41,2,78,78,41,19,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,77,1,0,0,114,64,1,0,0,
- 114,61,1,0,0,218,12,115,116,97,116,105,99,109,101,116,
- 104,111,100,114,68,1,0,0,114,74,1,0,0,114,65,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,209,4,0,0,115,
- 52,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,4,2,2,1,12,17,2,1,10,8,2,1,
- 10,8,2,1,10,4,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,110,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,154,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,
- 71,0,0,0,114,105,0,0,0,78,41,7,114,167,0,0,
- 0,218,8,95,108,111,97,100,101,114,115,114,44,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,119,0,0,0,114,44,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,80,1,0,0,114,6,0,0,0,114,209,0,
- 0,0,148,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,
+ 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,119,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,168,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,119,0,0,0,114,188,0,0,
+ 0,114,139,0,0,0,114,44,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,180,
+ 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,71,0,0,0,
+ 114,28,0,0,0,114,105,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,41,0,0,0,114,49,0,0,0,114,
+ 44,0,0,0,114,2,0,0,0,114,55,0,0,0,114,10,
+ 1,0,0,114,50,0,0,0,114,82,1,0,0,218,11,95,
+ 102,105,108,108,95,99,97,99,104,101,114,7,0,0,0,114,
+ 85,1,0,0,114,106,0,0,0,114,84,1,0,0,114,38,
+ 0,0,0,114,81,1,0,0,114,54,0,0,0,114,58,1,
+ 0,0,114,56,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,119,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,185,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,71,0,0,0,
+ 114,61,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,106,
+ 0,0,0,41,2,114,32,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,6,6,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,44,0,0,0,114,2,0,0,0,114,7,1,
+ 0,0,114,55,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,83,1,0,0,114,84,1,0,0,114,101,0,0,0,114,
+ 62,0,0,0,114,106,0,0,0,218,3,97,100,100,114,11,
+ 0,0,0,114,85,1,0,0,41,9,114,119,0,0,0,114,
+ 44,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,117,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,87,1,
+ 0,0,233,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,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,105,0,0,0,
- 78,41,1,114,82,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,162,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,
- 119,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,168,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,119,0,0,0,114,188,0,0,0,114,139,
- 0,0,0,114,44,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,180,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,102,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,208,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,86,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,144,1,114,54,116,15,124,12,131,1,144,1,
- 114,54,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,98,
- 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,71,0,0,
- 0,114,28,0,0,0,114,105,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,41,0,0,0,114,49,0,0,0,
- 114,44,0,0,0,114,2,0,0,0,114,55,0,0,0,114,
- 10,1,0,0,114,50,0,0,0,114,82,1,0,0,218,11,
- 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0,
- 114,85,1,0,0,114,106,0,0,0,114,84,1,0,0,114,
- 38,0,0,0,114,81,1,0,0,114,54,0,0,0,114,58,
- 1,0,0,114,56,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,119,
- 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,185,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,14,1,10,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,71,0,0,
- 0,114,61,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,
- 106,0,0,0,41,2,114,32,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,6,6,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,44,0,0,0,114,2,0,0,0,114,7,
- 1,0,0,114,55,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,83,1,0,0,114,84,1,0,0,114,101,0,0,0,
- 114,62,0,0,0,114,106,0,0,0,218,3,97,100,100,114,
- 11,0,0,0,114,85,1,0,0,41,9,114,119,0,0,0,
- 114,44,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,117,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,87,
- 1,0,0,233,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,48,0,0,0,41,2,114,56,0,0,0,114,118,
- 0,0,0,114,48,0,0,0,169,2,114,193,0,0,0,114,
- 86,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,18,6,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,86,1,0,0,
- 114,93,1,0,0,114,3,0,0,0,114,92,1,0,0,114,
- 6,0,0,0,218,9,112,97,116,104,95,104,111,111,107,8,
- 6,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,62,0,0,0,114,44,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,26,6,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,87,1,0,0,114,207,0,0,0,114,94,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,79,1,0,0,139,
- 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,79,
- 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,80,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,114,72,1,0,0,41,6,90,2,110,115,114,117,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,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,48,0,0,0,41,2,114,56,0,0,0,114,118,0,
+ 0,0,114,48,0,0,0,169,2,114,193,0,0,0,114,86,
+ 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,18,6,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,86,1,0,0,114,
+ 93,1,0,0,114,3,0,0,0,114,92,1,0,0,114,6,
+ 0,0,0,218,9,112,97,116,104,95,104,111,111,107,8,6,
+ 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,62,0,0,0,114,44,0,0,0,114,246,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,
- 32,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,98,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,102,0,0,
- 0,114,15,1,0,0,114,89,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,55,
- 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,116,8,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,9,107,10,114,214,1,0,1,0,1,
- 0,89,0,113,106,89,0,113,106,88,0,113,106,116,9,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,10,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,11,131,0,131,3,1,0,116,
- 12,160,13,116,2,160,14,161,0,161,1,1,0,124,5,100,
- 4,107,2,144,1,114,174,116,15,160,16,100,22,161,1,1,
- 0,100,23,116,12,107,6,144,1,114,174,100,24,116,17,95,
- 18,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,64,0,0,0,114,75,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,39,0,0,
- 0,78,41,1,114,22,0,0,0,41,2,114,32,0,0,0,
- 114,95,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,19,1,0,0,91,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,73,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,35,0,0,0,
- 114,31,0,0,0,114,40,0,0,0,114,58,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,74,0,0,0,114,3,0,0,0,41,
- 2,114,32,0,0,0,218,1,115,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,88,1,0,0,107,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,19,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,23,0,0,0,114,118,0,0,0,114,36,0,
- 0,0,114,13,0,0,0,114,21,1,0,0,114,167,0,0,
- 0,114,99,1,0,0,114,102,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,31,0,0,0,114,35,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,66,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,106,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,106,1,0,0,114,184,0,
- 0,0,114,8,0,0,0,114,51,1,0,0,114,167,0,0,
- 0,114,79,1,0,0,114,94,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,105,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,131,6,0,0,115,8,0,0,0,0,2,8,1,
- 6,1,20,1,114,108,1,0,0,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,27,0,0,0,
- 114,29,0,0,0,114,38,0,0,0,114,47,0,0,0,114,
- 49,0,0,0,114,53,0,0,0,114,54,0,0,0,114,56,
- 0,0,0,114,59,0,0,0,114,69,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,24,0,0,0,114,236,0,0,0,114,92,0,0,0,
- 114,88,0,0,0,114,102,0,0,0,114,89,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,98,0,0,0,114,103,0,0,0,114,
- 109,0,0,0,114,113,0,0,0,114,115,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,79,1,0,0,114,98,1,0,0,114,184,
- 0,0,0,114,106,1,0,0,114,108,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,12,22,10,127,0,8,16,1,12,2,
- 4,1,4,2,6,2,6,2,8,2,18,71,8,40,8,19,
- 8,12,8,12,8,28,8,17,8,33,8,28,8,24,16,13,
- 14,10,12,11,8,14,6,3,6,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,59,14,127,0,22,12,23,8,11,
- 8,65,
+ 114,39,1,0,0,26,6,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,87,1,0,0,114,207,0,0,0,114,94,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,79,1,0,0,139,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,79,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,80,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,114,72,1,0,0,41,6,90,2,110,115,114,117,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,32,
+ 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,98,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,102,0,0,0,
+ 114,15,1,0,0,114,89,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,55,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,116,8,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,9,107,10,114,214,1,0,1,0,1,0,
+ 89,0,113,106,89,0,113,106,88,0,113,106,116,9,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,10,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,11,131,0,131,3,1,0,116,12,
+ 160,13,116,2,160,14,161,0,161,1,1,0,124,5,100,4,
+ 107,2,144,1,114,174,116,15,160,16,100,22,161,1,1,0,
+ 100,23,116,12,107,6,144,1,114,174,100,24,116,17,95,18,
+ 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,64,0,0,0,114,75,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,39,0,0,0,
+ 78,41,1,114,22,0,0,0,41,2,114,32,0,0,0,114,
+ 95,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,114,19,1,0,0,91,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,73,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,35,0,0,0,114,
+ 31,0,0,0,114,40,0,0,0,114,58,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,74,0,0,0,114,3,0,0,0,41,2,
+ 114,32,0,0,0,218,1,115,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,114,88,1,0,0,107,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,19,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,23,0,0,0,114,118,0,0,0,114,36,0,0,
+ 0,114,13,0,0,0,114,21,1,0,0,114,167,0,0,0,
+ 114,99,1,0,0,114,102,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,31,0,0,0,114,35,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,66,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,106,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,106,1,0,0,114,184,0,0,
+ 0,114,8,0,0,0,114,51,1,0,0,114,167,0,0,0,
+ 114,79,1,0,0,114,94,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,105,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,131,6,0,0,115,8,0,0,0,0,2,8,1,6,
+ 1,20,1,114,108,1,0,0,41,1,114,60,0,0,0,41,
+ 1,78,41,3,78,78,78,41,2,114,73,0,0,0,114,73,
+ 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,27,
+ 0,0,0,114,29,0,0,0,114,38,0,0,0,114,47,0,
+ 0,0,114,49,0,0,0,114,53,0,0,0,114,54,0,0,
+ 0,114,56,0,0,0,114,59,0,0,0,114,69,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,24,0,0,0,114,236,0,0,0,114,92,
+ 0,0,0,114,88,0,0,0,114,102,0,0,0,114,89,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,98,0,0,0,114,103,0,
+ 0,0,114,109,0,0,0,114,113,0,0,0,114,115,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,79,1,0,0,114,98,1,0,
+ 0,114,184,0,0,0,114,106,1,0,0,114,108,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,8,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,59,14,127,0,22,10,
+ 23,8,11,8,65,
};
diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h
index cbb3d909a10b..056e85d343d8 100644
--- a/Python/importlib_zipimport.h
+++ b/Python/importlib_zipimport.h
@@ -783,301 +783,301 @@ const unsigned char _Py_M__zipimport[] = {
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,68,1,0,0,124,3,124,2,
+ 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,26,4,0,116,2,107,10,
- 114,54,1,0,1,0,1,0,89,0,100,0,83,0,89,0,
- 110,2,88,0,124,6,100,2,64,0,100,3,107,3,125,7,
- 124,7,114,190,124,6,100,4,64,0,100,3,107,3,125,8,
- 116,3,106,4,100,5,107,3,114,188,124,8,115,108,116,3,
- 106,4,100,6,107,2,114,188,116,5,124,0,124,2,131,2,
- 125,9,124,9,100,0,107,9,114,188,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,26,4,0,
- 116,2,107,10,114,186,1,0,1,0,1,0,89,0,100,0,
- 83,0,89,0,110,2,88,0,110,84,116,10,124,0,124,2,
- 131,2,92,2,125,11,125,12,124,11,144,1,114,18,116,11,
- 116,12,124,4,100,7,100,8,133,2,25,0,131,1,124,11,
- 131,2,114,254,116,12,124,4,100,8,100,9,133,2,25,0,
- 131,1,124,12,107,3,144,1,114,18,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,64,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,12,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,14,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,116,0,130,1,124,1,100,0,100,1,133,
- 2,25,0,125,1,124,0,106,1,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,2,124,4,124,3,131,2,124,
- 5,102,2,87,0,83,0,4,0,116,3,116,4,116,5,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,6,218,14,65,115,115,101,114,116,105,111,110,69,
- 114,114,111,114,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,116,0,130,1,124,1,100,0,100,1,
- 133,2,25,0,125,1,122,14,124,0,106,1,124,1,25,0,
- 125,2,87,0,110,22,4,0,116,2,107,10,114,68,1,0,
- 1,0,1,0,89,0,100,0,83,0,88,0,116,3,124,0,
- 106,4,124,2,131,2,83,0,100,0,83,0,41,3,78,114,
- 14,0,0,0,114,170,0,0,0,41,5,114,175,0,0,0,
- 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,177,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,177,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,178,0,0,0,
- 41,2,114,32,0,0,0,114,179,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,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,180,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,
- 116,8,130,1,124,3,106,9,125,4,116,10,131,0,125,5,
- 124,0,106,2,106,11,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,12,107,10,114,124,1,0,1,0,1,0,89,0,
- 113,78,89,0,110,2,88,0,124,7,106,9,106,7,125,8,
- 116,13,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,14,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,15,90,7,112,97,116,
- 104,108,105,98,114,184,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,114,
- 175,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,184,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,181,0,0,0,114,182,0,0,0,114,183,
- 0,0,0,114,188,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,
+ 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,
+ 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,116,0,130,
+ 1,124,1,100,0,100,1,133,2,25,0,125,1,124,0,106,
+ 1,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,
+ 2,124,4,124,3,131,2,124,5,102,2,87,0,83,0,4,
+ 0,116,3,116,4,116,5,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,6,218,14,65,115,
+ 115,101,114,116,105,111,110,69,114,114,111,114,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,116,0,
+ 130,1,124,1,100,0,100,1,133,2,25,0,125,1,122,14,
+ 124,0,106,1,124,1,25,0,125,2,87,0,110,22,4,0,
+ 116,2,107,10,114,68,1,0,1,0,1,0,89,0,100,0,
+ 83,0,88,0,116,3,124,0,106,4,124,2,131,2,83,0,
+ 100,0,83,0,41,3,78,114,14,0,0,0,114,170,0,0,
+ 0,41,5,114,175,0,0,0,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,177,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,177,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,178,0,0,0,41,2,114,32,0,0,0,114,
+ 179,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,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,180,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,116,8,130,1,124,3,106,9,
+ 125,4,116,10,131,0,125,5,124,0,106,2,106,11,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,12,107,10,114,124,
+ 1,0,1,0,1,0,89,0,113,78,89,0,110,2,88,0,
+ 124,7,106,9,106,7,125,8,116,13,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,14,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,15,90,7,112,97,116,104,108,105,98,114,184,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,114,175,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,184,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,181,0,0,
+ 0,114,182,0,0,0,114,183,0,0,0,114,188,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/peephole.c b/Python/peephole.c
index 1ce3535626e9..6f3e2ed88b2b 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -250,12 +250,16 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
lnotab = (unsigned char*)PyBytes_AS_STRING(lnotab_obj);
tabsiz = PyBytes_GET_SIZE(lnotab_obj);
assert(tabsiz == 0 || Py_REFCNT(lnotab_obj) == 1);
- if (memchr(lnotab, 255, tabsiz) != NULL) {
- /* 255 value are used for multibyte bytecode instructions */
- goto exitUnchanged;
+
+ /* Don't optimize if lnotab contains instruction pointer delta larger
+ than +255 (encoded as multiple bytes), just to keep the peephole optimizer
+ simple. The optimizer leaves line number deltas unchanged. */
+
+ for (j = 0; j < tabsiz; j += 2) {
+ if (lnotab[j] == 255) {
+ goto exitUnchanged;
+ }
}
- /* Note: -128 and 127 special values for line number delta are ok,
- the peephole optimizer doesn't modify line numbers. */
assert(PyBytes_Check(code));
Py_ssize_t codesize = PyBytes_GET_SIZE(code);
[View Less]
1
0

bpo-37213: Handle negative line deltas correctly in the peephole optimizer (GH-13969)
by Pablo Galindo June 13, 2019
by Pablo Galindo June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/3498c642f4e83f3d8e2214654c0fa8e0d5…
commit: 3498c642f4e83f3d8e2214654c0fa8e0d51cebe5
branch: master
author: Pablo Galindo <Pablogsal(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T19:16:22+01:00
summary:
bpo-37213: Handle negative line deltas correctly in the peephole optimizer (GH-13969)
The peephole optimizer was not optimizing correctly bytecode after negative deltas were introduced. This is due to the fact that …
[View More]some special values (255) were being searched for in both instruction pointer delta and line number deltas.
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst
M Lib/test/test_peepholer.py
M Python/importlib.h
M Python/importlib_external.h
M Python/importlib_zipimport.h
M Python/peephole.c
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 794d104d5919..860ceeb003e7 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -1,5 +1,7 @@
import dis
import unittest
+import types
+import textwrap
from test.bytecode_helper import BytecodeTestCase
@@ -18,6 +20,27 @@ def count_instr_recursively(f, opname):
class TestTranforms(BytecodeTestCase):
+ def check_jump_targets(self, code):
+ instructions = list(dis.get_instructions(code))
+ targets = {instr.offset: instr for instr in instructions}
+ for instr in instructions:
+ if 'JUMP_' not in instr.opname:
+ continue
+ tgt = targets[instr.argval]
+ # jump to unconditional jump
+ if tgt.opname in ('JUMP_ABSOLUTE', 'JUMP_FORWARD'):
+ self.fail(f'{instr.opname} at {instr.offset} '
+ f'jumps to {tgt.opname} at {tgt.offset}')
+ # unconditional jump to RETURN_VALUE
+ if (instr.opname in ('JUMP_ABSOLUTE', 'JUMP_FORWARD') and
+ tgt.opname == 'RETURN_VALUE'):
+ self.fail(f'{instr.opname} at {instr.offset} '
+ f'jumps to {tgt.opname} at {tgt.offset}')
+ # JUMP_IF_*_OR_POP jump to conditional jump
+ if '_OR_POP' in instr.opname and 'JUMP_IF_' in tgt.opname:
+ self.fail(f'{instr.opname} at {instr.offset} '
+ f'jumps to {tgt.opname} at {tgt.offset}')
+
def test_unot(self):
# UNARY_NOT POP_JUMP_IF_FALSE --> POP_JUMP_IF_TRUE'
def unot(x):
@@ -259,13 +282,69 @@ def f(x):
def test_elim_jump_to_return(self):
# JUMP_FORWARD to RETURN --> RETURN
def f(cond, true_value, false_value):
- return true_value if cond else false_value
+ # Intentionally use two-line expression to test issue37213.
+ return (true_value if cond
+ else false_value)
+ self.check_jump_targets(f)
self.assertNotInBytecode(f, 'JUMP_FORWARD')
self.assertNotInBytecode(f, 'JUMP_ABSOLUTE')
returns = [instr for instr in dis.get_instructions(f)
if instr.opname == 'RETURN_VALUE']
self.assertEqual(len(returns), 2)
+ def test_elim_jump_to_uncond_jump(self):
+ # POP_JUMP_IF_FALSE to JUMP_FORWARD --> POP_JUMP_IF_FALSE to non-jump
+ def f():
+ if a:
+ # Intentionally use two-line expression to test issue37213.
+ if (c
+ or d):
+ foo()
+ else:
+ baz()
+ self.check_jump_targets(f)
+
+ def test_elim_jump_to_uncond_jump2(self):
+ # POP_JUMP_IF_FALSE to JUMP_ABSOLUTE --> POP_JUMP_IF_FALSE to non-jump
+ def f():
+ while a:
+ # Intentionally use two-line expression to test issue37213.
+ if (c
+ or d):
+ a = foo()
+ self.check_jump_targets(f)
+
+ def test_elim_jump_to_uncond_jump3(self):
+ # Intentionally use two-line expressions to test issue37213.
+ # JUMP_IF_FALSE_OR_POP to JUMP_IF_FALSE_OR_POP --> JUMP_IF_FALSE_OR_POP to non-jump
+ def f(a, b, c):
+ return ((a and b)
+ and c)
+ self.check_jump_targets(f)
+ self.assertEqual(count_instr_recursively(f, 'JUMP_IF_FALSE_OR_POP'), 2)
+ # JUMP_IF_TRUE_OR_POP to JUMP_IF_TRUE_OR_POP --> JUMP_IF_TRUE_OR_POP to non-jump
+ def f(a, b, c):
+ return ((a or b)
+ or c)
+ self.check_jump_targets(f)
+ self.assertEqual(count_instr_recursively(f, 'JUMP_IF_TRUE_OR_POP'), 2)
+ # JUMP_IF_FALSE_OR_POP to JUMP_IF_TRUE_OR_POP --> POP_JUMP_IF_FALSE to non-jump
+ def f(a, b, c):
+ return ((a and b)
+ or c)
+ self.check_jump_targets(f)
+ self.assertNotInBytecode(f, 'JUMP_IF_FALSE_OR_POP')
+ self.assertInBytecode(f, 'JUMP_IF_TRUE_OR_POP')
+ self.assertInBytecode(f, 'POP_JUMP_IF_FALSE')
+ # JUMP_IF_TRUE_OR_POP to JUMP_IF_FALSE_OR_POP --> POP_JUMP_IF_TRUE to non-jump
+ def f(a, b, c):
+ return ((a or b)
+ and c)
+ self.check_jump_targets(f)
+ self.assertNotInBytecode(f, 'JUMP_IF_TRUE_OR_POP')
+ self.assertInBytecode(f, 'JUMP_IF_FALSE_OR_POP')
+ self.assertInBytecode(f, 'POP_JUMP_IF_TRUE')
+
def test_elim_jump_after_return1(self):
# Eliminate dead code: jumps immediately after returns can't be reached
def f(cond1, cond2):
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst
new file mode 100644
index 000000000000..b949883da9c2
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-11-11-15-19.bpo-37213.UPii5K.rst
@@ -0,0 +1,2 @@
+Handle correctly negative line offsets in the peephole optimizer. Patch by
+Pablo Galindo.
diff --git a/Python/importlib.h b/Python/importlib.h
index 5bd1d179e2f0..a285a31e2065 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -670,1121 +670,1120 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
1,18,1,10,1,8,1,4,255,6,2,122,19,77,111,100,
117,108,101,83,112,101,99,46,95,95,114,101,112,114,95,95,
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,114,0,0,0,124,0,
- 106,0,125,2,122,76,124,0,106,1,124,1,106,1,107,2,
+ 0,8,0,0,0,67,0,0,0,115,106,0,0,0,124,0,
+ 106,0,125,2,122,72,124,0,106,1,124,1,106,1,107,2,
111,76,124,0,106,2,124,1,106,2,107,2,111,76,124,0,
106,3,124,1,106,3,107,2,111,76,124,2,124,1,106,0,
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,87,0,
- 110,26,4,0,116,6,107,10,114,108,1,0,1,0,1,0,
- 89,0,100,1,83,0,89,0,110,2,88,0,100,0,83,0,
- 114,116,0,0,0,41,7,114,117,0,0,0,114,17,0,0,
- 0,114,109,0,0,0,114,113,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,106,0,0,0,41,3,114,30,0,0,0,90,5,111,
- 116,104,101,114,90,4,115,109,115,108,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,218,6,95,95,101,113,95,
- 95,108,1,0,0,115,30,0,0,0,0,1,6,1,2,1,
- 12,1,10,255,2,2,10,254,2,3,8,253,2,4,10,252,
- 2,5,10,251,8,6,14,1,122,17,77,111,100,117,108,101,
- 83,112,101,99,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,58,0,0,0,124,0,106,0,100,0,107,
- 8,114,52,124,0,106,1,100,0,107,9,114,52,124,0,106,
- 2,114,52,116,3,100,0,107,8,114,38,116,4,130,1,116,
- 3,160,5,124,0,106,1,161,1,124,0,95,0,124,0,106,
- 0,83,0,114,13,0,0,0,41,6,114,119,0,0,0,114,
- 113,0,0,0,114,118,0,0,0,218,19,95,98,111,111,116,
- 115,116,114,97,112,95,101,120,116,101,114,110,97,108,218,19,
- 78,111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,
- 114,111,114,90,11,95,103,101,116,95,99,97,99,104,101,100,
- 114,47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 11,0,0,0,114,123,0,0,0,120,1,0,0,115,12,0,
- 0,0,0,2,10,1,16,1,8,1,4,1,14,1,122,17,
- 77,111,100,117,108,101,83,112,101,99,46,99,97,99,104,101,
- 100,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,10,0,0,0,124,
- 1,124,0,95,0,100,0,83,0,114,13,0,0,0,41,1,
- 114,119,0,0,0,41,2,114,30,0,0,0,114,123,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,123,0,0,0,129,1,0,0,115,2,0,0,0,0,2,
- 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,8,114,26,124,0,106,1,160,2,100,2,
- 161,1,100,3,25,0,83,0,124,0,106,1,83,0,100,1,
- 83,0,41,4,122,32,84,104,101,32,110,97,109,101,32,111,
- 102,32,116,104,101,32,109,111,100,117,108,101,39,115,32,112,
- 97,114,101,110,116,46,78,218,1,46,114,22,0,0,0,41,
- 3,114,117,0,0,0,114,17,0,0,0,218,10,114,112,97,
- 114,116,105,116,105,111,110,114,47,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,218,6,112,97,114,
- 101,110,116,133,1,0,0,115,6,0,0,0,0,3,10,1,
- 16,2,122,17,77,111,100,117,108,101,83,112,101,99,46,112,
- 97,114,101,110,116,99,1,0,0,0,0,0,0,0,0,0,
- 0,0,1,0,0,0,1,0,0,0,67,0,0,0,115,6,
- 0,0,0,124,0,106,0,83,0,114,13,0,0,0,41,1,
- 114,118,0,0,0,114,47,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,124,0,0,0,141,1,
- 0,0,115,2,0,0,0,0,2,122,23,77,111,100,117,108,
- 101,83,112,101,99,46,104,97,115,95,108,111,99,97,116,105,
- 111,110,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,14,0,0,0,
- 116,0,124,1,131,1,124,0,95,1,100,0,83,0,114,13,
- 0,0,0,41,2,218,4,98,111,111,108,114,118,0,0,0,
- 41,2,114,30,0,0,0,218,5,118,97,108,117,101,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,124,0,
- 0,0,145,1,0,0,115,2,0,0,0,0,2,41,12,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,48,0,0,0,114,125,0,
- 0,0,218,8,112,114,111,112,101,114,116,121,114,123,0,0,
- 0,218,6,115,101,116,116,101,114,114,130,0,0,0,114,124,
- 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,
- 0,0,114,11,0,0,0,114,112,0,0,0,49,1,0,0,
- 115,32,0,0,0,8,1,4,36,4,1,2,255,12,12,8,
- 10,8,12,2,1,10,8,4,1,10,3,2,1,10,7,2,
- 1,10,3,4,1,114,112,0,0,0,169,2,114,113,0,0,
- 0,114,115,0,0,0,99,2,0,0,0,0,0,0,0,2,
- 0,0,0,6,0,0,0,8,0,0,0,67,0,0,0,115,
- 154,0,0,0,116,0,124,1,100,1,131,2,114,74,116,1,
- 100,2,107,8,114,22,116,2,130,1,116,1,106,3,125,4,
- 124,3,100,2,107,8,114,48,124,4,124,0,124,1,100,3,
- 141,2,83,0,124,3,114,56,103,0,110,2,100,2,125,5,
- 124,4,124,0,124,1,124,5,100,4,141,3,83,0,124,3,
- 100,2,107,8,114,138,116,0,124,1,100,5,131,2,114,134,
- 122,14,124,1,160,4,124,0,161,1,125,3,87,0,110,24,
- 4,0,116,5,107,10,114,130,1,0,1,0,1,0,100,2,
- 125,3,89,0,110,2,88,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,115,32,108,111,97,100,101,114,32,109,
- 101,116,104,111,100,115,46,90,12,103,101,116,95,102,105,108,
- 101,110,97,109,101,78,41,1,114,109,0,0,0,41,2,114,
- 109,0,0,0,114,117,0,0,0,114,115,0,0,0,70,114,
- 135,0,0,0,41,7,114,4,0,0,0,114,126,0,0,0,
- 114,127,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,114,115,
- 0,0,0,114,79,0,0,0,114,112,0,0,0,41,6,114,
- 17,0,0,0,114,109,0,0,0,114,113,0,0,0,114,115,
- 0,0,0,114,136,0,0,0,90,6,115,101,97,114,99,104,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
- 91,0,0,0,150,1,0,0,115,36,0,0,0,0,2,10,
- 1,8,1,4,1,6,2,8,1,12,1,12,1,6,1,2,
- 255,6,3,8,1,10,1,2,1,14,1,14,1,12,3,4,
- 2,114,91,0,0,0,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,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,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,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,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,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,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,113,0,0,0,70,84,41,13,114,105,0,0,0,114,
- 106,0,0,0,114,1,0,0,0,114,98,0,0,0,114,108,
- 0,0,0,218,7,95,79,82,73,71,73,78,218,10,95,95,
- 99,97,99,104,101,100,95,95,218,4,108,105,115,116,218,8,
- 95,95,112,97,116,104,95,95,114,112,0,0,0,114,118,0,
- 0,0,114,123,0,0,0,114,117,0,0,0,41,8,114,96,
- 0,0,0,114,109,0,0,0,114,113,0,0,0,114,95,0,
- 0,0,114,17,0,0,0,90,8,108,111,99,97,116,105,111,
- 110,114,123,0,0,0,114,117,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,218,17,95,115,112,101,
- 99,95,102,114,111,109,95,109,111,100,117,108,101,176,1,0,
- 0,115,72,0,0,0,0,2,2,1,10,1,14,1,6,2,
- 8,1,4,2,6,1,8,1,2,1,10,1,14,2,6,1,
- 2,1,10,1,14,1,10,1,8,1,8,1,2,1,10,1,
- 14,1,12,2,4,1,2,1,10,1,14,1,10,1,2,1,
- 14,1,16,1,10,2,14,1,20,1,6,1,6,1,114,142,
- 0,0,0,70,169,1,218,8,111,118,101,114,114,105,100,101,
- 99,2,0,0,0,0,0,0,0,1,0,0,0,5,0,0,
- 0,8,0,0,0,67,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,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,114,110,116,7,130,1,116,6,106,8,
- 125,4,124,4,160,9,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,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,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,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,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,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,0,0,114,98,0,0,0,218,11,95,
- 95,112,97,99,107,97,103,101,95,95,114,141,0,0,0,114,
- 108,0,0,0,114,139,0,0,0,41,21,114,6,0,0,0,
- 114,17,0,0,0,114,1,0,0,0,114,106,0,0,0,114,
- 109,0,0,0,114,117,0,0,0,114,126,0,0,0,114,127,
- 0,0,0,218,16,95,78,97,109,101,115,112,97,99,101,76,
- 111,97,100,101,114,218,7,95,95,110,101,119,95,95,90,5,
- 95,112,97,116,104,114,108,0,0,0,114,98,0,0,0,114,
- 130,0,0,0,114,145,0,0,0,114,105,0,0,0,114,141,
- 0,0,0,114,124,0,0,0,114,113,0,0,0,114,123,0,
- 0,0,114,139,0,0,0,41,5,114,95,0,0,0,114,96,
- 0,0,0,114,144,0,0,0,114,109,0,0,0,114,146,0,
+ 124,0,106,5,124,1,106,5,107,2,87,0,83,0,4,0,
+ 116,6,107,10,114,100,1,0,1,0,1,0,89,0,100,1,
+ 83,0,88,0,100,0,83,0,114,116,0,0,0,41,7,114,
+ 117,0,0,0,114,17,0,0,0,114,109,0,0,0,114,113,
+ 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,106,0,0,0,41,3,
+ 114,30,0,0,0,90,5,111,116,104,101,114,90,4,115,109,
+ 115,108,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,218,6,95,95,101,113,95,95,108,1,0,0,115,30,0,
+ 0,0,0,1,6,1,2,1,12,1,10,255,2,2,10,254,
+ 2,3,8,253,2,4,10,252,2,5,10,251,4,6,14,1,
+ 122,17,77,111,100,117,108,101,83,112,101,99,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,58,0,0,
+ 0,124,0,106,0,100,0,107,8,114,52,124,0,106,1,100,
+ 0,107,9,114,52,124,0,106,2,114,52,116,3,100,0,107,
+ 8,114,38,116,4,130,1,116,3,160,5,124,0,106,1,161,
+ 1,124,0,95,0,124,0,106,0,83,0,114,13,0,0,0,
+ 41,6,114,119,0,0,0,114,113,0,0,0,114,118,0,0,
+ 0,218,19,95,98,111,111,116,115,116,114,97,112,95,101,120,
+ 116,101,114,110,97,108,218,19,78,111,116,73,109,112,108,101,
+ 109,101,110,116,101,100,69,114,114,111,114,90,11,95,103,101,
+ 116,95,99,97,99,104,101,100,114,47,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,123,0,0,
+ 0,120,1,0,0,115,12,0,0,0,0,2,10,1,16,1,
+ 8,1,4,1,14,1,122,17,77,111,100,117,108,101,83,112,
+ 101,99,46,99,97,99,104,101,100,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,10,0,0,0,124,1,124,0,95,0,100,0,83,
+ 0,114,13,0,0,0,41,1,114,119,0,0,0,41,2,114,
+ 30,0,0,0,114,123,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,123,0,0,0,129,1,0,
+ 0,115,2,0,0,0,0,2,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,8,114,26,
+ 124,0,106,1,160,2,100,2,161,1,100,3,25,0,83,0,
+ 124,0,106,1,83,0,100,1,83,0,41,4,122,32,84,104,
+ 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,
+ 100,117,108,101,39,115,32,112,97,114,101,110,116,46,78,218,
+ 1,46,114,22,0,0,0,41,3,114,117,0,0,0,114,17,
+ 0,0,0,218,10,114,112,97,114,116,105,116,105,111,110,114,
+ 47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,218,6,112,97,114,101,110,116,133,1,0,0,115,
+ 6,0,0,0,0,3,10,1,16,2,122,17,77,111,100,117,
+ 108,101,83,112,101,99,46,112,97,114,101,110,116,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,
+ 0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
+ 0,114,13,0,0,0,41,1,114,118,0,0,0,114,47,0,
0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
- 0,218,18,95,105,110,105,116,95,109,111,100,117,108,101,95,
- 97,116,116,114,115,221,1,0,0,115,96,0,0,0,0,4,
- 20,1,2,1,12,1,14,1,6,2,20,1,6,1,8,2,
- 10,1,8,1,4,1,6,2,10,1,8,1,6,11,6,1,
- 2,1,10,1,14,1,6,2,20,1,2,1,12,1,14,1,
- 6,2,2,1,10,1,16,1,6,2,24,1,12,1,2,1,
- 12,1,16,1,6,2,8,1,24,1,2,1,12,1,16,1,
- 6,2,24,1,12,1,2,1,12,1,16,1,6,1,114,148,
- 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,82,0,0,
- 0,100,1,125,1,116,0,124,0,106,1,100,2,131,2,114,
- 30,124,0,106,1,160,2,124,0,161,1,125,1,110,20,116,
- 0,124,0,106,1,100,3,131,2,114,50,116,3,100,4,131,
- 1,130,1,124,1,100,1,107,8,114,68,116,4,124,0,106,
- 5,131,1,125,1,116,6,124,0,124,1,131,2,1,0,124,
- 1,83,0,41,5,122,43,67,114,101,97,116,101,32,97,32,
- 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32,
- 116,104,101,32,112,114,111,118,105,100,101,100,32,115,112,101,
- 99,46,78,218,13,99,114,101,97,116,101,95,109,111,100,117,
- 108,101,218,11,101,120,101,99,95,109,111,100,117,108,101,122,
- 66,108,111,97,100,101,114,115,32,116,104,97,116,32,100,101,
- 102,105,110,101,32,101,120,101,99,95,109,111,100,117,108,101,
- 40,41,32,109,117,115,116,32,97,108,115,111,32,100,101,102,
- 105,110,101,32,99,114,101,97,116,101,95,109,111,100,117,108,
- 101,40,41,41,7,114,4,0,0,0,114,109,0,0,0,114,
- 149,0,0,0,114,79,0,0,0,114,18,0,0,0,114,17,
- 0,0,0,114,148,0,0,0,169,2,114,95,0,0,0,114,
- 96,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
- 0,0,0,218,16,109,111,100,117,108,101,95,102,114,111,109,
- 95,115,112,101,99,37,2,0,0,115,18,0,0,0,0,3,
- 4,1,12,3,14,1,12,1,8,2,8,1,10,1,10,1,
- 114,152,0,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,106,
- 0,0,0,124,0,106,0,100,1,107,8,114,14,100,2,110,
- 4,124,0,106,0,125,1,124,0,106,1,100,1,107,8,114,
- 66,124,0,106,2,100,1,107,8,114,50,100,3,160,3,124,
- 1,161,1,83,0,100,4,160,3,124,1,124,0,106,2,161,
- 2,83,0,110,36,124,0,106,4,114,86,100,5,160,3,124,
- 1,124,0,106,1,161,2,83,0,100,6,160,3,124,0,106,
- 0,124,0,106,1,161,2,83,0,100,1,83,0,41,7,122,
- 38,82,101,116,117,114,110,32,116,104,101,32,114,101,112,114,
- 32,116,111,32,117,115,101,32,102,111,114,32,116,104,101,32,
- 109,111,100,117,108,101,46,78,114,100,0,0,0,114,101,0,
- 0,0,114,102,0,0,0,114,103,0,0,0,250,18,60,109,
- 111,100,117,108,101,32,123,33,114,125,32,40,123,125,41,62,
- 41,5,114,17,0,0,0,114,113,0,0,0,114,109,0,0,
- 0,114,45,0,0,0,114,124,0,0,0,41,2,114,95,0,
- 0,0,114,17,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,114,107,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,107,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,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,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,53,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,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,143,0,0,0,114,150,0,0,0,41,14,
- 114,17,0,0,0,114,50,0,0,0,114,15,0,0,0,114,
- 92,0,0,0,114,34,0,0,0,114,45,0,0,0,114,79,
- 0,0,0,114,109,0,0,0,114,117,0,0,0,114,148,0,
- 0,0,114,4,0,0,0,218,11,108,111,97,100,95,109,111,
- 100,117,108,101,114,150,0,0,0,218,3,112,111,112,41,4,
- 114,95,0,0,0,114,96,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,93,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,93,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,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,98,0,0,0,114,145,0,0,0,114,141,0,
- 0,0,114,128,0,0,0,114,22,0,0,0,114,105,0,0,
- 0,41,14,114,109,0,0,0,114,155,0,0,0,114,17,0,
- 0,0,114,15,0,0,0,114,92,0,0,0,114,156,0,0,
- 0,114,6,0,0,0,114,98,0,0,0,114,106,0,0,0,
- 114,1,0,0,0,114,145,0,0,0,114,4,0,0,0,114,
- 129,0,0,0,114,105,0,0,0,114,151,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,158,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,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,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,5,124,0,106,7,124,0,
- 106,0,131,3,1,0,87,0,53,0,100,6,124,0,95,4,
- 88,0,124,1,83,0,41,7,78,114,150,0,0,0,84,114,
- 154,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,109,0,0,0,114,4,0,0,0,114,158,0,0,0,114,
- 152,0,0,0,90,13,95,105,110,105,116,105,97,108,105,122,
- 105,110,103,114,15,0,0,0,114,92,0,0,0,114,17,0,
- 0,0,114,117,0,0,0,114,79,0,0,0,114,150,0,0,
- 0,114,63,0,0,0,114,156,0,0,0,114,76,0,0,0,
- 114,151,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,159,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,50,
- 0,0,0,114,17,0,0,0,114,159,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,94,0,0,0,180,2,0,0,115,4,0,0,
- 0,0,9,12,1,114,94,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,136,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,6,100,19,100,5,100,6,132,1,131,1,90,7,101,6,
- 100,20,100,7,100,8,132,1,131,1,90,8,101,6,100,9,
- 100,10,132,0,131,1,90,9,101,6,100,11,100,12,132,0,
- 131,1,90,10,101,6,101,11,100,13,100,14,132,0,131,1,
- 131,1,90,12,101,6,101,11,100,15,100,16,132,0,131,1,
- 131,1,90,13,101,6,101,11,100,17,100,18,132,0,131,1,
- 131,1,90,14,101,6,101,15,131,1,90,16,100,4,83,0,
- 41,21,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,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,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,24,60,109,111,100,117,108,101,32,
- 123,33,114,125,32,40,98,117,105,108,116,45,105,110,41,62,
- 41,2,114,45,0,0,0,114,1,0,0,0,41,1,114,96,
+ 0,114,124,0,0,0,141,1,0,0,115,2,0,0,0,0,
+ 2,122,23,77,111,100,117,108,101,83,112,101,99,46,104,97,
+ 115,95,108,111,99,97,116,105,111,110,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,14,0,0,0,116,0,124,1,131,1,124,0,
+ 95,1,100,0,83,0,114,13,0,0,0,41,2,218,4,98,
+ 111,111,108,114,118,0,0,0,41,2,114,30,0,0,0,218,
+ 5,118,97,108,117,101,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,124,0,0,0,145,1,0,0,115,2,
+ 0,0,0,0,2,41,12,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,48,0,0,0,114,125,0,0,0,218,8,112,114,111,112,
+ 101,114,116,121,114,123,0,0,0,218,6,115,101,116,116,101,
+ 114,114,130,0,0,0,114,124,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+ 112,0,0,0,49,1,0,0,115,32,0,0,0,8,1,4,
+ 36,4,1,2,255,12,12,8,10,8,12,2,1,10,8,4,
+ 1,10,3,2,1,10,7,2,1,10,3,4,1,114,112,0,
+ 0,0,169,2,114,113,0,0,0,114,115,0,0,0,99,2,
+ 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,8,
+ 0,0,0,67,0,0,0,115,154,0,0,0,116,0,124,1,
+ 100,1,131,2,114,74,116,1,100,2,107,8,114,22,116,2,
+ 130,1,116,1,106,3,125,4,124,3,100,2,107,8,114,48,
+ 124,4,124,0,124,1,100,3,141,2,83,0,124,3,114,56,
+ 103,0,110,2,100,2,125,5,124,4,124,0,124,1,124,5,
+ 100,4,141,3,83,0,124,3,100,2,107,8,114,138,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,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,115,32,
+ 108,111,97,100,101,114,32,109,101,116,104,111,100,115,46,90,
+ 12,103,101,116,95,102,105,108,101,110,97,109,101,78,41,1,
+ 114,109,0,0,0,41,2,114,109,0,0,0,114,117,0,0,
+ 0,114,115,0,0,0,70,114,135,0,0,0,41,7,114,4,
+ 0,0,0,114,126,0,0,0,114,127,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,114,115,0,0,0,114,79,0,0,0,
+ 114,112,0,0,0,41,6,114,17,0,0,0,114,109,0,0,
+ 0,114,113,0,0,0,114,115,0,0,0,114,136,0,0,0,
+ 90,6,115,101,97,114,99,104,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,91,0,0,0,150,1,0,0,
+ 115,36,0,0,0,0,2,10,1,8,1,4,1,6,2,8,
+ 1,12,1,12,1,6,1,2,255,6,3,8,1,10,1,2,
+ 1,14,1,14,1,12,3,4,2,114,91,0,0,0,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,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,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,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,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,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,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,113,0,0,0,70,84,
+ 41,13,114,105,0,0,0,114,106,0,0,0,114,1,0,0,
+ 0,114,98,0,0,0,114,108,0,0,0,218,7,95,79,82,
+ 73,71,73,78,218,10,95,95,99,97,99,104,101,100,95,95,
+ 218,4,108,105,115,116,218,8,95,95,112,97,116,104,95,95,
+ 114,112,0,0,0,114,118,0,0,0,114,123,0,0,0,114,
+ 117,0,0,0,41,8,114,96,0,0,0,114,109,0,0,0,
+ 114,113,0,0,0,114,95,0,0,0,114,17,0,0,0,90,
+ 8,108,111,99,97,116,105,111,110,114,123,0,0,0,114,117,
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,114,99,0,0,0,204,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,44,0,0,0,124,2,
- 100,0,107,9,114,12,100,0,83,0,116,0,160,1,124,1,
- 161,1,114,36,116,2,124,1,124,0,100,1,100,2,141,3,
- 83,0,100,0,83,0,100,0,83,0,41,3,78,122,8,98,
- 117,105,108,116,45,105,110,114,137,0,0,0,41,3,114,57,
- 0,0,0,90,10,105,115,95,98,117,105,108,116,105,110,114,
- 91,0,0,0,169,4,218,3,99,108,115,114,81,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,213,2,0,0,115,10,0,0,
- 0,0,2,8,1,4,1,10,1,14,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,109,0,
- 0,0,41,4,114,163,0,0,0,114,81,0,0,0,114,164,
- 0,0,0,114,95,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,222,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,77,0,0,0,114,16,0,0,0,
- 41,8,114,17,0,0,0,114,15,0,0,0,114,78,0,0,
- 0,114,79,0,0,0,114,45,0,0,0,114,67,0,0,0,
- 114,57,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,95,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,149,0,0,0,234,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,
+ 0,0,218,17,95,115,112,101,99,95,102,114,111,109,95,109,
+ 111,100,117,108,101,176,1,0,0,115,72,0,0,0,0,2,
+ 2,1,10,1,14,1,6,2,8,1,4,2,6,1,8,1,
+ 2,1,10,1,14,2,6,1,2,1,10,1,14,1,10,1,
+ 8,1,8,1,2,1,10,1,14,1,12,2,4,1,2,1,
+ 10,1,14,1,10,1,2,1,14,1,16,1,10,2,14,1,
+ 20,1,6,1,6,1,114,142,0,0,0,70,169,1,218,8,
+ 111,118,101,114,114,105,100,101,99,2,0,0,0,0,0,0,
+ 0,1,0,0,0,5,0,0,0,8,0,0,0,67,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,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,114,110,
+ 116,7,130,1,116,6,106,8,125,4,124,4,160,9,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,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,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,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,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,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,0,0,
+ 114,98,0,0,0,218,11,95,95,112,97,99,107,97,103,101,
+ 95,95,114,141,0,0,0,114,108,0,0,0,114,139,0,0,
+ 0,41,21,114,6,0,0,0,114,17,0,0,0,114,1,0,
+ 0,0,114,106,0,0,0,114,109,0,0,0,114,117,0,0,
+ 0,114,126,0,0,0,114,127,0,0,0,218,16,95,78,97,
+ 109,101,115,112,97,99,101,76,111,97,100,101,114,218,7,95,
+ 95,110,101,119,95,95,90,5,95,112,97,116,104,114,108,0,
+ 0,0,114,98,0,0,0,114,130,0,0,0,114,145,0,0,
+ 0,114,105,0,0,0,114,141,0,0,0,114,124,0,0,0,
+ 114,113,0,0,0,114,123,0,0,0,114,139,0,0,0,41,
+ 5,114,95,0,0,0,114,96,0,0,0,114,144,0,0,0,
+ 114,109,0,0,0,114,146,0,0,0,114,10,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,218,18,95,105,110,105,116,
+ 95,109,111,100,117,108,101,95,97,116,116,114,115,221,1,0,
+ 0,115,96,0,0,0,0,4,20,1,2,1,12,1,14,1,
+ 6,2,20,1,6,1,8,2,10,1,8,1,4,1,6,2,
+ 10,1,8,1,6,11,6,1,2,1,10,1,14,1,6,2,
+ 20,1,2,1,12,1,14,1,6,2,2,1,10,1,16,1,
+ 6,2,24,1,12,1,2,1,12,1,16,1,6,2,8,1,
+ 24,1,2,1,12,1,16,1,6,2,24,1,12,1,2,1,
+ 12,1,16,1,6,1,114,148,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,82,0,0,0,100,1,125,1,116,0,124,
+ 0,106,1,100,2,131,2,114,30,124,0,106,1,160,2,124,
+ 0,161,1,125,1,110,20,116,0,124,0,106,1,100,3,131,
+ 2,114,50,116,3,100,4,131,1,130,1,124,1,100,1,107,
+ 8,114,68,116,4,124,0,106,5,131,1,125,1,116,6,124,
+ 0,124,1,131,2,1,0,124,1,83,0,41,5,122,43,67,
+ 114,101,97,116,101,32,97,32,109,111,100,117,108,101,32,98,
+ 97,115,101,100,32,111,110,32,116,104,101,32,112,114,111,118,
+ 105,100,101,100,32,115,112,101,99,46,78,218,13,99,114,101,
+ 97,116,101,95,109,111,100,117,108,101,218,11,101,120,101,99,
+ 95,109,111,100,117,108,101,122,66,108,111,97,100,101,114,115,
+ 32,116,104,97,116,32,100,101,102,105,110,101,32,101,120,101,
+ 99,95,109,111,100,117,108,101,40,41,32,109,117,115,116,32,
+ 97,108,115,111,32,100,101,102,105,110,101,32,99,114,101,97,
+ 116,101,95,109,111,100,117,108,101,40,41,41,7,114,4,0,
+ 0,0,114,109,0,0,0,114,149,0,0,0,114,79,0,0,
+ 0,114,18,0,0,0,114,17,0,0,0,114,148,0,0,0,
+ 169,2,114,95,0,0,0,114,96,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,218,16,109,111,100,
+ 117,108,101,95,102,114,111,109,95,115,112,101,99,37,2,0,
+ 0,115,18,0,0,0,0,3,4,1,12,3,14,1,12,1,
+ 8,2,8,1,10,1,10,1,114,152,0,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,106,0,0,0,124,0,106,0,100,
+ 1,107,8,114,14,100,2,110,4,124,0,106,0,125,1,124,
+ 0,106,1,100,1,107,8,114,66,124,0,106,2,100,1,107,
+ 8,114,50,100,3,160,3,124,1,161,1,83,0,100,4,160,
+ 3,124,1,124,0,106,2,161,2,83,0,110,36,124,0,106,
+ 4,114,86,100,5,160,3,124,1,124,0,106,1,161,2,83,
+ 0,100,6,160,3,124,0,106,0,124,0,106,1,161,2,83,
+ 0,100,1,83,0,41,7,122,38,82,101,116,117,114,110,32,
+ 116,104,101,32,114,101,112,114,32,116,111,32,117,115,101,32,
+ 102,111,114,32,116,104,101,32,109,111,100,117,108,101,46,78,
+ 114,100,0,0,0,114,101,0,0,0,114,102,0,0,0,114,
+ 103,0,0,0,250,18,60,109,111,100,117,108,101,32,123,33,
+ 114,125,32,40,123,125,41,62,41,5,114,17,0,0,0,114,
+ 113,0,0,0,114,109,0,0,0,114,45,0,0,0,114,124,
+ 0,0,0,41,2,114,95,0,0,0,114,17,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,107,
+ 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,107,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,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,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,53,
+ 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,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,143,0,0,
+ 0,114,150,0,0,0,41,14,114,17,0,0,0,114,50,0,
+ 0,0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,
+ 0,114,45,0,0,0,114,79,0,0,0,114,109,0,0,0,
+ 114,117,0,0,0,114,148,0,0,0,114,4,0,0,0,218,
+ 11,108,111,97,100,95,109,111,100,117,108,101,114,150,0,0,
+ 0,218,3,112,111,112,41,4,114,95,0,0,0,114,96,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,93,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,93,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,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,98,0,0,0,
+ 114,145,0,0,0,114,141,0,0,0,114,128,0,0,0,114,
+ 22,0,0,0,114,105,0,0,0,41,14,114,109,0,0,0,
+ 114,155,0,0,0,114,17,0,0,0,114,15,0,0,0,114,
+ 92,0,0,0,114,156,0,0,0,114,6,0,0,0,114,98,
+ 0,0,0,114,106,0,0,0,114,1,0,0,0,114,145,0,
+ 0,0,114,4,0,0,0,114,129,0,0,0,114,105,0,0,
+ 0,114,151,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,
+ 158,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,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,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,5,124,0,106,7,124,0,106,0,131,3,1,0,87,0,
+ 53,0,100,6,124,0,95,4,88,0,124,1,83,0,41,7,
+ 78,114,150,0,0,0,84,114,154,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,109,0,0,0,114,4,0,
+ 0,0,114,158,0,0,0,114,152,0,0,0,90,13,95,105,
+ 110,105,116,105,97,108,105,122,105,110,103,114,15,0,0,0,
+ 114,92,0,0,0,114,17,0,0,0,114,117,0,0,0,114,
+ 79,0,0,0,114,150,0,0,0,114,63,0,0,0,114,156,
+ 0,0,0,114,76,0,0,0,114,151,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,159,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,50,0,0,0,114,17,0,0,0,
+ 114,159,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,94,0,0,0,
+ 180,2,0,0,115,4,0,0,0,0,9,12,1,114,94,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,136,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,6,100,19,100,5,100,6,
+ 132,1,131,1,90,7,101,6,100,20,100,7,100,8,132,1,
+ 131,1,90,8,101,6,100,9,100,10,132,0,131,1,90,9,
+ 101,6,100,11,100,12,132,0,131,1,90,10,101,6,101,11,
+ 100,13,100,14,132,0,131,1,131,1,90,12,101,6,101,11,
+ 100,15,100,16,132,0,131,1,131,1,90,13,101,6,101,11,
+ 100,17,100,18,132,0,131,1,131,1,90,14,101,6,101,15,
+ 131,1,90,16,100,4,83,0,41,21,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,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,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,24,
+ 60,109,111,100,117,108,101,32,123,33,114,125,32,40,98,117,
+ 105,108,116,45,105,110,41,62,41,2,114,45,0,0,0,114,
+ 1,0,0,0,41,1,114,96,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,114,99,0,0,0,204,
+ 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,44,0,0,0,124,2,100,0,107,9,114,12,100,0,
+ 83,0,116,0,160,1,124,1,161,1,114,36,116,2,124,1,
+ 124,0,100,1,100,2,141,3,83,0,100,0,83,0,100,0,
+ 83,0,41,3,78,122,8,98,117,105,108,116,45,105,110,114,
+ 137,0,0,0,41,3,114,57,0,0,0,90,10,105,115,95,
+ 98,117,105,108,116,105,110,114,91,0,0,0,169,4,218,3,
+ 99,108,115,114,81,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,
+ 213,2,0,0,115,10,0,0,0,0,2,8,1,4,1,10,
+ 1,14,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,109,0,0,0,41,4,114,163,0,0,
+ 0,114,81,0,0,0,114,164,0,0,0,114,95,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,222,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,77,
+ 0,0,0,114,16,0,0,0,41,8,114,17,0,0,0,114,
+ 15,0,0,0,114,78,0,0,0,114,79,0,0,0,114,45,
+ 0,0,0,114,67,0,0,0,114,57,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,95,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,149,0,0,0,234,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,67,0,0,0,114,
+ 57,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,96,0,0,0,114,10,
+ 0,0,0,114,10,0,0,0,114,11,0,0,0,114,150,0,
+ 0,0,242,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,81,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,247,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,253,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,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,115,0,0,0,3,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,17,114,1,0,
+ 0,0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,
+ 0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114,
+ 99,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,149,0,0,0,
+ 114,150,0,0,0,114,86,0,0,0,114,169,0,0,0,114,
+ 170,0,0,0,114,115,0,0,0,114,97,0,0,0,114,155,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,160,0,0,0,195,2,0,0,
+ 115,42,0,0,0,8,2,4,7,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,
+ 160,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,161,0,0,
+ 0,114,153,0,0,0,41,4,114,45,0,0,0,114,1,0,
+ 0,0,114,173,0,0,0,114,138,0,0,0,41,1,218,1,
+ 109,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
+ 114,99,0,0,0,23,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,41,2,78,
+ 114,137,0,0,0,41,4,114,57,0,0,0,114,88,0,0,
+ 0,114,91,0,0,0,114,138,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,32,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,57,0,0,0,114,88,0,0,0,41,3,114,163,0,
+ 0,0,114,81,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,
+ 39,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,95,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,114,149,0,0,0,48,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,87,0,0,0,41,10,114,105,0,0,0,
+ 114,17,0,0,0,114,57,0,0,0,114,88,0,0,0,114,
+ 79,0,0,0,114,45,0,0,0,114,67,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,96,
+ 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,150,0,
+ 0,0,52,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,97,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,
+ 61,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,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,67,0,0,0,114,57,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,96,0,0,0,114,10,0,0,0,114,10,0,0,0,
- 114,11,0,0,0,114,150,0,0,0,242,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,81,
- 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,247,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,253,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,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,
+ 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,57,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,115,0,0,0,3,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,17,114,1,0,0,0,114,0,0,0,0,114,
- 2,0,0,0,114,3,0,0,0,218,12,115,116,97,116,105,
- 99,109,101,116,104,111,100,114,99,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,149,0,0,0,114,150,0,0,0,114,86,0,
- 0,0,114,169,0,0,0,114,170,0,0,0,114,115,0,0,
- 0,114,97,0,0,0,114,155,0,0,0,114,10,0,0,0,
+ 114,169,0,0,0,70,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,
- 160,0,0,0,195,2,0,0,115,42,0,0,0,8,2,4,
- 7,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,160,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,161,0,0,0,114,153,0,0,0,41,4,
- 114,45,0,0,0,114,1,0,0,0,114,173,0,0,0,114,
- 138,0,0,0,41,1,218,1,109,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,99,0,0,0,23,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,41,2,78,114,137,0,0,0,41,4,114,
- 57,0,0,0,114,88,0,0,0,114,91,0,0,0,114,138,
- 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,32,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,57,0,0,0,114,88,
- 0,0,0,41,3,114,163,0,0,0,114,81,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,39,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,95,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,149,0,0,0,48,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,87,0,0,
- 0,41,10,114,105,0,0,0,114,17,0,0,0,114,57,0,
- 0,0,114,88,0,0,0,114,79,0,0,0,114,45,0,0,
- 0,114,67,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,96,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,150,0,0,0,52,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,97,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,61,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,57,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,70,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,76,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,57,
- 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,115,0,0,0,82,
- 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,138,0,0,0,114,171,0,0,0,114,99,0,0,
- 0,114,172,0,0,0,114,166,0,0,0,114,167,0,0,0,
- 114,149,0,0,0,114,150,0,0,0,114,155,0,0,0,114,
- 90,0,0,0,114,169,0,0,0,114,170,0,0,0,114,115,
- 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,12,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,57,0,0,0,
- 114,58,0,0,0,114,47,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,54,0,0,0,95,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,57,0,0,0,114,60,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,56,0,0,0,99,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,54,0,0,
- 0,114,56,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,91,
- 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,128,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,
- 218,10,86,97,108,117,101,69,114,114,111,114,114,45,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,104,3,0,0,115,10,0,0,0,0,2,16,1,12,
- 1,8,1,8,1,114,188,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,91,0,0,0,41,4,218,6,102,
- 105,110,100,101,114,114,17,0,0,0,114,164,0,0,0,114,
- 109,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,113,3,0,0,115,8,0,0,0,0,
- 3,12,1,8,1,4,1,114,190,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,79,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,92,0,0,0,114,178,0,0,0,
- 114,166,0,0,0,114,106,0,0,0,114,190,0,0,0,114,
- 105,0,0,0,41,10,114,17,0,0,0,114,164,0,0,0,
- 114,165,0,0,0,114,191,0,0,0,90,9,105,115,95,114,
- 101,108,111,97,100,114,189,0,0,0,114,166,0,0,0,114,
- 95,0,0,0,114,96,0,0,0,114,105,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,122,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,195,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,45,0,0,
- 0,114,14,0,0,0,114,185,0,0,0,114,79,0,0,0,
- 169,3,114,17,0,0,0,114,186,0,0,0,114,187,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,169,
- 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,128,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,129,0,0,0,114,15,0,0,
- 0,114,92,0,0,0,114,67,0,0,0,114,141,0,0,0,
- 114,106,0,0,0,218,8,95,69,82,82,95,77,83,71,114,
- 45,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,195,0,0,0,114,159,
- 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,130,0,
- 0,0,90,13,112,97,114,101,110,116,95,109,111,100,117,108,
- 101,114,157,0,0,0,114,95,0,0,0,114,96,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,188,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,50,0,0,0,114,15,0,0,
- 0,114,92,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,45,0,0,0,114,203,0,0,0,114,65,0,0,0,41,
- 4,114,17,0,0,0,114,204,0,0,0,114,96,0,0,0,
- 114,75,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,218,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,188,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,234,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,110,154,124,4,100,
- 5,107,2,114,108,124,3,115,106,116,5,124,0,100,6,131,
- 2,114,106,116,6,124,0,124,0,106,7,124,2,100,7,100,
- 8,141,4,1,0,110,112,116,5,124,0,124,4,131,2,115,
- 220,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,110,72,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,110,2,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,196,0,0,0,114,197,0,0,0,114,1,0,0,0,114,
- 198,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,45,0,0,0,114,67,0,0,0,114,
- 203,0,0,0,114,17,0,0,0,114,15,0,0,0,114,92,
- 0,0,0,114,34,0,0,0,114,206,0,0,0,41,8,114,
- 96,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,249,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,145,0,0,0,
- 114,105,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,141,0,0,0,114,128,0,0,0,114,22,
- 0,0,0,41,6,114,34,0,0,0,114,130,0,0,0,114,
- 192,0,0,0,114,193,0,0,0,114,194,0,0,0,114,129,
- 0,0,0,41,3,218,7,103,108,111,98,97,108,115,114,186,
- 0,0,0,114,95,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,30,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,128,0,0,0,114,141,
- 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,92,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,187,0,0,0,114,96,0,0,0,90,8,103,108,111,
- 98,97,108,115,95,114,186,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,57,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,
+ 170,0,0,0,76,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,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,160,
- 0,0,0,114,166,0,0,0,114,79,0,0,0,114,159,0,
- 0,0,41,2,114,17,0,0,0,114,95,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,94,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,192,0,0,0,114,64,0,0,0,78,41,15,114,57,0,
- 0,0,114,15,0,0,0,114,14,0,0,0,114,92,0,0,
- 0,218,5,105,116,101,109,115,114,196,0,0,0,114,78,0,
- 0,0,114,160,0,0,0,114,88,0,0,0,114,173,0,0,
- 0,114,142,0,0,0,114,148,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,96,0,0,0,114,109,0,0,
- 0,114,95,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,101,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,
- 191,0,0,0,114,120,0,0,0,114,160,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,136,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,126,0,0,0,
- 114,228,0,0,0,114,15,0,0,0,114,92,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,144,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,
- 126,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,49,0,0,0,114,50,0,0,
- 0,114,53,0,0,0,114,65,0,0,0,114,67,0,0,0,
- 114,76,0,0,0,114,86,0,0,0,114,90,0,0,0,114,
- 97,0,0,0,114,111,0,0,0,114,112,0,0,0,114,91,
- 0,0,0,114,142,0,0,0,114,148,0,0,0,114,152,0,
- 0,0,114,107,0,0,0,114,93,0,0,0,114,158,0,0,
- 0,114,159,0,0,0,114,94,0,0,0,114,160,0,0,0,
- 114,173,0,0,0,114,178,0,0,0,114,188,0,0,0,114,
- 190,0,0,0,114,195,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,73,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,
+ 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,57,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,115,0,0,0,82,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,138,0,0,0,114,
+ 171,0,0,0,114,99,0,0,0,114,172,0,0,0,114,166,
+ 0,0,0,114,167,0,0,0,114,149,0,0,0,114,150,0,
+ 0,0,114,155,0,0,0,114,90,0,0,0,114,169,0,0,
+ 0,114,170,0,0,0,114,115,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,12,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,57,0,0,0,114,58,0,0,0,114,47,0,
+ 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,114,54,0,0,0,95,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,57,0,0,
+ 0,114,60,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,56,0,0,0,99,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,54,0,0,0,114,56,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,91,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,
+ 128,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,218,10,86,97,108,117,101,69,
+ 114,114,111,114,114,45,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,104,3,0,0,115,10,
+ 0,0,0,0,2,16,1,12,1,8,1,8,1,114,188,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,91,
+ 0,0,0,41,4,218,6,102,105,110,100,101,114,114,17,0,
+ 0,0,114,164,0,0,0,114,109,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,113,3,
+ 0,0,115,8,0,0,0,0,3,12,1,8,1,4,1,114,
+ 190,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,79,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,92,
+ 0,0,0,114,178,0,0,0,114,166,0,0,0,114,106,0,
+ 0,0,114,190,0,0,0,114,105,0,0,0,41,10,114,17,
+ 0,0,0,114,164,0,0,0,114,165,0,0,0,114,191,0,
+ 0,0,90,9,105,115,95,114,101,108,111,97,100,114,189,0,
+ 0,0,114,166,0,0,0,114,95,0,0,0,114,96,0,0,
+ 0,114,105,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,122,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,195,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,45,0,0,0,114,14,0,0,0,114,185,
+ 0,0,0,114,79,0,0,0,169,3,114,17,0,0,0,114,
+ 186,0,0,0,114,187,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,169,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,128,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,
+ 129,0,0,0,114,15,0,0,0,114,92,0,0,0,114,67,
+ 0,0,0,114,141,0,0,0,114,106,0,0,0,218,8,95,
+ 69,82,82,95,77,83,71,114,45,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,195,0,0,0,114,159,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,130,0,0,0,90,13,112,97,114,101,
+ 110,116,95,109,111,100,117,108,101,114,157,0,0,0,114,95,
+ 0,0,0,114,96,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,
+ 188,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,
+ 50,0,0,0,114,15,0,0,0,114,92,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,45,0,0,0,114,203,0,
+ 0,0,114,65,0,0,0,41,4,114,17,0,0,0,114,204,
+ 0,0,0,114,96,0,0,0,114,75,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,218,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,188,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,234,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,196,0,0,0,114,197,0,
+ 0,0,114,1,0,0,0,114,198,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,45,0,
+ 0,0,114,67,0,0,0,114,203,0,0,0,114,17,0,0,
+ 0,114,15,0,0,0,114,92,0,0,0,114,34,0,0,0,
+ 114,206,0,0,0,41,8,114,96,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,249,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,145,0,0,0,114,105,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,141,0,0,
+ 0,114,128,0,0,0,114,22,0,0,0,41,6,114,34,0,
+ 0,0,114,130,0,0,0,114,192,0,0,0,114,193,0,0,
+ 0,114,194,0,0,0,114,129,0,0,0,41,3,218,7,103,
+ 108,111,98,97,108,115,114,186,0,0,0,114,95,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,30,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,128,0,0,0,114,141,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,92,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,187,0,0,0,114,96,
+ 0,0,0,90,8,103,108,111,98,97,108,115,95,114,186,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,57,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,160,0,0,0,114,166,0,0,0,
+ 114,79,0,0,0,114,159,0,0,0,41,2,114,17,0,0,
+ 0,114,95,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,94,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,192,0,0,0,114,64,0,
+ 0,0,78,41,15,114,57,0,0,0,114,15,0,0,0,114,
+ 14,0,0,0,114,92,0,0,0,218,5,105,116,101,109,115,
+ 114,196,0,0,0,114,78,0,0,0,114,160,0,0,0,114,
+ 88,0,0,0,114,173,0,0,0,114,142,0,0,0,114,148,
+ 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,
+ 96,0,0,0,114,109,0,0,0,114,95,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,
+ 101,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,191,0,0,0,114,120,0,0,
+ 0,114,160,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,
+ 136,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,126,0,0,0,114,228,0,0,0,114,15,0,
+ 0,0,114,92,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,144,
+ 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,126,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,
+ 49,0,0,0,114,50,0,0,0,114,53,0,0,0,114,65,
+ 0,0,0,114,67,0,0,0,114,76,0,0,0,114,86,0,
+ 0,0,114,90,0,0,0,114,97,0,0,0,114,111,0,0,
+ 0,114,112,0,0,0,114,91,0,0,0,114,142,0,0,0,
+ 114,148,0,0,0,114,152,0,0,0,114,107,0,0,0,114,
+ 93,0,0,0,114,158,0,0,0,114,159,0,0,0,114,94,
+ 0,0,0,114,160,0,0,0,114,173,0,0,0,114,178,0,
+ 0,0,114,188,0,0,0,114,190,0,0,0,114,195,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,73,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 e724560d67a1..9b86fe6b72a9 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -1,1003 +1,1001 @@
/* Auto-generated by Programs/_freeze_importlib.c */
const unsigned char _Py_M__importlib_bootstrap_external[] = {
99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,5,0,0,0,64,0,0,0,115,52,2,0,0,100,0,
+ 0,5,0,0,0,64,0,0,0,115,32,2,0,0,100,0,
90,0,100,1,90,1,100,2,90,2,101,2,101,1,23,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,132,0,90,8,100,13,100,14,132,0,
90,9,100,15,100,16,132,0,90,10,100,17,100,18,132,0,
90,11,100,19,100,20,132,0,90,12,100,21,100,22,132,0,
- 90,13,100,23,100,24,132,0,90,14,100,25,102,1,100,26,
- 100,27,132,1,90,15,101,16,101,15,106,17,131,1,90,18,
- 100,28,160,19,100,29,100,30,161,2,100,31,23,0,90,20,
- 101,21,160,22,101,20,100,30,161,2,90,23,100,32,90,24,
- 100,33,90,25,100,34,103,1,90,26,100,35,103,1,90,27,
- 101,27,4,0,90,28,90,29,100,36,102,1,100,36,100,37,
- 156,1,100,38,100,39,132,3,90,30,100,40,100,41,132,0,
- 90,31,100,42,100,43,132,0,90,32,100,44,100,45,132,0,
- 90,33,100,46,100,47,132,0,90,34,100,48,100,49,132,0,
- 90,35,100,50,100,51,132,0,90,36,100,52,100,53,132,0,
- 90,37,100,54,100,55,132,0,90,38,100,56,100,57,132,0,
- 90,39,100,36,100,36,100,36,102,3,100,58,100,59,132,1,
- 90,40,100,60,100,60,102,2,100,61,100,62,132,1,90,41,
- 100,63,102,1,100,64,100,65,132,1,90,42,100,66,100,67,
- 132,0,90,43,101,44,131,0,90,45,100,36,102,1,100,36,
- 101,45,100,68,156,2,100,69,100,70,132,3,90,46,71,0,
- 100,71,100,72,132,0,100,72,131,2,90,47,71,0,100,73,
- 100,74,132,0,100,74,131,2,90,48,71,0,100,75,100,76,
- 132,0,100,76,101,48,131,3,90,49,71,0,100,77,100,78,
- 132,0,100,78,131,2,90,50,71,0,100,79,100,80,132,0,
- 100,80,101,50,101,49,131,4,90,51,71,0,100,81,100,82,
- 132,0,100,82,101,50,101,48,131,4,90,52,103,0,90,53,
- 71,0,100,83,100,84,132,0,100,84,101,50,101,48,131,4,
- 90,54,71,0,100,85,100,86,132,0,100,86,131,2,90,55,
- 71,0,100,87,100,88,132,0,100,88,131,2,90,56,71,0,
- 100,89,100,90,132,0,100,90,131,2,90,57,71,0,100,91,
- 100,92,132,0,100,92,131,2,90,58,100,36,102,1,100,93,
- 100,94,132,1,90,59,100,95,100,96,132,0,90,60,100,97,
- 100,98,132,0,90,61,100,99,100,100,132,0,90,62,100,36,
- 83,0,41,101,97,94,1,0,0,67,111,114,101,32,105,109,
- 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,
- 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114,
- 116,46,10,10,84,104,105,115,32,109,111,100,117,108,101,32,
- 105,115,32,78,79,84,32,109,101,97,110,116,32,116,111,32,
- 98,101,32,100,105,114,101,99,116,108,121,32,105,109,112,111,
- 114,116,101,100,33,32,73,116,32,104,97,115,32,98,101,101,
- 110,32,100,101,115,105,103,110,101,100,32,115,117,99,104,10,
- 116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,98,
- 111,111,116,115,116,114,97,112,112,101,100,32,105,110,116,111,
- 32,80,121,116,104,111,110,32,97,115,32,116,104,101,32,105,
- 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,
- 32,105,109,112,111,114,116,46,32,65,115,10,115,117,99,104,
- 32,105,116,32,114,101,113,117,105,114,101,115,32,116,104,101,
- 32,105,110,106,101,99,116,105,111,110,32,111,102,32,115,112,
- 101,99,105,102,105,99,32,109,111,100,117,108,101,115,32,97,
- 110,100,32,97,116,116,114,105,98,117,116,101,115,32,105,110,
- 32,111,114,100,101,114,32,116,111,10,119,111,114,107,46,32,
- 79,110,101,32,115,104,111,117,108,100,32,117,115,101,32,105,
- 109,112,111,114,116,108,105,98,32,97,115,32,116,104,101,32,
- 112,117,98,108,105,99,45,102,97,99,105,110,103,32,118,101,
- 114,115,105,111,110,32,111,102,32,116,104,105,115,32,109,111,
- 100,117,108,101,46,10,10,41,1,218,3,119,105,110,41,2,
- 90,6,99,121,103,119,105,110,90,6,100,97,114,119,105,110,
- 99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
- 0,3,0,0,0,3,0,0,0,115,60,0,0,0,116,0,
- 106,1,160,2,116,3,161,1,114,48,116,0,106,1,160,2,
- 116,4,161,1,114,30,100,1,137,0,110,4,100,2,137,0,
- 135,0,102,1,100,3,100,4,132,8,125,0,110,8,100,5,
- 100,4,132,0,125,0,124,0,83,0,41,6,78,90,12,80,
- 89,84,72,79,78,67,65,83,69,79,75,115,12,0,0,0,
- 80,89,84,72,79,78,67,65,83,69,79,75,99,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
- 0,19,0,0,0,115,10,0,0,0,136,0,116,0,106,1,
- 107,6,83,0,41,1,250,53,84,114,117,101,32,105,102,32,
- 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,
- 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,
- 110,115,101,110,115,105,116,105,118,101,108,121,46,41,2,218,
- 3,95,111,115,90,7,101,110,118,105,114,111,110,169,0,169,
- 1,218,3,107,101,121,114,3,0,0,0,250,38,60,102,114,
- 111,122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,
- 98,111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,
- 97,108,62,218,11,95,114,101,108,97,120,95,99,97,115,101,
- 36,0,0,0,115,2,0,0,0,0,2,122,37,95,109,97,
- 107,101,95,114,101,108,97,120,95,99,97,115,101,46,60,108,
- 111,99,97,108,115,62,46,95,114,101,108,97,120,95,99,97,
- 115,101,99,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0,
- 100,1,83,0,41,2,114,1,0,0,0,70,114,3,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,7,0,0,0,40,0,0,0,115,2,
- 0,0,0,0,2,41,5,218,3,115,121,115,218,8,112,108,
- 97,116,102,111,114,109,218,10,115,116,97,114,116,115,119,105,
- 116,104,218,27,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,218,
- 35,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,83,84,82,
- 95,75,69,89,41,1,114,7,0,0,0,114,3,0,0,0,
- 114,4,0,0,0,114,6,0,0,0,218,16,95,109,97,107,
- 101,95,114,101,108,97,120,95,99,97,115,101,29,0,0,0,
- 115,14,0,0,0,0,1,12,1,12,1,6,2,4,2,14,
- 4,8,3,114,13,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,20,0,0,0,116,0,124,0,131,1,100,1,64,0,
- 160,1,100,2,100,3,161,2,83,0,41,4,122,42,67,111,
- 110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,105,
- 110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,101,
- 45,101,110,100,105,97,110,46,236,3,0,0,0,255,127,255,
- 127,3,0,233,4,0,0,0,218,6,108,105,116,116,108,101,
- 41,2,218,3,105,110,116,218,8,116,111,95,98,121,116,101,
- 115,41,1,218,1,120,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,12,95,112,97,99,107,95,117,105,110,
- 116,51,50,46,0,0,0,115,2,0,0,0,0,2,114,20,
- 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,116,0,124,0,131,1,100,1,107,2,115,16,116,1,130,
- 1,116,2,160,3,124,0,100,2,161,2,83,0,41,3,122,
- 47,67,111,110,118,101,114,116,32,52,32,98,121,116,101,115,
- 32,105,110,32,108,105,116,116,108,101,45,101,110,100,105,97,
- 110,32,116,111,32,97,110,32,105,110,116,101,103,101,114,46,
- 114,15,0,0,0,114,16,0,0,0,169,4,218,3,108,101,
- 110,218,14,65,115,115,101,114,116,105,111,110,69,114,114,111,
- 114,114,17,0,0,0,218,10,102,114,111,109,95,98,121,116,
- 101,115,169,1,218,4,100,97,116,97,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,14,95,117,110,112,97,
- 99,107,95,117,105,110,116,51,50,51,0,0,0,115,4,0,
- 0,0,0,2,16,1,114,27,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,116,0,124,0,131,1,100,
- 1,107,2,115,16,116,1,130,1,116,2,160,3,124,0,100,
- 2,161,2,83,0,41,3,122,47,67,111,110,118,101,114,116,
- 32,50,32,98,121,116,101,115,32,105,110,32,108,105,116,116,
- 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32,
- 105,110,116,101,103,101,114,46,233,2,0,0,0,114,16,0,
- 0,0,114,21,0,0,0,114,25,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,14,95,117,110,
- 112,97,99,107,95,117,105,110,116,49,54,56,0,0,0,115,
- 4,0,0,0,0,2,16,1,114,29,0,0,0,99,0,0,
- 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,
- 0,0,71,0,0,0,115,20,0,0,0,116,0,160,1,100,
- 1,100,2,132,0,124,0,68,0,131,1,161,1,83,0,41,
- 3,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,
- 111,114,32,111,115,46,112,97,116,104,46,106,111,105,110,40,
- 41,46,99,1,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,5,0,0,0,83,0,0,0,115,26,0,0,0,
- 103,0,124,0,93,18,125,1,124,1,114,22,124,1,160,0,
- 116,1,161,1,145,2,113,4,83,0,114,3,0,0,0,41,
- 2,218,6,114,115,116,114,105,112,218,15,112,97,116,104,95,
- 115,101,112,97,114,97,116,111,114,115,41,2,218,2,46,48,
- 218,4,112,97,114,116,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,10,60,108,105,115,116,99,111,109,112,
- 62,64,0,0,0,115,6,0,0,0,6,1,2,0,4,255,
- 122,30,95,112,97,116,104,95,106,111,105,110,46,60,108,111,
- 99,97,108,115,62,46,60,108,105,115,116,99,111,109,112,62,
- 41,2,218,8,112,97,116,104,95,115,101,112,218,4,106,111,
- 105,110,41,1,218,10,112,97,116,104,95,112,97,114,116,115,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 10,95,112,97,116,104,95,106,111,105,110,62,0,0,0,115,
- 6,0,0,0,0,2,10,1,2,255,114,38,0,0,0,99,
- 1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,
- 5,0,0,0,67,0,0,0,115,96,0,0,0,116,0,116,
- 1,131,1,100,1,107,2,114,36,124,0,160,2,116,3,161,
- 1,92,3,125,1,125,2,125,3,124,1,124,3,102,2,83,
- 0,116,4,124,0,131,1,68,0,93,42,125,4,124,4,116,
- 1,107,6,114,44,124,0,106,5,124,4,100,1,100,2,141,
- 2,92,2,125,1,125,3,124,1,124,3,102,2,2,0,1,
- 0,83,0,113,44,100,3,124,0,102,2,83,0,41,4,122,
- 32,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,
- 32,111,115,46,112,97,116,104,46,115,112,108,105,116,40,41,
- 46,233,1,0,0,0,41,1,90,8,109,97,120,115,112,108,
- 105,116,218,0,41,6,114,22,0,0,0,114,31,0,0,0,
- 218,10,114,112,97,114,116,105,116,105,111,110,114,35,0,0,
- 0,218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,
- 108,105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,
- 110,116,218,1,95,218,4,116,97,105,108,114,19,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 11,95,112,97,116,104,95,115,112,108,105,116,68,0,0,0,
- 115,16,0,0,0,0,2,12,1,16,1,8,1,12,1,8,
- 1,18,1,14,1,114,47,0,0,0,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,10,0,0,0,116,0,160,1,124,0,161,1,
- 83,0,41,1,122,126,83,116,97,116,32,116,104,101,32,112,
- 97,116,104,46,10,10,32,32,32,32,77,97,100,101,32,97,
- 32,115,101,112,97,114,97,116,101,32,102,117,110,99,116,105,
- 111,110,32,116,111,32,109,97,107,101,32,105,116,32,101,97,
- 115,105,101,114,32,116,111,32,111,118,101,114,114,105,100,101,
- 32,105,110,32,101,120,112,101,114,105,109,101,110,116,115,10,
- 32,32,32,32,40,101,46,103,46,32,99,97,99,104,101,32,
- 115,116,97,116,32,114,101,115,117,108,116,115,41,46,10,10,
- 32,32,32,32,41,2,114,2,0,0,0,90,4,115,116,97,
- 116,169,1,114,44,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,218,10,95,112,97,116,104,95,115,
- 116,97,116,80,0,0,0,115,2,0,0,0,0,7,114,49,
- 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,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,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,115,112,101,99,105,102,105,101,100,32,109,111,
- 100,101,32,116,121,112,101,46,70,105,0,240,0,0,41,3,
- 114,49,0,0,0,218,7,79,83,69,114,114,111,114,218,7,
- 115,116,95,109,111,100,101,41,3,114,44,0,0,0,218,4,
- 109,111,100,101,90,9,115,116,97,116,95,105,110,102,111,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,18,
- 95,112,97,116,104,95,105,115,95,109,111,100,101,95,116,121,
- 112,101,90,0,0,0,115,10,0,0,0,0,2,2,1,12,
- 1,14,1,8,1,114,53,0,0,0,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,10,0,0,0,116,0,124,0,100,1,131,2,
- 83,0,41,2,122,31,82,101,112,108,97,99,101,109,101,110,
- 116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,115,
- 102,105,108,101,46,105,0,128,0,0,41,1,114,53,0,0,
- 0,114,48,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,12,95,112,97,116,104,95,105,115,102,
- 105,108,101,99,0,0,0,115,2,0,0,0,0,2,114,54,
- 0,0,0,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,22,0,0,
- 0,124,0,115,12,116,0,160,1,161,0,125,0,116,2,124,
- 0,100,1,131,2,83,0,41,2,122,30,82,101,112,108,97,
- 99,101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,
- 116,104,46,105,115,100,105,114,46,105,0,64,0,0,41,3,
- 114,2,0,0,0,218,6,103,101,116,99,119,100,114,53,0,
- 0,0,114,48,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,218,11,95,112,97,116,104,95,105,115,
- 100,105,114,104,0,0,0,115,6,0,0,0,0,2,4,1,
- 8,1,114,56,0,0,0,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,26,0,0,0,124,0,160,0,116,1,161,1,112,24,124,
- 0,100,1,100,2,133,2,25,0,116,2,107,6,83,0,41,
- 3,122,142,82,101,112,108,97,99,101,109,101,110,116,32,102,
- 111,114,32,111,115,46,112,97,116,104,46,105,115,97,98,115,
- 46,10,10,32,32,32,32,67,111,110,115,105,100,101,114,115,
- 32,97,32,87,105,110,100,111,119,115,32,100,114,105,118,101,
- 45,114,101,108,97,116,105,118,101,32,112,97,116,104,32,40,
- 110,111,32,100,114,105,118,101,44,32,98,117,116,32,115,116,
- 97,114,116,115,32,119,105,116,104,32,115,108,97,115,104,41,
- 32,116,111,10,32,32,32,32,115,116,105,108,108,32,98,101,
- 32,34,97,98,115,111,108,117,116,101,34,46,10,32,32,32,
- 32,114,39,0,0,0,233,3,0,0,0,41,3,114,10,0,
- 0,0,114,31,0,0,0,218,20,95,112,97,116,104,115,101,
- 112,115,95,119,105,116,104,95,99,111,108,111,110,114,48,0,
+ 90,13,100,23,100,24,132,0,90,14,100,101,100,26,100,27,
+ 132,1,90,15,101,16,101,15,106,17,131,1,90,18,100,28,
+ 160,19,100,29,100,30,161,2,100,31,23,0,90,20,101,21,
+ 160,22,101,20,100,30,161,2,90,23,100,32,90,24,100,33,
+ 90,25,100,34,103,1,90,26,100,35,103,1,90,27,101,27,
+ 4,0,90,28,90,29,100,102,100,36,100,37,156,1,100,38,
+ 100,39,132,3,90,30,100,40,100,41,132,0,90,31,100,42,
+ 100,43,132,0,90,32,100,44,100,45,132,0,90,33,100,46,
+ 100,47,132,0,90,34,100,48,100,49,132,0,90,35,100,50,
+ 100,51,132,0,90,36,100,52,100,53,132,0,90,37,100,54,
+ 100,55,132,0,90,38,100,56,100,57,132,0,90,39,100,103,
+ 100,58,100,59,132,1,90,40,100,104,100,61,100,62,132,1,
+ 90,41,100,105,100,64,100,65,132,1,90,42,100,66,100,67,
+ 132,0,90,43,101,44,131,0,90,45,100,106,100,36,101,45,
+ 100,68,156,2,100,69,100,70,132,3,90,46,71,0,100,71,
+ 100,72,132,0,100,72,131,2,90,47,71,0,100,73,100,74,
+ 132,0,100,74,131,2,90,48,71,0,100,75,100,76,132,0,
+ 100,76,101,48,131,3,90,49,71,0,100,77,100,78,132,0,
+ 100,78,131,2,90,50,71,0,100,79,100,80,132,0,100,80,
+ 101,50,101,49,131,4,90,51,71,0,100,81,100,82,132,0,
+ 100,82,101,50,101,48,131,4,90,52,103,0,90,53,71,0,
+ 100,83,100,84,132,0,100,84,101,50,101,48,131,4,90,54,
+ 71,0,100,85,100,86,132,0,100,86,131,2,90,55,71,0,
+ 100,87,100,88,132,0,100,88,131,2,90,56,71,0,100,89,
+ 100,90,132,0,100,90,131,2,90,57,71,0,100,91,100,92,
+ 132,0,100,92,131,2,90,58,100,107,100,93,100,94,132,1,
+ 90,59,100,95,100,96,132,0,90,60,100,97,100,98,132,0,
+ 90,61,100,99,100,100,132,0,90,62,100,36,83,0,41,108,
+ 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109,
+ 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104,
+ 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10,
+ 84,104,105,115,32,109,111,100,117,108,101,32,105,115,32,78,
+ 79,84,32,109,101,97,110,116,32,116,111,32,98,101,32,100,
+ 105,114,101,99,116,108,121,32,105,109,112,111,114,116,101,100,
+ 33,32,73,116,32,104,97,115,32,98,101,101,110,32,100,101,
+ 115,105,103,110,101,100,32,115,117,99,104,10,116,104,97,116,
+ 32,105,116,32,99,97,110,32,98,101,32,98,111,111,116,115,
+ 116,114,97,112,112,101,100,32,105,110,116,111,32,80,121,116,
+ 104,111,110,32,97,115,32,116,104,101,32,105,109,112,108,101,
+ 109,101,110,116,97,116,105,111,110,32,111,102,32,105,109,112,
+ 111,114,116,46,32,65,115,10,115,117,99,104,32,105,116,32,
+ 114,101,113,117,105,114,101,115,32,116,104,101,32,105,110,106,
+ 101,99,116,105,111,110,32,111,102,32,115,112,101,99,105,102,
+ 105,99,32,109,111,100,117,108,101,115,32,97,110,100,32,97,
+ 116,116,114,105,98,117,116,101,115,32,105,110,32,111,114,100,
+ 101,114,32,116,111,10,119,111,114,107,46,32,79,110,101,32,
+ 115,104,111,117,108,100,32,117,115,101,32,105,109,112,111,114,
+ 116,108,105,98,32,97,115,32,116,104,101,32,112,117,98,108,
+ 105,99,45,102,97,99,105,110,103,32,118,101,114,115,105,111,
+ 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101,
+ 46,10,10,41,1,218,3,119,105,110,41,2,90,6,99,121,
+ 103,119,105,110,90,6,100,97,114,119,105,110,99,0,0,0,
+ 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
+ 0,3,0,0,0,115,60,0,0,0,116,0,106,1,160,2,
+ 116,3,161,1,114,48,116,0,106,1,160,2,116,4,161,1,
+ 114,30,100,1,137,0,110,4,100,2,137,0,135,0,102,1,
+ 100,3,100,4,132,8,125,0,110,8,100,5,100,4,132,0,
+ 125,0,124,0,83,0,41,6,78,90,12,80,89,84,72,79,
+ 78,67,65,83,69,79,75,115,12,0,0,0,80,89,84,72,
+ 79,78,67,65,83,69,79,75,99,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0,
+ 0,115,10,0,0,0,136,0,116,0,106,1,107,6,83,0,
+ 41,1,250,53,84,114,117,101,32,105,102,32,102,105,108,101,
+ 110,97,109,101,115,32,109,117,115,116,32,98,101,32,99,104,
+ 101,99,107,101,100,32,99,97,115,101,45,105,110,115,101,110,
+ 115,105,116,105,118,101,108,121,46,41,2,218,3,95,111,115,
+ 90,7,101,110,118,105,114,111,110,169,0,169,1,218,3,107,
+ 101,121,114,3,0,0,0,250,38,60,102,114,111,122,101,110,
+ 32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,
+ 115,116,114,97,112,95,101,120,116,101,114,110,97,108,62,218,
+ 11,95,114,101,108,97,120,95,99,97,115,101,36,0,0,0,
+ 115,2,0,0,0,0,2,122,37,95,109,97,107,101,95,114,
+ 101,108,97,120,95,99,97,115,101,46,60,108,111,99,97,108,
+ 115,62,46,95,114,101,108,97,120,95,99,97,115,101,99,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
+ 0,0,0,83,0,0,0,115,4,0,0,0,100,1,83,0,
+ 41,2,114,1,0,0,0,70,114,3,0,0,0,114,3,0,
+ 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,114,7,0,0,0,40,0,0,0,115,2,0,0,0,0,
+ 2,41,5,218,3,115,121,115,218,8,112,108,97,116,102,111,
+ 114,109,218,10,115,116,97,114,116,115,119,105,116,104,218,27,
+ 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,218,35,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,83,84,82,95,75,69,89,
+ 41,1,114,7,0,0,0,114,3,0,0,0,114,4,0,0,
+ 0,114,6,0,0,0,218,16,95,109,97,107,101,95,114,101,
+ 108,97,120,95,99,97,115,101,29,0,0,0,115,14,0,0,
+ 0,0,1,12,1,12,1,6,2,4,2,14,4,8,3,114,
+ 13,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,20,0,
+ 0,0,116,0,124,0,131,1,100,1,64,0,160,1,100,2,
+ 100,3,161,2,83,0,41,4,122,42,67,111,110,118,101,114,
+ 116,32,97,32,51,50,45,98,105,116,32,105,110,116,101,103,
+ 101,114,32,116,111,32,108,105,116,116,108,101,45,101,110,100,
+ 105,97,110,46,236,3,0,0,0,255,127,255,127,3,0,233,
+ 4,0,0,0,218,6,108,105,116,116,108,101,41,2,218,3,
+ 105,110,116,218,8,116,111,95,98,121,116,101,115,41,1,218,
+ 1,120,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,218,12,95,112,97,99,107,95,117,105,110,116,51,50,46,
+ 0,0,0,115,2,0,0,0,0,2,114,20,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,116,0,124,
+ 0,131,1,100,1,107,2,115,16,116,1,130,1,116,2,160,
+ 3,124,0,100,2,161,2,83,0,41,3,122,47,67,111,110,
+ 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32,
+ 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111,
+ 32,97,110,32,105,110,116,101,103,101,114,46,114,15,0,0,
+ 0,114,16,0,0,0,169,4,218,3,108,101,110,218,14,65,
+ 115,115,101,114,116,105,111,110,69,114,114,111,114,114,17,0,
+ 0,0,218,10,102,114,111,109,95,98,121,116,101,115,169,1,
+ 218,4,100,97,116,97,114,3,0,0,0,114,3,0,0,0,
+ 114,6,0,0,0,218,14,95,117,110,112,97,99,107,95,117,
+ 105,110,116,51,50,51,0,0,0,115,4,0,0,0,0,2,
+ 16,1,114,27,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,116,0,124,0,131,1,100,1,107,2,115,
+ 16,116,1,130,1,116,2,160,3,124,0,100,2,161,2,83,
+ 0,41,3,122,47,67,111,110,118,101,114,116,32,50,32,98,
+ 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101,
+ 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101,
+ 103,101,114,46,233,2,0,0,0,114,16,0,0,0,114,21,
+ 0,0,0,114,25,0,0,0,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,218,14,95,117,110,112,97,99,107,
+ 95,117,105,110,116,49,54,56,0,0,0,115,4,0,0,0,
+ 0,2,16,1,114,29,0,0,0,99,0,0,0,0,0,0,
+ 0,0,0,0,0,0,1,0,0,0,4,0,0,0,71,0,
+ 0,0,115,20,0,0,0,116,0,160,1,100,1,100,2,132,
+ 0,124,0,68,0,131,1,161,1,83,0,41,3,122,31,82,
+ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,
+ 115,46,112,97,116,104,46,106,111,105,110,40,41,46,99,1,
+ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,5,
+ 0,0,0,83,0,0,0,115,26,0,0,0,103,0,124,0,
+ 93,18,125,1,124,1,114,4,124,1,160,0,116,1,161,1,
+ 145,2,113,4,83,0,114,3,0,0,0,41,2,218,6,114,
+ 115,116,114,105,112,218,15,112,97,116,104,95,115,101,112,97,
+ 114,97,116,111,114,115,41,2,218,2,46,48,218,4,112,97,
+ 114,116,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,218,10,60,108,105,115,116,99,111,109,112,62,64,0,0,
+ 0,115,6,0,0,0,6,1,2,0,4,255,122,30,95,112,
+ 97,116,104,95,106,111,105,110,46,60,108,111,99,97,108,115,
+ 62,46,60,108,105,115,116,99,111,109,112,62,41,2,218,8,
+ 112,97,116,104,95,115,101,112,218,4,106,111,105,110,41,1,
+ 218,10,112,97,116,104,95,112,97,114,116,115,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,218,10,95,112,97,
+ 116,104,95,106,111,105,110,62,0,0,0,115,6,0,0,0,
+ 0,2,10,1,2,255,114,38,0,0,0,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
+ 67,0,0,0,115,96,0,0,0,116,0,116,1,131,1,100,
+ 1,107,2,114,36,124,0,160,2,116,3,161,1,92,3,125,
+ 1,125,2,125,3,124,1,124,3,102,2,83,0,116,4,124,
+ 0,131,1,68,0,93,42,125,4,124,4,116,1,107,6,114,
+ 44,124,0,106,5,124,4,100,1,100,2,141,2,92,2,125,
+ 1,125,3,124,1,124,3,102,2,2,0,1,0,83,0,113,
+ 44,100,3,124,0,102,2,83,0,41,4,122,32,82,101,112,
+ 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,
+ 112,97,116,104,46,115,112,108,105,116,40,41,46,233,1,0,
+ 0,0,41,1,90,8,109,97,120,115,112,108,105,116,218,0,
+ 41,6,114,22,0,0,0,114,31,0,0,0,218,10,114,112,
+ 97,114,116,105,116,105,111,110,114,35,0,0,0,218,8,114,
+ 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,
+ 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,
+ 95,218,4,116,97,105,108,114,19,0,0,0,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,218,11,95,112,97,
+ 116,104,95,115,112,108,105,116,68,0,0,0,115,16,0,0,
+ 0,0,2,12,1,16,1,8,1,12,1,8,1,18,1,14,
+ 1,114,47,0,0,0,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,
+ 10,0,0,0,116,0,160,1,124,0,161,1,83,0,41,1,
+ 122,126,83,116,97,116,32,116,104,101,32,112,97,116,104,46,
+ 10,10,32,32,32,32,77,97,100,101,32,97,32,115,101,112,
+ 97,114,97,116,101,32,102,117,110,99,116,105,111,110,32,116,
+ 111,32,109,97,107,101,32,105,116,32,101,97,115,105,101,114,
+ 32,116,111,32,111,118,101,114,114,105,100,101,32,105,110,32,
+ 101,120,112,101,114,105,109,101,110,116,115,10,32,32,32,32,
+ 40,101,46,103,46,32,99,97,99,104,101,32,115,116,97,116,
+ 32,114,101,115,117,108,116,115,41,46,10,10,32,32,32,32,
+ 41,2,114,2,0,0,0,90,4,115,116,97,116,169,1,114,
+ 44,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,218,10,95,112,97,116,104,95,115,116,97,116,80,
+ 0,0,0,115,2,0,0,0,0,7,114,49,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,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,
+ 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,
+ 115,112,101,99,105,102,105,101,100,32,109,111,100,101,32,116,
+ 121,112,101,46,70,105,0,240,0,0,41,3,114,49,0,0,
+ 0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,
+ 111,100,101,41,3,114,44,0,0,0,218,4,109,111,100,101,
+ 90,9,115,116,97,116,95,105,110,102,111,114,3,0,0,0,
+ 114,3,0,0,0,114,6,0,0,0,218,18,95,112,97,116,
+ 104,95,105,115,95,109,111,100,101,95,116,121,112,101,90,0,
+ 0,0,115,10,0,0,0,0,2,2,1,12,1,14,1,8,
+ 1,114,53,0,0,0,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,
+ 10,0,0,0,116,0,124,0,100,1,131,2,83,0,41,2,
+ 122,31,82,101,112,108,97,99,101,109,101,110,116,32,102,111,
+ 114,32,111,115,46,112,97,116,104,46,105,115,102,105,108,101,
+ 46,105,0,128,0,0,41,1,114,53,0,0,0,114,48,0,
0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,11,95,112,97,116,104,95,105,115,97,98,115,111,0,
- 0,0,115,2,0,0,0,0,6,114,59,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,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,60,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,50,0,0,0,
- 90,6,117,110,108,105,110,107,41,6,114,44,0,0,0,114,
- 26,0,0,0,114,52,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,69,0,0,0,105,82,13,0,0,114,28,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,
+ 0,218,12,95,112,97,116,104,95,105,115,102,105,108,101,99,
+ 0,0,0,115,2,0,0,0,0,2,114,54,0,0,0,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,22,0,0,0,124,0,115,
+ 12,116,0,160,1,161,0,125,0,116,2,124,0,100,1,131,
+ 2,83,0,41,2,122,30,82,101,112,108,97,99,101,109,101,
+ 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,
+ 115,100,105,114,46,105,0,64,0,0,41,3,114,2,0,0,
+ 0,218,6,103,101,116,99,119,100,114,53,0,0,0,114,48,
+ 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
+ 0,0,218,11,95,112,97,116,104,95,105,115,100,105,114,104,
+ 0,0,0,115,6,0,0,0,0,2,4,1,8,1,114,56,
+ 0,0,0,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,26,0,0,
+ 0,124,0,160,0,116,1,161,1,112,24,124,0,100,1,100,
+ 2,133,2,25,0,116,2,107,6,83,0,41,3,122,142,82,
+ 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,
+ 115,46,112,97,116,104,46,105,115,97,98,115,46,10,10,32,
+ 32,32,32,67,111,110,115,105,100,101,114,115,32,97,32,87,
+ 105,110,100,111,119,115,32,100,114,105,118,101,45,114,101,108,
+ 97,116,105,118,101,32,112,97,116,104,32,40,110,111,32,100,
+ 114,105,118,101,44,32,98,117,116,32,115,116,97,114,116,115,
+ 32,119,105,116,104,32,115,108,97,115,104,41,32,116,111,10,
+ 32,32,32,32,115,116,105,108,108,32,98,101,32,34,97,98,
+ 115,111,108,117,116,101,34,46,10,32,32,32,32,114,39,0,
+ 0,0,233,3,0,0,0,41,3,114,10,0,0,0,114,31,
+ 0,0,0,218,20,95,112,97,116,104,115,101,112,115,95,119,
+ 105,116,104,95,99,111,108,111,110,114,48,0,0,0,114,3,
+ 0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,
+ 112,97,116,104,95,105,115,97,98,115,111,0,0,0,115,2,
+ 0,0,0,0,6,114,59,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,
+ 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,60,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,50,0,0,0,90,6,117,110,
+ 108,105,110,107,41,6,114,44,0,0,0,114,26,0,0,0,
+ 114,52,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,69,
+ 0,0,0,105,82,13,0,0,114,28,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,
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,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,40,0,0,0,114,39,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,28,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,47,0,0,0,114,41,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,36,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,62,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,59,0,0,0,114,38,0,0,0,114,55,0,
- 0,0,114,31,0,0,0,218,6,108,115,116,114,105,112,218,
- 8,95,80,89,67,65,67,72,69,41,12,114,44,0,0,0,
- 90,14,100,101,98,117,103,95,111,118,101,114,114,105,100,101,
- 114,70,0,0,0,218,7,109,101,115,115,97,103,101,218,4,
- 104,101,97,100,114,46,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,33,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,98,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,
+ 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,114,72,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,71,0,0,
- 0,62,2,0,0,0,114,28,0,0,0,114,57,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,
- 57,0,0,0,114,28,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,73,0,0,0,41,22,
- 114,8,0,0,0,114,80,0,0,0,114,81,0,0,0,114,
- 82,0,0,0,114,2,0,0,0,114,79,0,0,0,114,47,
- 0,0,0,114,90,0,0,0,114,30,0,0,0,114,31,0,
- 0,0,114,10,0,0,0,114,35,0,0,0,114,22,0,0,
- 0,114,92,0,0,0,114,87,0,0,0,218,5,99,111,117,
- 110,116,114,43,0,0,0,114,88,0,0,0,114,86,0,0,
- 0,218,9,112,97,114,116,105,116,105,111,110,114,38,0,0,
- 0,218,15,83,79,85,82,67,69,95,83,85,70,70,73,88,
- 69,83,41,10,114,44,0,0,0,114,94,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,70,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,104,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,103,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,73,0,0,0,
- 78,114,71,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,41,0,0,0,
- 218,5,108,111,119,101,114,114,103,0,0,0,114,82,0,0,
- 0,114,87,0,0,0,114,54,0,0,0,41,5,218,13,98,
- 121,116,101,99,111,100,101,95,112,97,116,104,114,96,0,0,
- 0,114,45,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,144,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,109,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,102,
- 0,0,0,114,98,0,0,0,114,82,0,0,0,114,89,0,
- 0,0,41,1,114,97,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,163,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,113,
- 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,60,0,0,
- 0,233,128,0,0,0,41,3,114,49,0,0,0,114,51,0,
- 0,0,114,50,0,0,0,41,2,114,44,0,0,0,114,52,
- 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,175,1,
- 0,0,115,12,0,0,0,0,2,2,1,14,1,14,1,10,
- 3,8,1,114,115,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,117,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,117,0,0,0,218,4,97,114,103,115,90,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,195,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,67,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,206,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,187,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,73,0,0,0,41,6,218,11,102,105,110,100,95,108,111,
- 97,100,101,114,114,22,0,0,0,114,75,0,0,0,114,76,
- 0,0,0,114,62,0,0,0,218,13,73,109,112,111,114,116,
- 87,97,114,110,105,110,103,41,5,114,119,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,215,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,
+ 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,40,0,0,0,114,39,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,28,
+ 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,47,0,0,0,114,41,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,36,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,62,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,
+ 59,0,0,0,114,38,0,0,0,114,55,0,0,0,114,31,
+ 0,0,0,218,6,108,115,116,114,105,112,218,8,95,80,89,
+ 67,65,67,72,69,41,12,114,44,0,0,0,90,14,100,101,
+ 98,117,103,95,111,118,101,114,114,105,100,101,114,70,0,0,
+ 0,218,7,109,101,115,115,97,103,101,218,4,104,101,97,100,
+ 114,46,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,33,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,98,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,72,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,71,0,0,0,62,2,0,
+ 0,0,114,28,0,0,0,114,57,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,57,0,0,0,
+ 114,28,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,73,0,0,0,41,22,114,8,0,0,
+ 0,114,80,0,0,0,114,81,0,0,0,114,82,0,0,0,
+ 114,2,0,0,0,114,79,0,0,0,114,47,0,0,0,114,
+ 90,0,0,0,114,30,0,0,0,114,31,0,0,0,114,10,
+ 0,0,0,114,35,0,0,0,114,22,0,0,0,114,92,0,
+ 0,0,114,87,0,0,0,218,5,99,111,117,110,116,114,43,
+ 0,0,0,114,88,0,0,0,114,86,0,0,0,218,9,112,
+ 97,114,116,105,116,105,111,110,114,38,0,0,0,218,15,83,
+ 79,85,82,67,69,95,83,85,70,70,73,88,69,83,41,10,
+ 114,44,0,0,0,114,94,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,70,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,104,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,103,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,73,0,0,0,78,114,71,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,41,0,0,0,218,5,108,111,
+ 119,101,114,114,103,0,0,0,114,82,0,0,0,114,87,0,
+ 0,0,114,54,0,0,0,41,5,218,13,98,121,116,101,99,
+ 111,100,101,95,112,97,116,104,114,96,0,0,0,114,45,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,144,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,109,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,102,0,0,0,114,
+ 98,0,0,0,114,82,0,0,0,114,89,0,0,0,41,1,
+ 114,97,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,163,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,113,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,60,0,0,0,233,128,0,
+ 0,0,41,3,114,49,0,0,0,114,51,0,0,0,114,50,
+ 0,0,0,41,2,114,44,0,0,0,114,52,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,175,1,0,0,115,12,
+ 0,0,0,0,2,2,1,14,1,14,1,10,3,8,1,114,
+ 115,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,117,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,117,
+ 0,0,0,218,4,97,114,103,115,90,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,195,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,67,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,206,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,187,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,73,0,0,
+ 0,41,6,218,11,102,105,110,100,95,108,111,97,100,101,114,
+ 114,22,0,0,0,114,75,0,0,0,114,76,0,0,0,114,
+ 62,0,0,0,218,13,73,109,112,111,114,116,87,97,114,110,
+ 105,110,103,41,5,114,119,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,215,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,118,0,0,0,114,22,0,0,0,
+ 218,8,69,79,70,69,114,114,111,114,114,27,0,0,0,41,
+ 6,114,26,0,0,0,114,117,0,0,0,218,11,101,120,99,
+ 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,114,
+ 93,0,0,0,114,83,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,232,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,27,0,0,0,114,134,0,0,0,114,149,0,0,0,
+ 114,118,0,0,0,41,6,114,26,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,117,0,0,0,114,151,0,0,
+ 0,114,93,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,9,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,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,118,0,0,0,114,
- 22,0,0,0,218,8,69,79,70,69,114,114,111,114,114,27,
- 0,0,0,41,6,114,26,0,0,0,114,117,0,0,0,218,
- 11,101,120,99,95,100,101,116,97,105,108,115,90,5,109,97,
- 103,105,99,114,93,0,0,0,114,83,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,232,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,27,0,0,0,114,134,0,0,0,114,
- 149,0,0,0,114,118,0,0,0,41,6,114,26,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,117,0,0,0,
- 114,151,0,0,0,114,93,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,9,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,118,0,0,0,
- 41,4,114,26,0,0,0,218,11,115,111,117,114,99,101,95,
- 104,97,115,104,114,117,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,37,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,82,0,0,0,116,0,160,1,124,0,161,
- 1,125,4,116,2,124,4,116,3,131,2,114,58,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,110,20,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,117,0,0,0,114,44,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,118,0,0,0,
- 114,62,0,0,0,41,5,114,26,0,0,0,114,117,0,0,
- 0,114,107,0,0,0,114,108,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,61,2,0,0,115,20,0,0,0,0,2,10,1,
- 10,1,12,1,8,1,12,1,6,2,10,1,2,0,2,255,
- 114,165,0,0,0,114,73,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,73,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,26,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,74,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,
+ 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,118,0,0,0,41,4,114,26,
+ 0,0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,
+ 114,117,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,37,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,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,116,5,130,1,124,3,160,2,124,1,161,1,1,
- 0,124,3,160,2,116,6,160,7,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,
- 39,0,0,0,114,146,0,0,0,41,8,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,23,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,26,0,0,0,114,83,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,84,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,73,0,0,0,78,84,
- 41,7,218,8,116,111,107,101,110,105,122,101,114,64,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,95,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,73,0,0,0,
- 41,17,114,128,0,0,0,114,179,0,0,0,114,118,0,0,
- 0,114,2,0,0,0,114,79,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,111,0,0,0,114,112,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,47,0,0,
- 0,218,6,97,112,112,101,110,100,41,9,114,117,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,112,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,86,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,9,100,9,102,2,100,10,100,11,132,1,
- 131,1,90,10,101,7,100,9,102,1,100,12,100,13,132,1,
- 131,1,90,11,100,9,83,0,41,14,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,110,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,50,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,192,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,118,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,26,4,0,116,9,107,10,114,112,1,0,1,
- 0,1,0,89,0,100,0,83,0,89,0,110,2,88,0,124,
+ 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,
+ 117,0,0,0,114,44,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,118,0,0,0,114,62,0,0,0,41,
+ 5,114,26,0,0,0,114,117,0,0,0,114,107,0,0,0,
+ 114,108,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,61,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,
+ 73,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,73,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,26,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,74,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,116,5,130,
+ 1,124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,
+ 6,160,7,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,39,0,0,0,114,146,
+ 0,0,0,41,8,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,23,
+ 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,26,0,0,0,114,83,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,84,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,73,0,0,0,78,84,41,7,218,8,116,111,
+ 107,101,110,105,122,101,114,64,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,95,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,73,0,0,0,41,17,114,128,0,0,
+ 0,114,179,0,0,0,114,118,0,0,0,114,2,0,0,0,
+ 114,79,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,111,0,0,0,114,112,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,47,0,0,0,218,6,97,112,112,
+ 101,110,100,41,9,114,117,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,112,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,110,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,50,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,192,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,28,0,
0,0,41,2,114,139,0,0,0,90,11,115,121,115,95,118,
101,114,115,105,111,110,114,40,0,0,0,41,10,218,11,68,
@@ -1013,7 +1011,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,199,
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,12,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,
@@ -1057,1781 +1055,1783 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,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,180,
- 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,
- 16,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,39,0,0,
- 0,114,71,0,0,0,114,73,0,0,0,114,28,0,0,0,
- 218,8,95,95,105,110,105,116,95,95,41,4,114,47,0,0,
- 0,114,179,0,0,0,114,43,0,0,0,114,41,0,0,0,
- 41,5,114,119,0,0,0,114,139,0,0,0,114,97,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,249,
- 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,119,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,1,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,118,0,0,0,114,62,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,119,
- 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,4,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,119,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,12,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,
- 244,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,50,0,0,0,169,2,114,119,0,0,0,114,44,
- 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,19,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,27,
- 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,119,0,0,0,114,108,0,0,0,90,10,99,
- 97,99,104,101,95,112,97,116,104,114,26,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,41,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,119,0,0,0,
- 114,44,0,0,0,114,26,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,114,225,0,0,0,51,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,116,0,0,0,78,41,5,114,179,0,0,0,218,8,
- 103,101,116,95,100,97,116,97,114,50,0,0,0,114,118,0,
- 0,0,114,176,0,0,0,41,5,114,119,0,0,0,114,139,
- 0,0,0,114,44,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,58,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,105,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,84,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,119,0,0,0,114,26,0,0,0,114,44,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,68,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,34,124,7,
- 115,254,116,9,106,10,100,11,107,2,144,1,114,34,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,39,0,0,0,114,73,0,0,0,
- 114,28,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,117,0,0,0,
- 114,107,0,0,0,114,108,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,98,0,0,0,114,82,0,0,0,
- 114,224,0,0,0,114,50,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,118,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,119,0,0,0,114,139,0,0,0,114,108,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,107,0,0,0,218,2,
- 115,116,114,26,0,0,0,114,151,0,0,0,114,83,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,76,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,17,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,
+ 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,180,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,4,0,0,0,0,0,0,0,115,124,0,0,0,101,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,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,119,0,0,0,114,139,0,0,0,
- 114,44,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,209,0,0,0,166,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,110,0,0,0,169,2,218,9,95,95,99,108,97,115,
- 115,95,95,114,131,0,0,0,169,2,114,119,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,172,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,110,0,0,0,169,3,218,4,104,97,115,104,114,117,
- 0,0,0,114,44,0,0,0,169,1,114,119,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,176,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,179,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,
+ 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,39,0,0,0,114,71,0,0,0,114,73,0,
+ 0,0,114,28,0,0,0,218,8,95,95,105,110,105,116,95,
+ 95,41,4,114,47,0,0,0,114,179,0,0,0,114,43,0,
+ 0,0,114,41,0,0,0,41,5,114,119,0,0,0,114,139,
+ 0,0,0,114,97,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,249,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,119,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,1,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,118,
+ 0,0,0,114,62,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,119,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,4,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,119,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,12,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,244,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,50,0,0,0,169,2,
+ 114,119,0,0,0,114,44,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,19,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,27,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,119,0,0,0,114,
+ 108,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104,
+ 114,26,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,41,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,119,0,0,0,114,44,0,0,0,114,26,0,0,
+ 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
+ 114,225,0,0,0,51,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,116,0,0,0,78,41,5,
+ 114,179,0,0,0,218,8,103,101,116,95,100,97,116,97,114,
+ 50,0,0,0,114,118,0,0,0,114,176,0,0,0,41,5,
+ 114,119,0,0,0,114,139,0,0,0,114,44,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,58,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,105,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,84,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,119,0,0,0,114,26,0,
+ 0,0,114,44,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,68,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,39,0,
+ 0,0,114,73,0,0,0,114,28,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,117,0,0,0,114,107,0,0,0,114,108,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,98,0,
+ 0,0,114,82,0,0,0,114,224,0,0,0,114,50,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,118,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,119,0,0,0,114,139,0,
+ 0,0,114,108,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,107,0,0,0,218,2,115,116,114,26,0,0,0,114,151,
+ 0,0,0,114,83,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,76,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,17,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,119,0,
+ 0,0,114,139,0,0,0,114,44,0,0,0,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,114,209,0,0,0,
+ 166,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,110,0,0,0,169,2,218,
+ 9,95,95,99,108,97,115,115,95,95,114,131,0,0,0,169,
+ 2,114,119,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,172,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,110,0,0,0,169,3,218,
+ 4,104,97,115,104,114,117,0,0,0,114,44,0,0,0,169,
+ 1,114,119,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,176,
+ 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,
- 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,48,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,191,
- 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,64,0,0,0,90,9,111,112,
- 101,110,95,99,111,100,101,114,85,0,0,0,90,4,114,101,
- 97,100,114,65,0,0,0,41,3,114,119,0,0,0,114,44,
- 0,0,0,114,68,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,114,227,0,0,0,196,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,110,0,0,0,41,1,114,182,0,0,0,
- 169,2,114,119,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,
- 207,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,73,0,0,0,114,251,0,0,0,41,5,114,38,0,0,
- 0,114,47,0,0,0,114,44,0,0,0,114,64,0,0,0,
- 114,65,0,0,0,169,3,114,119,0,0,0,90,8,114,101,
- 115,111,117,114,99,101,114,44,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,213,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,73,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,38,
- 0,0,0,114,47,0,0,0,114,44,0,0,0,114,255,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,179,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,48,0,0,0,114,219,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,
- 217,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,73,0,0,0,41,5,114,35,0,0,
- 0,114,38,0,0,0,114,47,0,0,0,114,44,0,0,0,
- 114,54,0,0,0,169,3,114,119,0,0,0,114,117,0,0,
- 0,114,44,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,2,1,0,0,223,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,47,0,0,0,114,44,0,0,0,114,246,
+ 0,114,179,0,0,0,191,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,64,
+ 0,0,0,90,9,111,112,101,110,95,99,111,100,101,114,85,
+ 0,0,0,90,4,114,101,97,100,114,65,0,0,0,41,3,
+ 114,119,0,0,0,114,44,0,0,0,114,68,0,0,0,114,
+ 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,227,
+ 0,0,0,196,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,110,0,0,0,
+ 41,1,114,182,0,0,0,169,2,114,119,0,0,0,114,216,
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,229,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,161,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,49,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,119,0,0,0,114,44,0,0,0,114,238,0,
+ 0,0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,
+ 95,114,101,97,100,101,114,207,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,73,0,0,0,114,251,0,0,
+ 0,41,5,114,38,0,0,0,114,47,0,0,0,114,44,0,
+ 0,0,114,64,0,0,0,114,65,0,0,0,169,3,114,119,
+ 0,0,0,90,8,114,101,115,111,117,114,99,101,114,44,0,
0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,224,0,0,0,237,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,115,0,0,0,114,225,0,0,0,41,5,
- 114,119,0,0,0,114,108,0,0,0,114,107,0,0,0,114,
- 26,0,0,0,114,52,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,226,0,0,0,242,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,60,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,
- 0,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,112,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,110,82,4,0,
- 116,7,107,10,114,112,1,0,1,0,1,0,89,0,113,60,
- 89,0,110,60,4,0,116,8,107,10,114,170,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,162,10,1,0,100,2,83,0,87,0,
- 53,0,100,2,125,8,126,8,88,0,89,0,110,2,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,250,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,47,0,0,0,114,56,0,0,0,114,186,0,0,0,
- 114,42,0,0,0,114,38,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,50,0,0,0,114,134,0,0,
- 0,114,149,0,0,0,114,69,0,0,0,41,9,114,119,0,
- 0,0,114,44,0,0,0,114,26,0,0,0,114,12,1,0,
- 0,218,6,112,97,114,101,110,116,114,97,0,0,0,114,37,
- 0,0,0,114,33,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,247,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,32,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,233,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,117,0,0,0,114,107,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,119,0,0,0,114,139,0,0,
- 0,114,44,0,0,0,114,26,0,0,0,114,151,0,0,0,
+ 0,218,13,111,112,101,110,95,114,101,115,111,117,114,99,101,
+ 213,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,73,
+ 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,38,0,0,0,114,47,0,0,0,114,
+ 44,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,217,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,73,0,0,
+ 0,41,5,114,35,0,0,0,114,38,0,0,0,114,47,0,
+ 0,0,114,44,0,0,0,114,54,0,0,0,169,3,114,119,
+ 0,0,0,114,117,0,0,0,114,44,0,0,0,114,3,0,
+ 0,0,114,3,0,0,0,114,6,0,0,0,114,2,1,0,
+ 0,223,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,47,0,0,0,
+ 114,44,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,229,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,161,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,49,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,119,0,0,0,114,
+ 44,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,237,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,115,0,0,0,
+ 114,225,0,0,0,41,5,114,119,0,0,0,114,108,0,0,
+ 0,114,107,0,0,0,114,26,0,0,0,114,52,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 213,0,0,0,26,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,42,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,
+ 226,0,0,0,242,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,60,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,47,0,0,0,114,56,0,0,0,114,186,
+ 0,0,0,114,42,0,0,0,114,38,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,50,0,0,0,114,
+ 134,0,0,0,114,149,0,0,0,114,69,0,0,0,41,9,
+ 114,119,0,0,0,114,44,0,0,0,114,26,0,0,0,114,
+ 12,1,0,0,218,6,112,97,114,101,110,116,114,97,0,0,
+ 0,114,37,0,0,0,114,33,0,0,0,114,228,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 15,1,0,0,22,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,110,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,59,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,110,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,63,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,110,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,67,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,117,0,0,0,114,44,0,0,0,41,3,114,119,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,70,
- 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,117,0,0,0,114,44,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,78,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,39,
- 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,32,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,87,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,47,0,0,0,
- 114,44,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,84,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,90,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,
+ 225,0,0,0,247,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,233,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,117,0,0,0,114,107,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,119,0,0,0,114,
+ 139,0,0,0,114,44,0,0,0,114,26,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,26,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,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,
+ 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,42,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,22,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,110,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,59,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,110,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,
+ 63,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,110,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,
+ 67,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,117,0,0,0,114,44,0,0,0,41,3,114,
+ 119,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,70,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,117,0,0,0,114,44,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,78,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,39,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,32,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,87,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,47,
+ 0,0,0,114,44,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,84,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,229,0,0,0,94,
- 4,0,0,115,2,0,0,0,0,2,122,30,69,120,116,101,
+ 114,3,0,0,0,114,6,0,0,0,114,213,0,0,0,90,
+ 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,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,48,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,98,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,
- 51,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,110,0,0,0,41,6,
- 218,5,95,110,97,109,101,218,5,95,112,97,116,104,114,112,
- 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,119,0,0,0,114,117,0,
- 0,0,114,44,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,111,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,71,0,0,0,114,40,0,
- 0,0,41,2,114,8,0,0,0,114,44,0,0,0,90,8,
- 95,95,112,97,116,104,95,95,41,2,114,23,1,0,0,114,
- 41,0,0,0,41,4,114,119,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,117,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,110,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,119,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,127,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,110,
- 0,0,0,41,8,114,112,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,
- 119,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,131,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,110,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,144,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,110,0,0,0,169,1,114,32,1,0,0,41,2,114,119,
- 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,147,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,110,0,0,0,41,1,
- 114,24,1,0,0,41,3,114,119,0,0,0,114,35,1,0,
- 0,114,44,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,150,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,110,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,153,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,62,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,156,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,
- 110,0,0,0,114,34,1,0,0,169,2,114,119,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,159,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,110,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,162,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,104,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,110,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,168,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,62,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,171,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,
+ 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,94,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,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,180,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,40,
- 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,183,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,40,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,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
+ 0,114,250,0,0,0,114,48,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,98,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,51,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,110,0,0,
+ 0,41,6,218,5,95,110,97,109,101,218,5,95,112,97,116,
+ 104,114,112,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,119,0,0,0,
+ 114,117,0,0,0,114,44,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,111,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,71,0,0,0,
+ 114,40,0,0,0,41,2,114,8,0,0,0,114,44,0,0,
+ 0,90,8,95,95,112,97,116,104,95,95,41,2,114,23,1,
+ 0,0,114,41,0,0,0,41,4,114,119,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,117,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,110,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,119,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,127,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,110,0,0,0,41,8,114,112,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,119,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,131,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,110,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,144,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,110,0,0,0,169,1,114,32,1,0,0,41,
+ 2,114,119,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,147,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,110,0,0,
+ 0,41,1,114,24,1,0,0,41,3,114,119,0,0,0,114,
+ 35,1,0,0,114,44,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,150,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,110,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,153,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,62,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,156,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,110,0,0,0,114,34,1,0,0,169,2,114,119,
+ 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,159,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,110,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,213,0,0,0,186,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,189,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,114,186,0,0,0,162,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,104,
+ 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,110,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,168,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,62,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,171,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,180,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,0,83,0,114,110,
- 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,192,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,195,
- 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,167,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,
- 172,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,28,100,11,100,12,132,1,131,1,90,9,101,4,
- 100,29,100,13,100,14,132,1,131,1,90,10,101,4,100,30,
- 100,15,100,16,132,1,131,1,90,11,100,17,90,12,101,4,
- 100,31,100,18,100,19,132,1,131,1,90,13,101,4,100,20,
- 100,21,132,0,131,1,90,14,101,15,100,22,100,23,132,0,
- 131,1,90,16,101,4,100,24,100,25,132,0,131,1,90,17,
- 101,4,100,26,100,27,132,0,131,1,90,18,100,10,83,0,
- 41,32,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,117,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,213,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,75,
- 0,0,0,114,76,0,0,0,114,138,0,0,0,114,118,0,
- 0,0,41,3,114,193,0,0,0,114,44,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,
- 223,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,40,0,
- 0,0,78,41,7,114,2,0,0,0,114,55,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,44,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,236,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,
+ 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2,
+ 78,114,40,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,183,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,40,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,186,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,189,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,110,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,192,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,195,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,167,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,172,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,28,100,11,100,12,132,1,131,1,90,
+ 9,101,4,100,29,100,13,100,14,132,1,131,1,90,10,101,
+ 4,100,30,100,15,100,16,132,1,131,1,90,11,100,17,90,
+ 12,101,4,100,31,100,18,100,19,132,1,131,1,90,13,101,
+ 4,100,20,100,21,132,0,131,1,90,14,101,15,100,22,100,
+ 23,132,0,131,1,90,16,101,4,100,24,100,25,132,0,131,
+ 1,90,17,101,4,100,26,100,27,132,0,131,1,90,18,100,
+ 10,83,0,41,32,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,117,
+ 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,213,
+ 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,75,0,0,0,114,76,0,0,0,114,138,0,0,0,
+ 114,118,0,0,0,41,3,114,193,0,0,0,114,44,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,223,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,40,0,0,0,78,41,7,114,2,0,0,0,114,55,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,44,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,236,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,2,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,85,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,118,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,44,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,
- 16,95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,
- 99,2,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,85,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,118,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,44,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,17,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,44,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,44,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,49,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,
+ 9,95,103,101,116,95,115,112,101,99,17,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,44,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,44,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,49,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,
+ 73,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,122,45,40,63,58,123,112,
+ 97,116,116,101,114,110,125,40,45,46,42,41,63,92,46,40,
+ 100,105,115,116,124,101,103,103,41,45,105,110,102,111,124,69,
+ 71,71,45,73,78,70,79,41,99,3,0,0,0,0,0,0,
+ 0,0,0,0,0,7,0,0,0,4,0,0,0,67,0,0,
+ 0,115,78,0,0,0,100,1,100,2,108,0,125,3,100,1,
+ 100,3,108,1,109,2,125,4,1,0,124,2,100,2,107,8,
+ 114,34,116,3,106,4,125,2,124,1,100,2,107,8,114,46,
+ 100,4,110,8,124,3,160,5,124,1,161,1,125,5,124,0,
+ 160,6,124,5,124,2,161,2,125,6,116,7,124,4,124,6,
+ 131,2,83,0,41,5,97,37,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,
+ 116,104,101,32,96,96,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,110,111,116,32,115,117,112,112,108,105,
+ 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,112,97,116,104,96,96,32,
+ 40,100,101,102,97,117,108,116,115,32,116,111,32,115,121,115,
+ 46,112,97,116,104,41,46,10,32,32,32,32,32,32,32,32,
+ 114,73,0,0,0,78,41,1,218,16,80,97,116,104,68,105,
+ 115,116,114,105,98,117,116,105,111,110,122,2,46,42,41,8,
+ 218,2,114,101,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,114,8,0,
+ 0,0,114,44,0,0,0,90,6,101,115,99,97,112,101,218,
+ 13,95,115,101,97,114,99,104,95,112,97,116,104,115,218,3,
+ 109,97,112,41,7,114,193,0,0,0,114,117,0,0,0,114,
+ 44,0,0,0,114,60,1,0,0,114,59,1,0,0,218,7,
+ 112,97,116,116,101,114,110,90,5,102,111,117,110,100,114,3,
+ 0,0,0,114,3,0,0,0,114,6,0,0,0,218,18,102,
+ 105,110,100,95,100,105,115,116,114,105,98,117,116,105,111,110,
+ 115,88,5,0,0,115,14,0,0,0,0,10,8,1,12,1,
+ 8,1,6,1,22,1,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,99,3,0,0,0,0,0,0,0,
+ 0,0,0,0,4,0,0,0,6,0,0,0,3,0,0,0,
+ 115,44,0,0,0,100,1,100,2,108,0,125,3,124,3,106,
+ 1,160,2,135,0,135,1,102,2,100,3,100,4,132,8,116,
+ 3,136,0,106,4,124,2,131,2,68,0,131,1,161,1,83,
+ 0,41,5,122,49,70,105,110,100,32,109,101,116,97,100,97,
+ 116,97,32,100,105,114,101,99,116,111,114,105,101,115,32,105,
+ 110,32,112,97,116,104,115,32,104,101,117,114,105,115,116,105,
+ 99,97,108,108,121,46,114,73,0,0,0,78,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,5,0,0,
+ 0,51,0,0,0,115,26,0,0,0,124,0,93,18,125,1,
+ 136,0,160,0,124,1,136,1,161,2,86,0,1,0,113,2,
+ 100,0,83,0,114,110,0,0,0,41,1,218,12,95,115,101,
+ 97,114,99,104,95,112,97,116,104,41,2,114,32,0,0,0,
+ 114,44,0,0,0,169,2,114,193,0,0,0,114,63,1,0,
+ 0,114,3,0,0,0,114,6,0,0,0,114,19,1,0,0,
+ 110,5,0,0,115,4,0,0,0,4,2,2,255,122,43,80,
+ 97,116,104,70,105,110,100,101,114,46,95,115,101,97,114,99,
+ 104,95,112,97,116,104,115,46,60,108,111,99,97,108,115,62,
+ 46,60,103,101,110,101,120,112,114,62,41,5,218,9,105,116,
+ 101,114,116,111,111,108,115,90,5,99,104,97,105,110,90,13,
+ 102,114,111,109,95,105,116,101,114,97,98,108,101,114,62,1,
+ 0,0,218,12,95,115,119,105,116,99,104,95,112,97,116,104,
+ 41,4,114,193,0,0,0,114,63,1,0,0,90,5,112,97,
+ 116,104,115,114,67,1,0,0,114,3,0,0,0,114,66,1,
+ 0,0,114,6,0,0,0,114,61,1,0,0,106,5,0,0,
+ 115,8,0,0,0,0,3,8,1,18,2,10,254,122,24,80,
+ 97,116,104,70,105,110,100,101,114,46,95,115,101,97,114,99,
+ 104,95,112,97,116,104,115,99,1,0,0,0,0,0,0,0,
+ 0,0,0,0,4,0,0,0,10,0,0,0,67,0,0,0,
+ 115,78,0,0,0,100,1,100,2,108,0,109,1,125,1,1,
+ 0,100,1,100,0,108,2,125,2,100,1,100,3,108,3,109,
+ 4,125,3,1,0,124,1,116,5,131,1,143,24,1,0,124,
+ 2,160,4,124,0,161,1,87,0,2,0,53,0,81,0,82,
+ 0,163,0,83,0,81,0,82,0,88,0,124,3,124,0,131,
+ 1,83,0,41,4,78,114,73,0,0,0,41,1,218,8,115,
+ 117,112,112,114,101,115,115,41,1,218,4,80,97,116,104,41,
+ 6,90,10,99,111,110,116,101,120,116,108,105,98,114,69,1,
+ 0,0,218,7,122,105,112,102,105,108,101,90,7,112,97,116,
+ 104,108,105,98,114,70,1,0,0,218,9,69,120,99,101,112,
+ 116,105,111,110,41,4,114,44,0,0,0,114,69,1,0,0,
+ 114,71,1,0,0,114,70,1,0,0,114,3,0,0,0,114,
+ 3,0,0,0,114,6,0,0,0,114,68,1,0,0,115,5,
+ 0,0,115,12,0,0,0,0,2,12,1,8,1,12,1,10,
+ 1,28,1,122,23,80,97,116,104,70,105,110,100,101,114,46,
+ 95,115,119,105,116,99,104,95,112,97,116,104,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,32,0,0,0,100,1,100,0,108,0,
+ 125,4,124,4,106,1,124,1,116,2,124,3,106,3,131,1,
+ 124,4,106,4,100,2,141,3,83,0,41,3,78,114,73,0,
+ 0,0,41,1,114,83,0,0,0,41,5,114,60,1,0,0,
+ 90,5,109,97,116,99,104,114,85,0,0,0,114,117,0,0,
+ 0,90,10,73,71,78,79,82,69,67,65,83,69,41,5,114,
+ 193,0,0,0,114,63,1,0,0,218,4,114,111,111,116,114,
+ 41,1,0,0,114,60,1,0,0,114,3,0,0,0,114,3,
+ 0,0,0,114,6,0,0,0,218,10,95,112,114,101,100,105,
+ 99,97,116,101,124,5,0,0,115,4,0,0,0,0,2,8,
+ 1,122,21,80,97,116,104,70,105,110,100,101,114,46,95,112,
+ 114,101,100,105,99,97,116,101,99,3,0,0,0,0,0,0,
+ 0,0,0,0,0,4,0,0,0,4,0,0,0,3,0,0,
+ 0,115,64,0,0,0,136,2,160,0,161,0,115,12,100,1,
+ 83,0,124,2,160,1,100,2,100,3,161,2,125,3,136,0,
+ 106,2,106,3,124,3,100,4,141,1,137,1,135,0,135,1,
+ 135,2,102,3,100,5,100,6,132,8,136,2,160,4,161,0,
+ 68,0,131,1,83,0,41,7,78,114,3,0,0,0,250,1,
+ 45,114,45,0,0,0,41,1,114,63,1,0,0,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,0,
+ 0,0,51,0,0,0,115,32,0,0,0,124,0,93,24,125,
+ 1,136,0,160,0,136,1,136,2,124,1,161,3,114,2,124,
+ 1,86,0,1,0,113,2,100,0,83,0,114,110,0,0,0,
+ 41,1,114,74,1,0,0,41,2,114,32,0,0,0,114,41,
+ 1,0,0,169,3,114,193,0,0,0,90,7,109,97,116,99,
+ 104,101,114,114,73,1,0,0,114,3,0,0,0,114,6,0,
+ 0,0,114,19,1,0,0,135,5,0,0,115,6,0,0,0,
+ 4,0,2,1,14,255,122,42,80,97,116,104,70,105,110,100,
+ 101,114,46,95,115,101,97,114,99,104,95,112,97,116,104,46,
+ 60,108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,
+ 114,62,41,5,90,6,105,115,95,100,105,114,114,67,0,0,
+ 0,218,15,115,101,97,114,99,104,95,116,101,109,112,108,97,
+ 116,101,114,62,0,0,0,90,7,105,116,101,114,100,105,114,
+ 41,4,114,193,0,0,0,114,73,1,0,0,114,63,1,0,
+ 0,90,10,110,111,114,109,97,108,105,122,101,100,114,3,0,
+ 0,0,114,76,1,0,0,114,6,0,0,0,114,65,1,0,
+ 0,129,5,0,0,115,10,0,0,0,0,2,8,1,4,1,
+ 12,1,14,1,122,23,80,97,116,104,70,105,110,100,101,114,
+ 46,95,115,101,97,114,99,104,95,112,97,116,104,41,1,78,
+ 41,2,78,78,41,1,78,41,2,78,78,41,19,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,77,1,0,0,114,64,
+ 1,0,0,114,61,1,0,0,218,12,115,116,97,116,105,99,
+ 109,101,116,104,111,100,114,68,1,0,0,114,74,1,0,0,
+ 114,65,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,209,4,
+ 0,0,115,52,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,4,2,2,1,12,17,2,1,10,
+ 8,2,1,10,8,2,1,10,4,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,110,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,154,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,71,0,0,0,114,105,0,0,0,78,41,7,114,
+ 167,0,0,0,218,8,95,108,111,97,100,101,114,115,114,44,
+ 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,119,0,0,0,114,44,
+ 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,80,1,0,0,114,6,0,0,0,
+ 114,209,0,0,0,148,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,105,
+ 0,0,0,78,41,1,114,82,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,162,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,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,73,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,122,45,40,63,58,123,112,97,116,116,
- 101,114,110,125,40,45,46,42,41,63,92,46,40,100,105,115,
- 116,124,101,103,103,41,45,105,110,102,111,124,69,71,71,45,
- 73,78,70,79,41,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,7,0,0,0,4,0,0,0,67,0,0,0,115,78,
- 0,0,0,100,1,100,2,108,0,125,3,100,1,100,3,108,
- 1,109,2,125,4,1,0,124,2,100,2,107,8,114,34,116,
- 3,106,4,125,2,124,1,100,2,107,8,114,46,100,4,110,
- 8,124,3,160,5,124,1,161,1,125,5,124,0,160,6,124,
- 5,124,2,161,2,125,6,116,7,124,4,124,6,131,2,83,
- 0,41,5,97,37,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,116,104,101,
- 32,96,96,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,110,111,116,32,115,117,112,112,108,105,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,112,97,116,104,96,96,32,40,100,101,
- 102,97,117,108,116,115,32,116,111,32,115,121,115,46,112,97,
- 116,104,41,46,10,32,32,32,32,32,32,32,32,114,73,0,
- 0,0,78,41,1,218,16,80,97,116,104,68,105,115,116,114,
- 105,98,117,116,105,111,110,122,2,46,42,41,8,218,2,114,
- 101,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,114,8,0,0,0,114,
- 44,0,0,0,90,6,101,115,99,97,112,101,218,13,95,115,
- 101,97,114,99,104,95,112,97,116,104,115,218,3,109,97,112,
- 41,7,114,193,0,0,0,114,117,0,0,0,114,44,0,0,
- 0,114,60,1,0,0,114,59,1,0,0,218,7,112,97,116,
- 116,101,114,110,90,5,102,111,117,110,100,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,18,102,105,110,100,
- 95,100,105,115,116,114,105,98,117,116,105,111,110,115,88,5,
- 0,0,115,14,0,0,0,0,10,8,1,12,1,8,1,6,
- 1,22,1,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,99,3,0,0,0,0,0,0,0,0,0,0,
- 0,4,0,0,0,6,0,0,0,3,0,0,0,115,44,0,
- 0,0,100,1,100,2,108,0,125,3,124,3,106,1,160,2,
- 135,0,135,1,102,2,100,3,100,4,132,8,116,3,136,0,
- 106,4,124,2,131,2,68,0,131,1,161,1,83,0,41,5,
- 122,49,70,105,110,100,32,109,101,116,97,100,97,116,97,32,
- 100,105,114,101,99,116,111,114,105,101,115,32,105,110,32,112,
- 97,116,104,115,32,104,101,117,114,105,115,116,105,99,97,108,
- 108,121,46,114,73,0,0,0,78,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,2,0,0,0,5,0,0,0,51,0,
- 0,0,115,26,0,0,0,124,0,93,18,125,1,136,0,160,
- 0,124,1,136,1,161,2,86,0,1,0,113,2,100,0,83,
- 0,114,110,0,0,0,41,1,218,12,95,115,101,97,114,99,
- 104,95,112,97,116,104,41,2,114,32,0,0,0,114,44,0,
- 0,0,169,2,114,193,0,0,0,114,63,1,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,19,1,0,0,110,5,0,
- 0,115,4,0,0,0,4,2,2,255,122,43,80,97,116,104,
- 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112,
- 97,116,104,115,46,60,108,111,99,97,108,115,62,46,60,103,
- 101,110,101,120,112,114,62,41,5,218,9,105,116,101,114,116,
- 111,111,108,115,90,5,99,104,97,105,110,90,13,102,114,111,
- 109,95,105,116,101,114,97,98,108,101,114,62,1,0,0,218,
- 12,95,115,119,105,116,99,104,95,112,97,116,104,41,4,114,
- 193,0,0,0,114,63,1,0,0,90,5,112,97,116,104,115,
- 114,67,1,0,0,114,3,0,0,0,114,66,1,0,0,114,
- 6,0,0,0,114,61,1,0,0,106,5,0,0,115,8,0,
- 0,0,0,3,8,1,18,2,10,254,122,24,80,97,116,104,
- 70,105,110,100,101,114,46,95,115,101,97,114,99,104,95,112,
- 97,116,104,115,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,4,0,0,0,10,0,0,0,67,0,0,0,115,78,0,
- 0,0,100,1,100,2,108,0,109,1,125,1,1,0,100,1,
- 100,0,108,2,125,2,100,1,100,3,108,3,109,4,125,3,
- 1,0,124,1,116,5,131,1,143,24,1,0,124,2,160,4,
- 124,0,161,1,87,0,2,0,53,0,81,0,82,0,163,0,
- 83,0,81,0,82,0,88,0,124,3,124,0,131,1,83,0,
- 41,4,78,114,73,0,0,0,41,1,218,8,115,117,112,112,
- 114,101,115,115,41,1,218,4,80,97,116,104,41,6,90,10,
- 99,111,110,116,101,120,116,108,105,98,114,69,1,0,0,218,
- 7,122,105,112,102,105,108,101,90,7,112,97,116,104,108,105,
- 98,114,70,1,0,0,218,9,69,120,99,101,112,116,105,111,
- 110,41,4,114,44,0,0,0,114,69,1,0,0,114,71,1,
- 0,0,114,70,1,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,68,1,0,0,115,5,0,0,115,
- 12,0,0,0,0,2,12,1,8,1,12,1,10,1,28,1,
- 122,23,80,97,116,104,70,105,110,100,101,114,46,95,115,119,
- 105,116,99,104,95,112,97,116,104,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,32,0,0,0,100,1,100,0,108,0,125,4,124,
- 4,106,1,124,1,116,2,124,3,106,3,131,1,124,4,106,
- 4,100,2,141,3,83,0,41,3,78,114,73,0,0,0,41,
- 1,114,83,0,0,0,41,5,114,60,1,0,0,90,5,109,
- 97,116,99,104,114,85,0,0,0,114,117,0,0,0,90,10,
- 73,71,78,79,82,69,67,65,83,69,41,5,114,193,0,0,
- 0,114,63,1,0,0,218,4,114,111,111,116,114,41,1,0,
- 0,114,60,1,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,10,95,112,114,101,100,105,99,97,116,
- 101,124,5,0,0,115,4,0,0,0,0,2,8,1,122,21,
- 80,97,116,104,70,105,110,100,101,114,46,95,112,114,101,100,
- 105,99,97,116,101,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,4,0,0,0,4,0,0,0,3,0,0,0,115,64,
- 0,0,0,136,2,160,0,161,0,115,12,100,1,83,0,124,
- 2,160,1,100,2,100,3,161,2,125,3,136,0,106,2,106,
- 3,124,3,100,4,141,1,137,1,135,0,135,1,135,2,102,
- 3,100,5,100,6,132,8,136,2,160,4,161,0,68,0,131,
- 1,83,0,41,7,78,114,3,0,0,0,250,1,45,114,45,
- 0,0,0,41,1,114,63,1,0,0,99,1,0,0,0,0,
- 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,51,
- 0,0,0,115,32,0,0,0,124,0,93,24,125,1,136,0,
- 160,0,136,1,136,2,124,1,161,3,114,26,124,1,86,0,
- 1,0,113,2,100,0,83,0,114,110,0,0,0,41,1,114,
- 74,1,0,0,41,2,114,32,0,0,0,114,41,1,0,0,
- 169,3,114,193,0,0,0,90,7,109,97,116,99,104,101,114,
- 114,73,1,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 19,1,0,0,135,5,0,0,115,6,0,0,0,4,0,2,
- 1,14,255,122,42,80,97,116,104,70,105,110,100,101,114,46,
- 95,115,101,97,114,99,104,95,112,97,116,104,46,60,108,111,
- 99,97,108,115,62,46,60,103,101,110,101,120,112,114,62,41,
- 5,90,6,105,115,95,100,105,114,114,67,0,0,0,218,15,
- 115,101,97,114,99,104,95,116,101,109,112,108,97,116,101,114,
- 62,0,0,0,90,7,105,116,101,114,100,105,114,41,4,114,
- 193,0,0,0,114,73,1,0,0,114,63,1,0,0,90,10,
- 110,111,114,109,97,108,105,122,101,100,114,3,0,0,0,114,
- 76,1,0,0,114,6,0,0,0,114,65,1,0,0,129,5,
- 0,0,115,10,0,0,0,0,2,8,1,4,1,12,1,14,
- 1,122,23,80,97,116,104,70,105,110,100,101,114,46,95,115,
- 101,97,114,99,104,95,112,97,116,104,41,1,78,41,2,78,
- 78,41,1,78,41,2,78,78,41,19,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,77,1,0,0,114,64,1,0,0,
- 114,61,1,0,0,218,12,115,116,97,116,105,99,109,101,116,
- 104,111,100,114,68,1,0,0,114,74,1,0,0,114,65,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,209,4,0,0,115,
- 52,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,4,2,2,1,12,17,2,1,10,8,2,1,
- 10,8,2,1,10,4,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,110,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,154,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,
- 71,0,0,0,114,105,0,0,0,78,41,7,114,167,0,0,
- 0,218,8,95,108,111,97,100,101,114,115,114,44,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,119,0,0,0,114,44,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,80,1,0,0,114,6,0,0,0,114,209,0,
- 0,0,148,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,
+ 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,119,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,168,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,119,0,0,0,114,188,0,0,
+ 0,114,139,0,0,0,114,44,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,180,
+ 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,71,0,0,0,
+ 114,28,0,0,0,114,105,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,41,0,0,0,114,49,0,0,0,114,
+ 44,0,0,0,114,2,0,0,0,114,55,0,0,0,114,10,
+ 1,0,0,114,50,0,0,0,114,82,1,0,0,218,11,95,
+ 102,105,108,108,95,99,97,99,104,101,114,7,0,0,0,114,
+ 85,1,0,0,114,106,0,0,0,114,84,1,0,0,114,38,
+ 0,0,0,114,81,1,0,0,114,54,0,0,0,114,58,1,
+ 0,0,114,56,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,119,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,185,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,71,0,0,0,
+ 114,61,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,106,
+ 0,0,0,41,2,114,32,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,6,6,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,44,0,0,0,114,2,0,0,0,114,7,1,
+ 0,0,114,55,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,83,1,0,0,114,84,1,0,0,114,101,0,0,0,114,
+ 62,0,0,0,114,106,0,0,0,218,3,97,100,100,114,11,
+ 0,0,0,114,85,1,0,0,41,9,114,119,0,0,0,114,
+ 44,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,117,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,87,1,
+ 0,0,233,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,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,105,0,0,0,
- 78,41,1,114,82,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,162,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,
- 119,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,168,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,119,0,0,0,114,188,0,0,0,114,139,
- 0,0,0,114,44,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,180,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,102,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,208,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,86,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,144,1,114,54,116,15,124,12,131,1,144,1,
- 114,54,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,98,
- 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,71,0,0,
- 0,114,28,0,0,0,114,105,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,41,0,0,0,114,49,0,0,0,
- 114,44,0,0,0,114,2,0,0,0,114,55,0,0,0,114,
- 10,1,0,0,114,50,0,0,0,114,82,1,0,0,218,11,
- 95,102,105,108,108,95,99,97,99,104,101,114,7,0,0,0,
- 114,85,1,0,0,114,106,0,0,0,114,84,1,0,0,114,
- 38,0,0,0,114,81,1,0,0,114,54,0,0,0,114,58,
- 1,0,0,114,56,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,119,
- 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,185,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,14,1,10,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,71,0,0,
- 0,114,61,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,
- 106,0,0,0,41,2,114,32,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,6,6,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,44,0,0,0,114,2,0,0,0,114,7,
- 1,0,0,114,55,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,83,1,0,0,114,84,1,0,0,114,101,0,0,0,
- 114,62,0,0,0,114,106,0,0,0,218,3,97,100,100,114,
- 11,0,0,0,114,85,1,0,0,41,9,114,119,0,0,0,
- 114,44,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,117,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,87,
- 1,0,0,233,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,48,0,0,0,41,2,114,56,0,0,0,114,118,
- 0,0,0,114,48,0,0,0,169,2,114,193,0,0,0,114,
- 86,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,18,6,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,86,1,0,0,
- 114,93,1,0,0,114,3,0,0,0,114,92,1,0,0,114,
- 6,0,0,0,218,9,112,97,116,104,95,104,111,111,107,8,
- 6,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,62,0,0,0,114,44,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,26,6,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,87,1,0,0,114,207,0,0,0,114,94,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,79,1,0,0,139,
- 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,79,
- 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,80,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,114,72,1,0,0,41,6,90,2,110,115,114,117,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,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,48,0,0,0,41,2,114,56,0,0,0,114,118,0,
+ 0,0,114,48,0,0,0,169,2,114,193,0,0,0,114,86,
+ 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,18,6,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,86,1,0,0,114,
+ 93,1,0,0,114,3,0,0,0,114,92,1,0,0,114,6,
+ 0,0,0,218,9,112,97,116,104,95,104,111,111,107,8,6,
+ 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,62,0,0,0,114,44,0,0,0,114,246,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,
- 32,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,98,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,102,0,0,
- 0,114,15,1,0,0,114,89,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,55,
- 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,116,8,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,9,107,10,114,214,1,0,1,0,1,
- 0,89,0,113,106,89,0,113,106,88,0,113,106,116,9,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,10,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,11,131,0,131,3,1,0,116,
- 12,160,13,116,2,160,14,161,0,161,1,1,0,124,5,100,
- 4,107,2,144,1,114,174,116,15,160,16,100,22,161,1,1,
- 0,100,23,116,12,107,6,144,1,114,174,100,24,116,17,95,
- 18,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,64,0,0,0,114,75,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,39,0,0,
- 0,78,41,1,114,22,0,0,0,41,2,114,32,0,0,0,
- 114,95,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,19,1,0,0,91,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,73,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,35,0,0,0,
- 114,31,0,0,0,114,40,0,0,0,114,58,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,74,0,0,0,114,3,0,0,0,41,
- 2,114,32,0,0,0,218,1,115,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,88,1,0,0,107,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,19,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,23,0,0,0,114,118,0,0,0,114,36,0,
- 0,0,114,13,0,0,0,114,21,1,0,0,114,167,0,0,
- 0,114,99,1,0,0,114,102,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,31,0,0,0,114,35,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,66,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,106,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,106,1,0,0,114,184,0,
- 0,0,114,8,0,0,0,114,51,1,0,0,114,167,0,0,
- 0,114,79,1,0,0,114,94,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,105,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,131,6,0,0,115,8,0,0,0,0,2,8,1,
- 6,1,20,1,114,108,1,0,0,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,27,0,0,0,
- 114,29,0,0,0,114,38,0,0,0,114,47,0,0,0,114,
- 49,0,0,0,114,53,0,0,0,114,54,0,0,0,114,56,
- 0,0,0,114,59,0,0,0,114,69,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,24,0,0,0,114,236,0,0,0,114,92,0,0,0,
- 114,88,0,0,0,114,102,0,0,0,114,89,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,98,0,0,0,114,103,0,0,0,114,
- 109,0,0,0,114,113,0,0,0,114,115,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,79,1,0,0,114,98,1,0,0,114,184,
- 0,0,0,114,106,1,0,0,114,108,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,12,22,10,127,0,8,16,1,12,2,
- 4,1,4,2,6,2,6,2,8,2,18,71,8,40,8,19,
- 8,12,8,12,8,28,8,17,8,33,8,28,8,24,16,13,
- 14,10,12,11,8,14,6,3,6,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,59,14,127,0,22,12,23,8,11,
- 8,65,
+ 114,39,1,0,0,26,6,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,87,1,0,0,114,207,0,0,0,114,94,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,79,1,0,0,139,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,79,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,80,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,114,72,1,0,0,41,6,90,2,110,115,114,117,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,32,
+ 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,98,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,102,0,0,0,
+ 114,15,1,0,0,114,89,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,55,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,116,8,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,9,107,10,114,214,1,0,1,0,1,0,
+ 89,0,113,106,89,0,113,106,88,0,113,106,116,9,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,10,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,11,131,0,131,3,1,0,116,12,
+ 160,13,116,2,160,14,161,0,161,1,1,0,124,5,100,4,
+ 107,2,144,1,114,174,116,15,160,16,100,22,161,1,1,0,
+ 100,23,116,12,107,6,144,1,114,174,100,24,116,17,95,18,
+ 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,64,0,0,0,114,75,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,39,0,0,0,
+ 78,41,1,114,22,0,0,0,41,2,114,32,0,0,0,114,
+ 95,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,114,19,1,0,0,91,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,73,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,35,0,0,0,114,
+ 31,0,0,0,114,40,0,0,0,114,58,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,74,0,0,0,114,3,0,0,0,41,2,
+ 114,32,0,0,0,218,1,115,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,114,88,1,0,0,107,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,19,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,23,0,0,0,114,118,0,0,0,114,36,0,0,
+ 0,114,13,0,0,0,114,21,1,0,0,114,167,0,0,0,
+ 114,99,1,0,0,114,102,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,31,0,0,0,114,35,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,66,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,106,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,106,1,0,0,114,184,0,0,
+ 0,114,8,0,0,0,114,51,1,0,0,114,167,0,0,0,
+ 114,79,1,0,0,114,94,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,105,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,131,6,0,0,115,8,0,0,0,0,2,8,1,6,
+ 1,20,1,114,108,1,0,0,41,1,114,60,0,0,0,41,
+ 1,78,41,3,78,78,78,41,2,114,73,0,0,0,114,73,
+ 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,27,
+ 0,0,0,114,29,0,0,0,114,38,0,0,0,114,47,0,
+ 0,0,114,49,0,0,0,114,53,0,0,0,114,54,0,0,
+ 0,114,56,0,0,0,114,59,0,0,0,114,69,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,24,0,0,0,114,236,0,0,0,114,92,
+ 0,0,0,114,88,0,0,0,114,102,0,0,0,114,89,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,98,0,0,0,114,103,0,
+ 0,0,114,109,0,0,0,114,113,0,0,0,114,115,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,79,1,0,0,114,98,1,0,
+ 0,114,184,0,0,0,114,106,1,0,0,114,108,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,8,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,59,14,127,0,22,10,
+ 23,8,11,8,65,
};
diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h
index cbb3d909a10b..056e85d343d8 100644
--- a/Python/importlib_zipimport.h
+++ b/Python/importlib_zipimport.h
@@ -783,301 +783,301 @@ const unsigned char _Py_M__zipimport[] = {
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,68,1,0,0,124,3,124,2,
+ 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,26,4,0,116,2,107,10,
- 114,54,1,0,1,0,1,0,89,0,100,0,83,0,89,0,
- 110,2,88,0,124,6,100,2,64,0,100,3,107,3,125,7,
- 124,7,114,190,124,6,100,4,64,0,100,3,107,3,125,8,
- 116,3,106,4,100,5,107,3,114,188,124,8,115,108,116,3,
- 106,4,100,6,107,2,114,188,116,5,124,0,124,2,131,2,
- 125,9,124,9,100,0,107,9,114,188,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,26,4,0,
- 116,2,107,10,114,186,1,0,1,0,1,0,89,0,100,0,
- 83,0,89,0,110,2,88,0,110,84,116,10,124,0,124,2,
- 131,2,92,2,125,11,125,12,124,11,144,1,114,18,116,11,
- 116,12,124,4,100,7,100,8,133,2,25,0,131,1,124,11,
- 131,2,114,254,116,12,124,4,100,8,100,9,133,2,25,0,
- 131,1,124,12,107,3,144,1,114,18,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,64,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,12,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,14,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,116,0,130,1,124,1,100,0,100,1,133,
- 2,25,0,125,1,124,0,106,1,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,2,124,4,124,3,131,2,124,
- 5,102,2,87,0,83,0,4,0,116,3,116,4,116,5,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,6,218,14,65,115,115,101,114,116,105,111,110,69,
- 114,114,111,114,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,116,0,130,1,124,1,100,0,100,1,
- 133,2,25,0,125,1,122,14,124,0,106,1,124,1,25,0,
- 125,2,87,0,110,22,4,0,116,2,107,10,114,68,1,0,
- 1,0,1,0,89,0,100,0,83,0,88,0,116,3,124,0,
- 106,4,124,2,131,2,83,0,100,0,83,0,41,3,78,114,
- 14,0,0,0,114,170,0,0,0,41,5,114,175,0,0,0,
- 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,177,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,177,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,178,0,0,0,
- 41,2,114,32,0,0,0,114,179,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,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,180,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,
- 116,8,130,1,124,3,106,9,125,4,116,10,131,0,125,5,
- 124,0,106,2,106,11,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,12,107,10,114,124,1,0,1,0,1,0,89,0,
- 113,78,89,0,110,2,88,0,124,7,106,9,106,7,125,8,
- 116,13,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,14,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,15,90,7,112,97,116,
- 104,108,105,98,114,184,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,114,
- 175,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,184,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,181,0,0,0,114,182,0,0,0,114,183,
- 0,0,0,114,188,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,
+ 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,
+ 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,116,0,130,
+ 1,124,1,100,0,100,1,133,2,25,0,125,1,124,0,106,
+ 1,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,
+ 2,124,4,124,3,131,2,124,5,102,2,87,0,83,0,4,
+ 0,116,3,116,4,116,5,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,6,218,14,65,115,
+ 115,101,114,116,105,111,110,69,114,114,111,114,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,116,0,
+ 130,1,124,1,100,0,100,1,133,2,25,0,125,1,122,14,
+ 124,0,106,1,124,1,25,0,125,2,87,0,110,22,4,0,
+ 116,2,107,10,114,68,1,0,1,0,1,0,89,0,100,0,
+ 83,0,88,0,116,3,124,0,106,4,124,2,131,2,83,0,
+ 100,0,83,0,41,3,78,114,14,0,0,0,114,170,0,0,
+ 0,41,5,114,175,0,0,0,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,177,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,177,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,178,0,0,0,41,2,114,32,0,0,0,114,
+ 179,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,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,180,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,116,8,130,1,124,3,106,9,
+ 125,4,116,10,131,0,125,5,124,0,106,2,106,11,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,12,107,10,114,124,
+ 1,0,1,0,1,0,89,0,113,78,89,0,110,2,88,0,
+ 124,7,106,9,106,7,125,8,116,13,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,14,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,15,90,7,112,97,116,104,108,105,98,114,184,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,114,175,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,184,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,181,0,0,
+ 0,114,182,0,0,0,114,183,0,0,0,114,188,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/peephole.c b/Python/peephole.c
index 1ce3535626e9..6f3e2ed88b2b 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -250,12 +250,16 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
lnotab = (unsigned char*)PyBytes_AS_STRING(lnotab_obj);
tabsiz = PyBytes_GET_SIZE(lnotab_obj);
assert(tabsiz == 0 || Py_REFCNT(lnotab_obj) == 1);
- if (memchr(lnotab, 255, tabsiz) != NULL) {
- /* 255 value are used for multibyte bytecode instructions */
- goto exitUnchanged;
+
+ /* Don't optimize if lnotab contains instruction pointer delta larger
+ than +255 (encoded as multiple bytes), just to keep the peephole optimizer
+ simple. The optimizer leaves line number deltas unchanged. */
+
+ for (j = 0; j < tabsiz; j += 2) {
+ if (lnotab[j] == 255) {
+ goto exitUnchanged;
+ }
}
- /* Note: -128 and 127 special values for line number delta are ok,
- the peephole optimizer doesn't modify line numbers. */
assert(PyBytes_Check(code));
Py_ssize_t codesize = PyBytes_GET_SIZE(code);
[View Less]
1
0

bpo-6689: os.path.commonpath raises ValueError for different drives isn't documented (GH-14045)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/ec3839a215a68cf35ff1f90cb6823f67a5…
commit: ec3839a215a68cf35ff1f90cb6823f67a5abdce3
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T07:12:49-07:00
summary:
bpo-6689: os.path.commonpath raises ValueError for different drives isn't documented (GH-14045)
It would raise ValueError("Paths don't have the same drive") if the paths on different …
[View More]drivers, which is not documented.
os.path.commonpath raises ValueError when the *paths* are in different drivers, but it is not documented.
Update the document according @Windsooon 's suggestion.
It actually raise ValueError according line 355 of [test of path](https://github.com/python/cpython/blob/master/Lib/test/test_ntpath.py)
https://bugs.python.org/issue6689
(cherry picked from commit 95492032c48fef20b9c7076a23fe7e46927a4688)
Co-authored-by: Makdon <makdon(a)makdon.me>
files:
M Doc/library/os.path.rst
diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst
index 8e7ee8bfe784..a673b81278ea 100644
--- a/Doc/library/os.path.rst
+++ b/Doc/library/os.path.rst
@@ -87,9 +87,10 @@ the :mod:`glob` module.)
.. function:: commonpath(paths)
Return the longest common sub-path of each pathname in the sequence
- *paths*. Raise :exc:`ValueError` if *paths* contains both absolute and relative
- pathnames, or if *paths* is empty. Unlike :func:`commonprefix`, this
- returns a valid path.
+ *paths*. Raise :exc:`ValueError` if *paths* contain both absolute
+ and relative pathnames, the *paths* are on the different drives or
+ if *paths* is empty. Unlike :func:`commonprefix`, this returns a
+ valid path.
.. availability:: Unix, Windows.
[View Less]
1
0

bpo-6689: os.path.commonpath raises ValueError for different drives isn't documented (GH-14045)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/95492032c48fef20b9c7076a23fe7e4692…
commit: 95492032c48fef20b9c7076a23fe7e46927a4688
branch: master
author: Makdon <makdon(a)makdon.me>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-13T06:59:49-07:00
summary:
bpo-6689: os.path.commonpath raises ValueError for different drives isn't documented (GH-14045)
It would raise ValueError("Paths don't have the same drive") if the paths on …
[View More]different drivers, which is not documented.
os.path.commonpath raises ValueError when the *paths* are in different drivers, but it is not documented.
Update the document according @Windsooon 's suggestion.
It actually raise ValueError according line 355 of [test of path](https://github.com/python/cpython/blob/master/Lib/test/test_ntpath.py)
https://bugs.python.org/issue6689
files:
M Doc/library/os.path.rst
diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst
index 8e7ee8bfe784..a673b81278ea 100644
--- a/Doc/library/os.path.rst
+++ b/Doc/library/os.path.rst
@@ -87,9 +87,10 @@ the :mod:`glob` module.)
.. function:: commonpath(paths)
Return the longest common sub-path of each pathname in the sequence
- *paths*. Raise :exc:`ValueError` if *paths* contains both absolute and relative
- pathnames, or if *paths* is empty. Unlike :func:`commonprefix`, this
- returns a valid path.
+ *paths*. Raise :exc:`ValueError` if *paths* contain both absolute
+ and relative pathnames, the *paths* are on the different drives or
+ if *paths* is empty. Unlike :func:`commonprefix`, this returns a
+ valid path.
.. availability:: Unix, Windows.
[View Less]
1
0

bpo-36779: time.tzname returns empty string on Windows if default cod… (GH-13073)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/6a433f5ae63de72a85d20b05ff826c6f72…
commit: 6a433f5ae63de72a85d20b05ff826c6f72d529b7
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T06:42:46-07:00
summary:
bpo-36779: time.tzname returns empty string on Windows if default cod… (GH-13073)
Calling setlocale(LC_CTYPE, "") on a system where GetACP() returns CP_UTF8 results in empty strings …
[View More]in _tzname[].
This causes time.tzname to be an empty string.
I have reported the bug to the UCRT team and will follow up, but it will take some time get a fix into production.
In the meantime one possible workaround is to temporarily change the locale by calling setlocale(LC_CTYPE, "C") before calling _tzset and restore the current locale after if the GetACP() == CP_UTF8 or CP_UTF7
@zooba
https://bugs.python.org/issue36779
(cherry picked from commit b4c7defe58695a6670a8fdeaef67a638bbb47e42)
Co-authored-by: Paul Monson <paulmon(a)users.noreply.github.com>
files:
A Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
M Modules/timemodule.c
diff --git a/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst b/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
new file mode 100644
index 000000000000..618cfcae7b89
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
@@ -0,0 +1,2 @@
+Ensure ``time.tzname`` is correct on Windows when the active code page is
+set to CP_UTF7 or CP_UTF8.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index ae7de5b2c766..4c8e2cb2344b 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -1571,6 +1571,19 @@ init_timezone(PyObject *m)
PyModule_AddIntConstant(m, "altzone", _Py_timezone-3600);
#endif
PyModule_AddIntConstant(m, "daylight", _Py_daylight);
+#ifdef MS_WINDOWS
+ TIME_ZONE_INFORMATION tzinfo = {0};
+ GetTimeZoneInformation(&tzinfo);
+ otz0 = PyUnicode_FromWideChar(tzinfo.StandardName, -1);
+ if (otz0 == NULL) {
+ return -1;
+ }
+ otz1 = PyUnicode_FromWideChar(tzinfo.DaylightName, -1);
+ if (otz1 == NULL) {
+ Py_DECREF(otz0);
+ return -1;
+ }
+#else
otz0 = PyUnicode_DecodeLocale(_Py_tzname[0], "surrogateescape");
if (otz0 == NULL) {
return -1;
@@ -1580,6 +1593,7 @@ init_timezone(PyObject *m)
Py_DECREF(otz0);
return -1;
}
+#endif // MS_WINDOWS
PyObject *tzname_obj = Py_BuildValue("(NN)", otz0, otz1);
if (tzname_obj == NULL) {
return -1;
[View Less]
1
0

bpo-37261: Fix support.catch_unraisable_exception() (GH-14052)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/b4f5b212535e75503fc335136768370890…
commit: b4f5b212535e75503fc33513676837089037bb48
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T06:25:59-07:00
summary:
bpo-37261: Fix support.catch_unraisable_exception() (GH-14052)
The __exit__() method of test.support.catch_unraisable_exception
context manager now ignores unraisable exception …
[View More]raised when clearing
self.unraisable attribute.
(cherry picked from commit 6d22cc8e90ccb1e1965b1a4bc79456e2cc1e5a3e)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
A Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst
M Doc/library/test.rst
M Lib/test/support/__init__.py
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index b7a2595708d0..0a98c882465d 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -1086,6 +1086,18 @@ The :mod:`test.support` module defines the following functions:
Context manager catching unraisable exception using
:func:`sys.unraisablehook`.
+ If the *object* attribute of the unraisable hook is set and the object is
+ being finalized, the object is resurrected because the context manager
+ stores a strong reference to it (``cm.unraisable.object``).
+
+ Storing the exception value (``cm.unraisable.exc_value``) creates a
+ reference cycle. The reference cycle is broken explicitly when the context
+ manager exits.
+
+ Exiting the context manager clears the stored unraisable exception. It can
+ trigger a new unraisable exception (ex: the resurrected object is finalized
+ again and raises the same exception): it is silently ignored in this case.
+
Usage::
with support.catch_unraisable_exception() as cm:
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index d6ed2215f383..174e0456dc71 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -3040,6 +3040,18 @@ class catch_unraisable_exception:
"""
Context manager catching unraisable exception using sys.unraisablehook.
+ If the *object* attribute of the unraisable hook is set and the object is
+ being finalized, the object is resurrected because the context manager
+ stores a strong reference to it (cm.unraisable.object).
+
+ Storing the exception value (cm.unraisable.exc_value) creates a reference
+ cycle. The reference cycle is broken explicitly when the context manager
+ exits.
+
+ Exiting the context manager clears the stored unraisable exception. It can
+ trigger a new unraisable exception (ex: the resurrected object is finalized
+ again and raises the same exception): it is silently ignored in this case.
+
Usage:
with support.catch_unraisable_exception() as cm:
@@ -3058,6 +3070,8 @@ def __init__(self):
self._old_hook = None
def _hook(self, unraisable):
+ # Storing unraisable.object can resurrect an object which is being
+ # finalized. Storing unraisable.exc_value creates a reference cycle.
self.unraisable = unraisable
def __enter__(self):
@@ -3066,6 +3080,10 @@ def __enter__(self):
return self
def __exit__(self, *exc_info):
- # Clear the unraisable exception to explicitly break a reference cycle
- del self.unraisable
+ # Clear the unraisable exception to explicitly break a reference cycle.
+ # It can call _hook() again: ignore the new unraisable exception in
+ # this case.
+ self.unraisable = None
+
sys.unraisablehook = self._old_hook
+ del self.unraisable
diff --git a/Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst b/Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst
new file mode 100644
index 000000000000..27ce78a70f2b
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst
@@ -0,0 +1,3 @@
+Fix :func:`test.support.catch_unraisable_exception`: its __exit__() method
+now ignores unraisable exception raised when clearing its ``unraisable``
+attribute.
[View Less]
1
0

bpo-36779: time.tzname returns empty string on Windows if default cod… (GH-13073) (GH-14032)
by Victor Stinner June 13, 2019
by Victor Stinner June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/0a9baec16c17d261377fb8a31a57d8c397…
commit: 0a9baec16c17d261377fb8a31a57d8c397e25af6
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-13T15:22:51+02:00
summary:
bpo-36779: time.tzname returns empty string on Windows if default cod… (GH-13073) (GH-14032)
Calling setlocale(LC_CTYPE, "") on a system where GetACP() returns CP_UTF8 …
[View More]results in empty strings in _tzname[].
This causes time.tzname to be an empty string.
I have reported the bug to the UCRT team and will follow up, but it will take some time get a fix into production.
In the meantime one possible workaround is to temporarily change the locale by calling setlocale(LC_CTYPE, "C") before calling _tzset and restore the current locale after if the GetACP() == CP_UTF8 or CP_UTF7
@zooba
https://bugs.python.org/issue36779
(cherry picked from commit b4c7defe58695a6670a8fdeaef67a638bbb47e42)
Co-authored-by: Paul Monson <paulmon(a)users.noreply.github.com>
files:
A Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
M Modules/timemodule.c
diff --git a/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst b/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
new file mode 100644
index 000000000000..618cfcae7b89
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
@@ -0,0 +1,2 @@
+Ensure ``time.tzname`` is correct on Windows when the active code page is
+set to CP_UTF7 or CP_UTF8.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index f991f31ee15e..bdc93a2b7ec1 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -1581,6 +1581,19 @@ init_timezone(PyObject *m)
PyModule_AddIntConstant(m, "altzone", _Py_timezone-3600);
#endif
PyModule_AddIntConstant(m, "daylight", _Py_daylight);
+#ifdef MS_WINDOWS
+ TIME_ZONE_INFORMATION tzinfo = {0};
+ GetTimeZoneInformation(&tzinfo);
+ otz0 = PyUnicode_FromWideChar(tzinfo.StandardName, -1);
+ if (otz0 == NULL) {
+ return -1;
+ }
+ otz1 = PyUnicode_FromWideChar(tzinfo.DaylightName, -1);
+ if (otz1 == NULL) {
+ Py_DECREF(otz0);
+ return -1;
+ }
+#else
otz0 = PyUnicode_DecodeLocale(_Py_tzname[0], "surrogateescape");
if (otz0 == NULL) {
return -1;
@@ -1590,6 +1603,7 @@ init_timezone(PyObject *m)
Py_DECREF(otz0);
return -1;
}
+#endif // MS_WINDOWS
PyObject *tzname_obj = Py_BuildValue("(NN)", otz0, otz1);
if (tzname_obj == NULL) {
return -1;
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/6d22cc8e90ccb1e1965b1a4bc79456e2cc…
commit: 6d22cc8e90ccb1e1965b1a4bc79456e2cc1e5a3e
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T14:44:54+02:00
summary:
bpo-37261: Fix support.catch_unraisable_exception() (GH-14052)
The __exit__() method of test.support.catch_unraisable_exception
context manager now ignores unraisable exception raised when clearing
self.unraisable …
[View More]attribute.
files:
A Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst
M Doc/library/test.rst
M Lib/test/support/__init__.py
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index b7a2595708d0..0a98c882465d 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -1086,6 +1086,18 @@ The :mod:`test.support` module defines the following functions:
Context manager catching unraisable exception using
:func:`sys.unraisablehook`.
+ If the *object* attribute of the unraisable hook is set and the object is
+ being finalized, the object is resurrected because the context manager
+ stores a strong reference to it (``cm.unraisable.object``).
+
+ Storing the exception value (``cm.unraisable.exc_value``) creates a
+ reference cycle. The reference cycle is broken explicitly when the context
+ manager exits.
+
+ Exiting the context manager clears the stored unraisable exception. It can
+ trigger a new unraisable exception (ex: the resurrected object is finalized
+ again and raises the same exception): it is silently ignored in this case.
+
Usage::
with support.catch_unraisable_exception() as cm:
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index d6ed2215f383..174e0456dc71 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -3040,6 +3040,18 @@ class catch_unraisable_exception:
"""
Context manager catching unraisable exception using sys.unraisablehook.
+ If the *object* attribute of the unraisable hook is set and the object is
+ being finalized, the object is resurrected because the context manager
+ stores a strong reference to it (cm.unraisable.object).
+
+ Storing the exception value (cm.unraisable.exc_value) creates a reference
+ cycle. The reference cycle is broken explicitly when the context manager
+ exits.
+
+ Exiting the context manager clears the stored unraisable exception. It can
+ trigger a new unraisable exception (ex: the resurrected object is finalized
+ again and raises the same exception): it is silently ignored in this case.
+
Usage:
with support.catch_unraisable_exception() as cm:
@@ -3058,6 +3070,8 @@ def __init__(self):
self._old_hook = None
def _hook(self, unraisable):
+ # Storing unraisable.object can resurrect an object which is being
+ # finalized. Storing unraisable.exc_value creates a reference cycle.
self.unraisable = unraisable
def __enter__(self):
@@ -3066,6 +3080,10 @@ def __enter__(self):
return self
def __exit__(self, *exc_info):
- # Clear the unraisable exception to explicitly break a reference cycle
- del self.unraisable
+ # Clear the unraisable exception to explicitly break a reference cycle.
+ # It can call _hook() again: ignore the new unraisable exception in
+ # this case.
+ self.unraisable = None
+
sys.unraisablehook = self._old_hook
+ del self.unraisable
diff --git a/Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst b/Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst
new file mode 100644
index 000000000000..27ce78a70f2b
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-13-12-19-56.bpo-37261.NuKFVo.rst
@@ -0,0 +1,3 @@
+Fix :func:`test.support.catch_unraisable_exception`: its __exit__() method
+now ignores unraisable exception raised when clearing its ``unraisable``
+attribute.
[View Less]
1
0

bpo-37210: Fix pure Python pickle when _pickle is unavailable (GH-14016)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/cbda40db7b604b377acfd3f04e19407ca3…
commit: cbda40db7b604b377acfd3f04e19407ca33748a7
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T05:28:11-07:00
summary:
bpo-37210: Fix pure Python pickle when _pickle is unavailable (GH-14016)
Allow pure Python implementation of pickle to work
even when the C _pickle module is unavailable.
Fix …
[View More]test_pickle when _pickle is missing: declare PyPicklerHookTests
outside "if has_c_implementation:" block.
(cherry picked from commit 63ab4ba07b492448844940c347787ba30735b7f2)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
A Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst
M Lib/pickle.py
M Lib/test/test_pickle.py
diff --git a/Lib/pickle.py b/Lib/pickle.py
index a67ac7dd8b68..71aa57d500ec 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -36,10 +36,16 @@
import codecs
import _compat_pickle
-from _pickle import PickleBuffer
-
__all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler",
- "Unpickler", "dump", "dumps", "load", "loads", "PickleBuffer"]
+ "Unpickler", "dump", "dumps", "load", "loads"]
+
+try:
+ from _pickle import PickleBuffer
+ __all__.append("PickleBuffer")
+ _HAVE_PICKLE_BUFFER = True
+except ImportError:
+ _HAVE_PICKLE_BUFFER = False
+
# Shortcut for use in isinstance testing
bytes_types = (bytes, bytearray)
@@ -812,31 +818,32 @@ def save_bytearray(self, obj):
self.write(BYTEARRAY8 + pack("<Q", n) + obj)
dispatch[bytearray] = save_bytearray
- def save_picklebuffer(self, obj):
- if self.proto < 5:
- raise PicklingError("PickleBuffer can only pickled with "
- "protocol >= 5")
- with obj.raw() as m:
- if not m.contiguous:
- raise PicklingError("PickleBuffer can not be pickled when "
- "pointing to a non-contiguous buffer")
- in_band = True
- if self._buffer_callback is not None:
- in_band = bool(self._buffer_callback(obj))
- if in_band:
- # Write data in-band
- # XXX The C implementation avoids a copy here
- if m.readonly:
- self.save_bytes(m.tobytes())
+ if _HAVE_PICKLE_BUFFER:
+ def save_picklebuffer(self, obj):
+ if self.proto < 5:
+ raise PicklingError("PickleBuffer can only pickled with "
+ "protocol >= 5")
+ with obj.raw() as m:
+ if not m.contiguous:
+ raise PicklingError("PickleBuffer can not be pickled when "
+ "pointing to a non-contiguous buffer")
+ in_band = True
+ if self._buffer_callback is not None:
+ in_band = bool(self._buffer_callback(obj))
+ if in_band:
+ # Write data in-band
+ # XXX The C implementation avoids a copy here
+ if m.readonly:
+ self.save_bytes(m.tobytes())
+ else:
+ self.save_bytearray(m.tobytes())
else:
- self.save_bytearray(m.tobytes())
- else:
- # Write data out-of-band
- self.write(NEXT_BUFFER)
- if m.readonly:
- self.write(READONLY_BUFFER)
+ # Write data out-of-band
+ self.write(NEXT_BUFFER)
+ if m.readonly:
+ self.write(READONLY_BUFFER)
- dispatch[PickleBuffer] = save_picklebuffer
+ dispatch[PickleBuffer] = save_picklebuffer
def save_str(self, obj):
if self.bin:
diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py
index 5f7a879b935d..2307b133dbd0 100644
--- a/Lib/test/test_pickle.py
+++ b/Lib/test/test_pickle.py
@@ -203,6 +203,13 @@ def get_dispatch_table(self):
return collections.ChainMap({}, pickle.dispatch_table)
+class PyPicklerHookTests(AbstractHookTests):
+ class CustomPyPicklerClass(pickle._Pickler,
+ AbstractCustomPicklerClass):
+ pass
+ pickler_class = CustomPyPicklerClass
+
+
if has_c_implementation:
class CPickleTests(AbstractPickleModuleTests):
from _pickle import dump, dumps, load, loads, Pickler, Unpickler
@@ -255,12 +262,6 @@ class CChainDispatchTableTests(AbstractDispatchTableTests):
def get_dispatch_table(self):
return collections.ChainMap({}, pickle.dispatch_table)
- class PyPicklerHookTests(AbstractHookTests):
- class CustomPyPicklerClass(pickle._Pickler,
- AbstractCustomPicklerClass):
- pass
- pickler_class = CustomPyPicklerClass
-
class CPicklerHookTests(AbstractHookTests):
class CustomCPicklerClass(_pickle.Pickler, AbstractCustomPicklerClass):
pass
diff --git a/Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst b/Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst
new file mode 100644
index 000000000000..58fc66b59059
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst
@@ -0,0 +1 @@
+Allow pure Python implementation of :mod:`pickle` to work even when the C :mod:`_pickle` module is unavailable.
[View Less]
1
0

bpo-36402: Fix threading._shutdown() race condition (GH-13948) (GH-14050) (GH-14054)
by Victor Stinner June 13, 2019
by Victor Stinner June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/6eb2878e42152e9c45d7ee5e6f889532d7…
commit: 6eb2878e42152e9c45d7ee5e6f889532d753e67c
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: Victor Stinner <vstinner(a)redhat.com>
date: 2019-06-13T14:22:20+02:00
summary:
bpo-36402: Fix threading._shutdown() race condition (GH-13948) (GH-14050) (GH-14054)
* bpo-36402: Fix threading._shutdown() race condition (GH-13948)
Fix a race condition at …
[View More]Python shutdown when waiting for threads.
Wait until the Python thread state of all non-daemon threads get
deleted (join all non-daemon threads), rather than just wait until
Python threads complete.
* Add threading._shutdown_locks: set of Thread._tstate_lock locks
of non-daemon threads used by _shutdown() to wait until all Python
thread states get deleted. See Thread._set_tstate_lock().
* Add also threading._shutdown_locks_lock to protect access to
threading._shutdown_locks.
* Add test_finalization_shutdown() test.
(cherry picked from commit 468e5fec8a2f534f1685d59da3ca4fad425c38dd)
* bpo-36402: Fix threading.Thread._stop() (GH-14047)
Remove the _tstate_lock from _shutdown_locks, don't remove None.
(cherry picked from commit 6f75c873752a16a7ad8f35855b1e29f59d048e84)
(cherry picked from commit e40a97a721d46307dfdc2b0322028ccded6eb571)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
A Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
M Lib/test/test_threading.py
M Lib/threading.py
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index aa810bda1c2a..36d9fbb162e2 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -578,6 +578,41 @@ def __del__(self):
self.assertEqual(data.splitlines(),
["GC: True True True"] * 2)
+ def test_finalization_shutdown(self):
+ # bpo-36402: Py_Finalize() calls threading._shutdown() which must wait
+ # until Python thread states of all non-daemon threads get deleted.
+ #
+ # Test similar to SubinterpThreadingTests.test_threads_join_2(), but
+ # test the finalization of the main interpreter.
+ code = """if 1:
+ import os
+ import threading
+ import time
+ import random
+
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
+ class Sleeper:
+ def __del__(self):
+ random_sleep()
+
+ tls = threading.local()
+
+ def f():
+ # Sleep a bit so that the thread is still running when
+ # Py_Finalize() is called.
+ random_sleep()
+ tls.x = Sleeper()
+ random_sleep()
+
+ threading.Thread(target=f).start()
+ random_sleep()
+ """
+ rc, out, err = assert_python_ok("-c", code)
+ self.assertEqual(err, b"")
+
def test_tstate_lock(self):
# Test an implementation detail of Thread objects.
started = _thread.allocate_lock()
@@ -698,6 +733,30 @@ def callback():
finally:
sys.settrace(old_trace)
+ @cpython_only
+ def test_shutdown_locks(self):
+ for daemon in (False, True):
+ with self.subTest(daemon=daemon):
+ event = threading.Event()
+ thread = threading.Thread(target=event.wait, daemon=daemon)
+
+ # Thread.start() must add lock to _shutdown_locks,
+ # but only for non-daemon thread
+ thread.start()
+ tstate_lock = thread._tstate_lock
+ if not daemon:
+ self.assertIn(tstate_lock, threading._shutdown_locks)
+ else:
+ self.assertNotIn(tstate_lock, threading._shutdown_locks)
+
+ # unblock the thread and join it
+ event.set()
+ thread.join()
+
+ # Thread._stop() must remove tstate_lock from _shutdown_locks.
+ # Daemon threads must never add it to _shutdown_locks.
+ self.assertNotIn(tstate_lock, threading._shutdown_locks)
+
class ThreadJoinOnShutdown(BaseTestCase):
@@ -875,15 +934,22 @@ def test_threads_join(self):
self.addCleanup(os.close, w)
code = r"""if 1:
import os
+ import random
import threading
import time
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
def f():
# Sleep a bit so that the thread is still running when
# Py_EndInterpreter is called.
- time.sleep(0.05)
+ random_sleep()
os.write(%d, b"x")
+
threading.Thread(target=f).start()
+ random_sleep()
""" % (w,)
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
@@ -900,22 +966,29 @@ def test_threads_join_2(self):
self.addCleanup(os.close, w)
code = r"""if 1:
import os
+ import random
import threading
import time
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
class Sleeper:
def __del__(self):
- time.sleep(0.05)
+ random_sleep()
tls = threading.local()
def f():
# Sleep a bit so that the thread is still running when
# Py_EndInterpreter is called.
- time.sleep(0.05)
+ random_sleep()
tls.x = Sleeper()
os.write(%d, b"x")
+
threading.Thread(target=f).start()
+ random_sleep()
""" % (w,)
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
diff --git a/Lib/threading.py b/Lib/threading.py
index 318b3301126a..0fb3bdd55cd7 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -733,6 +733,11 @@ def _newname(template="Thread-%d"):
_active = {} # maps thread id to Thread object
_limbo = {}
_dangling = WeakSet()
+# Set of Thread._tstate_lock locks of non-daemon threads used by _shutdown()
+# to wait until all Python thread states get deleted:
+# see Thread._set_tstate_lock().
+_shutdown_locks_lock = _allocate_lock()
+_shutdown_locks = set()
# Main class for threads
@@ -899,6 +904,10 @@ def _set_tstate_lock(self):
self._tstate_lock = _set_sentinel()
self._tstate_lock.acquire()
+ if not self.daemon:
+ with _shutdown_locks_lock:
+ _shutdown_locks.add(self._tstate_lock)
+
def _bootstrap_inner(self):
try:
self._set_ident()
@@ -987,6 +996,9 @@ def _stop(self):
assert not lock.locked()
self._is_stopped = True
self._tstate_lock = None
+ if not self.daemon:
+ with _shutdown_locks_lock:
+ _shutdown_locks.discard(lock)
def _delete(self):
"Remove current thread from the dict of currently running threads."
@@ -1261,6 +1273,9 @@ def enumerate():
_main_thread = _MainThread()
def _shutdown():
+ """
+ Wait until the Python thread state of all non-daemon threads get deleted.
+ """
# Obscure: other threads may be waiting to join _main_thread. That's
# dubious, but some code does it. We can't wait for C code to release
# the main thread's tstate_lock - that won't happen until the interpreter
@@ -1269,6 +1284,8 @@ def _shutdown():
if _main_thread._is_stopped:
# _shutdown() was already called
return
+
+ # Main thread
tlock = _main_thread._tstate_lock
# The main thread isn't finished yet, so its thread state lock can't have
# been released.
@@ -1276,16 +1293,24 @@ def _shutdown():
assert tlock.locked()
tlock.release()
_main_thread._stop()
- t = _pickSomeNonDaemonThread()
- while t:
- t.join()
- t = _pickSomeNonDaemonThread()
-def _pickSomeNonDaemonThread():
- for t in enumerate():
- if not t.daemon and t.is_alive():
- return t
- return None
+ # Join all non-deamon threads
+ while True:
+ with _shutdown_locks_lock:
+ locks = list(_shutdown_locks)
+ _shutdown_locks.clear()
+
+ if not locks:
+ break
+
+ for lock in locks:
+ # mimick Thread.join()
+ lock.acquire()
+ lock.release()
+
+ # new threads can be spawned while we were waiting for the other
+ # threads to complete
+
def main_thread():
"""Return the main thread object.
@@ -1311,12 +1336,18 @@ def _after_fork():
# Reset _active_limbo_lock, in case we forked while the lock was held
# by another (non-forked) thread. http://bugs.python.org/issue874900
global _active_limbo_lock, _main_thread
+ global _shutdown_locks_lock, _shutdown_locks
_active_limbo_lock = _allocate_lock()
# fork() only copied the current thread; clear references to others.
new_active = {}
current = current_thread()
_main_thread = current
+
+ # reset _shutdown() locks: threads re-register their _tstate_lock below
+ _shutdown_locks_lock = _allocate_lock()
+ _shutdown_locks = set()
+
with _active_limbo_lock:
# Dangling thread instances must still have their locks reset,
# because someone may join() them.
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst b/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
new file mode 100644
index 000000000000..3bc537e40ff6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
@@ -0,0 +1,4 @@
+Fix a race condition at Python shutdown when waiting for threads. Wait until
+the Python thread state of all non-daemon threads get deleted (join all
+non-daemon threads), rather than just wait until non-daemon Python threads
+complete.
[View Less]
1
0

bpo-37210: Fix pure Python pickle when _pickle is unavailable (GH-14016)
by Victor Stinner June 13, 2019
by Victor Stinner June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/63ab4ba07b492448844940c347787ba307…
commit: 63ab4ba07b492448844940c347787ba30735b7f2
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T13:58:51+02:00
summary:
bpo-37210: Fix pure Python pickle when _pickle is unavailable (GH-14016)
Allow pure Python implementation of pickle to work
even when the C _pickle module is unavailable.
Fix test_pickle when _pickle is missing: …
[View More]declare PyPicklerHookTests
outside "if has_c_implementation:" block.
files:
A Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst
M Lib/pickle.py
M Lib/test/test_pickle.py
diff --git a/Lib/pickle.py b/Lib/pickle.py
index a67ac7dd8b68..71aa57d500ec 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -36,10 +36,16 @@
import codecs
import _compat_pickle
-from _pickle import PickleBuffer
-
__all__ = ["PickleError", "PicklingError", "UnpicklingError", "Pickler",
- "Unpickler", "dump", "dumps", "load", "loads", "PickleBuffer"]
+ "Unpickler", "dump", "dumps", "load", "loads"]
+
+try:
+ from _pickle import PickleBuffer
+ __all__.append("PickleBuffer")
+ _HAVE_PICKLE_BUFFER = True
+except ImportError:
+ _HAVE_PICKLE_BUFFER = False
+
# Shortcut for use in isinstance testing
bytes_types = (bytes, bytearray)
@@ -812,31 +818,32 @@ def save_bytearray(self, obj):
self.write(BYTEARRAY8 + pack("<Q", n) + obj)
dispatch[bytearray] = save_bytearray
- def save_picklebuffer(self, obj):
- if self.proto < 5:
- raise PicklingError("PickleBuffer can only pickled with "
- "protocol >= 5")
- with obj.raw() as m:
- if not m.contiguous:
- raise PicklingError("PickleBuffer can not be pickled when "
- "pointing to a non-contiguous buffer")
- in_band = True
- if self._buffer_callback is not None:
- in_band = bool(self._buffer_callback(obj))
- if in_band:
- # Write data in-band
- # XXX The C implementation avoids a copy here
- if m.readonly:
- self.save_bytes(m.tobytes())
+ if _HAVE_PICKLE_BUFFER:
+ def save_picklebuffer(self, obj):
+ if self.proto < 5:
+ raise PicklingError("PickleBuffer can only pickled with "
+ "protocol >= 5")
+ with obj.raw() as m:
+ if not m.contiguous:
+ raise PicklingError("PickleBuffer can not be pickled when "
+ "pointing to a non-contiguous buffer")
+ in_band = True
+ if self._buffer_callback is not None:
+ in_band = bool(self._buffer_callback(obj))
+ if in_band:
+ # Write data in-band
+ # XXX The C implementation avoids a copy here
+ if m.readonly:
+ self.save_bytes(m.tobytes())
+ else:
+ self.save_bytearray(m.tobytes())
else:
- self.save_bytearray(m.tobytes())
- else:
- # Write data out-of-band
- self.write(NEXT_BUFFER)
- if m.readonly:
- self.write(READONLY_BUFFER)
+ # Write data out-of-band
+ self.write(NEXT_BUFFER)
+ if m.readonly:
+ self.write(READONLY_BUFFER)
- dispatch[PickleBuffer] = save_picklebuffer
+ dispatch[PickleBuffer] = save_picklebuffer
def save_str(self, obj):
if self.bin:
diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py
index 5f7a879b935d..2307b133dbd0 100644
--- a/Lib/test/test_pickle.py
+++ b/Lib/test/test_pickle.py
@@ -203,6 +203,13 @@ def get_dispatch_table(self):
return collections.ChainMap({}, pickle.dispatch_table)
+class PyPicklerHookTests(AbstractHookTests):
+ class CustomPyPicklerClass(pickle._Pickler,
+ AbstractCustomPicklerClass):
+ pass
+ pickler_class = CustomPyPicklerClass
+
+
if has_c_implementation:
class CPickleTests(AbstractPickleModuleTests):
from _pickle import dump, dumps, load, loads, Pickler, Unpickler
@@ -255,12 +262,6 @@ class CChainDispatchTableTests(AbstractDispatchTableTests):
def get_dispatch_table(self):
return collections.ChainMap({}, pickle.dispatch_table)
- class PyPicklerHookTests(AbstractHookTests):
- class CustomPyPicklerClass(pickle._Pickler,
- AbstractCustomPicklerClass):
- pass
- pickler_class = CustomPyPicklerClass
-
class CPicklerHookTests(AbstractHookTests):
class CustomCPicklerClass(_pickle.Pickler, AbstractCustomPicklerClass):
pass
diff --git a/Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst b/Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst
new file mode 100644
index 000000000000..58fc66b59059
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-12-16-10-50.bpo-37210.r4yMg6.rst
@@ -0,0 +1 @@
+Allow pure Python implementation of :mod:`pickle` to work even when the C :mod:`_pickle` module is unavailable.
[View Less]
1
0

[3.8] bpo-36402: Fix threading._shutdown() race condition (GH-13948) (GH-14050)
by Victor Stinner June 13, 2019
by Victor Stinner June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/e40a97a721d46307dfdc2b0322028ccded…
commit: e40a97a721d46307dfdc2b0322028ccded6eb571
branch: 3.8
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T13:44:23+02:00
summary:
[3.8] bpo-36402: Fix threading._shutdown() race condition (GH-13948) (GH-14050)
* bpo-36402: Fix threading._shutdown() race condition (GH-13948)
Fix a race condition at Python shutdown when waiting for threads.
Wait …
[View More]until the Python thread state of all non-daemon threads get
deleted (join all non-daemon threads), rather than just wait until
Python threads complete.
* Add threading._shutdown_locks: set of Thread._tstate_lock locks
of non-daemon threads used by _shutdown() to wait until all Python
thread states get deleted. See Thread._set_tstate_lock().
* Add also threading._shutdown_locks_lock to protect access to
threading._shutdown_locks.
* Add test_finalization_shutdown() test.
(cherry picked from commit 468e5fec8a2f534f1685d59da3ca4fad425c38dd)
* bpo-36402: Fix threading.Thread._stop() (GH-14047)
Remove the _tstate_lock from _shutdown_locks, don't remove None.
(cherry picked from commit 6f75c873752a16a7ad8f35855b1e29f59d048e84)
files:
A Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
M Lib/test/test_threading.py
M Lib/threading.py
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 6ac4ea9623de..0a0a62bdf9bf 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -583,6 +583,41 @@ def __del__(self):
self.assertEqual(data.splitlines(),
["GC: True True True"] * 2)
+ def test_finalization_shutdown(self):
+ # bpo-36402: Py_Finalize() calls threading._shutdown() which must wait
+ # until Python thread states of all non-daemon threads get deleted.
+ #
+ # Test similar to SubinterpThreadingTests.test_threads_join_2(), but
+ # test the finalization of the main interpreter.
+ code = """if 1:
+ import os
+ import threading
+ import time
+ import random
+
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
+ class Sleeper:
+ def __del__(self):
+ random_sleep()
+
+ tls = threading.local()
+
+ def f():
+ # Sleep a bit so that the thread is still running when
+ # Py_Finalize() is called.
+ random_sleep()
+ tls.x = Sleeper()
+ random_sleep()
+
+ threading.Thread(target=f).start()
+ random_sleep()
+ """
+ rc, out, err = assert_python_ok("-c", code)
+ self.assertEqual(err, b"")
+
def test_tstate_lock(self):
# Test an implementation detail of Thread objects.
started = _thread.allocate_lock()
@@ -703,6 +738,30 @@ def callback():
finally:
sys.settrace(old_trace)
+ @cpython_only
+ def test_shutdown_locks(self):
+ for daemon in (False, True):
+ with self.subTest(daemon=daemon):
+ event = threading.Event()
+ thread = threading.Thread(target=event.wait, daemon=daemon)
+
+ # Thread.start() must add lock to _shutdown_locks,
+ # but only for non-daemon thread
+ thread.start()
+ tstate_lock = thread._tstate_lock
+ if not daemon:
+ self.assertIn(tstate_lock, threading._shutdown_locks)
+ else:
+ self.assertNotIn(tstate_lock, threading._shutdown_locks)
+
+ # unblock the thread and join it
+ event.set()
+ thread.join()
+
+ # Thread._stop() must remove tstate_lock from _shutdown_locks.
+ # Daemon threads must never add it to _shutdown_locks.
+ self.assertNotIn(tstate_lock, threading._shutdown_locks)
+
class ThreadJoinOnShutdown(BaseTestCase):
@@ -878,15 +937,22 @@ def test_threads_join(self):
self.addCleanup(os.close, w)
code = r"""if 1:
import os
+ import random
import threading
import time
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
def f():
# Sleep a bit so that the thread is still running when
# Py_EndInterpreter is called.
- time.sleep(0.05)
+ random_sleep()
os.write(%d, b"x")
+
threading.Thread(target=f).start()
+ random_sleep()
""" % (w,)
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
@@ -903,22 +969,29 @@ def test_threads_join_2(self):
self.addCleanup(os.close, w)
code = r"""if 1:
import os
+ import random
import threading
import time
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
class Sleeper:
def __del__(self):
- time.sleep(0.05)
+ random_sleep()
tls = threading.local()
def f():
# Sleep a bit so that the thread is still running when
# Py_EndInterpreter is called.
- time.sleep(0.05)
+ random_sleep()
tls.x = Sleeper()
os.write(%d, b"x")
+
threading.Thread(target=f).start()
+ random_sleep()
""" % (w,)
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
diff --git a/Lib/threading.py b/Lib/threading.py
index 3d197eed6a72..7c6d404bcd10 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -739,6 +739,11 @@ def _newname(template="Thread-%d"):
_active = {} # maps thread id to Thread object
_limbo = {}
_dangling = WeakSet()
+# Set of Thread._tstate_lock locks of non-daemon threads used by _shutdown()
+# to wait until all Python thread states get deleted:
+# see Thread._set_tstate_lock().
+_shutdown_locks_lock = _allocate_lock()
+_shutdown_locks = set()
# Main class for threads
@@ -903,6 +908,10 @@ def _set_tstate_lock(self):
self._tstate_lock = _set_sentinel()
self._tstate_lock.acquire()
+ if not self.daemon:
+ with _shutdown_locks_lock:
+ _shutdown_locks.add(self._tstate_lock)
+
def _bootstrap_inner(self):
try:
self._set_ident()
@@ -954,6 +963,9 @@ def _stop(self):
assert not lock.locked()
self._is_stopped = True
self._tstate_lock = None
+ if not self.daemon:
+ with _shutdown_locks_lock:
+ _shutdown_locks.discard(lock)
def _delete(self):
"Remove current thread from the dict of currently running threads."
@@ -1342,6 +1354,9 @@ def enumerate():
_main_thread = _MainThread()
def _shutdown():
+ """
+ Wait until the Python thread state of all non-daemon threads get deleted.
+ """
# Obscure: other threads may be waiting to join _main_thread. That's
# dubious, but some code does it. We can't wait for C code to release
# the main thread's tstate_lock - that won't happen until the interpreter
@@ -1350,6 +1365,8 @@ def _shutdown():
if _main_thread._is_stopped:
# _shutdown() was already called
return
+
+ # Main thread
tlock = _main_thread._tstate_lock
# The main thread isn't finished yet, so its thread state lock can't have
# been released.
@@ -1357,16 +1374,24 @@ def _shutdown():
assert tlock.locked()
tlock.release()
_main_thread._stop()
- t = _pickSomeNonDaemonThread()
- while t:
- t.join()
- t = _pickSomeNonDaemonThread()
-def _pickSomeNonDaemonThread():
- for t in enumerate():
- if not t.daemon and t.is_alive():
- return t
- return None
+ # Join all non-deamon threads
+ while True:
+ with _shutdown_locks_lock:
+ locks = list(_shutdown_locks)
+ _shutdown_locks.clear()
+
+ if not locks:
+ break
+
+ for lock in locks:
+ # mimick Thread.join()
+ lock.acquire()
+ lock.release()
+
+ # new threads can be spawned while we were waiting for the other
+ # threads to complete
+
def main_thread():
"""Return the main thread object.
@@ -1392,12 +1417,18 @@ def _after_fork():
# Reset _active_limbo_lock, in case we forked while the lock was held
# by another (non-forked) thread. http://bugs.python.org/issue874900
global _active_limbo_lock, _main_thread
+ global _shutdown_locks_lock, _shutdown_locks
_active_limbo_lock = _allocate_lock()
# fork() only copied the current thread; clear references to others.
new_active = {}
current = current_thread()
_main_thread = current
+
+ # reset _shutdown() locks: threads re-register their _tstate_lock below
+ _shutdown_locks_lock = _allocate_lock()
+ _shutdown_locks = set()
+
with _active_limbo_lock:
# Dangling thread instances must still have their locks reset,
# because someone may join() them.
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst b/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
new file mode 100644
index 000000000000..3bc537e40ff6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
@@ -0,0 +1,4 @@
+Fix a race condition at Python shutdown when waiting for threads. Wait until
+the Python thread state of all non-daemon threads get deleted (join all
+non-daemon threads), rather than just wait until non-daemon Python threads
+complete.
[View Less]
1
0
https://github.com/python/cpython/commit/6f75c873752a16a7ad8f35855b1e29f59d…
commit: 6f75c873752a16a7ad8f35855b1e29f59d048e84
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T12:06:24+02:00
summary:
tbpo-36402: Fix threading.Thread._stop() (GH-14047)
Remove the _tstate_lock from _shutdown_locks, don't remove None.
files:
M Lib/test/test_threading.py
M Lib/threading.py
diff --git a/Lib/test/test_threading.py b/…
[View More]Lib/test/test_threading.py
index ad90010b8a38..0a0a62bdf9bf 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -738,6 +738,30 @@ def callback():
finally:
sys.settrace(old_trace)
+ @cpython_only
+ def test_shutdown_locks(self):
+ for daemon in (False, True):
+ with self.subTest(daemon=daemon):
+ event = threading.Event()
+ thread = threading.Thread(target=event.wait, daemon=daemon)
+
+ # Thread.start() must add lock to _shutdown_locks,
+ # but only for non-daemon thread
+ thread.start()
+ tstate_lock = thread._tstate_lock
+ if not daemon:
+ self.assertIn(tstate_lock, threading._shutdown_locks)
+ else:
+ self.assertNotIn(tstate_lock, threading._shutdown_locks)
+
+ # unblock the thread and join it
+ event.set()
+ thread.join()
+
+ # Thread._stop() must remove tstate_lock from _shutdown_locks.
+ # Daemon threads must never add it to _shutdown_locks.
+ self.assertNotIn(tstate_lock, threading._shutdown_locks)
+
class ThreadJoinOnShutdown(BaseTestCase):
diff --git a/Lib/threading.py b/Lib/threading.py
index 67926403770e..7c6d404bcd10 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -965,7 +965,7 @@ def _stop(self):
self._tstate_lock = None
if not self.daemon:
with _shutdown_locks_lock:
- _shutdown_locks.discard(self._tstate_lock)
+ _shutdown_locks.discard(lock)
def _delete(self):
"Remove current thread from the dict of currently running threads."
[View Less]
1
0
https://github.com/python/cpython/commit/b4b814b3988abf69f07f8492d82e855c51…
commit: b4b814b3988abf69f07f8492d82e855c51b2a75d
branch: master
author: Jeroen Demeyer <J.Demeyer(a)UGent.be>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-06-13T18:26:44+09:00
summary:
bpo-37231: optimize calls of special methods (GH-13973)
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-12-14-39-16.bpo-37231.LF41Es.rst
M Objects/typeobject.c
diff --git a/Misc/NEWS.d/next/Core and …
[View More]Builtins/2019-06-12-14-39-16.bpo-37231.LF41Es.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-12-14-39-16.bpo-37231.LF41Es.rst
new file mode 100644
index 000000000000..2e277194f3c2
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-12-14-39-16.bpo-37231.LF41Es.rst
@@ -0,0 +1,2 @@
+The dispatching of type slots to special methods (for example calling
+``__mul__`` when doing ``x * y``) has been made faster.
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 006df8d1f090..ba128a90778c 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -1440,16 +1440,19 @@ lookup_method(PyObject *self, _Py_Identifier *attrid, int *unbound)
return res;
}
-static PyObject*
-call_unbound(int unbound, PyObject *func, PyObject *self,
- PyObject **args, Py_ssize_t nargs)
+
+static inline PyObject*
+vectorcall_unbound(int unbound, PyObject *func,
+ PyObject *const *args, Py_ssize_t nargs)
{
- if (unbound) {
- return _PyObject_FastCall_Prepend(func, self, args, nargs);
- }
- else {
- return _PyObject_FastCall(func, args, nargs);
+ size_t nargsf = nargs;
+ if (!unbound) {
+ /* Skip self argument, freeing up args[0] to use for
+ * PY_VECTORCALL_ARGUMENTS_OFFSET */
+ args++;
+ nargsf = nargsf - 1 + PY_VECTORCALL_ARGUMENTS_OFFSET;
}
+ return _PyObject_Vectorcall(func, args, nargsf, NULL);
}
static PyObject*
@@ -1464,41 +1467,43 @@ call_unbound_noarg(int unbound, PyObject *func, PyObject *self)
}
}
-/* A variation of PyObject_CallMethod* that uses lookup_maybe_method()
- instead of PyObject_GetAttrString(). */
+/* A variation of PyObject_CallMethod* that uses lookup_method()
+ instead of PyObject_GetAttrString().
+
+ args is an argument vector of length nargs. The first element in this
+ vector is the special object "self" which is used for the method lookup */
static PyObject *
-call_method(PyObject *obj, _Py_Identifier *name,
- PyObject **args, Py_ssize_t nargs)
+vectorcall_method(_Py_Identifier *name,
+ PyObject *const *args, Py_ssize_t nargs)
{
+ assert(nargs >= 1);
int unbound;
- PyObject *func, *retval;
-
- func = lookup_method(obj, name, &unbound);
+ PyObject *self = args[0];
+ PyObject *func = lookup_method(self, name, &unbound);
if (func == NULL) {
return NULL;
}
- retval = call_unbound(unbound, func, obj, args, nargs);
+ PyObject *retval = vectorcall_unbound(unbound, func, args, nargs);
Py_DECREF(func);
return retval;
}
-/* Clone of call_method() that returns NotImplemented when the lookup fails. */
-
+/* Clone of vectorcall_method() that returns NotImplemented
+ * when the lookup fails. */
static PyObject *
-call_maybe(PyObject *obj, _Py_Identifier *name,
- PyObject **args, Py_ssize_t nargs)
+vectorcall_maybe(_Py_Identifier *name,
+ PyObject *const *args, Py_ssize_t nargs)
{
+ assert(nargs >= 1);
int unbound;
- PyObject *func, *retval;
-
- func = lookup_maybe_method(obj, name, &unbound);
+ PyObject *self = args[0];
+ PyObject *func = lookup_maybe_method(self, name, &unbound);
if (func == NULL) {
if (!PyErr_Occurred())
Py_RETURN_NOTIMPLEMENTED;
return NULL;
}
-
- retval = call_unbound(unbound, func, obj, args, nargs);
+ PyObject *retval = vectorcall_unbound(unbound, func, args, nargs);
Py_DECREF(func);
return retval;
}
@@ -6084,17 +6089,18 @@ add_tp_new_wrapper(PyTypeObject *type)
static PyObject * \
FUNCNAME(PyObject *self) \
{ \
+ PyObject* stack[1] = {self}; \
_Py_static_string(id, OPSTR); \
- return call_method(self, &id, NULL, 0); \
+ return vectorcall_method(&id, stack, 1); \
}
#define SLOT1(FUNCNAME, OPSTR, ARG1TYPE) \
static PyObject * \
FUNCNAME(PyObject *self, ARG1TYPE arg1) \
{ \
- PyObject* stack[1] = {arg1}; \
+ PyObject* stack[2] = {self, arg1}; \
_Py_static_string(id, OPSTR); \
- return call_method(self, &id, stack, 1); \
+ return vectorcall_method(&id, stack, 2); \
}
/* Boolean helper for SLOT1BINFULL().
@@ -6136,7 +6142,7 @@ method_is_overloaded(PyObject *left, PyObject *right, struct _Py_Identifier *nam
static PyObject * \
FUNCNAME(PyObject *self, PyObject *other) \
{ \
- PyObject* stack[1]; \
+ PyObject* stack[2]; \
_Py_static_string(op_id, OPSTR); \
_Py_static_string(rop_id, ROPSTR); \
int do_other = Py_TYPE(self) != Py_TYPE(other) && \
@@ -6148,23 +6154,26 @@ FUNCNAME(PyObject *self, PyObject *other) \
if (do_other && \
PyType_IsSubtype(Py_TYPE(other), Py_TYPE(self)) && \
method_is_overloaded(self, other, &rop_id)) { \
- stack[0] = self; \
- r = call_maybe(other, &rop_id, stack, 1); \
+ stack[0] = other; \
+ stack[1] = self; \
+ r = vectorcall_maybe(&rop_id, stack, 2); \
if (r != Py_NotImplemented) \
return r; \
Py_DECREF(r); \
do_other = 0; \
} \
- stack[0] = other; \
- r = call_maybe(self, &op_id, stack, 1); \
+ stack[0] = self; \
+ stack[1] = other; \
+ r = vectorcall_maybe(&op_id, stack, 2); \
if (r != Py_NotImplemented || \
Py_TYPE(other) == Py_TYPE(self)) \
return r; \
Py_DECREF(r); \
} \
if (do_other) { \
- stack[0] = self; \
- return call_maybe(other, &rop_id, stack, 1); \
+ stack[0] = other; \
+ stack[1] = self; \
+ return vectorcall_maybe(&rop_id, stack, 2); \
} \
Py_RETURN_NOTIMPLEMENTED; \
}
@@ -6175,7 +6184,8 @@ FUNCNAME(PyObject *self, PyObject *other) \
static Py_ssize_t
slot_sq_length(PyObject *self)
{
- PyObject *res = call_method(self, &PyId___len__, NULL, 0);
+ PyObject* stack[1] = {self};
+ PyObject *res = vectorcall_method(&PyId___len__, stack, 1);
Py_ssize_t len;
if (res == NULL)
@@ -6202,14 +6212,12 @@ slot_sq_length(PyObject *self)
static PyObject *
slot_sq_item(PyObject *self, Py_ssize_t i)
{
- PyObject *retval;
- PyObject *args[1];
PyObject *ival = PyLong_FromSsize_t(i);
if (ival == NULL) {
return NULL;
}
- args[0] = ival;
- retval = call_method(self, &PyId___getitem__, args, 1);
+ PyObject *stack[2] = {self, ival};
+ PyObject *retval = vectorcall_method(&PyId___getitem__, stack, 2);
Py_DECREF(ival);
return retval;
}
@@ -6217,7 +6225,7 @@ slot_sq_item(PyObject *self, Py_ssize_t i)
static int
slot_sq_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
{
- PyObject *stack[2];
+ PyObject *stack[3];
PyObject *res;
PyObject *index_obj;
@@ -6226,13 +6234,14 @@ slot_sq_ass_item(PyObject *self, Py_ssize_t index, PyObject *value)
return -1;
}
- stack[0] = index_obj;
+ stack[0] = self;
+ stack[1] = index_obj;
if (value == NULL) {
- res = call_method(self, &PyId___delitem__, stack, 1);
+ res = vectorcall_method(&PyId___delitem__, stack, 2);
}
else {
- stack[1] = value;
- res = call_method(self, &PyId___setitem__, stack, 2);
+ stack[2] = value;
+ res = vectorcall_method(&PyId___setitem__, stack, 3);
}
Py_DECREF(index_obj);
@@ -6259,8 +6268,8 @@ slot_sq_contains(PyObject *self, PyObject *value)
return -1;
}
if (func != NULL) {
- PyObject *args[1] = {value};
- res = call_unbound(unbound, func, self, args, 1);
+ PyObject *args[2] = {self, value};
+ res = vectorcall_unbound(unbound, func, args, 2);
Py_DECREF(func);
if (res != NULL) {
result = PyObject_IsTrue(res);
@@ -6282,16 +6291,17 @@ SLOT1(slot_mp_subscript, "__getitem__", PyObject *)
static int
slot_mp_ass_subscript(PyObject *self, PyObject *key, PyObject *value)
{
- PyObject *stack[2];
+ PyObject *stack[3];
PyObject *res;
- stack[0] = key;
+ stack[0] = self;
+ stack[1] = key;
if (value == NULL) {
- res = call_method(self, &PyId___delitem__, stack, 1);
+ res = vectorcall_method(&PyId___delitem__, stack, 2);
}
else {
- stack[1] = value;
- res = call_method(self, &PyId___setitem__, stack, 2);
+ stack[2] = value;
+ res = vectorcall_method(&PyId___setitem__, stack, 3);
}
if (res == NULL)
@@ -6324,8 +6334,8 @@ slot_nb_power(PyObject *self, PyObject *other, PyObject *modulus)
slot_nb_power, so check before calling self.__pow__. */
if (Py_TYPE(self)->tp_as_number != NULL &&
Py_TYPE(self)->tp_as_number->nb_power == slot_nb_power) {
- PyObject* stack[2] = {other, modulus};
- return call_method(self, &PyId___pow__, stack, 2);
+ PyObject* stack[3] = {self, other, modulus};
+ return vectorcall_method(&PyId___pow__, stack, 3);
}
Py_RETURN_NOTIMPLEMENTED;
}
@@ -6392,7 +6402,8 @@ static PyObject *
slot_nb_index(PyObject *self)
{
_Py_IDENTIFIER(__index__);
- return call_method(self, &PyId___index__, NULL, 0);
+ PyObject *stack[1] = {self};
+ return vectorcall_method(&PyId___index__, stack, 1);
}
@@ -6414,9 +6425,9 @@ SLOT1(slot_nb_inplace_remainder, "__imod__", PyObject *)
static PyObject *
slot_nb_inplace_power(PyObject *self, PyObject * arg1, PyObject *arg2)
{
- PyObject *stack[1] = {arg1};
+ PyObject *stack[2] = {self, arg1};
_Py_IDENTIFIER(__ipow__);
- return call_method(self, &PyId___ipow__, stack, 1);
+ return vectorcall_method(&PyId___ipow__, stack, 2);
}
SLOT1(slot_nb_inplace_lshift, "__ilshift__", PyObject *)
SLOT1(slot_nb_inplace_rshift, "__irshift__", PyObject *)
@@ -6533,8 +6544,8 @@ slot_tp_call(PyObject *self, PyObject *args, PyObject *kwds)
static PyObject *
slot_tp_getattro(PyObject *self, PyObject *name)
{
- PyObject *stack[1] = {name};
- return call_method(self, &PyId___getattribute__, stack, 1);
+ PyObject *stack[2] = {self, name};
+ return vectorcall_method(&PyId___getattribute__, stack, 2);
}
static PyObject *
@@ -6601,18 +6612,19 @@ slot_tp_getattr_hook(PyObject *self, PyObject *name)
static int
slot_tp_setattro(PyObject *self, PyObject *name, PyObject *value)
{
- PyObject *stack[2];
+ PyObject *stack[3];
PyObject *res;
_Py_IDENTIFIER(__delattr__);
_Py_IDENTIFIER(__setattr__);
- stack[0] = name;
+ stack[0] = self;
+ stack[1] = name;
if (value == NULL) {
- res = call_method(self, &PyId___delattr__, stack, 1);
+ res = vectorcall_method(&PyId___delattr__, stack, 2);
}
else {
- stack[1] = value;
- res = call_method(self, &PyId___setattr__, stack, 2);
+ stack[2] = value;
+ res = vectorcall_method(&PyId___setattr__, stack, 3);
}
if (res == NULL)
return -1;
@@ -6641,8 +6653,8 @@ slot_tp_richcompare(PyObject *self, PyObject *other, int op)
Py_RETURN_NOTIMPLEMENTED;
}
- PyObject *args[1] = {other};
- res = call_unbound(unbound, func, self, args, 1);
+ PyObject *stack[2] = {self, other};
+ res = vectorcall_unbound(unbound, func, stack, 2);
Py_DECREF(func);
return res;
}
@@ -6685,7 +6697,8 @@ static PyObject *
slot_tp_iternext(PyObject *self)
{
_Py_IDENTIFIER(__next__);
- return call_method(self, &PyId___next__, NULL, 0);
+ PyObject *stack[1] = {self};
+ return vectorcall_method(&PyId___next__, stack, 1);
}
static PyObject *
@@ -6713,18 +6726,19 @@ slot_tp_descr_get(PyObject *self, PyObject *obj, PyObject *type)
static int
slot_tp_descr_set(PyObject *self, PyObject *target, PyObject *value)
{
- PyObject* stack[2];
+ PyObject* stack[3];
PyObject *res;
_Py_IDENTIFIER(__delete__);
_Py_IDENTIFIER(__set__);
- stack[0] = target;
+ stack[0] = self;
+ stack[1] = target;
if (value == NULL) {
- res = call_method(self, &PyId___delete__, stack, 1);
+ res = vectorcall_method(&PyId___delete__, stack, 2);
}
else {
- stack[1] = value;
- res = call_method(self, &PyId___set__, stack, 2);
+ stack[2] = value;
+ res = vectorcall_method(&PyId___set__, stack, 3);
}
if (res == NULL)
return -1;
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/032bf30643fff49b5595b53f9c1ce5b2cd…
commit: 032bf30643fff49b5595b53f9c1ce5b2cd2df504
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T00:46:01-07:00
summary:
bpo-37253: Remove PyAST_obj2mod_ex() function (GH-14020)
PyAST_obj2mod_ex() is similar to PyAST_obj2mod() with an additional
'feature_version' parameter which is unused.
(cherry …
[View More]picked from commit 022ac0a497b668d8b15e34e582a6396ead1a35e1)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
M Include/Python-ast.h
M Parser/asdl_c.py
M Python/Python-ast.c
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index 490d3b0846ab..62626503403b 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -707,7 +707,6 @@ type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena);
PyObject* PyAST_mod2obj(mod_ty t);
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
-mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version);
int PyAST_Check(PyObject* obj);
#ifdef __cplusplus
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 582c6ca57b65..f4fa271b6595 100644
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -1190,11 +1190,6 @@ class PartingShots(StaticVisitor):
/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
-{
- return PyAST_obj2mod_ex(ast, arena, mode, PY_MINOR_VERSION);
-}
-
-mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version)
{
mod_ty res;
PyObject *req_type[3];
@@ -1280,7 +1275,6 @@ def main(srcfile, dump_module=False):
f.write("\n")
f.write("PyObject* PyAST_mod2obj(mod_ty t);\n")
f.write("mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);\n")
- f.write("mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version);\n")
f.write("int PyAST_Check(PyObject* obj);\n")
f.write('\n')
f.write('#ifdef __cplusplus\n')
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index dc2b1304f1f2..0774c58e2d23 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -8990,11 +8990,6 @@ PyObject* PyAST_mod2obj(mod_ty t)
/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
-{
- return PyAST_obj2mod_ex(ast, arena, mode, PY_MINOR_VERSION);
-}
-
-mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version)
{
mod_ty res;
PyObject *req_type[3];
[View Less]
1
0

bpo-35070: test_getgrouplist may fail on macOS if too many groups (GH-13071)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/c80183e6ca8c0ce834fc6444a71c7f31a3…
commit: c80183e6ca8c0ce834fc6444a71c7f31a3eb05b7
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T00:27:23-07:00
summary:
bpo-35070: test_getgrouplist may fail on macOS if too many groups (GH-13071)
(cherry picked from commit 8725c83ed5ca8959195ad8326db99d564a921749)
Co-authored-by: Jeffrey Kintscher &…
[View More]lt;49998481+websurfer5(a)users.noreply.github.com>
files:
A Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
M Modules/posixmodule.c
diff --git a/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst b/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
new file mode 100644
index 000000000000..e823f1d469cc
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
@@ -0,0 +1,2 @@
+posix.getgrouplist() now works correctly when the user belongs to
+NGROUPS_MAX supplemental groups. Patch by Jeffrey Kintscher.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 8f6cffffcdfb..7a471801db39 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -6722,6 +6722,13 @@ os_getpid_impl(PyObject *module)
}
#endif /* HAVE_GETPID */
+#ifdef NGROUPS_MAX
+#define MAX_GROUPS NGROUPS_MAX
+#else
+ /* defined to be 16 on Solaris7, so this should be a small number */
+#define MAX_GROUPS 64
+#endif
+
#ifdef HAVE_GETGROUPLIST
/* AC 3.5: funny apple logic below */
@@ -6734,13 +6741,6 @@ Returns a list of groups to which a user belongs.\n\n\
static PyObject *
posix_getgrouplist(PyObject *self, PyObject *args)
{
-#ifdef NGROUPS_MAX
-#define MAX_GROUPS NGROUPS_MAX
-#else
- /* defined to be 16 on Solaris7, so this should be a small number */
-#define MAX_GROUPS 64
-#endif
-
const char *user;
int i, ngroups;
PyObject *list;
@@ -6749,7 +6749,16 @@ posix_getgrouplist(PyObject *self, PyObject *args)
#else
gid_t *groups, basegid;
#endif
- ngroups = MAX_GROUPS;
+
+ /*
+ * NGROUPS_MAX is defined by POSIX.1 as the maximum
+ * number of supplimental groups a users can belong to.
+ * We have to increment it by one because
+ * getgrouplist() returns both the supplemental groups
+ * and the primary group, i.e. all of the groups the
+ * user belongs to.
+ */
+ ngroups = 1 + MAX_GROUPS;
#ifdef __APPLE__
if (!PyArg_ParseTuple(args, "si:getgrouplist", &user, &basegid))
@@ -6818,13 +6827,6 @@ os_getgroups_impl(PyObject *module)
/*[clinic end generated code: output=42b0c17758561b56 input=d3f109412e6a155c]*/
{
PyObject *result = NULL;
-
-#ifdef NGROUPS_MAX
-#define MAX_GROUPS NGROUPS_MAX
-#else
- /* defined to be 16 on Solaris7, so this should be a small number */
-#define MAX_GROUPS 64
-#endif
gid_t grouplist[MAX_GROUPS];
/* On MacOSX getgroups(2) can return more than MAX_GROUPS results
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/022ac0a497b668d8b15e34e582a6396ead…
commit: 022ac0a497b668d8b15e34e582a6396ead1a35e1
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T09:18:45+02:00
summary:
bpo-37253: Remove PyAST_obj2mod_ex() function (GH-14020)
PyAST_obj2mod_ex() is similar to PyAST_obj2mod() with an additional
'feature_version' parameter which is unused.
files:
M Include/Python-ast.h
M Parser/…
[View More]asdl_c.py
M Python/Python-ast.c
diff --git a/Include/Python-ast.h b/Include/Python-ast.h
index 490d3b0846ab..62626503403b 100644
--- a/Include/Python-ast.h
+++ b/Include/Python-ast.h
@@ -707,7 +707,6 @@ type_ignore_ty _Py_TypeIgnore(int lineno, string tag, PyArena *arena);
PyObject* PyAST_mod2obj(mod_ty t);
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);
-mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version);
int PyAST_Check(PyObject* obj);
#ifdef __cplusplus
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index 582c6ca57b65..f4fa271b6595 100644
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -1190,11 +1190,6 @@ class PartingShots(StaticVisitor):
/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
-{
- return PyAST_obj2mod_ex(ast, arena, mode, PY_MINOR_VERSION);
-}
-
-mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version)
{
mod_ty res;
PyObject *req_type[3];
@@ -1280,7 +1275,6 @@ def main(srcfile, dump_module=False):
f.write("\n")
f.write("PyObject* PyAST_mod2obj(mod_ty t);\n")
f.write("mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode);\n")
- f.write("mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version);\n")
f.write("int PyAST_Check(PyObject* obj);\n")
f.write('\n')
f.write('#ifdef __cplusplus\n')
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index dc2b1304f1f2..0774c58e2d23 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -8990,11 +8990,6 @@ PyObject* PyAST_mod2obj(mod_ty t)
/* mode is 0 for "exec", 1 for "eval" and 2 for "single" input */
mod_ty PyAST_obj2mod(PyObject* ast, PyArena* arena, int mode)
-{
- return PyAST_obj2mod_ex(ast, arena, mode, PY_MINOR_VERSION);
-}
-
-mod_ty PyAST_obj2mod_ex(PyObject* ast, PyArena* arena, int mode, int feature_version)
{
mod_ty res;
PyObject *req_type[3];
[View Less]
1
0

bpo-35070: test_getgrouplist may fail on macOS if too many groups (GH-13071)
by Miss Islington (bot) June 13, 2019
by Miss Islington (bot) June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/b4c8ef7c67712c6639ee896bf7cb8ca1c2…
commit: b4c8ef7c67712c6639ee896bf7cb8ca1c204946d
branch: 3.7
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T00:18:26-07:00
summary:
bpo-35070: test_getgrouplist may fail on macOS if too many groups (GH-13071)
(cherry picked from commit 8725c83ed5ca8959195ad8326db99d564a921749)
Co-authored-by: Jeffrey Kintscher &…
[View More]lt;49998481+websurfer5(a)users.noreply.github.com>
files:
A Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
M Modules/posixmodule.c
diff --git a/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst b/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
new file mode 100644
index 000000000000..e823f1d469cc
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
@@ -0,0 +1,2 @@
+posix.getgrouplist() now works correctly when the user belongs to
+NGROUPS_MAX supplemental groups. Patch by Jeffrey Kintscher.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index e7a1f987def9..b758e766a4d0 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -6120,6 +6120,13 @@ os_getpid_impl(PyObject *module)
}
#endif /* HAVE_GETPID */
+#ifdef NGROUPS_MAX
+#define MAX_GROUPS NGROUPS_MAX
+#else
+ /* defined to be 16 on Solaris7, so this should be a small number */
+#define MAX_GROUPS 64
+#endif
+
#ifdef HAVE_GETGROUPLIST
/* AC 3.5: funny apple logic below */
@@ -6132,13 +6139,6 @@ Returns a list of groups to which a user belongs.\n\n\
static PyObject *
posix_getgrouplist(PyObject *self, PyObject *args)
{
-#ifdef NGROUPS_MAX
-#define MAX_GROUPS NGROUPS_MAX
-#else
- /* defined to be 16 on Solaris7, so this should be a small number */
-#define MAX_GROUPS 64
-#endif
-
const char *user;
int i, ngroups;
PyObject *list;
@@ -6147,7 +6147,16 @@ posix_getgrouplist(PyObject *self, PyObject *args)
#else
gid_t *groups, basegid;
#endif
- ngroups = MAX_GROUPS;
+
+ /*
+ * NGROUPS_MAX is defined by POSIX.1 as the maximum
+ * number of supplimental groups a users can belong to.
+ * We have to increment it by one because
+ * getgrouplist() returns both the supplemental groups
+ * and the primary group, i.e. all of the groups the
+ * user belongs to.
+ */
+ ngroups = 1 + MAX_GROUPS;
#ifdef __APPLE__
if (!PyArg_ParseTuple(args, "si:getgrouplist", &user, &basegid))
@@ -6216,13 +6225,6 @@ os_getgroups_impl(PyObject *module)
/*[clinic end generated code: output=42b0c17758561b56 input=d3f109412e6a155c]*/
{
PyObject *result = NULL;
-
-#ifdef NGROUPS_MAX
-#define MAX_GROUPS NGROUPS_MAX
-#else
- /* defined to be 16 on Solaris7, so this should be a small number */
-#define MAX_GROUPS 64
-#endif
gid_t grouplist[MAX_GROUPS];
/* On MacOSX getgroups(2) can return more than MAX_GROUPS results
[View Less]
1
0

bpo-35070: test_getgrouplist may fail on macOS if too many groups (GH-13071)
by Ned Deily June 13, 2019
by Ned Deily June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/8725c83ed5ca8959195ad8326db99d564a…
commit: 8725c83ed5ca8959195ad8326db99d564a921749
branch: master
author: Jeffrey Kintscher <49998481+websurfer5(a)users.noreply.github.com>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-13T03:01:29-04:00
summary:
bpo-35070: test_getgrouplist may fail on macOS if too many groups (GH-13071)
files:
A Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
M Modules/posixmodule.c
diff --git …
[View More]a/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst b/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
new file mode 100644
index 000000000000..e823f1d469cc
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-05-09-18-50-55.bpo-35070.4vaqNL.rst
@@ -0,0 +1,2 @@
+posix.getgrouplist() now works correctly when the user belongs to
+NGROUPS_MAX supplemental groups. Patch by Jeffrey Kintscher.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 8f6cffffcdfb..7a471801db39 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -6722,6 +6722,13 @@ os_getpid_impl(PyObject *module)
}
#endif /* HAVE_GETPID */
+#ifdef NGROUPS_MAX
+#define MAX_GROUPS NGROUPS_MAX
+#else
+ /* defined to be 16 on Solaris7, so this should be a small number */
+#define MAX_GROUPS 64
+#endif
+
#ifdef HAVE_GETGROUPLIST
/* AC 3.5: funny apple logic below */
@@ -6734,13 +6741,6 @@ Returns a list of groups to which a user belongs.\n\n\
static PyObject *
posix_getgrouplist(PyObject *self, PyObject *args)
{
-#ifdef NGROUPS_MAX
-#define MAX_GROUPS NGROUPS_MAX
-#else
- /* defined to be 16 on Solaris7, so this should be a small number */
-#define MAX_GROUPS 64
-#endif
-
const char *user;
int i, ngroups;
PyObject *list;
@@ -6749,7 +6749,16 @@ posix_getgrouplist(PyObject *self, PyObject *args)
#else
gid_t *groups, basegid;
#endif
- ngroups = MAX_GROUPS;
+
+ /*
+ * NGROUPS_MAX is defined by POSIX.1 as the maximum
+ * number of supplimental groups a users can belong to.
+ * We have to increment it by one because
+ * getgrouplist() returns both the supplemental groups
+ * and the primary group, i.e. all of the groups the
+ * user belongs to.
+ */
+ ngroups = 1 + MAX_GROUPS;
#ifdef __APPLE__
if (!PyArg_ParseTuple(args, "si:getgrouplist", &user, &basegid))
@@ -6818,13 +6827,6 @@ os_getgroups_impl(PyObject *module)
/*[clinic end generated code: output=42b0c17758561b56 input=d3f109412e6a155c]*/
{
PyObject *result = NULL;
-
-#ifdef NGROUPS_MAX
-#define MAX_GROUPS NGROUPS_MAX
-#else
- /* defined to be 16 on Solaris7, so this should be a small number */
-#define MAX_GROUPS 64
-#endif
gid_t grouplist[MAX_GROUPS];
/* On MacOSX getgroups(2) can return more than MAX_GROUPS results
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/905e19a9bf9afd6439ea44fc6a4f3c8631…
commit: 905e19a9bf9afd6439ea44fc6a4f3c8631750d6d
branch: master
author: Makdon <makdon(a)makdon.me>
committer: Ned Deily <nad(a)python.org>
date: 2019-06-13T01:04:13-04:00
summary:
bpo-37216: update version to 3.9 in mac using document (GH-13966)
files:
M Doc/using/mac.rst
diff --git a/Doc/using/mac.rst b/Doc/using/mac.rst
index bc022fa58c04..baf737ddaa91 100644
--- a/Doc/using/mac.rst
+++ b/Doc/using/…
[View More]mac.rst
@@ -25,7 +25,7 @@ there.
What you get after installing is a number of things:
-* A :file:`MacPython 3.6` folder in your :file:`Applications` folder. In here
+* A :file:`Python 3.9` folder in your :file:`Applications` folder. In here
you find IDLE, the development environment that is a standard part of official
Python distributions; PythonLauncher, which handles double-clicking Python
scripts from the Finder; and the "Build Applet" tool, which allows you to
@@ -93,7 +93,7 @@ aware of: programs that talk to the Aqua window manager (in other words,
anything that has a GUI) need to be run in a special way. Use :program:`pythonw`
instead of :program:`python` to start such scripts.
-With Python 3.6, you can use either :program:`python` or :program:`pythonw`.
+With Python 3.9, you can use either :program:`python` or :program:`pythonw`.
Configuration
[View Less]
1
0

[3.6] Doc fix: duplicate object description of email.message (GH-13742) (GH-14041)
by Ned Deily June 13, 2019
by Ned Deily June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/1af68a65194a26d959161df33fc25ade7f…
commit: 1af68a65194a26d959161df33fc25ade7f812009
branch: 3.6
author: Ned Deily <nad(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T00:35:19-04:00
summary:
[3.6] Doc fix: duplicate object description of email.message (GH-13742) (GH-14041)
files:
M Doc/library/email.compat32-message.rst
diff --git a/Doc/library/email.compat32-message.rst b/Doc/library/email.compat32-message.rst
…
[View More]index ed380151769a..8d1c2f5daffb 100644
--- a/Doc/library/email.compat32-message.rst
+++ b/Doc/library/email.compat32-message.rst
@@ -6,6 +6,7 @@
.. module:: email.message
:synopsis: The base class representing email messages in a fashion
backward compatible with python3.2
+ :noindex:
The :class:`Message` class is very similar to the
[View Less]
1
0
https://github.com/python/cpython/commit/d1c85a27ea9fe70163cad3443d5e534d94…
commit: d1c85a27ea9fe70163cad3443d5e534d94f08284
branch: master
author: Tim Peters <tim.peters(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-12T22:41:03-05:00
summary:
bpo-37257: obmalloc: stop simple arena thrashing (#14039)
GH-14039: allow (no more than) one wholly empty arena on the usable_arenas list.
This prevents thrashing in some easily-provoked simple cases that could end …
[View More]up creating and destroying an arena on each loop iteration in client code. Intuitively, if the only arena on the list becomes empty, it makes scant sense to give it back to the system unless we know we'll never need another free pool again before another arena frees a pool. If the latter obtains, then - yes - this will "waste" an arena.
files:
A Misc/NEWS.d/next/Core and Builtins/2019-06-13-02-27-12.bpo-37257.IMxDvT.rst
M Objects/obmalloc.c
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-06-13-02-27-12.bpo-37257.IMxDvT.rst b/Misc/NEWS.d/next/Core and Builtins/2019-06-13-02-27-12.bpo-37257.IMxDvT.rst
new file mode 100644
index 000000000000..ac8d90fd2998
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-06-13-02-27-12.bpo-37257.IMxDvT.rst
@@ -0,0 +1 @@
+Python's small object allocator (``obmalloc.c``) now allows (no more than) one empty arena to remain available for immediate reuse, without returning it to the OS. This prevents thrashing in simple loops where an arena could be created and destroyed anew on each iteration.
\ No newline at end of file
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
index fc7bef619946..622da3ad08fc 100644
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -1758,7 +1758,12 @@ pymalloc_free(void *ctx, void *p)
/* All the rest is arena management. We just freed
* a pool, and there are 4 cases for arena mgmt:
* 1. If all the pools are free, return the arena to
- * the system free().
+ * the system free(). Except if this is the last
+ * arena in the list, keep it to avoid thrashing:
+ * keeping one wholly free arena in the list avoids
+ * pathological cases where a simple loop would
+ * otherwise provoke needing to allocate and free an
+ * arena on every iteration. See bpo-37257.
* 2. If this is the only free pool in the arena,
* add the arena back to the `usable_arenas` list.
* 3. If the "next" arena has a smaller count of free
@@ -1767,7 +1772,7 @@ pymalloc_free(void *ctx, void *p)
* nfreepools.
* 4. Else there's nothing more to do.
*/
- if (nf == ao->ntotalpools) {
+ if (nf == ao->ntotalpools && ao->nextarena != NULL) {
/* Case 1. First unlink ao from usable_arenas.
*/
assert(ao->prevarena == NULL ||
[View Less]
1
0
https://github.com/python/cpython/commit/3a2883c313be3aff34c61a42e586f8507b…
commit: 3a2883c313be3aff34c61a42e586f8507ba5945f
branch: master
author: Ned Deily <nad(a)python.org>
committer: GitHub <noreply(a)github.com>
date: 2019-06-12T23:31:45-04:00
summary:
Add 3.9 whatsnew file (GH-14040)
files:
A Doc/whatsnew/3.9.rst
M Doc/whatsnew/index.rst
diff --git a/Doc/whatsnew/3.9.rst b/Doc/whatsnew/3.9.rst
new file mode 100644
index 000000000000..999519f0ce07
--- /dev/null
+++ b/Doc/…
[View More]whatsnew/3.9.rst
@@ -0,0 +1,115 @@
+****************************
+ What's New In Python 3.9
+****************************
+
+:Release: |release|
+:Date: |today|
+
+.. Rules for maintenance:
+
+ * Anyone can add text to this document. Do not spend very much time
+ on the wording of your changes, because your text will probably
+ get rewritten to some degree.
+
+ * The maintainer will go through Misc/NEWS periodically and add
+ changes; it's therefore more important to add your changes to
+ Misc/NEWS than to this file.
+
+ * This is not a complete list of every single change; completeness
+ is the purpose of Misc/NEWS. Some changes I consider too small
+ or esoteric to include. If such a change is added to the text,
+ I'll just remove it. (This is another reason you shouldn't spend
+ too much time on writing your addition.)
+
+ * If you want to draw your new text to the attention of the
+ maintainer, add 'XXX' to the beginning of the paragraph or
+ section.
+
+ * It's OK to just add a fragmentary note about a change. For
+ example: "XXX Describe the transmogrify() function added to the
+ socket module." The maintainer will research the change and
+ write the necessary text.
+
+ * You can comment out your additions if you like, but it's not
+ necessary (especially when a final release is some months away).
+
+ * Credit the author of a patch or bugfix. Just the name is
+ sufficient; the e-mail address isn't necessary.
+
+ * It's helpful to add the bug/patch number as a comment:
+
+ XXX Describe the transmogrify() function added to the socket
+ module.
+ (Contributed by P.Y. Developer in :issue:`12345`.)
+
+ This saves the maintainer the effort of going through the Mercurial log
+ when researching a change.
+
+This article explains the new features in Python 3.9, compared to 3.8.
+
+For full details, see the :source:`Misc/NEWS` file.
+
+.. note::
+
+ Prerelease users should be aware that this document is currently in draft
+ form. It will be updated substantially as Python 3.9 moves towards release,
+ so it's worth checking back even after reading earlier versions.
+
+
+Summary -- Release highlights
+=============================
+
+.. This section singles out the most important changes in Python 3.9.
+ Brevity is key.
+
+
+.. PEP-sized items next.
+
+
+
+New Features
+============
+
+
+
+Other Language Changes
+======================
+
+
+
+New Modules
+===========
+
+* None yet.
+
+
+Improved Modules
+================
+
+
+Optimizations
+=============
+
+
+Build and C API Changes
+=======================
+
+
+
+Deprecated
+==========
+
+
+
+Removed
+=======
+
+
+
+Porting to Python 3.9
+=====================
+
+This section lists previously described changes and other bugfixes
+that may require changes to your code.
+
+
diff --git a/Doc/whatsnew/index.rst b/Doc/whatsnew/index.rst
index b1160c039821..954e38bc6f1e 100644
--- a/Doc/whatsnew/index.rst
+++ b/Doc/whatsnew/index.rst
@@ -11,6 +11,7 @@ anyone wishing to stay up-to-date after a new release.
.. toctree::
:maxdepth: 2
+ 3.9.rst
3.8.rst
3.7.rst
3.6.rst
[View Less]
1
0

[3.8] bpo-37253: Document PyCompilerFlags.cf_feature_version (GH-14019) (GH-14038)
by Victor Stinner June 13, 2019
by Victor Stinner June 13, 2019
June 13, 2019
https://github.com/python/cpython/commit/f9445a391e6a91103fbe88bff4d3adc07f…
commit: f9445a391e6a91103fbe88bff4d3adc07f526c73
branch: 3.8
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T02:40:41+02:00
summary:
[3.8] bpo-37253: Document PyCompilerFlags.cf_feature_version (GH-14019) (GH-14038)
* Update PyCompilerFlags structure documentation.
* Document the new cf_feature_version field in the Changes in the C
API section of …
[View More]the What's New in Python 3.8 doc.
(cherry picked from commit 2c9b498759f4fc74da82a0a96d059d666fa73f16)
files:
M Doc/c-api/veryhigh.rst
M Doc/whatsnew/3.8.rst
diff --git a/Doc/c-api/veryhigh.rst b/Doc/c-api/veryhigh.rst
index 3fe0ae47aac3..e6704ddeca09 100644
--- a/Doc/c-api/veryhigh.rst
+++ b/Doc/c-api/veryhigh.rst
@@ -388,11 +388,22 @@ the same library that the Python runtime is using.
Whenever ``PyCompilerFlags *flags`` is *NULL*, :attr:`cf_flags` is treated as
equal to ``0``, and any modification due to ``from __future__ import`` is
- discarded. ::
+ discarded.
- struct PyCompilerFlags {
- int cf_flags;
- }
+ .. c:member:: int cf_flags
+
+ Compiler flags.
+
+ .. c:member:: int cf_feature_version
+
+ *cf_feature_version* is the minor Python version. It should be
+ initialized to ``PY_MINOR_VERSION``.
+
+ The field is ignored by default, it is used if and only if
+ ``PyCF_ONLY_AST`` flag is set in *cf_flags*.
+
+ .. versionchanged:: 3.8
+ Added *cf_feature_version* field.
.. c:var:: int CO_FUTURE_DIVISION
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 7e5d2f1f2d02..9989a0917434 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -1293,6 +1293,11 @@ Changes in the Python API
Changes in the C API
--------------------
+* The :c:type:`PyCompilerFlags` structure gets a new *cf_feature_version*
+ field. It should be initialized to ``PY_MINOR_VERSION``. The field is ignored
+ by default, it is used if and only if ``PyCF_ONLY_AST`` flag is set in
+ *cf_flags*.
+
* The :c:func:`PyEval_ReInitThreads` function has been removed from the C API.
It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child`
instead.
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/92e836c7dcaf74f7b8617250414224d24d…
commit: 92e836c7dcaf74f7b8617250414224d24d1eb1f2
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-12T17:36:03-07:00
summary:
bpo-37253: Add _PyCompilerFlags_INIT macro (GH-14018)
Add a new _PyCompilerFlags_INIT macro to initialize PyCompilerFlags
variables, rather than initializing cf_flags and …
[View More]cf_feature_version
explicitly in each variable.
(cherry picked from commit 37d66d7d4bc7dbac9809d69966a774ebb32563be)
Co-authored-by: Victor Stinner <vstinner(a)redhat.com>
files:
M Include/compile.h
M Modules/main.c
M Modules/parsermodule.c
M Modules/symtablemodule.c
M Python/ast.c
M Python/bltinmodule.c
M Python/compile.c
M Python/pythonrun.c
diff --git a/Include/compile.h b/Include/compile.h
index a833caa06b9d..1cda955c1425 100644
--- a/Include/compile.h
+++ b/Include/compile.h
@@ -30,6 +30,9 @@ typedef struct {
int cf_flags; /* bitmask of CO_xxx flags relevant to future */
int cf_feature_version; /* minor Python version (PyCF_ONLY_AST) */
} PyCompilerFlags;
+
+#define _PyCompilerFlags_INIT \
+ (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
#endif
/* Future feature support */
diff --git a/Modules/main.c b/Modules/main.c
index 6b9406f78666..853afedd7b90 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -524,7 +524,7 @@ pymain_run_python(int *exitcode)
}
}
- PyCompilerFlags cf = {.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION};
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
pymain_header(config);
pymain_import_readline(config);
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 36f921419153..079d00f32aa6 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -336,8 +336,7 @@ parser_newstobject(node *st, int type)
if (o != 0) {
o->st_node = st;
o->st_type = type;
- o->st_flags.cf_flags = 0;
- o->st_flags.cf_feature_version = PY_MINOR_VERSION;
+ o->st_flags = _PyCompilerFlags_INIT;
}
else {
PyNode_Free(st);
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index d66cb44f69bd..9180f185e1e8 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -30,11 +30,10 @@ _symtable_symtable_impl(PyObject *module, PyObject *source,
struct symtable *st;
PyObject *t;
int start;
- PyCompilerFlags cf;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
PyObject *source_copy = NULL;
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
const char *str = _Py_SourceAsString(source, "symtable", "string or bytes", &cf, &source_copy);
if (str == NULL) {
diff --git a/Python/ast.c b/Python/ast.c
index df9242977e3f..2a5941572148 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -4845,7 +4845,6 @@ fstring_compile_expr(const char *expr_start, const char *expr_end,
struct compiling *c, const node *n)
{
- PyCompilerFlags cf;
node *mod_n;
mod_ty mod;
char *str;
@@ -4887,8 +4886,8 @@ fstring_compile_expr(const char *expr_start, const char *expr_end,
str[len+1] = ')';
str[len+2] = 0;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = PyCF_ONLY_AST;
- cf.cf_feature_version = PY_MINOR_VERSION;
mod_n = PyParser_SimpleParseStringFlagsFilename(str, "<fstring>",
Py_eval_input, 0);
if (!mod_n) {
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index abf807a408f7..c3e30593475d 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -723,12 +723,11 @@ builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
const char *str;
int compile_mode = -1;
int is_ast;
- PyCompilerFlags cf;
int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
PyObject *result;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
if (feature_version >= 0 && (flags & PyCF_ONLY_AST)) {
cf.cf_feature_version = feature_version;
}
@@ -889,7 +888,6 @@ builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
{
PyObject *result, *source_copy;
const char *str;
- PyCompilerFlags cf;
if (locals != Py_None && !PyMapping_Check(locals)) {
PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
@@ -941,8 +939,8 @@ builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
return PyEval_EvalCode(source, globals, locals);
}
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
str = _Py_SourceAsString(source, "eval", "string, bytes or code", &cf, &source_copy);
if (str == NULL)
return NULL;
@@ -1032,9 +1030,8 @@ builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
else {
PyObject *source_copy;
const char *str;
- PyCompilerFlags cf;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
str = _Py_SourceAsString(source, "exec",
"string, bytes or code", &cf,
&source_copy);
diff --git a/Python/compile.c b/Python/compile.c
index 9e4a2094ac9b..4d3ecfe5d6fc 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -309,7 +309,7 @@ PyAST_CompileObject(mod_ty mod, PyObject *filename, PyCompilerFlags *flags,
{
struct compiler c;
PyCodeObject *co = NULL;
- PyCompilerFlags local_flags;
+ PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
int merged;
PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
@@ -332,8 +332,6 @@ PyAST_CompileObject(mod_ty mod, PyObject *filename, PyCompilerFlags *flags,
if (c.c_future == NULL)
goto finally;
if (!flags) {
- local_flags.cf_flags = 0;
- local_flags.cf_feature_version = PY_MINOR_VERSION;
flags = &local_flags;
}
merged = c.c_future->ff_features | flags->cf_flags;
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 784c15bb4b22..8f3ee19279d9 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -91,7 +91,7 @@ PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *
{
PyObject *filename, *v;
int ret, err;
- PyCompilerFlags local_flags;
+ PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
int nomem_count = 0;
#ifdef Py_REF_DEBUG
int show_ref_count = _PyInterpreterState_Get()->config.show_ref_count;
@@ -105,8 +105,6 @@ PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *
if (flags == NULL) {
flags = &local_flags;
- local_flags.cf_flags = 0;
- local_flags.cf_feature_version = PY_MINOR_VERSION;
}
v = _PySys_GetObjectId(&PyId_ps1);
if (v == NULL) {
@@ -1283,10 +1281,7 @@ _Py_SourceAsString(PyObject *cmd, const char *funcname, const char *what, PyComp
struct symtable *
Py_SymtableStringObject(const char *str, PyObject *filename, int start)
{
- PyCompilerFlags flags;
-
- flags.cf_flags = 0;
- flags.cf_feature_version = PY_MINOR_VERSION;
+ PyCompilerFlags flags = _PyCompilerFlags_INIT;
return _Py_SymtableStringObjectFlags(str, filename, start, &flags);
}
@@ -1331,7 +1326,7 @@ PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
PyCompilerFlags *flags, PyArena *arena)
{
mod_ty mod;
- PyCompilerFlags localflags;
+ PyCompilerFlags localflags = _PyCompilerFlags_INIT;
perrdetail err;
int iflags = PARSER_FLAGS(flags);
if (flags && flags->cf_feature_version < 7)
@@ -1341,8 +1336,6 @@ PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
&_PyParser_Grammar, start, &err,
&iflags);
if (flags == NULL) {
- localflags.cf_flags = 0;
- localflags.cf_feature_version = PY_MINOR_VERSION;
flags = &localflags;
}
if (n) {
@@ -1379,7 +1372,7 @@ PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
PyArena *arena)
{
mod_ty mod;
- PyCompilerFlags localflags;
+ PyCompilerFlags localflags = _PyCompilerFlags_INIT;
perrdetail err;
int iflags = PARSER_FLAGS(flags);
@@ -1387,8 +1380,6 @@ PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
&_PyParser_Grammar,
start, ps1, ps2, &err, &iflags);
if (flags == NULL) {
- localflags.cf_flags = 0;
- localflags.cf_feature_version = PY_MINOR_VERSION;
flags = &localflags;
}
if (n) {
[View Less]
1
0
https://github.com/python/cpython/commit/a04ea4f92ccbe20ffdbb5fa9b6bb93ee8d…
commit: a04ea4f92ccbe20ffdbb5fa9b6bb93ee8da50f5d
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T02:17:14+02:00
summary:
bpo-37253: Fix typo in PyCompilerFlags doc (GH-14036)
Remove ";" to fix Sphinx formatting.
files:
M Doc/c-api/veryhigh.rst
diff --git a/Doc/c-api/veryhigh.rst b/Doc/c-api/veryhigh.rst
index 835afcb4f217..…
[View More]e6704ddeca09 100644
--- a/Doc/c-api/veryhigh.rst
+++ b/Doc/c-api/veryhigh.rst
@@ -394,7 +394,7 @@ the same library that the Python runtime is using.
Compiler flags.
- .. c:member:: int cf_feature_version;
+ .. c:member:: int cf_feature_version
*cf_feature_version* is the minor Python version. It should be
initialized to ``PY_MINOR_VERSION``.
[View Less]
1
0
https://github.com/python/cpython/commit/37d66d7d4bc7dbac9809d69966a774ebb3…
commit: 37d66d7d4bc7dbac9809d69966a774ebb32563be
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T02:16:41+02:00
summary:
bpo-37253: Add _PyCompilerFlags_INIT macro (GH-14018)
Add a new _PyCompilerFlags_INIT macro to initialize PyCompilerFlags
variables, rather than initializing cf_flags and cf_feature_version
explicitly in each …
[View More]variable.
files:
M Include/compile.h
M Modules/main.c
M Modules/parsermodule.c
M Modules/symtablemodule.c
M Python/ast.c
M Python/bltinmodule.c
M Python/compile.c
M Python/pythonrun.c
diff --git a/Include/compile.h b/Include/compile.h
index a833caa06b9d..1cda955c1425 100644
--- a/Include/compile.h
+++ b/Include/compile.h
@@ -30,6 +30,9 @@ typedef struct {
int cf_flags; /* bitmask of CO_xxx flags relevant to future */
int cf_feature_version; /* minor Python version (PyCF_ONLY_AST) */
} PyCompilerFlags;
+
+#define _PyCompilerFlags_INIT \
+ (PyCompilerFlags){.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION}
#endif
/* Future feature support */
diff --git a/Modules/main.c b/Modules/main.c
index 6b9406f78666..853afedd7b90 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -524,7 +524,7 @@ pymain_run_python(int *exitcode)
}
}
- PyCompilerFlags cf = {.cf_flags = 0, .cf_feature_version = PY_MINOR_VERSION};
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
pymain_header(config);
pymain_import_readline(config);
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index 36f921419153..079d00f32aa6 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -336,8 +336,7 @@ parser_newstobject(node *st, int type)
if (o != 0) {
o->st_node = st;
o->st_type = type;
- o->st_flags.cf_flags = 0;
- o->st_flags.cf_feature_version = PY_MINOR_VERSION;
+ o->st_flags = _PyCompilerFlags_INIT;
}
else {
PyNode_Free(st);
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index d66cb44f69bd..9180f185e1e8 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -30,11 +30,10 @@ _symtable_symtable_impl(PyObject *module, PyObject *source,
struct symtable *st;
PyObject *t;
int start;
- PyCompilerFlags cf;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
PyObject *source_copy = NULL;
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
const char *str = _Py_SourceAsString(source, "symtable", "string or bytes", &cf, &source_copy);
if (str == NULL) {
diff --git a/Python/ast.c b/Python/ast.c
index df9242977e3f..2a5941572148 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -4845,7 +4845,6 @@ fstring_compile_expr(const char *expr_start, const char *expr_end,
struct compiling *c, const node *n)
{
- PyCompilerFlags cf;
node *mod_n;
mod_ty mod;
char *str;
@@ -4887,8 +4886,8 @@ fstring_compile_expr(const char *expr_start, const char *expr_end,
str[len+1] = ')';
str[len+2] = 0;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = PyCF_ONLY_AST;
- cf.cf_feature_version = PY_MINOR_VERSION;
mod_n = PyParser_SimpleParseStringFlagsFilename(str, "<fstring>",
Py_eval_input, 0);
if (!mod_n) {
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index abf807a408f7..c3e30593475d 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -723,12 +723,11 @@ builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
const char *str;
int compile_mode = -1;
int is_ast;
- PyCompilerFlags cf;
int start[] = {Py_file_input, Py_eval_input, Py_single_input, Py_func_type_input};
PyObject *result;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
if (feature_version >= 0 && (flags & PyCF_ONLY_AST)) {
cf.cf_feature_version = feature_version;
}
@@ -889,7 +888,6 @@ builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
{
PyObject *result, *source_copy;
const char *str;
- PyCompilerFlags cf;
if (locals != Py_None && !PyMapping_Check(locals)) {
PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
@@ -941,8 +939,8 @@ builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
return PyEval_EvalCode(source, globals, locals);
}
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
str = _Py_SourceAsString(source, "eval", "string, bytes or code", &cf, &source_copy);
if (str == NULL)
return NULL;
@@ -1032,9 +1030,8 @@ builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
else {
PyObject *source_copy;
const char *str;
- PyCompilerFlags cf;
+ PyCompilerFlags cf = _PyCompilerFlags_INIT;
cf.cf_flags = PyCF_SOURCE_IS_UTF8;
- cf.cf_feature_version = PY_MINOR_VERSION;
str = _Py_SourceAsString(source, "exec",
"string, bytes or code", &cf,
&source_copy);
diff --git a/Python/compile.c b/Python/compile.c
index 9e4a2094ac9b..4d3ecfe5d6fc 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -309,7 +309,7 @@ PyAST_CompileObject(mod_ty mod, PyObject *filename, PyCompilerFlags *flags,
{
struct compiler c;
PyCodeObject *co = NULL;
- PyCompilerFlags local_flags;
+ PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
int merged;
PyConfig *config = &_PyInterpreterState_GET_UNSAFE()->config;
@@ -332,8 +332,6 @@ PyAST_CompileObject(mod_ty mod, PyObject *filename, PyCompilerFlags *flags,
if (c.c_future == NULL)
goto finally;
if (!flags) {
- local_flags.cf_flags = 0;
- local_flags.cf_feature_version = PY_MINOR_VERSION;
flags = &local_flags;
}
merged = c.c_future->ff_features | flags->cf_flags;
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 784c15bb4b22..8f3ee19279d9 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -91,7 +91,7 @@ PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *
{
PyObject *filename, *v;
int ret, err;
- PyCompilerFlags local_flags;
+ PyCompilerFlags local_flags = _PyCompilerFlags_INIT;
int nomem_count = 0;
#ifdef Py_REF_DEBUG
int show_ref_count = _PyInterpreterState_Get()->config.show_ref_count;
@@ -105,8 +105,6 @@ PyRun_InteractiveLoopFlags(FILE *fp, const char *filename_str, PyCompilerFlags *
if (flags == NULL) {
flags = &local_flags;
- local_flags.cf_flags = 0;
- local_flags.cf_feature_version = PY_MINOR_VERSION;
}
v = _PySys_GetObjectId(&PyId_ps1);
if (v == NULL) {
@@ -1283,10 +1281,7 @@ _Py_SourceAsString(PyObject *cmd, const char *funcname, const char *what, PyComp
struct symtable *
Py_SymtableStringObject(const char *str, PyObject *filename, int start)
{
- PyCompilerFlags flags;
-
- flags.cf_flags = 0;
- flags.cf_feature_version = PY_MINOR_VERSION;
+ PyCompilerFlags flags = _PyCompilerFlags_INIT;
return _Py_SymtableStringObjectFlags(str, filename, start, &flags);
}
@@ -1331,7 +1326,7 @@ PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
PyCompilerFlags *flags, PyArena *arena)
{
mod_ty mod;
- PyCompilerFlags localflags;
+ PyCompilerFlags localflags = _PyCompilerFlags_INIT;
perrdetail err;
int iflags = PARSER_FLAGS(flags);
if (flags && flags->cf_feature_version < 7)
@@ -1341,8 +1336,6 @@ PyParser_ASTFromStringObject(const char *s, PyObject *filename, int start,
&_PyParser_Grammar, start, &err,
&iflags);
if (flags == NULL) {
- localflags.cf_flags = 0;
- localflags.cf_feature_version = PY_MINOR_VERSION;
flags = &localflags;
}
if (n) {
@@ -1379,7 +1372,7 @@ PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
PyArena *arena)
{
mod_ty mod;
- PyCompilerFlags localflags;
+ PyCompilerFlags localflags = _PyCompilerFlags_INIT;
perrdetail err;
int iflags = PARSER_FLAGS(flags);
@@ -1387,8 +1380,6 @@ PyParser_ASTFromFileObject(FILE *fp, PyObject *filename, const char* enc,
&_PyParser_Grammar,
start, ps1, ps2, &err, &iflags);
if (flags == NULL) {
- localflags.cf_flags = 0;
- localflags.cf_feature_version = PY_MINOR_VERSION;
flags = &localflags;
}
if (n) {
[View Less]
1
0

June 13, 2019
https://github.com/python/cpython/commit/2c9b498759f4fc74da82a0a96d059d666f…
commit: 2c9b498759f4fc74da82a0a96d059d666fa73f16
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T02:01:29+02:00
summary:
bpo-37253: Document PyCompilerFlags.cf_feature_version (GH-14019)
* Update PyCompilerFlags structure documentation.
* Document the new cf_feature_version field in the Changes in the C
API section of the What's New …
[View More]in Python 3.8 doc.
files:
M Doc/c-api/veryhigh.rst
M Doc/whatsnew/3.8.rst
diff --git a/Doc/c-api/veryhigh.rst b/Doc/c-api/veryhigh.rst
index 3fe0ae47aac3..835afcb4f217 100644
--- a/Doc/c-api/veryhigh.rst
+++ b/Doc/c-api/veryhigh.rst
@@ -388,11 +388,22 @@ the same library that the Python runtime is using.
Whenever ``PyCompilerFlags *flags`` is *NULL*, :attr:`cf_flags` is treated as
equal to ``0``, and any modification due to ``from __future__ import`` is
- discarded. ::
+ discarded.
- struct PyCompilerFlags {
- int cf_flags;
- }
+ .. c:member:: int cf_flags
+
+ Compiler flags.
+
+ .. c:member:: int cf_feature_version;
+
+ *cf_feature_version* is the minor Python version. It should be
+ initialized to ``PY_MINOR_VERSION``.
+
+ The field is ignored by default, it is used if and only if
+ ``PyCF_ONLY_AST`` flag is set in *cf_flags*.
+
+ .. versionchanged:: 3.8
+ Added *cf_feature_version* field.
.. c:var:: int CO_FUTURE_DIVISION
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 264586434b9b..3e607130743d 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -1312,6 +1312,11 @@ Changes in the Python API
Changes in the C API
--------------------
+* The :c:type:`PyCompilerFlags` structure gets a new *cf_feature_version*
+ field. It should be initialized to ``PY_MINOR_VERSION``. The field is ignored
+ by default, it is used if and only if ``PyCF_ONLY_AST`` flag is set in
+ *cf_flags*.
+
* The :c:func:`PyEval_ReInitThreads` function has been removed from the C API.
It should not be called explicitly: use :c:func:`PyOS_AfterFork_Child`
instead.
[View Less]
1
0

June 12, 2019
https://github.com/python/cpython/commit/468e5fec8a2f534f1685d59da3ca4fad42…
commit: 468e5fec8a2f534f1685d59da3ca4fad425c38dd
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T01:30:17+02:00
summary:
bpo-36402: Fix threading._shutdown() race condition (GH-13948)
Fix a race condition at Python shutdown when waiting for threads.
Wait until the Python thread state of all non-daemon threads get
deleted (join all non-…
[View More]daemon threads), rather than just wait until
Python threads complete.
* Add threading._shutdown_locks: set of Thread._tstate_lock locks
of non-daemon threads used by _shutdown() to wait until all Python
thread states get deleted. See Thread._set_tstate_lock().
* Add also threading._shutdown_locks_lock to protect access to
threading._shutdown_locks.
* Add test_finalization_shutdown() test.
files:
A Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
M Lib/test/test_threading.py
M Lib/threading.py
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 6ac4ea9623de..ad90010b8a38 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -583,6 +583,41 @@ def __del__(self):
self.assertEqual(data.splitlines(),
["GC: True True True"] * 2)
+ def test_finalization_shutdown(self):
+ # bpo-36402: Py_Finalize() calls threading._shutdown() which must wait
+ # until Python thread states of all non-daemon threads get deleted.
+ #
+ # Test similar to SubinterpThreadingTests.test_threads_join_2(), but
+ # test the finalization of the main interpreter.
+ code = """if 1:
+ import os
+ import threading
+ import time
+ import random
+
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
+ class Sleeper:
+ def __del__(self):
+ random_sleep()
+
+ tls = threading.local()
+
+ def f():
+ # Sleep a bit so that the thread is still running when
+ # Py_Finalize() is called.
+ random_sleep()
+ tls.x = Sleeper()
+ random_sleep()
+
+ threading.Thread(target=f).start()
+ random_sleep()
+ """
+ rc, out, err = assert_python_ok("-c", code)
+ self.assertEqual(err, b"")
+
def test_tstate_lock(self):
# Test an implementation detail of Thread objects.
started = _thread.allocate_lock()
@@ -878,15 +913,22 @@ def test_threads_join(self):
self.addCleanup(os.close, w)
code = r"""if 1:
import os
+ import random
import threading
import time
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
def f():
# Sleep a bit so that the thread is still running when
# Py_EndInterpreter is called.
- time.sleep(0.05)
+ random_sleep()
os.write(%d, b"x")
+
threading.Thread(target=f).start()
+ random_sleep()
""" % (w,)
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
@@ -903,22 +945,29 @@ def test_threads_join_2(self):
self.addCleanup(os.close, w)
code = r"""if 1:
import os
+ import random
import threading
import time
+ def random_sleep():
+ seconds = random.random() * 0.010
+ time.sleep(seconds)
+
class Sleeper:
def __del__(self):
- time.sleep(0.05)
+ random_sleep()
tls = threading.local()
def f():
# Sleep a bit so that the thread is still running when
# Py_EndInterpreter is called.
- time.sleep(0.05)
+ random_sleep()
tls.x = Sleeper()
os.write(%d, b"x")
+
threading.Thread(target=f).start()
+ random_sleep()
""" % (w,)
ret = test.support.run_in_subinterp(code)
self.assertEqual(ret, 0)
diff --git a/Lib/threading.py b/Lib/threading.py
index 3d197eed6a72..67926403770e 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -739,6 +739,11 @@ def _newname(template="Thread-%d"):
_active = {} # maps thread id to Thread object
_limbo = {}
_dangling = WeakSet()
+# Set of Thread._tstate_lock locks of non-daemon threads used by _shutdown()
+# to wait until all Python thread states get deleted:
+# see Thread._set_tstate_lock().
+_shutdown_locks_lock = _allocate_lock()
+_shutdown_locks = set()
# Main class for threads
@@ -903,6 +908,10 @@ def _set_tstate_lock(self):
self._tstate_lock = _set_sentinel()
self._tstate_lock.acquire()
+ if not self.daemon:
+ with _shutdown_locks_lock:
+ _shutdown_locks.add(self._tstate_lock)
+
def _bootstrap_inner(self):
try:
self._set_ident()
@@ -954,6 +963,9 @@ def _stop(self):
assert not lock.locked()
self._is_stopped = True
self._tstate_lock = None
+ if not self.daemon:
+ with _shutdown_locks_lock:
+ _shutdown_locks.discard(self._tstate_lock)
def _delete(self):
"Remove current thread from the dict of currently running threads."
@@ -1342,6 +1354,9 @@ def enumerate():
_main_thread = _MainThread()
def _shutdown():
+ """
+ Wait until the Python thread state of all non-daemon threads get deleted.
+ """
# Obscure: other threads may be waiting to join _main_thread. That's
# dubious, but some code does it. We can't wait for C code to release
# the main thread's tstate_lock - that won't happen until the interpreter
@@ -1350,6 +1365,8 @@ def _shutdown():
if _main_thread._is_stopped:
# _shutdown() was already called
return
+
+ # Main thread
tlock = _main_thread._tstate_lock
# The main thread isn't finished yet, so its thread state lock can't have
# been released.
@@ -1357,16 +1374,24 @@ def _shutdown():
assert tlock.locked()
tlock.release()
_main_thread._stop()
- t = _pickSomeNonDaemonThread()
- while t:
- t.join()
- t = _pickSomeNonDaemonThread()
-def _pickSomeNonDaemonThread():
- for t in enumerate():
- if not t.daemon and t.is_alive():
- return t
- return None
+ # Join all non-deamon threads
+ while True:
+ with _shutdown_locks_lock:
+ locks = list(_shutdown_locks)
+ _shutdown_locks.clear()
+
+ if not locks:
+ break
+
+ for lock in locks:
+ # mimick Thread.join()
+ lock.acquire()
+ lock.release()
+
+ # new threads can be spawned while we were waiting for the other
+ # threads to complete
+
def main_thread():
"""Return the main thread object.
@@ -1392,12 +1417,18 @@ def _after_fork():
# Reset _active_limbo_lock, in case we forked while the lock was held
# by another (non-forked) thread. http://bugs.python.org/issue874900
global _active_limbo_lock, _main_thread
+ global _shutdown_locks_lock, _shutdown_locks
_active_limbo_lock = _allocate_lock()
# fork() only copied the current thread; clear references to others.
new_active = {}
current = current_thread()
_main_thread = current
+
+ # reset _shutdown() locks: threads re-register their _tstate_lock below
+ _shutdown_locks_lock = _allocate_lock()
+ _shutdown_locks = set()
+
with _active_limbo_lock:
# Dangling thread instances must still have their locks reset,
# because someone may join() them.
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst b/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
new file mode 100644
index 000000000000..3bc537e40ff6
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-11-00-35-02.bpo-36402.b0IJVp.rst
@@ -0,0 +1,4 @@
+Fix a race condition at Python shutdown when waiting for threads. Wait until
+the Python thread state of all non-daemon threads get deleted (join all
+non-daemon threads), rather than just wait until non-daemon Python threads
+complete.
[View Less]
1
0

bpo-36779: time.tzname returns empty string on Windows if default cod… (GH-13073)
by Miss Islington (bot) June 12, 2019
by Miss Islington (bot) June 12, 2019
June 12, 2019
https://github.com/python/cpython/commit/b4c7defe58695a6670a8fdeaef67a638bb…
commit: b4c7defe58695a6670a8fdeaef67a638bbb47e42
branch: master
author: Paul Monson <paulmon(a)users.noreply.github.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-06-12T16:13:27-07:00
summary:
bpo-36779: time.tzname returns empty string on Windows if default cod… (GH-13073)
Calling setlocale(LC_CTYPE, "") on a system where GetACP() returns CP_UTF8 …
[View More]results in empty strings in _tzname[].
This causes time.tzname to be an empty string.
I have reported the bug to the UCRT team and will follow up, but it will take some time get a fix into production.
In the meantime one possible workaround is to temporarily change the locale by calling setlocale(LC_CTYPE, "C") before calling _tzset and restore the current locale after if the GetACP() == CP_UTF8 or CP_UTF7
@zooba
https://bugs.python.org/issue36779
files:
A Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
M Modules/timemodule.c
diff --git a/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst b/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
new file mode 100644
index 000000000000..618cfcae7b89
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2019-06-11-15-41-34.bpo-36779.0TMw6f.rst
@@ -0,0 +1,2 @@
+Ensure ``time.tzname`` is correct on Windows when the active code page is
+set to CP_UTF7 or CP_UTF8.
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index f991f31ee15e..bdc93a2b7ec1 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -1581,6 +1581,19 @@ init_timezone(PyObject *m)
PyModule_AddIntConstant(m, "altzone", _Py_timezone-3600);
#endif
PyModule_AddIntConstant(m, "daylight", _Py_daylight);
+#ifdef MS_WINDOWS
+ TIME_ZONE_INFORMATION tzinfo = {0};
+ GetTimeZoneInformation(&tzinfo);
+ otz0 = PyUnicode_FromWideChar(tzinfo.StandardName, -1);
+ if (otz0 == NULL) {
+ return -1;
+ }
+ otz1 = PyUnicode_FromWideChar(tzinfo.DaylightName, -1);
+ if (otz1 == NULL) {
+ Py_DECREF(otz0);
+ return -1;
+ }
+#else
otz0 = PyUnicode_DecodeLocale(_Py_tzname[0], "surrogateescape");
if (otz0 == NULL) {
return -1;
@@ -1590,6 +1603,7 @@ init_timezone(PyObject *m)
Py_DECREF(otz0);
return -1;
}
+#endif // MS_WINDOWS
PyObject *tzname_obj = Py_BuildValue("(NN)", otz0, otz1);
if (tzname_obj == NULL) {
return -1;
[View Less]
1
0

June 12, 2019
https://github.com/python/cpython/commit/95f61c8b1619e736bd5e29a0da01832346…
commit: 95f61c8b1619e736bd5e29a0da0183234634b6e8
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T01:09:04+02:00
summary:
bpo-37069: regrtest uses sys.unraisablehook (GH-13759)
regrtest now uses sys.unraisablehook() to mark a test as "environment
altered" (ENV_CHANGED) if it emits an "unraisable exception".
Moreover, regrtest logs a …
[View More]warning in this case.
Use "python3 -m test --fail-env-changed" to catch unraisable
exceptions in tests.
files:
A Misc/NEWS.d/next/Tests/2019-06-13-00-46-25.bpo-37069.wdktFo.rst
M Lib/test/libregrtest/setup.py
M Lib/test/libregrtest/utils.py
M Lib/test/test_regrtest.py
diff --git a/Lib/test/libregrtest/setup.py b/Lib/test/libregrtest/setup.py
index fb5ac350cd08..36676bfa617b 100644
--- a/Lib/test/libregrtest/setup.py
+++ b/Lib/test/libregrtest/setup.py
@@ -10,6 +10,8 @@
except ImportError:
gc = None
+from test.libregrtest.utils import setup_unraisable_hook
+
def setup_tests(ns):
try:
@@ -93,6 +95,8 @@ def _test_audit_hook(name, args):
pass
sys.addaudithook(_test_audit_hook)
+ setup_unraisable_hook()
+
def suppress_msvcrt_asserts(verbose):
try:
diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py
index fb9971a64f66..2691a2c30ce8 100644
--- a/Lib/test/libregrtest/utils.py
+++ b/Lib/test/libregrtest/utils.py
@@ -2,6 +2,7 @@
import os.path
import sys
import textwrap
+from test import support
def format_duration(seconds):
@@ -59,3 +60,19 @@ def printlist(x, width=70, indent=4, file=None):
def print_warning(msg):
print(f"Warning -- {msg}", file=sys.stderr, flush=True)
+
+
+orig_unraisablehook = None
+
+
+def regrtest_unraisable_hook(unraisable):
+ global orig_unraisablehook
+ support.environment_altered = True
+ print_warning("Unraisable exception")
+ orig_unraisablehook(unraisable)
+
+
+def setup_unraisable_hook():
+ global orig_unraisablehook
+ orig_unraisablehook = sys.unraisablehook
+ sys.unraisablehook = regrtest_unraisable_hook
diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py
index b616e8974b9d..904b326d0e20 100644
--- a/Lib/test/test_regrtest.py
+++ b/Lib/test/test_regrtest.py
@@ -499,7 +499,7 @@ def run_command(self, args, input=None, exitcode=0, **kw):
if not input:
input = ''
if 'stderr' not in kw:
- kw['stderr'] = subprocess.PIPE
+ kw['stderr'] = subprocess.STDOUT
proc = subprocess.run(args,
universal_newlines=True,
input=input,
@@ -1124,6 +1124,34 @@ def test_garbage(self):
env_changed=[testname],
fail_env_changed=True)
+ def test_unraisable_exc(self):
+ # --fail-env-changed must catch unraisable exception
+ code = textwrap.dedent(r"""
+ import unittest
+ import weakref
+
+ class MyObject:
+ pass
+
+ def weakref_callback(obj):
+ raise Exception("weakref callback bug")
+
+ class Tests(unittest.TestCase):
+ def test_unraisable_exc(self):
+ obj = MyObject()
+ ref = weakref.ref(obj, weakref_callback)
+ # call weakref_callback() which logs
+ # an unraisable exception
+ obj = None
+ """)
+ testname = self.create_test(code=code)
+
+ output = self.run_tests("--fail-env-changed", "-v", testname, exitcode=3)
+ self.check_executed_tests(output, [testname],
+ env_changed=[testname],
+ fail_env_changed=True)
+ self.assertIn("Warning -- Unraisable exception", output)
+
class TestUtils(unittest.TestCase):
def test_format_duration(self):
diff --git a/Misc/NEWS.d/next/Tests/2019-06-13-00-46-25.bpo-37069.wdktFo.rst b/Misc/NEWS.d/next/Tests/2019-06-13-00-46-25.bpo-37069.wdktFo.rst
new file mode 100644
index 000000000000..f9f6474ac8cf
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-13-00-46-25.bpo-37069.wdktFo.rst
@@ -0,0 +1,7 @@
+regrtest now uses :func:`sys.unraisablehook` to mark a test as "environment
+altered" (ENV_CHANGED) if it emits an "unraisable exception". Moreover,
+regrtest logs a warning in this case.
+
+Use ``python3 -m test --fail-env-changed`` to catch unraisable exceptions in
+tests.
+
[View Less]
1
0

June 12, 2019
https://github.com/python/cpython/commit/c15a682603a47f5aef5025f6a2e3babb69…
commit: c15a682603a47f5aef5025f6a2e3babb699273d6
branch: 3.8
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-13T00:23:49+02:00
summary:
bpo-37223: test_io: silence destructor errors (GH-14031)
* bpo-18748: Fix _pyio.IOBase destructor (closed case) (GH-13952)
_pyio.IOBase destructor now does nothing if getting the closed
attribute fails to better …
[View More]mimick _io.IOBase finalizer.
(cherry picked from commit 4f6f7c5a611905fb6b81671547f268c226bc646a)
* bpo-37223: test_io: silence destructor errors (GH-13954)
Implement also MockNonBlockWriterIO.seek() method.
(cherry picked from commit b589cef9c4dada2fb84ce0fae5040ecf16d9d5ef)
* bpo-37223, test_io: silence last 'Exception ignored in:' (GH-14029)
Use catch_unraisable_exception() to ignore 'Exception ignored in:'
error when the internal BufferedWriter of the BufferedRWPair is
destroyed. The C implementation doesn't give access to the
internal BufferedWriter, so just ignore the warning instead.
(cherry picked from commit 913fa1c8245d1cde6edb4254f4fb965cc91786ef)
files:
A Misc/NEWS.d/next/Library/2019-06-11-01-54-19.bpo-18748.ADqCkq.rst
M Lib/_pyio.py
M Lib/test/test_io.py
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 43c24342ad61..0b6493bc8dc9 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -405,6 +405,16 @@ def close(self):
def __del__(self):
"""Destructor. Calls close()."""
+ try:
+ closed = self.closed
+ except Exception:
+ # If getting closed fails, then the object is probably
+ # in an unusable state, so ignore.
+ return
+
+ if closed:
+ return
+
if _IOBASE_EMITS_UNRAISABLE:
self.close()
else:
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 3a1f5ba5b666..55686d743983 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -277,6 +277,10 @@ def readable(self):
def seekable(self):
return True
+ def seek(self, pos, whence=0):
+ # naive implementation, enough for tests
+ return 0
+
def writable(self):
return True
@@ -1486,6 +1490,9 @@ def test_misbehaved_io(self):
self.assertRaises(OSError, bufio.seek, 0)
self.assertRaises(OSError, bufio.tell)
+ # Silence destructor error
+ bufio.close = lambda: None
+
def test_no_extraneous_read(self):
# Issue #9550; when the raw IO object has satisfied the read request,
# we should not issue any additional reads, otherwise it may block
@@ -1834,6 +1841,9 @@ def test_misbehaved_io(self):
self.assertRaises(OSError, bufio.tell)
self.assertRaises(OSError, bufio.write, b"abcdef")
+ # Silence destructor error
+ bufio.close = lambda: None
+
def test_max_buffer_size_removal(self):
with self.assertRaises(TypeError):
self.tp(self.MockRawIO(), 8, 12)
@@ -2060,6 +2070,11 @@ def writer_close():
# Silence destructor error
writer.close = lambda: None
+ writer = None
+
+ with support.catch_unraisable_exception():
+ pair = None
+ support.gc_collect()
def test_reader_writer_close_error_on_close(self):
def reader_close():
diff --git a/Misc/NEWS.d/next/Library/2019-06-11-01-54-19.bpo-18748.ADqCkq.rst b/Misc/NEWS.d/next/Library/2019-06-11-01-54-19.bpo-18748.ADqCkq.rst
new file mode 100644
index 000000000000..295ddebb2a40
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-06-11-01-54-19.bpo-18748.ADqCkq.rst
@@ -0,0 +1,2 @@
+:class:`_pyio.IOBase` destructor now does nothing if getting the ``closed``
+attribute fails to better mimick :class:`_io.IOBase` finalizer.
[View Less]
1
0

June 12, 2019
https://github.com/python/cpython/commit/913fa1c8245d1cde6edb4254f4fb965cc9…
commit: 913fa1c8245d1cde6edb4254f4fb965cc91786ef
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-06-12T23:57:11+02:00
summary:
bpo-37223, test_io: silence last 'Exception ignored in:' (GH-14029)
Use catch_unraisable_exception() to ignore 'Exception ignored in:'
error when the internal BufferedWriter of the BufferedRWPair is
destroyed. The C …
[View More]implementation doesn't give access to the
internal BufferedWriter, so just ignore the warning instead.
files:
M Lib/test/test_io.py
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py
index 102679b1d342..55686d743983 100644
--- a/Lib/test/test_io.py
+++ b/Lib/test/test_io.py
@@ -2070,6 +2070,11 @@ def writer_close():
# Silence destructor error
writer.close = lambda: None
+ writer = None
+
+ with support.catch_unraisable_exception():
+ pair = None
+ support.gc_collect()
def test_reader_writer_close_error_on_close(self):
def reader_close():
[View Less]
1
0