When IDLE first starts, it attempts to read user configuration files in
-~/.idlerc/ (~ is one’s home directory). If there is a problem, an error
+~/.idlerc/
(~ is one’s home directory). If there is a problem, an error
message should be displayed. Leaving aside random disk glitches, this can
be prevented by never editing the files by hand, using the configuration
dialog, under Options, instead Options. Once it happens, the solution may
be to delete one or more of the configuration files.
If IDLE quits with no message, and it was not started from a console, try
-starting from a console (python -m idlelib)
and see if a message appears.
+starting from a console (
Setting preferences
The font preferences, highlighting, keys, and general preferences can be
changed via Configure IDLE on the Option menu.
-Non-default user settings are saved in a .idlerc directory in the user’s
+Non-default user settings are saved in a .idlerc
directory in the user’s
home directory. Problems caused by bad user configuration files are solved
-by editing or deleting one or more of the files in .idlerc.
+by editing or deleting one or more of the files in
.idlerc
.
On the Font tab, see the text sample for the effect of font face and size
on multiple characters in multiple languages. Edit the sample to add
other characters of personal interest. Use the sample to select
diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py
index 1f14ed1f264..1fea6d41df8 100644
--- a/Lib/idlelib/idle_test/test_configdialog.py
+++ b/Lib/idlelib/idle_test/test_configdialog.py
@@ -8,7 +8,7 @@ requires('gui')
import unittest
from unittest import mock
from idlelib.idle_test.mock_idle import Func
-from tkinter import Tk, StringVar, IntVar, BooleanVar, DISABLED, NORMAL
+from tkinter import (Tk, StringVar, IntVar, BooleanVar, DISABLED, NORMAL)
from idlelib import config
from idlelib.configdialog import idleConf, changes, tracers
@@ -30,6 +30,7 @@ highpage = changes['highlight']
keyspage = changes['keys']
extpage = changes['extensions']
+
def setUpModule():
global root, dialog
idleConf.userCfg = testcfg
@@ -37,6 +38,7 @@ def setUpModule():
# root.withdraw() # Comment out, see issue 30870
dialog = configdialog.ConfigDialog(root, 'Test', _utest=True)
+
def tearDownModule():
global root, dialog
idleConf.userCfg = usercfg
@@ -48,6 +50,58 @@ def tearDownModule():
root = dialog = None
+class ConfigDialogTest(unittest.TestCase):
+
+ def test_deactivate_current_config(self):
+ pass
+
+ def activate_config_changes(self):
+ pass
+
+
+class ButtonTest(unittest.TestCase):
+
+ def test_click_ok(self):
+ d = dialog
+ apply = d.apply = mock.Mock()
+ destroy = d.destroy = mock.Mock()
+ d.buttons['Ok'].invoke()
+ apply.assert_called_once()
+ destroy.assert_called_once()
+ del d.destroy, d.apply
+
+ def test_click_apply(self):
+ d = dialog
+ deactivate = d.deactivate_current_config = mock.Mock()
+ save_ext = d.save_all_changed_extensions = mock.Mock()
+ activate = d.activate_config_changes = mock.Mock()
+ d.buttons['Apply'].invoke()
+ deactivate.assert_called_once()
+ save_ext.assert_called_once()
+ activate.assert_called_once()
+ del d.save_all_changed_extensions
+ del d.activate_config_changes, d.deactivate_current_config
+
+ def test_click_cancel(self):
+ d = dialog
+ d.destroy = Func()
+ changes['main']['something'] = 1
+ d.buttons['Cancel'].invoke()
+ self.assertEqual(changes['main'], {})
+ self.assertEqual(d.destroy.called, 1)
+ del d.destroy
+
+ def test_click_help(self):
+ dialog.note.select(dialog.keyspage)
+ with mock.patch.object(configdialog, 'view_text',
+ new_callable=Func) as view:
+ dialog.buttons['Help'].invoke()
+ title, contents = view.kwds['title'], view.kwds['contents']
+ self.assertEqual(title, 'Help for IDLE preferences')
+ self.assertTrue(contents.startswith('When you click') and
+ contents.endswith('a different name.\n'))
+
+
class FontPageTest(unittest.TestCase):
"""Test that font widgets enable users to make font changes.
@@ -420,6 +474,48 @@ class HighPageTest(unittest.TestCase):
eq(d.highlight_target.get(), elem[tag])
eq(d.set_highlight_target.called, count)
+ def test_highlight_sample_double_click(self):
+ # Test double click on highlight_sample.
+ eq = self.assertEqual
+ d = self.page
+
+ hs = d.highlight_sample
+ hs.focus_force()
+ hs.see(1.0)
+ hs.update_idletasks()
+
+ # Test binding from configdialog.
+ hs.event_generate('', x=0, y=0)
+ hs.event_generate('', x=0, y=0)
+ # Double click is a sequence of two clicks in a row.
+ for _ in range(2):
+ hs.event_generate('', x=0, y=0)
+ hs.event_generate('', x=0, y=0)
+
+ eq(hs.tag_ranges('sel'), ())
+
+ def test_highlight_sample_b1_motion(self):
+ # Test button motion on highlight_sample.
+ eq = self.assertEqual
+ d = self.page
+
+ hs = d.highlight_sample
+ hs.focus_force()
+ hs.see(1.0)
+ hs.update_idletasks()
+
+ x, y, dx, dy, offset = hs.dlineinfo('1.0')
+
+ # Test binding from configdialog.
+ hs.event_generate('')
+ hs.event_generate('')
+ hs.event_generate('', x=x, y=y)
+ hs.event_generate('', x=x, y=y)
+ hs.event_generate('', x=dx, y=dy)
+ hs.event_generate('', x=dx, y=dy)
+
+ eq(hs.tag_ranges('sel'), ())
+
def test_set_theme_type(self):
eq = self.assertEqual
d = self.page
@@ -648,8 +744,13 @@ class HighPageTest(unittest.TestCase):
idleConf.userCfg['highlight'].SetOption(theme_name, 'name', 'value')
highpage[theme_name] = {'option': 'True'}
+ theme_name2 = 'other theme'
+ idleConf.userCfg['highlight'].SetOption(theme_name2, 'name', 'value')
+ highpage[theme_name2] = {'option': 'False'}
+
# Force custom theme.
- d.theme_source.set(False)
+ d.custom_theme_on.state(('!disabled',))
+ d.custom_theme_on.invoke()
d.custom_name.set(theme_name)
# Cancel deletion.
@@ -657,7 +758,7 @@ class HighPageTest(unittest.TestCase):
d.button_delete_custom.invoke()
eq(yesno.called, 1)
eq(highpage[theme_name], {'option': 'True'})
- eq(idleConf.GetSectionList('user', 'highlight'), ['spam theme'])
+ eq(idleConf.GetSectionList('user', 'highlight'), [theme_name, theme_name2])
eq(dialog.deactivate_current_config.called, 0)
eq(dialog.activate_config_changes.called, 0)
eq(d.set_theme_type.called, 0)
@@ -667,13 +768,26 @@ class HighPageTest(unittest.TestCase):
d.button_delete_custom.invoke()
eq(yesno.called, 2)
self.assertNotIn(theme_name, highpage)
- eq(idleConf.GetSectionList('user', 'highlight'), [])
- eq(d.custom_theme_on.state(), ('disabled',))
- eq(d.custom_name.get(), '- no custom themes -')
+ eq(idleConf.GetSectionList('user', 'highlight'), [theme_name2])
+ eq(d.custom_theme_on.state(), ())
+ eq(d.custom_name.get(), theme_name2)
eq(dialog.deactivate_current_config.called, 1)
eq(dialog.activate_config_changes.called, 1)
eq(d.set_theme_type.called, 1)
+ # Confirm deletion of second theme - empties list.
+ d.custom_name.set(theme_name2)
+ yesno.result = True
+ d.button_delete_custom.invoke()
+ eq(yesno.called, 3)
+ self.assertNotIn(theme_name, highpage)
+ eq(idleConf.GetSectionList('user', 'highlight'), [])
+ eq(d.custom_theme_on.state(), ('disabled',))
+ eq(d.custom_name.get(), '- no custom themes -')
+ eq(dialog.deactivate_current_config.called, 2)
+ eq(dialog.activate_config_changes.called, 2)
+ eq(d.set_theme_type.called, 2)
+
del dialog.activate_config_changes, dialog.deactivate_current_config
del d.askyesno
@@ -1041,8 +1155,13 @@ class KeysPageTest(unittest.TestCase):
idleConf.userCfg['keys'].SetOption(keyset_name, 'name', 'value')
keyspage[keyset_name] = {'option': 'True'}
+ keyset_name2 = 'other key set'
+ idleConf.userCfg['keys'].SetOption(keyset_name2, 'name', 'value')
+ keyspage[keyset_name2] = {'option': 'False'}
+
# Force custom keyset.
- d.keyset_source.set(False)
+ d.custom_keyset_on.state(('!disabled',))
+ d.custom_keyset_on.invoke()
d.custom_name.set(keyset_name)
# Cancel deletion.
@@ -1050,7 +1169,7 @@ class KeysPageTest(unittest.TestCase):
d.button_delete_custom_keys.invoke()
eq(yesno.called, 1)
eq(keyspage[keyset_name], {'option': 'True'})
- eq(idleConf.GetSectionList('user', 'keys'), ['spam key set'])
+ eq(idleConf.GetSectionList('user', 'keys'), [keyset_name, keyset_name2])
eq(dialog.deactivate_current_config.called, 0)
eq(dialog.activate_config_changes.called, 0)
eq(d.set_keys_type.called, 0)
@@ -1060,13 +1179,26 @@ class KeysPageTest(unittest.TestCase):
d.button_delete_custom_keys.invoke()
eq(yesno.called, 2)
self.assertNotIn(keyset_name, keyspage)
- eq(idleConf.GetSectionList('user', 'keys'), [])
- eq(d.custom_keyset_on.state(), ('disabled',))
- eq(d.custom_name.get(), '- no custom keys -')
+ eq(idleConf.GetSectionList('user', 'keys'), [keyset_name2])
+ eq(d.custom_keyset_on.state(), ())
+ eq(d.custom_name.get(), keyset_name2)
eq(dialog.deactivate_current_config.called, 1)
eq(dialog.activate_config_changes.called, 1)
eq(d.set_keys_type.called, 1)
+ # Confirm deletion of second keyset - empties list.
+ d.custom_name.set(keyset_name2)
+ yesno.result = True
+ d.button_delete_custom_keys.invoke()
+ eq(yesno.called, 3)
+ self.assertNotIn(keyset_name, keyspage)
+ eq(idleConf.GetSectionList('user', 'keys'), [])
+ eq(d.custom_keyset_on.state(), ('disabled',))
+ eq(d.custom_name.get(), '- no custom keys -')
+ eq(dialog.deactivate_current_config.called, 2)
+ eq(dialog.activate_config_changes.called, 2)
+ eq(d.set_keys_type.called, 2)
+
del dialog.activate_config_changes, dialog.deactivate_current_config
del d.askyesno
diff --git a/Lib/idlelib/idle_test/test_editor.py b/Lib/idlelib/idle_test/test_editor.py
index 240db71747a..91e8ef89d1d 100644
--- a/Lib/idlelib/idle_test/test_editor.py
+++ b/Lib/idlelib/idle_test/test_editor.py
@@ -2,6 +2,7 @@
from idlelib import editor
import unittest
+from collections import namedtuple
from test.support import requires
from tkinter import Tk
@@ -91,5 +92,103 @@ class TestGetLineIndent(unittest.TestCase):
)
+class IndentAndNewlineTest(unittest.TestCase):
+
+ @classmethod
+ def setUpClass(cls):
+ requires('gui')
+ cls.root = Tk()
+ cls.root.withdraw()
+ cls.window = Editor(root=cls.root)
+ cls.window.indentwidth = 2
+ cls.window.tabwidth = 2
+
+ @classmethod
+ def tearDownClass(cls):
+ cls.window._close()
+ del cls.window
+ cls.root.update_idletasks()
+ for id in cls.root.tk.call('after', 'info'):
+ cls.root.after_cancel(id)
+ cls.root.destroy()
+ del cls.root
+
+ def insert(self, text):
+ t = self.window.text
+ t.delete('1.0', 'end')
+ t.insert('end', text)
+ # Force update for colorizer to finish.
+ t.update()
+
+ def test_indent_and_newline_event(self):
+ eq = self.assertEqual
+ w = self.window
+ text = w.text
+ get = text.get
+ nl = w.newline_and_indent_event
+
+ TestInfo = namedtuple('Tests', ['label', 'text', 'expected', 'mark'])
+
+ tests = (TestInfo('Empty line inserts with no indent.',
+ ' \n def __init__(self):',
+ '\n \n def __init__(self):\n',
+ '1.end'),
+ TestInfo('Inside bracket before space, deletes space.',
+ ' def f1(self, a, b):',
+ ' def f1(self,\n a, b):\n',
+ '1.14'),
+ TestInfo('Inside bracket after space, deletes space.',
+ ' def f1(self, a, b):',
+ ' def f1(self,\n a, b):\n',
+ '1.15'),
+ TestInfo('Inside string with one line - no indent.',
+ ' """Docstring."""',
+ ' """Docstring.\n"""\n',
+ '1.15'),
+ TestInfo('Inside string with more than one line.',
+ ' """Docstring.\n Docstring Line 2"""',
+ ' """Docstring.\n Docstring Line 2\n """\n',
+ '2.18'),
+ TestInfo('Backslash with one line.',
+ 'a =\\',
+ 'a =\\\n \n',
+ '1.end'),
+ TestInfo('Backslash with more than one line.',
+ 'a =\\\n multiline\\',
+ 'a =\\\n multiline\\\n \n',
+ '2.end'),
+ TestInfo('Block opener - indents +1 level.',
+ ' def f1(self):\n pass',
+ ' def f1(self):\n \n pass\n',
+ '1.end'),
+ TestInfo('Block closer - dedents -1 level.',
+ ' def f1(self):\n pass',
+ ' def f1(self):\n pass\n \n',
+ '2.end'),
+ )
+
+ w.prompt_last_line = ''
+ for test in tests:
+ with self.subTest(label=test.label):
+ self.insert(test.text)
+ text.mark_set('insert', test.mark)
+ nl(event=None)
+ eq(get('1.0', 'end'), test.expected)
+
+ # Selected text.
+ self.insert(' def f1(self, a, b):\n return a + b')
+ text.tag_add('sel', '1.17', '1.end')
+ nl(None)
+ # Deletes selected text before adding new line.
+ eq(get('1.0', 'end'), ' def f1(self, a,\n \n return a + b\n')
+
+ # Preserves the whitespace in shell prompt.
+ w.prompt_last_line = '>>> '
+ self.insert('>>> \t\ta =')
+ text.mark_set('insert', '1.5')
+ nl(None)
+ eq(get('1.0', 'end'), '>>> \na =\n')
+
+
if __name__ == '__main__':
unittest.main(verbosity=2)
diff --git a/Lib/idlelib/idle_test/test_pyparse.py b/Lib/idlelib/idle_test/test_pyparse.py
index f7154e6ded9..a2b13c38d80 100644
--- a/Lib/idlelib/idle_test/test_pyparse.py
+++ b/Lib/idlelib/idle_test/test_pyparse.py
@@ -18,7 +18,7 @@ class ParseMapTest(unittest.TestCase):
# trans is the production instance of ParseMap, used in _study1
parser = pyparse.Parser(4, 4)
self.assertEqual('\t a([{b}])b"c\'d\n'.translate(pyparse.trans),
- 'xxx(((x)))x"x\'x\n')
+ 'xxx(((x)))x"x\'x\n')
class PyParseTest(unittest.TestCase):
@@ -61,14 +61,17 @@ class PyParseTest(unittest.TestCase):
# Split def across lines.
setcode('"""This is a module docstring"""\n'
- 'class C():\n'
- ' def __init__(self, a,\n'
- ' b=True):\n'
- ' pass\n'
- )
+ 'class C():\n'
+ ' def __init__(self, a,\n'
+ ' b=True):\n'
+ ' pass\n'
+ )
- # No value sent for is_char_in_string().
- self.assertIsNone(start())
+ # Passing no value or non-callable should fail (issue 32989).
+ with self.assertRaises(TypeError):
+ start()
+ with self.assertRaises(TypeError):
+ start(False)
# Make text look like a string. This returns pos as the start
# position, but it's set to None.
@@ -91,10 +94,10 @@ class PyParseTest(unittest.TestCase):
# Code without extra line break in def line - mostly returns the same
# values.
setcode('"""This is a module docstring"""\n'
- 'class C():\n'
- ' def __init__(self, a, b=True):\n'
- ' pass\n'
- )
+ 'class C():\n'
+ ' def __init__(self, a, b=True):\n'
+ ' pass\n'
+ )
eq(start(is_char_in_string=lambda index: False), 44)
eq(start(is_char_in_string=lambda index: index > 44), 44)
eq(start(is_char_in_string=lambda index: index >= 44), 33)
diff --git a/Lib/idlelib/pyparse.py b/Lib/idlelib/pyparse.py
index feb57cbb740..d34872b4396 100644
--- a/Lib/idlelib/pyparse.py
+++ b/Lib/idlelib/pyparse.py
@@ -133,8 +133,7 @@ class Parser:
self.code = s
self.study_level = 0
- def find_good_parse_start(self, is_char_in_string=None,
- _synchre=_synchre):
+ def find_good_parse_start(self, is_char_in_string):
"""
Return index of a good place to begin parsing, as close to the
end of the string as possible. This will be the start of some
@@ -149,10 +148,6 @@ class Parser:
"""
code, pos = self.code, None
- if not is_char_in_string:
- # no clue -- make the caller pass everything
- return None
-
# Peek back from the end for a good place to start,
# but don't try too often; pos will be left None, or
# bumped to a legitimate synch point.
diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py
index 065122dec7a..d5b310ffd7a 100755
--- a/Lib/idlelib/pyshell.py
+++ b/Lib/idlelib/pyshell.py
@@ -1292,6 +1292,7 @@ class PyShell(OutputWindow):
self.text.insert("end-1c", "\n")
self.text.mark_set("iomark", "end-1c")
self.set_line_and_column()
+ self.ctip.remove_calltip_window()
def write(self, s, tags=()):
try:
diff --git a/Lib/imaplib.py b/Lib/imaplib.py
index a4f499383ef..abfdd737779 100644
--- a/Lib/imaplib.py
+++ b/Lib/imaplib.py
@@ -135,10 +135,13 @@ class IMAP4:
r"""IMAP4 client class.
- Instantiate with: IMAP4([host[, port]])
+ Instantiate with: IMAP4([host[, port[, timeout=None]]])
host - host's name (default: localhost);
port - port number (default: standard IMAP4 port).
+ timeout - socket timeout (default: None)
+ If timeout is not given or is None,
+ the global default socket timeout is used
All IMAP4rev1 commands are supported by methods of the same
name (in lower-case).
@@ -181,7 +184,7 @@ class IMAP4:
class abort(error): pass # Service errors - close and retry
class readonly(abort): pass # Mailbox status changed to READ-ONLY
- def __init__(self, host='', port=IMAP4_PORT):
+ def __init__(self, host='', port=IMAP4_PORT, timeout=None):
self.debug = Debug
self.state = 'LOGOUT'
self.literal = None # A literal argument to a command
@@ -195,7 +198,7 @@ class IMAP4:
# Open socket to server.
- self.open(host, port)
+ self.open(host, port, timeout)
try:
self._connect()
@@ -284,15 +287,20 @@ class IMAP4:
# Overridable methods
- def _create_socket(self):
+ def _create_socket(self, timeout):
# Default value of IMAP4.host is '', but socket.getaddrinfo()
# (which is used by socket.create_connection()) expects None
# as a default value for host.
+ if timeout is not None and not timeout:
+ raise ValueError('Non-blocking socket (timeout=0) is not supported')
host = None if not self.host else self.host
sys.audit("imaplib.open", self, self.host, self.port)
- return socket.create_connection((host, self.port))
+ address = (host, self.port)
+ if timeout is not None:
+ return socket.create_connection(address, timeout)
+ return socket.create_connection(address)
- def open(self, host = '', port = IMAP4_PORT):
+ def open(self, host='', port=IMAP4_PORT, timeout=None):
"""Setup connection to remote server on "host:port"
(default: localhost:standard IMAP4 port).
This connection will be used by the routines:
@@ -300,7 +308,7 @@ class IMAP4:
"""
self.host = host
self.port = port
- self.sock = self._create_socket()
+ self.sock = self._create_socket(timeout)
self.file = self.sock.makefile('rb')
@@ -1261,7 +1269,7 @@ if HAVE_SSL:
"""IMAP4 client class over SSL connection
- Instantiate with: IMAP4_SSL([host[, port[, keyfile[, certfile[, ssl_context]]]]])
+ Instantiate with: IMAP4_SSL([host[, port[, keyfile[, certfile[, ssl_context[, timeout=None]]]]]])
host - host's name (default: localhost);
port - port number (default: standard IMAP4 SSL port);
@@ -1271,13 +1279,15 @@ if HAVE_SSL:
and private key (default: None)
Note: if ssl_context is provided, then parameters keyfile or
certfile should not be set otherwise ValueError is raised.
+ timeout - socket timeout (default: None) If timeout is not given or is None,
+ the global default socket timeout is used
for more documentation see the docstring of the parent class IMAP4.
"""
def __init__(self, host='', port=IMAP4_SSL_PORT, keyfile=None,
- certfile=None, ssl_context=None):
+ certfile=None, ssl_context=None, timeout=None):
if ssl_context is not None and keyfile is not None:
raise ValueError("ssl_context and keyfile arguments are mutually "
"exclusive")
@@ -1294,20 +1304,20 @@ if HAVE_SSL:
ssl_context = ssl._create_stdlib_context(certfile=certfile,
keyfile=keyfile)
self.ssl_context = ssl_context
- IMAP4.__init__(self, host, port)
+ IMAP4.__init__(self, host, port, timeout)
- def _create_socket(self):
- sock = IMAP4._create_socket(self)
+ def _create_socket(self, timeout):
+ sock = IMAP4._create_socket(self, timeout)
return self.ssl_context.wrap_socket(sock,
server_hostname=self.host)
- def open(self, host='', port=IMAP4_SSL_PORT):
+ def open(self, host='', port=IMAP4_SSL_PORT, timeout=None):
"""Setup connection to remote server on "host:port".
(default: localhost:standard IMAP4 SSL port).
This connection will be used by the routines:
read, readline, send, shutdown.
"""
- IMAP4.open(self, host, port)
+ IMAP4.open(self, host, port, timeout)
__all__.append("IMAP4_SSL")
@@ -1329,7 +1339,7 @@ class IMAP4_stream(IMAP4):
IMAP4.__init__(self)
- def open(self, host = None, port = None):
+ def open(self, host=None, port=None, timeout=None):
"""Setup a stream connection.
This connection will be used by the routines:
read, readline, send, shutdown.
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 8de0e9ee79f..7b74e88820d 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -978,7 +978,12 @@ def _find_and_load_unlocked(name, import_):
if parent:
# Set the module as an attribute on its parent.
parent_module = sys.modules[parent]
- setattr(parent_module, name.rpartition('.')[2], module)
+ child = name.rpartition('.')[2]
+ try:
+ setattr(parent_module, child, module)
+ except AttributeError:
+ msg = f"Cannot set an attribute on {parent!r} for child module {child!r}"
+ _warnings.warn(msg, ImportWarning)
return module
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
index d62c6cb77cd..2434cf06fd4 100644
--- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py
@@ -274,6 +274,10 @@ _code_type = type(_write_atomic.__code__)
# Python 3.9a0 3420 (add LOAD_ASSERTION_ERROR #34880)
# Python 3.9a0 3421 (simplified bytecode for with blocks #32949)
# Python 3.9a0 3422 (remove BEGIN_FINALLY, END_FINALLY, CALL_FINALLY, POP_FINALLY bytecodes #33387)
+# Python 3.9a2 3423 (add IS_OP, CONTAINS_OP and JUMP_IF_NOT_EXC_MATCH bytecodes #39156)
+# Python 3.9a2 3424 (simplify bytecodes for *value unpacking)
+# Python 3.9a2 3425 (simplify bytecodes for **value unpacking)
+
#
# MAGIC must change whenever the bytecode emitted by the compiler may no
# longer be understood by older implementations of the eval loop (usually
@@ -282,7 +286,7 @@ _code_type = type(_write_atomic.__code__)
# Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
# in PC/launcher.c must also be updated.
-MAGIC_NUMBER = (3422).to_bytes(2, 'little') + b'\r\n'
+MAGIC_NUMBER = (3425).to_bytes(2, 'little') + b'\r\n'
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
_PYCACHE = '__pycache__'
diff --git a/Lib/importlib/metadata.py b/Lib/importlib/metadata.py
index 53f9fb59346..831f593277c 100644
--- a/Lib/importlib/metadata.py
+++ b/Lib/importlib/metadata.py
@@ -10,6 +10,7 @@ import zipfile
import operator
import functools
import itertools
+import posixpath
import collections
from configparser import ConfigParser
@@ -371,10 +372,6 @@ class DistributionFinder(MetaPathFinder):
"""
return vars(self).get('path', sys.path)
- @property
- def pattern(self):
- return '.*' if self.name is None else re.escape(self.name)
-
@abc.abstractmethod
def find_distributions(self, context=Context()):
"""
@@ -386,6 +383,75 @@ class DistributionFinder(MetaPathFinder):
"""
+class FastPath:
+ """
+ Micro-optimized class for searching a path for
+ children.
+ """
+
+ def __init__(self, root):
+ self.root = root
+ self.base = os.path.basename(root).lower()
+
+ def joinpath(self, child):
+ return pathlib.Path(self.root, child)
+
+ def children(self):
+ with suppress(Exception):
+ return os.listdir(self.root or '')
+ with suppress(Exception):
+ return self.zip_children()
+ return []
+
+ def zip_children(self):
+ zip_path = zipfile.Path(self.root)
+ names = zip_path.root.namelist()
+ self.joinpath = zip_path.joinpath
+
+ return (
+ posixpath.split(child)[0]
+ for child in names
+ )
+
+ def is_egg(self, search):
+ base = self.base
+ return (
+ base == search.versionless_egg_name
+ or base.startswith(search.prefix)
+ and base.endswith('.egg'))
+
+ def search(self, name):
+ for child in self.children():
+ n_low = child.lower()
+ if (n_low in name.exact_matches
+ or n_low.startswith(name.prefix)
+ and n_low.endswith(name.suffixes)
+ # legacy case:
+ or self.is_egg(name) and n_low == 'egg-info'):
+ yield self.joinpath(child)
+
+
+class Prepared:
+ """
+ A prepared search for metadata on a possibly-named package.
+ """
+ normalized = ''
+ prefix = ''
+ suffixes = '.dist-info', '.egg-info'
+ exact_matches = [''][:0]
+ versionless_egg_name = ''
+
+ def __init__(self, name):
+ self.name = name
+ if name is None:
+ return
+ self.normalized = name.lower().replace('-', '_')
+ self.prefix = self.normalized + '-'
+ self.exact_matches = [
+ self.normalized + suffix for suffix in self.suffixes]
+ self.versionless_egg_name = self.normalized + '.egg'
+
+
class MetadataPathFinder(DistributionFinder):
@classmethod
def find_distributions(cls, context=DistributionFinder.Context()):
@@ -397,45 +463,17 @@ class MetadataPathFinder(DistributionFinder):
(or all names if ``None`` indicated) along the paths in the list
of directories ``context.path``.
"""
- found = cls._search_paths(context.pattern, context.path)
+ found = cls._search_paths(context.name, context.path)
return map(PathDistribution, found)
@classmethod
- def _search_paths(cls, pattern, paths):
+ def _search_paths(cls, name, paths):
"""Find metadata directories in paths heuristically."""
return itertools.chain.from_iterable(
- cls._search_path(path, pattern)
- for path in map(cls._switch_path, paths)
+ path.search(Prepared(name))
+ for path in map(FastPath, paths)
)
- @staticmethod
- def _switch_path(path):
- PYPY_OPEN_BUG = False
- if not PYPY_OPEN_BUG or os.path.isfile(path): # pragma: no branch
- with suppress(Exception):
- return zipfile.Path(path)
- return pathlib.Path(path)
-
- @classmethod
- def _matches_info(cls, normalized, item):
- template = r'{pattern}(-.*)?\.(dist|egg)-info'
- manifest = template.format(pattern=normalized)
- return re.match(manifest, item.name, flags=re.IGNORECASE)
-
- @classmethod
- def _matches_legacy(cls, normalized, item):
- template = r'{pattern}-.*\.egg[\\/]EGG-INFO'
- manifest = template.format(pattern=normalized)
- return re.search(manifest, str(item), flags=re.IGNORECASE)
-
- @classmethod
- def _search_path(cls, root, pattern):
- if not root.is_dir():
- return ()
- normalized = pattern.replace('-', '_')
- return (item for item in root.iterdir()
- if cls._matches_info(normalized, item)
- or cls._matches_legacy(normalized, item))
class PathDistribution(Distribution):
diff --git a/Lib/inspect.py b/Lib/inspect.py
index 608ca955116..950bdb22179 100644
--- a/Lib/inspect.py
+++ b/Lib/inspect.py
@@ -48,7 +48,7 @@ import warnings
import functools
import builtins
from operator import attrgetter
-from collections import namedtuple, OrderedDict
+from collections import namedtuple
# Create constants for the compiler flags in Include/code.h
# We try to get them from dis to avoid duplication
@@ -1727,7 +1727,7 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
"""
old_params = wrapped_sig.parameters
- new_params = OrderedDict(old_params.items())
+ new_params = {}
partial_args = partial.args or ()
partial_keywords = partial.keywords or {}
@@ -1743,6 +1743,7 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
transform_to_kwonly = False
+ kwonly_params = {} # Keyword only parameters are moved to end.
for param_name, param in old_params.items():
try:
arg_value = ba.arguments[param_name]
@@ -1752,7 +1753,6 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
if param.kind is _POSITIONAL_ONLY:
# If positional-only parameter is bound by partial,
# it effectively disappears from the signature
- new_params.pop(param_name)
continue
if param.kind is _POSITIONAL_OR_KEYWORD:
@@ -1771,28 +1771,26 @@ def _signature_get_partial(wrapped_sig, partial, extra_args=()):
# multiple values.
transform_to_kwonly = True
# Set the new default value
- new_params[param_name] = param.replace(default=arg_value)
+ param = param.replace(default=arg_value)
else:
# was passed as a positional argument
- new_params.pop(param.name)
continue
if param.kind is _KEYWORD_ONLY:
# Set the new default value
- new_params[param_name] = param.replace(default=arg_value)
+ param = param.replace(default=arg_value)
if transform_to_kwonly:
assert param.kind is not _POSITIONAL_ONLY
if param.kind is _POSITIONAL_OR_KEYWORD:
- new_param = new_params[param_name].replace(kind=_KEYWORD_ONLY)
- new_params[param_name] = new_param
- new_params.move_to_end(param_name)
+ kwonly_params[param_name] = param.replace(kind=_KEYWORD_ONLY)
elif param.kind in (_KEYWORD_ONLY, _VAR_KEYWORD):
- new_params.move_to_end(param_name)
- elif param.kind is _VAR_POSITIONAL:
- new_params.pop(param.name)
+ kwonly_params[param_name] = param
+ else:
+ new_params[param_name] = param
+ new_params.update(kwonly_params)
return wrapped_sig.replace(parameters=new_params.values())
@@ -2602,7 +2600,7 @@ class BoundArguments:
Has the following public attributes:
- * arguments : OrderedDict
+ * arguments : dict
An ordered mutable mapping of parameters' names to arguments' values.
Does not contain arguments' default values.
* signature : Signature
@@ -2702,7 +2700,7 @@ class BoundArguments:
# Signature.bind_partial().
continue
new_arguments.append((name, val))
- self.arguments = OrderedDict(new_arguments)
+ self.arguments = dict(new_arguments)
def __eq__(self, other):
if self is other:
@@ -2733,7 +2731,7 @@ class Signature:
A Signature object has the following public attributes and methods:
- * parameters : OrderedDict
+ * parameters : dict
An ordered mapping of parameters' names to the corresponding
Parameter objects (keyword-only arguments are in the same order
as listed in `code.co_varnames`).
@@ -2763,14 +2761,14 @@ class Signature:
"""
if parameters is None:
- params = OrderedDict()
+ params = {}
else:
if __validate_parameters__:
- params = OrderedDict()
+ params = {}
top_kind = _POSITIONAL_ONLY
kind_defaults = False
- for idx, param in enumerate(parameters):
+ for param in parameters:
kind = param.kind
name = param.name
@@ -2805,8 +2803,7 @@ class Signature:
params[name] = param
else:
- params = OrderedDict(((param.name, param)
- for param in parameters))
+ params = {param.name: param for param in parameters}
self._parameters = types.MappingProxyType(params)
self._return_annotation = return_annotation
@@ -2888,7 +2885,7 @@ class Signature:
def _bind(self, args, kwargs, *, partial=False):
"""Private method. Don't use directly."""
- arguments = OrderedDict()
+ arguments = {}
parameters = iter(self.parameters.values())
parameters_ex = ()
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 1ba8b48bd78..2c52bdeba67 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -329,8 +329,6 @@ def loads(s, *, cls=None, object_hook=None, parse_float=None,
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg; otherwise ``JSONDecoder`` is used.
-
- The ``encoding`` argument is ignored and deprecated since Python 3.1.
"""
if isinstance(s, str):
if s.startswith('\ufeff'):
@@ -342,15 +340,6 @@ def loads(s, *, cls=None, object_hook=None, parse_float=None,
f'not {s.__class__.__name__}')
s = s.decode(detect_encoding(s), 'surrogatepass')
- if "encoding" in kw:
- import warnings
- warnings.warn(
- "'encoding' is ignored and deprecated. It will be removed in Python 3.9",
- DeprecationWarning,
- stacklevel=2
- )
- del kw['encoding']
-
if (cls is None and object_hook is None and
parse_int is None and parse_float is None and
parse_constant is None and object_pairs_hook is None and not kw):
diff --git a/Lib/lib2to3/fixes/fix_filter.py b/Lib/lib2to3/fixes/fix_filter.py
index a7a5a154f6f..38e9078f11a 100644
--- a/Lib/lib2to3/fixes/fix_filter.py
+++ b/Lib/lib2to3/fixes/fix_filter.py
@@ -17,7 +17,7 @@ Python 2.6 figure it out.
from .. import fixer_base
from ..pytree import Node
from ..pygram import python_symbols as syms
-from ..fixer_util import Name, ArgList, ListComp, in_special_context
+from ..fixer_util import Name, ArgList, ListComp, in_special_context, parenthesize
class FixFilter(fixer_base.ConditionalFix):
@@ -65,10 +65,14 @@ class FixFilter(fixer_base.ConditionalFix):
trailers.append(t.clone())
if "filter_lambda" in results:
+ xp = results.get("xp").clone()
+ if xp.type == syms.test:
+ xp.prefix = ""
+ xp = parenthesize(xp)
+
new = ListComp(results.get("fp").clone(),
results.get("fp").clone(),
- results.get("it").clone(),
- results.get("xp").clone())
+ results.get("it").clone(), xp)
new = Node(syms.power, [new] + trailers, prefix="")
elif "none" in results:
diff --git a/Lib/lib2to3/main.py b/Lib/lib2to3/main.py
index c51626babf8..f2849fd6be3 100644
--- a/Lib/lib2to3/main.py
+++ b/Lib/lib2to3/main.py
@@ -154,6 +154,8 @@ def main(fixer_pkg, args=None):
help="List available transformations")
parser.add_option("-p", "--print-function", action="store_true",
help="Modify the grammar so that print() is a function")
+ parser.add_option("-e", "--exec-function", action="store_true",
+ help="Modify the grammar so that exec() is a function")
parser.add_option("-v", "--verbose", action="store_true",
help="More verbose logging")
parser.add_option("--no-diffs", action="store_true",
@@ -211,6 +213,9 @@ def main(fixer_pkg, args=None):
if options.print_function:
flags["print_function"] = True
+ if options.exec_function:
+ flags["exec_function"] = True
+
# Set up logging handler
level = logging.DEBUG if options.verbose else logging.INFO
logging.basicConfig(format='%(name)s: %(message)s', level=level)
diff --git a/Lib/lib2to3/refactor.py b/Lib/lib2to3/refactor.py
index 55fd60fa27c..3a5aafffc6d 100644
--- a/Lib/lib2to3/refactor.py
+++ b/Lib/lib2to3/refactor.py
@@ -155,6 +155,7 @@ class FixerError(Exception):
class RefactoringTool(object):
_default_options = {"print_function" : False,
+ "exec_function": False,
"write_unchanged_files" : False}
CLASS_PREFIX = "Fix" # The prefix for fixer classes
@@ -173,10 +174,13 @@ class RefactoringTool(object):
self.options = self._default_options.copy()
if options is not None:
self.options.update(options)
- if self.options["print_function"]:
- self.grammar = pygram.python_grammar_no_print_statement
- else:
- self.grammar = pygram.python_grammar
+ self.grammar = pygram.python_grammar.copy()
+
+ if self.options['print_function']:
+ del self.grammar.keywords["print"]
+ elif self.options['exec_function']:
+ del self.grammar.keywords["exec"]
+
# When this is True, the refactor*() methods will call write_file() for
# files processed even if they were not changed during refactoring. If
# and only if the refactor method's write parameter was True.
diff --git a/Lib/lib2to3/tests/test_fixers.py b/Lib/lib2to3/tests/test_fixers.py
index 3da5dd845c9..a2852419818 100644
--- a/Lib/lib2to3/tests/test_fixers.py
+++ b/Lib/lib2to3/tests/test_fixers.py
@@ -2954,6 +2954,11 @@ class Test_filter(FixerTestCase):
a = """x = [x for x in range(10) if x%2 == 0]"""
self.check(b, a)
+ # bpo-38871
+ b = """filter(lambda x: True if x > 2 else False, [1, 2, 3])"""
+ a = """[x for x in [1, 2, 3] if (True if x > 2 else False)]"""
+ self.check(b, a)
+
def test_filter_trailers(self):
b = """x = filter(None, 'abc')[0]"""
a = """x = [_f for _f in 'abc' if _f][0]"""
diff --git a/Lib/lib2to3/tests/test_refactor.py b/Lib/lib2to3/tests/test_refactor.py
index 9e3b8fbb90b..be705679f06 100644
--- a/Lib/lib2to3/tests/test_refactor.py
+++ b/Lib/lib2to3/tests/test_refactor.py
@@ -44,9 +44,13 @@ class TestRefactoringTool(unittest.TestCase):
def test_print_function_option(self):
rt = self.rt({"print_function" : True})
- self.assertIs(rt.grammar, pygram.python_grammar_no_print_statement)
- self.assertIs(rt.driver.grammar,
- pygram.python_grammar_no_print_statement)
+ self.assertNotIn("print", rt.grammar.keywords)
+ self.assertNotIn("print", rt.driver.grammar.keywords)
+
+ def test_exec_function_option(self):
+ rt = self.rt({"exec_function" : True})
+ self.assertNotIn("exec", rt.grammar.keywords)
+ self.assertNotIn("exec", rt.driver.grammar.keywords)
def test_write_unchanged_files_option(self):
rt = self.rt()
diff --git a/Lib/linecache.py b/Lib/linecache.py
index 3afcce1f0a1..ddd0abf2cf0 100644
--- a/Lib/linecache.py
+++ b/Lib/linecache.py
@@ -10,17 +10,8 @@ import sys
import os
import tokenize
-__all__ = ["getline", "clearcache", "checkcache"]
+__all__ = ["getline", "clearcache", "checkcache", "lazycache"]
-def getline(filename, lineno, module_globals=None):
- lines = getlines(filename, module_globals)
- if 1 <= lineno <= len(lines):
- return lines[lineno-1]
- else:
- return ''
-
-
-# The cache
# The cache. Maps filenames to either a thunk which will provide source code,
# or a tuple (size, mtime, lines, fullname) once loaded.
@@ -29,9 +20,17 @@ cache = {}
def clearcache():
"""Clear the cache entirely."""
+ cache.clear()
- global cache
- cache = {}
+
+def getline(filename, lineno, module_globals=None):
+ """Get a line for a Python source file from the cache.
+ Update the cache if it doesn't contain an entry for this file already."""
+
+ lines = getlines(filename, module_globals)
+ if 1 <= lineno <= len(lines):
+ return lines[lineno - 1]
+ return ''
def getlines(filename, module_globals=None):
@@ -56,11 +55,10 @@ def checkcache(filename=None):
if filename is None:
filenames = list(cache.keys())
+ elif filename in cache:
+ filenames = [filename]
else:
- if filename in cache:
- filenames = [filename]
- else:
- return
+ return
for filename in filenames:
entry = cache[filename]
@@ -109,8 +107,10 @@ def updatecache(filename, module_globals=None):
# for this module.
return []
cache[filename] = (
- len(data), None,
- [line+'\n' for line in data.splitlines()], fullname
+ len(data),
+ None,
+ [line + '\n' for line in data.splitlines()],
+ fullname
)
return cache[filename][2]
diff --git a/Lib/locale.py b/Lib/locale.py
index dd8a08524a0..1a4e9f694f3 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -279,6 +279,8 @@ def currency(val, symbol=True, grouping=False, international=False):
if precedes:
s = smb + (separated and ' ' or '') + s
else:
+ if international and smb[-1] == ' ':
+ smb = smb[:-1]
s = s + (separated and ' ' or '') + smb
sign_pos = conv[val<0 and 'n_sign_posn' or 'p_sign_posn']
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 62a87a71b1a..59d5fa5b64d 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -1687,12 +1687,15 @@ class Logger(Filterer):
return self._cache[level]
except KeyError:
_acquireLock()
- if self.manager.disable >= level:
- is_enabled = self._cache[level] = False
- else:
- is_enabled = self._cache[level] = level >= self.getEffectiveLevel()
- _releaseLock()
-
+ try:
+ if self.manager.disable >= level:
+ is_enabled = self._cache[level] = False
+ else:
+ is_enabled = self._cache[level] = (
+ level >= self.getEffectiveLevel()
+ )
+ finally:
+ _releaseLock()
return is_enabled
def getChild(self, suffix):
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index 4a3b8966ede..fd3aded7608 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -448,7 +448,7 @@ class BaseConfigurator(object):
value = ConvertingList(value)
value.configurator = self
elif not isinstance(value, ConvertingTuple) and\
- isinstance(value, tuple):
+ isinstance(value, tuple) and not hasattr(value, '_fields'):
value = ConvertingTuple(value)
value.configurator = self
elif isinstance(value, str): # str for py3k
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index ea14541e1e5..047798f6dc1 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -742,6 +742,10 @@ class SysLogHandler(logging.Handler):
LOG_CRON = 9 # clock daemon
LOG_AUTHPRIV = 10 # security/authorization messages (private)
LOG_FTP = 11 # FTP daemon
+ LOG_NTP = 12 # NTP subsystem
+ LOG_SECURITY = 13 # Log audit
+ LOG_CONSOLE = 14 # Log alert
+ LOG_SOLCRON = 15 # Scheduling daemon (Solaris)
# other codes through 15 reserved for system use
LOG_LOCAL0 = 16 # reserved for local use
@@ -769,27 +773,30 @@ class SysLogHandler(logging.Handler):
}
facility_names = {
- "auth": LOG_AUTH,
- "authpriv": LOG_AUTHPRIV,
- "cron": LOG_CRON,
- "daemon": LOG_DAEMON,
- "ftp": LOG_FTP,
- "kern": LOG_KERN,
- "lpr": LOG_LPR,
- "mail": LOG_MAIL,
- "news": LOG_NEWS,
- "security": LOG_AUTH, # DEPRECATED
- "syslog": LOG_SYSLOG,
- "user": LOG_USER,
- "uucp": LOG_UUCP,
- "local0": LOG_LOCAL0,
- "local1": LOG_LOCAL1,
- "local2": LOG_LOCAL2,
- "local3": LOG_LOCAL3,
- "local4": LOG_LOCAL4,
- "local5": LOG_LOCAL5,
- "local6": LOG_LOCAL6,
- "local7": LOG_LOCAL7,
+ "auth": LOG_AUTH,
+ "authpriv": LOG_AUTHPRIV,
+ "console": LOG_CONSOLE,
+ "cron": LOG_CRON,
+ "daemon": LOG_DAEMON,
+ "ftp": LOG_FTP,
+ "kern": LOG_KERN,
+ "lpr": LOG_LPR,
+ "mail": LOG_MAIL,
+ "news": LOG_NEWS,
+ "ntp": LOG_NTP,
+ "security": LOG_SECURITY,
+ "solaris-cron": LOG_SOLCRON,
+ "syslog": LOG_SYSLOG,
+ "user": LOG_USER,
+ "uucp": LOG_UUCP,
+ "local0": LOG_LOCAL0,
+ "local1": LOG_LOCAL1,
+ "local2": LOG_LOCAL2,
+ "local3": LOG_LOCAL3,
+ "local4": LOG_LOCAL4,
+ "local5": LOG_LOCAL5,
+ "local6": LOG_LOCAL6,
+ "local7": LOG_LOCAL7,
}
#The map below appears to be trivially lowercasing the key. However,
diff --git a/Lib/mimetypes.py b/Lib/mimetypes.py
index 9b42bf6dd2c..e972ca2e291 100644
--- a/Lib/mimetypes.py
+++ b/Lib/mimetypes.py
@@ -401,6 +401,7 @@ def _default_mime_types():
'.Z': 'compress',
'.bz2': 'bzip2',
'.xz': 'xz',
+ '.br': 'br',
}
# Before adding new types, make sure they are either registered with IANA,
@@ -563,7 +564,7 @@ def _default_mime_types():
_default_mime_types()
-if __name__ == '__main__':
+def _main():
import getopt
USAGE = """\
@@ -607,3 +608,7 @@ More than one type argument may be given.
guess, encoding = guess_type(gtype, strict)
if not guess: print("I don't know anything about type", gtype)
else: print('type:', guess, 'encoding:', encoding)
+
+
+if __name__ == '__main__':
+ _main()
diff --git a/Lib/multiprocessing/spawn.py b/Lib/multiprocessing/spawn.py
index 075f3455478..7cc129e2610 100644
--- a/Lib/multiprocessing/spawn.py
+++ b/Lib/multiprocessing/spawn.py
@@ -36,7 +36,7 @@ else:
if WINSERVICE:
_python_exe = os.path.join(sys.exec_prefix, 'python.exe')
else:
- _python_exe = sys._base_executable
+ _python_exe = sys.executable
def set_executable(exe):
global _python_exe
diff --git a/Lib/nntplib.py b/Lib/nntplib.py
index 1b7e83af01a..aa9b46a8aaa 100644
--- a/Lib/nntplib.py
+++ b/Lib/nntplib.py
@@ -67,7 +67,6 @@ import re
import socket
import collections
import datetime
-import warnings
import sys
try:
@@ -834,44 +833,6 @@ class _NNTPBase:
fmt = self._getoverviewfmt()
return resp, _parse_overview(lines, fmt)
- def xgtitle(self, group, *, file=None):
- """Process an XGTITLE command (optional server extension) Arguments:
- - group: group name wildcard (i.e. news.*)
- Returns:
- - resp: server response if successful
- - list: list of (name,title) strings"""
- warnings.warn("The XGTITLE extension is not actively used, "
- "use descriptions() instead",
- DeprecationWarning, 2)
- line_pat = re.compile('^([^ \t]+)[ \t]+(.*)$')
- resp, raw_lines = self._longcmdstring('XGTITLE ' + group, file)
- lines = []
- for raw_line in raw_lines:
- match = line_pat.search(raw_line.strip())
- if match:
- lines.append(match.group(1, 2))
- return resp, lines
-
- def xpath(self, id):
- """Process an XPATH command (optional server extension) Arguments:
- - id: Message id of article
- Returns:
- resp: server response if successful
- path: directory path to article
- """
- warnings.warn("The XPATH extension is not actively used",
- DeprecationWarning, 2)
-
- resp = self._shortcmd('XPATH {0}'.format(id))
- if not resp.startswith('223'):
- raise NNTPReplyError(resp)
- try:
- [resp_num, path] = resp.split()
- except ValueError:
- raise NNTPReplyError(resp) from None
- else:
- return resp, path
-
def date(self):
"""Process the DATE command.
Returns:
@@ -1042,13 +1003,11 @@ class NNTP(_NNTPBase):
"""
self.host = host
self.port = port
- sys.audit("nntplib.connect", self, host, port)
- self.sock = socket.create_connection((host, port), timeout)
+ self.sock = self._create_socket(timeout)
file = None
try:
file = self.sock.makefile("rwb")
- _NNTPBase.__init__(self, file, host,
- readermode, timeout)
+ super().__init__(file, host, readermode, timeout)
if user or usenetrc:
self.login(user, password, usenetrc)
except:
@@ -1057,15 +1016,21 @@ class NNTP(_NNTPBase):
self.sock.close()
raise
+ def _create_socket(self, timeout):
+ if timeout is not None and not timeout:
+ raise ValueError('Non-blocking socket (timeout=0) is not supported')
+ sys.audit("nntplib.connect", self, self.host, self.port)
+ return socket.create_connection((self.host, self.port), timeout)
+
def _close(self):
try:
- _NNTPBase._close(self)
+ super()._close()
finally:
self.sock.close()
if _have_ssl:
- class NNTP_SSL(_NNTPBase):
+ class NNTP_SSL(NNTP):
def __init__(self, host, port=NNTP_SSL_PORT,
user=None, password=None, ssl_context=None,
@@ -1074,27 +1039,19 @@ if _have_ssl:
"""This works identically to NNTP.__init__, except for the change
in default port and the `ssl_context` argument for SSL connections.
"""
- sys.audit("nntplib.connect", self, host, port)
- self.sock = socket.create_connection((host, port), timeout)
- file = None
- try:
- self.sock = _encrypt_on(self.sock, ssl_context, host)
- file = self.sock.makefile("rwb")
- _NNTPBase.__init__(self, file, host,
- readermode=readermode, timeout=timeout)
- if user or usenetrc:
- self.login(user, password, usenetrc)
- except:
- if file:
- file.close()
- self.sock.close()
- raise
+ self.ssl_context = ssl_context
+ super().__init__(host, port, user, password, readermode,
+ usenetrc, timeout)
- def _close(self):
+ def _create_socket(self, timeout):
+ sock = super()._create_socket(timeout)
try:
- _NNTPBase._close(self)
- finally:
- self.sock.close()
+ sock = _encrypt_on(sock, self.ssl_context, self.host)
+ except:
+ sock.close()
+ raise
+ else:
+ return sock
__all__.append("NNTP_SSL")
@@ -1107,7 +1064,7 @@ if __name__ == '__main__':
nntplib built-in demo - display the latest articles in a newsgroup""")
parser.add_argument('-g', '--group', default='gmane.comp.python.general',
help='group to fetch messages from (default: %(default)s)')
- parser.add_argument('-s', '--server', default='news.gmane.org',
+ parser.add_argument('-s', '--server', default='news.gmane.io',
help='NNTP server hostname (default: %(default)s)')
parser.add_argument('-p', '--port', default=-1, type=int,
help='NNTP port number (default: %s / %s)' % (NNTP_PORT, NNTP_SSL_PORT))
diff --git a/Lib/opcode.py b/Lib/opcode.py
index 1898a38abbb..ac1aa535f66 100644
--- a/Lib/opcode.py
+++ b/Lib/opcode.py
@@ -21,8 +21,7 @@ try:
except ImportError:
pass
-cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
- 'is not', 'exception match', 'BAD')
+cmp_op = ('<', '<=', '==', '!=', '>', '>=')
hasconst = []
hasname = []
@@ -118,6 +117,7 @@ def_op('INPLACE_AND', 77)
def_op('INPLACE_XOR', 78)
def_op('INPLACE_OR', 79)
+def_op('LIST_TO_TUPLE', 82)
def_op('RETURN_VALUE', 83)
def_op('IMPORT_STAR', 84)
def_op('SETUP_ANNOTATIONS', 85)
@@ -159,6 +159,10 @@ jabs_op('POP_JUMP_IF_TRUE', 115) # ""
name_op('LOAD_GLOBAL', 116) # Index in name list
+def_op('IS_OP', 117)
+def_op('CONTAINS_OP', 118)
+
+jabs_op('JUMP_IF_NOT_EXC_MATCH', 121)
jrel_op('SETUP_FINALLY', 122) # Distance to target address
def_op('LOAD_FAST', 124) # Local variable number
@@ -196,20 +200,18 @@ hasfree.append(148)
def_op('EXTENDED_ARG', 144)
EXTENDED_ARG = 144
-def_op('BUILD_LIST_UNPACK', 149)
-def_op('BUILD_MAP_UNPACK', 150)
-def_op('BUILD_MAP_UNPACK_WITH_CALL', 151)
-def_op('BUILD_TUPLE_UNPACK', 152)
-def_op('BUILD_SET_UNPACK', 153)
-
jrel_op('SETUP_ASYNC_WITH', 154)
def_op('FORMAT_VALUE', 155)
def_op('BUILD_CONST_KEY_MAP', 156)
def_op('BUILD_STRING', 157)
-def_op('BUILD_TUPLE_UNPACK_WITH_CALL', 158)
name_op('LOAD_METHOD', 160)
def_op('CALL_METHOD', 161)
+def_op('LIST_EXTEND', 162)
+def_op('SET_UPDATE', 163)
+def_op('DICT_MERGE', 164)
+def_op('DICT_UPDATE', 165)
+
del def_op, name_op, jrel_op, jabs_op
diff --git a/Lib/os.py b/Lib/os.py
index ca418edbc57..ab75b94d4fe 100644
--- a/Lib/os.py
+++ b/Lib/os.py
@@ -336,7 +336,10 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
dirs.remove('CVS') # don't visit CVS directories
"""
- top = fspath(top)
+ sys.audit("os.walk", top, topdown, onerror, followlinks)
+ return _walk(fspath(top), topdown, onerror, followlinks)
+
+def _walk(top, topdown, onerror, followlinks):
dirs = []
nondirs = []
walk_dirs = []
@@ -410,11 +413,11 @@ def walk(top, topdown=True, onerror=None, followlinks=False):
# the caller can replace the directory entry during the "yield"
# above.
if followlinks or not islink(new_path):
- yield from walk(new_path, topdown, onerror, followlinks)
+ yield from _walk(new_path, topdown, onerror, followlinks)
else:
# Recurse into sub-directories
for new_path in walk_dirs:
- yield from walk(new_path, topdown, onerror, followlinks)
+ yield from _walk(new_path, topdown, onerror, followlinks)
# Yield after recursion if going bottom up
yield top, dirs, nondirs
@@ -455,6 +458,7 @@ if {open, stat} <= supports_dir_fd and {scandir, stat} <= supports_fd:
if 'CVS' in dirs:
dirs.remove('CVS') # don't visit CVS directories
"""
+ sys.audit("os.fwalk", top, topdown, onerror, follow_symlinks, dir_fd)
if not isinstance(top, int) or not hasattr(top, '__index__'):
top = fspath(top)
# Note: To guard against symlink races, we use the standard
@@ -654,17 +658,15 @@ def get_exec_path(env=None):
return path_list.split(pathsep)
-# Change environ to automatically call putenv(), unsetenv if they exist.
+# Change environ to automatically call putenv() and unsetenv()
from _collections_abc import MutableMapping
class _Environ(MutableMapping):
- def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue, putenv, unsetenv):
+ def __init__(self, data, encodekey, decodekey, encodevalue, decodevalue):
self.encodekey = encodekey
self.decodekey = decodekey
self.encodevalue = encodevalue
self.decodevalue = decodevalue
- self.putenv = putenv
- self.unsetenv = unsetenv
self._data = data
def __getitem__(self, key):
@@ -678,12 +680,12 @@ class _Environ(MutableMapping):
def __setitem__(self, key, value):
key = self.encodekey(key)
value = self.encodevalue(value)
- self.putenv(key, value)
+ putenv(key, value)
self._data[key] = value
def __delitem__(self, key):
encodedkey = self.encodekey(key)
- self.unsetenv(encodedkey)
+ unsetenv(encodedkey)
try:
del self._data[encodedkey]
except KeyError:
@@ -712,22 +714,6 @@ class _Environ(MutableMapping):
self[key] = value
return self[key]
-try:
- _putenv = putenv
-except NameError:
- _putenv = lambda key, value: None
-else:
- if "putenv" not in __all__:
- __all__.append("putenv")
-
-try:
- _unsetenv = unsetenv
-except NameError:
- _unsetenv = lambda key: _putenv(key, "")
-else:
- if "unsetenv" not in __all__:
- __all__.append("unsetenv")
-
def _createenviron():
if name == 'nt':
# Where Env Var Names Must Be UPPERCASE
@@ -755,8 +741,7 @@ def _createenviron():
data = environ
return _Environ(data,
encodekey, decode,
- encode, decode,
- _putenv, _unsetenv)
+ encode, decode)
# unicode environ
environ = _createenviron()
@@ -781,8 +766,7 @@ if supports_bytes_environ:
# bytes environ
environb = _Environ(environ._data,
_check_bytes, bytes,
- _check_bytes, bytes,
- _putenv, _unsetenv)
+ _check_bytes, bytes)
del _check_bytes
def getenvb(key, default=None):
diff --git a/Lib/pathlib.py b/Lib/pathlib.py
index 7d1d1150b0d..cfa574af6e8 100644
--- a/Lib/pathlib.py
+++ b/Lib/pathlib.py
@@ -253,9 +253,7 @@ class _WindowsFlavour(_Flavour):
return 'file:' + urlquote_from_bytes(path.as_posix().encode('utf-8'))
def gethomedir(self, username):
- if 'HOME' in os.environ:
- userhome = os.environ['HOME']
- elif 'USERPROFILE' in os.environ:
+ if 'USERPROFILE' in os.environ:
userhome = os.environ['USERPROFILE']
elif 'HOMEPATH' in os.environ:
try:
@@ -1136,6 +1134,7 @@ class Path(PurePath):
"""Iterate over this subtree and yield all existing files (of any
kind, including directories) matching the given relative pattern.
"""
+ sys.audit("pathlib.Path.glob", self, pattern)
if not pattern:
raise ValueError("Unacceptable pattern: {!r}".format(pattern))
drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
@@ -1150,6 +1149,7 @@ class Path(PurePath):
directories) matching the given relative pattern, anywhere in
this subtree.
"""
+ sys.audit("pathlib.Path.rglob", self, pattern)
drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
if drv or root:
raise NotImplementedError("Non-relative patterns are unsupported")
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 01d41422aa4..d7adc162c98 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -409,9 +409,9 @@ class _Pickler:
"""This takes a binary file for writing a pickle data stream.
The optional *protocol* argument tells the pickler to use the
- given protocol; supported protocols are 0, 1, 2, 3 and 4. The
- default protocol is 4. It was introduced in Python 3.4, it is
- incompatible with previous versions.
+ given protocol; supported protocols are 0, 1, 2, 3, 4 and 5.
+ The default protocol is 4. It was introduced in Python 3.4, and
+ is incompatible with previous versions.
Specifying a negative protocol version selects the highest
protocol version supported. The higher the protocol used, the
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
index 8474a773e7c..4bc3083ac19 100644
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -7,6 +7,7 @@ import importlib.util
import importlib.machinery
import os
import os.path
+import re
import sys
from types import ModuleType
import warnings
@@ -635,3 +636,71 @@ def get_data(package, resource):
parts.insert(0, os.path.dirname(mod.__file__))
resource_name = os.path.join(*parts)
return loader.get_data(resource_name)
+
+
+_DOTTED_WORDS = r'[a-z_]\w*(\.[a-z_]\w*)*'
+_NAME_PATTERN = re.compile(f'^({_DOTTED_WORDS})(:({_DOTTED_WORDS})?)?$', re.I)
+del _DOTTED_WORDS
+
+def resolve_name(name):
+ """
+ Resolve a name to an object.
+
+ It is expected that `name` will be a string in one of the following
+ formats, where W is shorthand for a valid Python identifier and dot stands
+ for a literal period in these pseudo-regexes:
+
+ W(.W)*
+ W(.W)*:(W(.W)*)?
+
+ The first form is intended for backward compatibility only. It assumes that
+ some part of the dotted name is a package, and the rest is an object
+ somewhere within that package, possibly nested inside other objects.
+ Because the place where the package stops and the object hierarchy starts
+ can't be inferred by inspection, repeated attempts to import must be done
+ with this form.
+
+ In the second form, the caller makes the division point clear through the
+ provision of a single colon: the dotted name to the left of the colon is a
+ package to be imported, and the dotted name to the right is the object
+ hierarchy within that package. Only one import is needed in this form. If
+ it ends with the colon, then a module object is returned.
+
+ The function will return an object (which might be a module), or raise one
+ of the following exceptions:
+
+ ValueError - if `name` isn't in a recognised format
+ ImportError - if an import failed when it shouldn't have
+ AttributeError - if a failure occurred when traversing the object hierarchy
+ within the imported package to get to the desired object)
+ """
+ m = _NAME_PATTERN.match(name)
+ if not m:
+ raise ValueError(f'invalid format: {name!r}')
+ groups = m.groups()
+ if groups[2]:
+ # there is a colon - a one-step import is all that's needed
+ mod = importlib.import_module(groups[0])
+ parts = groups[3].split('.') if groups[3] else []
+ else:
+ # no colon - have to iterate to find the package boundary
+ parts = name.split('.')
+ modname = parts.pop(0)
+ # first part *must* be a module/package.
+ mod = importlib.import_module(modname)
+ while parts:
+ p = parts[0]
+ s = f'{modname}.{p}'
+ try:
+ mod = importlib.import_module(s)
+ parts.pop(0)
+ modname = s
+ except ImportError:
+ break
+ # if we reach this point, mod is the module, already imported, and
+ # parts is the list of parts in the object hierarchy to be traversed, or
+ # an empty list if just the module is wanted.
+ result = mod
+ for p in parts:
+ result = getattr(result, p)
+ return result
diff --git a/Lib/poplib.py b/Lib/poplib.py
index 0b6750d2303..0f8587317c2 100644
--- a/Lib/poplib.py
+++ b/Lib/poplib.py
@@ -107,6 +107,8 @@ class POP3:
self.welcome = self._getresp()
def _create_socket(self, timeout):
+ if timeout is not None and not timeout:
+ raise ValueError('Non-blocking socket (timeout=0) is not supported')
return socket.create_connection((self.host, self.port), timeout)
def _putline(self, line):
diff --git a/Lib/pstats.py b/Lib/pstats.py
index 4b419a8ecdb..e781b91c605 100644
--- a/Lib/pstats.py
+++ b/Lib/pstats.py
@@ -25,11 +25,13 @@ import os
import time
import marshal
import re
+
from enum import Enum
from functools import cmp_to_key
+from dataclasses import dataclass
+from typing import Dict
-__all__ = ["Stats", "SortKey"]
-
+__all__ = ["Stats", "SortKey", "FunctionProfile", "StatsProfile"]
class SortKey(str, Enum):
CALLS = 'calls', 'ncalls'
@@ -52,6 +54,22 @@ class SortKey(str, Enum):
return obj
+@dataclass(unsafe_hash=True)
+class FunctionProfile:
+ ncalls: int
+ tottime: float
+ percall_tottime: float
+ cumtime: float
+ percall_cumtime: float
+ file_name: str
+ line_number: int
+
+@dataclass(unsafe_hash=True)
+class StatsProfile:
+ '''Class for keeping track of an item in inventory.'''
+ total_tt: float
+ func_profiles: Dict[str, FunctionProfile]
+
class Stats:
"""This class is used for creating reports from data generated by the
Profile class. It is a "friend" of that class, and imports data either
@@ -333,6 +351,41 @@ class Stats:
return new_list, msg
+ def get_stats_profile(self):
+ """This method returns an instance of StatsProfile, which contains a mapping
+ of function names to instances of FunctionProfile. Each FunctionProfile
+ instance holds information related to the function's profile such as how
+ long the function took to run, how many times it was called, etc...
+ """
+ func_list = self.fcn_list[:] if self.fcn_list else list(self.stats.keys())
+ if not func_list:
+ return StatsProfile(0, {})
+
+ total_tt = float(f8(self.total_tt))
+ func_profiles = {}
+ stats_profile = StatsProfile(total_tt, func_profiles)
+
+ for func in func_list:
+ cc, nc, tt, ct, callers = self.stats[func]
+ file_name, line_number, func_name = func
+ ncalls = str(nc) if nc == cc else (str(nc) + '/' + str(cc))
+ tottime = float(f8(tt))
+ percall_tottime = -1 if nc == 0 else float(f8(tt/nc))
+ cumtime = float(f8(ct))
+ percall_cumtime = -1 if cc == 0 else float(f8(ct/cc))
+ func_profile = FunctionProfile(
+ ncalls,
+ tottime, # time spent in this function alone
+ percall_tottime,
+ cumtime, # time spent in the function plus all functions that this function called,
+ percall_cumtime,
+ file_name,
+ line_number
+ )
+ func_profiles[func_name] = func_profile
+
+ return stats_profile
+
def get_print_list(self, sel_list):
width = self.max_name_len
if self.fcn_list:
diff --git a/Lib/pty.py b/Lib/pty.py
index e841f12f3ed..a32432041fa 100644
--- a/Lib/pty.py
+++ b/Lib/pty.py
@@ -8,6 +8,7 @@
from select import select
import os
+import sys
import tty
__all__ = ["openpty","fork","spawn"]
@@ -151,6 +152,7 @@ def spawn(argv, master_read=_read, stdin_read=_read):
"""Create a spawned process."""
if type(argv) == type(''):
argv = (argv,)
+ sys.audit('pty.spawn', argv)
pid, master_fd = fork()
if pid == CHILD:
os.execlp(argv[0], *argv)
diff --git a/Lib/pydoc.py b/Lib/pydoc.py
index e32fdf76978..f172700a15f 100755
--- a/Lib/pydoc.py
+++ b/Lib/pydoc.py
@@ -66,6 +66,7 @@ import pkgutil
import platform
import re
import sys
+import sysconfig
import time
import tokenize
import urllib.parse
@@ -392,9 +393,7 @@ class Doc:
docmodule = docclass = docroutine = docother = docproperty = docdata = fail
- def getdocloc(self, object,
- basedir=os.path.join(sys.base_exec_prefix, "lib",
- "python%d.%d" % sys.version_info[:2])):
+ def getdocloc(self, object, basedir=sysconfig.get_path('stdlib')):
"""Return the location of module docs or None"""
try:
diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py
index d9535f70be8..fd914465872 100644
--- a/Lib/pydoc_data/topics.py
+++ b/Lib/pydoc_data/topics.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-# Autogenerated by Sphinx on Wed Dec 18 22:05:39 2019
+# Autogenerated by Sphinx on Fri Jan 24 22:03:37 2020
topics = {'assert': 'The "assert" statement\n'
'**********************\n'
'\n'
@@ -470,24 +470,25 @@ topics = {'assert': 'The "assert" statement\n'
'The following code:\n'
'\n'
' async for TARGET in ITER:\n'
- ' BLOCK\n'
+ ' SUITE\n'
' else:\n'
- ' BLOCK2\n'
+ ' SUITE2\n'
'\n'
'Is semantically equivalent to:\n'
'\n'
' iter = (ITER)\n'
' iter = type(iter).__aiter__(iter)\n'
' running = True\n'
+ '\n'
' while running:\n'
' try:\n'
' TARGET = await type(iter).__anext__(iter)\n'
' except StopAsyncIteration:\n'
' running = False\n'
' else:\n'
- ' BLOCK\n'
+ ' SUITE\n'
' else:\n'
- ' BLOCK2\n'
+ ' SUITE2\n'
'\n'
'See also "__aiter__()" and "__anext__()" for details.\n'
'\n'
@@ -507,23 +508,27 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The following code:\n'
'\n'
- ' async with EXPR as VAR:\n'
- ' BLOCK\n'
+ ' async with EXPRESSION as TARGET:\n'
+ ' SUITE\n'
'\n'
- 'Is semantically equivalent to:\n'
+ 'is semantically equivalent to:\n'
'\n'
- ' mgr = (EXPR)\n'
- ' aexit = type(mgr).__aexit__\n'
- ' aenter = type(mgr).__aenter__(mgr)\n'
+ ' manager = (EXPRESSION)\n'
+ ' aenter = type(manager).__aenter__\n'
+ ' aexit = type(manager).__aexit__\n'
+ ' value = await aenter(manager)\n'
+ ' hit_except = False\n'
'\n'
- ' VAR = await aenter\n'
' try:\n'
- ' BLOCK\n'
+ ' TARGET = value\n'
+ ' SUITE\n'
' except:\n'
- ' if not await aexit(mgr, *sys.exc_info()):\n'
+ ' hit_except = True\n'
+ ' if not await aexit(manager, *sys.exc_info()):\n'
' raise\n'
- ' else:\n'
- ' await aexit(mgr, None, None, None)\n'
+ ' finally:\n'
+ ' if not hit_except:\n'
+ ' await aexit(manager, None, None, None)\n'
'\n'
'See also "__aenter__()" and "__aexit__()" for details.\n'
'\n'
@@ -2519,11 +2524,13 @@ topics = {'assert': 'The "assert" statement\n'
'"with_item")\n'
' is evaluated to obtain a context manager.\n'
'\n'
- '2. The context manager’s "__exit__()" is loaded for later use.\n'
+ '2. The context manager’s "__enter__()" is loaded for later use.\n'
'\n'
- '3. The context manager’s "__enter__()" method is invoked.\n'
+ '3. The context manager’s "__exit__()" is loaded for later use.\n'
'\n'
- '4. If a target was included in the "with" statement, the return\n'
+ '4. The context manager’s "__enter__()" method is invoked.\n'
+ '\n'
+ '5. If a target was included in the "with" statement, the return\n'
' value from "__enter__()" is assigned to it.\n'
'\n'
' Note: The "with" statement guarantees that if the '
@@ -2536,9 +2543,9 @@ topics = {'assert': 'The "assert" statement\n'
'occurring\n'
' within the suite would be. See step 6 below.\n'
'\n'
- '5. The suite is executed.\n'
+ '6. The suite is executed.\n'
'\n'
- '6. The context manager’s "__exit__()" method is invoked. If an\n'
+ '7. The context manager’s "__exit__()" method is invoked. If an\n'
' exception caused the suite to be exited, its type, value, '
'and\n'
' traceback are passed as arguments to "__exit__()". Otherwise, '
@@ -2560,18 +2567,42 @@ topics = {'assert': 'The "assert" statement\n'
'proceeds\n'
' at the normal location for the kind of exit that was taken.\n'
'\n'
+ 'The following code:\n'
+ '\n'
+ ' with EXPRESSION as TARGET:\n'
+ ' SUITE\n'
+ '\n'
+ 'is semantically equivalent to:\n'
+ '\n'
+ ' manager = (EXPRESSION)\n'
+ ' enter = type(manager).__enter__\n'
+ ' exit = type(manager).__exit__\n'
+ ' value = enter(manager)\n'
+ ' hit_except = False\n'
+ '\n'
+ ' try:\n'
+ ' TARGET = value\n'
+ ' SUITE\n'
+ ' except:\n'
+ ' hit_except = True\n'
+ ' if not exit(manager, *sys.exc_info()):\n'
+ ' raise\n'
+ ' finally:\n'
+ ' if not hit_except:\n'
+ ' exit(manager, None, None, None)\n'
+ '\n'
'With more than one item, the context managers are processed as '
'if\n'
'multiple "with" statements were nested:\n'
'\n'
' with A() as a, B() as b:\n'
- ' suite\n'
+ ' SUITE\n'
'\n'
- 'is equivalent to\n'
+ 'is semantically equivalent to:\n'
'\n'
' with A() as a:\n'
' with B() as b:\n'
- ' suite\n'
+ ' SUITE\n'
'\n'
'Changed in version 3.1: Support for multiple context '
'expressions.\n'
@@ -2935,24 +2966,25 @@ topics = {'assert': 'The "assert" statement\n'
'The following code:\n'
'\n'
' async for TARGET in ITER:\n'
- ' BLOCK\n'
+ ' SUITE\n'
' else:\n'
- ' BLOCK2\n'
+ ' SUITE2\n'
'\n'
'Is semantically equivalent to:\n'
'\n'
' iter = (ITER)\n'
' iter = type(iter).__aiter__(iter)\n'
' running = True\n'
+ '\n'
' while running:\n'
' try:\n'
' TARGET = await type(iter).__anext__(iter)\n'
' except StopAsyncIteration:\n'
' running = False\n'
' else:\n'
- ' BLOCK\n'
+ ' SUITE\n'
' else:\n'
- ' BLOCK2\n'
+ ' SUITE2\n'
'\n'
'See also "__aiter__()" and "__anext__()" for details.\n'
'\n'
@@ -2972,23 +3004,27 @@ topics = {'assert': 'The "assert" statement\n'
'\n'
'The following code:\n'
'\n'
- ' async with EXPR as VAR:\n'
- ' BLOCK\n'
+ ' async with EXPRESSION as TARGET:\n'
+ ' SUITE\n'
'\n'
- 'Is semantically equivalent to:\n'
+ 'is semantically equivalent to:\n'
'\n'
- ' mgr = (EXPR)\n'
- ' aexit = type(mgr).__aexit__\n'
- ' aenter = type(mgr).__aenter__(mgr)\n'
+ ' manager = (EXPRESSION)\n'
+ ' aenter = type(manager).__aenter__\n'
+ ' aexit = type(manager).__aexit__\n'
+ ' value = await aenter(manager)\n'
+ ' hit_except = False\n'
'\n'
- ' VAR = await aenter\n'
' try:\n'
- ' BLOCK\n'
+ ' TARGET = value\n'
+ ' SUITE\n'
' except:\n'
- ' if not await aexit(mgr, *sys.exc_info()):\n'
+ ' hit_except = True\n'
+ ' if not await aexit(manager, *sys.exc_info()):\n'
' raise\n'
- ' else:\n'
- ' await aexit(mgr, None, None, None)\n'
+ ' finally:\n'
+ ' if not hit_except:\n'
+ ' await aexit(manager, None, None, None)\n'
'\n'
'See also "__aenter__()" and "__aexit__()" for details.\n'
'\n'
@@ -6808,7 +6844,7 @@ topics = {'assert': 'The "assert" statement\n'
'object.__rfloordiv__(self, other)\n'
'object.__rmod__(self, other)\n'
'object.__rdivmod__(self, other)\n'
- 'object.__rpow__(self, other)\n'
+ 'object.__rpow__(self, other[, modulo])\n'
'object.__rlshift__(self, other)\n'
'object.__rrshift__(self, other)\n'
'object.__rand__(self, other)\n'
@@ -9483,7 +9519,7 @@ topics = {'assert': 'The "assert" statement\n'
'object.__rfloordiv__(self, other)\n'
'object.__rmod__(self, other)\n'
'object.__rdivmod__(self, other)\n'
- 'object.__rpow__(self, other)\n'
+ 'object.__rpow__(self, other[, modulo])\n'
'object.__rlshift__(self, other)\n'
'object.__rrshift__(self, other)\n'
'object.__rand__(self, other)\n'
@@ -9874,9 +9910,8 @@ topics = {'assert': 'The "assert" statement\n'
'best\n'
' performances, but only used at the first encoding '
'error. Enable the\n'
- ' development mode ("-X" "dev" option), or use a debug '
- 'build, to\n'
- ' check *errors*.\n'
+ ' Python Development Mode, or use a debug build to check '
+ '*errors*.\n'
'\n'
' Changed in version 3.1: Support for keyword arguments '
'added.\n'
@@ -12401,6 +12436,8 @@ topics = {'assert': 'The "assert" statement\n'
'dictionary. This\n'
' is a shortcut for "reversed(d.keys())".\n'
'\n'
+ ' New in version 3.8.\n'
+ '\n'
' setdefault(key[, default])\n'
'\n'
' If *key* is in the dictionary, return its value. If '
@@ -13606,11 +13643,13 @@ topics = {'assert': 'The "assert" statement\n'
'1. The context expression (the expression given in the "with_item")\n'
' is evaluated to obtain a context manager.\n'
'\n'
- '2. The context manager’s "__exit__()" is loaded for later use.\n'
+ '2. The context manager’s "__enter__()" is loaded for later use.\n'
'\n'
- '3. The context manager’s "__enter__()" method is invoked.\n'
+ '3. The context manager’s "__exit__()" is loaded for later use.\n'
'\n'
- '4. If a target was included in the "with" statement, the return\n'
+ '4. The context manager’s "__enter__()" method is invoked.\n'
+ '\n'
+ '5. If a target was included in the "with" statement, the return\n'
' value from "__enter__()" is assigned to it.\n'
'\n'
' Note: The "with" statement guarantees that if the "__enter__()"\n'
@@ -13620,9 +13659,9 @@ topics = {'assert': 'The "assert" statement\n'
' target list, it will be treated the same as an error occurring\n'
' within the suite would be. See step 6 below.\n'
'\n'
- '5. The suite is executed.\n'
+ '6. The suite is executed.\n'
'\n'
- '6. The context manager’s "__exit__()" method is invoked. If an\n'
+ '7. The context manager’s "__exit__()" method is invoked. If an\n'
' exception caused the suite to be exited, its type, value, and\n'
' traceback are passed as arguments to "__exit__()". Otherwise, '
'three\n'
@@ -13642,17 +13681,41 @@ topics = {'assert': 'The "assert" statement\n'
'proceeds\n'
' at the normal location for the kind of exit that was taken.\n'
'\n'
+ 'The following code:\n'
+ '\n'
+ ' with EXPRESSION as TARGET:\n'
+ ' SUITE\n'
+ '\n'
+ 'is semantically equivalent to:\n'
+ '\n'
+ ' manager = (EXPRESSION)\n'
+ ' enter = type(manager).__enter__\n'
+ ' exit = type(manager).__exit__\n'
+ ' value = enter(manager)\n'
+ ' hit_except = False\n'
+ '\n'
+ ' try:\n'
+ ' TARGET = value\n'
+ ' SUITE\n'
+ ' except:\n'
+ ' hit_except = True\n'
+ ' if not exit(manager, *sys.exc_info()):\n'
+ ' raise\n'
+ ' finally:\n'
+ ' if not hit_except:\n'
+ ' exit(manager, None, None, None)\n'
+ '\n'
'With more than one item, the context managers are processed as if\n'
'multiple "with" statements were nested:\n'
'\n'
' with A() as a, B() as b:\n'
- ' suite\n'
+ ' SUITE\n'
'\n'
- 'is equivalent to\n'
+ 'is semantically equivalent to:\n'
'\n'
' with A() as a:\n'
' with B() as b:\n'
- ' suite\n'
+ ' SUITE\n'
'\n'
'Changed in version 3.1: Support for multiple context expressions.\n'
'\n'
diff --git a/Lib/shutil.py b/Lib/shutil.py
index 8f609b312d3..a4ce2c0290b 100644
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -235,6 +235,8 @@ def copyfile(src, dst, *, follow_symlinks=True):
symlink will be created instead of copying the file it points to.
"""
+ sys.audit("shutil.copyfile", src, dst)
+
if _samefile(src, dst):
raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
@@ -289,6 +291,8 @@ def copymode(src, dst, *, follow_symlinks=True):
(e.g. Linux) this method does nothing.
"""
+ sys.audit("shutil.copymode", src, dst)
+
if not follow_symlinks and _islink(src) and os.path.islink(dst):
if hasattr(os, 'lchmod'):
stat_func, chmod_func = os.lstat, os.lchmod
@@ -340,6 +344,8 @@ def copystat(src, dst, *, follow_symlinks=True):
If the optional flag `follow_symlinks` is not set, symlinks aren't
followed if and only if both `src` and `dst` are symlinks.
"""
+ sys.audit("shutil.copystat", src, dst)
+
def _nop(*args, ns=None, follow_symlinks=None):
pass
@@ -442,7 +448,7 @@ def ignore_patterns(*patterns):
def _copytree(entries, src, dst, symlinks, ignore, copy_function,
ignore_dangling_symlinks, dirs_exist_ok=False):
if ignore is not None:
- ignored_names = ignore(src, {x.name for x in entries})
+ ignored_names = ignore(os.fspath(src), [x.name for x in entries])
else:
ignored_names = set()
@@ -778,6 +784,7 @@ def move(src, dst, copy_function=copy2):
the issues this implementation glosses over.
"""
+ sys.audit("shutil.move", src, dst)
real_dst = dst
if os.path.isdir(dst):
if _samefile(src, dst):
@@ -1208,6 +1215,8 @@ def unpack_archive(filename, extract_dir=None, format=None):
In case none is found, a ValueError is raised.
"""
+ sys.audit("shutil.unpack_archive", filename, extract_dir, format)
+
if extract_dir is None:
extract_dir = os.getcwd()
@@ -1275,6 +1284,7 @@ def chown(path, user=None, group=None):
user and group can be the uid/gid or the user/group names, and in that case,
they are converted to their respective uid/gid.
"""
+ sys.audit('shutil.chown', path, user, group)
if user is None and group is None:
raise ValueError("user and/or group must be set")
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 6513842eb6c..7808ba01cba 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -303,6 +303,8 @@ class SMTP:
def _get_socket(self, host, port, timeout):
# This makes it simpler for SMTP_SSL to use the SMTP connect code
# and just alter the socket connection bit.
+ if timeout is not None and not timeout:
+ raise ValueError('Non-blocking socket (timeout=0) is not supported')
if self.debuglevel > 0:
self._print_debug('connect: to', (host, port), self.source_address)
return socket.create_connection((host, port), timeout,
@@ -1030,13 +1032,12 @@ if _have_ssl:
keyfile=keyfile)
self.context = context
SMTP.__init__(self, host, port, local_hostname, timeout,
- source_address)
+ source_address)
def _get_socket(self, host, port, timeout):
if self.debuglevel > 0:
self._print_debug('connect:', (host, port))
- new_socket = socket.create_connection((host, port), timeout,
- self.source_address)
+ new_socket = super()._get_socket(host, port, timeout)
new_socket = self.context.wrap_socket(new_socket,
server_hostname=self._host)
return new_socket
@@ -1065,19 +1066,23 @@ class LMTP(SMTP):
ehlo_msg = "lhlo"
def __init__(self, host='', port=LMTP_PORT, local_hostname=None,
- source_address=None):
+ source_address=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
"""Initialize a new instance."""
- SMTP.__init__(self, host, port, local_hostname=local_hostname,
- source_address=source_address)
+ super().__init__(host, port, local_hostname=local_hostname,
+ source_address=source_address, timeout=timeout)
def connect(self, host='localhost', port=0, source_address=None):
"""Connect to the LMTP daemon, on either a Unix or a TCP socket."""
if host[0] != '/':
- return SMTP.connect(self, host, port, source_address=source_address)
+ return super().connect(host, port, source_address=source_address)
+
+ if self.timeout is not None and not self.timeout:
+ raise ValueError('Non-blocking socket (timeout=0) is not supported')
# Handle Unix-domain sockets.
try:
self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ self.sock.settimeout(self.timeout)
self.file = None
self.sock.connect(host)
except OSError:
diff --git a/Lib/socket.py b/Lib/socket.py
index 374f1124bf7..cafa573a30c 100755
--- a/Lib/socket.py
+++ b/Lib/socket.py
@@ -878,7 +878,7 @@ def create_server(address, *, family=AF_INET, backlog=None, reuse_port=False,
connections. When false it will explicitly disable this option on
platforms that enable it by default (e.g. Linux).
- >>> with create_server((None, 8000)) as server:
+ >>> with create_server(('', 8000)) as server:
... while True:
... conn, addr = server.accept()
... # handle new connection
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index ba6f1983a5a..c8db387091b 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -325,7 +325,7 @@ def _args_from_interpreter_flags():
if dev_mode:
args.extend(('-X', 'dev'))
for opt in ('faulthandler', 'tracemalloc', 'importtime',
- 'showalloccount', 'showrefcount', 'utf8'):
+ 'showrefcount', 'utf8'):
if opt in xoptions:
value = xoptions[opt]
if value is True:
@@ -446,6 +446,19 @@ class CompletedProcess(object):
args.append('stderr={!r}'.format(self.stderr))
return "{}({})".format(type(self).__name__, ', '.join(args))
+ def __class_getitem__(cls, type):
+ """Provide minimal support for using this class as generic
+ (for example in type annotations).
+
+ See PEP 484 and PEP 560 for more details. For example,
+ `CompletedProcess[bytes]` is a valid expression at runtime
+ (type argument `bytes` indicates the type used for stdout).
+ Note, no type checking happens at runtime, but a static type
+ checker can be used.
+ """
+ return cls
+
+
def check_returncode(self):
"""Raise CalledProcessError if the exit code is non-zero."""
if self.returncode:
@@ -987,6 +1000,17 @@ class Popen(object):
obj_repr = obj_repr[:76] + "...>"
return obj_repr
+ def __class_getitem__(cls, type):
+ """Provide minimal support for using this class as generic
+ (for example in type annotations).
+
+ See PEP 484 and PEP 560 for more details. For example, `Popen[bytes]`
+ is a valid expression at runtime (type argument `bytes` indicates the
+ type used for stdout). Note, no type checking happens at runtime, but
+ a static type checker can be used.
+ """
+ return cls
+
@property
def universal_newlines(self):
# universal_newlines as retained as an alias of text_mode for API
@@ -1959,9 +1983,9 @@ class Popen(object):
with _PopenSelector() as selector:
if self.stdin and input:
selector.register(self.stdin, selectors.EVENT_WRITE)
- if self.stdout:
+ if self.stdout and not self.stdout.closed:
selector.register(self.stdout, selectors.EVENT_READ)
- if self.stderr:
+ if self.stderr and not self.stderr.closed:
selector.register(self.stderr, selectors.EVENT_READ)
while selector.get_map():
@@ -2037,9 +2061,31 @@ class Popen(object):
def send_signal(self, sig):
"""Send a signal to the process."""
- # Skip signalling a process that we know has already died.
- if self.returncode is None:
- os.kill(self.pid, sig)
+ # bpo-38630: Polling reduces the risk of sending a signal to the
+ # wrong process if the process completed, the Popen.returncode
+ # attribute is still None, and the pid has been reassigned
+ # (recycled) to a new different process. This race condition can
+ # happens in two cases.
+ #
+ # Case 1. Thread A calls Popen.poll(), thread B calls
+ # Popen.send_signal(). In thread A, waitpid() succeed and returns
+ # the exit status. Thread B calls kill() because poll() in thread A
+ # did not set returncode yet. Calling poll() in thread B prevents
+ # the race condition thanks to Popen._waitpid_lock.
+ #
+ # Case 2. waitpid(pid, 0) has been called directly, without
+ # using Popen methods: returncode is still None is this case.
+ # Calling Popen.poll() will set returncode to a default value,
+ # since waitpid() fails with ProcessLookupError.
+ self.poll()
+ if self.returncode is not None:
+ # Skip signalling a process that we know has already died.
+ return
+
+ # The race condition can still happen if the race condition
+ # described above happens between the returncode test
+ # and the kill() call.
+ os.kill(self.pid, sig)
def terminate(self):
"""Terminate the process with SIGTERM
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index 2c06f9160c6..e2b60532f69 100755
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -930,6 +930,14 @@ class TarInfo(object):
"""Return a header block. info is a dictionary with file
information, format must be one of the *_FORMAT constants.
"""
+ has_device_fields = info.get("type") in (CHRTYPE, BLKTYPE)
+ if has_device_fields:
+ devmajor = itn(info.get("devmajor", 0), 8, format)
+ devminor = itn(info.get("devminor", 0), 8, format)
+ else:
+ devmajor = stn("", 8, encoding, errors)
+ devminor = stn("", 8, encoding, errors)
+
parts = [
stn(info.get("name", ""), 100, encoding, errors),
itn(info.get("mode", 0) & 0o7777, 8, format),
@@ -943,8 +951,8 @@ class TarInfo(object):
info.get("magic", POSIX_MAGIC),
stn(info.get("uname", ""), 32, encoding, errors),
stn(info.get("gname", ""), 32, encoding, errors),
- itn(info.get("devmajor", 0), 8, format),
- itn(info.get("devminor", 0), 8, format),
+ devmajor,
+ devminor,
stn(info.get("prefix", ""), 155, encoding, errors)
]
@@ -1655,13 +1663,12 @@ class TarFile(object):
raise ValueError("mode must be 'r', 'w' or 'x'")
try:
- import gzip
- gzip.GzipFile
- except (ImportError, AttributeError):
+ from gzip import GzipFile
+ except ImportError:
raise CompressionError("gzip module is not available")
try:
- fileobj = gzip.GzipFile(name, mode + "b", compresslevel, fileobj)
+ fileobj = GzipFile(name, mode + "b", compresslevel, fileobj)
except OSError:
if fileobj is not None and mode == 'r':
raise ReadError("not a gzip file")
@@ -1689,12 +1696,11 @@ class TarFile(object):
raise ValueError("mode must be 'r', 'w' or 'x'")
try:
- import bz2
+ from bz2 import BZ2File
except ImportError:
raise CompressionError("bz2 module is not available")
- fileobj = bz2.BZ2File(fileobj or name, mode,
- compresslevel=compresslevel)
+ fileobj = BZ2File(fileobj or name, mode, compresslevel=compresslevel)
try:
t = cls.taropen(name, mode, fileobj, **kwargs)
@@ -1718,15 +1724,15 @@ class TarFile(object):
raise ValueError("mode must be 'r', 'w' or 'x'")
try:
- import lzma
+ from lzma import LZMAFile, LZMAError
except ImportError:
raise CompressionError("lzma module is not available")
- fileobj = lzma.LZMAFile(fileobj or name, mode, preset=preset)
+ fileobj = LZMAFile(fileobj or name, mode, preset=preset)
try:
t = cls.taropen(name, mode, fileobj, **kwargs)
- except (lzma.LZMAError, EOFError):
+ except (LZMAError, EOFError):
fileobj.close()
if mode == 'r':
raise ReadError("not an lzma file")
@@ -2461,9 +2467,14 @@ class TarFile(object):
def is_tarfile(name):
"""Return True if name points to a tar archive that we
are able to handle, else return False.
+
+ 'name' should be a string, file, or file-like object.
"""
try:
- t = open(name)
+ if hasattr(name, "read"):
+ t = open(fileobj=name)
+ else:
+ t = open(name)
t.close()
return True
except TarError:
diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 62875540f8b..448163f0438 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -643,6 +643,18 @@ class SpooledTemporaryFile:
'encoding': encoding, 'newline': newline,
'dir': dir, 'errors': errors}
+ def __class_getitem__(cls, type):
+ """Provide minimal support for using this class as generic
+ (for example in type annotations).
+
+ See PEP 484 and PEP 560 for more details. For example,
+ `SpooledTemporaryFile[str]` is a valid expression at runtime (type
+ argument `str` indicates whether the file is open in bytes or text
+ mode). Note, no type checking happens at runtime, but a static type
+ checker can be used.
+ """
+ return cls
+
def _check(self, file):
if self._rolled: return
max_size = self._max_size
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 953fd5c5a27..ba893f39c2f 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -3499,6 +3499,30 @@ class AbstractHookTests(unittest.TestCase):
ValueError, 'The reducer just failed'):
p.dump(h)
+ @support.cpython_only
+ def test_reducer_override_no_reference_cycle(self):
+ # bpo-39492: reducer_override used to induce a spurious reference cycle
+ # inside the Pickler object, that could prevent all serialized objects
+ # from being garbage-collected without explicity invoking gc.collect.
+
+ for proto in range(0, pickle.HIGHEST_PROTOCOL + 1):
+ with self.subTest(proto=proto):
+ def f():
+ pass
+
+ wr = weakref.ref(f)
+
+ bio = io.BytesIO()
+ p = self.pickler_class(bio, proto)
+ p.dump(f)
+ new_f = pickle.loads(bio.getvalue())
+ assert new_f == 5
+
+ del p
+ del f
+
+ self.assertIsNone(wr())
+
class AbstractDispatchTableTests(unittest.TestCase):
diff --git a/Lib/test/pythoninfo.py b/Lib/test/pythoninfo.py
index eab82c3631f..cc230dd2297 100644
--- a/Lib/test/pythoninfo.py
+++ b/Lib/test/pythoninfo.py
@@ -199,11 +199,19 @@ def collect_os(info_add):
)
copy_attributes(info_add, os, 'os.%s', attributes, formatter=format_attr)
- call_func(info_add, 'os.getcwd', os, 'getcwd')
-
- call_func(info_add, 'os.getuid', os, 'getuid')
- call_func(info_add, 'os.getgid', os, 'getgid')
- call_func(info_add, 'os.uname', os, 'uname')
+ for func in (
+ 'cpu_count',
+ 'getcwd',
+ 'getegid',
+ 'geteuid',
+ 'getgid',
+ 'getloadavg',
+ 'getresgid',
+ 'getresuid',
+ 'getuid',
+ 'uname',
+ ):
+ call_func(info_add, 'os.%s' % func, os, func)
def format_groups(groups):
return ', '.join(map(str, groups))
@@ -220,9 +228,6 @@ def collect_os(info_add):
else:
info_add("os.login", login)
- call_func(info_add, 'os.cpu_count', os, 'cpu_count')
- call_func(info_add, 'os.getloadavg', os, 'getloadavg')
-
# Environment variables used by the stdlib and tests. Don't log the full
# environment: filter to list to not leak sensitive information.
#
@@ -303,7 +308,7 @@ def collect_os(info_add):
if hasattr(os, 'umask'):
mask = os.umask(0)
os.umask(mask)
- info_add("os.umask", '%03o' % mask)
+ info_add("os.umask", '0o%03o' % mask)
def collect_pwd(info_add):
diff --git a/Lib/test/sortperf.py b/Lib/test/sortperf.py
index 171e5cef5e2..14a9d827ed5 100644
--- a/Lib/test/sortperf.py
+++ b/Lib/test/sortperf.py
@@ -134,7 +134,7 @@ def tabulate(r):
L = list(range(half - 1, -1, -1))
L.extend(range(half))
# Force to float, so that the timings are comparable. This is
- # significantly faster if we leave tham as ints.
+ # significantly faster if we leave them as ints.
L = list(map(float, L))
doit(L) # !sort
print()
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 215bab8131a..259c7069bfc 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -2512,9 +2512,6 @@ def swap_item(obj, item, new_val):
if item in obj:
del obj[item]
-requires_type_collecting = unittest.skipIf(hasattr(sys, 'getcounts'),
- 'types are immortal if COUNT_ALLOCS is defined')
-
def args_from_interpreter_flags():
"""Return a list of command-line arguments reproducing the current
settings in sys.flags and sys.warnoptions."""
diff --git a/Lib/test/test__xxsubinterpreters.py b/Lib/test/test__xxsubinterpreters.py
index 207b5db5d8f..30f8f98acc9 100644
--- a/Lib/test/test__xxsubinterpreters.py
+++ b/Lib/test/test__xxsubinterpreters.py
@@ -759,7 +759,11 @@ class DestroyTests(TestBase):
main, = interpreters.list_all()
interp = interpreters.create()
with _running(interp):
- with self.assertRaises(RuntimeError):
+ self.assertTrue(interpreters.is_running(interp),
+ msg=f"Interp {interp} should be running before destruction.")
+
+ with self.assertRaises(RuntimeError,
+ msg=f"Should not be able to destroy interp {interp} while it's still running."):
interpreters.destroy(interp)
self.assertTrue(interpreters.is_running(interp))
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index 51a7c1af1ff..2ed4657822e 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -17,6 +17,8 @@ def to_tuple(t):
result = [t.__class__.__name__]
if hasattr(t, 'lineno') and hasattr(t, 'col_offset'):
result.append((t.lineno, t.col_offset))
+ if hasattr(t, 'end_lineno') and hasattr(t, 'end_col_offset'):
+ result[-1] += (t.end_lineno, t.end_col_offset)
if t._fields is None:
return tuple(result)
for f in t._fields:
@@ -140,6 +142,8 @@ exec_tests = [
"@deco1\n@deco2()\n@deco3(1)\nclass C: pass",
# Decorator with generator argument
"@deco(a for a in b)\ndef f(): pass",
+ # Decorator with attribute
+ "@a.b.c\ndef f(): pass",
# Simple assignment expression
"(a := 1)",
# Positional-only arguments
@@ -614,6 +618,11 @@ class AST_Tests(unittest.TestCase):
self.assertEqual(grandchild_binop.end_col_offset, 3)
self.assertEqual(grandchild_binop.end_lineno, 1)
+ def test_issue39579_dotted_name_end_col_offset(self):
+ tree = ast.parse('@a.b.c\ndef f(): pass')
+ attr_b = tree.body[0].decorator_list[0].value
+ self.assertEqual(attr_b.end_col_offset, 4)
+
class ASTHelpers_Test(unittest.TestCase):
maxDiff = None
@@ -891,6 +900,7 @@ Module(
self.assertEqual(ast.literal_eval('(True, False, None)'), (True, False, None))
self.assertEqual(ast.literal_eval('{1, 2, 3}'), {1, 2, 3})
self.assertEqual(ast.literal_eval('b"hi"'), b"hi")
+ self.assertEqual(ast.literal_eval('set()'), set())
self.assertRaises(ValueError, ast.literal_eval, 'foo()')
self.assertEqual(ast.literal_eval('6'), 6)
self.assertEqual(ast.literal_eval('+6'), 6)
@@ -1697,6 +1707,33 @@ class EndPositionTests(unittest.TestCase):
self._check_content(s, call, s)
self._check_content(s, call.args[0], 'x. y .z')
+ def test_redundant_parenthesis(self):
+ s = '( ( ( a + b ) ) )'
+ v = ast.parse(s).body[0].value
+ self.assertEqual(type(v).__name__, 'BinOp')
+ self._check_content(s, v, 'a + b')
+ s2 = 'await ' + s
+ v = ast.parse(s2).body[0].value.value
+ self.assertEqual(type(v).__name__, 'BinOp')
+ self._check_content(s2, v, 'a + b')
+
+ def test_trailers_with_redundant_parenthesis(self):
+ tests = (
+ ('( ( ( a ) ) ) ( )', 'Call'),
+ ('( ( ( a ) ) ) ( b )', 'Call'),
+ ('( ( ( a ) ) ) [ b ]', 'Subscript'),
+ ('( ( ( a ) ) ) . b', 'Attribute'),
+ )
+ for s, t in tests:
+ with self.subTest(s):
+ v = ast.parse(s).body[0].value
+ self.assertEqual(type(v).__name__, t)
+ self._check_content(s, v, s)
+ s2 = 'await ' + s
+ v = ast.parse(s2).body[0].value.value
+ self.assertEqual(type(v).__name__, t)
+ self._check_content(s2, v, s)
+
def test_displays(self):
s1 = '[{}, {1, }, {1, 2,} ]'
s2 = '{a: b, f (): g () ,}'
@@ -1845,111 +1882,112 @@ def main():
#### EVERYTHING BELOW IS GENERATED BY python Lib/test/test_ast.py -g #####
exec_results = [
-('Module', [('Expr', (1, 0), ('Constant', (1, 0), None, None))], []),
-('Module', [('Expr', (1, 0), ('Constant', (1, 0), 'module docstring', None))], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (1, 9))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (1, 9), ('Constant', (1, 9), 'function docstring', None))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [('arg', (1, 6), 'a', None, None)], None, [], [], None, []), [('Pass', (1, 10))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [('arg', (1, 6), 'a', None, None)], None, [], [], None, [('Constant', (1, 8), 0, None)]), [('Pass', (1, 12))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], ('arg', (1, 7), 'args', None, None), [], [], None, []), [('Pass', (1, 14))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], ('arg', (1, 8), 'kwargs', None, None), []), [('Pass', (1, 17))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [('arg', (1, 6), 'a', None, None), ('arg', (1, 9), 'b', None, None), ('arg', (1, 14), 'c', None, None), ('arg', (1, 22), 'd', None, None), ('arg', (1, 28), 'e', None, None)], ('arg', (1, 35), 'args', None, None), [('arg', (1, 41), 'f', None, None)], [('Constant', (1, 43), 42, None)], ('arg', (1, 49), 'kwargs', None, None), [('Constant', (1, 11), 1, None), ('Constant', (1, 16), None, None), ('List', (1, 24), [], ('Load',)), ('Dict', (1, 30), [], [])]), [('Expr', (1, 58), ('Constant', (1, 58), 'doc for f()', None))], [], None, None)], []),
-('Module', [('ClassDef', (1, 0), 'C', [], [], [('Pass', (1, 8))], [])], []),
-('Module', [('ClassDef', (1, 0), 'C', [], [], [('Expr', (1, 9), ('Constant', (1, 9), 'docstring for class C', None))], [])], []),
-('Module', [('ClassDef', (1, 0), 'C', [('Name', (1, 8), 'object', ('Load',))], [], [('Pass', (1, 17))], [])], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Return', (1, 8), ('Constant', (1, 15), 1, None))], [], None, None)], []),
-('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])], []),
-('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Constant', (1, 4), 1, None), None)], []),
-('Module', [('Assign', (1, 0), [('Tuple', (1, 0), [('Name', (1, 0), 'a', ('Store',)), ('Name', (1, 2), 'b', ('Store',))], ('Store',))], ('Name', (1, 6), 'c', ('Load',)), None)], []),
-('Module', [('Assign', (1, 0), [('Tuple', (1, 0), [('Name', (1, 1), 'a', ('Store',)), ('Name', (1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 8), 'c', ('Load',)), None)], []),
-('Module', [('Assign', (1, 0), [('List', (1, 0), [('Name', (1, 1), 'a', ('Store',)), ('Name', (1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 8), 'c', ('Load',)), None)], []),
-('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Constant', (1, 5), 1, None))], []),
-('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [], None)], []),
-('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])], []),
-('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])], []),
-('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [])])], []),
-('Module', [('If', (1, 0), ('Name', (1, 3), 'a', ('Load',)), [('Pass', (2, 2))], [('If', (3, 0), ('Name', (3, 5), 'b', ('Load',)), [('Pass', (4, 2))], [('Pass', (6, 2))])])], []),
-('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',)))], [('Pass', (1, 13))], None)], []),
-('Module', [('With', (1, 0), [('withitem', ('Name', (1, 5), 'x', ('Load',)), ('Name', (1, 10), 'y', ('Store',))), ('withitem', ('Name', (1, 13), 'z', ('Load',)), ('Name', (1, 18), 'q', ('Store',)))], [('Pass', (1, 21))], None)], []),
-('Module', [('Raise', (1, 0), ('Call', (1, 6), ('Name', (1, 6), 'Exception', ('Load',)), [('Constant', (1, 16), 'string', None)], []), None)], []),
-('Module', [('Try', (1, 0), [('Pass', (2, 2))], [('ExceptHandler', (3, 0), ('Name', (3, 7), 'Exception', ('Load',)), None, [('Pass', (4, 2))])], [], [])], []),
-('Module', [('Try', (1, 0), [('Pass', (2, 2))], [], [], [('Pass', (4, 2))])], []),
-('Module', [('Assert', (1, 0), ('Name', (1, 7), 'v', ('Load',)), None)], []),
-('Module', [('Import', (1, 0), [('alias', 'sys', None)])], []),
-('Module', [('ImportFrom', (1, 0), 'sys', [('alias', 'v', None)], 0)], []),
-('Module', [('Global', (1, 0), ['v'])], []),
-('Module', [('Expr', (1, 0), ('Constant', (1, 0), 1, None))], []),
-('Module', [('Pass', (1, 0))], []),
-('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Break', (1, 11))], [], None)], []),
-('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Continue', (1, 11))], [], None)], []),
-('Module', [('For', (1, 0), ('Tuple', (1, 4), [('Name', (1, 4), 'a', ('Store',)), ('Name', (1, 6), 'b', ('Store',))], ('Store',)), ('Name', (1, 11), 'c', ('Load',)), [('Pass', (1, 14))], [], None)], []),
-('Module', [('For', (1, 0), ('Tuple', (1, 4), [('Name', (1, 5), 'a', ('Store',)), ('Name', (1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 13), 'c', ('Load',)), [('Pass', (1, 16))], [], None)], []),
-('Module', [('For', (1, 0), ('List', (1, 4), [('Name', (1, 5), 'a', ('Store',)), ('Name', (1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 13), 'c', ('Load',)), [('Pass', (1, 16))], [], None)], []),
-('Module', [('Expr', (1, 0), ('GeneratorExp', (1, 0), ('Tuple', (2, 4), [('Name', (3, 4), 'Aa', ('Load',)), ('Name', (5, 7), 'Bb', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (8, 4), [('Name', (8, 4), 'Aa', ('Store',)), ('Name', (10, 4), 'Bb', ('Store',))], ('Store',)), ('Name', (10, 10), 'Cc', ('Load',)), [], 0)]))], []),
-('Module', [('Expr', (1, 0), ('DictComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Name', (1, 11), 'w', ('Store',)), ('Name', (1, 16), 'x', ('Load',)), [], 0), ('comprehension', ('Name', (1, 22), 'm', ('Store',)), ('Name', (1, 27), 'p', ('Load',)), [('Name', (1, 32), 'g', ('Load',))], 0)]))], []),
-('Module', [('Expr', (1, 0), ('DictComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), ('Name', (1, 5), 'b', ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'v', ('Store',)), ('Name', (1, 13), 'w', ('Store',))], ('Store',)), ('Name', (1, 18), 'x', ('Load',)), [], 0)]))], []),
-('Module', [('Expr', (1, 0), ('SetComp', (1, 0), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 12), 'x', ('Load',)), [('Name', (1, 17), 'g', ('Load',))], 0)]))], []),
-('Module', [('Expr', (1, 0), ('SetComp', (1, 0), ('Name', (1, 1), 'r', ('Load',)), [('comprehension', ('Tuple', (1, 7), [('Name', (1, 7), 'l', ('Store',)), ('Name', (1, 9), 'm', ('Store',))], ('Store',)), ('Name', (1, 14), 'x', ('Load',)), [], 0)]))], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1), ('Constant', (2, 1), 'async function', None)), ('Expr', (3, 1), ('Await', (3, 1), ('Call', (3, 7), ('Name', (3, 7), 'something', ('Load',)), [], [])))], [], None, None)], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncFor', (2, 1), ('Name', (2, 11), 'e', ('Store',)), ('Name', (2, 16), 'i', ('Load',)), [('Expr', (2, 19), ('Constant', (2, 19), 1, None))], [('Expr', (3, 7), ('Constant', (3, 7), 2, None))], None)], [], None, None)], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncWith', (2, 1), [('withitem', ('Name', (2, 12), 'a', ('Load',)), ('Name', (2, 17), 'b', ('Store',)))], [('Expr', (2, 20), ('Constant', (2, 20), 1, None))], None)], [], None, None)], []),
-('Module', [('Expr', (1, 0), ('Dict', (1, 0), [None, ('Constant', (1, 10), 2, None)], [('Dict', (1, 3), [('Constant', (1, 4), 1, None)], [('Constant', (1, 6), 2, None)]), ('Constant', (1, 12), 3, None)]))], []),
-('Module', [('Expr', (1, 0), ('Set', (1, 0), [('Starred', (1, 1), ('Set', (1, 2), [('Constant', (1, 3), 1, None), ('Constant', (1, 6), 2, None)]), ('Load',)), ('Constant', (1, 10), 3, None)]))], []),
-('Module', [('AsyncFunctionDef', (1, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1), ('ListComp', (2, 1), ('Name', (2, 2), 'i', ('Load',)), [('comprehension', ('Name', (2, 14), 'b', ('Store',)), ('Name', (2, 19), 'c', ('Load',)), [], 1)]))], [], None, None)], []),
-('Module', [('FunctionDef', (4, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 1), ('Name', (2, 1), 'deco2', ('Load',)), [], []), ('Call', (3, 1), ('Name', (3, 1), 'deco3', ('Load',)), [('Constant', (3, 7), 1, None)], [])], None, None)], []),
-('Module', [('AsyncFunctionDef', (4, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 15))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 1), ('Name', (2, 1), 'deco2', ('Load',)), [], []), ('Call', (3, 1), ('Name', (3, 1), 'deco3', ('Load',)), [('Constant', (3, 7), 1, None)], [])], None, None)], []),
-('Module', [('ClassDef', (4, 0), 'C', [], [], [('Pass', (4, 9))], [('Name', (1, 1), 'deco1', ('Load',)), ('Call', (2, 1), ('Name', (2, 1), 'deco2', ('Load',)), [], []), ('Call', (3, 1), ('Name', (3, 1), 'deco3', ('Load',)), [('Constant', (3, 7), 1, None)], [])])], []),
-('Module', [('FunctionDef', (2, 0), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (2, 9))], [('Call', (1, 1), ('Name', (1, 1), 'deco', ('Load',)), [('GeneratorExp', (1, 5), ('Name', (1, 6), 'a', ('Load',)), [('comprehension', ('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 17), 'b', ('Load',)), [], 0)])], [])], None, None)], []),
-('Module', [('Expr', (1, 0), ('NamedExpr', (1, 1), ('Name', (1, 1), 'a', ('Store',)), ('Constant', (1, 6), 1, None)))], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [], None, [], [], None, []), [('Pass', (1, 14))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 12), 'c', None, None), ('arg', (1, 15), 'd', None, None), ('arg', (1, 18), 'e', None, None)], None, [], [], None, []), [('Pass', (1, 22))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 12), 'c', None, None)], None, [('arg', (1, 18), 'd', None, None), ('arg', (1, 21), 'e', None, None)], [None, None], None, []), [('Pass', (1, 25))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 12), 'c', None, None)], None, [('arg', (1, 18), 'd', None, None), ('arg', (1, 21), 'e', None, None)], [None, None], ('arg', (1, 26), 'kwargs', None, None), []), [('Pass', (1, 35))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [], None, [], [], None, [('Constant', (1, 8), 1, None)]), [('Pass', (1, 16))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None), ('arg', (1, 19), 'c', None, None)], None, [], [], None, [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None), ('Constant', (1, 21), 4, None)]), [('Pass', (1, 25))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [('Constant', (1, 24), 4, None)], None, [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 28))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [None], None, [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 26))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [('Constant', (1, 24), 4, None)], ('arg', (1, 29), 'kwargs', None, None), [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 38))], [], None, None)], []),
-('Module', [('FunctionDef', (1, 0), 'f', ('arguments', [('arg', (1, 6), 'a', None, None)], [('arg', (1, 14), 'b', None, None)], None, [('arg', (1, 22), 'c', None, None)], [None], ('arg', (1, 27), 'kwargs', None, None), [('Constant', (1, 8), 1, None), ('Constant', (1, 16), 2, None)]), [('Pass', (1, 36))], [], None, None)], []),
+('Module', [('Expr', (1, 0, 1, 4), ('Constant', (1, 0, 1, 4), None, None))], []),
+('Module', [('Expr', (1, 0, 1, 18), ('Constant', (1, 0, 1, 18), 'module docstring', None))], []),
+('Module', [('FunctionDef', (1, 0, 1, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (1, 9, 1, 13))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 29), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (1, 9, 1, 29), ('Constant', (1, 9, 1, 29), 'function docstring', None))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 14), 'f', ('arguments', [], [('arg', (1, 6, 1, 7), 'a', None, None)], None, [], [], None, []), [('Pass', (1, 10, 1, 14))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 16), 'f', ('arguments', [], [('arg', (1, 6, 1, 7), 'a', None, None)], None, [], [], None, [('Constant', (1, 8, 1, 9), 0, None)]), [('Pass', (1, 12, 1, 16))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 18), 'f', ('arguments', [], [], ('arg', (1, 7, 1, 11), 'args', None, None), [], [], None, []), [('Pass', (1, 14, 1, 18))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 21), 'f', ('arguments', [], [], None, [], [], ('arg', (1, 8, 1, 14), 'kwargs', None, None), []), [('Pass', (1, 17, 1, 21))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 71), 'f', ('arguments', [], [('arg', (1, 6, 1, 7), 'a', None, None), ('arg', (1, 9, 1, 10), 'b', None, None), ('arg', (1, 14, 1, 15), 'c', None, None), ('arg', (1, 22, 1, 23), 'd', None, None), ('arg', (1, 28, 1, 29), 'e', None, None)], ('arg', (1, 35, 1, 39), 'args', None, None), [('arg', (1, 41, 1, 42), 'f', None, None)], [('Constant', (1, 43, 1, 45), 42, None)], ('arg', (1, 49, 1, 55), 'kwargs', None, None), [('Constant', (1, 11, 1, 12), 1, None), ('Constant', (1, 16, 1, 20), None, None), ('List', (1, 24, 1, 26), [], ('Load',)), ('Dict', (1, 30, 1, 32), [], [])]), [('Expr', (1, 58, 1, 71), ('Constant', (1, 58, 1, 71), 'doc for f()', None))], [], None, None)], []),
+('Module', [('ClassDef', (1, 0, 1, 12), 'C', [], [], [('Pass', (1, 8, 1, 12))], [])], []),
+('Module', [('ClassDef', (1, 0, 1, 32), 'C', [], [], [('Expr', (1, 9, 1, 32), ('Constant', (1, 9, 1, 32), 'docstring for class C', None))], [])], []),
+('Module', [('ClassDef', (1, 0, 1, 21), 'C', [('Name', (1, 8, 1, 14), 'object', ('Load',))], [], [('Pass', (1, 17, 1, 21))], [])], []),
+('Module', [('FunctionDef', (1, 0, 1, 16), 'f', ('arguments', [], [], None, [], [], None, []), [('Return', (1, 8, 1, 16), ('Constant', (1, 15, 1, 16), 1, None))], [], None, None)], []),
+('Module', [('Delete', (1, 0, 1, 5), [('Name', (1, 4, 1, 5), 'v', ('Del',))])], []),
+('Module', [('Assign', (1, 0, 1, 5), [('Name', (1, 0, 1, 1), 'v', ('Store',))], ('Constant', (1, 4, 1, 5), 1, None), None)], []),
+('Module', [('Assign', (1, 0, 1, 7), [('Tuple', (1, 0, 1, 3), [('Name', (1, 0, 1, 1), 'a', ('Store',)), ('Name', (1, 2, 1, 3), 'b', ('Store',))], ('Store',))], ('Name', (1, 6, 1, 7), 'c', ('Load',)), None)], []),
+('Module', [('Assign', (1, 0, 1, 9), [('Tuple', (1, 0, 1, 5), [('Name', (1, 1, 1, 2), 'a', ('Store',)), ('Name', (1, 3, 1, 4), 'b', ('Store',))], ('Store',))], ('Name', (1, 8, 1, 9), 'c', ('Load',)), None)], []),
+('Module', [('Assign', (1, 0, 1, 9), [('List', (1, 0, 1, 5), [('Name', (1, 1, 1, 2), 'a', ('Store',)), ('Name', (1, 3, 1, 4), 'b', ('Store',))], ('Store',))], ('Name', (1, 8, 1, 9), 'c', ('Load',)), None)], []),
+('Module', [('AugAssign', (1, 0, 1, 6), ('Name', (1, 0, 1, 1), 'v', ('Store',)), ('Add',), ('Constant', (1, 5, 1, 6), 1, None))], []),
+('Module', [('For', (1, 0, 1, 15), ('Name', (1, 4, 1, 5), 'v', ('Store',)), ('Name', (1, 9, 1, 10), 'v', ('Load',)), [('Pass', (1, 11, 1, 15))], [], None)], []),
+('Module', [('While', (1, 0, 1, 12), ('Name', (1, 6, 1, 7), 'v', ('Load',)), [('Pass', (1, 8, 1, 12))], [])], []),
+('Module', [('If', (1, 0, 1, 9), ('Name', (1, 3, 1, 4), 'v', ('Load',)), [('Pass', (1, 5, 1, 9))], [])], []),
+('Module', [('If', (1, 0, 4, 6), ('Name', (1, 3, 1, 4), 'a', ('Load',)), [('Pass', (2, 2, 2, 6))], [('If', (3, 0, 4, 6), ('Name', (3, 5, 3, 6), 'b', ('Load',)), [('Pass', (4, 2, 4, 6))], [])])], []),
+('Module', [('If', (1, 0, 6, 6), ('Name', (1, 3, 1, 4), 'a', ('Load',)), [('Pass', (2, 2, 2, 6))], [('If', (3, 0, 6, 6), ('Name', (3, 5, 3, 6), 'b', ('Load',)), [('Pass', (4, 2, 4, 6))], [('Pass', (6, 2, 6, 6))])])], []),
+('Module', [('With', (1, 0, 1, 17), [('withitem', ('Name', (1, 5, 1, 6), 'x', ('Load',)), ('Name', (1, 10, 1, 11), 'y', ('Store',)))], [('Pass', (1, 13, 1, 17))], None)], []),
+('Module', [('With', (1, 0, 1, 25), [('withitem', ('Name', (1, 5, 1, 6), 'x', ('Load',)), ('Name', (1, 10, 1, 11), 'y', ('Store',))), ('withitem', ('Name', (1, 13, 1, 14), 'z', ('Load',)), ('Name', (1, 18, 1, 19), 'q', ('Store',)))], [('Pass', (1, 21, 1, 25))], None)], []),
+('Module', [('Raise', (1, 0, 1, 25), ('Call', (1, 6, 1, 25), ('Name', (1, 6, 1, 15), 'Exception', ('Load',)), [('Constant', (1, 16, 1, 24), 'string', None)], []), None)], []),
+('Module', [('Try', (1, 0, 4, 6), [('Pass', (2, 2, 2, 6))], [('ExceptHandler', (3, 0, 4, 6), ('Name', (3, 7, 3, 16), 'Exception', ('Load',)), None, [('Pass', (4, 2, 4, 6))])], [], [])], []),
+('Module', [('Try', (1, 0, 4, 6), [('Pass', (2, 2, 2, 6))], [], [], [('Pass', (4, 2, 4, 6))])], []),
+('Module', [('Assert', (1, 0, 1, 8), ('Name', (1, 7, 1, 8), 'v', ('Load',)), None)], []),
+('Module', [('Import', (1, 0, 1, 10), [('alias', 'sys', None)])], []),
+('Module', [('ImportFrom', (1, 0, 1, 17), 'sys', [('alias', 'v', None)], 0)], []),
+('Module', [('Global', (1, 0, 1, 8), ['v'])], []),
+('Module', [('Expr', (1, 0, 1, 1), ('Constant', (1, 0, 1, 1), 1, None))], []),
+('Module', [('Pass', (1, 0, 1, 4))], []),
+('Module', [('For', (1, 0, 1, 16), ('Name', (1, 4, 1, 5), 'v', ('Store',)), ('Name', (1, 9, 1, 10), 'v', ('Load',)), [('Break', (1, 11, 1, 16))], [], None)], []),
+('Module', [('For', (1, 0, 1, 19), ('Name', (1, 4, 1, 5), 'v', ('Store',)), ('Name', (1, 9, 1, 10), 'v', ('Load',)), [('Continue', (1, 11, 1, 19))], [], None)], []),
+('Module', [('For', (1, 0, 1, 18), ('Tuple', (1, 4, 1, 7), [('Name', (1, 4, 1, 5), 'a', ('Store',)), ('Name', (1, 6, 1, 7), 'b', ('Store',))], ('Store',)), ('Name', (1, 11, 1, 12), 'c', ('Load',)), [('Pass', (1, 14, 1, 18))], [], None)], []),
+('Module', [('For', (1, 0, 1, 20), ('Tuple', (1, 4, 1, 9), [('Name', (1, 5, 1, 6), 'a', ('Store',)), ('Name', (1, 7, 1, 8), 'b', ('Store',))], ('Store',)), ('Name', (1, 13, 1, 14), 'c', ('Load',)), [('Pass', (1, 16, 1, 20))], [], None)], []),
+('Module', [('For', (1, 0, 1, 20), ('List', (1, 4, 1, 9), [('Name', (1, 5, 1, 6), 'a', ('Store',)), ('Name', (1, 7, 1, 8), 'b', ('Store',))], ('Store',)), ('Name', (1, 13, 1, 14), 'c', ('Load',)), [('Pass', (1, 16, 1, 20))], [], None)], []),
+('Module', [('Expr', (1, 0, 11, 5), ('GeneratorExp', (1, 0, 11, 5), ('Tuple', (2, 4, 6, 5), [('Name', (3, 4, 3, 6), 'Aa', ('Load',)), ('Name', (5, 7, 5, 9), 'Bb', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (8, 4, 10, 6), [('Name', (8, 4, 8, 6), 'Aa', ('Store',)), ('Name', (10, 4, 10, 6), 'Bb', ('Store',))], ('Store',)), ('Name', (10, 10, 10, 12), 'Cc', ('Load',)), [], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 34), ('DictComp', (1, 0, 1, 34), ('Name', (1, 1, 1, 2), 'a', ('Load',)), ('Name', (1, 5, 1, 6), 'b', ('Load',)), [('comprehension', ('Name', (1, 11, 1, 12), 'w', ('Store',)), ('Name', (1, 16, 1, 17), 'x', ('Load',)), [], 0), ('comprehension', ('Name', (1, 22, 1, 23), 'm', ('Store',)), ('Name', (1, 27, 1, 28), 'p', ('Load',)), [('Name', (1, 32, 1, 33), 'g', ('Load',))], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 20), ('DictComp', (1, 0, 1, 20), ('Name', (1, 1, 1, 2), 'a', ('Load',)), ('Name', (1, 5, 1, 6), 'b', ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'v', ('Store',)), ('Name', (1, 13, 1, 14), 'w', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'x', ('Load',)), [], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 19), ('SetComp', (1, 0, 1, 19), ('Name', (1, 1, 1, 2), 'r', ('Load',)), [('comprehension', ('Name', (1, 7, 1, 8), 'l', ('Store',)), ('Name', (1, 12, 1, 13), 'x', ('Load',)), [('Name', (1, 17, 1, 18), 'g', ('Load',))], 0)]))], []),
+('Module', [('Expr', (1, 0, 1, 16), ('SetComp', (1, 0, 1, 16), ('Name', (1, 1, 1, 2), 'r', ('Load',)), [('comprehension', ('Tuple', (1, 7, 1, 10), [('Name', (1, 7, 1, 8), 'l', ('Store',)), ('Name', (1, 9, 1, 10), 'm', ('Store',))], ('Store',)), ('Name', (1, 14, 1, 15), 'x', ('Load',)), [], 0)]))], []),
+('Module', [('AsyncFunctionDef', (1, 0, 3, 18), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1, 2, 17), ('Constant', (2, 1, 2, 17), 'async function', None)), ('Expr', (3, 1, 3, 18), ('Await', (3, 1, 3, 18), ('Call', (3, 7, 3, 18), ('Name', (3, 7, 3, 16), 'something', ('Load',)), [], [])))], [], None, None)], []),
+('Module', [('AsyncFunctionDef', (1, 0, 3, 8), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncFor', (2, 1, 3, 8), ('Name', (2, 11, 2, 12), 'e', ('Store',)), ('Name', (2, 16, 2, 17), 'i', ('Load',)), [('Expr', (2, 19, 2, 20), ('Constant', (2, 19, 2, 20), 1, None))], [('Expr', (3, 7, 3, 8), ('Constant', (3, 7, 3, 8), 2, None))], None)], [], None, None)], []),
+('Module', [('AsyncFunctionDef', (1, 0, 2, 21), 'f', ('arguments', [], [], None, [], [], None, []), [('AsyncWith', (2, 1, 2, 21), [('withitem', ('Name', (2, 12, 2, 13), 'a', ('Load',)), ('Name', (2, 17, 2, 18), 'b', ('Store',)))], [('Expr', (2, 20, 2, 21), ('Constant', (2, 20, 2, 21), 1, None))], None)], [], None, None)], []),
+('Module', [('Expr', (1, 0, 1, 14), ('Dict', (1, 0, 1, 14), [None, ('Constant', (1, 10, 1, 11), 2, None)], [('Dict', (1, 3, 1, 8), [('Constant', (1, 4, 1, 5), 1, None)], [('Constant', (1, 6, 1, 7), 2, None)]), ('Constant', (1, 12, 1, 13), 3, None)]))], []),
+('Module', [('Expr', (1, 0, 1, 12), ('Set', (1, 0, 1, 12), [('Starred', (1, 1, 1, 8), ('Set', (1, 2, 1, 8), [('Constant', (1, 3, 1, 4), 1, None), ('Constant', (1, 6, 1, 7), 2, None)]), ('Load',)), ('Constant', (1, 10, 1, 11), 3, None)]))], []),
+('Module', [('AsyncFunctionDef', (1, 0, 2, 21), 'f', ('arguments', [], [], None, [], [], None, []), [('Expr', (2, 1, 2, 21), ('ListComp', (2, 1, 2, 21), ('Name', (2, 2, 2, 3), 'i', ('Load',)), [('comprehension', ('Name', (2, 14, 2, 15), 'b', ('Store',)), ('Name', (2, 19, 2, 20), 'c', ('Load',)), [], 1)]))], [], None, None)], []),
+('Module', [('FunctionDef', (4, 0, 4, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 9, 4, 13))], [('Name', (1, 1, 1, 6), 'deco1', ('Load',)), ('Call', (2, 1, 2, 8), ('Name', (2, 1, 2, 6), 'deco2', ('Load',)), [], []), ('Call', (3, 1, 3, 9), ('Name', (3, 1, 3, 6), 'deco3', ('Load',)), [('Constant', (3, 7, 3, 8), 1, None)], [])], None, None)], []),
+('Module', [('AsyncFunctionDef', (4, 0, 4, 19), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (4, 15, 4, 19))], [('Name', (1, 1, 1, 6), 'deco1', ('Load',)), ('Call', (2, 1, 2, 8), ('Name', (2, 1, 2, 6), 'deco2', ('Load',)), [], []), ('Call', (3, 1, 3, 9), ('Name', (3, 1, 3, 6), 'deco3', ('Load',)), [('Constant', (3, 7, 3, 8), 1, None)], [])], None, None)], []),
+('Module', [('ClassDef', (4, 0, 4, 13), 'C', [], [], [('Pass', (4, 9, 4, 13))], [('Name', (1, 1, 1, 6), 'deco1', ('Load',)), ('Call', (2, 1, 2, 8), ('Name', (2, 1, 2, 6), 'deco2', ('Load',)), [], []), ('Call', (3, 1, 3, 9), ('Name', (3, 1, 3, 6), 'deco3', ('Load',)), [('Constant', (3, 7, 3, 8), 1, None)], [])])], []),
+('Module', [('FunctionDef', (2, 0, 2, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (2, 9, 2, 13))], [('Call', (1, 1, 1, 19), ('Name', (1, 1, 1, 5), 'deco', ('Load',)), [('GeneratorExp', (1, 5, 1, 19), ('Name', (1, 6, 1, 7), 'a', ('Load',)), [('comprehension', ('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 17, 1, 18), 'b', ('Load',)), [], 0)])], [])], None, None)], []),
+('Module', [('FunctionDef', (2, 0, 2, 13), 'f', ('arguments', [], [], None, [], [], None, []), [('Pass', (2, 9, 2, 13))], [('Attribute', (1, 1, 1, 6), ('Attribute', (1, 1, 1, 4), ('Name', (1, 1, 1, 2), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',))], None, None)], []),
+('Module', [('Expr', (1, 0, 1, 8), ('NamedExpr', (1, 1, 1, 7), ('Name', (1, 1, 1, 2), 'a', ('Store',)), ('Constant', (1, 6, 1, 7), 1, None)))], []),
+('Module', [('FunctionDef', (1, 0, 1, 18), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [], None, [], [], None, []), [('Pass', (1, 14, 1, 18))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 26), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 12, 1, 13), 'c', None, None), ('arg', (1, 15, 1, 16), 'd', None, None), ('arg', (1, 18, 1, 19), 'e', None, None)], None, [], [], None, []), [('Pass', (1, 22, 1, 26))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 29), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 12, 1, 13), 'c', None, None)], None, [('arg', (1, 18, 1, 19), 'd', None, None), ('arg', (1, 21, 1, 22), 'e', None, None)], [None, None], None, []), [('Pass', (1, 25, 1, 29))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 39), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 12, 1, 13), 'c', None, None)], None, [('arg', (1, 18, 1, 19), 'd', None, None), ('arg', (1, 21, 1, 22), 'e', None, None)], [None, None], ('arg', (1, 26, 1, 32), 'kwargs', None, None), []), [('Pass', (1, 35, 1, 39))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 20), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [], None, [], [], None, [('Constant', (1, 8, 1, 9), 1, None)]), [('Pass', (1, 16, 1, 20))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 29), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None), ('arg', (1, 19, 1, 20), 'c', None, None)], None, [], [], None, [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None), ('Constant', (1, 21, 1, 22), 4, None)]), [('Pass', (1, 25, 1, 29))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 32), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [('Constant', (1, 24, 1, 25), 4, None)], None, [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 28, 1, 32))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 30), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [None], None, [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 26, 1, 30))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 42), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [('Constant', (1, 24, 1, 25), 4, None)], ('arg', (1, 29, 1, 35), 'kwargs', None, None), [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 38, 1, 42))], [], None, None)], []),
+('Module', [('FunctionDef', (1, 0, 1, 40), 'f', ('arguments', [('arg', (1, 6, 1, 7), 'a', None, None)], [('arg', (1, 14, 1, 15), 'b', None, None)], None, [('arg', (1, 22, 1, 23), 'c', None, None)], [None], ('arg', (1, 27, 1, 33), 'kwargs', None, None), [('Constant', (1, 8, 1, 9), 1, None), ('Constant', (1, 16, 1, 17), 2, None)]), [('Pass', (1, 36, 1, 40))], [], None, None)], []),
]
single_results = [
-('Interactive', [('Expr', (1, 0), ('BinOp', (1, 0), ('Constant', (1, 0), 1, None), ('Add',), ('Constant', (1, 2), 2, None)))]),
+('Interactive', [('Expr', (1, 0, 1, 3), ('BinOp', (1, 0, 1, 3), ('Constant', (1, 0, 1, 1), 1, None), ('Add',), ('Constant', (1, 2, 1, 3), 2, None)))]),
]
eval_results = [
-('Expression', ('Constant', (1, 0), None, None)),
-('Expression', ('BoolOp', (1, 0), ('And',), [('Name', (1, 0), 'a', ('Load',)), ('Name', (1, 6), 'b', ('Load',))])),
-('Expression', ('BinOp', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Add',), ('Name', (1, 4), 'b', ('Load',)))),
-('Expression', ('UnaryOp', (1, 0), ('Not',), ('Name', (1, 4), 'v', ('Load',)))),
-('Expression', ('Lambda', (1, 0), ('arguments', [], [], None, [], [], None, []), ('Constant', (1, 7), None, None))),
-('Expression', ('Dict', (1, 0), [('Constant', (1, 2), 1, None)], [('Constant', (1, 4), 2, None)])),
-('Expression', ('Dict', (1, 0), [], [])),
-('Expression', ('Set', (1, 0), [('Constant', (1, 1), None, None)])),
-('Expression', ('Dict', (1, 0), [('Constant', (2, 6), 1, None)], [('Constant', (4, 10), 2, None)])),
-('Expression', ('ListComp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Name', (1, 1), 'a', ('Load',)), [('comprehension', ('Name', (1, 7), 'b', ('Store',)), ('Name', (1, 12), 'c', ('Load',)), [('Name', (1, 17), 'd', ('Load',))], 0)])),
-('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
-('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('ListComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
-('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('SetComp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 11), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Store',))], ('Store',)), ('Name', (1, 18), 'c', ('Load',)), [], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('GeneratorExp', (1, 0), ('Tuple', (1, 1), [('Name', (1, 2), 'a', ('Load',)), ('Name', (1, 4), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11), [('Name', (1, 12), 'a', ('Store',)), ('Name', (1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 20), 'c', ('Load',)), [], 0)])),
-('Expression', ('Compare', (1, 0), ('Constant', (1, 0), 1, None), [('Lt',), ('Lt',)], [('Constant', (1, 4), 2, None), ('Constant', (1, 8), 3, None)])),
-('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('Constant', (1, 2), 1, None), ('Constant', (1, 4), 2, None), ('Starred', (1, 10), ('Name', (1, 11), 'd', ('Load',)), ('Load',))], [('keyword', 'c', ('Constant', (1, 8), 3, None)), ('keyword', None, ('Name', (1, 15), 'e', ('Load',)))])),
-('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('Starred', (1, 2), ('List', (1, 3), [('Constant', (1, 4), 0, None), ('Constant', (1, 7), 1, None)], ('Load',)), ('Load',))], [])),
-('Expression', ('Call', (1, 0), ('Name', (1, 0), 'f', ('Load',)), [('GeneratorExp', (1, 1), ('Name', (1, 2), 'a', ('Load',)), [('comprehension', ('Name', (1, 8), 'a', ('Store',)), ('Name', (1, 13), 'b', ('Load',)), [], 0)])], [])),
-('Expression', ('Constant', (1, 0), 10, None)),
-('Expression', ('Constant', (1, 0), 'string', None)),
-('Expression', ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',))),
-('Expression', ('Subscript', (1, 0), ('Name', (1, 0), 'a', ('Load',)), ('Slice', ('Name', (1, 2), 'b', ('Load',)), ('Name', (1, 4), 'c', ('Load',)), None), ('Load',))),
-('Expression', ('Name', (1, 0), 'v', ('Load',))),
-('Expression', ('List', (1, 0), [('Constant', (1, 1), 1, None), ('Constant', (1, 3), 2, None), ('Constant', (1, 5), 3, None)], ('Load',))),
-('Expression', ('List', (1, 0), [], ('Load',))),
-('Expression', ('Tuple', (1, 0), [('Constant', (1, 0), 1, None), ('Constant', (1, 2), 2, None), ('Constant', (1, 4), 3, None)], ('Load',))),
-('Expression', ('Tuple', (1, 0), [('Constant', (1, 1), 1, None), ('Constant', (1, 3), 2, None), ('Constant', (1, 5), 3, None)], ('Load',))),
-('Expression', ('Tuple', (1, 0), [], ('Load',))),
-('Expression', ('Call', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Attribute', (1, 0), ('Name', (1, 0), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',)), 'd', ('Load',)), [('Subscript', (1, 8), ('Attribute', (1, 8), ('Name', (1, 8), 'a', ('Load',)), 'b', ('Load',)), ('Slice', ('Constant', (1, 12), 1, None), ('Constant', (1, 14), 2, None), None), ('Load',))], [])),
+('Expression', ('Constant', (1, 0, 1, 4), None, None)),
+('Expression', ('BoolOp', (1, 0, 1, 7), ('And',), [('Name', (1, 0, 1, 1), 'a', ('Load',)), ('Name', (1, 6, 1, 7), 'b', ('Load',))])),
+('Expression', ('BinOp', (1, 0, 1, 5), ('Name', (1, 0, 1, 1), 'a', ('Load',)), ('Add',), ('Name', (1, 4, 1, 5), 'b', ('Load',)))),
+('Expression', ('UnaryOp', (1, 0, 1, 5), ('Not',), ('Name', (1, 4, 1, 5), 'v', ('Load',)))),
+('Expression', ('Lambda', (1, 0, 1, 11), ('arguments', [], [], None, [], [], None, []), ('Constant', (1, 7, 1, 11), None, None))),
+('Expression', ('Dict', (1, 0, 1, 7), [('Constant', (1, 2, 1, 3), 1, None)], [('Constant', (1, 4, 1, 5), 2, None)])),
+('Expression', ('Dict', (1, 0, 1, 2), [], [])),
+('Expression', ('Set', (1, 0, 1, 7), [('Constant', (1, 1, 1, 5), None, None)])),
+('Expression', ('Dict', (1, 0, 5, 6), [('Constant', (2, 6, 2, 7), 1, None)], [('Constant', (4, 10, 4, 11), 2, None)])),
+('Expression', ('ListComp', (1, 0, 1, 19), ('Name', (1, 1, 1, 2), 'a', ('Load',)), [('comprehension', ('Name', (1, 7, 1, 8), 'b', ('Store',)), ('Name', (1, 12, 1, 13), 'c', ('Load',)), [('Name', (1, 17, 1, 18), 'd', ('Load',))], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 19), ('Name', (1, 1, 1, 2), 'a', ('Load',)), [('comprehension', ('Name', (1, 7, 1, 8), 'b', ('Store',)), ('Name', (1, 12, 1, 13), 'c', ('Load',)), [('Name', (1, 17, 1, 18), 'd', ('Load',))], 0)])),
+('Expression', ('ListComp', (1, 0, 1, 20), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'c', ('Load',)), [], 0)])),
+('Expression', ('ListComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('ListComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0, 1, 20), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('SetComp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 20), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 14), [('Name', (1, 11, 1, 12), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Store',))], ('Store',)), ('Name', (1, 18, 1, 19), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('Tuple', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('GeneratorExp', (1, 0, 1, 22), ('Tuple', (1, 1, 1, 6), [('Name', (1, 2, 1, 3), 'a', ('Load',)), ('Name', (1, 4, 1, 5), 'b', ('Load',))], ('Load',)), [('comprehension', ('List', (1, 11, 1, 16), [('Name', (1, 12, 1, 13), 'a', ('Store',)), ('Name', (1, 14, 1, 15), 'b', ('Store',))], ('Store',)), ('Name', (1, 20, 1, 21), 'c', ('Load',)), [], 0)])),
+('Expression', ('Compare', (1, 0, 1, 9), ('Constant', (1, 0, 1, 1), 1, None), [('Lt',), ('Lt',)], [('Constant', (1, 4, 1, 5), 2, None), ('Constant', (1, 8, 1, 9), 3, None)])),
+('Expression', ('Call', (1, 0, 1, 17), ('Name', (1, 0, 1, 1), 'f', ('Load',)), [('Constant', (1, 2, 1, 3), 1, None), ('Constant', (1, 4, 1, 5), 2, None), ('Starred', (1, 10, 1, 12), ('Name', (1, 11, 1, 12), 'd', ('Load',)), ('Load',))], [('keyword', 'c', ('Constant', (1, 8, 1, 9), 3, None)), ('keyword', None, ('Name', (1, 15, 1, 16), 'e', ('Load',)))])),
+('Expression', ('Call', (1, 0, 1, 10), ('Name', (1, 0, 1, 1), 'f', ('Load',)), [('Starred', (1, 2, 1, 9), ('List', (1, 3, 1, 9), [('Constant', (1, 4, 1, 5), 0, None), ('Constant', (1, 7, 1, 8), 1, None)], ('Load',)), ('Load',))], [])),
+('Expression', ('Call', (1, 0, 1, 15), ('Name', (1, 0, 1, 1), 'f', ('Load',)), [('GeneratorExp', (1, 1, 1, 15), ('Name', (1, 2, 1, 3), 'a', ('Load',)), [('comprehension', ('Name', (1, 8, 1, 9), 'a', ('Store',)), ('Name', (1, 13, 1, 14), 'b', ('Load',)), [], 0)])], [])),
+('Expression', ('Constant', (1, 0, 1, 2), 10, None)),
+('Expression', ('Constant', (1, 0, 1, 8), 'string', None)),
+('Expression', ('Attribute', (1, 0, 1, 3), ('Name', (1, 0, 1, 1), 'a', ('Load',)), 'b', ('Load',))),
+('Expression', ('Subscript', (1, 0, 1, 6), ('Name', (1, 0, 1, 1), 'a', ('Load',)), ('Slice', ('Name', (1, 2, 1, 3), 'b', ('Load',)), ('Name', (1, 4, 1, 5), 'c', ('Load',)), None), ('Load',))),
+('Expression', ('Name', (1, 0, 1, 1), 'v', ('Load',))),
+('Expression', ('List', (1, 0, 1, 7), [('Constant', (1, 1, 1, 2), 1, None), ('Constant', (1, 3, 1, 4), 2, None), ('Constant', (1, 5, 1, 6), 3, None)], ('Load',))),
+('Expression', ('List', (1, 0, 1, 2), [], ('Load',))),
+('Expression', ('Tuple', (1, 0, 1, 5), [('Constant', (1, 0, 1, 1), 1, None), ('Constant', (1, 2, 1, 3), 2, None), ('Constant', (1, 4, 1, 5), 3, None)], ('Load',))),
+('Expression', ('Tuple', (1, 0, 1, 7), [('Constant', (1, 1, 1, 2), 1, None), ('Constant', (1, 3, 1, 4), 2, None), ('Constant', (1, 5, 1, 6), 3, None)], ('Load',))),
+('Expression', ('Tuple', (1, 0, 1, 2), [], ('Load',))),
+('Expression', ('Call', (1, 0, 1, 17), ('Attribute', (1, 0, 1, 7), ('Attribute', (1, 0, 1, 5), ('Attribute', (1, 0, 1, 3), ('Name', (1, 0, 1, 1), 'a', ('Load',)), 'b', ('Load',)), 'c', ('Load',)), 'd', ('Load',)), [('Subscript', (1, 8, 1, 16), ('Attribute', (1, 8, 1, 11), ('Name', (1, 8, 1, 9), 'a', ('Load',)), 'b', ('Load',)), ('Slice', ('Constant', (1, 12, 1, 13), 1, None), ('Constant', (1, 14, 1, 15), 2, None), None), ('Load',))], [])),
]
main()
diff --git a/Lib/test/test_asyncgen.py b/Lib/test/test_asyncgen.py
index 58d8aee19ad..fb6321d2264 100644
--- a/Lib/test/test_asyncgen.py
+++ b/Lib/test/test_asyncgen.py
@@ -1128,6 +1128,68 @@ class AsyncGenAsyncioTest(unittest.TestCase):
self.assertEqual([], messages)
+ def test_async_gen_await_same_anext_coro_twice(self):
+ async def async_iterate():
+ yield 1
+ yield 2
+
+ async def run():
+ it = async_iterate()
+ nxt = it.__anext__()
+ await nxt
+ with self.assertRaisesRegex(
+ RuntimeError,
+ r"cannot reuse already awaited __anext__\(\)/asend\(\)"
+ ):
+ await nxt
+
+ await it.aclose() # prevent unfinished iterator warning
+
+ self.loop.run_until_complete(run())
+
+ def test_async_gen_await_same_aclose_coro_twice(self):
+ async def async_iterate():
+ yield 1
+ yield 2
+
+ async def run():
+ it = async_iterate()
+ nxt = it.aclose()
+ await nxt
+ with self.assertRaisesRegex(
+ RuntimeError,
+ r"cannot reuse already awaited aclose\(\)/athrow\(\)"
+ ):
+ await nxt
+
+ self.loop.run_until_complete(run())
+
+ def test_async_gen_aclose_twice_with_different_coros(self):
+ # Regression test for https://bugs.python.org/issue39606
+ async def async_iterate():
+ yield 1
+ yield 2
+
+ async def run():
+ it = async_iterate()
+ await it.aclose()
+ await it.aclose()
+
+ self.loop.run_until_complete(run())
+
+ def test_async_gen_aclose_after_exhaustion(self):
+ # Regression test for https://bugs.python.org/issue39606
+ async def async_iterate():
+ yield 1
+ yield 2
+
+ async def run():
+ it = async_iterate()
+ async for _ in it:
+ pass
+ await it.aclose()
+
+ self.loop.run_until_complete(run())
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py
index 4cbd1ed4712..4bdf82ef175 100644
--- a/Lib/test/test_asyncio/test_events.py
+++ b/Lib/test/test_asyncio/test_events.py
@@ -259,8 +259,12 @@ class EventLoopTestsMixin:
self.assertTrue(self.loop.is_running())
self.loop.run_until_complete(coro1())
- self.assertRaises(
- RuntimeError, self.loop.run_until_complete, coro2())
+ with self.assertWarnsRegex(
+ RuntimeWarning,
+ r"coroutine \S+ was never awaited"
+ ):
+ self.assertRaises(
+ RuntimeError, self.loop.run_until_complete, coro2())
# Note: because of the default Windows timing granularity of
# 15.6 msec, we use fairly long sleep times here (~100 msec).
diff --git a/Lib/test/test_asyncio/test_locks.py b/Lib/test/test_asyncio/test_locks.py
index 9468e740b3c..8c93fae2b51 100644
--- a/Lib/test/test_asyncio/test_locks.py
+++ b/Lib/test/test_asyncio/test_locks.py
@@ -47,13 +47,7 @@ class LockTests(test_utils.TestCase):
self.assertTrue(repr(lock).endswith('[unlocked]>'))
self.assertTrue(RGX_REPR.match(repr(lock)))
- with self.assertWarns(DeprecationWarning):
- @asyncio.coroutine
- def acquire_lock():
- with self.assertWarns(DeprecationWarning):
- yield from lock
-
- self.loop.run_until_complete(acquire_lock())
+ self.loop.run_until_complete(lock.acquire())
self.assertTrue(repr(lock).endswith('[locked]>'))
self.assertTrue(RGX_REPR.match(repr(lock)))
@@ -61,18 +55,16 @@ class LockTests(test_utils.TestCase):
with self.assertWarns(DeprecationWarning):
lock = asyncio.Lock(loop=self.loop)
-
@asyncio.coroutine
def acquire_lock():
- with self.assertWarns(DeprecationWarning):
- return (yield from lock)
+ return (yield from lock)
- res = self.loop.run_until_complete(acquire_lock())
+ with self.assertRaisesRegex(
+ TypeError,
+ "object is not iterable"
+ ):
+ self.loop.run_until_complete(acquire_lock())
- self.assertTrue(res)
- self.assertTrue(lock.locked())
-
- lock.release()
self.assertFalse(lock.locked())
def test_lock_by_with_statement(self):
@@ -90,13 +82,13 @@ class LockTests(test_utils.TestCase):
def test(lock):
yield from asyncio.sleep(0.01)
self.assertFalse(lock.locked())
- with self.assertWarns(DeprecationWarning):
- with (yield from lock) as _lock:
- self.assertIs(_lock, None)
- self.assertTrue(lock.locked())
- yield from asyncio.sleep(0.01)
- self.assertTrue(lock.locked())
- self.assertFalse(lock.locked())
+ with self.assertRaisesRegex(
+ TypeError,
+ "object is not iterable"
+ ):
+ with (yield from lock):
+ pass
+ self.assertFalse(lock.locked())
for primitive in primitives:
loop.run_until_complete(test(primitive))
@@ -302,52 +294,16 @@ class LockTests(test_utils.TestCase):
self.assertFalse(lock.locked())
def test_context_manager(self):
- with self.assertWarns(DeprecationWarning):
- lock = asyncio.Lock(loop=self.loop)
+ async def f():
+ lock = asyncio.Lock()
+ self.assertFalse(lock.locked())
- @asyncio.coroutine
- def acquire_lock():
- with self.assertWarns(DeprecationWarning):
- return (yield from lock)
+ async with lock:
+ self.assertTrue(lock.locked())
- with self.loop.run_until_complete(acquire_lock()):
- self.assertTrue(lock.locked())
+ self.assertFalse(lock.locked())
- self.assertFalse(lock.locked())
-
- def test_context_manager_cant_reuse(self):
- with self.assertWarns(DeprecationWarning):
- lock = asyncio.Lock(loop=self.loop)
-
- @asyncio.coroutine
- def acquire_lock():
- with self.assertWarns(DeprecationWarning):
- return (yield from lock)
-
- # This spells "yield from lock" outside a generator.
- cm = self.loop.run_until_complete(acquire_lock())
- with cm:
- self.assertTrue(lock.locked())
-
- self.assertFalse(lock.locked())
-
- with self.assertRaises(AttributeError):
- with cm:
- pass
-
- def test_context_manager_no_yield(self):
- with self.assertWarns(DeprecationWarning):
- lock = asyncio.Lock(loop=self.loop)
-
- try:
- with lock:
- self.fail('RuntimeError is not raised in with expression')
- except RuntimeError as err:
- self.assertEqual(
- str(err),
- '"yield from" should be used as context manager expression')
-
- self.assertFalse(lock.locked())
+ self.loop.run_until_complete(f())
class EventTests(test_utils.TestCase):
@@ -809,33 +765,14 @@ class ConditionTests(test_utils.TestCase):
self.assertTrue(RGX_REPR.match(repr(cond)))
def test_context_manager(self):
- with self.assertWarns(DeprecationWarning):
- cond = asyncio.Condition(loop=self.loop)
+ async def f():
+ cond = asyncio.Condition()
+ self.assertFalse(cond.locked())
+ async with cond:
+ self.assertTrue(cond.locked())
+ self.assertFalse(cond.locked())
- with self.assertWarns(DeprecationWarning):
- @asyncio.coroutine
- def acquire_cond():
- with self.assertWarns(DeprecationWarning):
- return (yield from cond)
-
- with self.loop.run_until_complete(acquire_cond()):
- self.assertTrue(cond.locked())
-
- self.assertFalse(cond.locked())
-
- def test_context_manager_no_yield(self):
- with self.assertWarns(DeprecationWarning):
- cond = asyncio.Condition(loop=self.loop)
-
- try:
- with cond:
- self.fail('RuntimeError is not raised in with expression')
- except RuntimeError as err:
- self.assertEqual(
- str(err),
- '"yield from" should be used as context manager expression')
-
- self.assertFalse(cond.locked())
+ self.loop.run_until_complete(f())
def test_explicit_lock(self):
with self.assertWarns(DeprecationWarning):
@@ -920,16 +857,14 @@ class SemaphoreTests(test_utils.TestCase):
with self.assertWarns(DeprecationWarning):
@asyncio.coroutine
def acquire_lock():
- with self.assertWarns(DeprecationWarning):
- return (yield from sem)
+ return (yield from sem)
- res = self.loop.run_until_complete(acquire_lock())
+ with self.assertRaisesRegex(
+ TypeError,
+ "'Semaphore' object is not iterable",
+ ):
+ self.loop.run_until_complete(acquire_lock())
- self.assertTrue(res)
- self.assertTrue(sem.locked())
- self.assertEqual(0, sem._value)
-
- sem.release()
self.assertFalse(sem.locked())
self.assertEqual(1, sem._value)
@@ -1064,38 +999,6 @@ class SemaphoreTests(test_utils.TestCase):
sem.release()
self.assertFalse(sem.locked())
- def test_context_manager(self):
- with self.assertWarns(DeprecationWarning):
- sem = asyncio.Semaphore(2, loop=self.loop)
-
- @asyncio.coroutine
- def acquire_lock():
- with self.assertWarns(DeprecationWarning):
- return (yield from sem)
-
- with self.loop.run_until_complete(acquire_lock()):
- self.assertFalse(sem.locked())
- self.assertEqual(1, sem._value)
-
- with self.loop.run_until_complete(acquire_lock()):
- self.assertTrue(sem.locked())
-
- self.assertEqual(2, sem._value)
-
- def test_context_manager_no_yield(self):
- with self.assertWarns(DeprecationWarning):
- sem = asyncio.Semaphore(2, loop=self.loop)
-
- try:
- with sem:
- self.fail('RuntimeError is not raised in with expression')
- except RuntimeError as err:
- self.assertEqual(
- str(err),
- '"yield from" should be used as context manager expression')
-
- self.assertEqual(2, sem._value)
-
if __name__ == '__main__':
unittest.main()
diff --git a/Lib/test/test_asyncio/test_pep492.py b/Lib/test/test_asyncio/test_pep492.py
index a1f27dd5721..c5e3a5c1483 100644
--- a/Lib/test/test_asyncio/test_pep492.py
+++ b/Lib/test/test_asyncio/test_pep492.py
@@ -77,13 +77,12 @@ class LockTests(BaseTest):
async def test(lock):
await asyncio.sleep(0.01)
self.assertFalse(lock.locked())
- with self.assertWarns(DeprecationWarning):
- with await lock as _lock:
- self.assertIs(_lock, None)
- self.assertTrue(lock.locked())
- await asyncio.sleep(0.01)
- self.assertTrue(lock.locked())
- self.assertFalse(lock.locked())
+ with self.assertRaisesRegex(
+ TypeError,
+ "can't be used in 'await' expression"
+ ):
+ with await lock:
+ pass
for primitive in primitives:
self.loop.run_until_complete(test(primitive))
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
index dde84b84b10..68f3b8cce9f 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -979,12 +979,12 @@ class BaseTaskTests:
def coro(s):
return s
c = coro('test')
-
- task =self.new_task(
+ task = self.new_task(
self.loop,
asyncio.wait([c, c, coro('spam')]))
- done, pending = self.loop.run_until_complete(task)
+ with self.assertWarns(DeprecationWarning):
+ done, pending = self.loop.run_until_complete(task)
self.assertFalse(pending)
self.assertEqual(set(f.result() for f in done), {'test', 'spam'})
@@ -1346,7 +1346,9 @@ class BaseTaskTests:
futs = list(asyncio.as_completed(fs, loop=loop))
self.assertEqual(len(futs), 2)
waiter = asyncio.wait(futs)
- done, pending = loop.run_until_complete(waiter)
+ # Deprecation from passing coros in futs to asyncio.wait()
+ with self.assertWarns(DeprecationWarning):
+ done, pending = loop.run_until_complete(waiter)
self.assertEqual(set(f.result() for f in done), {'a', 'b'})
def test_as_completed_duplicate_coroutines(self):
@@ -1751,7 +1753,8 @@ class BaseTaskTests:
async def outer():
nonlocal proof
- d, p = await asyncio.wait([inner()])
+ with self.assertWarns(DeprecationWarning):
+ d, p = await asyncio.wait([inner()])
proof += 100
f = asyncio.ensure_future(outer(), loop=self.loop)
@@ -3307,6 +3310,17 @@ class WaitTests(test_utils.TestCase):
self.loop.run_until_complete(
asyncio.wait_for(coroutine_function(), 0.01, loop=self.loop))
+ def test_coro_is_deprecated_in_wait(self):
+ # Remove test when passing coros to asyncio.wait() is removed in 3.11
+ with self.assertWarns(DeprecationWarning):
+ self.loop.run_until_complete(
+ asyncio.wait([coroutine_function()]))
+
+ task = self.loop.create_task(coroutine_function())
+ with self.assertWarns(DeprecationWarning):
+ self.loop.run_until_complete(
+ asyncio.wait([task, coroutine_function()]))
+
class CompatibilityTests(test_utils.TestCase):
# Tests for checking a bridge between old-styled coroutines
diff --git a/Lib/test/test_base64.py b/Lib/test/test_base64.py
index 2a4cc2acad2..1dbeac41dc0 100644
--- a/Lib/test/test_base64.py
+++ b/Lib/test/test_base64.py
@@ -18,14 +18,6 @@ class LegacyBase64TestCase(unittest.TestCase):
int_data = memoryview(b"1234").cast('I')
self.assertRaises(TypeError, f, int_data)
- def test_encodestring_warns(self):
- with self.assertWarns(DeprecationWarning):
- base64.encodestring(b"www.python.org")
-
- def test_decodestring_warns(self):
- with self.assertWarns(DeprecationWarning):
- base64.decodestring(b"d3d3LnB5dGhvbi5vcmc=\n")
-
def test_encodebytes(self):
eq = self.assertEqual
eq(base64.encodebytes(b"www.python.org"), b"d3d3LnB5dGhvbi5vcmc=\n")
@@ -250,6 +242,7 @@ class BaseXYTestCase(unittest.TestCase):
(b'3d}==', b'\xdd'),
(b'@@', b''),
(b'!', b''),
+ (b"YWJj\n", b"abc"),
(b'YWJj\nYWI=', b'abcab'))
funcs = (
base64.b64decode,
diff --git a/Lib/test/test_binascii.py b/Lib/test/test_binascii.py
index 08de5c9fc7c..45327953a77 100644
--- a/Lib/test/test_binascii.py
+++ b/Lib/test/test_binascii.py
@@ -4,6 +4,7 @@ import unittest
import binascii
import array
import re
+from test import support
# Note: "*_hex" functions are aliases for "(un)hexlify"
b2a_functions = ['b2a_base64', 'b2a_hex', 'b2a_hqx', 'b2a_qp', 'b2a_uu',
@@ -36,6 +37,7 @@ class BinASCIITest(unittest.TestCase):
self.assertTrue(hasattr(getattr(binascii, name), '__call__'))
self.assertRaises(TypeError, getattr(binascii, name))
+ @support.ignore_warnings(category=DeprecationWarning)
def test_returned_value(self):
# Limit to the minimum of all limits (b2a_uu)
MAX_ALL = 45
@@ -179,6 +181,7 @@ class BinASCIITest(unittest.TestCase):
with self.assertRaises(TypeError):
binascii.b2a_uu(b"", True)
+ @support.ignore_warnings(category=DeprecationWarning)
def test_crc_hqx(self):
crc = binascii.crc_hqx(self.type2test(b"Test the CRC-32 of"), 0)
crc = binascii.crc_hqx(self.type2test(b" this string."), crc)
@@ -198,6 +201,7 @@ class BinASCIITest(unittest.TestCase):
self.assertRaises(TypeError, binascii.crc32)
+ @support.ignore_warnings(category=DeprecationWarning)
def test_hqx(self):
# Perform binhex4 style RLE-compression
# Then calculate the hexbin4 binary-to-ASCII translation
@@ -208,6 +212,7 @@ class BinASCIITest(unittest.TestCase):
res = binascii.rledecode_hqx(b)
self.assertEqual(res, self.rawdata)
+ @support.ignore_warnings(category=DeprecationWarning)
def test_rle(self):
# test repetition with a repetition longer than the limit of 255
data = (b'a' * 100 + b'b' + b'c' * 300)
@@ -354,6 +359,7 @@ class BinASCIITest(unittest.TestCase):
self.assertEqual(b2a_qp(type2test(b'a.\n')), b'a.\n')
self.assertEqual(b2a_qp(type2test(b'.a')[:-1]), b'=2E')
+ @support.ignore_warnings(category=DeprecationWarning)
def test_empty_string(self):
# A test for SF bug #1022953. Make sure SystemError is not raised.
empty = self.type2test(b'')
@@ -378,6 +384,7 @@ class BinASCIITest(unittest.TestCase):
# crc_hqx needs 2 arguments
self.assertRaises(TypeError, binascii.crc_hqx, "test", 0)
+ @support.ignore_warnings(category=DeprecationWarning)
def test_unicode_a2b(self):
# Unicode strings are accepted by a2b_* functions.
MAX_ALL = 45
@@ -416,6 +423,18 @@ class BinASCIITest(unittest.TestCase):
self.assertEqual(binascii.b2a_base64(b, newline=False),
b'aGVsbG8=')
+ def test_deprecated_warnings(self):
+ with self.assertWarns(DeprecationWarning):
+ self.assertEqual(binascii.b2a_hqx(b'abc'), b'B@*M')
+ with self.assertWarns(DeprecationWarning):
+ self.assertEqual(binascii.a2b_hqx(b'B@*M'), (b'abc', 0))
+
+ with self.assertWarns(DeprecationWarning):
+ self.assertEqual(binascii.rlecode_hqx(b'a' * 10), b'a\x90\n')
+
+ with self.assertWarns(DeprecationWarning):
+ self.assertEqual(binascii.rledecode_hqx(b'a\x90\n'), b'a' * 10)
+
class ArrayBinASCIITest(BinASCIITest):
def type2test(self, s):
diff --git a/Lib/test/test_binhex.py b/Lib/test/test_binhex.py
index 2f3d53afbd1..86ca37ce1b9 100644
--- a/Lib/test/test_binhex.py
+++ b/Lib/test/test_binhex.py
@@ -3,10 +3,12 @@
Uses the mechanism of the python binhex module
Based on an original test by Roger E. Masse.
"""
-import binhex
import unittest
from test import support
+with support.check_warnings(('', DeprecationWarning)):
+ import binhex
+
class BinHexTestCase(unittest.TestCase):
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 6a88454289d..5c553a92b97 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -949,7 +949,12 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(max(1, 2.0, 3), 3)
self.assertEqual(max(1.0, 2, 3), 3)
- self.assertRaises(TypeError, max)
+ with self.assertRaisesRegex(
+ TypeError,
+ 'max expected at least 1 argument, got 0'
+ ):
+ max()
+
self.assertRaises(TypeError, max, 42)
self.assertRaises(ValueError, max, ())
class BadSeq:
@@ -1003,7 +1008,12 @@ class BuiltinTest(unittest.TestCase):
self.assertEqual(min(1, 2.0, 3), 1)
self.assertEqual(min(1.0, 2, 3), 1.0)
- self.assertRaises(TypeError, min)
+ with self.assertRaisesRegex(
+ TypeError,
+ 'min expected at least 1 argument, got 0'
+ ):
+ min()
+
self.assertRaises(TypeError, min, 42)
self.assertRaises(ValueError, min, ())
class BadSeq:
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index ddcf367f38f..770e2c5592c 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -547,9 +547,13 @@ class BaseBytesTest:
self.assertEqual(dot_join([bytearray(b"ab"), b"cd"]), b"ab.:cd")
self.assertEqual(dot_join([b"ab", bytearray(b"cd")]), b"ab.:cd")
# Stress it with many items
- seq = [b"abc"] * 1000
- expected = b"abc" + b".:abc" * 999
+ seq = [b"abc"] * 100000
+ expected = b"abc" + b".:abc" * 99999
self.assertEqual(dot_join(seq), expected)
+ # Stress test with empty separator
+ seq = [b"abc"] * 100000
+ expected = b"abc" * 100000
+ self.assertEqual(self.type2test(b"").join(seq), expected)
self.assertRaises(TypeError, self.type2test(b" ").join, None)
# Error handling and cleanup when some item in the middle of the
# sequence has the wrong type.
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index eb2f72ee4a5..030d564fc59 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -100,6 +100,9 @@ class BZ2FileTest(BaseTest):
self.assertRaises(ValueError, BZ2File, os.devnull, compresslevel=0)
self.assertRaises(ValueError, BZ2File, os.devnull, compresslevel=10)
+ # compresslevel is keyword-only
+ self.assertRaises(TypeError, BZ2File, os.devnull, "r", 3)
+
def testRead(self):
self.createTempFile()
with BZ2File(self.filename) as bz2f:
diff --git a/Lib/test/test_call.py b/Lib/test/test_call.py
index d178aa4ec2b..b3077ad1d1c 100644
--- a/Lib/test/test_call.py
+++ b/Lib/test/test_call.py
@@ -468,7 +468,7 @@ class FastCallTests(unittest.TestCase):
self.check_result(result, expected)
def test_vectorcall_dict(self):
- # Test _PyObject_FastCallDict()
+ # Test PyObject_VectorcallDict()
for func, args, expected in self.CALLS_POSARGS:
with self.subTest(func=func, args=args):
@@ -487,7 +487,7 @@ class FastCallTests(unittest.TestCase):
self.check_result(result, expected)
def test_vectorcall(self):
- # Test _PyObject_Vectorcall()
+ # Test PyObject_Vectorcall()
for func, args, expected in self.CALLS_POSARGS:
with self.subTest(func=func, args=args):
@@ -594,7 +594,7 @@ class TestPEP590(unittest.TestCase):
# 1. vectorcall using PyVectorcall_Call()
# (only for objects that support vectorcall directly)
# 2. normal call
- # 3. vectorcall using _PyObject_Vectorcall()
+ # 3. vectorcall using PyObject_Vectorcall()
# 4. call as bound method
# 5. call using functools.partial
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index 47810020dd3..ee96473322d 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -6,6 +6,7 @@ import os
import subprocess
import sys
import tempfile
+import textwrap
import unittest
from test import support
from test.support.script_helper import (
@@ -219,6 +220,21 @@ class CmdLineTest(unittest.TestCase):
)
check_output(text)
+ def test_non_interactive_output_buffering(self):
+ code = textwrap.dedent("""
+ import sys
+ out = sys.stdout
+ print(out.isatty(), out.write_through, out.line_buffering)
+ err = sys.stderr
+ print(err.isatty(), err.write_through, err.line_buffering)
+ """)
+ args = [sys.executable, '-c', code]
+ proc = subprocess.run(args, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE, text=True, check=True)
+ self.assertEqual(proc.stdout,
+ 'False False False\n'
+ 'False False True\n')
+
def test_unbuffered_output(self):
# Test expected operation of the '-u' switch
for stream in ('stdout', 'stderr'):
diff --git a/Lib/test/test_code.py b/Lib/test/test_code.py
index 656c46cfaa7..7bb824ea31d 100644
--- a/Lib/test/test_code.py
+++ b/Lib/test/test_code.py
@@ -434,42 +434,6 @@ if check_impl_detail(cpython=True) and ctypes is not None:
tt.join()
self.assertEqual(LAST_FREED, 500)
- @cpython_only
- def test_clean_stack_on_return(self):
-
- def f(x):
- return x
-
- code = f.__code__
- ct = type(f.__code__)
-
- # Insert an extra LOAD_FAST, this duplicates the value of
- # 'x' in the stack, leaking it if the frame is not properly
- # cleaned up upon exit.
-
- bytecode = list(code.co_code)
- bytecode.insert(-2, opcode.opmap['LOAD_FAST'])
- bytecode.insert(-2, 0)
-
- c = ct(code.co_argcount, code.co_posonlyargcount,
- code.co_kwonlyargcount, code.co_nlocals, code.co_stacksize+1,
- code.co_flags, bytes(bytecode),
- code.co_consts, code.co_names, code.co_varnames,
- code.co_filename, code.co_name, code.co_firstlineno,
- code.co_lnotab, code.co_freevars, code.co_cellvars)
- new_function = type(f)(c, f.__globals__, 'nf', f.__defaults__, f.__closure__)
-
- class Var:
- pass
- the_object = Var()
- var = weakref.ref(the_object)
-
- new_function(the_object)
-
- # Check if the_object is leaked
- del the_object
- assert var() is None
-
def test_main(verbose=None):
from test import test_code
diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py
index c97351636e8..a7381f9d13e 100644
--- a/Lib/test/test_concurrent_futures.py
+++ b/Lib/test/test_concurrent_futures.py
@@ -342,6 +342,49 @@ class ExecutorShutdownTest:
for f in fs:
f.result()
+ def test_cancel_futures(self):
+ executor = self.executor_type(max_workers=3)
+ fs = [executor.submit(time.sleep, .1) for _ in range(50)]
+ executor.shutdown(cancel_futures=True)
+ # We can't guarantee the exact number of cancellations, but we can
+ # guarantee that *some* were cancelled. With setting max_workers to 3,
+ # most of the submitted futures should have been cancelled.
+ cancelled = [fut for fut in fs if fut.cancelled()]
+ self.assertTrue(len(cancelled) >= 35, msg=f"{len(cancelled)=}")
+
+ # Ensure the other futures were able to finish.
+ # Use "not fut.cancelled()" instead of "fut.done()" to include futures
+ # that may have been left in a pending state.
+ others = [fut for fut in fs if not fut.cancelled()]
+ for fut in others:
+ self.assertTrue(fut.done(), msg=f"{fut._state=}")
+ self.assertIsNone(fut.exception())
+
+ # Similar to the number of cancelled futures, we can't guarantee the
+ # exact number that completed. But, we can guarantee that at least
+ # one finished.
+ self.assertTrue(len(others) > 0, msg=f"{len(others)=}")
+
+ def test_hang_issue39205(self):
+ """shutdown(wait=False) doesn't hang at exit with running futures.
+
+ See https://bugs.python.org/issue39205.
+ """
+ if self.executor_type == futures.ProcessPoolExecutor:
+ raise unittest.SkipTest(
+ "Hangs due to https://bugs.python.org/issue39205")
+
+ rc, out, err = assert_python_ok('-c', """if True:
+ from concurrent.futures import {executor_type}
+ from test.test_concurrent_futures import sleep_and_print
+ if __name__ == "__main__":
+ t = {executor_type}(max_workers=3)
+ t.submit(sleep_and_print, 1.0, "apple")
+ t.shutdown(wait=False)
+ """.format(executor_type=self.executor_type.__name__))
+ self.assertFalse(err)
+ self.assertEqual(out.strip(), b"apple")
+
class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase):
def _prime_executor(self):
@@ -372,13 +415,32 @@ class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase
def test_del_shutdown(self):
executor = futures.ThreadPoolExecutor(max_workers=5)
- executor.map(abs, range(-5, 5))
+ res = executor.map(abs, range(-5, 5))
threads = executor._threads
del executor
for t in threads:
t.join()
+ # Make sure the results were all computed before the
+ # executor got shutdown.
+ assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
+ def test_shutdown_no_wait(self):
+ # Ensure that the executor cleans up the threads when calling
+ # shutdown with wait=False
+ executor = futures.ThreadPoolExecutor(max_workers=5)
+ res = executor.map(abs, range(-5, 5))
+ threads = executor._threads
+ executor.shutdown(wait=False)
+ for t in threads:
+ t.join()
+
+ # Make sure the results were all computed before the
+ # executor got shutdown.
+ assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
+
def test_thread_names_assigned(self):
executor = futures.ThreadPoolExecutor(
max_workers=5, thread_name_prefix='SpecialPool')
@@ -402,6 +464,22 @@ class ThreadPoolShutdownTest(ThreadPoolMixin, ExecutorShutdownTest, BaseTestCase
self.assertRegex(t.name, r'ThreadPoolExecutor-\d+_[0-4]$')
t.join()
+ def test_cancel_futures_wait_false(self):
+ # Can only be reliably tested for TPE, since PPE often hangs with
+ # `wait=False` (even without *cancel_futures*).
+ rc, out, err = assert_python_ok('-c', """if True:
+ from concurrent.futures import ThreadPoolExecutor
+ from test.test_concurrent_futures import sleep_and_print
+ if __name__ == "__main__":
+ t = ThreadPoolExecutor()
+ t.submit(sleep_and_print, .1, "apple")
+ t.shutdown(wait=False, cancel_futures=True)
+ """.format(executor_type=self.executor_type.__name__))
+ # Errors in atexit hooks don't change the process exit code, check
+ # stderr manually.
+ self.assertFalse(err)
+ self.assertEqual(out.strip(), b"apple")
+
class ProcessPoolShutdownTest(ExecutorShutdownTest):
def _prime_executor(self):
@@ -429,7 +507,7 @@ class ProcessPoolShutdownTest(ExecutorShutdownTest):
def test_del_shutdown(self):
executor = futures.ProcessPoolExecutor(max_workers=5)
- list(executor.map(abs, range(-5, 5)))
+ res = executor.map(abs, range(-5, 5))
queue_management_thread = executor._queue_management_thread
processes = executor._processes
call_queue = executor._call_queue
@@ -443,6 +521,31 @@ class ProcessPoolShutdownTest(ExecutorShutdownTest):
p.join()
call_queue.join_thread()
+ # Make sure the results were all computed before the
+ # executor got shutdown.
+ assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
+ def test_shutdown_no_wait(self):
+ # Ensure that the executor cleans up the processes when calling
+ # shutdown with wait=False
+ executor = futures.ProcessPoolExecutor(max_workers=5)
+ res = executor.map(abs, range(-5, 5))
+ processes = executor._processes
+ call_queue = executor._call_queue
+ queue_management_thread = executor._queue_management_thread
+ executor.shutdown(wait=False)
+
+ # Make sure that all the executor resources were properly cleaned by
+ # the shutdown process
+ queue_management_thread.join()
+ for p in processes.values():
+ p.join()
+ call_queue.join_thread()
+
+ # Make sure the results were all computed before the executor got
+ # shutdown.
+ assert all([r == abs(v) for r, v in zip(res, range(-5, 5))])
+
create_executor_tests(ProcessPoolShutdownTest,
executor_mixins=(ProcessPoolForkMixin,
@@ -1027,6 +1130,32 @@ class ExecutorDeadlockTest:
with self.assertRaises(BrokenProcessPool):
f.result()
+ def test_shutdown_deadlock_pickle(self):
+ # Test that the pool calling shutdown with wait=False does not cause
+ # a deadlock if a task fails at pickle after the shutdown call.
+ # Reported in bpo-39104.
+ self.executor.shutdown(wait=True)
+ with self.executor_type(max_workers=2,
+ mp_context=get_context(self.ctx)) as executor:
+ self.executor = executor # Allow clean up in fail_on_deadlock
+
+ # Start the executor and get the queue_management_thread to collect
+ # the threads and avoid dangling thread that should be cleaned up
+ # asynchronously.
+ executor.submit(id, 42).result()
+ queue_manager = executor._queue_management_thread
+
+ # Submit a task that fails at pickle and shutdown the executor
+ # without waiting
+ f = executor.submit(id, ErrorAtPickle())
+ executor.shutdown(wait=False)
+ with self.assertRaises(PicklingError):
+ f.result()
+
+ # Make sure the executor is eventually shutdown and do not leave
+ # dangling threads
+ queue_manager.join()
+
create_executor_tests(ExecutorDeadlockTest,
executor_mixins=(ProcessPoolForkMixin,
diff --git a/Lib/test/test_copy.py b/Lib/test/test_copy.py
index 45a692022f2..35f72fb216b 100644
--- a/Lib/test/test_copy.py
+++ b/Lib/test/test_copy.py
@@ -99,7 +99,7 @@ class TestCopy(unittest.TestCase):
42, 2**100, 3.14, True, False, 1j,
"hello", "hello\u1234", f.__code__,
b"world", bytes(range(256)), range(10), slice(1, 10, 2),
- NewStyle, Classic, max, WithMetaclass]
+ NewStyle, Classic, max, WithMetaclass, property()]
for x in tests:
self.assertIs(copy.copy(x), x)
@@ -357,7 +357,7 @@ class TestCopy(unittest.TestCase):
pass
tests = [None, 42, 2**100, 3.14, True, False, 1j,
"hello", "hello\u1234", f.__code__,
- NewStyle, Classic, max]
+ NewStyle, Classic, max, property()]
for x in tests:
self.assertIs(copy.deepcopy(x), x)
diff --git a/Lib/test/test_coroutines.py b/Lib/test/test_coroutines.py
index 208b5c2ccf5..8d1e0692a24 100644
--- a/Lib/test/test_coroutines.py
+++ b/Lib/test/test_coroutines.py
@@ -1203,39 +1203,41 @@ class CoroutineTest(unittest.TestCase):
def __aenter__(self):
pass
+ body_executed = False
async def foo():
async with CM():
- pass
+ body_executed = True
with self.assertRaisesRegex(AttributeError, '__aexit__'):
run_async(foo())
+ self.assertFalse(body_executed)
def test_with_3(self):
class CM:
def __aexit__(self):
pass
+ body_executed = False
async def foo():
async with CM():
- pass
+ body_executed = True
with self.assertRaisesRegex(AttributeError, '__aenter__'):
run_async(foo())
+ self.assertFalse(body_executed)
def test_with_4(self):
class CM:
- def __enter__(self):
- pass
-
- def __exit__(self):
- pass
+ pass
+ body_executed = False
async def foo():
async with CM():
- pass
+ body_executed = True
- with self.assertRaisesRegex(AttributeError, '__aexit__'):
+ with self.assertRaisesRegex(AttributeError, '__aenter__'):
run_async(foo())
+ self.assertFalse(body_executed)
def test_with_5(self):
# While this test doesn't make a lot of sense,
diff --git a/Lib/test/test_crypt.py b/Lib/test/test_crypt.py
index d29e005fdad..5dc83b4ecbf 100644
--- a/Lib/test/test_crypt.py
+++ b/Lib/test/test_crypt.py
@@ -6,20 +6,21 @@ try:
import crypt
IMPORT_ERROR = None
except ImportError as ex:
+ if sys.platform != 'win32':
+ raise unittest.SkipTest(str(ex))
crypt = None
IMPORT_ERROR = str(ex)
-@unittest.skipIf(crypt, 'This should only run on windows')
+@unittest.skipUnless(sys.platform == 'win32', 'This should only run on windows')
+@unittest.skipIf(crypt, 'import succeeded')
class TestWhyCryptDidNotImport(unittest.TestCase):
- def test_failure_only_for_windows(self):
- self.assertEqual(sys.platform, 'win32')
def test_import_failure_message(self):
self.assertIn('not supported', IMPORT_ERROR)
-@unittest.skipUnless(crypt, 'Not supported on Windows')
+@unittest.skipUnless(crypt, 'crypt module is required')
class CryptTestCase(unittest.TestCase):
def test_crypt(self):
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py
index 8f9fb2ce8c1..e8fe455fc19 100644
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -45,6 +45,25 @@ class TestCase(unittest.TestCase):
o = C(42)
self.assertEqual(o.x, 42)
+ def test_field_default_default_factory_error(self):
+ msg = "cannot specify both default and default_factory"
+ with self.assertRaisesRegex(ValueError, msg):
+ @dataclass
+ class C:
+ x: int = field(default=1, default_factory=int)
+
+ def test_field_repr(self):
+ int_field = field(default=1, init=True, repr=False)
+ int_field.name = "id"
+ repr_output = repr(int_field)
+ expected_output = "Field(name='id',type=None," \
+ f"default=1,default_factory={MISSING!r}," \
+ "init=True,repr=False,hash=None," \
+ "compare=True,metadata=mappingproxy({})," \
+ "_field_type=None)"
+
+ self.assertEqual(repr_output, expected_output)
+
def test_named_init_params(self):
@dataclass
class C:
diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py
index 51b66b76aca..c0f7138254f 100644
--- a/Lib/test/test_deque.py
+++ b/Lib/test/test_deque.py
@@ -183,6 +183,18 @@ class TestBasic(unittest.TestCase):
with self.assertRaises(RuntimeError):
n in d
+ def test_contains_count_stop_crashes(self):
+ class A:
+ def __eq__(self, other):
+ d.clear()
+ return NotImplemented
+ d = deque([A(), A()])
+ with self.assertRaises(RuntimeError):
+ _ = 3 in d
+ d = deque([A(), A()])
+ with self.assertRaises(RuntimeError):
+ _ = d.count(3)
+
def test_extend(self):
d = deque('a')
self.assertRaises(TypeError, d.extend, 1)
diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py
index 5b513765f7b..de483ab5521 100644
--- a/Lib/test/test_dict.py
+++ b/Lib/test/test_dict.py
@@ -1221,7 +1221,7 @@ class DictTest(unittest.TestCase):
support.check_free_after_iterating(self, lambda d: iter(d.items()), dict)
def test_equal_operator_modifying_operand(self):
- # test fix for seg fault reported in issue 27945 part 3.
+ # test fix for seg fault reported in bpo-27945 part 3.
class X():
def __del__(self):
dict_b.clear()
@@ -1237,6 +1237,16 @@ class DictTest(unittest.TestCase):
dict_b = {X(): X()}
self.assertTrue(dict_a == dict_b)
+ # test fix for seg fault reported in bpo-38588 part 1.
+ class Y:
+ def __eq__(self, other):
+ dict_d.clear()
+ return True
+
+ dict_c = {0: Y()}
+ dict_d = {0: set()}
+ self.assertTrue(dict_c == dict_d)
+
def test_fromkeys_operator_modifying_dict_operand(self):
# test fix for seg fault reported in issue 27945 part 4a.
class X(int):
diff --git a/Lib/test/test_dictcomps.py b/Lib/test/test_dictcomps.py
index 927e3103e66..16aa651b93c 100644
--- a/Lib/test/test_dictcomps.py
+++ b/Lib/test/test_dictcomps.py
@@ -111,5 +111,22 @@ class DictComprehensionTest(unittest.TestCase):
self.assertEqual(actual, expected)
self.assertEqual(actual_calls, expected_calls)
+ def test_assignment_idiom_in_comprehensions(self):
+ expected = {1: 1, 2: 4, 3: 9, 4: 16}
+ actual = {j: j*j for i in range(4) for j in [i+1]}
+ self.assertEqual(actual, expected)
+ expected = {3: 2, 5: 6, 7: 12, 9: 20}
+ actual = {j+k: j*k for i in range(4) for j in [i+1] for k in [j+1]}
+ self.assertEqual(actual, expected)
+ expected = {3: 2, 5: 6, 7: 12, 9: 20}
+ actual = {j+k: j*k for i in range(4) for j, k in [(i+1, i+2)]}
+ self.assertEqual(actual, expected)
+
+ def test_star_expression(self):
+ expected = {0: 0, 1: 1, 2: 4, 3: 9}
+ self.assertEqual({i: i*i for i in [*range(4)]}, expected)
+ self.assertEqual({i: i*i for i in (*range(4),)}, expected)
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py
index 5c1595268c5..ac5836d2889 100644
--- a/Lib/test/test_dis.py
+++ b/Lib/test/test_dis.py
@@ -278,34 +278,33 @@ dis_traceback = """\
--> 6 BINARY_TRUE_DIVIDE
8 POP_TOP
10 POP_BLOCK
- 12 JUMP_FORWARD 44 (to 58)
+ 12 JUMP_FORWARD 42 (to 56)
%3d >> 14 DUP_TOP
16 LOAD_GLOBAL 0 (Exception)
- 18 COMPARE_OP 10 (exception match)
- 20 POP_JUMP_IF_FALSE 56
- 22 POP_TOP
- 24 STORE_FAST 0 (e)
- 26 POP_TOP
- 28 SETUP_FINALLY 18 (to 48)
+ 18 JUMP_IF_NOT_EXC_MATCH 54
+ 20 POP_TOP
+ 22 STORE_FAST 0 (e)
+ 24 POP_TOP
+ 26 SETUP_FINALLY 18 (to 46)
-%3d 30 LOAD_FAST 0 (e)
- 32 LOAD_ATTR 1 (__traceback__)
- 34 STORE_FAST 1 (tb)
- 36 POP_BLOCK
- 38 POP_EXCEPT
- 40 LOAD_CONST 0 (None)
- 42 STORE_FAST 0 (e)
- 44 DELETE_FAST 0 (e)
- 46 JUMP_FORWARD 10 (to 58)
- >> 48 LOAD_CONST 0 (None)
- 50 STORE_FAST 0 (e)
- 52 DELETE_FAST 0 (e)
- 54 RERAISE
- >> 56 RERAISE
+%3d 28 LOAD_FAST 0 (e)
+ 30 LOAD_ATTR 1 (__traceback__)
+ 32 STORE_FAST 1 (tb)
+ 34 POP_BLOCK
+ 36 POP_EXCEPT
+ 38 LOAD_CONST 0 (None)
+ 40 STORE_FAST 0 (e)
+ 42 DELETE_FAST 0 (e)
+ 44 JUMP_FORWARD 10 (to 56)
+ >> 46 LOAD_CONST 0 (None)
+ 48 STORE_FAST 0 (e)
+ 50 DELETE_FAST 0 (e)
+ 52 RERAISE
+ >> 54 RERAISE
-%3d >> 58 LOAD_FAST 1 (tb)
- 60 RETURN_VALUE
+%3d >> 56 LOAD_FAST 1 (tb)
+ 58 RETURN_VALUE
""" % (TRACEBACK_CODE.co_firstlineno + 1,
TRACEBACK_CODE.co_firstlineno + 2,
TRACEBACK_CODE.co_firstlineno + 3,
@@ -333,6 +332,68 @@ dis_fstring = """\
28 RETURN_VALUE
""" % (_fstring.__code__.co_firstlineno + 1,)
+def _tryfinally(a, b):
+ try:
+ return a
+ finally:
+ b()
+
+def _tryfinallyconst(b):
+ try:
+ return 1
+ finally:
+ b()
+
+dis_tryfinally = """\
+%3d 0 SETUP_FINALLY 12 (to 14)
+
+%3d 2 LOAD_FAST 0 (a)
+ 4 POP_BLOCK
+
+%3d 6 LOAD_FAST 1 (b)
+ 8 CALL_FUNCTION 0
+ 10 POP_TOP
+
+%3d 12 RETURN_VALUE
+
+%3d >> 14 LOAD_FAST 1 (b)
+ 16 CALL_FUNCTION 0
+ 18 POP_TOP
+ 20 RERAISE
+ 22 LOAD_CONST 0 (None)
+ 24 RETURN_VALUE
+""" % (_tryfinally.__code__.co_firstlineno + 1,
+ _tryfinally.__code__.co_firstlineno + 2,
+ _tryfinally.__code__.co_firstlineno + 4,
+ _tryfinally.__code__.co_firstlineno + 2,
+ _tryfinally.__code__.co_firstlineno + 4,
+ )
+
+dis_tryfinallyconst = """\
+%3d 0 SETUP_FINALLY 12 (to 14)
+
+%3d 2 POP_BLOCK
+
+%3d 4 LOAD_FAST 0 (b)
+ 6 CALL_FUNCTION 0
+ 8 POP_TOP
+
+%3d 10 LOAD_CONST 1 (1)
+ 12 RETURN_VALUE
+
+%3d >> 14 LOAD_FAST 0 (b)
+ 16 CALL_FUNCTION 0
+ 18 POP_TOP
+ 20 RERAISE
+ 22 LOAD_CONST 0 (None)
+ 24 RETURN_VALUE
+""" % (_tryfinallyconst.__code__.co_firstlineno + 1,
+ _tryfinallyconst.__code__.co_firstlineno + 2,
+ _tryfinallyconst.__code__.co_firstlineno + 4,
+ _tryfinallyconst.__code__.co_firstlineno + 2,
+ _tryfinallyconst.__code__.co_firstlineno + 4,
+ )
+
def _g(x):
yield x
@@ -444,7 +505,8 @@ class DisTests(unittest.TestCase):
def test_widths(self):
for opcode, opname in enumerate(dis.opname):
if opname in ('BUILD_MAP_UNPACK_WITH_CALL',
- 'BUILD_TUPLE_UNPACK_WITH_CALL'):
+ 'BUILD_TUPLE_UNPACK_WITH_CALL',
+ 'JUMP_IF_NOT_EXC_MATCH'):
continue
with self.subTest(opname=opname):
width = dis._OPNAME_WIDTH
@@ -563,6 +625,10 @@ class DisTests(unittest.TestCase):
def test_disassemble_fstring(self):
self.do_disassembly_test(_fstring, dis_fstring)
+ def test_disassemble_try_finally(self):
+ self.do_disassembly_test(_tryfinally, dis_tryfinally)
+ self.do_disassembly_test(_tryfinallyconst, dis_tryfinallyconst)
+
def test_dis_none(self):
try:
del sys.last_traceback
@@ -979,63 +1045,62 @@ expected_opinfo_jumpy = [
Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval='Who let lolcatz into this test suite?', argrepr="'Who let lolcatz into this test suite?'", offset=96, starts_line=None, is_jump_target=False),
Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=98, starts_line=None, is_jump_target=False),
Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=100, starts_line=None, is_jump_target=False),
- Instruction(opname='SETUP_FINALLY', opcode=122, arg=98, argval=202, argrepr='to 202', offset=102, starts_line=20, is_jump_target=True),
+ Instruction(opname='SETUP_FINALLY', opcode=122, arg=96, argval=200, argrepr='to 200', offset=102, starts_line=20, is_jump_target=True),
Instruction(opname='SETUP_FINALLY', opcode=122, arg=12, argval=118, argrepr='to 118', offset=104, starts_line=None, is_jump_target=False),
Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=1, argrepr='1', offset=106, starts_line=21, is_jump_target=False),
Instruction(opname='LOAD_CONST', opcode=100, arg=7, argval=0, argrepr='0', offset=108, starts_line=None, is_jump_target=False),
Instruction(opname='BINARY_TRUE_DIVIDE', opcode=27, arg=None, argval=None, argrepr='', offset=110, starts_line=None, is_jump_target=False),
Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=112, starts_line=None, is_jump_target=False),
Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=114, starts_line=None, is_jump_target=False),
- Instruction(opname='JUMP_FORWARD', opcode=110, arg=28, argval=146, argrepr='to 146', offset=116, starts_line=None, is_jump_target=False),
+ Instruction(opname='JUMP_FORWARD', opcode=110, arg=26, argval=144, argrepr='to 144', offset=116, starts_line=None, is_jump_target=False),
Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=118, starts_line=22, is_jump_target=True),
Instruction(opname='LOAD_GLOBAL', opcode=116, arg=2, argval='ZeroDivisionError', argrepr='ZeroDivisionError', offset=120, starts_line=None, is_jump_target=False),
- Instruction(opname='COMPARE_OP', opcode=107, arg=10, argval='exception match', argrepr='exception match', offset=122, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_JUMP_IF_FALSE', opcode=114, arg=144, argval=144, argrepr='', offset=124, starts_line=None, is_jump_target=False),
+ Instruction(opname='JUMP_IF_NOT_EXC_MATCH', opcode=121, arg=142, argval=142, argrepr='', offset=122, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=124, starts_line=None, is_jump_target=False),
Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=126, starts_line=None, is_jump_target=False),
Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=128, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=130, starts_line=None, is_jump_target=False),
- Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=132, starts_line=23, is_jump_target=False),
- Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=134, starts_line=None, is_jump_target=False),
- Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=136, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=138, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=140, starts_line=None, is_jump_target=False),
- Instruction(opname='JUMP_FORWARD', opcode=110, arg=46, argval=190, argrepr='to 190', offset=142, starts_line=None, is_jump_target=False),
- Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=144, starts_line=None, is_jump_target=True),
- Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=146, starts_line=25, is_jump_target=True),
- Instruction(opname='SETUP_WITH', opcode=143, arg=24, argval=174, argrepr='to 174', offset=148, starts_line=None, is_jump_target=False),
- Instruction(opname='STORE_FAST', opcode=125, arg=1, argval='dodgy', argrepr='dodgy', offset=150, starts_line=None, is_jump_target=False),
- Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=152, starts_line=26, is_jump_target=False),
- Instruction(opname='LOAD_CONST', opcode=100, arg=9, argval='Never reach this', argrepr="'Never reach this'", offset=154, starts_line=None, is_jump_target=False),
- Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=156, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=158, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=160, starts_line=None, is_jump_target=False),
- Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=162, starts_line=None, is_jump_target=False),
+ Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=130, starts_line=23, is_jump_target=False),
+ Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval='Here we go, here we go, here we go...', argrepr="'Here we go, here we go, here we go...'", offset=132, starts_line=None, is_jump_target=False),
+ Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=134, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=136, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=138, starts_line=None, is_jump_target=False),
+ Instruction(opname='JUMP_FORWARD', opcode=110, arg=46, argval=188, argrepr='to 188', offset=140, starts_line=None, is_jump_target=False),
+ Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=142, starts_line=None, is_jump_target=True),
+ Instruction(opname='LOAD_FAST', opcode=124, arg=0, argval='i', argrepr='i', offset=144, starts_line=25, is_jump_target=True),
+ Instruction(opname='SETUP_WITH', opcode=143, arg=24, argval=172, argrepr='to 172', offset=146, starts_line=None, is_jump_target=False),
+ Instruction(opname='STORE_FAST', opcode=125, arg=1, argval='dodgy', argrepr='dodgy', offset=148, starts_line=None, is_jump_target=False),
+ Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=150, starts_line=26, is_jump_target=False),
+ Instruction(opname='LOAD_CONST', opcode=100, arg=9, argval='Never reach this', argrepr="'Never reach this'", offset=152, starts_line=None, is_jump_target=False),
+ Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=154, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=156, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=158, starts_line=None, is_jump_target=False),
+ Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=160, starts_line=None, is_jump_target=False),
+ Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=162, starts_line=None, is_jump_target=False),
Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=164, starts_line=None, is_jump_target=False),
- Instruction(opname='DUP_TOP', opcode=4, arg=None, argval=None, argrepr='', offset=166, starts_line=None, is_jump_target=False),
- Instruction(opname='CALL_FUNCTION', opcode=131, arg=3, argval=3, argrepr='', offset=168, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=170, starts_line=None, is_jump_target=False),
- Instruction(opname='JUMP_FORWARD', opcode=110, arg=16, argval=190, argrepr='to 190', offset=172, starts_line=None, is_jump_target=False),
- Instruction(opname='WITH_EXCEPT_START', opcode=49, arg=None, argval=None, argrepr='', offset=174, starts_line=None, is_jump_target=True),
- Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=180, argval=180, argrepr='', offset=176, starts_line=None, is_jump_target=False),
- Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=178, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=180, starts_line=None, is_jump_target=True),
+ Instruction(opname='CALL_FUNCTION', opcode=131, arg=3, argval=3, argrepr='', offset=166, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=168, starts_line=None, is_jump_target=False),
+ Instruction(opname='JUMP_FORWARD', opcode=110, arg=16, argval=188, argrepr='to 188', offset=170, starts_line=None, is_jump_target=False),
+ Instruction(opname='WITH_EXCEPT_START', opcode=49, arg=None, argval=None, argrepr='', offset=172, starts_line=None, is_jump_target=True),
+ Instruction(opname='POP_JUMP_IF_TRUE', opcode=115, arg=178, argval=178, argrepr='', offset=174, starts_line=None, is_jump_target=False),
+ Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=176, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=178, starts_line=None, is_jump_target=True),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=180, starts_line=None, is_jump_target=False),
Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=182, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=184, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=188, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=190, starts_line=None, is_jump_target=True),
- Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=192, starts_line=28, is_jump_target=False),
- Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=194, starts_line=None, is_jump_target=False),
- Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=196, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=198, starts_line=None, is_jump_target=False),
- Instruction(opname='JUMP_FORWARD', opcode=110, arg=10, argval=212, argrepr='to 212', offset=200, starts_line=None, is_jump_target=False),
- Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=202, starts_line=None, is_jump_target=True),
- Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=204, starts_line=None, is_jump_target=False),
- Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=206, starts_line=None, is_jump_target=False),
- Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=208, starts_line=None, is_jump_target=False),
- Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=210, starts_line=None, is_jump_target=False),
- Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=212, starts_line=None, is_jump_target=True),
- Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=214, starts_line=None, is_jump_target=False)
+ Instruction(opname='POP_EXCEPT', opcode=89, arg=None, argval=None, argrepr='', offset=184, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=186, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_BLOCK', opcode=87, arg=None, argval=None, argrepr='', offset=188, starts_line=None, is_jump_target=True),
+ Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=190, starts_line=28, is_jump_target=False),
+ Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=192, starts_line=None, is_jump_target=False),
+ Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=194, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=196, starts_line=None, is_jump_target=False),
+ Instruction(opname='JUMP_FORWARD', opcode=110, arg=10, argval=210, argrepr='to 210', offset=198, starts_line=None, is_jump_target=False),
+ Instruction(opname='LOAD_GLOBAL', opcode=116, arg=1, argval='print', argrepr='print', offset=200, starts_line=None, is_jump_target=True),
+ Instruction(opname='LOAD_CONST', opcode=100, arg=10, argval="OK, now we're done", argrepr='"OK, now we\'re done"', offset=202, starts_line=None, is_jump_target=False),
+ Instruction(opname='CALL_FUNCTION', opcode=131, arg=1, argval=1, argrepr='', offset=204, starts_line=None, is_jump_target=False),
+ Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=206, starts_line=None, is_jump_target=False),
+ Instruction(opname='RERAISE', opcode=48, arg=None, argval=None, argrepr='', offset=208, starts_line=None, is_jump_target=False),
+ Instruction(opname='LOAD_CONST', opcode=100, arg=0, argval=None, argrepr='None', offset=210, starts_line=None, is_jump_target=True),
+ Instruction(opname='RETURN_VALUE', opcode=83, arg=None, argval=None, argrepr='', offset=212, starts_line=None, is_jump_target=False),
]
# One last piece of inspect fodder to check the default line number handling
diff --git a/Lib/test/test_distutils.py b/Lib/test/test_distutils.py
index d613abe453b..a37f1179175 100644
--- a/Lib/test/test_distutils.py
+++ b/Lib/test/test_distutils.py
@@ -10,9 +10,15 @@ import test.support
def test_main():
+ # used by regrtest
test.support.run_unittest(distutils.tests.test_suite())
test.support.reap_children()
+def load_tests(*_):
+ # used by unittest
+ return distutils.tests.test_suite()
+
+
if __name__ == "__main__":
test_main()
diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py
index 73ef96265b7..87842b9377a 100644
--- a/Lib/test/test_embed.py
+++ b/Lib/test/test_embed.py
@@ -356,7 +356,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'tracemalloc': 0,
'import_time': 0,
'show_ref_count': 0,
- 'show_alloc_count': 0,
'dump_refs': 0,
'malloc_stats': 0,
@@ -729,7 +728,6 @@ class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):
'tracemalloc': 2,
'import_time': 1,
'show_ref_count': 1,
- 'show_alloc_count': 1,
'malloc_stats': 1,
'stdio_encoding': 'iso8859-1',
diff --git a/Lib/test/test_eof.py b/Lib/test/test_eof.py
index a091ceaa25b..9ef8eb11874 100644
--- a/Lib/test/test_eof.py
+++ b/Lib/test/test_eof.py
@@ -27,7 +27,7 @@ class EOFTestCase(unittest.TestCase):
raise support.TestFailed
def test_line_continuation_EOF(self):
- """A contination at the end of input must be an error; bpo2180."""
+ """A continuation at the end of input must be an error; bpo2180."""
expect = 'unexpected EOF while parsing (, line 1)'
with self.assertRaises(SyntaxError) as excinfo:
exec('x = 5\\')
diff --git a/Lib/test/test_epoll.py b/Lib/test/test_epoll.py
index 8ac0f31d805..10f148fe5cd 100644
--- a/Lib/test/test_epoll.py
+++ b/Lib/test/test_epoll.py
@@ -225,7 +225,10 @@ class TestEPoll(unittest.TestCase):
self.assertFalse(then - now > 0.01)
server.close()
- ep.unregister(fd)
+
+ with self.assertRaises(OSError) as cm:
+ ep.unregister(fd)
+ self.assertEqual(cm.exception.errno, errno.EBADF)
def test_close(self):
open_file = open(__file__, "rb")
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index 4d1aa4bca62..22a22363a7d 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -179,17 +179,25 @@ class ExceptionTests(unittest.TestCase):
ckmsg(s, "inconsistent use of tabs and spaces in indentation", TabError)
def testSyntaxErrorOffset(self):
- def check(src, lineno, offset):
+ def check(src, lineno, offset, encoding='utf-8'):
with self.assertRaises(SyntaxError) as cm:
compile(src, '', 'exec')
self.assertEqual(cm.exception.lineno, lineno)
self.assertEqual(cm.exception.offset, offset)
+ if cm.exception.text is not None:
+ if not isinstance(src, str):
+ src = src.decode(encoding, 'replace')
+ line = src.split('\n')[lineno-1]
+ self.assertEqual(cm.exception.text.rstrip('\n'), line)
check('def fact(x):\n\treturn x!\n', 2, 10)
check('1 +\n', 1, 4)
check('def spam():\n print(1)\n print(2)', 3, 10)
check('Python = "Python" +', 1, 20)
check('Python = "\u1e54\xfd\u0163\u0125\xf2\xf1" +', 1, 20)
+ check(b'# -*- coding: cp1251 -*-\nPython = "\xcf\xb3\xf2\xee\xed" +',
+ 2, 19, encoding='cp1251')
+ check(b'Python = "\xcf\xb3\xf2\xee\xed" +', 1, 18)
check('x = "a', 1, 7)
check('lambda x: x = 2', 1, 1)
@@ -205,6 +213,10 @@ class ExceptionTests(unittest.TestCase):
check('0010 + 2', 1, 4)
check('x = 32e-+4', 1, 8)
check('x = 0o9', 1, 6)
+ check('\u03b1 = 0xI', 1, 6)
+ check(b'\xce\xb1 = 0xI', 1, 6)
+ check(b'# -*- coding: iso8859-7 -*-\n\xe1 = 0xI', 2, 6,
+ encoding='iso8859-7')
# Errors thrown by symtable.c
check('x = [(yield i) for i in range(3)]', 1, 5)
diff --git a/Lib/test/test_extcall.py b/Lib/test/test_extcall.py
index 4edb6680e0f..1faf29e01d3 100644
--- a/Lib/test/test_extcall.py
+++ b/Lib/test/test_extcall.py
@@ -252,12 +252,12 @@ What about willful misconduct?
>>> h(1, *h)
Traceback (most recent call last):
...
- TypeError: test.test_extcall.h() argument after * must be an iterable, not function
+ TypeError: Value after * must be an iterable, not function
>>> h(*[1], *h)
Traceback (most recent call last):
...
- TypeError: test.test_extcall.h() argument after * must be an iterable, not function
+ TypeError: Value after * must be an iterable, not function
>>> dir(*h)
Traceback (most recent call last):
diff --git a/Lib/test/test_fractions.py b/Lib/test/test_fractions.py
index 18ab28cfebe..c748533c791 100644
--- a/Lib/test/test_fractions.py
+++ b/Lib/test/test_fractions.py
@@ -6,13 +6,14 @@ import math
import numbers
import operator
import fractions
+import functools
import sys
import unittest
import warnings
from copy import copy, deepcopy
from pickle import dumps, loads
F = fractions.Fraction
-gcd = fractions.gcd
+
class DummyFloat(object):
"""Dummy float class for testing comparisons with Fractions"""
@@ -81,30 +82,6 @@ class DummyRational(object):
class DummyFraction(fractions.Fraction):
"""Dummy Fraction subclass for copy and deepcopy testing."""
-class GcdTest(unittest.TestCase):
-
- def testMisc(self):
- # fractions.gcd() is deprecated
- with self.assertWarnsRegex(DeprecationWarning, r'fractions\.gcd'):
- gcd(1, 1)
- with warnings.catch_warnings():
- warnings.filterwarnings('ignore', r'fractions\.gcd',
- DeprecationWarning)
- self.assertEqual(0, gcd(0, 0))
- self.assertEqual(1, gcd(1, 0))
- self.assertEqual(-1, gcd(-1, 0))
- self.assertEqual(1, gcd(0, 1))
- self.assertEqual(-1, gcd(0, -1))
- self.assertEqual(1, gcd(7, 1))
- self.assertEqual(-1, gcd(7, -1))
- self.assertEqual(1, gcd(-23, 15))
- self.assertEqual(12, gcd(120, 84))
- self.assertEqual(-12, gcd(84, -120))
- self.assertEqual(gcd(120.0, 84), 12.0)
- self.assertEqual(gcd(120, 84.0), 12.0)
- self.assertEqual(gcd(F(120), F(84)), F(12))
- self.assertEqual(gcd(F(120, 77), F(84, 55)), F(12, 385))
-
def _components(r):
return (r.numerator, r.denominator)
@@ -346,6 +323,42 @@ class FractionTest(unittest.TestCase):
self.assertTypedEquals(0.1+0j, complex(F(1,10)))
+ def testBoolGuarateesBoolReturn(self):
+ # Ensure that __bool__ is used on numerator which guarantees a bool
+ # return. See also bpo-39274.
+ @functools.total_ordering
+ class CustomValue:
+ denominator = 1
+
+ def __init__(self, value):
+ self.value = value
+
+ def __bool__(self):
+ return bool(self.value)
+
+ @property
+ def numerator(self):
+ # required to preserve `self` during instantiation
+ return self
+
+ def __eq__(self, other):
+ raise AssertionError("Avoid comparisons in Fraction.__bool__")
+
+ __lt__ = __eq__
+
+ # We did not implement all abstract methods, so register:
+ numbers.Rational.register(CustomValue)
+
+ numerator = CustomValue(1)
+ r = F(numerator)
+ # ensure the numerator was not lost during instantiation:
+ self.assertIs(r.numerator, numerator)
+ self.assertIs(bool(r), True)
+
+ numerator = CustomValue(0)
+ r = F(numerator)
+ self.assertIs(bool(r), False)
+
def testRound(self):
self.assertTypedEquals(F(-200), round(F(-150), -2))
self.assertTypedEquals(F(-200), round(F(-250), -2))
@@ -690,5 +703,28 @@ class FractionTest(unittest.TestCase):
r = F(13, 7)
self.assertRaises(AttributeError, setattr, r, 'a', 10)
+ def test_int_subclass(self):
+ class myint(int):
+ def __mul__(self, other):
+ return type(self)(int(self) * int(other))
+ def __floordiv__(self, other):
+ return type(self)(int(self) // int(other))
+ def __mod__(self, other):
+ x = type(self)(int(self) % int(other))
+ return x
+ @property
+ def numerator(self):
+ return type(self)(int(self))
+ @property
+ def denominator(self):
+ return type(self)(1)
+
+ f = fractions.Fraction(myint(1 * 3), myint(2 * 3))
+ self.assertEqual(f.numerator, 1)
+ self.assertEqual(f.denominator, 2)
+ self.assertEqual(type(f.numerator), myint)
+ self.assertEqual(type(f.denominator), myint)
+
+
if __name__ == '__main__':
unittest.main()
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index 62f673c0615..f40f3a4d9f7 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -1045,6 +1045,10 @@ class TestTimeouts(TestCase):
self.evt.wait()
ftp.close()
+ # bpo-39259
+ with self.assertRaises(ValueError):
+ ftplib.FTP(HOST, timeout=0)
+
def testTimeoutConnect(self):
ftp = ftplib.FTP()
ftp.connect(HOST, timeout=30)
diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py
index a97ca398e77..9503f4086b1 100644
--- a/Lib/test/test_functools.py
+++ b/Lib/test/test_functools.py
@@ -3,7 +3,7 @@ import builtins
import collections
import collections.abc
import copy
-from itertools import permutations
+from itertools import permutations, chain
import pickle
from random import choice
import sys
@@ -13,9 +13,12 @@ import time
import typing
import unittest
import unittest.mock
+import os
from weakref import proxy
import contextlib
+from test.support.script_helper import assert_python_ok
+
import functools
py_functools = support.import_fresh_module('functools', blocked=['_functools'])
@@ -1158,6 +1161,275 @@ class Orderable_LT:
return self.value == other.value
+class TestTopologicalSort(unittest.TestCase):
+
+ def _test_graph(self, graph, expected):
+
+ def static_order_with_groups(ts):
+ ts.prepare()
+ while ts.is_active():
+ nodes = ts.get_ready()
+ for node in nodes:
+ ts.done(node)
+ yield nodes
+
+ ts = functools.TopologicalSorter(graph)
+ self.assertEqual(list(static_order_with_groups(ts)), list(expected))
+
+ ts = functools.TopologicalSorter(graph)
+ self.assertEqual(list(ts.static_order()), list(chain(*expected)))
+
+ def _assert_cycle(self, graph, cycle):
+ ts = functools.TopologicalSorter()
+ for node, dependson in graph.items():
+ ts.add(node, *dependson)
+ try:
+ ts.prepare()
+ except functools.CycleError as e:
+ msg, seq = e.args
+ self.assertIn(' '.join(map(str, cycle)),
+ ' '.join(map(str, seq * 2)))
+ else:
+ raise
+
+ def test_simple_cases(self):
+ self._test_graph(
+ {2: {11},
+ 9: {11, 8},
+ 10: {11, 3},
+ 11: {7, 5},
+ 8: {7, 3}},
+ [(3, 5, 7), (11, 8), (2, 10, 9)]
+ )
+
+ self._test_graph({1: {}}, [(1,)])
+
+ self._test_graph({x: {x+1} for x in range(10)},
+ [(x,) for x in range(10, -1, -1)])
+
+ self._test_graph({2: {3}, 3: {4}, 4: {5}, 5: {1},
+ 11: {12}, 12: {13}, 13: {14}, 14: {15}},
+ [(1, 15), (5, 14), (4, 13), (3, 12), (2, 11)])
+
+ self._test_graph({
+ 0: [1, 2],
+ 1: [3],
+ 2: [5, 6],
+ 3: [4],
+ 4: [9],
+ 5: [3],
+ 6: [7],
+ 7: [8],
+ 8: [4],
+ 9: []
+ },
+ [(9,), (4,), (3, 8), (1, 5, 7), (6,), (2,), (0,)]
+ )
+
+ self._test_graph({
+ 0: [1, 2],
+ 1: [],
+ 2: [3],
+ 3: []
+ },
+ [(1, 3), (2,), (0,)]
+ )
+
+ self._test_graph({
+ 0: [1, 2],
+ 1: [],
+ 2: [3],
+ 3: [],
+ 4: [5],
+ 5: [6],
+ 6: []
+ },
+ [(1, 3, 6), (2, 5), (0, 4)]
+ )
+
+ def test_no_dependencies(self):
+ self._test_graph(
+ {1: {2},
+ 3: {4},
+ 5: {6}},
+ [(2, 4, 6), (1, 3, 5)]
+ )
+
+ self._test_graph(
+ {1: set(),
+ 3: set(),
+ 5: set()},
+ [(1, 3, 5)]
+ )
+
+ def test_the_node_multiple_times(self):
+ # Test same node multiple times in dependencies
+ self._test_graph({1: {2}, 3: {4}, 0: [2, 4, 4, 4, 4, 4]},
+ [(2, 4), (1, 3, 0)])
+
+ # Test adding the same dependency multiple times
+ ts = functools.TopologicalSorter()
+ ts.add(1, 2)
+ ts.add(1, 2)
+ ts.add(1, 2)
+ self.assertEqual([*ts.static_order()], [2, 1])
+
+ def test_graph_with_iterables(self):
+ dependson = (2*x + 1 for x in range(5))
+ ts = functools.TopologicalSorter({0: dependson})
+ self.assertEqual(list(ts.static_order()), [1, 3, 5, 7, 9, 0])
+
+ def test_add_dependencies_for_same_node_incrementally(self):
+ # Test same node multiple times
+ ts = functools.TopologicalSorter()
+ ts.add(1, 2)
+ ts.add(1, 3)
+ ts.add(1, 4)
+ ts.add(1, 5)
+
+ ts2 = functools.TopologicalSorter({1: {2, 3, 4, 5}})
+ self.assertEqual([*ts.static_order()], [*ts2.static_order()])
+
+ def test_empty(self):
+ self._test_graph({}, [])
+
+ def test_cycle(self):
+ # Self cycle
+ self._assert_cycle({1: {1}}, [1, 1])
+ # Simple cycle
+ self._assert_cycle({1: {2}, 2: {1}}, [1, 2, 1])
+ # Indirect cycle
+ self._assert_cycle({1: {2}, 2: {3}, 3: {1}}, [1, 3, 2, 1])
+ # not all elements involved in a cycle
+ self._assert_cycle({1: {2}, 2: {3}, 3: {1}, 5: {4}, 4: {6}}, [1, 3, 2, 1])
+ # Multiple cycles
+ self._assert_cycle({1: {2}, 2: {1}, 3: {4}, 4: {5}, 6: {7}, 7: {6}},
+ [1, 2, 1])
+ # Cycle in the middle of the graph
+ self._assert_cycle({1: {2}, 2: {3}, 3: {2, 4}, 4: {5}}, [3, 2])
+
+ def test_calls_before_prepare(self):
+ ts = functools.TopologicalSorter()
+
+ with self.assertRaisesRegex(ValueError, r"prepare\(\) must be called first"):
+ ts.get_ready()
+ with self.assertRaisesRegex(ValueError, r"prepare\(\) must be called first"):
+ ts.done(3)
+ with self.assertRaisesRegex(ValueError, r"prepare\(\) must be called first"):
+ ts.is_active()
+
+ def test_prepare_multiple_times(self):
+ ts = functools.TopologicalSorter()
+ ts.prepare()
+ with self.assertRaisesRegex(ValueError, r"cannot prepare\(\) more than once"):
+ ts.prepare()
+
+ def test_invalid_nodes_in_done(self):
+ ts = functools.TopologicalSorter()
+ ts.add(1, 2, 3, 4)
+ ts.add(2, 3, 4)
+ ts.prepare()
+ ts.get_ready()
+
+ with self.assertRaisesRegex(ValueError, "node 2 was not passed out"):
+ ts.done(2)
+ with self.assertRaisesRegex(ValueError, r"node 24 was not added using add\(\)"):
+ ts.done(24)
+
+ def test_done(self):
+ ts = functools.TopologicalSorter()
+ ts.add(1, 2, 3, 4)
+ ts.add(2, 3)
+ ts.prepare()
+
+ self.assertEqual(ts.get_ready(), (3, 4))
+ # If we don't mark anything as done, get_ready() returns nothing
+ self.assertEqual(ts.get_ready(), ())
+ ts.done(3)
+ # Now 2 becomes available as 3 is done
+ self.assertEqual(ts.get_ready(), (2,))
+ self.assertEqual(ts.get_ready(), ())
+ ts.done(4)
+ ts.done(2)
+ # Only 1 is missing
+ self.assertEqual(ts.get_ready(), (1,))
+ self.assertEqual(ts.get_ready(), ())
+ ts.done(1)
+ self.assertEqual(ts.get_ready(), ())
+ self.assertFalse(ts.is_active())
+
+ def test_is_active(self):
+ ts = functools.TopologicalSorter()
+ ts.add(1, 2)
+ ts.prepare()
+
+ self.assertTrue(ts.is_active())
+ self.assertEqual(ts.get_ready(), (2,))
+ self.assertTrue(ts.is_active())
+ ts.done(2)
+ self.assertTrue(ts.is_active())
+ self.assertEqual(ts.get_ready(), (1,))
+ self.assertTrue(ts.is_active())
+ ts.done(1)
+ self.assertFalse(ts.is_active())
+
+ def test_not_hashable_nodes(self):
+ ts = functools.TopologicalSorter()
+ self.assertRaises(TypeError, ts.add, dict(), 1)
+ self.assertRaises(TypeError, ts.add, 1, dict())
+ self.assertRaises(TypeError, ts.add, dict(), dict())
+
+ def test_order_of_insertion_does_not_matter_between_groups(self):
+ def get_groups(ts):
+ ts.prepare()
+ while ts.is_active():
+ nodes = ts.get_ready()
+ ts.done(*nodes)
+ yield set(nodes)
+
+ ts = functools.TopologicalSorter()
+ ts.add(3, 2, 1)
+ ts.add(1, 0)
+ ts.add(4, 5)
+ ts.add(6, 7)
+ ts.add(4, 7)
+
+ ts2 = functools.TopologicalSorter()
+ ts2.add(1, 0)
+ ts2.add(3, 2, 1)
+ ts2.add(4, 7)
+ ts2.add(6, 7)
+ ts2.add(4, 5)
+
+ self.assertEqual(list(get_groups(ts)), list(get_groups(ts2)))
+
+ def test_static_order_does_not_change_with_the_hash_seed(self):
+ def check_order_with_hash_seed(seed):
+ code = """if 1:
+ import functools
+ ts = functools.TopologicalSorter()
+ ts.add('blech', 'bluch', 'hola')
+ ts.add('abcd', 'blech', 'bluch', 'a', 'b')
+ ts.add('a', 'a string', 'something', 'b')
+ ts.add('bluch', 'hola', 'abcde', 'a', 'b')
+ print(list(ts.static_order()))
+ """
+ env = os.environ.copy()
+ # signal to assert_python not to do a copy
+ # of os.environ on its own
+ env['__cleanenv'] = True
+ env['PYTHONHASHSEED'] = str(seed)
+ out = assert_python_ok('-c', code, **env)
+ return out
+
+ run1 = check_order_with_hash_seed(1234)
+ run2 = check_order_with_hash_seed(31415)
+
+ self.assertNotEqual(run1, "")
+ self.assertNotEqual(run2, "")
+ self.assertEqual(run1, run2)
+
+
class TestLRU:
def test_lru(self):
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
index c0d4a7507ae..acb6391944b 100644
--- a/Lib/test/test_gc.py
+++ b/Lib/test/test_gc.py
@@ -2,7 +2,7 @@ import unittest
import unittest.mock
from test.support import (verbose, refcount_test, run_unittest,
cpython_only, start_threads,
- temp_dir, requires_type_collecting, TESTFN, unlink,
+ temp_dir, TESTFN, unlink,
import_module)
from test.support.script_helper import assert_python_ok, make_script
@@ -131,7 +131,6 @@ class GCTests(unittest.TestCase):
del a
self.assertNotEqual(gc.collect(), 0)
- @requires_type_collecting
def test_newinstance(self):
class A(object):
pass
@@ -586,6 +585,24 @@ class GCTests(unittest.TestCase):
self.assertFalse(gc.is_tracked(UserFloatSlots()))
self.assertFalse(gc.is_tracked(UserIntSlots()))
+ def test_is_finalized(self):
+ # Objects not tracked by the always gc return false
+ self.assertFalse(gc.is_finalized(3))
+
+ storage = []
+ class Lazarus:
+ def __del__(self):
+ storage.append(self)
+
+ lazarus = Lazarus()
+ self.assertFalse(gc.is_finalized(lazarus))
+
+ del lazarus
+ gc.collect()
+
+ lazarus = storage.pop()
+ self.assertTrue(gc.is_finalized(lazarus))
+
def test_bug1055820b(self):
# Corresponds to temp2b.py in the bug report.
@@ -691,7 +708,6 @@ class GCTests(unittest.TestCase):
stderr = run_command(code % "gc.DEBUG_SAVEALL")
self.assertNotIn(b"uncollectable objects at shutdown", stderr)
- @requires_type_collecting
def test_gc_main_module_at_shutdown(self):
# Create a reference cycle through the __main__ module and check
# it gets collected at interpreter shutdown.
@@ -705,7 +721,6 @@ class GCTests(unittest.TestCase):
rc, out, err = assert_python_ok('-c', code)
self.assertEqual(out.strip(), b'__del__ called')
- @requires_type_collecting
def test_gc_ordinary_module_at_shutdown(self):
# Same as above, but with a non-__main__ module.
with temp_dir() as script_dir:
@@ -725,7 +740,6 @@ class GCTests(unittest.TestCase):
rc, out, err = assert_python_ok('-c', code)
self.assertEqual(out.strip(), b'__del__ called')
- @requires_type_collecting
def test_global_del_SystemExit(self):
code = """if 1:
class ClassWithDel:
diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py
index fd712bb172d..86e4e195f55 100644
--- a/Lib/test/test_genexps.py
+++ b/Lib/test/test_genexps.py
@@ -15,6 +15,22 @@ Test nesting with the inner expression dependent on the outer
>>> list((i,j) for i in range(4) for j in range(i) )
[(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2)]
+Test the idiom for temporary variable assignment in comprehensions.
+
+ >>> list((j*j for i in range(4) for j in [i+1]))
+ [1, 4, 9, 16]
+ >>> list((j*k for i in range(4) for j in [i+1] for k in [j+1]))
+ [2, 6, 12, 20]
+ >>> list((j*k for i in range(4) for j, k in [(i+1, i+2)]))
+ [2, 6, 12, 20]
+
+Not assignment
+
+ >>> list((i*i for i in [*range(4)]))
+ [0, 1, 4, 9]
+ >>> list((i*i for i in (*range(4),)))
+ [0, 1, 4, 9]
+
Make sure the induction variable is not exposed
>>> i = 20
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 57d851cf9cf..78334213f24 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -358,6 +358,26 @@ class TestGzip(BaseTest):
isizeBytes = fRead.read(4)
self.assertEqual(isizeBytes, struct.pack('>> [(i,j) for i in range(4) for j in range(i)]
[(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2)]
+Test the idiom for temporary variable assignment in comprehensions.
+
+ >>> [j*j for i in range(4) for j in [i+1]]
+ [1, 4, 9, 16]
+ >>> [j*k for i in range(4) for j in [i+1] for k in [j+1]]
+ [2, 6, 12, 20]
+ >>> [j*k for i in range(4) for j, k in [(i+1, i+2)]]
+ [2, 6, 12, 20]
+
+Not assignment
+
+ >>> [i*i for i in [*range(4)]]
+ [0, 1, 4, 9]
+ >>> [i*i for i in (*range(4),)]
+ [0, 1, 4, 9]
+
Make sure the induction variable is not exposed
>>> i = 20
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
index c5d8e269d63..2863d200e25 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
@@ -334,8 +334,7 @@ class TestFrFRNumberFormatting(FrFRCookedTest, BaseFormattingTest):
euro = '\u20ac'
self._test_currency(50000, "50000,00 " + euro)
self._test_currency(50000, "50 000,00 " + euro, grouping=True)
- # XXX is the trailing space a bug?
- self._test_currency(50000, "50 000,00 EUR ",
+ self._test_currency(50000, "50 000,00 EUR",
grouping=True, international=True)
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 4feed03fec2..e223522cc7e 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -3379,6 +3379,37 @@ class ConfigDictTest(BaseTest):
self.assertRaises(ValueError, bc.convert, 'cfg://!')
self.assertRaises(KeyError, bc.convert, 'cfg://adict[2]')
+ def test_namedtuple(self):
+ # see bpo-39142
+ from collections import namedtuple
+
+ class MyHandler(logging.StreamHandler):
+ def __init__(self, resource, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.resource: namedtuple = resource
+
+ def emit(self, record):
+ record.msg += f' {self.resource.type}'
+ return super().emit(record)
+
+ Resource = namedtuple('Resource', ['type', 'labels'])
+ resource = Resource(type='my_type', labels=['a'])
+
+ config = {
+ 'version': 1,
+ 'handlers': {
+ 'myhandler': {
+ '()': MyHandler,
+ 'resource': resource
+ }
+ },
+ 'root': {'level': 'INFO', 'handlers': ['myhandler']},
+ }
+ with support.captured_stderr() as stderr:
+ self.apply_config(config)
+ logging.info('some log')
+ self.assertEqual(stderr.getvalue(), 'some log my_type\n')
+
class ManagerTest(BaseTest):
def test_manager_loggerclass(self):
logged = []
@@ -4221,7 +4252,6 @@ class ModuleLevelMiscTest(BaseTest):
h.close()
logging.setLoggerClass(logging.Logger)
- @support.requires_type_collecting
def test_logging_at_shutdown(self):
# Issue #20037
code = """if 1:
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py
index 5c35c8cff12..b3301f6a5cf 100644
--- a/Lib/test/test_math.py
+++ b/Lib/test/test_math.py
@@ -53,30 +53,6 @@ def to_ulps(x):
return n
-def ulp(x):
- """Return the value of the least significant bit of a
- float x, such that the first float bigger than x is x+ulp(x).
- Then, given an expected result x and a tolerance of n ulps,
- the result y should be such that abs(y-x) <= n * ulp(x).
- The results from this function will only make sense on platforms
- where native doubles are represented in IEEE 754 binary64 format.
- """
- x = abs(float(x))
- if math.isnan(x) or math.isinf(x):
- return x
-
- # Find next float up from x.
- n = struct.unpack('"
"\t\t7103\t16"
- "\tXref: news.gmane.org gmane.comp.python.authors:57"
+ "\tXref: news.gmane.io gmane.comp.python.authors:57"
"\n"
"58\tLooking for a few good bloggers"
"\tDoug Hellmann "
@@ -1125,7 +1129,7 @@ class NNTPv1v2TestsMixin:
"references": "",
":bytes": "7103",
":lines": "16",
- "xref": "news.gmane.org gmane.comp.python.authors:57"
+ "xref": "news.gmane.io gmane.comp.python.authors:57"
})
art_num, over = overviews[1]
self.assertEqual(over["xref"], None)
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index 82c441c2048..9e3a1695dfb 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -953,17 +953,40 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol):
value_str = value.decode(sys.getfilesystemencoding(), 'surrogateescape')
self.assertEqual(os.environ['bytes'], value_str)
+ def test_putenv_unsetenv(self):
+ name = "PYTHONTESTVAR"
+ value = "testvalue"
+ code = f'import os; print(repr(os.environ.get({name!r})))'
+
+ with support.EnvironmentVarGuard() as env:
+ env.pop(name, None)
+
+ os.putenv(name, value)
+ proc = subprocess.run([sys.executable, '-c', code], check=True,
+ stdout=subprocess.PIPE, text=True)
+ self.assertEqual(proc.stdout.rstrip(), repr(value))
+
+ os.unsetenv(name)
+ proc = subprocess.run([sys.executable, '-c', code], check=True,
+ stdout=subprocess.PIPE, text=True)
+ self.assertEqual(proc.stdout.rstrip(), repr(None))
+
# On OS X < 10.6, unsetenv() doesn't return a value (bpo-13415).
@support.requires_mac_ver(10, 6)
- def test_unset_error(self):
+ def test_putenv_unsetenv_error(self):
+ # Empty variable name is invalid.
+ # "=" and null character are not allowed in a variable name.
+ for name in ('', '=name', 'na=me', 'name=', 'name\0', 'na\0me'):
+ self.assertRaises((OSError, ValueError), os.putenv, name, "value")
+ self.assertRaises((OSError, ValueError), os.unsetenv, name)
+
if sys.platform == "win32":
- # an environment variable is limited to 32,767 characters
- key = 'x' * 50000
- self.assertRaises(ValueError, os.environ.__delitem__, key)
- else:
- # "=" is not allowed in a variable name
- key = 'key='
- self.assertRaises(OSError, os.environ.__delitem__, key)
+ # On Windows, an environment variable string ("name=value" string)
+ # is limited to 32,767 characters
+ longstr = 'x' * 32_768
+ self.assertRaises(ValueError, os.putenv, longstr, "1")
+ self.assertRaises(ValueError, os.putenv, "X", longstr)
+ self.assertRaises(ValueError, os.unsetenv, longstr)
def test_key_type(self):
missing = 'missingkey'
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index 3232649f554..a50dce01718 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -1383,8 +1383,16 @@ class _BasePathTest(object):
self.assertTrue(p.is_absolute())
def test_home(self):
- p = self.cls.home()
- self._test_home(p)
+ with support.EnvironmentVarGuard() as env:
+ self._test_home(self.cls.home())
+
+ env.clear()
+ env['USERPROFILE'] = os.path.join(BASE, 'userprofile')
+ self._test_home(self.cls.home())
+
+ # bpo-38883: ignore `HOME` when set on windows
+ env['HOME'] = os.path.join(BASE, 'home')
+ self._test_home(self.cls.home())
def test_samefile(self):
fileA_path = os.path.join(BASE, 'fileA')
@@ -2448,12 +2456,6 @@ class WindowsPathTest(_BasePathTest, unittest.TestCase):
self.assertEqual(p5.expanduser(), p5)
self.assertEqual(p6.expanduser(), p6)
- # Test the first lookup key in the env vars.
- env['HOME'] = 'C:\\Users\\alice'
- check()
-
- # Test that HOMEPATH is available instead.
- env.pop('HOME', None)
env['HOMEPATH'] = 'C:\\Users\\alice'
check()
@@ -2466,6 +2468,10 @@ class WindowsPathTest(_BasePathTest, unittest.TestCase):
env['USERPROFILE'] = 'C:\\Users\\alice'
check()
+ # bpo-38883: ignore `HOME` when set on windows
+ env['HOME'] = 'C:\\Users\\eve'
+ check()
+
class CompatiblePathTest(unittest.TestCase):
"""
diff --git a/Lib/test/test_peepholer.py b/Lib/test/test_peepholer.py
index 23cc36c6053..7913e91e453 100644
--- a/Lib/test/test_peepholer.py
+++ b/Lib/test/test_peepholer.py
@@ -65,14 +65,14 @@ class TestTranforms(BytecodeTestCase):
self.check_lnotab(unot)
def test_elim_inversion_of_is_or_in(self):
- for line, cmp_op in (
- ('not a is b', 'is not',),
- ('not a in b', 'not in',),
- ('not a is not b', 'is',),
- ('not a not in b', 'in',),
+ for line, cmp_op, invert in (
+ ('not a is b', 'IS_OP', 1,),
+ ('not a is not b', 'IS_OP', 0,),
+ ('not a in b', 'CONTAINS_OP', 1,),
+ ('not a not in b', 'CONTAINS_OP', 0,),
):
code = compile(line, '', 'single')
- self.assertInBytecode(code, 'COMPARE_OP', cmp_op)
+ self.assertInBytecode(code, cmp_op, invert)
self.check_lnotab(code)
def test_global_as_constant(self):
@@ -495,6 +495,20 @@ class TestTranforms(BytecodeTestCase):
return 6
self.check_lnotab(f)
+ def test_assignment_idiom_in_comprehensions(self):
+ def listcomp():
+ return [y for x in a for y in [f(x)]]
+ self.assertEqual(count_instr_recursively(listcomp, 'FOR_ITER'), 1)
+ def setcomp():
+ return {y for x in a for y in [f(x)]}
+ self.assertEqual(count_instr_recursively(setcomp, 'FOR_ITER'), 1)
+ def dictcomp():
+ return {y: y for x in a for y in [f(x)]}
+ self.assertEqual(count_instr_recursively(dictcomp, 'FOR_ITER'), 1)
+ def genexpr():
+ return (y for x in a for y in [f(x)])
+ self.assertEqual(count_instr_recursively(genexpr, 'FOR_ITER'), 1)
+
class TestBuglets(unittest.TestCase):
diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py
index 2887ce6cc05..906150b1049 100644
--- a/Lib/test/test_pkgutil.py
+++ b/Lib/test/test_pkgutil.py
@@ -186,6 +186,61 @@ class PkgutilTests(unittest.TestCase):
with self.assertRaises((TypeError, ValueError)):
list(pkgutil.walk_packages(bytes_input))
+ def test_name_resolution(self):
+ import logging
+ import logging.handlers
+
+ success_cases = (
+ ('os', os),
+ ('os.path', os.path),
+ ('os.path:pathsep', os.path.pathsep),
+ ('logging', logging),
+ ('logging:', logging),
+ ('logging.handlers', logging.handlers),
+ ('logging.handlers:', logging.handlers),
+ ('logging.handlers:SysLogHandler', logging.handlers.SysLogHandler),
+ ('logging.handlers.SysLogHandler', logging.handlers.SysLogHandler),
+ ('logging.handlers:SysLogHandler.LOG_ALERT',
+ logging.handlers.SysLogHandler.LOG_ALERT),
+ ('logging.handlers.SysLogHandler.LOG_ALERT',
+ logging.handlers.SysLogHandler.LOG_ALERT),
+ ('builtins.int', int),
+ ('builtins:int', int),
+ ('builtins.int.from_bytes', int.from_bytes),
+ ('builtins:int.from_bytes', int.from_bytes),
+ ('builtins.ZeroDivisionError', ZeroDivisionError),
+ ('builtins:ZeroDivisionError', ZeroDivisionError),
+ ('os:path', os.path),
+ )
+
+ failure_cases = (
+ (None, TypeError),
+ (1, TypeError),
+ (2.0, TypeError),
+ (True, TypeError),
+ ('', ValueError),
+ ('?abc', ValueError),
+ ('abc/foo', ValueError),
+ ('foo', ImportError),
+ ('os.foo', AttributeError),
+ ('os.foo:', ImportError),
+ ('os.pth:pathsep', ImportError),
+ ('logging.handlers:NoSuchHandler', AttributeError),
+ ('logging.handlers:SysLogHandler.NO_SUCH_VALUE', AttributeError),
+ ('logging.handlers.SysLogHandler.NO_SUCH_VALUE', AttributeError),
+ ('ZeroDivisionError', ImportError),
+ )
+
+ for s, expected in success_cases:
+ with self.subTest(s=s):
+ o = pkgutil.resolve_name(s)
+ self.assertEqual(o, expected)
+
+ for s, exc in failure_cases:
+ with self.subTest(s=s):
+ with self.assertRaises(exc):
+ pkgutil.resolve_name(s)
+
class PkgutilPEP302Tests(unittest.TestCase):
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index 911cba1f1dc..7f06d1950e1 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -481,7 +481,7 @@ class TestTimeouts(TestCase):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.settimeout(60) # Safety net. Look issue 11812
self.port = test_support.bind_port(self.sock)
- self.thread = threading.Thread(target=self.server, args=(self.evt,self.sock))
+ self.thread = threading.Thread(target=self.server, args=(self.evt, self.sock))
self.thread.daemon = True
self.thread.start()
self.evt.wait()
@@ -505,12 +505,12 @@ class TestTimeouts(TestCase):
def testTimeoutDefault(self):
self.assertIsNone(socket.getdefaulttimeout())
- socket.setdefaulttimeout(30)
+ socket.setdefaulttimeout(test_support.LOOPBACK_TIMEOUT)
try:
pop = poplib.POP3(HOST, self.port)
finally:
socket.setdefaulttimeout(None)
- self.assertEqual(pop.sock.gettimeout(), 30)
+ self.assertEqual(pop.sock.gettimeout(), test_support.LOOPBACK_TIMEOUT)
pop.close()
def testTimeoutNone(self):
@@ -524,9 +524,11 @@ class TestTimeouts(TestCase):
pop.close()
def testTimeoutValue(self):
- pop = poplib.POP3(HOST, self.port, timeout=30)
- self.assertEqual(pop.sock.gettimeout(), 30)
+ pop = poplib.POP3(HOST, self.port, timeout=test_support.LOOPBACK_TIMEOUT)
+ self.assertEqual(pop.sock.gettimeout(), test_support.LOOPBACK_TIMEOUT)
pop.close()
+ with self.assertRaises(ValueError):
+ poplib.POP3(HOST, self.port, timeout=0)
def test_main():
diff --git a/Lib/test/test_positional_only_arg.py b/Lib/test/test_positional_only_arg.py
index 59b0b8fb556..0a9503e2025 100644
--- a/Lib/test/test_positional_only_arg.py
+++ b/Lib/test/test_positional_only_arg.py
@@ -1,5 +1,6 @@
"""Unit tests for the positional only argument syntax specified in PEP 570."""
+import dis
import pickle
import unittest
@@ -15,7 +16,6 @@ def global_pos_only_and_normal(a, /, b):
def global_pos_only_defaults(a=1, /, b=2):
return a, b
-
class PositionalOnlyTestCase(unittest.TestCase):
def assertRaisesSyntaxError(self, codestr, regex="invalid syntax"):
@@ -261,12 +261,6 @@ class PositionalOnlyTestCase(unittest.TestCase):
with self.assertRaisesRegex(TypeError, expected):
Example().f(1, b=2)
- def test_mangling(self):
- class X:
- def f(self, *, __a=42):
- return __a
- self.assertEqual(X().f(), 42)
-
def test_module_function(self):
with self.assertRaisesRegex(TypeError, r"f\(\) missing 2 required positional arguments: 'a' and 'b'"):
global_pos_only_f()
@@ -302,6 +296,29 @@ class PositionalOnlyTestCase(unittest.TestCase):
with self.assertRaisesRegex(TypeError, r"g\(\) takes 2 positional arguments but 3 were given"):
f(1,2)(3,4,5)
+ def test_annotations_in_closures(self):
+
+ def inner_has_pos_only():
+ def f(x: int, /): ...
+ return f
+
+ assert inner_has_pos_only().__annotations__ == {'x': int}
+
+ class Something:
+ def method(self):
+ def f(x: int, /): ...
+ return f
+
+ assert Something().method().__annotations__ == {'x': int}
+
+ def multiple_levels():
+ def inner_has_pos_only():
+ def f(x: int, /): ...
+ return f
+ return inner_has_pos_only()
+
+ assert multiple_levels().__annotations__ == {'x': int}
+
def test_same_keyword_as_positional_with_kwargs(self):
def f(something,/,**kwargs):
return (something, kwargs)
@@ -412,6 +429,17 @@ class PositionalOnlyTestCase(unittest.TestCase):
self.assertEqual(C().method(), sentinel)
+ def test_annotations_constant_fold(self):
+ def g():
+ def f(x: not (int is int), /): ...
+
+ # without constant folding we end up with
+ # COMPARE_OP(is), IS_OP (0)
+ # with constant folding we should expect a IS_OP (1)
+ codes = [(i.opname, i.argval) for i in dis.get_instructions(g)]
+ self.assertNotIn(('UNARY_NOT', None), codes)
+ self.assertIn(('IS_OP', 1), codes)
+
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index 4df882b6210..fad26d88be2 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -969,7 +969,6 @@ class PosixTester(unittest.TestCase):
self.assertEqual(type(k), item_type)
self.assertEqual(type(v), item_type)
- @unittest.skipUnless(hasattr(os, "putenv"), "requires os.putenv()")
def test_putenv(self):
with self.assertRaises(ValueError):
os.putenv('FRUIT\0VEGETABLE', 'cabbage')
diff --git a/Lib/test/test_pstats.py b/Lib/test/test_pstats.py
index f835ce309a6..f3a6e586c3b 100644
--- a/Lib/test/test_pstats.py
+++ b/Lib/test/test_pstats.py
@@ -1,10 +1,12 @@
import unittest
+
from test import support
from io import StringIO
-import pstats
from pstats import SortKey
-
+import pstats
+import time
+import cProfile
class AddCallersTestCase(unittest.TestCase):
"""Tests for pstats.add_callers helper."""
@@ -75,6 +77,24 @@ class StatsTestCase(unittest.TestCase):
SortKey.TIME,
'calls')
+ def test_get_stats_profile(self):
+ def pass1(): pass
+ def pass2(): pass
+ def pass3(): pass
+
+ pr = cProfile.Profile()
+ pr.enable()
+ pass1()
+ pass2()
+ pass3()
+ pr.create_stats()
+ ps = pstats.Stats(pr)
+
+ stats_profile = ps.get_stats_profile()
+ funcs_called = set(stats_profile.func_profiles.keys())
+ self.assertIn('pass1', funcs_called)
+ self.assertIn('pass2', funcs_called)
+ self.assertIn('pass3', funcs_called)
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/test/test_range.py b/Lib/test/test_range.py
index 73cbcc4717d..30fa129b50e 100644
--- a/Lib/test/test_range.py
+++ b/Lib/test/test_range.py
@@ -91,6 +91,19 @@ class RangeTest(unittest.TestCase):
r = range(-sys.maxsize, sys.maxsize, 2)
self.assertEqual(len(r), sys.maxsize)
+ def test_range_constructor_error_messages(self):
+ with self.assertRaisesRegex(
+ TypeError,
+ "range expected at least 1 argument, got 0"
+ ):
+ range()
+
+ with self.assertRaisesRegex(
+ TypeError,
+ "range expected at most 3 arguments, got 6"
+ ):
+ range(1, 2, 3, 4, 5, 6)
+
def test_large_operands(self):
x = range(10**20, 10**20+10, 3)
self.assertEqual(len(x), 4)
diff --git a/Lib/test/test_repl.py b/Lib/test/test_repl.py
index 9efd459a6f0..71f192f90d9 100644
--- a/Lib/test/test_repl.py
+++ b/Lib/test/test_repl.py
@@ -58,5 +58,41 @@ class TestInteractiveInterpreter(unittest.TestCase):
# Exit code 120: Py_FinalizeEx() failed to flush stdout and stderr.
self.assertIn(p.returncode, (1, 120))
+ @cpython_only
+ def test_multiline_string_parsing(self):
+ # bpo-39209: Multiline string tokens need to be handled in the tokenizer
+ # in two places: the interactive path and the non-interactive path.
+ user_input = '''\
+ x = """
+
+
+
+
+ 0KiB
+ 0
+ 1.3
+ 0
+
+
+ 16738211KiB
+ 237.15
+ 1.3
+ 0
+
+ never
+ none
+
+
+ """
+ '''
+ user_input = dedent(user_input)
+ user_input = user_input.encode()
+ p = spawn_repl()
+ with SuppressCrashReport():
+ p.stdin.write(user_input)
+ output = kill_python(p)
+ self.assertEqual(p.returncode, 0)
+
+
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/test/test_setcomps.py b/Lib/test/test_setcomps.py
index fb7cde03d78..ecc4fffec0d 100644
--- a/Lib/test/test_setcomps.py
+++ b/Lib/test/test_setcomps.py
@@ -21,6 +21,22 @@ Test nesting with the inner expression dependent on the outer
>>> list(sorted({(i,j) for i in range(4) for j in range(i)}))
[(1, 0), (2, 0), (2, 1), (3, 0), (3, 1), (3, 2)]
+Test the idiom for temporary variable assignment in comprehensions.
+
+ >>> sorted({j*j for i in range(4) for j in [i+1]})
+ [1, 4, 9, 16]
+ >>> sorted({j*k for i in range(4) for j in [i+1] for k in [j+1]})
+ [2, 6, 12, 20]
+ >>> sorted({j*k for i in range(4) for j, k in [(i+1, i+2)]})
+ [2, 6, 12, 20]
+
+Not assignment
+
+ >>> sorted({i*i for i in [*range(4)]})
+ [0, 1, 4, 9]
+ >>> sorted({i*i for i in (*range(4),)})
+ [0, 1, 4, 9]
+
Make sure the induction variable is not exposed
>>> i = 20
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 460b979ba93..076c450e09b 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -579,6 +579,48 @@ class TestCopyTree(BaseTest, unittest.TestCase):
shutil.rmtree(src_dir)
shutil.rmtree(os.path.dirname(dst_dir))
+ def test_copytree_arg_types_of_ignore(self):
+ join = os.path.join
+ exists = os.path.exists
+
+ tmp_dir = self.mkdtemp()
+ src_dir = join(tmp_dir, "source")
+
+ os.mkdir(join(src_dir))
+ os.mkdir(join(src_dir, 'test_dir'))
+ os.mkdir(os.path.join(src_dir, 'test_dir', 'subdir'))
+ write_file((src_dir, 'test_dir', 'subdir', 'test.txt'), '456')
+
+ invokations = []
+
+ def _ignore(src, names):
+ invokations.append(src)
+ self.assertIsInstance(src, str)
+ self.assertIsInstance(names, list)
+ self.assertEqual(len(names), len(set(names)))
+ for name in names:
+ self.assertIsInstance(name, str)
+ return []
+
+ dst_dir = join(self.mkdtemp(), 'destination')
+ shutil.copytree(src_dir, dst_dir, ignore=_ignore)
+ self.assertTrue(exists(join(dst_dir, 'test_dir', 'subdir',
+ 'test.txt')))
+
+ dst_dir = join(self.mkdtemp(), 'destination')
+ shutil.copytree(pathlib.Path(src_dir), dst_dir, ignore=_ignore)
+ self.assertTrue(exists(join(dst_dir, 'test_dir', 'subdir',
+ 'test.txt')))
+
+ dst_dir = join(self.mkdtemp(), 'destination')
+ src_dir_entry = list(os.scandir(tmp_dir))[0]
+ self.assertIsInstance(src_dir_entry, os.DirEntry)
+ shutil.copytree(src_dir_entry, dst_dir, ignore=_ignore)
+ self.assertTrue(exists(join(dst_dir, 'test_dir', 'subdir',
+ 'test.txt')))
+
+ self.assertEqual(len(invokations), 9)
+
def test_copytree_retains_permissions(self):
tmp_dir = self.mkdtemp()
src_dir = os.path.join(tmp_dir, 'source')
diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py
index 5c02c28a90e..45553a6a42d 100644
--- a/Lib/test/test_signal.py
+++ b/Lib/test/test_signal.py
@@ -1284,10 +1284,12 @@ class PidfdSignalTest(unittest.TestCase):
signal.pidfd_send_signal(0, signal.SIGINT)
if cm.exception.errno == errno.ENOSYS:
self.skipTest("kernel does not support pidfds")
+ elif cm.exception.errno == errno.EPERM:
+ self.skipTest("Not enough privileges to use pidfs")
self.assertEqual(cm.exception.errno, errno.EBADF)
my_pidfd = os.open(f'/proc/{os.getpid()}', os.O_DIRECTORY)
self.addCleanup(os.close, my_pidfd)
- with self.assertRaisesRegexp(TypeError, "^siginfo must be None$"):
+ with self.assertRaisesRegex(TypeError, "^siginfo must be None$"):
signal.pidfd_send_signal(my_pidfd, signal.SIGINT, object(), 0)
with self.assertRaises(KeyboardInterrupt):
signal.pidfd_send_signal(my_pidfd, signal.SIGINT)
diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py
index faf013ac9a6..067c01c10c1 100644
--- a/Lib/test/test_smtplib.py
+++ b/Lib/test/test_smtplib.py
@@ -56,7 +56,7 @@ def server(evt, buf, serv):
serv.close()
evt.set()
-class GeneralTests(unittest.TestCase):
+class GeneralTests:
def setUp(self):
smtplib.socket = mock_socket
@@ -75,29 +75,29 @@ class GeneralTests(unittest.TestCase):
def testBasic1(self):
mock_socket.reply_with(b"220 Hola mundo")
# connects
- smtp = smtplib.SMTP(HOST, self.port)
- smtp.close()
+ client = self.client(HOST, self.port)
+ client.close()
def testSourceAddress(self):
mock_socket.reply_with(b"220 Hola mundo")
# connects
- smtp = smtplib.SMTP(HOST, self.port,
- source_address=('127.0.0.1',19876))
- self.assertEqual(smtp.source_address, ('127.0.0.1', 19876))
- smtp.close()
+ client = self.client(HOST, self.port,
+ source_address=('127.0.0.1',19876))
+ self.assertEqual(client.source_address, ('127.0.0.1', 19876))
+ client.close()
def testBasic2(self):
mock_socket.reply_with(b"220 Hola mundo")
# connects, include port in host name
- smtp = smtplib.SMTP("%s:%s" % (HOST, self.port))
- smtp.close()
+ client = self.client("%s:%s" % (HOST, self.port))
+ client.close()
def testLocalHostName(self):
mock_socket.reply_with(b"220 Hola mundo")
# check that supplied local_hostname is used
- smtp = smtplib.SMTP(HOST, self.port, local_hostname="testhost")
- self.assertEqual(smtp.local_hostname, "testhost")
- smtp.close()
+ client = self.client(HOST, self.port, local_hostname="testhost")
+ self.assertEqual(client.local_hostname, "testhost")
+ client.close()
def testTimeoutDefault(self):
mock_socket.reply_with(b"220 Hola mundo")
@@ -105,51 +105,71 @@ class GeneralTests(unittest.TestCase):
mock_socket.setdefaulttimeout(30)
self.assertEqual(mock_socket.getdefaulttimeout(), 30)
try:
- smtp = smtplib.SMTP(HOST, self.port)
+ client = self.client(HOST, self.port)
finally:
mock_socket.setdefaulttimeout(None)
- self.assertEqual(smtp.sock.gettimeout(), 30)
- smtp.close()
+ self.assertEqual(client.sock.gettimeout(), 30)
+ client.close()
def testTimeoutNone(self):
mock_socket.reply_with(b"220 Hola mundo")
self.assertIsNone(socket.getdefaulttimeout())
socket.setdefaulttimeout(30)
try:
- smtp = smtplib.SMTP(HOST, self.port, timeout=None)
+ client = self.client(HOST, self.port, timeout=None)
finally:
socket.setdefaulttimeout(None)
- self.assertIsNone(smtp.sock.gettimeout())
- smtp.close()
+ self.assertIsNone(client.sock.gettimeout())
+ client.close()
+
+ def testTimeoutZero(self):
+ mock_socket.reply_with(b"220 Hola mundo")
+ with self.assertRaises(ValueError):
+ self.client(HOST, self.port, timeout=0)
def testTimeoutValue(self):
mock_socket.reply_with(b"220 Hola mundo")
- smtp = smtplib.SMTP(HOST, self.port, timeout=30)
- self.assertEqual(smtp.sock.gettimeout(), 30)
- smtp.close()
+ client = self.client(HOST, self.port, timeout=30)
+ self.assertEqual(client.sock.gettimeout(), 30)
+ client.close()
def test_debuglevel(self):
mock_socket.reply_with(b"220 Hello world")
- smtp = smtplib.SMTP()
- smtp.set_debuglevel(1)
+ client = self.client()
+ client.set_debuglevel(1)
with support.captured_stderr() as stderr:
- smtp.connect(HOST, self.port)
- smtp.close()
+ client.connect(HOST, self.port)
+ client.close()
expected = re.compile(r"^connect:", re.MULTILINE)
self.assertRegex(stderr.getvalue(), expected)
def test_debuglevel_2(self):
mock_socket.reply_with(b"220 Hello world")
- smtp = smtplib.SMTP()
- smtp.set_debuglevel(2)
+ client = self.client()
+ client.set_debuglevel(2)
with support.captured_stderr() as stderr:
- smtp.connect(HOST, self.port)
- smtp.close()
+ client.connect(HOST, self.port)
+ client.close()
expected = re.compile(r"^\d{2}:\d{2}:\d{2}\.\d{6} connect: ",
re.MULTILINE)
self.assertRegex(stderr.getvalue(), expected)
+class SMTPGeneralTests(GeneralTests, unittest.TestCase):
+
+ client = smtplib.SMTP
+
+
+class LMTPGeneralTests(GeneralTests, unittest.TestCase):
+
+ client = smtplib.LMTP
+
+ def testTimeoutZero(self):
+ super().testTimeoutZero()
+ local_host = '/some/local/lmtp/delivery/program'
+ with self.assertRaises(ValueError):
+ self.client(local_host, timeout=0)
+
# Test server thread using the specified SMTP server class
def debugging_server(serv, serv_evt, client_evt):
serv_evt.set()
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index 157efa1347a..4829fbe1b97 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -7,6 +7,7 @@ import struct
import sys
from test import support
+from test.support.script_helper import assert_python_ok
ISBIGENDIAN = sys.byteorder == "big"
@@ -652,6 +653,23 @@ class StructTest(unittest.TestCase):
s2 = struct.Struct(s.format.encode())
self.assertEqual(s2.format, s.format)
+ def test_struct_cleans_up_at_runtime_shutdown(self):
+ code = """if 1:
+ import struct
+
+ class C:
+ def __init__(self):
+ self.pack = struct.pack
+ def __del__(self):
+ self.pack('I', -42)
+
+ struct.x = C()
+ """
+ rc, stdout, stderr = assert_python_ok("-c", code)
+ self.assertEqual(rc, 0)
+ self.assertEqual(stdout.rstrip(), b"")
+ self.assertIn(b"Exception ignored in:", stderr)
+ self.assertIn(b"C.__del__", stderr)
class UnpackIteratorTest(unittest.TestCase):
"""
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 87322c6406b..2bbdbaef84e 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -1435,6 +1435,9 @@ class ProcessTestCase(BaseTestCase):
subprocess.Popen(['exit', '0'], cwd='/some/nonexistent/directory')
self.assertEqual(c.exception.filename, '/some/nonexistent/directory')
+ def test_class_getitems(self):
+ self.assertIs(subprocess.Popen[bytes], subprocess.Popen)
+ self.assertIs(subprocess.CompletedProcess[str], subprocess.CompletedProcess)
class RunFuncTestCase(BaseTestCase):
def run_python(self, code, **kwargs):
@@ -3117,6 +3120,42 @@ class POSIXProcessTestCase(BaseTestCase):
self.assertEqual(returncode, -3)
+ def test_send_signal_race(self):
+ # bpo-38630: send_signal() must poll the process exit status to reduce
+ # the risk of sending the signal to the wrong process.
+ proc = subprocess.Popen(ZERO_RETURN_CMD)
+
+ # wait until the process completes without using the Popen APIs.
+ pid, status = os.waitpid(proc.pid, 0)
+ self.assertEqual(pid, proc.pid)
+ self.assertTrue(os.WIFEXITED(status), status)
+ self.assertEqual(os.WEXITSTATUS(status), 0)
+
+ # returncode is still None but the process completed.
+ self.assertIsNone(proc.returncode)
+
+ with mock.patch("os.kill") as mock_kill:
+ proc.send_signal(signal.SIGTERM)
+
+ # send_signal() didn't call os.kill() since the process already
+ # completed.
+ mock_kill.assert_not_called()
+
+ # Don't check the returncode value: the test reads the exit status,
+ # so Popen failed to read it and uses a default returncode instead.
+ self.assertIsNotNone(proc.returncode)
+
+ def test_communicate_repeated_call_after_stdout_close(self):
+ proc = subprocess.Popen([sys.executable, '-c',
+ 'import os, time; os.close(1), time.sleep(2)'],
+ stdout=subprocess.PIPE)
+ while True:
+ try:
+ proc.communicate(timeout=0.1)
+ return
+ except subprocess.TimeoutExpired:
+ pass
+
@unittest.skipUnless(mswindows, "Windows specific tests")
class Win32ProcessTestCase(BaseTestCase):
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 2f347bd540f..175f7c845fe 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -493,7 +493,6 @@ class TestSupport(unittest.TestCase):
['-Wignore', '-X', 'dev'],
['-X', 'faulthandler'],
['-X', 'importtime'],
- ['-X', 'showalloccount'],
['-X', 'showrefcount'],
['-X', 'tracemalloc'],
['-X', 'tracemalloc=3'],
diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py
index 3829746f179..128c4da1438 100644
--- a/Lib/test/test_syntax.py
+++ b/Lib/test/test_syntax.py
@@ -45,7 +45,7 @@ SyntaxError: cannot assign to True
>>> (True := 1)
Traceback (most recent call last):
-SyntaxError: cannot use named assignment with True
+SyntaxError: cannot use assignment expressions with True
>>> obj.__debug__ = 1
Traceback (most recent call last):
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 947c935f347..c5bd8a4b1ff 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -819,7 +819,6 @@ class SysModuleTest(unittest.TestCase):
c = sys.getallocatedblocks()
self.assertIn(c, range(b - 50, b + 50))
- @test.support.requires_type_collecting
def test_is_finalizing(self):
self.assertIs(sys.is_finalizing(), False)
# Don't use the atexit module because _Py_Finalizing is only set
@@ -841,7 +840,6 @@ class SysModuleTest(unittest.TestCase):
rc, stdout, stderr = assert_python_ok('-c', code)
self.assertEqual(stdout.rstrip(), b'True')
- @test.support.requires_type_collecting
def test_issue20602(self):
# sys.flags and sys.float_info were wiped during shutdown.
code = """if 1:
@@ -857,6 +855,23 @@ class SysModuleTest(unittest.TestCase):
self.assertIn(b'sys.flags', out[0])
self.assertIn(b'sys.float_info', out[1])
+ def test_sys_ignores_cleaning_up_user_data(self):
+ code = """if 1:
+ import struct, sys
+
+ class C:
+ def __init__(self):
+ self.pack = struct.pack
+ def __del__(self):
+ self.pack('I', -42)
+
+ sys.x = C()
+ """
+ rc, stdout, stderr = assert_python_ok('-c', code)
+ self.assertEqual(rc, 0)
+ self.assertEqual(stdout.rstrip(), b"")
+ self.assertEqual(stderr.rstrip(), b"")
+
@unittest.skipUnless(hasattr(sys, 'getandroidapilevel'),
'need sys.getandroidapilevel()')
def test_getandroidapilevel(self):
@@ -1295,8 +1310,6 @@ class SizeofTest(unittest.TestCase):
# type
# static type: PyTypeObject
fmt = 'P2nPI13Pl4Pn9Pn11PIPP'
- if hasattr(sys, 'getcounts'):
- fmt += '3n2P'
s = vsize(fmt)
check(int, s)
# class
diff --git a/Lib/test/test_sys_settrace.py b/Lib/test/test_sys_settrace.py
index 0af015aa56b..bead57c44b4 100644
--- a/Lib/test/test_sys_settrace.py
+++ b/Lib/test/test_sys_settrace.py
@@ -481,6 +481,127 @@ class TraceTestCase(unittest.TestCase):
[(0, 'call'),
(1, 'line')])
+ def test_18_except_with_name(self):
+ def func():
+ try:
+ try:
+ raise Exception
+ except Exception as e:
+ raise
+ x = "Something"
+ y = "Something"
+ except Exception:
+ pass
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (3, 'line'),
+ (3, 'exception'),
+ (4, 'line'),
+ (5, 'line'),
+ (8, 'line'),
+ (9, 'line'),
+ (9, 'return')])
+
+ def test_19_except_with_finally(self):
+ def func():
+ try:
+ try:
+ raise Exception
+ finally:
+ y = "Something"
+ except Exception:
+ b = 23
+
+ self.run_and_compare(func,
+ [(0, 'call'),
+ (1, 'line'),
+ (2, 'line'),
+ (3, 'line'),
+ (3, 'exception'),
+ (5, 'line'),
+ (6, 'line'),
+ (7, 'line'),
+ (7, 'return')])
+
+ def test_20_async_for_loop(self):
+ class AsyncIteratorWrapper:
+ def __init__(self, obj):
+ self._it = iter(obj)
+
+ def __aiter__(self):
+ return self
+
+ async def __anext__(self):
+ try:
+ return next(self._it)
+ except StopIteration:
+ raise StopAsyncIteration
+
+ async def doit_async():
+ async for letter in AsyncIteratorWrapper("abc"):
+ x = letter
+ y = 42
+
+ def run(tracer):
+ x = doit_async()
+ try:
+ sys.settrace(tracer)
+ x.send(None)
+ finally:
+ sys.settrace(None)
+
+ tracer = self.make_tracer()
+ events = [
+ (0, 'call'),
+ (1, 'line'),
+ (-12, 'call'),
+ (-11, 'line'),
+ (-11, 'return'),
+ (-9, 'call'),
+ (-8, 'line'),
+ (-8, 'return'),
+ (-6, 'call'),
+ (-5, 'line'),
+ (-4, 'line'),
+ (-4, 'return'),
+ (1, 'exception'),
+ (2, 'line'),
+ (1, 'line'),
+ (-6, 'call'),
+ (-5, 'line'),
+ (-4, 'line'),
+ (-4, 'return'),
+ (1, 'exception'),
+ (2, 'line'),
+ (1, 'line'),
+ (-6, 'call'),
+ (-5, 'line'),
+ (-4, 'line'),
+ (-4, 'return'),
+ (1, 'exception'),
+ (2, 'line'),
+ (1, 'line'),
+ (-6, 'call'),
+ (-5, 'line'),
+ (-4, 'line'),
+ (-4, 'exception'),
+ (-3, 'line'),
+ (-2, 'line'),
+ (-2, 'exception'),
+ (-2, 'return'),
+ (1, 'exception'),
+ (3, 'line'),
+ (3, 'return')]
+ try:
+ run(tracer.trace)
+ except Exception:
+ pass
+ self.compare_events(doit_async.__code__.co_firstlineno,
+ tracer.events, events)
+
class SkipLineEventsTraceTestCase(TraceTestCase):
"""Repeat the trace tests, but with per-line events skipped"""
diff --git a/Lib/test/test_tarfile.py b/Lib/test/test_tarfile.py
index 15324a4e488..cae96802ded 100644
--- a/Lib/test/test_tarfile.py
+++ b/Lib/test/test_tarfile.py
@@ -319,6 +319,38 @@ class LzmaListTest(LzmaTest, ListTest):
class CommonReadTest(ReadTest):
+ def test_is_tarfile_erroneous(self):
+ with open(tmpname, "wb"):
+ pass
+
+ # is_tarfile works on filenames
+ self.assertFalse(tarfile.is_tarfile(tmpname))
+
+ # is_tarfile works on path-like objects
+ self.assertFalse(tarfile.is_tarfile(pathlib.Path(tmpname)))
+
+ # is_tarfile works on file objects
+ with open(tmpname, "rb") as fobj:
+ self.assertFalse(tarfile.is_tarfile(fobj))
+
+ # is_tarfile works on file-like objects
+ self.assertFalse(tarfile.is_tarfile(io.BytesIO(b"invalid")))
+
+ def test_is_tarfile_valid(self):
+ # is_tarfile works on filenames
+ self.assertTrue(tarfile.is_tarfile(self.tarname))
+
+ # is_tarfile works on path-like objects
+ self.assertTrue(tarfile.is_tarfile(pathlib.Path(self.tarname)))
+
+ # is_tarfile works on file objects
+ with open(self.tarname, "rb") as fobj:
+ self.assertTrue(tarfile.is_tarfile(fobj))
+
+ # is_tarfile works on file-like objects
+ with open(self.tarname, "rb") as fobj:
+ self.assertTrue(tarfile.is_tarfile(io.BytesIO(fobj.read())))
+
def test_empty_tarfile(self):
# Test for issue6123: Allow opening empty archives.
# This test checks if tarfile.open() is able to open an empty tar
@@ -1517,6 +1549,52 @@ class GNUWriteTest(unittest.TestCase):
("longlnk/" * 127) + "longlink_")
+class DeviceHeaderTest(WriteTestBase, unittest.TestCase):
+
+ prefix = "w:"
+
+ def test_headers_written_only_for_device_files(self):
+ # Regression test for bpo-18819.
+ tempdir = os.path.join(TEMPDIR, "device_header_test")
+ os.mkdir(tempdir)
+ try:
+ tar = tarfile.open(tmpname, self.mode)
+ try:
+ input_blk = tarfile.TarInfo(name="my_block_device")
+ input_reg = tarfile.TarInfo(name="my_regular_file")
+ input_blk.type = tarfile.BLKTYPE
+ input_reg.type = tarfile.REGTYPE
+ tar.addfile(input_blk)
+ tar.addfile(input_reg)
+ finally:
+ tar.close()
+
+ # devmajor and devminor should be *interpreted* as 0 in both...
+ tar = tarfile.open(tmpname, "r")
+ try:
+ output_blk = tar.getmember("my_block_device")
+ output_reg = tar.getmember("my_regular_file")
+ finally:
+ tar.close()
+ self.assertEqual(output_blk.devmajor, 0)
+ self.assertEqual(output_blk.devminor, 0)
+ self.assertEqual(output_reg.devmajor, 0)
+ self.assertEqual(output_reg.devminor, 0)
+
+ # ...but the fields should not actually be set on regular files:
+ with open(tmpname, "rb") as infile:
+ buf = infile.read()
+ buf_blk = buf[output_blk.offset:output_blk.offset_data]
+ buf_reg = buf[output_reg.offset:output_reg.offset_data]
+ # See `struct posixheader` in GNU docs for byte offsets:
+ #
+ device_headers = slice(329, 329 + 16)
+ self.assertEqual(buf_blk[device_headers], b"0000000\0" * 2)
+ self.assertEqual(buf_reg[device_headers], b"\0" * 16)
+ finally:
+ support.rmtree(tempdir)
+
+
class CreateTest(WriteTestBase, unittest.TestCase):
prefix = "x:"
diff --git a/Lib/test/test_tempfile.py b/Lib/test/test_tempfile.py
index 232c5dae10f..5fe9506b0b7 100644
--- a/Lib/test/test_tempfile.py
+++ b/Lib/test/test_tempfile.py
@@ -1229,6 +1229,9 @@ class TestSpooledTemporaryFile(BaseTestCase):
self.assertTrue(f._rolled)
self.assertEqual(os.fstat(f.fileno()).st_size, 20)
+ def test_class_getitem(self):
+ self.assertIs(tempfile.SpooledTemporaryFile[bytes],
+ tempfile.SpooledTemporaryFile)
if tempfile.NamedTemporaryFile is not tempfile.TemporaryFile:
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py
index 62f2d54ad0a..a9d31afbe33 100644
--- a/Lib/test/test_threading.py
+++ b/Lib/test/test_threading.py
@@ -3,8 +3,7 @@ Tests for the threading module.
"""
import test.support
-from test.support import (verbose, import_module, cpython_only,
- requires_type_collecting)
+from test.support import verbose, import_module, cpython_only
from test.support.script_helper import assert_python_ok, assert_python_failure
import random
@@ -552,7 +551,6 @@ class ThreadTests(BaseTestCase):
self.assertEqual(err, b"")
self.assertEqual(data, "Thread-1\nTrue\nTrue\n")
- @requires_type_collecting
def test_main_thread_during_shutdown(self):
# bpo-31516: current_thread() should still point to the main thread
# at shutdown
@@ -1113,7 +1111,6 @@ class ThreadingExceptionTests(BaseTestCase):
self.assertIn("ZeroDivisionError", err)
self.assertNotIn("Unhandled exception", err)
- @requires_type_collecting
def test_print_exception_stderr_is_none_1(self):
script = r"""if True:
import sys
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 7135d997d54..60e0b582756 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -174,7 +174,6 @@ class TracebackCases(unittest.TestCase):
# Issue #18960: coding spec should have no effect
do_test("x=0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5)
- @support.requires_type_collecting
def test_print_traceback_at_exit(self):
# Issue #22599: Ensure that it is possible to use the traceback module
# to display an exception at Python exit
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index 5b4916f9c32..6b0a905048c 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -22,6 +22,7 @@ from typing import NewType
from typing import NamedTuple, TypedDict
from typing import IO, TextIO, BinaryIO
from typing import Pattern, Match
+from typing import Annotated
import abc
import typing
import weakref
@@ -2891,6 +2892,64 @@ class GetTypeHintTests(BaseTestCase):
self.assertEqual(gth(ForRefExample.func), expects)
self.assertEqual(gth(ForRefExample.nested), expects)
+ def test_get_type_hints_annotated(self):
+ def foobar(x: List['X']): ...
+ X = Annotated[int, (1, 10)]
+ self.assertEqual(
+ get_type_hints(foobar, globals(), locals()),
+ {'x': List[int]}
+ )
+ self.assertEqual(
+ get_type_hints(foobar, globals(), locals(), include_extras=True),
+ {'x': List[Annotated[int, (1, 10)]]}
+ )
+ BA = Tuple[Annotated[T, (1, 0)], ...]
+ def barfoo(x: BA): ...
+ self.assertEqual(get_type_hints(barfoo, globals(), locals())['x'], Tuple[T, ...])
+ self.assertIs(
+ get_type_hints(barfoo, globals(), locals(), include_extras=True)['x'],
+ BA
+ )
+ def barfoo2(x: typing.Callable[..., Annotated[List[T], "const"]],
+ y: typing.Union[int, Annotated[T, "mutable"]]): ...
+ self.assertEqual(
+ get_type_hints(barfoo2, globals(), locals()),
+ {'x': typing.Callable[..., List[T]], 'y': typing.Union[int, T]}
+ )
+ BA2 = typing.Callable[..., List[T]]
+ def barfoo3(x: BA2): ...
+ self.assertIs(
+ get_type_hints(barfoo3, globals(), locals(), include_extras=True)["x"],
+ BA2
+ )
+
+ def test_get_type_hints_annotated_refs(self):
+
+ Const = Annotated[T, "Const"]
+
+ class MySet(Generic[T]):
+
+ def __ior__(self, other: "Const[MySet[T]]") -> "MySet[T]":
+ ...
+
+ def __iand__(self, other: Const["MySet[T]"]) -> "MySet[T]":
+ ...
+
+ self.assertEqual(
+ get_type_hints(MySet.__iand__, globals(), locals()),
+ {'other': MySet[T], 'return': MySet[T]}
+ )
+
+ self.assertEqual(
+ get_type_hints(MySet.__iand__, globals(), locals(), include_extras=True),
+ {'other': Const[MySet[T]], 'return': MySet[T]}
+ )
+
+ self.assertEqual(
+ get_type_hints(MySet.__ior__, globals(), locals()),
+ {'other': MySet[T], 'return': MySet[T]}
+ )
+
class GetUtilitiesTestCase(TestCase):
def test_get_origin(self):
@@ -2906,6 +2965,7 @@ class GetUtilitiesTestCase(TestCase):
self.assertIs(get_origin(Generic), Generic)
self.assertIs(get_origin(Generic[T]), Generic)
self.assertIs(get_origin(List[Tuple[T, T]][int]), list)
+ self.assertIs(get_origin(Annotated[T, 'thing']), Annotated)
def test_get_args(self):
T = TypeVar('T')
@@ -2926,6 +2986,7 @@ class GetUtilitiesTestCase(TestCase):
(int, Callable[[Tuple[T, ...]], str]))
self.assertEqual(get_args(Tuple[int, ...]), (int, ...))
self.assertEqual(get_args(Tuple[()]), ((),))
+ self.assertEqual(get_args(Annotated[T, 'one', 2, ['three']]), (T, 'one', 2, ['three']))
class CollectionsAbcTests(BaseTestCase):
@@ -3748,6 +3809,38 @@ class TypedDictTests(BaseTestCase):
assert Point2Dor3D.__required_keys__ == frozenset(['x', 'y'])
assert Point2Dor3D.__optional_keys__ == frozenset(['z'])
+ def test_keys_inheritance(self):
+ class BaseAnimal(TypedDict):
+ name: str
+
+ class Animal(BaseAnimal, total=False):
+ voice: str
+ tail: bool
+
+ class Cat(Animal):
+ fur_color: str
+
+ assert BaseAnimal.__required_keys__ == frozenset(['name'])
+ assert BaseAnimal.__optional_keys__ == frozenset([])
+ assert BaseAnimal.__annotations__ == {'name': str}
+
+ assert Animal.__required_keys__ == frozenset(['name'])
+ assert Animal.__optional_keys__ == frozenset(['tail', 'voice'])
+ assert Animal.__annotations__ == {
+ 'name': str,
+ 'tail': bool,
+ 'voice': str,
+ }
+
+ assert Cat.__required_keys__ == frozenset(['name', 'fur_color'])
+ assert Cat.__optional_keys__ == frozenset(['tail', 'voice'])
+ assert Cat.__annotations__ == {
+ 'fur_color': str,
+ 'name': str,
+ 'tail': bool,
+ 'voice': str,
+ }
+
class IOTests(BaseTestCase):
@@ -3844,6 +3937,179 @@ class RETests(BaseTestCase):
"type 're.Match' is not an acceptable base type")
+class AnnotatedTests(BaseTestCase):
+
+ def test_repr(self):
+ self.assertEqual(
+ repr(Annotated[int, 4, 5]),
+ "typing.Annotated[int, 4, 5]"
+ )
+ self.assertEqual(
+ repr(Annotated[List[int], 4, 5]),
+ "typing.Annotated[typing.List[int], 4, 5]"
+ )
+
+ def test_flatten(self):
+ A = Annotated[Annotated[int, 4], 5]
+ self.assertEqual(A, Annotated[int, 4, 5])
+ self.assertEqual(A.__metadata__, (4, 5))
+ self.assertEqual(A.__origin__, int)
+
+ def test_specialize(self):
+ L = Annotated[List[T], "my decoration"]
+ LI = Annotated[List[int], "my decoration"]
+ self.assertEqual(L[int], Annotated[List[int], "my decoration"])
+ self.assertEqual(L[int].__metadata__, ("my decoration",))
+ self.assertEqual(L[int].__origin__, List[int])
+ with self.assertRaises(TypeError):
+ LI[int]
+ with self.assertRaises(TypeError):
+ L[int, float]
+
+ def test_hash_eq(self):
+ self.assertEqual(len({Annotated[int, 4, 5], Annotated[int, 4, 5]}), 1)
+ self.assertNotEqual(Annotated[int, 4, 5], Annotated[int, 5, 4])
+ self.assertNotEqual(Annotated[int, 4, 5], Annotated[str, 4, 5])
+ self.assertNotEqual(Annotated[int, 4], Annotated[int, 4, 4])
+ self.assertEqual(
+ {Annotated[int, 4, 5], Annotated[int, 4, 5], Annotated[T, 4, 5]},
+ {Annotated[int, 4, 5], Annotated[T, 4, 5]}
+ )
+
+ def test_instantiate(self):
+ class C:
+ classvar = 4
+
+ def __init__(self, x):
+ self.x = x
+
+ def __eq__(self, other):
+ if not isinstance(other, C):
+ return NotImplemented
+ return other.x == self.x
+
+ A = Annotated[C, "a decoration"]
+ a = A(5)
+ c = C(5)
+ self.assertEqual(a, c)
+ self.assertEqual(a.x, c.x)
+ self.assertEqual(a.classvar, c.classvar)
+
+ def test_instantiate_generic(self):
+ MyCount = Annotated[typing.Counter[T], "my decoration"]
+ self.assertEqual(MyCount([4, 4, 5]), {4: 2, 5: 1})
+ self.assertEqual(MyCount[int]([4, 4, 5]), {4: 2, 5: 1})
+
+ def test_cannot_instantiate_forward(self):
+ A = Annotated["int", (5, 6)]
+ with self.assertRaises(TypeError):
+ A(5)
+
+ def test_cannot_instantiate_type_var(self):
+ A = Annotated[T, (5, 6)]
+ with self.assertRaises(TypeError):
+ A(5)
+
+ def test_cannot_getattr_typevar(self):
+ with self.assertRaises(AttributeError):
+ Annotated[T, (5, 7)].x
+
+ def test_attr_passthrough(self):
+ class C:
+ classvar = 4
+
+ A = Annotated[C, "a decoration"]
+ self.assertEqual(A.classvar, 4)
+ A.x = 5
+ self.assertEqual(C.x, 5)
+
+ def test_hash_eq(self):
+ self.assertEqual(len({Annotated[int, 4, 5], Annotated[int, 4, 5]}), 1)
+ self.assertNotEqual(Annotated[int, 4, 5], Annotated[int, 5, 4])
+ self.assertNotEqual(Annotated[int, 4, 5], Annotated[str, 4, 5])
+ self.assertNotEqual(Annotated[int, 4], Annotated[int, 4, 4])
+ self.assertEqual(
+ {Annotated[int, 4, 5], Annotated[int, 4, 5], Annotated[T, 4, 5]},
+ {Annotated[int, 4, 5], Annotated[T, 4, 5]}
+ )
+
+ def test_cannot_subclass(self):
+ with self.assertRaisesRegex(TypeError, "Cannot subclass .*Annotated"):
+ class C(Annotated):
+ pass
+
+ def test_cannot_check_instance(self):
+ with self.assertRaises(TypeError):
+ isinstance(5, Annotated[int, "positive"])
+
+ def test_cannot_check_subclass(self):
+ with self.assertRaises(TypeError):
+ issubclass(int, Annotated[int, "positive"])
+
+ def test_pickle(self):
+ samples = [typing.Any, typing.Union[int, str],
+ typing.Optional[str], Tuple[int, ...],
+ typing.Callable[[str], bytes]]
+
+ for t in samples:
+ x = Annotated[t, "a"]
+
+ for prot in range(pickle.HIGHEST_PROTOCOL + 1):
+ with self.subTest(protocol=prot, type=t):
+ pickled = pickle.dumps(x, prot)
+ restored = pickle.loads(pickled)
+ self.assertEqual(x, restored)
+
+ global _Annotated_test_G
+
+ class _Annotated_test_G(Generic[T]):
+ x = 1
+
+ G = Annotated[_Annotated_test_G[int], "A decoration"]
+ G.foo = 42
+ G.bar = 'abc'
+
+ for proto in range(pickle.HIGHEST_PROTOCOL + 1):
+ z = pickle.dumps(G, proto)
+ x = pickle.loads(z)
+ self.assertEqual(x.foo, 42)
+ self.assertEqual(x.bar, 'abc')
+ self.assertEqual(x.x, 1)
+
+ def test_subst(self):
+ dec = "a decoration"
+ dec2 = "another decoration"
+
+ S = Annotated[T, dec2]
+ self.assertEqual(S[int], Annotated[int, dec2])
+
+ self.assertEqual(S[Annotated[int, dec]], Annotated[int, dec, dec2])
+ L = Annotated[List[T], dec]
+
+ self.assertEqual(L[int], Annotated[List[int], dec])
+ with self.assertRaises(TypeError):
+ L[int, int]
+
+ self.assertEqual(S[L[int]], Annotated[List[int], dec, dec2])
+
+ D = Annotated[typing.Dict[KT, VT], dec]
+ self.assertEqual(D[str, int], Annotated[typing.Dict[str, int], dec])
+ with self.assertRaises(TypeError):
+ D[int]
+
+ It = Annotated[int, dec]
+ with self.assertRaises(TypeError):
+ It[None]
+
+ LI = L[int]
+ with self.assertRaises(TypeError):
+ LI[None]
+
+ def test_annotated_in_other_types(self):
+ X = List[Annotated[T, 5]]
+ self.assertEqual(X[int], List[Annotated[int, 5]])
+
+
class AllTests(BaseTestCase):
"""Tests for __all__."""
diff --git a/Lib/test/test_unparse.py b/Lib/test/test_unparse.py
index 45d819f175b..e8b0d4b06f9 100644
--- a/Lib/test/test_unparse.py
+++ b/Lib/test/test_unparse.py
@@ -278,6 +278,8 @@ class UnparseTestCase(ASTTestCase):
def test_invalid_set(self):
self.check_invalid(ast.Set(elts=[]))
+ def test_invalid_yield_from(self):
+ self.check_invalid(ast.YieldFrom(value=None))
class DirectoryTestCase(ASTTestCase):
"""Test roundtrip behaviour on all files in Lib and Lib/test."""
@@ -285,6 +287,8 @@ class DirectoryTestCase(ASTTestCase):
lib_dir = pathlib.Path(__file__).parent / ".."
test_directories = (lib_dir, lib_dir / "test")
skip_files = {"test_fstring.py"}
+ run_always_files = {"test_grammar.py", "test_syntax.py", "test_compile.py",
+ "test_ast.py", "test_asdl_parser.py"}
_files_to_test = None
@@ -303,7 +307,15 @@ class DirectoryTestCase(ASTTestCase):
# Test limited subset of files unless the 'cpu' resource is specified.
if not test.support.is_resource_enabled("cpu"):
- items = random.sample(items, 10)
+
+ tests_to_run_always = {item for item in items if
+ item.name in cls.run_always_files}
+
+ items = set(random.sample(items, 10))
+
+ # Make sure that at least tests that heavily use grammar features are
+ # always considered in order to reduce the chance of missing something.
+ items = list(items | tests_to_run_always)
# bpo-31174: Store the names sample to always test the same files.
# It prevents false alarms when hunting reference leaks.
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 95c4ecc4dcf..2e82fc7b7b8 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -270,14 +270,36 @@ class ProxyTests(unittest.TestCase):
self.assertTrue(bypass('localhost'))
self.assertTrue(bypass('LocalHost')) # MixedCase
self.assertTrue(bypass('LOCALHOST')) # UPPERCASE
+ self.assertTrue(bypass('.localhost'))
self.assertTrue(bypass('newdomain.com:1234'))
+ self.assertTrue(bypass('.newdomain.com:1234'))
self.assertTrue(bypass('foo.d.o.t')) # issue 29142
+ self.assertTrue(bypass('d.o.t'))
self.assertTrue(bypass('anotherdomain.com:8888'))
+ self.assertTrue(bypass('.anotherdomain.com:8888'))
self.assertTrue(bypass('www.newdomain.com:1234'))
self.assertFalse(bypass('prelocalhost'))
self.assertFalse(bypass('newdomain.com')) # no port
self.assertFalse(bypass('newdomain.com:1235')) # wrong port
+ def test_proxy_bypass_environment_always_match(self):
+ bypass = urllib.request.proxy_bypass_environment
+ self.env.set('NO_PROXY', '*')
+ self.assertTrue(bypass('newdomain.com'))
+ self.assertTrue(bypass('newdomain.com:1234'))
+ self.env.set('NO_PROXY', '*, anotherdomain.com')
+ self.assertTrue(bypass('anotherdomain.com'))
+ self.assertFalse(bypass('newdomain.com'))
+ self.assertFalse(bypass('newdomain.com:1234'))
+
+ def test_proxy_bypass_environment_newline(self):
+ bypass = urllib.request.proxy_bypass_environment
+ self.env.set('NO_PROXY',
+ 'localhost, anotherdomain.com, newdomain.com:1234')
+ self.assertFalse(bypass('localhost\n'))
+ self.assertFalse(bypass('anotherdomain.com:8888\n'))
+ self.assertFalse(bypass('newdomain.com:1234\n'))
+
class ProxyTests_withOrderedEnv(unittest.TestCase):
diff --git a/Lib/test/test_venv.py b/Lib/test/test_venv.py
index 741ac109bbc..a3b78c4e44e 100644
--- a/Lib/test/test_venv.py
+++ b/Lib/test/test_venv.py
@@ -138,6 +138,15 @@ class BasicTest(BaseTest):
self.assertEqual(context.prompt, '(My prompt) ')
self.assertIn("prompt = 'My prompt'\n", data)
+ rmtree(self.env_dir)
+ builder = venv.EnvBuilder(prompt='.')
+ cwd = os.path.basename(os.getcwd())
+ self.run_with_capture(builder.create, self.env_dir)
+ context = builder.ensure_directories(self.env_dir)
+ data = self.get_text_file_contents('pyvenv.cfg')
+ self.assertEqual(context.prompt, '(%s) ' % cwd)
+ self.assertIn("prompt = '%s'\n" % cwd, data)
+
def test_upgrade_dependencies(self):
builder = venv.EnvBuilder()
bin_path = 'Scripts' if sys.platform == 'win32' else 'bin'
diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py
index 3a6d64eaad1..268ecb03f4d 100644
--- a/Lib/test/test_warnings/__init__.py
+++ b/Lib/test/test_warnings/__init__.py
@@ -43,6 +43,10 @@ def warnings_state(module):
module.filters = original_filters
+class TestWarning(Warning):
+ pass
+
+
class BaseTest:
"""Basic bookkeeping required for testing."""
@@ -566,9 +570,28 @@ class WCmdLineTests(BaseTest):
self.module._setoption, 'bogus::Warning')
self.assertRaises(self.module._OptionError,
self.module._setoption, 'ignore:2::4:-5')
+ with self.assertRaises(self.module._OptionError):
+ self.module._setoption('ignore::123')
+ with self.assertRaises(self.module._OptionError):
+ self.module._setoption('ignore::123abc')
+ with self.assertRaises(self.module._OptionError):
+ self.module._setoption('ignore::===')
+ with self.assertRaisesRegex(self.module._OptionError, 'Wärning'):
+ self.module._setoption('ignore::Wärning')
self.module._setoption('error::Warning::0')
self.assertRaises(UserWarning, self.module.warn, 'convert to error')
+ def test_import_from_module(self):
+ with original_warnings.catch_warnings(module=self.module):
+ self.module._setoption('ignore::Warning')
+ with self.assertRaises(self.module._OptionError):
+ self.module._setoption('ignore::TestWarning')
+ with self.assertRaises(self.module._OptionError):
+ self.module._setoption('ignore::test.test_warnings.bogus')
+ self.module._setoption('error::test.test_warnings.TestWarning')
+ with self.assertRaises(TestWarning):
+ self.module.warn('test warning', TestWarning)
+
class CWCmdLineTests(WCmdLineTests, unittest.TestCase):
module = c_warnings
@@ -1204,7 +1227,6 @@ class BootstrapTest(unittest.TestCase):
class FinalizationTest(unittest.TestCase):
- @support.requires_type_collecting
def test_finalization(self):
# Issue #19421: warnings.warn() should not crash
# during Python finalization
diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py
index 228bc17b23c..63c725527d5 100644
--- a/Lib/test/test_weakref.py
+++ b/Lib/test/test_weakref.py
@@ -649,7 +649,6 @@ class ReferencesTestCase(TestBase):
del c1, c2, C, D
gc.collect()
- @support.requires_type_collecting
def test_callback_in_cycle_resurrection(self):
import gc
diff --git a/Lib/test/test_winconsoleio.py b/Lib/test/test_winconsoleio.py
index 9a61e48881d..a44f7bbd27b 100644
--- a/Lib/test/test_winconsoleio.py
+++ b/Lib/test/test_winconsoleio.py
@@ -144,6 +144,10 @@ class WindowsConsoleIOTests(unittest.TestCase):
self.assertStdinRoundTrip('ϼўТλФЙ')
# Combining characters
self.assertStdinRoundTrip('A͏B ﬖ̳AA̝')
+
+ # bpo-38325
+ @unittest.skipIf(True, "Handling Non-BMP characters is broken")
+ def test_input_nonbmp(self):
# Non-BMP
self.assertStdinRoundTrip('\U00100000\U0010ffff\U0010fffd')
@@ -163,6 +167,8 @@ class WindowsConsoleIOTests(unittest.TestCase):
self.assertEqual(actual, expected, 'stdin.read({})'.format(read_count))
+ # bpo-38325
+ @unittest.skipIf(True, "Handling Non-BMP characters is broken")
def test_partial_surrogate_reads(self):
# Test that reading less than 1 full character works when stdin
# contains surrogate pairs that cannot be decoded to UTF-8 without
diff --git a/Lib/test/test_zipfile.py b/Lib/test/test_zipfile.py
index 66f05ac1f3a..09fc8506006 100644
--- a/Lib/test/test_zipfile.py
+++ b/Lib/test/test_zipfile.py
@@ -611,11 +611,28 @@ class StoredTestsWithSourceFile(AbstractTestsWithSourceFile,
def test_add_file_after_2107(self):
# Set atime and mtime to 2108-12-30
+ ts = 4386268800
try:
- os.utime(TESTFN, (4386268800, 4386268800))
+ time.localtime(ts)
+ except OverflowError:
+ self.skipTest(f'time.localtime({ts}) raises OverflowError')
+ try:
+ os.utime(TESTFN, (ts, ts))
except OverflowError:
self.skipTest('Host fs cannot set timestamp to required value.')
+ mtime_ns = os.stat(TESTFN).st_mtime_ns
+ if mtime_ns != (4386268800 * 10**9):
+ # XFS filesystem is limited to 32-bit timestamp, but the syscall
+ # didn't fail. Moreover, there is a VFS bug which returns
+ # a cached timestamp which is different than the value on disk.
+ #
+ # Test st_mtime_ns rather than st_mtime to avoid rounding issues.
+ #
+ # https://bugzilla.redhat.com/show_bug.cgi?id=1795576
+ # https://bugs.python.org/issue39460#msg360952
+ self.skipTest(f"Linux VFS/XFS kernel bug detected: {mtime_ns=}")
+
with zipfile.ZipFile(TESTFN2, "w") as zipfp:
self.assertRaises(struct.error, zipfp.write, TESTFN)
@@ -2707,16 +2724,71 @@ class CommandLineTest(unittest.TestCase):
self.assertEqual(f.read(), zf.read(zi))
+class TestExecutablePrependedZip(unittest.TestCase):
+ """Test our ability to open zip files with an executable prepended."""
+
+ def setUp(self):
+ self.exe_zip = findfile('exe_with_zip', subdir='ziptestdata')
+ self.exe_zip64 = findfile('exe_with_z64', subdir='ziptestdata')
+
+ def _test_zip_works(self, name):
+ # bpo28494 sanity check: ensure is_zipfile works on these.
+ self.assertTrue(zipfile.is_zipfile(name),
+ f'is_zipfile failed on {name}')
+ # Ensure we can operate on these via ZipFile.
+ with zipfile.ZipFile(name) as zipfp:
+ for n in zipfp.namelist():
+ data = zipfp.read(n)
+ self.assertIn(b'FAVORITE_NUMBER', data)
+
+ def test_read_zip_with_exe_prepended(self):
+ self._test_zip_works(self.exe_zip)
+
+ def test_read_zip64_with_exe_prepended(self):
+ self._test_zip_works(self.exe_zip64)
+
+ @unittest.skipUnless(sys.executable, 'sys.executable required.')
+ @unittest.skipUnless(os.access('/bin/bash', os.X_OK),
+ 'Test relies on #!/bin/bash working.')
+ def test_execute_zip2(self):
+ output = subprocess.check_output([self.exe_zip, sys.executable])
+ self.assertIn(b'number in executable: 5', output)
+
+ @unittest.skipUnless(sys.executable, 'sys.executable required.')
+ @unittest.skipUnless(os.access('/bin/bash', os.X_OK),
+ 'Test relies on #!/bin/bash working.')
+ def test_execute_zip64(self):
+ output = subprocess.check_output([self.exe_zip64, sys.executable])
+ self.assertIn(b'number in executable: 5', output)
+
+
# Poor man's technique to consume a (smallish) iterable.
consume = tuple
+# from jaraco.itertools 5.0
+class jaraco:
+ class itertools:
+ class Counter:
+ def __init__(self, i):
+ self.count = 0
+ self._orig_iter = iter(i)
+
+ def __iter__(self):
+ return self
+
+ def __next__(self):
+ result = next(self._orig_iter)
+ self.count += 1
+ return result
+
+
def add_dirs(zf):
"""
Given a writable zip file zf, inject directory entries for
any directories implied by the presence of children.
"""
- for name in zipfile.Path._implied_dirs(zf.namelist()):
+ for name in zipfile.CompleteDirs._implied_dirs(zf.namelist()):
zf.writestr(name, b"")
return zf
@@ -2757,44 +2829,6 @@ def build_alpharep_fixture():
return zf
-class TestExecutablePrependedZip(unittest.TestCase):
- """Test our ability to open zip files with an executable prepended."""
-
- def setUp(self):
- self.exe_zip = findfile('exe_with_zip', subdir='ziptestdata')
- self.exe_zip64 = findfile('exe_with_z64', subdir='ziptestdata')
-
- def _test_zip_works(self, name):
- # bpo-28494 sanity check: ensure is_zipfile works on these.
- self.assertTrue(zipfile.is_zipfile(name),
- f'is_zipfile failed on {name}')
- # Ensure we can operate on these via ZipFile.
- with zipfile.ZipFile(name) as zipfp:
- for n in zipfp.namelist():
- data = zipfp.read(n)
- self.assertIn(b'FAVORITE_NUMBER', data)
-
- def test_read_zip_with_exe_prepended(self):
- self._test_zip_works(self.exe_zip)
-
- def test_read_zip64_with_exe_prepended(self):
- self._test_zip_works(self.exe_zip64)
-
- @unittest.skipUnless(sys.executable, 'sys.executable required.')
- @unittest.skipUnless(os.access('/bin/bash', os.X_OK),
- 'Test relies on #!/bin/bash working.')
- def test_execute_zip2(self):
- output = subprocess.check_output([self.exe_zip, sys.executable])
- self.assertIn(b'number in executable: 5', output)
-
- @unittest.skipUnless(sys.executable, 'sys.executable required.')
- @unittest.skipUnless(os.access('/bin/bash', os.X_OK),
- 'Test relies on #!/bin/bash working.')
- def test_execute_zip64(self):
- output = subprocess.check_output([self.exe_zip64, sys.executable])
- self.assertIn(b'number in executable: 5', output)
-
-
class TestPath(unittest.TestCase):
def setUp(self):
self.fixtures = contextlib.ExitStack()
@@ -2832,6 +2866,14 @@ class TestPath(unittest.TestCase):
i, = h.iterdir()
assert i.is_file()
+ def test_subdir_is_dir(self):
+ for alpharep in self.zipfile_alpharep():
+ root = zipfile.Path(alpharep)
+ assert (root / 'b').is_dir()
+ assert (root / 'b/').is_dir()
+ assert (root / 'g').is_dir()
+ assert (root / 'g/').is_dir()
+
def test_open(self):
for alpharep in self.zipfile_alpharep():
root = zipfile.Path(alpharep)
@@ -2893,6 +2935,45 @@ class TestPath(unittest.TestCase):
root = zipfile.Path(alpharep)
assert (root / 'missing dir/').parent.at == ''
+ def test_mutability(self):
+ """
+ If the underlying zipfile is changed, the Path object should
+ reflect that change.
+ """
+ for alpharep in self.zipfile_alpharep():
+ root = zipfile.Path(alpharep)
+ a, b, g = root.iterdir()
+ alpharep.writestr('foo.txt', 'foo')
+ alpharep.writestr('bar/baz.txt', 'baz')
+ assert any(
+ child.name == 'foo.txt'
+ for child in root.iterdir())
+ assert (root / 'foo.txt').read_text() == 'foo'
+ baz, = (root / 'bar').iterdir()
+ assert baz.read_text() == 'baz'
+
+ HUGE_ZIPFILE_NUM_ENTRIES = 2 ** 13
+
+ def huge_zipfile(self):
+ """Create a read-only zipfile with a huge number of entries entries."""
+ strm = io.BytesIO()
+ zf = zipfile.ZipFile(strm, "w")
+ for entry in map(str, range(self.HUGE_ZIPFILE_NUM_ENTRIES)):
+ zf.writestr(entry, entry)
+ zf.mode = 'r'
+ return zf
+
+ def test_joinpath_constant_time(self):
+ """
+ Ensure joinpath on items in zipfile is linear time.
+ """
+ root = zipfile.Path(self.huge_zipfile())
+ entries = jaraco.itertools.Counter(root.iterdir())
+ for entry in entries:
+ entry.joinpath('suffix')
+ # Check the file iterated all items
+ assert entries.count == self.HUGE_ZIPFILE_NUM_ENTRIES
+
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/tkinter/test/widget_tests.py b/Lib/tkinter/test/widget_tests.py
index 75a068fbbf2..b42ff52178f 100644
--- a/Lib/tkinter/test/widget_tests.py
+++ b/Lib/tkinter/test/widget_tests.py
@@ -3,7 +3,6 @@
import unittest
import sys
import tkinter
-from tkinter.ttk import Scale
from tkinter.test.support import (AbstractTkTest, tcl_version, requires_tcl,
get_tk_patchlevel, pixels_conv, tcl_obj_eq)
import test.support
@@ -63,11 +62,9 @@ class AbstractWidgetTest(AbstractTkTest):
eq = tcl_obj_eq
self.assertEqual2(widget[name], expected, eq=eq)
self.assertEqual2(widget.cget(name), expected, eq=eq)
- # XXX
- if not isinstance(widget, Scale):
- t = widget.configure(name)
- self.assertEqual(len(t), 5)
- self.assertEqual2(t[4], expected, eq=eq)
+ t = widget.configure(name)
+ self.assertEqual(len(t), 5)
+ self.assertEqual2(t[4], expected, eq=eq)
def checkInvalidParam(self, widget, name, value, errmsg=None, *,
keep_orig=True):
@@ -209,9 +206,7 @@ class AbstractWidgetTest(AbstractTkTest):
def test_keys(self):
widget = self.create()
keys = widget.keys()
- # XXX
- if not isinstance(widget, Scale):
- self.assertEqual(sorted(keys), sorted(widget.configure()))
+ self.assertEqual(sorted(keys), sorted(widget.configure()))
for k in keys:
widget[k]
# Test if OPTIONS contains all keys
diff --git a/Lib/tkinter/tix.py b/Lib/tkinter/tix.py
index d9c097a77cd..ac545502e45 100644
--- a/Lib/tkinter/tix.py
+++ b/Lib/tkinter/tix.py
@@ -1890,7 +1890,7 @@ class Grid(TixWidget, XView, YView):
containing the current size setting of the given column. When
option-value pairs are given, the corresponding options of the
size setting of the given column are changed. Options may be one
- of the follwing:
+ of the following:
pad0 pixels
Specifies the paddings to the left of a column.
pad1 pixels
@@ -1915,7 +1915,7 @@ class Grid(TixWidget, XView, YView):
When no option-value pair is given, this command returns a list con-
taining the current size setting of the given row . When option-value
pairs are given, the corresponding options of the size setting of the
- given row are changed. Options may be one of the follwing:
+ given row are changed. Options may be one of the following:
pad0 pixels
Specifies the paddings to the top of a row.
pad1 pixels
diff --git a/Lib/tkinter/ttk.py b/Lib/tkinter/ttk.py
index 573544dd84a..c7c71cd5a55 100644
--- a/Lib/tkinter/ttk.py
+++ b/Lib/tkinter/ttk.py
@@ -1084,11 +1084,12 @@ class Scale(Widget, tkinter.Scale):
Setting a value for any of the "from", "from_" or "to" options
generates a <> event."""
- if cnf:
+ retval = Widget.configure(self, cnf, **kw)
+ if not isinstance(cnf, (type(None), str)):
kw.update(cnf)
- Widget.configure(self, **kw)
if any(['from' in kw, 'from_' in kw, 'to' in kw]):
self.event_generate('<>')
+ return retval
def get(self, x=None, y=None):
diff --git a/Lib/trace.py b/Lib/trace.py
index 681c3f9d05f..52047c3fbf4 100755
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -52,6 +52,7 @@ __all__ = ['Trace', 'CoverageResults']
import linecache
import os
import sys
+import sysconfig
import token
import tokenize
import inspect
@@ -660,9 +661,8 @@ def main():
opts = parser.parse_args()
if opts.ignore_dir:
- rel_path = 'lib', 'python{0.major}.{0.minor}'.format(sys.version_info)
- _prefix = os.path.join(sys.base_prefix, *rel_path)
- _exec_prefix = os.path.join(sys.base_exec_prefix, *rel_path)
+ _prefix = sysconfig.get_path("stdlib")
+ _exec_prefix = sysconfig.get_path("platstdlib")
def parse_ignore_dir(s):
s = os.path.expanduser(os.path.expandvars(s))
diff --git a/Lib/typing.py b/Lib/typing.py
index 7de3e346eaa..6da145fcdb8 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -31,6 +31,7 @@ from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType
# Please keep __all__ alphabetized within each category.
__all__ = [
# Super-special typing primitives.
+ 'Annotated',
'Any',
'Callable',
'ClassVar',
@@ -1118,6 +1119,101 @@ class Protocol(Generic, metaclass=_ProtocolMeta):
cls.__init__ = _no_init
+class _AnnotatedAlias(_GenericAlias, _root=True):
+ """Runtime representation of an annotated type.
+
+ At its core 'Annotated[t, dec1, dec2, ...]' is an alias for the type 't'
+ with extra annotations. The alias behaves like a normal typing alias,
+ instantiating is the same as instantiating the underlying type, binding
+ it to types is also the same.
+ """
+ def __init__(self, origin, metadata):
+ if isinstance(origin, _AnnotatedAlias):
+ metadata = origin.__metadata__ + metadata
+ origin = origin.__origin__
+ super().__init__(origin, origin)
+ self.__metadata__ = metadata
+
+ def copy_with(self, params):
+ assert len(params) == 1
+ new_type = params[0]
+ return _AnnotatedAlias(new_type, self.__metadata__)
+
+ def __repr__(self):
+ return "typing.Annotated[{}, {}]".format(
+ _type_repr(self.__origin__),
+ ", ".join(repr(a) for a in self.__metadata__)
+ )
+
+ def __reduce__(self):
+ return operator.getitem, (
+ Annotated, (self.__origin__,) + self.__metadata__
+ )
+
+ def __eq__(self, other):
+ if not isinstance(other, _AnnotatedAlias):
+ return NotImplemented
+ if self.__origin__ != other.__origin__:
+ return False
+ return self.__metadata__ == other.__metadata__
+
+ def __hash__(self):
+ return hash((self.__origin__, self.__metadata__))
+
+
+class Annotated:
+ """Add context specific metadata to a type.
+
+ Example: Annotated[int, runtime_check.Unsigned] indicates to the
+ hypothetical runtime_check module that this type is an unsigned int.
+ Every other consumer of this type can ignore this metadata and treat
+ this type as int.
+
+ The first argument to Annotated must be a valid type.
+
+ Details:
+
+ - It's an error to call `Annotated` with less than two arguments.
+ - Nested Annotated are flattened::
+
+ Annotated[Annotated[T, Ann1, Ann2], Ann3] == Annotated[T, Ann1, Ann2, Ann3]
+
+ - Instantiating an annotated type is equivalent to instantiating the
+ underlying type::
+
+ Annotated[C, Ann1](5) == C(5)
+
+ - Annotated can be used as a generic type alias::
+
+ Optimized = Annotated[T, runtime.Optimize()]
+ Optimized[int] == Annotated[int, runtime.Optimize()]
+
+ OptimizedList = Annotated[List[T], runtime.Optimize()]
+ OptimizedList[int] == Annotated[List[int], runtime.Optimize()]
+ """
+
+ __slots__ = ()
+
+ def __new__(cls, *args, **kwargs):
+ raise TypeError("Type Annotated cannot be instantiated.")
+
+ @_tp_cache
+ def __class_getitem__(cls, params):
+ if not isinstance(params, tuple) or len(params) < 2:
+ raise TypeError("Annotated[...] should be used "
+ "with at least two arguments (a type and an "
+ "annotation).")
+ msg = "Annotated[t, ...]: t must be a type."
+ origin = _type_check(params[0], msg)
+ metadata = tuple(params[1:])
+ return _AnnotatedAlias(origin, metadata)
+
+ def __init_subclass__(cls, *args, **kwargs):
+ raise TypeError(
+ "Cannot subclass {}.Annotated".format(cls.__module__)
+ )
+
+
def runtime_checkable(cls):
"""Mark a protocol class as a runtime protocol.
@@ -1179,12 +1275,13 @@ _allowed_types = (types.FunctionType, types.BuiltinFunctionType,
WrapperDescriptorType, MethodWrapperType, MethodDescriptorType)
-def get_type_hints(obj, globalns=None, localns=None):
+def get_type_hints(obj, globalns=None, localns=None, include_extras=False):
"""Return type hints for an object.
This is often the same as obj.__annotations__, but it handles
- forward references encoded as string literals, and if necessary
- adds Optional[t] if a default value equal to None is set.
+ forward references encoded as string literals, adds Optional[t] if a
+ default value equal to None is set and recursively replaces all
+ 'Annotated[T, ...]' with 'T' (unless 'include_extras=True').
The argument may be a module, class, method, or function. The annotations
are returned as a dictionary. For classes, annotations include also
@@ -1228,7 +1325,7 @@ def get_type_hints(obj, globalns=None, localns=None):
value = ForwardRef(value, is_argument=False)
value = _eval_type(value, base_globals, localns)
hints[name] = value
- return hints
+ return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
if globalns is None:
if isinstance(obj, types.ModuleType):
@@ -1262,14 +1359,29 @@ def get_type_hints(obj, globalns=None, localns=None):
if name in defaults and defaults[name] is None:
value = Optional[value]
hints[name] = value
- return hints
+ return hints if include_extras else {k: _strip_annotations(t) for k, t in hints.items()}
+
+
+def _strip_annotations(t):
+ """Strips the annotations from a given type.
+ """
+ if isinstance(t, _AnnotatedAlias):
+ return _strip_annotations(t.__origin__)
+ if isinstance(t, _GenericAlias):
+ stripped_args = tuple(_strip_annotations(a) for a in t.__args__)
+ if stripped_args == t.__args__:
+ return t
+ res = t.copy_with(stripped_args)
+ res._special = t._special
+ return res
+ return t
def get_origin(tp):
"""Get the unsubscripted version of a type.
- This supports generic types, Callable, Tuple, Union, Literal, Final and ClassVar.
- Return None for unsupported types. Examples::
+ This supports generic types, Callable, Tuple, Union, Literal, Final, ClassVar
+ and Annotated. Return None for unsupported types. Examples::
get_origin(Literal[42]) is Literal
get_origin(int) is None
@@ -1279,6 +1391,8 @@ def get_origin(tp):
get_origin(Union[T, int]) is Union
get_origin(List[Tuple[T, T]][int]) == list
"""
+ if isinstance(tp, _AnnotatedAlias):
+ return Annotated
if isinstance(tp, _GenericAlias):
return tp.__origin__
if tp is Generic:
@@ -1297,6 +1411,8 @@ def get_args(tp):
get_args(Union[int, Tuple[T, int]][str]) == (int, Tuple[str, int])
get_args(Callable[[], T][int]) == ([], int)
"""
+ if isinstance(tp, _AnnotatedAlias):
+ return (tp.__origin__,) + tp.__metadata__
if isinstance(tp, _GenericAlias):
res = tp.__args__
if get_origin(tp) is collections.abc.Callable and res[0] is not Ellipsis:
@@ -1712,23 +1828,30 @@ class _TypedDictMeta(type):
ns['__new__'] = _typeddict_new if name == 'TypedDict' else _dict_new
tp_dict = super(_TypedDictMeta, cls).__new__(cls, name, (dict,), ns)
- anns = ns.get('__annotations__', {})
+ annotations = {}
+ own_annotations = ns.get('__annotations__', {})
+ own_annotation_keys = set(own_annotations.keys())
msg = "TypedDict('Name', {f0: t0, f1: t1, ...}); each t must be a type"
- anns = {n: _type_check(tp, msg) for n, tp in anns.items()}
- required = set(anns if total else ())
- optional = set(() if total else anns)
+ own_annotations = {
+ n: _type_check(tp, msg) for n, tp in own_annotations.items()
+ }
+ required_keys = set()
+ optional_keys = set()
for base in bases:
- base_anns = base.__dict__.get('__annotations__', {})
- anns.update(base_anns)
- if getattr(base, '__total__', True):
- required.update(base_anns)
- else:
- optional.update(base_anns)
+ annotations.update(base.__dict__.get('__annotations__', {}))
+ required_keys.update(base.__dict__.get('__required_keys__', ()))
+ optional_keys.update(base.__dict__.get('__optional_keys__', ()))
- tp_dict.__annotations__ = anns
- tp_dict.__required_keys__ = frozenset(required)
- tp_dict.__optional_keys__ = frozenset(optional)
+ annotations.update(own_annotations)
+ if total:
+ required_keys.update(own_annotation_keys)
+ else:
+ optional_keys.update(own_annotation_keys)
+
+ tp_dict.__annotations__ = annotations
+ tp_dict.__required_keys__ = frozenset(required_keys)
+ tp_dict.__optional_keys__ = frozenset(optional_keys)
if not hasattr(tp_dict, '__total__'):
tp_dict.__total__ = total
return tp_dict
@@ -1831,6 +1954,7 @@ class IO(Generic[AnyStr]):
def close(self) -> None:
pass
+ @property
@abstractmethod
def closed(self) -> bool:
pass
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index fa64a6ea237..5e5d535dc69 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -512,7 +512,7 @@ class TestCase(object):
the specified test method's docstring.
"""
doc = self._testMethodDoc
- return doc and doc.split("\n")[0].strip() or None
+ return doc.strip().split("\n")[0].strip() if doc else None
def id(self):
diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py
index cd5a2aeb608..9e692981a22 100644
--- a/Lib/unittest/mock.py
+++ b/Lib/unittest/mock.py
@@ -23,8 +23,6 @@ __all__ = (
)
-__version__ = '1.0'
-
import asyncio
import contextlib
import io
@@ -32,6 +30,7 @@ import inspect
import pprint
import sys
import builtins
+from asyncio import iscoroutinefunction
from types import CodeType, ModuleType, MethodType
from unittest.util import safe_repr
from functools import wraps, partial
@@ -48,12 +47,14 @@ _safe_super = super
def _is_async_obj(obj):
if _is_instance_mock(obj) and not isinstance(obj, AsyncMock):
return False
- return asyncio.iscoroutinefunction(obj) or inspect.isawaitable(obj)
+ if hasattr(obj, '__func__'):
+ obj = getattr(obj, '__func__')
+ return iscoroutinefunction(obj) or inspect.isawaitable(obj)
def _is_async_func(func):
if getattr(func, '__code__', None):
- return asyncio.iscoroutinefunction(func)
+ return iscoroutinefunction(func)
else:
return False
@@ -488,7 +489,7 @@ class NonCallableMock(Base):
_spec_asyncs = []
for attr in dir(spec):
- if asyncio.iscoroutinefunction(getattr(spec, attr, None)):
+ if iscoroutinefunction(getattr(spec, attr, None)):
_spec_asyncs.append(attr)
if spec is not None and not _is_list(spec):
@@ -592,7 +593,7 @@ class NonCallableMock(Base):
for child in self._mock_children.values():
if isinstance(child, _SpecState) or child is _deleted:
continue
- child.reset_mock(visited)
+ child.reset_mock(visited, return_value=return_value, side_effect=side_effect)
ret = self._mock_return_value
if _is_instance_mock(ret) and ret is not self:
@@ -819,6 +820,10 @@ class NonCallableMock(Base):
if child is None or isinstance(child, _SpecState):
break
else:
+ # If an autospecced object is attached using attach_mock the
+ # child would be a function with mock object as attribute from
+ # which signature has to be derived.
+ child = _extract_mock(child)
children = child._mock_children
sig = child._spec_signature
@@ -1037,8 +1042,7 @@ class _AnyComparer(list):
the left."""
def __contains__(self, item):
for _call in self:
- if len(item) != len(_call):
- continue
+ assert len(item) == len(_call)
if all([
expected == actual
for expected, actual in zip(item, _call)
@@ -1726,7 +1730,8 @@ def patch(
"as"; very useful if `patch` is creating a mock object for you.
`patch` takes arbitrary keyword arguments. These will be passed to
- the `Mock` (or `new_callable`) on construction.
+ `AsyncMock` if the patched object is asynchronous, to `MagicMock`
+ otherwise or to `new_callable` if specified.
`patch.dict(...)`, `patch.multiple(...)` and `patch.object(...)` are
available for alternate use-cases.
@@ -1850,11 +1855,27 @@ class _patch_dict(object):
def __exit__(self, *args):
"""Unpatch the dict."""
- self._unpatch_dict()
+ if self._original is not None:
+ self._unpatch_dict()
return False
- start = __enter__
- stop = __exit__
+
+ def start(self):
+ """Activate a patch, returning any created mock."""
+ result = self.__enter__()
+ _patch._active_patches.append(self)
+ return result
+
+
+ def stop(self):
+ """Stop an active patch."""
+ try:
+ _patch._active_patches.remove(self)
+ except ValueError:
+ # If the patch hasn't been started this will fail
+ pass
+
+ return self.__exit__()
def _clear_dict(in_dict):
@@ -2013,6 +2034,12 @@ _side_effect_methods = {
def _set_return_value(mock, method, name):
+ # If _mock_wraps is present then attach it so that wrapped object
+ # is used for return value is used when called.
+ if mock._mock_wraps is not None:
+ method._mock_wraps = getattr(mock._mock_wraps, name)
+ return
+
fixed = _return_values.get(name, DEFAULT)
if fixed is not DEFAULT:
method.return_value = fixed
@@ -2126,7 +2153,7 @@ class AsyncMockMixin(Base):
def __init__(self, /, *args, **kwargs):
super().__init__(*args, **kwargs)
- # asyncio.iscoroutinefunction() checks _is_coroutine property to say if an
+ # iscoroutinefunction() checks _is_coroutine property to say if an
# object is a coroutine. Without this check it looks to see if it is a
# function/method, which in this case it is not (since it is an
# AsyncMock).
@@ -2141,7 +2168,7 @@ class AsyncMockMixin(Base):
self.__dict__['__code__'] = code_mock
async def _execute_mock_call(self, /, *args, **kwargs):
- # This is nearly just like super(), except for sepcial handling
+ # This is nearly just like super(), except for special handling
# of coroutines
_call = self.call_args
@@ -2162,7 +2189,7 @@ class AsyncMockMixin(Base):
raise StopAsyncIteration
if _is_exception(result):
raise result
- elif asyncio.iscoroutinefunction(effect):
+ elif iscoroutinefunction(effect):
result = await effect(*args, **kwargs)
else:
result = effect(*args, **kwargs)
@@ -2174,7 +2201,7 @@ class AsyncMockMixin(Base):
return self.return_value
if self._mock_wraps is not None:
- if asyncio.iscoroutinefunction(self._mock_wraps):
+ if iscoroutinefunction(self._mock_wraps):
return await self._mock_wraps(*args, **kwargs)
return self._mock_wraps(*args, **kwargs)
@@ -2311,7 +2338,7 @@ class AsyncMock(AsyncMockMixin, AsyncMagicMixin, Mock):
recognized as an async function, and the result of a call is an awaitable:
>>> mock = AsyncMock()
- >>> asyncio.iscoroutinefunction(mock)
+ >>> iscoroutinefunction(mock)
True
>>> inspect.isawaitable(mock())
True
@@ -2514,12 +2541,6 @@ class _Call(tuple):
return tuple.__getattribute__(self, attr)
- def count(self, /, *args, **kwargs):
- return self.__getattr__('count')(*args, **kwargs)
-
- def index(self, /, *args, **kwargs):
- return self.__getattr__('index')(*args, **kwargs)
-
def _get_call_arguments(self):
if len(self) == 2:
args, kwargs = self
@@ -2684,7 +2705,7 @@ def create_autospec(spec, spec_set=False, instance=False, _parent=None,
skipfirst = _must_skip(spec, entry, is_type)
kwargs['_eat_self'] = skipfirst
- if asyncio.iscoroutinefunction(original):
+ if iscoroutinefunction(original):
child_klass = AsyncMock
else:
child_klass = MagicMock
@@ -2721,7 +2742,7 @@ def _must_skip(spec, entry, is_type):
continue
if isinstance(result, (staticmethod, classmethod)):
return False
- elif isinstance(getattr(result, '__get__', None), MethodWrapperTypes):
+ elif isinstance(result, FunctionTypes):
# Normal method => skip if looked up on type
# (if looked up on instance, self is already skipped)
return is_type
@@ -2751,10 +2772,6 @@ FunctionTypes = (
type(ANY.__eq__),
)
-MethodWrapperTypes = (
- type(ANY.__eq__.__get__),
-)
-
file_spec = None
@@ -2894,9 +2911,6 @@ class _AsyncIterator:
code_mock.co_flags = inspect.CO_ITERABLE_COROUTINE
self.__dict__['__code__'] = code_mock
- def __aiter__(self):
- return self
-
async def __anext__(self):
try:
return next(self.iterator)
diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py
index c2401c39b91..f855c4dc00b 100644
--- a/Lib/unittest/test/test_case.py
+++ b/Lib/unittest/test/test_case.py
@@ -610,6 +610,15 @@ class Test_TestCase(unittest.TestCase, TestEquality, TestHashing):
'Tests shortDescription() for a method with a longer '
'docstring.')
+ def testShortDescriptionWhitespaceTrimming(self):
+ """
+ Tests shortDescription() whitespace is trimmed, so that the first
+ line of nonwhite-space text becomes the docstring.
+ """
+ self.assertEqual(
+ self.shortDescription(),
+ 'Tests shortDescription() whitespace is trimmed, so that the first')
+
def testAddTypeEqualityFunc(self):
class SadSnake(object):
"""Dummy class for test_addTypeEqualityFunc."""
diff --git a/Lib/unittest/test/testmock/testasync.py b/Lib/unittest/test/testmock/testasync.py
index 149fd4deff1..bf936220cca 100644
--- a/Lib/unittest/test/testmock/testasync.py
+++ b/Lib/unittest/test/testmock/testasync.py
@@ -1,8 +1,12 @@
import asyncio
+import gc
import inspect
import re
import unittest
+from contextlib import contextmanager
+from asyncio import run, iscoroutinefunction
+from unittest import IsolatedAsyncioTestCase
from unittest.mock import (ANY, call, AsyncMock, patch, MagicMock, Mock,
create_autospec, sentinel, _CallList)
@@ -12,40 +16,48 @@ def tearDownModule():
class AsyncClass:
- def __init__(self):
- pass
- async def async_method(self):
- pass
- def normal_method(self):
- pass
+ def __init__(self): pass
+ async def async_method(self): pass
+ def normal_method(self): pass
+
+ @classmethod
+ async def async_class_method(cls): pass
+
+ @staticmethod
+ async def async_static_method(): pass
+
class AwaitableClass:
- def __await__(self):
- yield
+ def __await__(self): yield
-async def async_func():
- pass
+async def async_func(): pass
-async def async_func_args(a, b, *, c):
- pass
+async def async_func_args(a, b, *, c): pass
-def normal_func():
- pass
+def normal_func(): pass
class NormalClass(object):
- def a(self):
- pass
+ def a(self): pass
async_foo_name = f'{__name__}.AsyncClass'
normal_foo_name = f'{__name__}.NormalClass'
+@contextmanager
+def assertNeverAwaited(test):
+ with test.assertWarnsRegex(RuntimeWarning, "was never awaited$"):
+ yield
+ # In non-CPython implementations of Python, this is needed because timely
+ # deallocation is not guaranteed by the garbage collector.
+ gc.collect()
+
+
class AsyncPatchDecoratorTest(unittest.TestCase):
def test_is_coroutine_function_patch(self):
@patch.object(AsyncClass, 'async_method')
def test_async(mock_method):
- self.assertTrue(asyncio.iscoroutinefunction(mock_method))
+ self.assertTrue(iscoroutinefunction(mock_method))
test_async()
def test_is_async_patch(self):
@@ -53,13 +65,13 @@ class AsyncPatchDecoratorTest(unittest.TestCase):
def test_async(mock_method):
m = mock_method()
self.assertTrue(inspect.isawaitable(m))
- asyncio.run(m)
+ run(m)
@patch(f'{async_foo_name}.async_method')
def test_no_parent_attribute(mock_method):
m = mock_method()
self.assertTrue(inspect.isawaitable(m))
- asyncio.run(m)
+ run(m)
test_async()
test_no_parent_attribute()
@@ -71,12 +83,34 @@ class AsyncPatchDecoratorTest(unittest.TestCase):
test_async()
- def test_async_def_patch(self):
- @patch(f"{__name__}.async_func", AsyncMock())
- async def test_async():
- self.assertIsInstance(async_func, AsyncMock)
+ def test_is_AsyncMock_patch_staticmethod(self):
+ @patch.object(AsyncClass, 'async_static_method')
+ def test_async(mock_method):
+ self.assertIsInstance(mock_method, AsyncMock)
- asyncio.run(test_async())
+ test_async()
+
+ def test_is_AsyncMock_patch_classmethod(self):
+ @patch.object(AsyncClass, 'async_class_method')
+ def test_async(mock_method):
+ self.assertIsInstance(mock_method, AsyncMock)
+
+ test_async()
+
+ def test_async_def_patch(self):
+ @patch(f"{__name__}.async_func", return_value=1)
+ @patch(f"{__name__}.async_func_args", return_value=2)
+ async def test_async(func_args_mock, func_mock):
+ self.assertEqual(func_args_mock._mock_name, "async_func_args")
+ self.assertEqual(func_mock._mock_name, "async_func")
+
+ self.assertIsInstance(async_func, AsyncMock)
+ self.assertIsInstance(async_func_args, AsyncMock)
+
+ self.assertEqual(await async_func(), 1)
+ self.assertEqual(await async_func_args(1, 2, c=3), 2)
+
+ run(test_async())
self.assertTrue(inspect.iscoroutinefunction(async_func))
@@ -84,7 +118,7 @@ class AsyncPatchCMTest(unittest.TestCase):
def test_is_async_function_cm(self):
def test_async():
with patch.object(AsyncClass, 'async_method') as mock_method:
- self.assertTrue(asyncio.iscoroutinefunction(mock_method))
+ self.assertTrue(iscoroutinefunction(mock_method))
test_async()
@@ -93,7 +127,7 @@ class AsyncPatchCMTest(unittest.TestCase):
with patch.object(AsyncClass, 'async_method') as mock_method:
m = mock_method()
self.assertTrue(inspect.isawaitable(m))
- asyncio.run(m)
+ run(m)
test_async()
@@ -110,31 +144,31 @@ class AsyncPatchCMTest(unittest.TestCase):
self.assertIsInstance(async_func, AsyncMock)
self.assertTrue(inspect.iscoroutinefunction(async_func))
- asyncio.run(test_async())
+ run(test_async())
class AsyncMockTest(unittest.TestCase):
def test_iscoroutinefunction_default(self):
mock = AsyncMock()
- self.assertTrue(asyncio.iscoroutinefunction(mock))
+ self.assertTrue(iscoroutinefunction(mock))
def test_iscoroutinefunction_function(self):
async def foo(): pass
mock = AsyncMock(foo)
- self.assertTrue(asyncio.iscoroutinefunction(mock))
+ self.assertTrue(iscoroutinefunction(mock))
self.assertTrue(inspect.iscoroutinefunction(mock))
def test_isawaitable(self):
mock = AsyncMock()
m = mock()
self.assertTrue(inspect.isawaitable(m))
- asyncio.run(m)
+ run(m)
self.assertIn('assert_awaited', dir(mock))
def test_iscoroutinefunction_normal_function(self):
def foo(): pass
mock = AsyncMock(foo)
- self.assertTrue(asyncio.iscoroutinefunction(mock))
+ self.assertTrue(iscoroutinefunction(mock))
self.assertTrue(inspect.iscoroutinefunction(mock))
def test_future_isfuture(self):
@@ -180,9 +214,9 @@ class AsyncAutospecTest(unittest.TestCase):
self.assertEqual(spec.await_args_list, [])
spec.assert_not_awaited()
- asyncio.run(main())
+ run(main())
- self.assertTrue(asyncio.iscoroutinefunction(spec))
+ self.assertTrue(iscoroutinefunction(spec))
self.assertTrue(asyncio.iscoroutine(awaitable))
self.assertEqual(spec.await_count, 1)
self.assertEqual(spec.await_args, call(1, 2, c=3))
@@ -203,7 +237,7 @@ class AsyncAutospecTest(unittest.TestCase):
awaitable = mock_method(1, 2, c=3)
self.assertIsInstance(mock_method.mock, AsyncMock)
- self.assertTrue(asyncio.iscoroutinefunction(mock_method))
+ self.assertTrue(iscoroutinefunction(mock_method))
self.assertTrue(asyncio.iscoroutine(awaitable))
self.assertTrue(inspect.isawaitable(awaitable))
@@ -228,7 +262,7 @@ class AsyncAutospecTest(unittest.TestCase):
self.assertIsNone(mock_method.await_args)
self.assertEqual(mock_method.await_args_list, [])
- asyncio.run(test_async())
+ run(test_async())
class AsyncSpecTest(unittest.TestCase):
@@ -251,8 +285,7 @@ class AsyncSpecTest(unittest.TestCase):
def inner_test(mock_type):
async_mock = mock_type(spec=async_func)
self.assertIsInstance(async_mock, mock_type)
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
self.assertTrue(inspect.isawaitable(async_mock()))
sync_mock = mock_type(spec=normal_func)
@@ -266,8 +299,7 @@ class AsyncSpecTest(unittest.TestCase):
def inner_test(mock_type):
async_mock = mock_type(async_func)
self.assertIsInstance(async_mock, mock_type)
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
self.assertTrue(inspect.isawaitable(async_mock()))
sync_mock = mock_type(normal_func)
@@ -282,14 +314,14 @@ class AsyncSpecTest(unittest.TestCase):
self.assertIsInstance(mock, AsyncMock)
m = mock()
self.assertTrue(inspect.isawaitable(m))
- asyncio.run(m)
+ run(m)
def test_spec_as_normal_positional_AsyncMock(self):
mock = AsyncMock(normal_func)
self.assertIsInstance(mock, AsyncMock)
m = mock()
self.assertTrue(inspect.isawaitable(m))
- asyncio.run(m)
+ run(m)
def test_spec_async_mock(self):
@patch.object(AsyncClass, 'async_method', spec=True)
@@ -339,13 +371,13 @@ class AsyncSpecSetTest(unittest.TestCase):
def test_is_async_AsyncMock(self):
mock = AsyncMock(spec_set=AsyncClass.async_method)
- self.assertTrue(asyncio.iscoroutinefunction(mock))
+ self.assertTrue(iscoroutinefunction(mock))
self.assertIsInstance(mock, AsyncMock)
def test_is_child_AsyncMock(self):
mock = MagicMock(spec_set=AsyncClass)
- self.assertTrue(asyncio.iscoroutinefunction(mock.async_method))
- self.assertFalse(asyncio.iscoroutinefunction(mock.normal_method))
+ self.assertTrue(iscoroutinefunction(mock.async_method))
+ self.assertFalse(iscoroutinefunction(mock.normal_method))
self.assertIsInstance(mock.async_method, AsyncMock)
self.assertIsInstance(mock.normal_method, MagicMock)
self.assertIsInstance(mock, MagicMock)
@@ -358,10 +390,9 @@ class AsyncSpecSetTest(unittest.TestCase):
self.assertIsInstance(cm, MagicMock)
-class AsyncArguments(unittest.IsolatedAsyncioTestCase):
+class AsyncArguments(IsolatedAsyncioTestCase):
async def test_add_return_value(self):
- async def addition(self, var):
- return var + 1
+ async def addition(self, var): pass
mock = AsyncMock(addition, return_value=10)
output = await mock(5)
@@ -369,28 +400,45 @@ class AsyncArguments(unittest.IsolatedAsyncioTestCase):
self.assertEqual(output, 10)
async def test_add_side_effect_exception(self):
- async def addition(var):
- return var + 1
+ async def addition(var): pass
mock = AsyncMock(addition, side_effect=Exception('err'))
with self.assertRaises(Exception):
await mock(5)
- async def test_add_side_effect_function(self):
+ async def test_add_side_effect_coroutine(self):
async def addition(var):
return var + 1
mock = AsyncMock(side_effect=addition)
result = await mock(5)
self.assertEqual(result, 6)
+ async def test_add_side_effect_normal_function(self):
+ def addition(var):
+ return var + 1
+ mock = AsyncMock(side_effect=addition)
+ result = await mock(5)
+ self.assertEqual(result, 6)
+
async def test_add_side_effect_iterable(self):
vals = [1, 2, 3]
mock = AsyncMock(side_effect=vals)
for item in vals:
- self.assertEqual(item, await mock())
+ self.assertEqual(await mock(), item)
with self.assertRaises(StopAsyncIteration) as e:
await mock()
+ async def test_add_side_effect_exception_iterable(self):
+ class SampleException(Exception):
+ pass
+
+ vals = [1, SampleException("foo")]
+ mock = AsyncMock(side_effect=vals)
+ self.assertEqual(await mock(), 1)
+
+ with self.assertRaises(SampleException) as e:
+ await mock()
+
async def test_return_value_AsyncMock(self):
value = AsyncMock(return_value=10)
mock = AsyncMock(return_value=value)
@@ -437,6 +485,21 @@ class AsyncArguments(unittest.IsolatedAsyncioTestCase):
mock.assert_awaited()
self.assertTrue(ran)
+ async def test_wraps_normal_function(self):
+ value = 1
+
+ ran = False
+ def inner():
+ nonlocal ran
+ ran = True
+ return value
+
+ mock = AsyncMock(wraps=inner)
+ result = await mock()
+ self.assertEqual(result, value)
+ mock.assert_awaited()
+ self.assertTrue(ran)
+
class AsyncMagicMethods(unittest.TestCase):
def test_async_magic_methods_return_async_mocks(self):
m_mock = MagicMock()
@@ -472,24 +535,20 @@ class AsyncMagicMethods(unittest.TestCase):
self.assertIsInstance(m_mock.__aenter__, AsyncMock)
self.assertIsInstance(m_mock.__aexit__, AsyncMock)
# AsyncMocks are also coroutine functions
- self.assertTrue(asyncio.iscoroutinefunction(m_mock.__aenter__))
- self.assertTrue(asyncio.iscoroutinefunction(m_mock.__aexit__))
+ self.assertTrue(iscoroutinefunction(m_mock.__aenter__))
+ self.assertTrue(iscoroutinefunction(m_mock.__aexit__))
class AsyncContextManagerTest(unittest.TestCase):
class WithAsyncContextManager:
- async def __aenter__(self, *args, **kwargs):
- return self
+ async def __aenter__(self, *args, **kwargs): pass
- async def __aexit__(self, *args, **kwargs):
- pass
+ async def __aexit__(self, *args, **kwargs): pass
class WithSyncContextManager:
- def __enter__(self, *args, **kwargs):
- return self
+ def __enter__(self, *args, **kwargs): pass
- def __exit__(self, *args, **kwargs):
- pass
+ def __exit__(self, *args, **kwargs): pass
class ProductionCode:
# Example real-world(ish) code
@@ -510,7 +569,7 @@ class AsyncContextManagerTest(unittest.TestCase):
response.json = AsyncMock(return_value={'json': 123})
cm.__aenter__.return_value = response
pc.session.post.return_value = cm
- result = asyncio.run(pc.main())
+ result = run(pc.main())
self.assertEqual(result, {'json': 123})
for mock_type in [AsyncMock, MagicMock]:
@@ -529,7 +588,7 @@ class AsyncContextManagerTest(unittest.TestCase):
called = True
return result
- cm_result = asyncio.run(use_context_manager())
+ cm_result = run(use_context_manager())
self.assertTrue(called)
self.assertTrue(cm_mock.__aenter__.called)
self.assertTrue(cm_mock.__aexit__.called)
@@ -554,7 +613,7 @@ class AsyncContextManagerTest(unittest.TestCase):
async with mock_instance as result:
return result
- self.assertIs(asyncio.run(use_context_manager()), expected_result)
+ self.assertIs(run(use_context_manager()), expected_result)
def test_mock_customize_async_context_manager_with_coroutine(self):
enter_called = False
@@ -578,7 +637,7 @@ class AsyncContextManagerTest(unittest.TestCase):
async with mock_instance:
pass
- asyncio.run(use_context_manager())
+ run(use_context_manager())
self.assertTrue(enter_called)
self.assertTrue(exit_called)
@@ -590,7 +649,7 @@ class AsyncContextManagerTest(unittest.TestCase):
instance = self.WithAsyncContextManager()
mock_instance = MagicMock(instance)
with self.assertRaises(TypeError):
- asyncio.run(raise_in(mock_instance))
+ run(raise_in(mock_instance))
class AsyncIteratorTest(unittest.TestCase):
@@ -598,23 +657,16 @@ class AsyncIteratorTest(unittest.TestCase):
def __init__(self):
self.items = ["foo", "NormalFoo", "baz"]
- def __aiter__(self):
- return self
+ def __aiter__(self): pass
- async def __anext__(self):
- try:
- return self.items.pop()
- except IndexError:
- pass
-
- raise StopAsyncIteration
+ async def __anext__(self): pass
def test_aiter_set_return_value(self):
mock_iter = AsyncMock(name="tester")
mock_iter.__aiter__.return_value = [1, 2, 3]
async def main():
return [i async for i in mock_iter]
- result = asyncio.run(main())
+ result = run(main())
self.assertEqual(result, [1, 2, 3])
def test_mock_aiter_and_anext_asyncmock(self):
@@ -623,11 +675,11 @@ class AsyncIteratorTest(unittest.TestCase):
mock_instance = mock_type(instance)
# Check that the mock and the real thing bahave the same
# __aiter__ is not actually async, so not a coroutinefunction
- self.assertFalse(asyncio.iscoroutinefunction(instance.__aiter__))
- self.assertFalse(asyncio.iscoroutinefunction(mock_instance.__aiter__))
+ self.assertFalse(iscoroutinefunction(instance.__aiter__))
+ self.assertFalse(iscoroutinefunction(mock_instance.__aiter__))
# __anext__ is async
- self.assertTrue(asyncio.iscoroutinefunction(instance.__anext__))
- self.assertTrue(asyncio.iscoroutinefunction(mock_instance.__anext__))
+ self.assertTrue(iscoroutinefunction(instance.__anext__))
+ self.assertTrue(iscoroutinefunction(mock_instance.__anext__))
for mock_type in [AsyncMock, MagicMock]:
with self.subTest(f"test aiter and anext corourtine with {mock_type}"):
@@ -645,18 +697,18 @@ class AsyncIteratorTest(unittest.TestCase):
expected = ["FOO", "BAR", "BAZ"]
def test_default(mock_type):
mock_instance = mock_type(self.WithAsyncIterator())
- self.assertEqual(asyncio.run(iterate(mock_instance)), [])
+ self.assertEqual(run(iterate(mock_instance)), [])
def test_set_return_value(mock_type):
mock_instance = mock_type(self.WithAsyncIterator())
mock_instance.__aiter__.return_value = expected[:]
- self.assertEqual(asyncio.run(iterate(mock_instance)), expected)
+ self.assertEqual(run(iterate(mock_instance)), expected)
def test_set_return_value_iter(mock_type):
mock_instance = mock_type(self.WithAsyncIterator())
mock_instance.__aiter__.return_value = iter(expected[:])
- self.assertEqual(asyncio.run(iterate(mock_instance)), expected)
+ self.assertEqual(run(iterate(mock_instance)), expected)
for mock_type in [AsyncMock, MagicMock]:
with self.subTest(f"default value with {mock_type}"):
@@ -681,10 +733,9 @@ class AsyncMockAssert(unittest.TestCase):
def test_assert_called_but_not_awaited(self):
mock = AsyncMock(AsyncClass)
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
mock.async_method()
- self.assertTrue(asyncio.iscoroutinefunction(mock.async_method))
+ self.assertTrue(iscoroutinefunction(mock.async_method))
mock.async_method.assert_called()
mock.async_method.assert_called_once()
mock.async_method.assert_called_once_with()
@@ -702,7 +753,7 @@ class AsyncMockAssert(unittest.TestCase):
with self.assertRaises(AssertionError):
mock.async_method.assert_awaited()
- asyncio.run(self._await_coroutine(mock_coroutine))
+ run(self._await_coroutine(mock_coroutine))
# Assert we haven't re-called the function
mock.async_method.assert_called_once()
mock.async_method.assert_awaited()
@@ -716,21 +767,21 @@ class AsyncMockAssert(unittest.TestCase):
with self.assertRaises(AssertionError):
self.mock.assert_called()
- asyncio.run(self._runnable_test())
+ run(self._runnable_test())
self.mock.assert_called_once()
self.mock.assert_awaited_once()
def test_assert_called_twice_and_awaited_once(self):
mock = AsyncMock(AsyncClass)
coroutine = mock.async_method()
- with self.assertWarns(RuntimeWarning):
- # The first call will be awaited so no warning there
- # But this call will never get awaited, so it will warn here
+ # The first call will be awaited so no warning there
+ # But this call will never get awaited, so it will warn here
+ with assertNeverAwaited(self):
mock.async_method()
with self.assertRaises(AssertionError):
mock.async_method.assert_awaited()
mock.async_method.assert_called()
- asyncio.run(self._await_coroutine(coroutine))
+ run(self._await_coroutine(coroutine))
mock.async_method.assert_awaited()
mock.async_method.assert_awaited_once()
@@ -738,10 +789,10 @@ class AsyncMockAssert(unittest.TestCase):
mock = AsyncMock(AsyncClass)
coroutine = mock.async_method()
mock.async_method.assert_called_once()
- asyncio.run(self._await_coroutine(coroutine))
+ run(self._await_coroutine(coroutine))
with self.assertRaises(RuntimeError):
# Cannot reuse already awaited coroutine
- asyncio.run(self._await_coroutine(coroutine))
+ run(self._await_coroutine(coroutine))
mock.async_method.assert_awaited()
def test_assert_awaited_but_not_called(self):
@@ -751,7 +802,7 @@ class AsyncMockAssert(unittest.TestCase):
self.mock.assert_called()
with self.assertRaises(TypeError):
# You cannot await an AsyncMock, it must be a coroutine
- asyncio.run(self._await_coroutine(self.mock))
+ run(self._await_coroutine(self.mock))
with self.assertRaises(AssertionError):
self.mock.assert_awaited()
@@ -760,38 +811,34 @@ class AsyncMockAssert(unittest.TestCase):
def test_assert_has_calls_not_awaits(self):
kalls = [call('foo')]
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
self.mock('foo')
self.mock.assert_has_calls(kalls)
with self.assertRaises(AssertionError):
self.mock.assert_has_awaits(kalls)
def test_assert_has_mock_calls_on_async_mock_no_spec(self):
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
self.mock()
kalls_empty = [('', (), {})]
self.assertEqual(self.mock.mock_calls, kalls_empty)
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
self.mock('foo')
+ with assertNeverAwaited(self):
self.mock('baz')
mock_kalls = ([call(), call('foo'), call('baz')])
self.assertEqual(self.mock.mock_calls, mock_kalls)
def test_assert_has_mock_calls_on_async_mock_with_spec(self):
a_class_mock = AsyncMock(AsyncClass)
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
a_class_mock.async_method()
kalls_empty = [('', (), {})]
self.assertEqual(a_class_mock.async_method.mock_calls, kalls_empty)
self.assertEqual(a_class_mock.mock_calls, [call.async_method()])
- with self.assertWarns(RuntimeWarning):
- # Will raise a warning because never awaited
+ with assertNeverAwaited(self):
a_class_mock.async_method(1, 2, 3, a=4, b=5)
method_kalls = [call(), call(1, 2, 3, a=4, b=5)]
mock_kalls = [call.async_method(), call.async_method(1, 2, 3, a=4, b=5)]
@@ -799,9 +846,9 @@ class AsyncMockAssert(unittest.TestCase):
self.assertEqual(a_class_mock.mock_calls, mock_kalls)
def test_async_method_calls_recorded(self):
- with self.assertWarns(RuntimeWarning):
- # Will raise warnings because never awaited
+ with assertNeverAwaited(self):
self.mock.something(3, fish=None)
+ with assertNeverAwaited(self):
self.mock.something_else.something(6, cake=sentinel.Cake)
self.assertEqual(self.mock.method_calls, [
@@ -823,19 +870,20 @@ class AsyncMockAssert(unittest.TestCase):
self.assertEqual(attr, [])
assert_attrs(self.mock)
- with self.assertWarns(RuntimeWarning):
- # Will raise warnings because never awaited
+ with assertNeverAwaited(self):
self.mock()
+ with assertNeverAwaited(self):
self.mock(1, 2)
+ with assertNeverAwaited(self):
self.mock(a=3)
self.mock.reset_mock()
assert_attrs(self.mock)
a_mock = AsyncMock(AsyncClass)
- with self.assertWarns(RuntimeWarning):
- # Will raise warnings because never awaited
+ with assertNeverAwaited(self):
a_mock.async_method()
+ with assertNeverAwaited(self):
a_mock.async_method(1, a=3)
a_mock.reset_mock()
@@ -845,30 +893,34 @@ class AsyncMockAssert(unittest.TestCase):
with self.assertRaises(AssertionError):
self.mock.assert_awaited()
- asyncio.run(self._runnable_test())
+ run(self._runnable_test())
self.mock.assert_awaited()
def test_assert_awaited_once(self):
with self.assertRaises(AssertionError):
self.mock.assert_awaited_once()
- asyncio.run(self._runnable_test())
+ run(self._runnable_test())
self.mock.assert_awaited_once()
- asyncio.run(self._runnable_test())
+ run(self._runnable_test())
with self.assertRaises(AssertionError):
self.mock.assert_awaited_once()
def test_assert_awaited_with(self):
- asyncio.run(self._runnable_test())
+ msg = 'Not awaited'
+ with self.assertRaisesRegex(AssertionError, msg):
+ self.mock.assert_awaited_with('foo')
+
+ run(self._runnable_test())
msg = 'expected await not found'
with self.assertRaisesRegex(AssertionError, msg):
self.mock.assert_awaited_with('foo')
- asyncio.run(self._runnable_test('foo'))
+ run(self._runnable_test('foo'))
self.mock.assert_awaited_with('foo')
- asyncio.run(self._runnable_test('SomethingElse'))
+ run(self._runnable_test('SomethingElse'))
with self.assertRaises(AssertionError):
self.mock.assert_awaited_with('foo')
@@ -876,10 +928,10 @@ class AsyncMockAssert(unittest.TestCase):
with self.assertRaises(AssertionError):
self.mock.assert_awaited_once_with('foo')
- asyncio.run(self._runnable_test('foo'))
+ run(self._runnable_test('foo'))
self.mock.assert_awaited_once_with('foo')
- asyncio.run(self._runnable_test('foo'))
+ run(self._runnable_test('foo'))
with self.assertRaises(AssertionError):
self.mock.assert_awaited_once_with('foo')
@@ -887,14 +939,14 @@ class AsyncMockAssert(unittest.TestCase):
with self.assertRaises(AssertionError):
self.mock.assert_any_await('foo')
- asyncio.run(self._runnable_test('baz'))
+ run(self._runnable_test('baz'))
with self.assertRaises(AssertionError):
self.mock.assert_any_await('foo')
- asyncio.run(self._runnable_test('foo'))
+ run(self._runnable_test('foo'))
self.mock.assert_any_await('foo')
- asyncio.run(self._runnable_test('SomethingElse'))
+ run(self._runnable_test('SomethingElse'))
self.mock.assert_any_await('foo')
def test_assert_has_awaits_no_order(self):
@@ -904,25 +956,25 @@ class AsyncMockAssert(unittest.TestCase):
self.mock.assert_has_awaits(calls)
self.assertEqual(len(cm.exception.args), 1)
- asyncio.run(self._runnable_test('foo'))
+ run(self._runnable_test('foo'))
with self.assertRaises(AssertionError):
self.mock.assert_has_awaits(calls)
- asyncio.run(self._runnable_test('foo'))
+ run(self._runnable_test('foo'))
with self.assertRaises(AssertionError):
self.mock.assert_has_awaits(calls)
- asyncio.run(self._runnable_test('baz'))
+ run(self._runnable_test('baz'))
self.mock.assert_has_awaits(calls)
- asyncio.run(self._runnable_test('SomethingElse'))
+ run(self._runnable_test('SomethingElse'))
self.mock.assert_has_awaits(calls)
def test_awaits_asserts_with_any(self):
class Foo:
def __eq__(self, other): pass
- asyncio.run(self._runnable_test(Foo(), 1))
+ run(self._runnable_test(Foo(), 1))
self.mock.assert_has_awaits([call(ANY, 1)])
self.mock.assert_awaited_with(ANY, 1)
@@ -937,7 +989,7 @@ class AsyncMockAssert(unittest.TestCase):
async def _custom_mock_runnable_test(*args):
await mock_with_spec(*args)
- asyncio.run(_custom_mock_runnable_test(Foo(), 1))
+ run(_custom_mock_runnable_test(Foo(), 1))
mock_with_spec.assert_has_awaits([call(ANY, 1)])
mock_with_spec.assert_awaited_with(ANY, 1)
mock_with_spec.assert_any_await(ANY, 1)
@@ -947,24 +999,24 @@ class AsyncMockAssert(unittest.TestCase):
with self.assertRaises(AssertionError):
self.mock.assert_has_awaits(calls, any_order=True)
- asyncio.run(self._runnable_test('baz'))
+ run(self._runnable_test('baz'))
with self.assertRaises(AssertionError):
self.mock.assert_has_awaits(calls, any_order=True)
- asyncio.run(self._runnable_test('bamf'))
+ run(self._runnable_test('bamf'))
with self.assertRaises(AssertionError):
self.mock.assert_has_awaits(calls, any_order=True)
- asyncio.run(self._runnable_test('foo'))
+ run(self._runnable_test('foo'))
self.mock.assert_has_awaits(calls, any_order=True)
- asyncio.run(self._runnable_test('qux'))
+ run(self._runnable_test('qux'))
self.mock.assert_has_awaits(calls, any_order=True)
def test_assert_not_awaited(self):
self.mock.assert_not_awaited()
- asyncio.run(self._runnable_test())
+ run(self._runnable_test())
with self.assertRaises(AssertionError):
self.mock.assert_not_awaited()
@@ -972,7 +1024,7 @@ class AsyncMockAssert(unittest.TestCase):
async def f(x=None): pass
self.mock = AsyncMock(spec=f)
- asyncio.run(self._runnable_test(1))
+ run(self._runnable_test(1))
with self.assertRaisesRegex(
AssertionError,
diff --git a/Lib/unittest/test/testmock/testmagicmethods.py b/Lib/unittest/test/testmock/testmagicmethods.py
index 76b3a560de0..a4feae7e9d3 100644
--- a/Lib/unittest/test/testmock/testmagicmethods.py
+++ b/Lib/unittest/test/testmock/testmagicmethods.py
@@ -1,8 +1,7 @@
-import asyncio
import math
import unittest
import os
-import sys
+from asyncio import iscoroutinefunction
from unittest.mock import AsyncMock, Mock, MagicMock, _magics
@@ -286,8 +285,8 @@ class TestMockingMagicMethods(unittest.TestCase):
self.assertEqual(math.trunc(mock), mock.__trunc__())
self.assertEqual(math.floor(mock), mock.__floor__())
self.assertEqual(math.ceil(mock), mock.__ceil__())
- self.assertTrue(asyncio.iscoroutinefunction(mock.__aexit__))
- self.assertTrue(asyncio.iscoroutinefunction(mock.__aenter__))
+ self.assertTrue(iscoroutinefunction(mock.__aexit__))
+ self.assertTrue(iscoroutinefunction(mock.__aenter__))
self.assertIsInstance(mock.__aenter__, AsyncMock)
self.assertIsInstance(mock.__aexit__, AsyncMock)
@@ -312,8 +311,8 @@ class TestMockingMagicMethods(unittest.TestCase):
self.assertEqual(math.trunc(mock), mock.__trunc__())
self.assertEqual(math.floor(mock), mock.__floor__())
self.assertEqual(math.ceil(mock), mock.__ceil__())
- self.assertTrue(asyncio.iscoroutinefunction(mock.__aexit__))
- self.assertTrue(asyncio.iscoroutinefunction(mock.__aenter__))
+ self.assertTrue(iscoroutinefunction(mock.__aexit__))
+ self.assertTrue(iscoroutinefunction(mock.__aenter__))
self.assertIsInstance(mock.__aenter__, AsyncMock)
self.assertIsInstance(mock.__aexit__, AsyncMock)
@@ -429,7 +428,6 @@ class TestMockingMagicMethods(unittest.TestCase):
self.assertEqual(dir(mock), ['foo'])
- @unittest.skipIf('PyPy' in sys.version, "This fails differently on pypy")
def test_bound_methods(self):
m = Mock()
diff --git a/Lib/unittest/test/testmock/testmock.py b/Lib/unittest/test/testmock/testmock.py
index 01bc4794446..9b9e066cc54 100644
--- a/Lib/unittest/test/testmock/testmock.py
+++ b/Lib/unittest/test/testmock/testmock.py
@@ -715,6 +715,53 @@ class MockTest(unittest.TestCase):
self.assertRaises(StopIteration, mock.method)
+ def test_magic_method_wraps_dict(self):
+ data = {'foo': 'bar'}
+
+ wrapped_dict = MagicMock(wraps=data)
+ self.assertEqual(wrapped_dict.get('foo'), 'bar')
+ self.assertEqual(wrapped_dict['foo'], 'bar')
+ self.assertTrue('foo' in wrapped_dict)
+
+ # return_value is non-sentinel and takes precedence over wrapped value.
+ wrapped_dict.get.return_value = 'return_value'
+ self.assertEqual(wrapped_dict.get('foo'), 'return_value')
+
+ # return_value is sentinel and hence wrapped value is returned.
+ wrapped_dict.get.return_value = sentinel.DEFAULT
+ self.assertEqual(wrapped_dict.get('foo'), 'bar')
+
+ self.assertEqual(wrapped_dict.get('baz'), None)
+ with self.assertRaises(KeyError):
+ wrapped_dict['baz']
+ self.assertFalse('bar' in wrapped_dict)
+
+ data['baz'] = 'spam'
+ self.assertEqual(wrapped_dict.get('baz'), 'spam')
+ self.assertEqual(wrapped_dict['baz'], 'spam')
+ self.assertTrue('baz' in wrapped_dict)
+
+ del data['baz']
+ self.assertEqual(wrapped_dict.get('baz'), None)
+
+
+ def test_magic_method_wraps_class(self):
+
+ class Foo:
+
+ def __getitem__(self, index):
+ return index
+
+ def __custom_method__(self):
+ return "foo"
+
+
+ klass = MagicMock(wraps=Foo)
+ obj = klass()
+ self.assertEqual(obj.__getitem__(2), 2)
+ self.assertEqual(obj.__custom_method__(), "foo")
+
+
def test_exceptional_side_effect(self):
mock = Mock(side_effect=AttributeError)
self.assertRaises(AttributeError, mock)
@@ -1636,11 +1683,23 @@ class MockTest(unittest.TestCase):
self.assertNotEqual(m.side_effect, None)
def test_reset_sideeffect(self):
- m = Mock(return_value=10, side_effect=[2,3])
+ m = Mock(return_value=10, side_effect=[2, 3])
m.reset_mock(side_effect=True)
self.assertEqual(m.return_value, 10)
self.assertEqual(m.side_effect, None)
+ def test_reset_return_with_children(self):
+ m = MagicMock(f=MagicMock(return_value=1))
+ self.assertEqual(m.f(), 1)
+ m.reset_mock(return_value=True)
+ self.assertNotEqual(m.f(), 1)
+
+ def test_reset_return_with_children_side_effect(self):
+ m = MagicMock(f=MagicMock(side_effect=[2, 3]))
+ self.assertNotEqual(m.f.side_effect, None)
+ m.reset_mock(side_effect=True)
+ self.assertEqual(m.f.side_effect, None)
+
def test_mock_add_spec(self):
class _One(object):
one = 1
@@ -1809,6 +1868,11 @@ class MockTest(unittest.TestCase):
with self.assertRaises(StopIteration):
next(f1)
+ def test_mock_open_next_with_readline_with_return_value(self):
+ mopen = mock.mock_open(read_data='foo\nbarn')
+ mopen.return_value.readline.return_value = 'abc'
+ self.assertEqual('abc', next(mopen()))
+
def test_mock_open_write(self):
# Test exception in file writing write()
mock_namedtemp = mock.mock_open(mock.MagicMock(name='JLV'))
@@ -1922,6 +1986,35 @@ class MockTest(unittest.TestCase):
self.assertEqual(mock_func.mock._extract_mock_name(), 'mock.child')
+ def test_attach_mock_patch_autospec_signature(self):
+ with mock.patch(f'{__name__}.Something.meth', autospec=True) as mocked:
+ manager = Mock()
+ manager.attach_mock(mocked, 'attach_meth')
+ obj = Something()
+ obj.meth(1, 2, 3, d=4)
+ manager.assert_has_calls([call.attach_meth(mock.ANY, 1, 2, 3, d=4)])
+ obj.meth.assert_has_calls([call(mock.ANY, 1, 2, 3, d=4)])
+ mocked.assert_has_calls([call(mock.ANY, 1, 2, 3, d=4)])
+
+ with mock.patch(f'{__name__}.something', autospec=True) as mocked:
+ manager = Mock()
+ manager.attach_mock(mocked, 'attach_func')
+ something(1)
+ manager.assert_has_calls([call.attach_func(1)])
+ something.assert_has_calls([call(1)])
+ mocked.assert_has_calls([call(1)])
+
+ with mock.patch(f'{__name__}.Something', autospec=True) as mocked:
+ manager = Mock()
+ manager.attach_mock(mocked, 'attach_obj')
+ obj = Something()
+ obj.meth(1, 2, 3, d=4)
+ manager.assert_has_calls([call.attach_obj(),
+ call.attach_obj().meth(1, 2, 3, d=4)])
+ obj.meth.assert_has_calls([call(1, 2, 3, d=4)])
+ mocked.assert_has_calls([call(), call().meth(1, 2, 3, d=4)])
+
+
def test_attribute_deletion(self):
for mock in (Mock(), MagicMock(), NonCallableMagicMock(),
NonCallableMock()):
diff --git a/Lib/unittest/test/testmock/testpatch.py b/Lib/unittest/test/testmock/testpatch.py
index e065a2c35fb..f1bc0e1cd40 100644
--- a/Lib/unittest/test/testmock/testpatch.py
+++ b/Lib/unittest/test/testmock/testpatch.py
@@ -4,6 +4,7 @@
import os
import sys
+from collections import OrderedDict
import unittest
from unittest.test.testmock import support
@@ -769,6 +770,14 @@ class PatchTest(unittest.TestCase):
self.assertEqual(d, original)
+ def test_patch_dict_stop_without_start(self):
+ d = {'foo': 'bar'}
+ original = d.copy()
+ patcher = patch.dict(d, [('spam', 'eggs')], clear=True)
+ self.assertEqual(patcher.stop(), False)
+ self.assertEqual(d, original)
+
+
def test_patch_dict_class_decorator(self):
this = self
d = {'spam': 'eggs'}
@@ -1807,6 +1816,56 @@ class PatchTest(unittest.TestCase):
self.assertEqual(stopped, ["three", "two", "one"])
+ def test_patch_dict_stopall(self):
+ dic1 = {}
+ dic2 = {1: 'a'}
+ dic3 = {1: 'A', 2: 'B'}
+ origdic1 = dic1.copy()
+ origdic2 = dic2.copy()
+ origdic3 = dic3.copy()
+ patch.dict(dic1, {1: 'I', 2: 'II'}).start()
+ patch.dict(dic2, {2: 'b'}).start()
+
+ @patch.dict(dic3)
+ def patched():
+ del dic3[1]
+
+ patched()
+ self.assertNotEqual(dic1, origdic1)
+ self.assertNotEqual(dic2, origdic2)
+ self.assertEqual(dic3, origdic3)
+
+ patch.stopall()
+
+ self.assertEqual(dic1, origdic1)
+ self.assertEqual(dic2, origdic2)
+ self.assertEqual(dic3, origdic3)
+
+
+ def test_patch_and_patch_dict_stopall(self):
+ original_unlink = os.unlink
+ original_chdir = os.chdir
+ dic1 = {}
+ dic2 = {1: 'A', 2: 'B'}
+ origdic1 = dic1.copy()
+ origdic2 = dic2.copy()
+
+ patch('os.unlink', something).start()
+ patch('os.chdir', something_else).start()
+ patch.dict(dic1, {1: 'I', 2: 'II'}).start()
+ patch.dict(dic2).start()
+ del dic2[1]
+
+ self.assertIsNot(os.unlink, original_unlink)
+ self.assertIsNot(os.chdir, original_chdir)
+ self.assertNotEqual(dic1, origdic1)
+ self.assertNotEqual(dic2, origdic2)
+ patch.stopall()
+ self.assertIs(os.unlink, original_unlink)
+ self.assertIs(os.chdir, original_chdir)
+ self.assertEqual(dic1, origdic1)
+ self.assertEqual(dic2, origdic2)
+
def test_special_attrs(self):
def foo(x=0):
@@ -1834,6 +1893,25 @@ class PatchTest(unittest.TestCase):
self.assertEqual(foo(), 1)
self.assertEqual(foo(), 0)
+ def test_patch_orderdict(self):
+ foo = OrderedDict()
+ foo['a'] = object()
+ foo['b'] = 'python'
+
+ original = foo.copy()
+ update_values = list(zip('cdefghijklmnopqrstuvwxyz', range(26)))
+ patched_values = list(foo.items()) + update_values
+
+ with patch.dict(foo, OrderedDict(update_values)):
+ self.assertEqual(list(foo.items()), patched_values)
+
+ self.assertEqual(foo, original)
+
+ with patch.dict(foo, update_values):
+ self.assertEqual(list(foo.items()), patched_values)
+
+ self.assertEqual(foo, original)
+
def test_dotted_but_module_not_loaded(self):
# This exercises the AttributeError branch of _dot_lookup.
diff --git a/Lib/urllib/parse.py b/Lib/urllib/parse.py
index 31fd7e16ee7..779278bac59 100644
--- a/Lib/urllib/parse.py
+++ b/Lib/urllib/parse.py
@@ -366,9 +366,23 @@ del _fix_result_transcoding
def urlparse(url, scheme='', allow_fragments=True):
"""Parse a URL into 6 components:
:///;?#
- Return a 6-tuple: (scheme, netloc, path, params, query, fragment).
- Note that we don't break the components up in smaller bits
- (e.g. netloc is a single string) and we don't expand % escapes."""
+
+ The result is a named 6-tuple with fields corresponding to the
+ above. It is either a ParseResult or ParseResultBytes object,
+ depending on the type of the url parameter.
+
+ The username, password, hostname, and port sub-components of netloc
+ can also be accessed as attributes of the returned object.
+
+ The scheme argument provides the default value of the scheme
+ component when no scheme is found in url.
+
+ If allow_fragments is False, no attempt is made to separate the
+ fragment component from the previous component, which can be either
+ path or query.
+
+ Note that % escapes are not expanded.
+ """
url, scheme, _coerce_result = _coerce_args(url, scheme)
splitresult = urlsplit(url, scheme, allow_fragments)
scheme, netloc, url, query, fragment = splitresult
@@ -417,9 +431,24 @@ def _checknetloc(netloc):
def urlsplit(url, scheme='', allow_fragments=True):
"""Parse a URL into 5 components:
:///?#
- Return a 5-tuple: (scheme, netloc, path, query, fragment).
- Note that we don't break the components up in smaller bits
- (e.g. netloc is a single string) and we don't expand % escapes."""
+
+ The result is a named 5-tuple with fields corresponding to the
+ above. It is either a SplitResult or SplitResultBytes object,
+ depending on the type of the url parameter.
+
+ The username, password, hostname, and port sub-components of netloc
+ can also be accessed as attributes of the returned object.
+
+ The scheme argument provides the default value of the scheme
+ component when no scheme is found in url.
+
+ If allow_fragments is False, no attempt is made to separate the
+ fragment component from the previous component, which can be either
+ path or query.
+
+ Note that % escapes are not expanded.
+ """
+
url, scheme, _coerce_result = _coerce_args(url, scheme)
allow_fragments = bool(allow_fragments)
key = url, scheme, allow_fragments, type(url), type(scheme)
@@ -1056,9 +1085,9 @@ def _splitport(host):
"""splitport('host:port') --> 'host', 'port'."""
global _portprog
if _portprog is None:
- _portprog = re.compile('(.*):([0-9]*)$', re.DOTALL)
+ _portprog = re.compile('(.*):([0-9]*)', re.DOTALL)
- match = _portprog.match(host)
+ match = _portprog.fullmatch(host)
if match:
host, port = match.groups()
if port:
diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py
index 39553d809a3..a6d350a97a4 100644
--- a/Lib/urllib/request.py
+++ b/Lib/urllib/request.py
@@ -2492,24 +2492,26 @@ def proxy_bypass_environment(host, proxies=None):
try:
no_proxy = proxies['no']
except KeyError:
- return 0
+ return False
# '*' is special case for always bypass
if no_proxy == '*':
- return 1
+ return True
+ host = host.lower()
# strip port off host
hostonly, port = _splitport(host)
# check if the host ends with any of the DNS suffixes
- no_proxy_list = [proxy.strip() for proxy in no_proxy.split(',')]
- for name in no_proxy_list:
+ for name in no_proxy.split(','):
+ name = name.strip()
if name:
name = name.lstrip('.') # ignore leading dots
- name = re.escape(name)
- pattern = r'(.+\.)?%s$' % name
- if (re.match(pattern, hostonly, re.I)
- or re.match(pattern, host, re.I)):
- return 1
+ name = name.lower()
+ if hostonly == name or host == name:
+ return True
+ name = '.' + name
+ if hostonly.endswith(name) or host.endswith(name):
+ return True
# otherwise, don't bypass
- return 0
+ return False
# This code tests an OSX specific data structure but is testable on all
@@ -2635,7 +2637,7 @@ elif os.name == 'nt':
for p in proxyServer.split(';'):
protocol, address = p.split('=', 1)
# See if address has a type:// prefix
- if not re.match('^([^/:]+)://', address):
+ if not re.match('(?:[^/:]+)://', address):
address = '%s://%s' % (protocol, address)
proxies[protocol] = address
else:
diff --git a/Lib/uuid.py b/Lib/uuid.py
index 6a436d371a3..224a766ff22 100644
--- a/Lib/uuid.py
+++ b/Lib/uuid.py
@@ -757,7 +757,7 @@ else:
_node = None
-def getnode(*, getters=None):
+def getnode():
"""Get the hardware address as a 48-bit positive integer.
The first time this runs, it may launch a separate program, which could
diff --git a/Lib/venv/__init__.py b/Lib/venv/__init__.py
index 81cb1d13e21..a220ef784c1 100644
--- a/Lib/venv/__init__.py
+++ b/Lib/venv/__init__.py
@@ -51,6 +51,8 @@ class EnvBuilder:
self.symlinks = symlinks
self.upgrade = upgrade
self.with_pip = with_pip
+ if prompt == '.': # see bpo-38901
+ prompt = os.path.basename(os.getcwd())
self.prompt = prompt
self.upgrade_deps = upgrade_deps
diff --git a/Lib/venv/scripts/common/Activate.ps1 b/Lib/venv/scripts/common/Activate.ps1
index 699c84097f1..98cb1b85d11 100644
--- a/Lib/venv/scripts/common/Activate.ps1
+++ b/Lib/venv/scripts/common/Activate.ps1
@@ -168,7 +168,6 @@ if ($VenvDir) {
} else {
Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
$VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
- $VenvDir = $VenvDir.Insert($VenvDir.Length, "/")
Write-Verbose "VenvDir=$VenvDir"
}
diff --git a/Lib/venv/scripts/common/activate b/Lib/venv/scripts/common/activate
index b1b4625fddd..45af3536aa1 100644
--- a/Lib/venv/scripts/common/activate
+++ b/Lib/venv/scripts/common/activate
@@ -18,7 +18,7 @@ deactivate () {
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
- hash -r
+ hash -r 2> /dev/null
fi
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
@@ -62,5 +62,5 @@ fi
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
- hash -r
+ hash -r 2> /dev/null
fi
diff --git a/Lib/warnings.py b/Lib/warnings.py
index 00f740ca3a9..691ccddfa45 100644
--- a/Lib/warnings.py
+++ b/Lib/warnings.py
@@ -211,7 +211,6 @@ def _processoptions(args):
# Helper for _processoptions()
def _setoption(arg):
- import re
parts = arg.split(':')
if len(parts) > 5:
raise _OptionError("too many fields (max 5): %r" % (arg,))
@@ -220,11 +219,13 @@ def _setoption(arg):
action, message, category, module, lineno = [s.strip()
for s in parts]
action = _getaction(action)
- message = re.escape(message)
category = _getcategory(category)
- module = re.escape(module)
+ if message or module:
+ import re
+ if message:
+ message = re.escape(message)
if module:
- module = module + '$'
+ module = re.escape(module) + r'\Z'
if lineno:
try:
lineno = int(lineno)
@@ -248,26 +249,21 @@ def _getaction(action):
# Helper for _setoption()
def _getcategory(category):
- import re
if not category:
return Warning
- if re.match("^[a-zA-Z0-9_]+$", category):
- try:
- cat = eval(category)
- except NameError:
- raise _OptionError("unknown warning category: %r" % (category,)) from None
+ if '.' not in category:
+ import builtins as m
+ klass = category
else:
- i = category.rfind(".")
- module = category[:i]
- klass = category[i+1:]
+ module, _, klass = category.rpartition('.')
try:
m = __import__(module, None, None, [klass])
except ImportError:
raise _OptionError("invalid module name: %r" % (module,)) from None
- try:
- cat = getattr(m, klass)
- except AttributeError:
- raise _OptionError("unknown warning category: %r" % (category,)) from None
+ try:
+ cat = getattr(m, klass)
+ except AttributeError:
+ raise _OptionError("unknown warning category: %r" % (category,)) from None
if not issubclass(cat, Warning):
raise _OptionError("invalid warning category: %r" % (category,))
return cat
diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py
index 0af36c4301d..1ef179a91a6 100755
--- a/Lib/webbrowser.py
+++ b/Lib/webbrowser.py
@@ -87,7 +87,7 @@ def open_new_tab(url):
def _synthesize(browser, *, preferred=False):
- """Attempt to synthesize a controller base on existing controllers.
+ """Attempt to synthesize a controller based on existing controllers.
This is useful to create a controller when a user specifies a path to
an entry in the BROWSER environment variable -- we can copy a general
diff --git a/Lib/zipfile.py b/Lib/zipfile.py
index e1d07f2a523..4510fac250b 100644
--- a/Lib/zipfile.py
+++ b/Lib/zipfile.py
@@ -16,6 +16,8 @@ import struct
import sys
import threading
import time
+import contextlib
+from collections import OrderedDict
try:
import zlib # We may need its compression method
@@ -1867,25 +1869,15 @@ class ZipFile:
extract_version = max(min_version, zinfo.extract_version)
create_version = max(min_version, zinfo.create_version)
- try:
- filename, flag_bits = zinfo._encodeFilenameFlags()
- centdir = struct.pack(structCentralDir,
- stringCentralDir, create_version,
- zinfo.create_system, extract_version, zinfo.reserved,
- flag_bits, zinfo.compress_type, dostime, dosdate,
- zinfo.CRC, compress_size, file_size,
- len(filename), len(extra_data), len(zinfo.comment),
- 0, zinfo.internal_attr, zinfo.external_attr,
- header_offset)
- except DeprecationWarning:
- print((structCentralDir, stringCentralDir, create_version,
- zinfo.create_system, extract_version, zinfo.reserved,
- zinfo.flag_bits, zinfo.compress_type, dostime, dosdate,
- zinfo.CRC, compress_size, file_size,
- len(zinfo.filename), len(extra_data), len(zinfo.comment),
- 0, zinfo.internal_attr, zinfo.external_attr,
- header_offset), file=sys.stderr)
- raise
+ filename, flag_bits = zinfo._encodeFilenameFlags()
+ centdir = struct.pack(structCentralDir,
+ stringCentralDir, create_version,
+ zinfo.create_system, extract_version, zinfo.reserved,
+ flag_bits, zinfo.compress_type, dostime, dosdate,
+ zinfo.CRC, compress_size, file_size,
+ len(filename), len(extra_data), len(zinfo.comment),
+ 0, zinfo.internal_attr, zinfo.external_attr,
+ header_offset)
self.fp.write(centdir)
self.fp.write(filename)
self.fp.write(extra_data)
@@ -2169,6 +2161,79 @@ def _ancestry(path):
path, tail = posixpath.split(path)
+class CompleteDirs(ZipFile):
+ """
+ A ZipFile subclass that ensures that implied directories
+ are always included in the namelist.
+ """
+
+ @staticmethod
+ def _implied_dirs(names):
+ parents = itertools.chain.from_iterable(map(_parents, names))
+ # Deduplicate entries in original order
+ implied_dirs = OrderedDict.fromkeys(
+ p + posixpath.sep for p in parents
+ # Cast names to a set for O(1) lookups
+ if p + posixpath.sep not in set(names)
+ )
+ return implied_dirs
+
+ def namelist(self):
+ names = super(CompleteDirs, self).namelist()
+ return names + list(self._implied_dirs(names))
+
+ def _name_set(self):
+ return set(self.namelist())
+
+ def resolve_dir(self, name):
+ """
+ If the name represents a directory, return that name
+ as a directory (with the trailing slash).
+ """
+ names = self._name_set()
+ dirname = name + '/'
+ dir_match = name not in names and dirname in names
+ return dirname if dir_match else name
+
+ @classmethod
+ def make(cls, source):
+ """
+ Given a source (filename or zipfile), return an
+ appropriate CompleteDirs subclass.
+ """
+ if isinstance(source, CompleteDirs):
+ return source
+
+ if not isinstance(source, ZipFile):
+ return cls(source)
+
+ # Only allow for FastPath when supplied zipfile is read-only
+ if 'r' not in source.mode:
+ cls = CompleteDirs
+
+ res = cls.__new__(cls)
+ vars(res).update(vars(source))
+ return res
+
+
+class FastLookup(CompleteDirs):
+ """
+ ZipFile subclass to ensure implicit
+ dirs exist and are resolved rapidly.
+ """
+ def namelist(self):
+ with contextlib.suppress(AttributeError):
+ return self.__names
+ self.__names = super(FastLookup, self).namelist()
+ return self.__names
+
+ def _name_set(self):
+ with contextlib.suppress(AttributeError):
+ return self.__lookup
+ self.__lookup = super(FastLookup, self)._name_set()
+ return self.__lookup
+
+
class Path:
"""
A pathlib-compatible interface for zip files.
@@ -2237,7 +2302,7 @@ class Path:
__repr = "{self.__class__.__name__}({self.root.filename!r}, {self.at!r})"
def __init__(self, root, at=""):
- self.root = root if isinstance(root, ZipFile) else ZipFile(root)
+ self.root = FastLookup.make(root)
self.at = at
@property
@@ -2269,12 +2334,12 @@ class Path:
return not self.is_dir()
def exists(self):
- return self.at in self._names()
+ return self.at in self.root._name_set()
def iterdir(self):
if not self.is_dir():
raise ValueError("Can't listdir a file")
- subs = map(self._next, self._names())
+ subs = map(self._next, self.root.namelist())
return filter(self._is_child, subs)
def __str__(self):
@@ -2285,25 +2350,10 @@ class Path:
def joinpath(self, add):
next = posixpath.join(self.at, add)
- next_dir = posixpath.join(self.at, add, "")
- names = self._names()
- return self._next(next_dir if next not in names and next_dir in names else next)
+ return self._next(self.root.resolve_dir(next))
__truediv__ = joinpath
- @staticmethod
- def _implied_dirs(names):
- return _unique_everseen(
- parent + "/"
- for name in names
- for parent in _parents(name)
- if parent + "/" not in names
- )
-
- @classmethod
- def _add_implied_dirs(cls, names):
- return names + list(cls._implied_dirs(names))
-
@property
def parent(self):
parent_at = posixpath.dirname(self.at.rstrip('/'))
@@ -2311,9 +2361,6 @@ class Path:
parent_at += '/'
return self._next(parent_at)
- def _names(self):
- return self._add_implied_dirs(self.root.namelist())
-
def main(args=None):
import argparse
@@ -2375,5 +2422,6 @@ def main(args=None):
zippath = ''
addToZip(zf, path, zippath)
+
if __name__ == "__main__":
main()
diff --git a/Mac/BuildScript/resources/License.rtf b/Mac/BuildScript/resources/License.rtf
index 7566cf3b446..25d53386da0 100644
--- a/Mac/BuildScript/resources/License.rtf
+++ b/Mac/BuildScript/resources/License.rtf
@@ -1,5 +1,5 @@
-{\rtf1\ansi\ansicpg1252\cocoartf1671\cocoasubrtf600
-{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;\f2\fmodern\fcharset0 CourierNewPS-BoldMT;
+{\rtf1\ansi\ansicpg1252\cocoartf2511
+\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\fswiss\fcharset0 Helvetica-Bold;\f1\fswiss\fcharset0 Helvetica;\f2\fmodern\fcharset0 CourierNewPS-BoldMT;
\f3\fmodern\fcharset0 CourierNewPSMT;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
@@ -55,7 +55,7 @@ Thanks to the many outside volunteers who have worked under Guido's direction to
\f1\b0 \
1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation.\
\
-2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee.\
+2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright \'a9 2001-2020 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee.\
\
3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python.\
\
diff --git a/Mac/IDLE/IDLE.app/Contents/Info.plist b/Mac/IDLE/IDLE.app/Contents/Info.plist
index 04a0a08c836..dcc48abdd2a 100644
--- a/Mac/IDLE/IDLE.app/Contents/Info.plist
+++ b/Mac/IDLE/IDLE.app/Contents/Info.plist
@@ -36,7 +36,7 @@
CFBundleExecutable
IDLE
CFBundleGetInfoString
- %version%, © 2001-2019 Python Software Foundation
+ %version%, © 2001-2020 Python Software Foundation
CFBundleIconFile
IDLE.icns
CFBundleIdentifier
diff --git a/Mac/PythonLauncher/Info.plist.in b/Mac/PythonLauncher/Info.plist.in
index 9fb4e0affd9..21a051535fb 100644
--- a/Mac/PythonLauncher/Info.plist.in
+++ b/Mac/PythonLauncher/Info.plist.in
@@ -40,7 +40,7 @@
CFBundleExecutable
Python Launcher
CFBundleGetInfoString
- %VERSION%, © 2001-2019 Python Software Foundation
+ %VERSION%, © 2001-2020 Python Software Foundation
CFBundleIconFile
PythonLauncher.icns
CFBundleIdentifier
diff --git a/Mac/README.rst b/Mac/README.rst
index 4f2e2ce6623..ec7d873df27 100644
--- a/Mac/README.rst
+++ b/Mac/README.rst
@@ -49,7 +49,7 @@ macOS specific arguments to configure
system header files in their traditional locations, like ``/usr/include`` and
``/System/Library/Frameworks``; instead they are found within a MacOSX SDK.
The Apple-supplied build tools handle this transparently and current
- versiona of Python now handle this as well. So it is no longer necessary,
+ versions of Python now handle this as well. So it is no longer necessary,
and since macOS 10.14, no longer possible to force the installation of system
headers with ``xcode-select``.
diff --git a/Mac/Resources/app/Info.plist.in b/Mac/Resources/app/Info.plist.in
index b7581984dd6..66b5e764c54 100644
--- a/Mac/Resources/app/Info.plist.in
+++ b/Mac/Resources/app/Info.plist.in
@@ -37,7 +37,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleLongVersionString
- %version%, (c) 2001-2019 Python Software Foundation.
+ %version%, (c) 2001-2020 Python Software Foundation.
CFBundleName
Python
CFBundlePackageType
diff --git a/Makefile.pre.in b/Makefile.pre.in
index d08c78df394..3199a1aa02d 100644
--- a/Makefile.pre.in
+++ b/Makefile.pre.in
@@ -513,7 +513,7 @@ profile-opt: profile-run-stamp
coverage:
@echo "Building with support for coverage checking:"
$(MAKE) clean
- $(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) -O0 -pg -fprofile-arcs -ftest-coverage" LIBS="$(LIBS) -lgcov"
+ $(MAKE) @DEF_MAKE_RULE@ CFLAGS="$(CFLAGS) -O0 -pg --coverage" LIBS="$(LIBS) --coverage"
coverage-lcov:
@echo "Creating Coverage HTML report with LCOV:"
@@ -970,7 +970,6 @@ PYTHON_HEADERS= \
$(srcdir)/Include/bltinmodule.h \
$(srcdir)/Include/boolobject.h \
$(srcdir)/Include/bytearrayobject.h \
- $(srcdir)/Include/bytes_methods.h \
$(srcdir)/Include/bytesobject.h \
$(srcdir)/Include/cellobject.h \
$(srcdir)/Include/ceval.h \
@@ -982,7 +981,6 @@ PYTHON_HEADERS= \
$(srcdir)/Include/context.h \
$(srcdir)/Include/descrobject.h \
$(srcdir)/Include/dictobject.h \
- $(srcdir)/Include/dtoa.h \
$(srcdir)/Include/dynamic_annotations.h \
$(srcdir)/Include/enumobject.h \
$(srcdir)/Include/errcode.h \
@@ -1057,12 +1055,16 @@ PYTHON_HEADERS= \
$(srcdir)/Include/Python-ast.h \
\
$(srcdir)/Include/cpython/abstract.h \
+ $(srcdir)/Include/cpython/bytearrayobject.h \
+ $(srcdir)/Include/cpython/bytesobject.h \
$(srcdir)/Include/cpython/ceval.h \
$(srcdir)/Include/cpython/dictobject.h \
$(srcdir)/Include/cpython/fileobject.h \
+ $(srcdir)/Include/cpython/fileutils.h \
$(srcdir)/Include/cpython/import.h \
$(srcdir)/Include/cpython/initconfig.h \
$(srcdir)/Include/cpython/interpreteridobject.h \
+ $(srcdir)/Include/cpython/listobject.h \
$(srcdir)/Include/cpython/object.h \
$(srcdir)/Include/cpython/objimpl.h \
$(srcdir)/Include/cpython/pyerrors.h \
@@ -1076,11 +1078,13 @@ PYTHON_HEADERS= \
\
$(srcdir)/Include/internal/pycore_accu.h \
$(srcdir)/Include/internal/pycore_atomic.h \
+ $(srcdir)/Include/internal/pycore_bytes_methods.h \
$(srcdir)/Include/internal/pycore_call.h \
$(srcdir)/Include/internal/pycore_ceval.h \
$(srcdir)/Include/internal/pycore_code.h \
$(srcdir)/Include/internal/pycore_condvar.h \
$(srcdir)/Include/internal/pycore_context.h \
+ $(srcdir)/Include/internal/pycore_dtoa.h \
$(srcdir)/Include/internal/pycore_fileutils.h \
$(srcdir)/Include/internal/pycore_getopt.h \
$(srcdir)/Include/internal/pycore_gil.h \
@@ -1336,6 +1340,7 @@ LIBSUBDIRS= tkinter tkinter/test tkinter/test/test_tkinter \
test/test_import/data/circular_imports/subpkg \
test/test_import/data/package \
test/test_import/data/package2 \
+ test/test_import/data/unwritable \
importlib \
importlib/metadata \
test/test_importlib \
@@ -1730,6 +1735,7 @@ tags::
ctags -w $(srcdir)/Include/*.h $(srcdir)/Include/cpython/*.h $(srcdir)/Include/internal/*.h
for i in $(SRCDIRS); do ctags -f tags -w -a $(srcdir)/$$i/*.[ch]; done
ctags -f tags -w -a $(srcdir)/Modules/_ctypes/*.[ch]
+ find $(srcdir)/Lib -type f -name "*.py" -not -name "test_*.py" -not -path "*/test/*" -not -path "*/tests/*" -not -path "*/*_test/*" | ctags -f tags -w -a -L -
LC_ALL=C sort -o tags tags
# Create a tags file for GNU Emacs
@@ -1737,6 +1743,8 @@ TAGS::
cd $(srcdir); \
etags Include/*.h Include/cpython/*.h Include/internal/*.h; \
for i in $(SRCDIRS); do etags -a $$i/*.[ch]; done
+ etags -a $(srcdir)/Modules/_ctypes/*.[ch]
+ find $(srcdir)/Lib -type f -name "*.py" -not -name "test_*.py" -not -path "*/test/*" -not -path "*/tests/*" -not -path "*/*_test/*" | etags - -a
# Sanitation targets -- clean leaves libraries, executables and tags
# files, which clobber removes as well
diff --git a/Misc/ACKS b/Misc/ACKS
index eb5679146bd..197dfc6415e 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -286,6 +286,7 @@ Brad Chapman
Greg Chapman
Mitch Chapman
Matt Chaput
+William Chargin
Yogesh Chaudhari
David Chaum
Nicolas Chauvat
@@ -751,6 +752,7 @@ Ludwig Hähne
Gerhard Häring
Fredrik Håård
Florian Höch
+Oleg Höfling
Robert Hölzl
Catalin Iacob
Mihai Ibanescu
@@ -842,6 +844,7 @@ Dmitry Kazakov
Brian Kearns
Sebastien Keim
Ryan Kelly
+Hugo van Kemenade
Dan Kenigsberg
Randall Kern
Robert Kern
@@ -1105,6 +1108,7 @@ Ezio Melotti
Doug Mennella
Dimitri Merejkowsky
Brian Merrell
+Bruce Merry
Alexis Métaireau
Luke Mewburn
Carl Meyer
@@ -1218,6 +1222,7 @@ Elena Oat
Jon Oberheide
Milan Oberkirch
Pascal Oberndoerfer
+Géry Ogam
Jeffrey Ollie
Adam Olsen
Bryan Olson
@@ -1510,6 +1515,7 @@ Steven Scott
Nick Seidenman
Michael Seifert
Žiga Seilnacht
+Jendrik Seipp
Michael Selik
Yury Selivanov
Fred Sells
@@ -1854,6 +1860,7 @@ Klaus-Juergen Wolf
Dan Wolfe
Richard Wolff
Adam Woodbeck
+William Woodruff
Steven Work
Gordon Worley
Darren Worrall
@@ -1902,3 +1909,5 @@ Jelle Zijlstra
Gennadiy Zlobin
Doug Zongker
Peter Åstrand
+
+(Entries should be added in rough alphabetical order by last names)
diff --git a/Misc/NEWS.d/3.9.0a2.rst b/Misc/NEWS.d/3.9.0a2.rst
index a418fe0ef80..50478c08e90 100644
--- a/Misc/NEWS.d/3.9.0a2.rst
+++ b/Misc/NEWS.d/3.9.0a2.rst
@@ -69,7 +69,7 @@ the "elif" keyword and not to its condition, making it consistent with the
.. nonce: 8OyT5P
.. section: Core and Builtins
-In Python 3.9.0a1, sys.argv[0] was made an asolute path if a filename was
+In Python 3.9.0a1, sys.argv[0] was made an absolute path if a filename was
specified on the command line. Revert this change, since most users expect
sys.argv to be unmodified.
@@ -81,7 +81,7 @@ sys.argv to be unmodified.
.. section: Core and Builtins
:c:func:`PySys_Audit` now requires ``Py_ssize_t`` to be used for size
-arguments in the format string, regardless of whethen ``PY_SSIZE_T_CLEAN``
+arguments in the format string, regardless of whether ``PY_SSIZE_T_CLEAN``
was defined at include time.
..
@@ -112,7 +112,7 @@ event.
.. section: Core and Builtins
Add audit hooks for when :func:`sys.excepthook` and
-:func:`sys.unraisablehook` are invoked
+:func:`sys.unraisablehook` are invoked.
..
@@ -215,9 +215,7 @@ Patch by hongweipeng.
.. section: Core and Builtins
Provide a platform tag for AIX that is sufficient for PEP425 binary
-distribution identification.
-
-Patch by Michael Felt
+distribution identification. Patch by Michael Felt.
..
@@ -259,7 +257,7 @@ Fix :exc:`NameError` in :mod:`zipimport`. Patch by Karthikeyan Singaravelan.
.. nonce: QDtIxI
.. section: Library
-Update importliib.metadata to include improvements from importlib_metadata
+Update importlib.metadata to include improvements from importlib_metadata
1.3 including better serialization of EntryPoints and improved documentation
for custom finders.
@@ -300,7 +298,7 @@ parsing the header.
.. nonce: IJYhz_
.. section: Library
-Implement ``__class_getitem__`` for ``os.PathLike``, ``pathlib.Path``
+Implement ``__class_getitem__`` for ``os.PathLike``, ``pathlib.Path``.
..
@@ -402,7 +400,7 @@ locale encoding is not UTF-8.
.. nonce: WZnAPQ
.. section: Library
-Prevent UnboundLocalError to pop up in parse_message_id
+Prevent UnboundLocalError to pop up in parse_message_id.
parse_message_id() was improperly using a token defined inside an exception
handler, which was raising `UnboundLocalError` on parsing an invalid value.
@@ -444,7 +442,7 @@ random.choices() now raises a ValueError when all the weights are zero.
.. section: Library
Raise pickle.UnpicklingError when loading an item from memo for invalid
-input
+input.
The previous code was raising a `KeyError` for both the Python and C
implementation. This was caused by the specified index of an invalid input
@@ -455,7 +453,7 @@ determined index was bogus. Patch by Claudiu Popa
..
-.. bpo: 38668
+.. bpo: 38688
.. date: 2019-11-22-10-45-03
.. nonce: iKx23z
.. section: Library
@@ -506,7 +504,7 @@ by Pablo Galindo and Batuhan Taskaya.
.. nonce: AZUzL8
.. section: Library
-AsyncMock now returns StopAsyncIteration on the exaustion of a side_effects
+AsyncMock now returns StopAsyncIteration on the exhaustion of a side_effects
iterable. Since PEP-479 its Impossible to raise a StopIteration exception
from a coroutine.
@@ -518,7 +516,7 @@ from a coroutine.
.. section: Library
AsyncMock fix for return values that are awaitable types. This also covers
-side_effect iterable values that happend to be awaitable, and wraps
+side_effect iterable values that happened to be awaitable, and wraps
callables that return an awaitable type. Before these awaitables were being
awaited instead of being returned as is.
@@ -895,7 +893,7 @@ previous `import posix`. Patch by Benoît Hudson.
.. nonce: _3xjKG
.. section: IDLE
-Excape key now closes IDLE completion windows. Patch by Johnny Najera.
+Escape key now closes IDLE completion windows. Patch by Johnny Najera.
..
diff --git a/Misc/NEWS.d/3.9.0a3.rst b/Misc/NEWS.d/3.9.0a3.rst
new file mode 100644
index 00000000000..6c71d7e839d
--- /dev/null
+++ b/Misc/NEWS.d/3.9.0a3.rst
@@ -0,0 +1,906 @@
+.. bpo: 39427
+.. date: 2020-01-22-22-28-04
+.. nonce: LiO-Eo
+.. release date: 2020-01-24
+.. section: Core and Builtins
+
+Document all possibilities for the ``-X`` options in the command line help
+section. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39421
+.. date: 2020-01-22-15-53-37
+.. nonce: O3nG7u
+.. section: Core and Builtins
+
+Fix possible crashes when operating with the functions in the :mod:`heapq`
+module and custom comparison operators.
+
+..
+
+.. bpo: 39386
+.. date: 2020-01-20-21-40-57
+.. nonce: ULqD8t
+.. section: Core and Builtins
+
+Prevent double awaiting of async iterator.
+
+..
+
+.. bpo: 17005
+.. date: 2020-01-17-00-00-58
+.. nonce: nTSxsy
+.. section: Core and Builtins
+
+Add :class:`functools.TopologicalSorter` to the :mod:`functools` module to
+offers functionality to perform topological sorting of graphs. Patch by
+Pablo Galindo, Tim Peters and Larry Hastings.
+
+..
+
+.. bpo: 39320
+.. date: 2020-01-15-15-33-44
+.. nonce: b4hnJW
+.. section: Core and Builtins
+
+Replace four complex bytecodes for building sequences with three simpler
+ones.
+
+The following four bytecodes have been removed:
+
+* BUILD_LIST_UNPACK
+* BUILD_TUPLE_UNPACK
+* BUILD_SET_UNPACK
+* BUILD_TUPLE_UNPACK_WITH_CALL
+
+The following three bytecodes have been added:
+
+* LIST_TO_TUPLE
+* LIST_EXTEND
+* SET_UPDATE
+
+..
+
+.. bpo: 39336
+.. date: 2020-01-15-01-39-29
+.. nonce: nJ7W9I
+.. section: Core and Builtins
+
+Import loaders which publish immutable module objects can now publish
+immutable packages in addition to individual modules.
+
+..
+
+.. bpo: 39322
+.. date: 2020-01-13-15-18-13
+.. nonce: aAs-1T
+.. section: Core and Builtins
+
+Added a new function :func:`gc.is_finalized` to check if an object has been
+finalized by the garbage collector. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39048
+.. date: 2020-01-13-14-45-22
+.. nonce: iPsj81
+.. section: Core and Builtins
+
+Improve the displayed error message when incorrect types are passed to
+``async with`` statements by looking up the :meth:`__aenter__` special
+method before the :meth:`__aexit__` special method when entering an
+asynchronous context manager. Patch by Géry Ogam.
+
+..
+
+.. bpo: 39235
+.. date: 2020-01-09-10-01-18
+.. nonce: RYwjoc
+.. section: Core and Builtins
+
+Fix AST end location for lone generator expression in function call, e.g.
+f(i for i in a).
+
+..
+
+.. bpo: 39209
+.. date: 2020-01-06-10-29-16
+.. nonce: QHAONe
+.. section: Core and Builtins
+
+Correctly handle multi-line tokens in interactive mode. Patch by Pablo
+Galindo.
+
+..
+
+.. bpo: 1635741
+.. date: 2020-01-05-13-40-08
+.. nonce: QRTJVC
+.. section: Core and Builtins
+
+Port _json extension module to multiphase initialization (:pep:`489`).
+
+..
+
+.. bpo: 39216
+.. date: 2020-01-05-06-55-52
+.. nonce: 74jLh9
+.. section: Core and Builtins
+
+Fix constant folding optimization for positional only arguments - by Anthony
+Sottile.
+
+..
+
+.. bpo: 39215
+.. date: 2020-01-04-17-25-34
+.. nonce: xiqiIz
+.. section: Core and Builtins
+
+Fix ``SystemError`` when nested function has annotation on positional-only
+argument - by Anthony Sottile.
+
+..
+
+.. bpo: 39200
+.. date: 2020-01-04-01-14-32
+.. nonce: 8Z9DYp
+.. section: Core and Builtins
+
+Correct the error message when calling the :func:`min` or :func:`max` with
+no arguments. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39200
+.. date: 2020-01-03-14-50-14
+.. nonce: Ip2_iI
+.. section: Core and Builtins
+
+Correct the error message when trying to construct :class:`range` objects
+with no arguments. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39166
+.. date: 2020-01-02-22-22-03
+.. nonce: Qt-UeD
+.. section: Core and Builtins
+
+Fix incorrect line execution reporting in trace functions when tracing the
+last iteration of asynchronous for loops. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39114
+.. date: 2019-12-31-18-25-45
+.. nonce: WG9alt
+.. section: Core and Builtins
+
+Fix incorrent line execution reporting in trace functions when tracing
+exception handlers with name binding. Patch by Pablo Galindo.
+
+..
+
+.. bpo: 39156
+.. date: 2019-12-30-10-53-59
+.. nonce: veT-CB
+.. section: Core and Builtins
+
+Split the COMPARE_OP bytecode instruction into four distinct instructions.
+
+* COMPARE_OP for rich comparisons
+* IS_OP for 'is' and 'is not' tests
+* CONTAINS_OP for 'in' and 'is not' tests
+* JUMP_IF_NOT_EXC_MATCH for checking exceptions in 'try-except' statements.
+
+This improves the clarity of the interpreter and should provide a modest
+speedup.
+
+..
+
+.. bpo: 38588
+.. date: 2019-12-29-19-13-54
+.. nonce: pgXnNS
+.. section: Core and Builtins
+
+Fix possible crashes in dict and list when calling
+:c:func:`PyObject_RichCompareBool`.
+
+..
+
+.. bpo: 13601
+.. date: 2019-12-17-22-32-11
+.. nonce: vNP4LC
+.. section: Core and Builtins
+
+By default, ``sys.stderr`` is line-buffered now, even if ``stderr`` is
+redirected to a file. You can still make ``sys.stderr`` unbuffered by
+passing the :option:`-u` command-line option or setting the
+:envvar:`PYTHONUNBUFFERED` environment variable.
+
+(Contributed by Jendrik Seipp in bpo-13601.)
+
+..
+
+.. bpo: 38610
+.. date: 2019-10-31-14-30-39
+.. nonce: fHdVMS
+.. section: Core and Builtins
+
+Fix possible crashes in several list methods by holding strong references to
+list elements when calling :c:func:`PyObject_RichCompareBool`.
+
+..
+
+.. bpo: 32021
+.. date: 2019-03-11-13-30-40
+.. nonce: dpbtkP
+.. section: Core and Builtins
+
+Include brotli .br encoding in mimetypes encodings_map
+
+..
+
+.. bpo: 39430
+.. date: 2020-01-24-11-05-21
+.. nonce: I0UQzM
+.. section: Library
+
+Fixed race condition in lazy imports in :mod:`tarfile`.
+
+..
+
+.. bpo: 39413
+.. date: 2020-01-24-10-10-25
+.. nonce: 7XYDM8
+.. section: Library
+
+The :func:`os.unsetenv` function is now also available on Windows.
+
+..
+
+.. bpo: 39390
+.. date: 2020-01-23-21-34-29
+.. nonce: D2tSXk
+.. section: Library
+
+Fixed a regression with the `ignore` callback of :func:`shutil.copytree`.
+The argument types are now str and List[str] again.
+
+..
+
+.. bpo: 39395
+.. date: 2020-01-23-03-05-41
+.. nonce: 4dda42
+.. section: Library
+
+The :func:`os.putenv` and :func:`os.unsetenv` functions are now always
+available.
+
+..
+
+.. bpo: 39406
+.. date: 2020-01-22-21-18-58
+.. nonce: HMpe8x
+.. section: Library
+
+If ``setenv()`` C function is available, :func:`os.putenv` is now
+implemented with ``setenv()`` instead of ``putenv()``, so Python doesn't
+have to handle the environment variable memory.
+
+..
+
+.. bpo: 39396
+.. date: 2020-01-21-09-00-42
+.. nonce: 6UXQXE
+.. section: Library
+
+Fix ``math.nextafter(-0.0, +0.0)`` on AIX 7.1.
+
+..
+
+.. bpo: 29435
+.. date: 2020-01-20-18-48-00
+.. nonce: qqJ2Ax
+.. section: Library
+
+Allow :func:`tarfile.is_tarfile` to be used with file and file-like objects,
+like :func:`zipfile.is_zipfile`. Patch by William Woodruff.
+
+..
+
+.. bpo: 39377
+.. date: 2020-01-20-13-00-35
+.. nonce: QSFdaU
+.. section: Library
+
+Removed ``encoding`` option from :func:`json.loads`. It has been deprecated
+since Python 3.1.
+
+..
+
+.. bpo: 39389
+.. date: 2020-01-20-00-56-01
+.. nonce: fEirIS
+.. section: Library
+
+Write accurate compression level metadata in :mod:`gzip` archives, rather
+than always signaling maximum compression.
+
+..
+
+.. bpo: 39366
+.. date: 2020-01-17-18-14-51
+.. nonce: Cv3NQS
+.. section: Library
+
+The previously deprecated ``xpath()`` and ``xgtitle()`` methods of
+:class:`nntplib.NNTP` have been removed.
+
+..
+
+.. bpo: 39357
+.. date: 2020-01-16-11-24-00
+.. nonce: bCwx-h
+.. section: Library
+
+Remove the *buffering* parameter of :class:`bz2.BZ2File`. Since Python 3.0,
+it was ignored and using it was emitting :exc:`DeprecationWarning`. Pass an
+open file object, to control how the file is opened. The *compresslevel*
+parameter becomes keyword-only.
+
+..
+
+.. bpo: 39353
+.. date: 2020-01-16-10-21-48
+.. nonce: ntp7Ql
+.. section: Library
+
+Deprecate binhex4 and hexbin4 standards. Deprecate the :mod:`binhex` module
+and the following :mod:`binascii` functions: :func:`~binascii.b2a_hqx`,
+:func:`~binascii.a2b_hqx`, :func:`~binascii.rlecode_hqx`,
+:func:`~binascii.rledecode_hqx`, :func:`~binascii.crc_hqx`.
+
+..
+
+.. bpo: 39351
+.. date: 2020-01-16-09-27-28
+.. nonce: a-FQdv
+.. section: Library
+
+Remove ``base64.encodestring()`` and ``base64.decodestring()``, aliases
+deprecated since Python 3.1: use :func:`base64.encodebytes` and
+:func:`base64.decodebytes` instead.
+
+..
+
+.. bpo: 39350
+.. date: 2020-01-16-09-15-40
+.. nonce: ZQx0uY
+.. section: Library
+
+Remove ``fractions.gcd()`` function, deprecated since Python 3.5
+(:issue:`22486`): use :func:`math.gcd` instead.
+
+..
+
+.. bpo: 39329
+.. date: 2020-01-14-22-16-07
+.. nonce: 6OKGBn
+.. section: Library
+
+:class:`~smtplib.LMTP` constructor now has an optional *timeout* parameter.
+Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39313
+.. date: 2020-01-12-18-17-00
+.. nonce: DCTsnm
+.. section: Library
+
+Add a new ``exec_function`` option (*--exec-function* in the CLI) to
+``RefactoringTool`` for making ``exec`` a function. Patch by Batuhan
+Taskaya.
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-12-17-19-40
+.. nonce: iax06r
+.. section: Library
+
+:class:`~ftplib.FTP_TLS` and :class:`~ftplib.FTP_TLS` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-12-16-34-28
+.. nonce: J_yBVq
+.. section: Library
+
+:class:`~smtplib.SMTP` and :class:`~smtplib.SMTP_SSL` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39310
+.. date: 2020-01-12-13-34-42
+.. nonce: YMRdcj
+.. section: Library
+
+Add :func:`math.ulp`: return the value of the least significant bit of a
+float.
+
+..
+
+.. bpo: 39297
+.. date: 2020-01-11-01-15-37
+.. nonce: y98Z6Q
+.. section: Library
+
+Improved performance of importlib.metadata distribution discovery and
+resilients to inaccessible sys.path entries (importlib_metadata v1.4.0).
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-11-00-32-45
+.. nonce: _S5VjC
+.. section: Library
+
+:class:`~nntplib.NNTP` and :class:`~nntplib.NNTP_SSL` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 38901
+.. date: 2020-01-10-22-30-48
+.. nonce: OdVIIb
+.. section: Library
+
+When you specify prompt='.' or equivalently python -m venv --prompt . ...
+the basename of the current directory is used to set the created venv's
+prompt when it's activated.
+
+..
+
+.. bpo: 39288
+.. date: 2020-01-10-16-52-09
+.. nonce: IB-aQX
+.. section: Library
+
+Add :func:`math.nextafter`: return the next floating-point value after *x*
+towards *y*.
+
+..
+
+.. bpo: 39259
+.. date: 2020-01-09-10-58-58
+.. nonce: RmDgCC
+.. section: Library
+
+:class:`~poplib.POP3` and :class:`~poplib.POP3_SSL` now raise a
+:class:`ValueError` if the given timeout for their constructor is zero to
+prevent the creation of a non-blocking socket. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39242
+.. date: 2020-01-08-23-25-27
+.. nonce: bnL65N
+.. section: Library
+
+Updated the Gmane domain from news.gmane.org to news.gmane.io which is used
+for examples of :class:`~nntplib.NNTP` news reader server and nntplib tests.
+
+..
+
+.. bpo: 35292
+.. date: 2020-01-08-14-39-19
+.. nonce: ihRT1z
+.. section: Library
+
+Proxy the `SimpleHTTPRequestHandler.guess_type` to `mimetypes.guess_type` so
+the `mimetypes.init` is called lazily to avoid unnecessary costs when
+:mod:`http.server` module is imported.
+
+..
+
+.. bpo: 39239
+.. date: 2020-01-07-01-02-44
+.. nonce: r7vecs
+.. section: Library
+
+The :meth:`select.epoll.unregister` method no longer ignores the
+:data:`~errno.EBADF` error.
+
+..
+
+.. bpo: 38907
+.. date: 2020-01-06-02-14-38
+.. nonce: F1RkCR
+.. section: Library
+
+In http.server script, restore binding to IPv4 on Windows.
+
+..
+
+.. bpo: 39152
+.. date: 2020-01-03-18-02-50
+.. nonce: JgPjCC
+.. section: Library
+
+Fix ttk.Scale.configure([name]) to return configuration tuple for name or
+all options. Giovanni Lombardo contributed part of the patch.
+
+..
+
+.. bpo: 39198
+.. date: 2020-01-02-20-21-03
+.. nonce: nzwGyG
+.. section: Library
+
+If an exception were to be thrown in `Logger.isEnabledFor` (say, by asyncio
+timeouts or stopit) , the `logging` global lock may not be released
+appropriately, resulting in deadlock. This change wraps that block of code
+with `try...finally` to ensure the lock is released.
+
+..
+
+.. bpo: 39191
+.. date: 2020-01-02-17-28-03
+.. nonce: ur_scy
+.. section: Library
+
+Perform a check for running loop before starting a new task in
+``loop.run_until_complete()`` to fail fast; it prevents the side effect of
+new task spawning before exception raising.
+
+..
+
+.. bpo: 38871
+.. date: 2020-01-01-18-44-52
+.. nonce: 3EEOLg
+.. section: Library
+
+Correctly parenthesize filter-based statements that contain lambda
+expressions in mod:`lib2to3`. Patch by Dong-hee Na.
+
+..
+
+.. bpo: 39142
+.. date: 2019-12-31-19-27-23
+.. nonce: oqU5iD
+.. section: Library
+
+A change was made to logging.config.dictConfig to avoid converting instances
+of named tuples to ConvertingTuple. It's assumed that named tuples are too
+specialised to be treated like ordinary tuples; if a user of named tuples
+requires ConvertingTuple functionality, they will have to implement that
+themselves in their named tuple class.
+
+..
+
+.. bpo: 39158
+.. date: 2019-12-29-15-44-38
+.. nonce: cxVoOR
+.. section: Library
+
+ast.literal_eval() now supports empty sets.
+
+..
+
+.. bpo: 39129
+.. date: 2019-12-24-10-43-13
+.. nonce: jVx5rW
+.. section: Library
+
+Fix import path for ``asyncio.TimeoutError``
+
+..
+
+.. bpo: 39057
+.. date: 2019-12-15-21-47-54
+.. nonce: FOxn-w
+.. section: Library
+
+:func:`urllib.request.proxy_bypass_environment` now ignores leading dots and
+no longer ignores a trailing newline.
+
+..
+
+.. bpo: 39056
+.. date: 2019-12-15-21-05-16
+.. nonce: nEfUM9
+.. section: Library
+
+Fixed handling invalid warning category in the -W option. No longer import
+the re module if it is not needed.
+
+..
+
+.. bpo: 39055
+.. date: 2019-12-15-19-23-23
+.. nonce: FmN3un
+.. section: Library
+
+:func:`base64.b64decode` with ``validate=True`` raises now a binascii.Error
+if the input ends with a single ``\n``.
+
+..
+
+.. bpo: 21600
+.. date: 2019-12-14-14-38-40
+.. nonce: kC4Cgh
+.. section: Library
+
+Fix :func:`mock.patch.stopall` to stop active patches that were created with
+:func:`mock.patch.dict`.
+
+..
+
+.. bpo: 39019
+.. date: 2019-12-10-21-11-05
+.. nonce: YIlgZ7
+.. section: Library
+
+Implement dummy ``__class_getitem__`` for
+:class:`tempfile.SpooledTemporaryFile`.
+
+..
+
+.. bpo: 39019
+.. date: 2019-12-10-21-03-34
+.. nonce: i8RpMZ
+.. section: Library
+
+Implement dummy ``__class_getitem__`` for ``subprocess.Popen``,
+``subprocess.CompletedProcess``
+
+..
+
+.. bpo: 38914
+.. date: 2019-11-26-23-21-56
+.. nonce: 8l-g-T
+.. section: Library
+
+Adjusted the wording of the warning issued by distutils' ``check`` command
+when the ``author`` and ``maintainer`` fields are supplied but no
+corresponding e-mail field (``author_email`` or ``maintainer_email``) is
+found. The wording now reflects the fact that these fields are suggested,
+but not required. Patch by Juergen Gmach.
+
+..
+
+.. bpo: 38878
+.. date: 2019-11-22-12-08-52
+.. nonce: EJ0cFf
+.. section: Library
+
+Fixed __subclasshook__ of :class:`os.PathLike` to return a correct result
+upon inheritence. Patch by Bar Harel.
+
+..
+
+.. bpo: 38615
+.. date: 2019-11-17-17-32-35
+.. nonce: OVyaNX
+.. section: Library
+
+:class:`~imaplib.IMAP4` and :class:`~imaplib.IMAP4_SSL` now have an optional
+*timeout* parameter for their constructors. Also, the
+:meth:`~imaplib.IMAP4.open` method now has an optional *timeout* parameter
+with this change. The overridden methods of :class:`~imaplib.IMAP4_SSL` and
+:class:`~imaplib.IMAP4_stream` were applied to this change. Patch by
+Dong-hee Na.
+
+..
+
+.. bpo: 35182
+.. date: 2019-10-31-19-23-25
+.. nonce: hzeNl9
+.. section: Library
+
+Fixed :func:`Popen.communicate` subsequent call crash when the child process
+has already closed any piped standard stream, but still continues to be
+running. Patch by Andriy Maletsky.
+
+..
+
+.. bpo: 38630
+.. date: 2019-10-29-12-21-10
+.. nonce: Dv6Xrm
+.. section: Library
+
+On Unix, :meth:`subprocess.Popen.send_signal` now polls the process status.
+Polling reduces the risk of sending a signal to the wrong process if the
+process completed, the :attr:`subprocess.Popen.returncode` attribute is
+still ``None``, and the pid has been reassigned (recycled) to a new
+different process.
+
+..
+
+.. bpo: 38536
+.. date: 2019-10-21-20-24-51
+.. nonce: beZ0Sk
+.. section: Library
+
+Removes trailing space in formatted currency with `international=True` and a
+locale with symbol following value. E.g. `locale.currency(12.34,
+international=True)` returned `'12,34 EUR '` instead of `'12,34 EUR'`.
+
+..
+
+.. bpo: 38473
+.. date: 2019-10-14-21-14-55
+.. nonce: uXpVld
+.. section: Library
+
+Use signature from inner mock for autospecced methods attached with
+:func:`unittest.mock.attach_mock`. Patch by Karthikeyan Singaravelan.
+
+..
+
+.. bpo: 38361
+.. date: 2019-10-04-09-49-56
+.. nonce: LM4u4T
+.. section: Library
+
+Fixed an issue where ``ident`` could include a leading path separator when
+:func:`syslog.openlog` was called without arguments.
+
+..
+
+.. bpo: 38293
+.. date: 2019-09-29-08-17-03
+.. nonce: wls5s3
+.. section: Library
+
+Add :func:`copy.copy` and :func:`copy.deepcopy` support to :func:`property`
+objects.
+
+..
+
+.. bpo: 37958
+.. date: 2019-08-27-03-57-25
+.. nonce: lRORI3
+.. section: Library
+
+Added the pstats.Stats.get_profile_dict() method to return the profile data
+as a StatsProfile instance.
+
+..
+
+.. bpo: 28367
+.. date: 2019-05-06-22-38-47
+.. nonce: 2AKen5
+.. section: Library
+
+Termios magic constants for the following baud rates: - B500000 -
+B576000 - B921600 - B1000000 - B1152000 - B1500000 - B2000000 -
+B2500000 - B3000000 - B3500000 - B4000000 Patch by Andrey Smirnov
+
+..
+
+.. bpo: 39381
+.. date: 2020-01-18-15-37-56
+.. nonce: wTWe8d
+.. section: Documentation
+
+Mention in docs that :func:`asyncio.get_event_loop` implicitly creates new
+event loop only if called from the main thread.
+
+..
+
+.. bpo: 38918
+.. date: 2019-12-15-22-04-41
+.. nonce: 8JnDTS
+.. section: Documentation
+
+Add an entry for ``__module__`` in the "function" & "method" sections of the
+`inspect docs types and members table
+`_
+
+..
+
+.. bpo: 3530
+.. date: 2019-11-17-11-53-10
+.. nonce: 8zFUMc
+.. section: Documentation
+
+In the :mod:`ast` module documentation, fix a misleading ``NodeTransformer``
+example and add advice on when to use the ``fix_missing_locations``
+function.
+
+..
+
+.. bpo: 39395
+.. date: 2020-01-23-03-05-13
+.. nonce: RoArIZ
+.. section: Build
+
+On non-Windows platforms, the :c:func:`setenv` and :c:func:`unsetenv`
+functions are now required to build Python.
+
+..
+
+.. bpo: 39160
+.. date: 2019-12-30-03-54-24
+.. nonce: aBmj13
+.. section: Build
+
+Updated the documentation in `./configure --help` to show default values,
+reference documentation where required and add additional explanation where
+needed.
+
+..
+
+.. bpo: 39144
+.. date: 2019-12-27-22-18-26
+.. nonce: dwHMlR
+.. section: Build
+
+The ctags and etags build targets both include Modules/_ctypes and Python
+standard library source files.
+
+..
+
+.. bpo: 39050
+.. date: 2020-01-22-22-28-06
+.. nonce: zkn0FO
+.. section: IDLE
+
+Make IDLE Settings dialog Help button work again.
+
+..
+
+.. bpo: 34118
+.. date: 2019-12-30-16-44-07
+.. nonce: FaNW0a
+.. section: IDLE
+
+Tag memoryview, range, and tuple as classes, the same as list, etcetera, in
+the library manual built-in functions list.
+
+..
+
+.. bpo: 32989
+.. date: 2018-03-03-12-56-26
+.. nonce: FVhmhH
+.. section: IDLE
+
+Add tests for editor newline_and_indent_event method. Remove dead code from
+pyparse find_good_parse_start method.
+
+..
+
+.. bpo: 39372
+.. date: 2020-01-17-19-25-48
+.. nonce: hGJMY6
+.. section: C API
+
+Clean header files of interfaces defined but with no implementation. The
+public API symbols being removed are:
+``_PyBytes_InsertThousandsGroupingLocale``,
+``_PyBytes_InsertThousandsGrouping``, ``_Py_InitializeFromArgs``,
+``_Py_InitializeFromWideArgs``, ``_PyFloat_Repr``, ``_PyFloat_Digits``,
+``_PyFloat_DigitsInit``, ``PyFrame_ExtendStack``, ``_PyAIterWrapper_Type``,
+``PyNullImporter_Type``, ``PyCmpWrapper_Type``, ``PySortWrapper_Type``,
+``PyNoArgsFunction``.
+
+..
+
+.. bpo: 39164
+.. date: 2019-12-30-10-43-52
+.. nonce: WEV0uu
+.. section: C API
+
+Add a private ``_PyErr_GetExcInfo()`` function to retrieve exception
+information of the specified Python thread state.
diff --git a/Misc/NEWS.d/next/Build/2020-01-29-19-17-02.bpo-39489.HKPzv-.rst b/Misc/NEWS.d/next/Build/2020-01-29-19-17-02.bpo-39489.HKPzv-.rst
new file mode 100644
index 00000000000..652a4356e22
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2020-01-29-19-17-02.bpo-39489.HKPzv-.rst
@@ -0,0 +1 @@
+Remove ``COUNT_ALLOCS`` special build.
diff --git a/Misc/NEWS.d/next/C API/2020-01-07-13-46-40.bpo-39245.G7wog6.rst b/Misc/NEWS.d/next/C API/2020-01-07-13-46-40.bpo-39245.G7wog6.rst
new file mode 100644
index 00000000000..e5836b5255d
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-01-07-13-46-40.bpo-39245.G7wog6.rst
@@ -0,0 +1,5 @@
+The Vectorcall API (PEP 590) was made public, adding the functions
+``PyObject_Vectorcall``, ``PyObject_VectorcallMethod``,
+``PyVectorcall_Function``, ``PyObject_CallOneArg``,
+``PyObject_CallMethodNoArgs``, ``PyObject_CallMethodOneArg``,
+``PyObject_FastCallDict``, and the flag ``Py_TPFLAGS_HAVE_VECTORCALL``.
diff --git a/Misc/NEWS.d/next/C API/2020-01-17-11-37-05.bpo-38076.cxfw2x.rst b/Misc/NEWS.d/next/C API/2020-01-17-11-37-05.bpo-38076.cxfw2x.rst
new file mode 100644
index 00000000000..d9f6dc31efd
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-01-17-11-37-05.bpo-38076.cxfw2x.rst
@@ -0,0 +1,2 @@
+Fix to clear the interpreter state only after clearing module globals to
+guarantee module state access from C Extensions during runtime destruction
diff --git a/Misc/NEWS.d/next/C API/2020-01-31-16-35-21.bpo-39511.nv9yEn.rst b/Misc/NEWS.d/next/C API/2020-01-31-16-35-21.bpo-39511.nv9yEn.rst
new file mode 100644
index 00000000000..14a04875a88
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-01-31-16-35-21.bpo-39511.nv9yEn.rst
@@ -0,0 +1,3 @@
+The :c:func:`PyThreadState_Clear` function now calls the
+:c:member:`PyThreadState.on_delete` callback. Previously, that happened in
+:c:func:`PyThreadState_Delete`.
diff --git a/Misc/NEWS.d/next/C API/2020-02-05-12-00-18.bpo-39542.RJCUKR.rst b/Misc/NEWS.d/next/C API/2020-02-05-12-00-18.bpo-39542.RJCUKR.rst
new file mode 100644
index 00000000000..5829d6e9748
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-05-12-00-18.bpo-39542.RJCUKR.rst
@@ -0,0 +1,3 @@
+Exclude trashcan mechanism from the limited C API: it requires access to
+PyTypeObject and PyThreadState structure fields, whereas these structures
+are opaque in the limited C API.
diff --git a/Misc/NEWS.d/next/C API/2020-02-05-12-40-51.bpo-39542.si-_Zq.rst b/Misc/NEWS.d/next/C API/2020-02-05-12-40-51.bpo-39542.si-_Zq.rst
new file mode 100644
index 00000000000..7473577b0a9
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-05-12-40-51.bpo-39542.si-_Zq.rst
@@ -0,0 +1,7 @@
+In the limited C API, ``PyObject_INIT()`` and ``PyObject_INIT_VAR()`` are
+now defined as aliases to :c:func:`PyObject_Init` and
+:c:func:`PyObject_InitVar` to make their implementation opaque. It avoids to
+leak implementation details in the limited C API. Exclude the following
+functions from the limited C API: ``_Py_NewReference()``,
+``_Py_ForgetReference()``, ``_PyTraceMalloc_NewReference()`` and
+``_Py_GetRefTotal()``.
diff --git a/Misc/NEWS.d/next/C API/2020-02-05-13-14-20.bpo-39542.5mleGX.rst b/Misc/NEWS.d/next/C API/2020-02-05-13-14-20.bpo-39542.5mleGX.rst
new file mode 100644
index 00000000000..46fb1d257e8
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-05-13-14-20.bpo-39542.5mleGX.rst
@@ -0,0 +1,2 @@
+Convert :c:func:`PyType_HasFeature`, :c:func:`PyType_Check` and
+:c:func:`PyType_CheckExact` macros to static inline functions.
diff --git a/Misc/NEWS.d/next/C API/2020-02-07-00-23-44.bpo-39573.nRD1q7.rst b/Misc/NEWS.d/next/C API/2020-02-07-00-23-44.bpo-39573.nRD1q7.rst
new file mode 100644
index 00000000000..310933a6d40
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-07-00-23-44.bpo-39573.nRD1q7.rst
@@ -0,0 +1,2 @@
+Add a :c:func:`Py_SET_REFCNT` function to set the reference counter of an
+object.
diff --git a/Misc/NEWS.d/next/C API/2020-02-07-03-39-03.bpo-39573.Oa8cL1.rst b/Misc/NEWS.d/next/C API/2020-02-07-03-39-03.bpo-39573.Oa8cL1.rst
new file mode 100644
index 00000000000..22d3d693ac0
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-07-03-39-03.bpo-39573.Oa8cL1.rst
@@ -0,0 +1 @@
+Add :c:func:`Py_SET_TYPE` function to set the type of an object.
diff --git a/Misc/NEWS.d/next/C API/2020-02-07-09-35-43.bpo-39500.xRAEgX.rst b/Misc/NEWS.d/next/C API/2020-02-07-09-35-43.bpo-39500.xRAEgX.rst
new file mode 100644
index 00000000000..2ca359f0ec1
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-07-09-35-43.bpo-39500.xRAEgX.rst
@@ -0,0 +1,2 @@
+:c:func:`PyUnicode_IsIdentifier` does not call :c:func:`Py_FatalError`
+anymore if the string is not ready.
diff --git a/Misc/NEWS.d/next/C API/2020-02-07-10-41-53.bpo-39573.EG9VDI.rst b/Misc/NEWS.d/next/C API/2020-02-07-10-41-53.bpo-39573.EG9VDI.rst
new file mode 100644
index 00000000000..d84cddc5763
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-07-10-41-53.bpo-39573.EG9VDI.rst
@@ -0,0 +1 @@
+Add :c:func:`Py_SET_SIZE` function to set the size of an object.
diff --git a/Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst b/Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst
new file mode 100644
index 00000000000..94e6ae7e42c
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-12-21-24-02.bpo-35081.at7BjN.rst
@@ -0,0 +1,5 @@
+Move the ``dtoa.h`` header file to the internal C API as ``pycore_dtoa.h``:
+it only contains private functions (prefixed by ``_Py``). The :mod:`math` and
+:mod:`cmath` modules must now be compiled with the ``Py_BUILD_CORE`` macro
+defined.
+
diff --git a/Misc/NEWS.d/next/C API/2020-02-12-21-38-49.bpo-35081.5tj1yC.rst b/Misc/NEWS.d/next/C API/2020-02-12-21-38-49.bpo-35081.5tj1yC.rst
new file mode 100644
index 00000000000..6be33200d9e
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-02-12-21-38-49.bpo-35081.5tj1yC.rst
@@ -0,0 +1,3 @@
+Move the ``bytes_methods.h`` header file to the internal C API as
+``pycore_bytes_methods.h``: it only contains private symbols (prefixed by
+``_Py``), except of the ``PyDoc_STRVAR_shared()`` macro.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-02-16-10-44-24.bpo-32856.UjR8SD.rst b/Misc/NEWS.d/next/Core and Builtins/2018-02-16-10-44-24.bpo-32856.UjR8SD.rst
new file mode 100644
index 00000000000..c1cd68f6727
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2018-02-16-10-44-24.bpo-32856.UjR8SD.rst
@@ -0,0 +1,3 @@
+Optimized the idiom for assignment a temporary variable in comprehensions.
+Now ``for y in [expr]`` in comprehensions is as fast as a simple assignment
+``y = expr``.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-12-03-16-41-22.bpo-38960.kvoFM0.rst b/Misc/NEWS.d/next/Core and Builtins/2019-12-03-16-41-22.bpo-38960.kvoFM0.rst
new file mode 100644
index 00000000000..50d4b6c2868
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-12-03-16-41-22.bpo-38960.kvoFM0.rst
@@ -0,0 +1 @@
+Fix DTrace build issues on FreeBSD. Patch by David Carlier.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2019-12-30-15-56-07.bpo-36051.imaVlq.rst b/Misc/NEWS.d/next/Core and Builtins/2019-12-30-15-56-07.bpo-36051.imaVlq.rst
new file mode 100644
index 00000000000..f9d449216eb
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2019-12-30-15-56-07.bpo-36051.imaVlq.rst
@@ -0,0 +1 @@
+Drop the GIL during large ``bytes.join`` operations. Patch by Bruce Merry.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-05-13-36-08.bpo-39219.uHtKd4.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-05-13-36-08.bpo-39219.uHtKd4.rst
new file mode 100644
index 00000000000..dac8360df71
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-05-13-36-08.bpo-39219.uHtKd4.rst
@@ -0,0 +1,2 @@
+Syntax errors raised in the tokenizer now always set correct "text" and
+"offset" attributes.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-15-15-50-22.bpo-39320.oWARyk.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-15-15-50-22.bpo-39320.oWARyk.rst
new file mode 100644
index 00000000000..9508574f6c0
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-15-15-50-22.bpo-39320.oWARyk.rst
@@ -0,0 +1,4 @@
+
+Replace two complex bytecodes for building dicts with two simpler ones.
+The new bytecodes ``DICT_MERGE`` and ``DICT_UPDATE`` have been added
+The old bytecodes ``BUILD_MAP_UNPACK`` and ``BUILD_MAP_UNPACK_WITH_CALL`` have been removed.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-19-11-06-30.bpo-1635741.0mjsfm.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-19-11-06-30.bpo-1635741.0mjsfm.rst
new file mode 100644
index 00000000000..10fc23bcfa1
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-19-11-06-30.bpo-1635741.0mjsfm.rst
@@ -0,0 +1 @@
+Port _codecs extension module to multiphase initialization (:pep:`489`).
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-24-01-07-04.bpo-39434.S5ehj9.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-24-01-07-04.bpo-39434.S5ehj9.rst
new file mode 100644
index 00000000000..e5a413323ac
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-24-01-07-04.bpo-39434.S5ehj9.rst
@@ -0,0 +1,3 @@
+:term:`floor division` of float operation now has a better performance. Also
+the message of :exc:`ZeroDivisionError` for this operation is updated.
+Patch by Dong-hee Na.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-25-23-51-17.bpo-39453.xCOkYk.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-25-23-51-17.bpo-39453.xCOkYk.rst
new file mode 100644
index 00000000000..8c2e49f9474
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-25-23-51-17.bpo-39453.xCOkYk.rst
@@ -0,0 +1,2 @@
+Fixed a possible crash in :meth:`list.__contains__` when a list is changed
+during comparing items. Patch by Dong-hee Na.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-30-01-14-42.bpo-39492.eTuy0F.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-30-01-14-42.bpo-39492.eTuy0F.rst
new file mode 100644
index 00000000000..6e8b715c463
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-30-01-14-42.bpo-39492.eTuy0F.rst
@@ -0,0 +1 @@
+Fix a reference cycle in the C Pickler that was preventing the garbage collection of deleted, pickled objects.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-30-14-36-31.bpo-39502.IJu0rl.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-30-14-36-31.bpo-39502.IJu0rl.rst
new file mode 100644
index 00000000000..93b3639c80c
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-30-14-36-31.bpo-39502.IJu0rl.rst
@@ -0,0 +1,2 @@
+Fix :func:`time.localtime` on 64-bit AIX to support years before 1902 and after 2038.
+Patch by M Felt.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-04-10-27-41.bpo-39510.PMIh-f.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-04-10-27-41.bpo-39510.PMIh-f.rst
new file mode 100644
index 00000000000..9a38e4ab762
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-04-10-27-41.bpo-39510.PMIh-f.rst
@@ -0,0 +1 @@
+Fix segfault in ``readinto()`` method on closed BufferedReader.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-07-15-18-35.bpo-39579.itNmC0.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-07-15-18-35.bpo-39579.itNmC0.rst
new file mode 100644
index 00000000000..36d5c425670
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-07-15-18-35.bpo-39579.itNmC0.rst
@@ -0,0 +1 @@
+Change the ending column offset of `Attribute` nodes constructed in `ast_for_dotted_name` to point at the end of the current node and not at the end of the last `NAME` node.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-11-23-59-07.bpo-39606.a72Sxc.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-11-23-59-07.bpo-39606.a72Sxc.rst
new file mode 100644
index 00000000000..b7cbe4e91f5
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-11-23-59-07.bpo-39606.a72Sxc.rst
@@ -0,0 +1,2 @@
+Fix regression caused by fix for bpo-39386, that prevented calling
+``aclose`` on an async generator that had already been closed or exhausted.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-13-01-30-22.bpo-39573.uTFj1m.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-13-01-30-22.bpo-39573.uTFj1m.rst
new file mode 100644
index 00000000000..56e7e1ba324
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-13-01-30-22.bpo-39573.uTFj1m.rst
@@ -0,0 +1,2 @@
+Add :c:func:`Py_IS_TYPE` static inline function to check
+whether the object *o* type is *type*.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-13-07-35-00.bpo-39619.inb_master_chroot.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-13-07-35-00.bpo-39619.inb_master_chroot.rst
new file mode 100644
index 00000000000..18f32f7e804
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-13-07-35-00.bpo-39619.inb_master_chroot.rst
@@ -0,0 +1 @@
+Enable use of :func:`os.chroot` on HP-UX systems.
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-02-14-10-08-53.bpo-39573.BIIX2M.rst b/Misc/NEWS.d/next/Core and Builtins/2020-02-14-10-08-53.bpo-39573.BIIX2M.rst
new file mode 100644
index 00000000000..23396d3bd2b
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-02-14-10-08-53.bpo-39573.BIIX2M.rst
@@ -0,0 +1 @@
+Update clinic tool to use :c:func:`Py_IS_TYPE`. Patch by Dong-hee Na.
diff --git a/Misc/NEWS.d/next/Documentation/2019-12-15-22-04-41.bpo-38918.8JnDTS.rst b/Misc/NEWS.d/next/Documentation/2019-12-15-22-04-41.bpo-38918.8JnDTS.rst
deleted file mode 100644
index 5747936dd64..00000000000
--- a/Misc/NEWS.d/next/Documentation/2019-12-15-22-04-41.bpo-38918.8JnDTS.rst
+++ /dev/null
@@ -1,3 +0,0 @@
-Add an entry for ``__module__`` in the "function" & "method" sections of the
-`inspect docs types and members table
-`_
diff --git a/Misc/NEWS.d/next/Documentation/2020-01-17-13-59-21.bpo-39369.Bx5yE3.rst b/Misc/NEWS.d/next/Documentation/2020-01-17-13-59-21.bpo-39369.Bx5yE3.rst
new file mode 100644
index 00000000000..7f41735b9d3
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2020-01-17-13-59-21.bpo-39369.Bx5yE3.rst
@@ -0,0 +1 @@
+Update mmap readline method description. The fact that the readline method does update the file position should not be ignored since this might give the impression for the programmer that it doesn't update it.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Documentation/2020-01-27-18-18-42.bpo-39392.oiqcLO.rst b/Misc/NEWS.d/next/Documentation/2020-01-27-18-18-42.bpo-39392.oiqcLO.rst
new file mode 100644
index 00000000000..715874981f7
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2020-01-27-18-18-42.bpo-39392.oiqcLO.rst
@@ -0,0 +1 @@
+Explain that when filling with turtle, overlap regions may be left unfilled.
diff --git a/Misc/NEWS.d/next/Documentation/2020-01-27-22-24-51.bpo-39153.Pjl8jV.rst b/Misc/NEWS.d/next/Documentation/2020-01-27-22-24-51.bpo-39153.Pjl8jV.rst
new file mode 100644
index 00000000000..95be00b4b77
--- /dev/null
+++ b/Misc/NEWS.d/next/Documentation/2020-01-27-22-24-51.bpo-39153.Pjl8jV.rst
@@ -0,0 +1,5 @@
+Clarify refcounting semantics for the following functions:
+- PyObject_SetItem
+- PyMapping_SetItemString
+- PyDict_SetItem
+- PyDict_SetItemString
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/IDLE/2019-11-13-23-51-39.bpo-38792.xhTC5a.rst b/Misc/NEWS.d/next/IDLE/2019-11-13-23-51-39.bpo-38792.xhTC5a.rst
new file mode 100644
index 00000000000..9aa2f0ffddf
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2019-11-13-23-51-39.bpo-38792.xhTC5a.rst
@@ -0,0 +1,2 @@
+Close an IDLE shell calltip if a :exc:`KeyboardInterrupt`
+or shell restart occurs. Patch by Zackery Spytz.
diff --git a/Misc/NEWS.d/next/IDLE/2020-01-25-02-26-45.bpo-39388.x4TQNh.rst b/Misc/NEWS.d/next/IDLE/2020-01-25-02-26-45.bpo-39388.x4TQNh.rst
new file mode 100644
index 00000000000..42bbfb168c1
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2020-01-25-02-26-45.bpo-39388.x4TQNh.rst
@@ -0,0 +1 @@
+IDLE Settings Cancel button now cancels pending changes
diff --git a/Misc/NEWS.d/next/IDLE/2020-01-27-16-44-29.bpo-30780.nR80qu.rst b/Misc/NEWS.d/next/IDLE/2020-01-27-16-44-29.bpo-30780.nR80qu.rst
new file mode 100644
index 00000000000..2f65a00a5af
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2020-01-27-16-44-29.bpo-30780.nR80qu.rst
@@ -0,0 +1 @@
+Add remaining configdialog tests for buttons and highlights and keys tabs.
diff --git a/Misc/NEWS.d/next/IDLE/2020-02-10-17-09-48.bpo-39600.X6NsyM.rst b/Misc/NEWS.d/next/IDLE/2020-02-10-17-09-48.bpo-39600.X6NsyM.rst
new file mode 100644
index 00000000000..102aa75f581
--- /dev/null
+++ b/Misc/NEWS.d/next/IDLE/2020-02-10-17-09-48.bpo-39600.X6NsyM.rst
@@ -0,0 +1 @@
+In the font configuration window, remove duplicated font names.
diff --git a/Misc/NEWS.d/next/Library/2017-12-04-10-14-23.bpo-32173.e0C5dF.rst b/Misc/NEWS.d/next/Library/2017-12-04-10-14-23.bpo-32173.e0C5dF.rst
new file mode 100644
index 00000000000..fc8f36fb021
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2017-12-04-10-14-23.bpo-32173.e0C5dF.rst
@@ -0,0 +1,3 @@
+* Add `lazycache` function to `__all__`.
+* Use `dict.clear` to clear the cache.
+* Refactoring `getline` function and `checkcache` function.
diff --git a/Misc/NEWS.d/next/Library/2019-03-18-16-17-59.bpo-36350.udRSWE.rst b/Misc/NEWS.d/next/Library/2019-03-18-16-17-59.bpo-36350.udRSWE.rst
new file mode 100644
index 00000000000..43363fce165
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-03-18-16-17-59.bpo-36350.udRSWE.rst
@@ -0,0 +1,2 @@
+`inspect.Signature.parameters` and `inspect.BoundArguments.arguments` are
+now dicts instead of OrderedDicts. Patch contributed by Rémi Lapeyre.
diff --git a/Misc/NEWS.d/next/Library/2019-09-12-12-11-05.bpo-25597.mPMzVx.rst b/Misc/NEWS.d/next/Library/2019-09-12-12-11-05.bpo-25597.mPMzVx.rst
new file mode 100644
index 00000000000..5ad8c6d90fa
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-09-12-12-11-05.bpo-25597.mPMzVx.rst
@@ -0,0 +1,3 @@
+Ensure, if ``wraps`` is supplied to :class:`unittest.mock.MagicMock`, it is used
+to calculate return values for the magic methods instead of using the default
+return values. Patch by Karthikeyan Singaravelan.
diff --git a/Misc/NEWS.d/next/Library/2019-11-22-12-08-52.bpo-38878.EJ0cFf.rst b/Misc/NEWS.d/next/Library/2019-11-22-12-08-52.bpo-38878.EJ0cFf.rst
deleted file mode 100644
index 9cbdf08dd53..00000000000
--- a/Misc/NEWS.d/next/Library/2019-11-22-12-08-52.bpo-38878.EJ0cFf.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-Fixed __subclasshook__ of :class:`os.PathLike` to return a correct result
-upon inheritence. Patch by Bar Harel.
diff --git a/Misc/NEWS.d/next/Library/2019-12-09-17-24-29.bpo-34793.D82Dyu.rst b/Misc/NEWS.d/next/Library/2019-12-09-17-24-29.bpo-34793.D82Dyu.rst
new file mode 100644
index 00000000000..2089285ecdb
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-12-09-17-24-29.bpo-34793.D82Dyu.rst
@@ -0,0 +1,3 @@
+Remove support for ``with (await asyncio.lock):`` and ``with (yield from
+asyncio.lock):``. The same is correct for ``asyncio.Condition`` and
+``asyncio.Semaphore``.
diff --git a/Misc/NEWS.d/next/Library/2020-01-15-23-13-03.bpo-39274.lpc0-n.rst b/Misc/NEWS.d/next/Library/2020-01-15-23-13-03.bpo-39274.lpc0-n.rst
new file mode 100644
index 00000000000..4c398682b98
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-15-23-13-03.bpo-39274.lpc0-n.rst
@@ -0,0 +1 @@
+``bool(fraction.Fraction)`` now returns a boolean even if (numerator != 0) does not return a boolean (ex: numpy number).
diff --git a/Misc/NEWS.d/next/Library/2020-01-19-04-12-34.bpo-39349.7CV-LC.rst b/Misc/NEWS.d/next/Library/2020-01-19-04-12-34.bpo-39349.7CV-LC.rst
new file mode 100644
index 00000000000..cc52700f670
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-19-04-12-34.bpo-39349.7CV-LC.rst
@@ -0,0 +1,4 @@
+Added a new *cancel_futures* parameter to
+:meth:`concurrent.futures.Executor.shutdown` that cancels all pending futures
+which have not started running, instead of waiting for them to complete before
+shutting down the executor.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Library/2020-01-20-10-06-19.bpo-18819.H4qsoS.rst b/Misc/NEWS.d/next/Library/2020-01-20-10-06-19.bpo-18819.H4qsoS.rst
new file mode 100644
index 00000000000..e9f111ad62e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-20-10-06-19.bpo-18819.H4qsoS.rst
@@ -0,0 +1,3 @@
+Omit ``devmajor`` and ``devminor`` fields for non-device files in
+:mod:`tarfile` archives, enabling bit-for-bit compatibility with GNU
+``tar(1)``.
diff --git a/Misc/NEWS.d/next/Library/2020-01-23-16-08-58.bpo-39432.Cee6mi.rst b/Misc/NEWS.d/next/Library/2020-01-23-16-08-58.bpo-39432.Cee6mi.rst
new file mode 100644
index 00000000000..21c4ba86207
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-23-16-08-58.bpo-39432.Cee6mi.rst
@@ -0,0 +1 @@
+Implement PEP-489 algorithm for non-ascii "PyInit\_..." symbol names in distutils to make it export the correct init symbol also on Windows.
diff --git a/Misc/NEWS.d/next/Library/2020-01-24-13-24-35.bpo-39082.qKgrq_.rst b/Misc/NEWS.d/next/Library/2020-01-24-13-24-35.bpo-39082.qKgrq_.rst
new file mode 100644
index 00000000000..52c4ee1b33b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-24-13-24-35.bpo-39082.qKgrq_.rst
@@ -0,0 +1 @@
+Allow AsyncMock to correctly patch static/class methods
diff --git a/Misc/NEWS.d/next/Library/2020-01-25-13-41-27.bpo-38932.1pu_8I.rst b/Misc/NEWS.d/next/Library/2020-01-25-13-41-27.bpo-38932.1pu_8I.rst
new file mode 100644
index 00000000000..d9ce8e816bc
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-25-13-41-27.bpo-38932.1pu_8I.rst
@@ -0,0 +1 @@
+Mock fully resets child objects on reset_mock(). Patch by Vegard Stikbakke
diff --git a/Misc/NEWS.d/next/Library/2020-01-29-14-58-27.bpo-39485.Zy3ot6.rst b/Misc/NEWS.d/next/Library/2020-01-29-14-58-27.bpo-39485.Zy3ot6.rst
new file mode 100644
index 00000000000..f62c31fc686
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-29-14-58-27.bpo-39485.Zy3ot6.rst
@@ -0,0 +1,3 @@
+Fix a bug in :func:`unittest.mock.create_autospec` that would complain about
+the wrong number of arguments for custom descriptors defined in an extension
+module returning functions.
diff --git a/Misc/NEWS.d/next/Library/2020-01-29-22-47-12.bpo-39491.tdl17b.rst b/Misc/NEWS.d/next/Library/2020-01-29-22-47-12.bpo-39491.tdl17b.rst
new file mode 100644
index 00000000000..1dd36454dc2
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-29-22-47-12.bpo-39491.tdl17b.rst
@@ -0,0 +1,3 @@
+Add :data:`typing.Annotated` and ``include_extras`` parameter to
+:func:`typing.get_type_hints` as part of :pep:`593`. Patch by Till
+Varoquaux, documentation by Till Varoquaux and Konstantin Kashin.
diff --git a/Misc/NEWS.d/next/Library/2020-01-30-01-13-19.bpo-39493.CbFRi7.rst b/Misc/NEWS.d/next/Library/2020-01-30-01-13-19.bpo-39493.CbFRi7.rst
new file mode 100644
index 00000000000..b676629a441
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-30-01-13-19.bpo-39493.CbFRi7.rst
@@ -0,0 +1 @@
+Mark ``typing.IO.closed`` as a property
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Library/2020-01-30-09-07-16.bpo-39353.wTl9hc.rst b/Misc/NEWS.d/next/Library/2020-01-30-09-07-16.bpo-39353.wTl9hc.rst
new file mode 100644
index 00000000000..b6db7c5c588
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-01-30-09-07-16.bpo-39353.wTl9hc.rst
@@ -0,0 +1 @@
+The :func:`binascii.crc_hqx` function is no longer deprecated.
diff --git a/Misc/NEWS.d/next/Library/2020-02-02-10-08-25.bpo-12915.d6r50-.rst b/Misc/NEWS.d/next/Library/2020-02-02-10-08-25.bpo-12915.d6r50-.rst
new file mode 100644
index 00000000000..90ee0bcac79
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-02-10-08-25.bpo-12915.d6r50-.rst
@@ -0,0 +1,4 @@
+A new function ``resolve_name`` has been added to the ``pkgutil`` module.
+This resolves a string of the form ``'a.b.c.d'`` or ``'a.b:c.d'`` to an
+object. In the example, ``a.b`` is a package/module and ``c.d`` is an object
+within that package/module reached via recursive attribute access.
diff --git a/Misc/NEWS.d/next/Library/2020-02-02-14-46-34.bpo-39450.48R274.rst b/Misc/NEWS.d/next/Library/2020-02-02-14-46-34.bpo-39450.48R274.rst
new file mode 100644
index 00000000000..55fed519a2d
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-02-14-46-34.bpo-39450.48R274.rst
@@ -0,0 +1,2 @@
+Striped whitespace from docstring before returning it from
+:func:`unittest.case.shortDescription`.
diff --git a/Misc/NEWS.d/next/Library/2020-02-05-11-24-16.bpo-38149.GWsjHE.rst b/Misc/NEWS.d/next/Library/2020-02-05-11-24-16.bpo-38149.GWsjHE.rst
new file mode 100644
index 00000000000..b4ec60b2aba
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-05-11-24-16.bpo-38149.GWsjHE.rst
@@ -0,0 +1,2 @@
+:func:`sys.audit` is now called only once per call of :func:`glob.glob` and
+:func:`glob.iglob`.
diff --git a/Misc/NEWS.d/next/Library/2020-02-05-18-29-14.bpo-39559.L8i5YB.rst b/Misc/NEWS.d/next/Library/2020-02-05-18-29-14.bpo-39559.L8i5YB.rst
new file mode 100644
index 00000000000..881f26bdb7b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-05-18-29-14.bpo-39559.L8i5YB.rst
@@ -0,0 +1 @@
+Remove unused, undocumented argument ``getters`` from :func:`uuid.getnode`
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Library/2020-02-06-10-23-32.bpo-39567.VpFBxt.rst b/Misc/NEWS.d/next/Library/2020-02-06-10-23-32.bpo-39567.VpFBxt.rst
new file mode 100644
index 00000000000..3c4700f455b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-06-10-23-32.bpo-39567.VpFBxt.rst
@@ -0,0 +1,2 @@
+Added audit for :func:`os.walk`, :func:`os.fwalk`, :meth:`pathlib.Path.glob`
+and :meth:`pathlib.Path.rglob`.
diff --git a/Misc/NEWS.d/next/Library/2020-02-06-13-34-52.bpo-39350.wRwup1.rst b/Misc/NEWS.d/next/Library/2020-02-06-13-34-52.bpo-39350.wRwup1.rst
new file mode 100644
index 00000000000..1a09358082e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-06-13-34-52.bpo-39350.wRwup1.rst
@@ -0,0 +1,5 @@
+Fix regression in :class:`fractions.Fraction` if the numerator and/or the
+denominator is an :class:`int` subclass. The :func:`math.gcd` function is now
+used to normalize the *numerator* and *denominator*. :func:`math.gcd` always
+return a :class:`int` type. Previously, the GCD type depended on *numerator*
+and *denominator*.
diff --git a/Misc/NEWS.d/next/Library/2020-02-07-23-14-14.bpo-39595.DHwddE.rst b/Misc/NEWS.d/next/Library/2020-02-07-23-14-14.bpo-39595.DHwddE.rst
new file mode 100644
index 00000000000..3a461389af7
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-07-23-14-14.bpo-39595.DHwddE.rst
@@ -0,0 +1 @@
+Improved performance of zipfile.Path for files with a large number of entries. Also improved performance and fixed minor issue as published with `importlib_metadata 1.5 `_.
diff --git a/Misc/NEWS.d/next/Library/2020-02-08-13-37-00.bpo-39586.nfTPxX.rst b/Misc/NEWS.d/next/Library/2020-02-08-13-37-00.bpo-39586.nfTPxX.rst
new file mode 100644
index 00000000000..5189f131afd
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-08-13-37-00.bpo-39586.nfTPxX.rst
@@ -0,0 +1,2 @@
+The distutils ``bdist_msi`` command is deprecated in Python 3.9, use
+``bdist_wheel`` (wheel packages) instead.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Library/2020-02-09-05-51-05.bpo-39590.rf98GU.rst b/Misc/NEWS.d/next/Library/2020-02-09-05-51-05.bpo-39590.rf98GU.rst
new file mode 100644
index 00000000000..68625028fb7
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-09-05-51-05.bpo-39590.rf98GU.rst
@@ -0,0 +1 @@
+Collections.deque now holds strong references during deque.__contains__ and deque.count, fixing crashes.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Library/2020-02-12-10-04-39.bpo-21016.bFXPH7.rst b/Misc/NEWS.d/next/Library/2020-02-12-10-04-39.bpo-21016.bFXPH7.rst
new file mode 100644
index 00000000000..fb91bb38255
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-12-10-04-39.bpo-21016.bFXPH7.rst
@@ -0,0 +1,4 @@
+The :mod:`pydoc` and :mod:`trace` modules now use the :mod:`sysconfig`
+module to get the path to the Python standard library, to support uncommon
+installation path like ``/usr/lib64/python3.9/`` on Fedora.
+Patch by Jan Matějek.
diff --git a/Misc/NEWS.d/next/Library/2020-02-12-12-01-26.bpo-39474.RZMEUH.rst b/Misc/NEWS.d/next/Library/2020-02-12-12-01-26.bpo-39474.RZMEUH.rst
new file mode 100644
index 00000000000..e990f84a9db
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-12-12-01-26.bpo-39474.RZMEUH.rst
@@ -0,0 +1,2 @@
+Fixed starting position of AST for expressions like ``(a)(b)``, ``(a)[b]``
+and ``(a).b``.
diff --git a/Misc/NEWS.d/next/Library/2020-02-13-18-14-15.bpo-39627.Q0scyQ.rst b/Misc/NEWS.d/next/Library/2020-02-13-18-14-15.bpo-39627.Q0scyQ.rst
new file mode 100644
index 00000000000..4806aa67d95
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-13-18-14-15.bpo-39627.Q0scyQ.rst
@@ -0,0 +1 @@
+Fixed TypedDict totality check for inherited keys.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Library/2020-02-16-18-49-16.bpo-39104.cI5MJY.rst b/Misc/NEWS.d/next/Library/2020-02-16-18-49-16.bpo-39104.cI5MJY.rst
new file mode 100644
index 00000000000..52779bf0982
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-02-16-18-49-16.bpo-39104.cI5MJY.rst
@@ -0,0 +1,2 @@
+Fix hanging ProcessPoolExcutor on ``shutdown(wait=False)`` when a task has
+failed pickling.
diff --git a/Misc/NEWS.d/next/Security/2020-01-07-00-42-08.bpo-39184.fe7NgK.rst b/Misc/NEWS.d/next/Security/2020-01-07-00-42-08.bpo-39184.fe7NgK.rst
new file mode 100644
index 00000000000..1ab5d4d70ee
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2020-01-07-00-42-08.bpo-39184.fe7NgK.rst
@@ -0,0 +1 @@
+Add audit events to command execution functions in os and pty modules.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Security/2020-01-28-20-54-09.bpo-39401.he7h_A.rst b/Misc/NEWS.d/next/Security/2020-01-28-20-54-09.bpo-39401.he7h_A.rst
new file mode 100644
index 00000000000..78274acfcb7
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2020-01-28-20-54-09.bpo-39401.he7h_A.rst
@@ -0,0 +1 @@
+Avoid unsafe DLL load at startup on Windows 7 and earlier.
diff --git a/Misc/NEWS.d/next/Security/2020-02-07-23-54-18.bpo-39184.v-ue-v.rst b/Misc/NEWS.d/next/Security/2020-02-07-23-54-18.bpo-39184.v-ue-v.rst
new file mode 100644
index 00000000000..cf25c24d587
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2020-02-07-23-54-18.bpo-39184.v-ue-v.rst
@@ -0,0 +1 @@
+Add audit events to functions in `fcntl`, `msvcrt`, `os`, `resource`, `shutil`, `signal` and `syslog`.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Tests/2020-01-30-15-04-54.bpo-39502.chbpII.rst b/Misc/NEWS.d/next/Tests/2020-01-30-15-04-54.bpo-39502.chbpII.rst
new file mode 100644
index 00000000000..0a13746e347
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2020-01-30-15-04-54.bpo-39502.chbpII.rst
@@ -0,0 +1,2 @@
+Skip test_zipfile.test_add_file_after_2107() if :func:`time.localtime` fails
+with :exc:`OverflowError`. It is the case on AIX 6.1 for example.
diff --git a/Misc/NEWS.d/next/Tests/2020-02-11-00-38-32.bpo-38325.HgmfoE.rst b/Misc/NEWS.d/next/Tests/2020-02-11-00-38-32.bpo-38325.HgmfoE.rst
new file mode 100644
index 00000000000..75033799152
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2020-02-11-00-38-32.bpo-38325.HgmfoE.rst
@@ -0,0 +1 @@
+Skip tests on non-BMP characters of test_winconsoleio.
diff --git a/Misc/NEWS.d/next/Windows/2020-01-02-01-11-53.bpo-39185.T4herN.rst b/Misc/NEWS.d/next/Windows/2020-01-02-01-11-53.bpo-39185.T4herN.rst
new file mode 100644
index 00000000000..3b84bd52172
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2020-01-02-01-11-53.bpo-39185.T4herN.rst
@@ -0,0 +1 @@
+The build.bat script has additional options for very-quiet output (-q) and very-verbose output (-vv)
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Windows/2020-01-11-22-53-55.bpo-38883.X7FRaN.rst b/Misc/NEWS.d/next/Windows/2020-01-11-22-53-55.bpo-38883.X7FRaN.rst
new file mode 100644
index 00000000000..c552e850a36
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2020-01-11-22-53-55.bpo-38883.X7FRaN.rst
@@ -0,0 +1,5 @@
+:meth:`~pathlib.Path.home()` and :meth:`~pathlib.Path.expanduser()` on Windows
+now prefer :envvar:`USERPROFILE` and no longer use :envvar:`HOME`, which is not
+normally set for regular user accounts. This makes them again behave like
+:func:`os.path.expanduser`, which was changed to ignore :envvar:`HOME` in 3.8,
+see :issue:`36264`.
diff --git a/Misc/NEWS.d/next/Windows/2020-01-20-23-42-53.bpo-39393.gWlJDG.rst b/Misc/NEWS.d/next/Windows/2020-01-20-23-42-53.bpo-39393.gWlJDG.rst
new file mode 100644
index 00000000000..025b7e96a6e
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2020-01-20-23-42-53.bpo-39393.gWlJDG.rst
@@ -0,0 +1,2 @@
+Improve the error message when attempting to load a DLL with unresolved
+dependencies.
diff --git a/Misc/NEWS.d/next/Windows/2020-01-24-03-15-05.bpo-39439.sFxGfR.rst b/Misc/NEWS.d/next/Windows/2020-01-24-03-15-05.bpo-39439.sFxGfR.rst
new file mode 100644
index 00000000000..d677c4c3e02
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2020-01-24-03-15-05.bpo-39439.sFxGfR.rst
@@ -0,0 +1 @@
+Honor the Python path when a virtualenv is active on Windows.
\ No newline at end of file
diff --git a/Misc/NEWS.d/next/Windows/2020-02-04-19-50-53.bpo-39553._EnweA.rst b/Misc/NEWS.d/next/Windows/2020-02-04-19-50-53.bpo-39553._EnweA.rst
new file mode 100644
index 00000000000..bf6496fa561
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2020-02-04-19-50-53.bpo-39553._EnweA.rst
@@ -0,0 +1 @@
+Delete unused code related to SxS manifests.
diff --git a/Misc/SpecialBuilds.txt b/Misc/SpecialBuilds.txt
index d1a032165f8..27369abfb37 100644
--- a/Misc/SpecialBuilds.txt
+++ b/Misc/SpecialBuilds.txt
@@ -46,9 +46,7 @@ Build option: ``./configure --with-trace-refs``.
Turn on heavy reference debugging. This is major surgery. Every PyObject grows
two more pointers, to maintain a doubly-linked list of all live heap-allocated
objects. Most built-in type objects are not in this list, as they're statically
-allocated. Starting in Python 2.3, if COUNT_ALLOCS (see below) is also defined,
-a static type object T does appear in this list if at least one object of type T
-has been created.
+allocated.
Note that because the fundamental PyObject layout changes, Python modules
compiled with Py_TRACE_REFS are incompatible with modules compiled without it.
@@ -165,55 +163,6 @@ by not defining NDEBUG), and some routines do additional sanity checks inside
"#ifdef Py_DEBUG" blocks.
-COUNT_ALLOCS
-------------
-
-Each type object grows three new members:
-
- /* Number of times an object of this type was allocated. */
- int tp_allocs;
-
- /* Number of times an object of this type was deallocated. */
- int tp_frees;
-
- /* Highwater mark: the maximum value of tp_allocs - tp_frees so
- * far; or, IOW, the largest number of objects of this type alive at
- * the same time.
- */
- int tp_maxalloc;
-
-Allocation and deallocation code keeps these counts up to date. Py_FinalizeEx()
-displays a summary of the info returned by sys.getcounts() (see below), along
-with assorted other special allocation counts (like the number of tuple
-allocations satisfied by a tuple free-list, the number of 1-character strings
-allocated, etc).
-
-Before Python 2.2, type objects were immortal, and the COUNT_ALLOCS
-implementation relies on that. As of Python 2.2, heap-allocated type/ class
-objects can go away. COUNT_ALLOCS can blow up in 2.2 and 2.2.1 because of this;
-this was fixed in 2.2.2. Use of COUNT_ALLOCS makes all heap-allocated type
-objects immortal, except for those for which no object of that type is ever
-allocated.
-
-Starting with Python 2.3, If Py_TRACE_REFS is also defined, COUNT_ALLOCS
-arranges to ensure that the type object for each allocated object appears in the
-doubly-linked list of all objects maintained by Py_TRACE_REFS.
-
-Special gimmicks:
-
-sys.getcounts()
- Return a list of 4-tuples, one entry for each type object for which at least
- one object of that type was allocated. Each tuple is of the form:
-
- (tp_name, tp_allocs, tp_frees, tp_maxalloc)
-
- Each distinct type object gets a distinct entry in this list, even if two or
- more type objects have the same tp_name (in which case there's no way to
- distinguish them by looking at this list). The list is ordered by time of
- first object allocation: the type object for which the first allocation of
- an object of that type occurred most recently is at the front of the list.
-
-
LLTRACE
-------
diff --git a/Misc/python.man b/Misc/python.man
index 3aa9f1f9c7e..89a15a5e7b2 100644
--- a/Misc/python.man
+++ b/Misc/python.man
@@ -273,7 +273,41 @@ field matches the line number, where zero matches all line numbers and
is thus equivalent to an omitted line number.
.TP
.BI "\-X " option
-Set implementation specific option.
+Set implementation specific option. The following options are available:
+
+ -X faulthandler: enable faulthandler
+
+ -X showrefcount: output the total reference count and number of used
+ memory blocks when the program finishes or after each statement in the
+ interactive interpreter. This only works on debug builds
+
+ -X tracemalloc: start tracing Python memory allocations using the
+ tracemalloc module. By default, only the most recent frame is stored in a
+ traceback of a trace. Use -X tracemalloc=NFRAME to start tracing with a
+ traceback limit of NFRAME frames
+
+ -X importtime: show how long each import takes. It shows module name,
+ cumulative time (including nested imports) and self time (excluding
+ nested imports). Note that its output may be broken in multi-threaded
+ application. Typical usage is python3 -X importtime -c 'import asyncio'
+
+ -X dev: enable CPython’s “development mode”, introducing additional runtime
+ checks which are too expensive to be enabled by default. It will not be
+ more verbose than the default if the code is correct: new warnings are
+ only emitted when an issue is detected. Effect of the developer mode:
+ * Add default warning filter, as -W default
+ * Install debug hooks on memory allocators: see the PyMem_SetupDebugHooks() C function
+ * Enable the faulthandler module to dump the Python traceback on a crash
+ * Enable asyncio debug mode
+ * Set the dev_mode attribute of sys.flags to True
+ * io.IOBase destructor logs close() exceptions
+
+ -X utf8: enable UTF-8 mode for operating system interfaces, overriding the default
+ locale-aware mode. -X utf8=0 explicitly disables UTF-8 mode (even when it would
+ otherwise activate automatically). See PYTHONUTF8 for more details
+
+ -X pycache_prefix=PATH: enable writing .pyc files to a parallel tree rooted at the
+ given directory instead of to the code tree.
.TP
.B \-x
Skip the first line of the source. This is intended for a DOS
diff --git a/Misc/valgrind-python.supp b/Misc/valgrind-python.supp
index 38a5ea3cd2b..c9c45ba7ed6 100644
--- a/Misc/valgrind-python.supp
+++ b/Misc/valgrind-python.supp
@@ -263,6 +263,14 @@
}
+{
+ Uninitialised byte(s) false alarm, see bpo-35561
+ Memcheck:Param
+ epoll_ctl(event)
+ fun:epoll_ctl
+ fun:pyepoll_internal_ctl
+}
+
{
ZLIB problems, see test_gzip
Memcheck:Cond
diff --git a/Modules/Setup b/Modules/Setup
index 983fa014ecb..40266a192bc 100644
--- a/Modules/Setup
+++ b/Modules/Setup
@@ -167,8 +167,8 @@ _symtable symtablemodule.c
# Modules that should always be present (non UNIX dependent):
#array arraymodule.c # array objects
-#cmath cmathmodule.c _math.c # -lm # complex math library functions
-#math mathmodule.c _math.c # -lm # math library functions, e.g. sin()
+#cmath cmathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # complex math library functions
+#math mathmodule.c _math.c -DPy_BUILD_CORE_MODULE # -lm # math library functions, e.g. sin()
#_contextvars _contextvarsmodule.c # Context Variables
#_struct _struct.c # binary structure packing/unpacking
#_weakref _weakref.c # basic weak reference support
diff --git a/Modules/_asynciomodule.c b/Modules/_asynciomodule.c
index 70da40a8a3b..5aea74332c5 100644
--- a/Modules/_asynciomodule.c
+++ b/Modules/_asynciomodule.c
@@ -142,7 +142,7 @@ _is_coroutine(PyObject *coro)
Do this check after 'future_init()'; in case we need to raise
an error, __del__ needs a properly initialized object.
*/
- PyObject *res = _PyObject_CallOneArg(asyncio_iscoroutine_func, coro);
+ PyObject *res = PyObject_CallOneArg(asyncio_iscoroutine_func, coro);
if (res == NULL) {
return -1;
}
@@ -367,7 +367,7 @@ call_soon(PyObject *loop, PyObject *func, PyObject *arg, PyObject *ctx)
}
stack[nargs] = (PyObject *)ctx;
- handle = _PyObject_Vectorcall(callable, stack, nargs, context_kwname);
+ handle = PyObject_Vectorcall(callable, stack, nargs, context_kwname);
Py_DECREF(callable);
}
@@ -1007,7 +1007,7 @@ _asyncio_Future_remove_done_callback(FutureObj *self, PyObject *fn)
}
if (j < len) {
- Py_SIZE(newlist) = j;
+ Py_SET_SIZE(newlist, j);
}
j = PyList_GET_SIZE(newlist);
len = PyList_GET_SIZE(self->fut_callbacks);
@@ -1287,7 +1287,7 @@ static PyObject *
_asyncio_Future__repr_info_impl(FutureObj *self)
/*[clinic end generated code: output=fa69e901bd176cfb input=f21504d8e2ae1ca2]*/
{
- return _PyObject_CallOneArg(asyncio_future_repr_info_func, (PyObject *)self);
+ return PyObject_CallOneArg(asyncio_future_repr_info_func, (PyObject *)self);
}
static PyObject *
@@ -1363,7 +1363,7 @@ FutureObj_finalize(FutureObj *fut)
func = _PyObject_GetAttrId(fut->fut_loop, &PyId_call_exception_handler);
if (func != NULL) {
- PyObject *res = _PyObject_CallOneArg(func, context);
+ PyObject *res = PyObject_CallOneArg(func, context);
if (res == NULL) {
PyErr_WriteUnraisable(func);
}
@@ -2126,13 +2126,13 @@ _asyncio_Task_current_task_impl(PyTypeObject *type, PyObject *loop)
Py_DECREF(current_task_func);
return NULL;
}
- ret = _PyObject_CallOneArg(current_task_func, loop);
+ ret = PyObject_CallOneArg(current_task_func, loop);
Py_DECREF(current_task_func);
Py_DECREF(loop);
return ret;
}
else {
- ret = _PyObject_CallOneArg(current_task_func, loop);
+ ret = PyObject_CallOneArg(current_task_func, loop);
Py_DECREF(current_task_func);
return ret;
}
@@ -2168,7 +2168,7 @@ _asyncio_Task_all_tasks_impl(PyTypeObject *type, PyObject *loop)
return NULL;
}
- res = _PyObject_CallOneArg(all_tasks_func, loop);
+ res = PyObject_CallOneArg(all_tasks_func, loop);
Py_DECREF(all_tasks_func);
return res;
}
@@ -2181,7 +2181,7 @@ static PyObject *
_asyncio_Task__repr_info_impl(TaskObj *self)
/*[clinic end generated code: output=6a490eb66d5ba34b input=3c6d051ed3ddec8b]*/
{
- return _PyObject_CallOneArg(asyncio_task_repr_info_func, (PyObject *)self);
+ return PyObject_CallOneArg(asyncio_task_repr_info_func, (PyObject *)self);
}
/*[clinic input]
@@ -2431,7 +2431,7 @@ TaskObj_finalize(TaskObj *task)
func = _PyObject_GetAttrId(task->task_loop, &PyId_call_exception_handler);
if (func != NULL) {
- PyObject *res = _PyObject_CallOneArg(func, context);
+ PyObject *res = PyObject_CallOneArg(func, context);
if (res == NULL) {
PyErr_WriteUnraisable(func);
}
@@ -2571,7 +2571,7 @@ task_set_error_soon(TaskObj *task, PyObject *et, const char *format, ...)
return NULL;
}
- PyObject *e = _PyObject_CallOneArg(et, msg);
+ PyObject *e = PyObject_CallOneArg(et, msg);
Py_DECREF(msg);
if (e == NULL) {
return NULL;
@@ -2841,7 +2841,7 @@ task_step_impl(TaskObj *task, PyObject *exc)
PyObject *stack[2];
stack[0] = wrapper;
stack[1] = (PyObject *)task->task_context;
- res = _PyObject_Vectorcall(add_cb, stack, 1, context_kwname);
+ res = PyObject_Vectorcall(add_cb, stack, 1, context_kwname);
Py_DECREF(add_cb);
Py_DECREF(wrapper);
if (res == NULL) {
diff --git a/Modules/_blake2/blake2module.c b/Modules/_blake2/blake2module.c
index e2a3d420d4e..9d280a9ccd5 100644
--- a/Modules/_blake2/blake2module.c
+++ b/Modules/_blake2/blake2module.c
@@ -62,7 +62,7 @@ PyInit__blake2(void)
return NULL;
/* BLAKE2b */
- Py_TYPE(&PyBlake2_BLAKE2bType) = &PyType_Type;
+ Py_SET_TYPE(&PyBlake2_BLAKE2bType, &PyType_Type);
if (PyType_Ready(&PyBlake2_BLAKE2bType) < 0) {
return NULL;
}
@@ -82,7 +82,7 @@ PyInit__blake2(void)
PyModule_AddIntConstant(m, "BLAKE2B_MAX_DIGEST_SIZE", BLAKE2B_OUTBYTES);
/* BLAKE2s */
- Py_TYPE(&PyBlake2_BLAKE2sType) = &PyType_Type;
+ Py_SET_TYPE(&PyBlake2_BLAKE2sType, &PyType_Type);
if (PyType_Ready(&PyBlake2_BLAKE2sType) < 0) {
return NULL;
}
diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c
index a8ffb699557..952072102d5 100644
--- a/Modules/_codecsmodule.c
+++ b/Modules/_codecsmodule.c
@@ -1039,13 +1039,17 @@ static PyMethodDef _codecs_functions[] = {
{NULL, NULL} /* sentinel */
};
+static PyModuleDef_Slot _codecs_slots[] = {
+ {0, NULL}
+};
+
static struct PyModuleDef codecsmodule = {
PyModuleDef_HEAD_INIT,
"_codecs",
NULL,
- -1,
+ 0,
_codecs_functions,
- NULL,
+ _codecs_slots,
NULL,
NULL,
NULL
@@ -1054,5 +1058,5 @@ static struct PyModuleDef codecsmodule = {
PyMODINIT_FUNC
PyInit__codecs(void)
{
- return PyModule_Create(&codecsmodule);
+ return PyModuleDef_Init(&codecsmodule);
}
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index 1d23973fd05..057d4044183 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -172,7 +172,7 @@ deque_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
MARK_END(b->rightlink);
assert(BLOCKLEN >= 2);
- Py_SIZE(deque) = 0;
+ Py_SET_SIZE(deque, 0);
deque->leftblock = b;
deque->rightblock = b;
deque->leftindex = CENTER + 1;
@@ -196,7 +196,7 @@ deque_pop(dequeobject *deque, PyObject *unused)
}
item = deque->rightblock->data[deque->rightindex];
deque->rightindex--;
- Py_SIZE(deque)--;
+ Py_SET_SIZE(deque, Py_SIZE(deque) - 1);
deque->state++;
if (deque->rightindex < 0) {
@@ -234,7 +234,7 @@ deque_popleft(dequeobject *deque, PyObject *unused)
assert(deque->leftblock != NULL);
item = deque->leftblock->data[deque->leftindex];
deque->leftindex++;
- Py_SIZE(deque)--;
+ Py_SET_SIZE(deque, Py_SIZE(deque) - 1);
deque->state++;
if (deque->leftindex == BLOCKLEN) {
@@ -287,7 +287,7 @@ deque_append_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen)
MARK_END(b->rightlink);
deque->rightindex = -1;
}
- Py_SIZE(deque)++;
+ Py_SET_SIZE(deque, Py_SIZE(deque) + 1);
deque->rightindex++;
deque->rightblock->data[deque->rightindex] = item;
if (NEEDS_TRIM(deque, maxlen)) {
@@ -324,7 +324,7 @@ deque_appendleft_internal(dequeobject *deque, PyObject *item, Py_ssize_t maxlen)
MARK_END(b->leftlink);
deque->leftindex = BLOCKLEN;
}
- Py_SIZE(deque)++;
+ Py_SET_SIZE(deque, Py_SIZE(deque) + 1);
deque->leftindex--;
deque->leftblock->data[deque->leftindex] = item;
if (NEEDS_TRIM(deque, deque->maxlen)) {
@@ -512,7 +512,7 @@ deque_copy(PyObject *deque, PyObject *Py_UNUSED(ignored))
return NULL;
}
if (old_deque->maxlen < 0)
- result = _PyObject_CallOneArg((PyObject *)(Py_TYPE(deque)), deque);
+ result = PyObject_CallOneArg((PyObject *)(Py_TYPE(deque)), deque);
else
result = PyObject_CallFunction((PyObject *)(Py_TYPE(deque)), "Oi",
deque, old_deque->maxlen, NULL);
@@ -539,7 +539,7 @@ deque_concat(dequeobject *deque, PyObject *other)
if (rv == 0) {
PyErr_Format(PyExc_TypeError,
"can only concatenate deque (not \"%.200s\") to deque",
- other->ob_type->tp_name);
+ Py_TYPE(other)->tp_name);
}
return NULL;
}
@@ -597,7 +597,7 @@ deque_clear(dequeobject *deque)
/* Set the deque to be empty using the newly allocated block */
MARK_END(b->leftlink);
MARK_END(b->rightlink);
- Py_SIZE(deque) = 0;
+ Py_SET_SIZE(deque, 0);
deque->leftblock = b;
deque->rightblock = b;
deque->leftindex = CENTER + 1;
@@ -680,7 +680,7 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n)
if (deque->rightindex == BLOCKLEN - 1) {
block *b = newblock();
if (b == NULL) {
- Py_SIZE(deque) += i;
+ Py_SET_SIZE(deque, Py_SIZE(deque) + i);
return NULL;
}
b->leftlink = deque->rightblock;
@@ -700,7 +700,7 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n)
deque->rightblock->data[deque->rightindex] = item;
}
}
- Py_SIZE(deque) += i;
+ Py_SET_SIZE(deque, Py_SIZE(deque) + i);
Py_INCREF(deque);
return (PyObject *)deque;
}
@@ -965,7 +965,9 @@ deque_count(dequeobject *deque, PyObject *v)
while (--n >= 0) {
CHECK_NOT_END(b);
item = b->data[index];
+ Py_INCREF(item);
cmp = PyObject_RichCompareBool(item, v, Py_EQ);
+ Py_DECREF(item);
if (cmp < 0)
return NULL;
count += cmp;
@@ -1002,7 +1004,9 @@ deque_contains(dequeobject *deque, PyObject *v)
while (--n >= 0) {
CHECK_NOT_END(b);
item = b->data[index];
+ Py_INCREF(item);
cmp = PyObject_RichCompareBool(item, v, Py_EQ);
+ Py_DECREF(item);
if (cmp) {
return cmp;
}
@@ -2395,7 +2399,7 @@ tuplegetter_descr_get(PyObject *self, PyObject *obj, PyObject *type)
"descriptor for index '%zd' for tuple subclasses "
"doesn't apply to '%s' object",
index,
- obj->ob_type->tp_name);
+ Py_TYPE(obj)->tp_name);
return NULL;
}
diff --git a/Modules/_csv.c b/Modules/_csv.c
index aaf377650c0..42437728f2e 100644
--- a/Modules/_csv.c
+++ b/Modules/_csv.c
@@ -236,7 +236,7 @@ _set_char(const char *name, Py_UCS4 *target, PyObject *src, Py_UCS4 dflt)
if (!PyUnicode_Check(src)) {
PyErr_Format(PyExc_TypeError,
"\"%s\" must be string, not %.200s", name,
- src->ob_type->tp_name);
+ Py_TYPE(src)->tp_name);
return -1;
}
len = PyUnicode_GetLength(src);
@@ -514,10 +514,10 @@ _call_dialect(PyObject *dialect_inst, PyObject *kwargs)
{
PyObject *type = (PyObject *)&Dialect_Type;
if (dialect_inst) {
- return _PyObject_FastCallDict(type, &dialect_inst, 1, kwargs);
+ return PyObject_VectorcallDict(type, &dialect_inst, 1, kwargs);
}
else {
- return _PyObject_FastCallDict(type, NULL, 0, kwargs);
+ return PyObject_VectorcallDict(type, NULL, 0, kwargs);
}
}
@@ -807,7 +807,7 @@ Reader_iternext(ReaderObj *self)
"iterator should return strings, "
"not %.200s "
"(did you open the file in text mode?)",
- lineobj->ob_type->tp_name
+ Py_TYPE(lineobj)->tp_name
);
Py_DECREF(lineobj);
return NULL;
@@ -1168,7 +1168,7 @@ csv_writerow(WriterObj *self, PyObject *seq)
if (iter == NULL)
return PyErr_Format(_csvstate_global->error_obj,
"iterable expected, not %.200s",
- seq->ob_type->tp_name);
+ Py_TYPE(seq)->tp_name);
/* Join all fields in internal buffer.
*/
@@ -1240,7 +1240,7 @@ csv_writerow(WriterObj *self, PyObject *seq)
if (line == NULL) {
return NULL;
}
- result = _PyObject_CallOneArg(self->write, line);
+ result = PyObject_CallOneArg(self->write, line);
Py_DECREF(line);
return result;
}
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index d38d892be62..4747195c2e6 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -2401,6 +2401,23 @@ converters_from_argtypes(PyObject *ob)
for (i = 0; i < nArgs; ++i) {
PyObject *cnv;
PyObject *tp = PyTuple_GET_ITEM(ob, i);
+/*
+ * The following checks, relating to bpo-16575 and bpo-16576, have been
+ * disabled. The reason is that, although there is a definite problem with
+ * how libffi handles unions (https://github.com/libffi/libffi/issues/33),
+ * there are numerous libraries which pass structures containing unions
+ * by values - especially on Windows but examples also exist on Linux
+ * (https://bugs.python.org/msg359834).
+ *
+ * It may not be possible to get proper support for unions and bitfields
+ * until support is forthcoming in libffi, but for now, adding the checks
+ * has caused problems in otherwise-working software, which suggests it
+ * is better to disable the checks.
+ *
+ * Although specific examples reported relate specifically to unions and
+ * not bitfields, the bitfields check is also being disabled as a
+ * precaution.
+
StgDictObject *stgdict = PyType_stgdict(tp);
if (stgdict != NULL) {
@@ -2428,6 +2445,7 @@ converters_from_argtypes(PyObject *ob)
return NULL;
}
}
+ */
if (_PyObject_LookupAttrId(tp, &PyId_from_param, &cnv) <= 0) {
Py_DECREF(converters);
@@ -3554,10 +3572,12 @@ PyCFuncPtr_FromDll(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (PySys_Audit("ctypes.dlsym",
((uintptr_t)name & ~0xFFFF) ? "Os" : "On",
dll, name) < 0) {
+ Py_DECREF(ftuple);
return NULL;
}
#else
if (PySys_Audit("ctypes.dlsym", "Os", dll, name) < 0) {
+ Py_DECREF(ftuple);
return NULL;
}
#endif
@@ -5738,42 +5758,42 @@ PyInit__ctypes(void)
if (PyType_Ready(&PyCData_Type) < 0)
return NULL;
- Py_TYPE(&Struct_Type) = &PyCStructType_Type;
+ Py_SET_TYPE(&Struct_Type, &PyCStructType_Type);
Struct_Type.tp_base = &PyCData_Type;
if (PyType_Ready(&Struct_Type) < 0)
return NULL;
Py_INCREF(&Struct_Type);
PyModule_AddObject(m, "Structure", (PyObject *)&Struct_Type);
- Py_TYPE(&Union_Type) = &UnionType_Type;
+ Py_SET_TYPE(&Union_Type, &UnionType_Type);
Union_Type.tp_base = &PyCData_Type;
if (PyType_Ready(&Union_Type) < 0)
return NULL;
Py_INCREF(&Union_Type);
PyModule_AddObject(m, "Union", (PyObject *)&Union_Type);
- Py_TYPE(&PyCPointer_Type) = &PyCPointerType_Type;
+ Py_SET_TYPE(&PyCPointer_Type, &PyCPointerType_Type);
PyCPointer_Type.tp_base = &PyCData_Type;
if (PyType_Ready(&PyCPointer_Type) < 0)
return NULL;
Py_INCREF(&PyCPointer_Type);
PyModule_AddObject(m, "_Pointer", (PyObject *)&PyCPointer_Type);
- Py_TYPE(&PyCArray_Type) = &PyCArrayType_Type;
+ Py_SET_TYPE(&PyCArray_Type, &PyCArrayType_Type);
PyCArray_Type.tp_base = &PyCData_Type;
if (PyType_Ready(&PyCArray_Type) < 0)
return NULL;
Py_INCREF(&PyCArray_Type);
PyModule_AddObject(m, "Array", (PyObject *)&PyCArray_Type);
- Py_TYPE(&Simple_Type) = &PyCSimpleType_Type;
+ Py_SET_TYPE(&Simple_Type, &PyCSimpleType_Type);
Simple_Type.tp_base = &PyCData_Type;
if (PyType_Ready(&Simple_Type) < 0)
return NULL;
Py_INCREF(&Simple_Type);
PyModule_AddObject(m, "_SimpleCData", (PyObject *)&Simple_Type);
- Py_TYPE(&PyCFuncPtr_Type) = &PyCFuncPtrType_Type;
+ Py_SET_TYPE(&PyCFuncPtr_Type, &PyCFuncPtrType_Type);
PyCFuncPtr_Type.tp_base = &PyCData_Type;
if (PyType_Ready(&PyCFuncPtr_Type) < 0)
return NULL;
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c
index 7b13fa041a2..5f29f95b128 100644
--- a/Modules/_ctypes/callproc.c
+++ b/Modules/_ctypes/callproc.c
@@ -945,7 +945,7 @@ static PyObject *GetResult(PyObject *restype, void *result, PyObject *checker)
if (!checker || !retval)
return retval;
- v = _PyObject_CallOneArg(checker, retval);
+ v = PyObject_CallOneArg(checker, retval);
if (v == NULL)
_PyTraceback_Add("GetResult", "_ctypes/callproc.c", __LINE__-2);
Py_DECREF(retval);
@@ -1138,7 +1138,7 @@ PyObject *_ctypes_callproc(PPROC pProc,
if (argtypes && argtype_count > i) {
PyObject *v;
converter = PyTuple_GET_ITEM(argtypes, i);
- v = _PyObject_CallOneArg(converter, arg);
+ v = PyObject_CallOneArg(converter, arg);
if (v == NULL) {
_ctypes_extend_error(PyExc_ArgError, "argument %zd: ", i+1);
goto cleanup;
@@ -1311,8 +1311,9 @@ static PyObject *load_library(PyObject *self, PyObject *args)
if (err == ERROR_MOD_NOT_FOUND) {
PyErr_Format(PyExc_FileNotFoundError,
- ("Could not find module '%.500S'. Try using "
- "the full path with constructor syntax."),
+ ("Could not find module '%.500S' (or one of its "
+ "dependencies). Try using the full path with "
+ "constructor syntax."),
nameobj);
return NULL;
} else if (err) {
@@ -1834,7 +1835,7 @@ pointer(PyObject *self, PyObject *arg)
typ = PyDict_GetItemWithError(_ctypes_ptrtype_cache, (PyObject *)Py_TYPE(arg));
if (typ) {
- return _PyObject_CallOneArg(typ, arg);
+ return PyObject_CallOneArg(typ, arg);
}
else if (PyErr_Occurred()) {
return NULL;
@@ -1842,7 +1843,7 @@ pointer(PyObject *self, PyObject *arg)
typ = POINTER(NULL, (PyObject *)Py_TYPE(arg));
if (typ == NULL)
return NULL;
- result = _PyObject_CallOneArg(typ, arg);
+ result = PyObject_CallOneArg(typ, arg);
Py_DECREF(typ);
return result;
}
diff --git a/Modules/_ctypes/cfield.c b/Modules/_ctypes/cfield.c
index e0a50fde6a0..f860e6e51b2 100644
--- a/Modules/_ctypes/cfield.c
+++ b/Modules/_ctypes/cfield.c
@@ -274,7 +274,7 @@ static void
PyCField_dealloc(PyObject *self)
{
PyCField_clear((CFieldObject *)self);
- self->ob_type->tp_free((PyObject *)self);
+ Py_TYPE(self)->tp_free((PyObject *)self);
}
static PyObject *
@@ -1175,7 +1175,7 @@ u_set(void *ptr, PyObject *value, Py_ssize_t size)
if (!PyUnicode_Check(value)) {
PyErr_Format(PyExc_TypeError,
"unicode string expected instead of %s instance",
- value->ob_type->tp_name);
+ Py_TYPE(value)->tp_name);
return NULL;
} else
Py_INCREF(value);
@@ -1234,7 +1234,7 @@ U_set(void *ptr, PyObject *value, Py_ssize_t length)
if (!PyUnicode_Check(value)) {
PyErr_Format(PyExc_TypeError,
"unicode string expected instead of %s instance",
- value->ob_type->tp_name);
+ Py_TYPE(value)->tp_name);
return NULL;
}
@@ -1289,7 +1289,7 @@ s_set(void *ptr, PyObject *value, Py_ssize_t length)
if(!PyBytes_Check(value)) {
PyErr_Format(PyExc_TypeError,
"expected bytes, %s found",
- value->ob_type->tp_name);
+ Py_TYPE(value)->tp_name);
return NULL;
}
@@ -1334,7 +1334,7 @@ z_set(void *ptr, PyObject *value, Py_ssize_t size)
}
PyErr_Format(PyExc_TypeError,
"bytes or integer address expected instead of %s instance",
- value->ob_type->tp_name);
+ Py_TYPE(value)->tp_name);
return NULL;
}
@@ -1373,7 +1373,7 @@ Z_set(void *ptr, PyObject *value, Py_ssize_t size)
if (!PyUnicode_Check(value)) {
PyErr_Format(PyExc_TypeError,
"unicode string or integer address expected instead of %s instance",
- value->ob_type->tp_name);
+ Py_TYPE(value)->tp_name);
return NULL;
}
@@ -1416,7 +1416,7 @@ BSTR_set(void *ptr, PyObject *value, Py_ssize_t size)
} else if (!PyUnicode_Check(value)) {
PyErr_Format(PyExc_TypeError,
"unicode string expected instead of %s instance",
- value->ob_type->tp_name);
+ Py_TYPE(value)->tp_name);
return NULL;
}
diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h
index e58f85233cb..a93d573b72b 100644
--- a/Modules/_ctypes/ctypes.h
+++ b/Modules/_ctypes/ctypes.h
@@ -68,7 +68,7 @@ typedef struct {
ffi_type *atypes[1];
} CThunkObject;
extern PyTypeObject PyCThunk_Type;
-#define CThunk_CheckExact(v) ((v)->ob_type == &PyCThunk_Type)
+#define CThunk_CheckExact(v) (Py_TYPE(v) == &PyCThunk_Type)
typedef struct {
/* First part identical to tagCDataObject */
@@ -102,7 +102,7 @@ typedef struct {
} PyCFuncPtrObject;
extern PyTypeObject PyCStgDict_Type;
-#define PyCStgDict_CheckExact(v) ((v)->ob_type == &PyCStgDict_Type)
+#define PyCStgDict_CheckExact(v) (Py_TYPE(v) == &PyCStgDict_Type)
#define PyCStgDict_Check(v) PyObject_TypeCheck(v, &PyCStgDict_Type)
extern int PyCStructUnionType_update_stgdict(PyObject *fields, PyObject *type, int isStruct);
@@ -112,12 +112,12 @@ extern int PyObject_stginfo(PyObject *self, Py_ssize_t *psize, Py_ssize_t *palig
extern PyTypeObject PyCData_Type;
-#define CDataObject_CheckExact(v) ((v)->ob_type == &PyCData_Type)
+#define CDataObject_CheckExact(v) (Py_TYPE(v) == &PyCData_Type)
#define CDataObject_Check(v) PyObject_TypeCheck(v, &PyCData_Type)
#define _CDataObject_HasExternalBuffer(v) ((v)->b_ptr != (char *)&(v)->b_value)
extern PyTypeObject PyCSimpleType_Type;
-#define PyCSimpleTypeObject_CheckExact(v) ((v)->ob_type == &PyCSimpleType_Type)
+#define PyCSimpleTypeObject_CheckExact(v) (Py_TYPE(v) == &PyCSimpleType_Type)
#define PyCSimpleTypeObject_Check(v) PyObject_TypeCheck(v, &PyCSimpleType_Type)
extern PyTypeObject PyCField_Type;
@@ -314,7 +314,7 @@ struct tagPyCArgObject {
};
extern PyTypeObject PyCArg_Type;
-#define PyCArg_CheckExact(v) ((v)->ob_type == &PyCArg_Type)
+#define PyCArg_CheckExact(v) (Py_TYPE(v) == &PyCArg_Type)
extern PyCArgObject *PyCArgObject_new(void);
extern PyObject *
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index 1d45ade5efd..c8001a97810 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -190,7 +190,7 @@ PyType_stgdict(PyObject *obj)
StgDictObject *
PyObject_stgdict(PyObject *self)
{
- PyTypeObject *type = self->ob_type;
+ PyTypeObject *type = Py_TYPE(self);
if (!type->tp_dict || !PyCStgDict_CheckExact(type->tp_dict))
return NULL;
return (StgDictObject *)type->tp_dict;
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index c2ce3a968fa..5b29000a24e 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -2924,7 +2924,7 @@ _curses_getwin(PyObject *module, PyObject *file)
if (!PyBytes_Check(data)) {
PyErr_Format(PyExc_TypeError,
"f.read() returned %.100s instead of bytes",
- data->ob_type->tp_name);
+ Py_TYPE(data)->tp_name);
Py_DECREF(data);
goto error;
}
diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c
index c1b24073436..bc03c504380 100644
--- a/Modules/_datetimemodule.c
+++ b/Modules/_datetimemodule.c
@@ -1810,7 +1810,7 @@ checked_divmod(PyObject *a, PyObject *b)
if (!PyTuple_Check(result)) {
PyErr_Format(PyExc_TypeError,
"divmod() returned non-tuple (type %.200s)",
- result->ob_type->tp_name);
+ Py_TYPE(result)->tp_name);
Py_DECREF(result);
return NULL;
}
@@ -2489,7 +2489,6 @@ delta_new(PyTypeObject *type, PyObject *args, PyObject *kw)
int x_is_odd;
PyObject *temp;
- whole_us = round(leftover_us);
if (fabs(whole_us - leftover_us) == 0.5) {
/* We're exactly halfway between two integers. In order
* to do round-half-to-even, we must determine whether x
diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c
index b317b57e7ae..072e9775236 100644
--- a/Modules/_dbmmodule.c
+++ b/Modules/_dbmmodule.c
@@ -255,7 +255,7 @@ dbm_contains(PyObject *self, PyObject *arg)
else if (!PyBytes_Check(arg)) {
PyErr_Format(PyExc_TypeError,
"dbm key must be bytes or string, not %.100s",
- arg->ob_type->tp_name);
+ Py_TYPE(arg)->tp_name);
return -1;
}
else {
diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c
index e2ac1980031..0fbbb73a6bd 100644
--- a/Modules/_decimal/_decimal.c
+++ b/Modules/_decimal/_decimal.c
@@ -2584,7 +2584,7 @@ PyDecType_FromObjectExact(PyTypeObject *type, PyObject *v, PyObject *context)
else {
PyErr_Format(PyExc_TypeError,
"conversion from %s to Decimal is not supported",
- v->ob_type->tp_name);
+ Py_TYPE(v)->tp_name);
return NULL;
}
}
@@ -2633,7 +2633,7 @@ PyDec_FromObject(PyObject *v, PyObject *context)
else {
PyErr_Format(PyExc_TypeError,
"conversion from %s to Decimal is not supported",
- v->ob_type->tp_name);
+ Py_TYPE(v)->tp_name);
return NULL;
}
}
@@ -2696,7 +2696,7 @@ convert_op(int type_err, PyObject **conv, PyObject *v, PyObject *context)
if (type_err) {
PyErr_Format(PyExc_TypeError,
"conversion from %s to Decimal is not supported",
- v->ob_type->tp_name);
+ Py_TYPE(v)->tp_name);
}
else {
Py_INCREF(Py_NotImplemented);
@@ -3253,9 +3253,9 @@ dec_as_long(PyObject *dec, PyObject *context, int round)
i--;
}
- Py_SIZE(pylong) = i;
+ Py_SET_SIZE(pylong, i);
if (mpd_isnegative(x) && !mpd_iszero(x)) {
- Py_SIZE(pylong) = -i;
+ Py_SET_SIZE(pylong, -i);
}
mpd_del(x);
diff --git a/Modules/_elementtree.c b/Modules/_elementtree.c
index c096eab43ea..a04b295378e 100644
--- a/Modules/_elementtree.c
+++ b/Modules/_elementtree.c
@@ -2671,7 +2671,7 @@ treebuilder_append_event(TreeBuilderObject *self, PyObject *action,
PyObject *event = PyTuple_Pack(2, action, node);
if (event == NULL)
return -1;
- res = _PyObject_CallOneArg(self->events_append, event);
+ res = PyObject_CallOneArg(self->events_append, event);
Py_DECREF(event);
if (res == NULL)
return -1;
@@ -2837,7 +2837,7 @@ treebuilder_handle_comment(TreeBuilderObject* self, PyObject* text)
}
if (self->comment_factory) {
- comment = _PyObject_CallOneArg(self->comment_factory, text);
+ comment = PyObject_CallOneArg(self->comment_factory, text);
if (!comment)
return NULL;
@@ -3179,7 +3179,7 @@ expat_set_error(enum XML_Error error_code, Py_ssize_t line, Py_ssize_t column,
if (errmsg == NULL)
return;
- error = _PyObject_CallOneArg(st->parseerror_obj, errmsg);
+ error = PyObject_CallOneArg(st->parseerror_obj, errmsg);
Py_DECREF(errmsg);
if (!error)
return;
@@ -3242,7 +3242,7 @@ expat_default_handler(XMLParserObject* self, const XML_Char* data_in,
(TreeBuilderObject*) self->target, value
);
else if (self->handle_data)
- res = _PyObject_CallOneArg(self->handle_data, value);
+ res = PyObject_CallOneArg(self->handle_data, value);
else
res = NULL;
Py_XDECREF(res);
@@ -3353,7 +3353,7 @@ expat_data_handler(XMLParserObject* self, const XML_Char* data_in,
/* shortcut */
res = treebuilder_handle_data((TreeBuilderObject*) self->target, data);
else if (self->handle_data)
- res = _PyObject_CallOneArg(self->handle_data, data);
+ res = PyObject_CallOneArg(self->handle_data, data);
else
res = NULL;
@@ -3380,7 +3380,7 @@ expat_end_handler(XMLParserObject* self, const XML_Char* tag_in)
else if (self->handle_end) {
tag = makeuniversal(self, tag_in);
if (tag) {
- res = _PyObject_CallOneArg(self->handle_end, tag);
+ res = PyObject_CallOneArg(self->handle_end, tag);
Py_DECREF(tag);
}
}
@@ -3467,7 +3467,7 @@ expat_end_ns_handler(XMLParserObject* self, const XML_Char* prefix_in)
if (!prefix)
return;
- res = _PyObject_CallOneArg(self->handle_end_ns, prefix);
+ res = PyObject_CallOneArg(self->handle_end_ns, prefix);
Py_DECREF(prefix);
}
@@ -3499,7 +3499,7 @@ expat_comment_handler(XMLParserObject* self, const XML_Char* comment_in)
if (!comment)
return;
- res = _PyObject_CallOneArg(self->handle_comment, comment);
+ res = PyObject_CallOneArg(self->handle_comment, comment);
Py_XDECREF(res);
Py_DECREF(comment);
}
diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
index 987087b1ac9..88c02d82dca 100644
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -213,7 +213,7 @@ partial_vectorcall(partialobject *pto, PyObject *const *args,
static void
partial_setvectorcall(partialobject *pto)
{
- if (_PyVectorcall_Function(pto->fn) == NULL) {
+ if (PyVectorcall_Function(pto->fn) == NULL) {
/* Don't use vectorcall if the underlying function doesn't support it */
pto->vectorcall = NULL;
}
@@ -440,7 +440,7 @@ static PyTypeObject partial_type = {
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_BASETYPE |
- _Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
+ Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
partial_doc, /* tp_doc */
(traverseproc)partial_traverse, /* tp_traverse */
0, /* tp_clear */
@@ -649,7 +649,7 @@ functools_reduce(PyObject *self, PyObject *args)
for (;;) {
PyObject *op2;
- if (args->ob_refcnt > 1) {
+ if (Py_REFCNT(args) > 1) {
Py_DECREF(args);
if ((args = PyTuple_New(2)) == NULL)
goto Fail;
@@ -666,7 +666,7 @@ functools_reduce(PyObject *self, PyObject *args)
result = op2;
else {
/* Update the args tuple in-place */
- assert(args->ob_refcnt == 1);
+ assert(Py_REFCNT(args) == 1);
Py_XSETREF(_PyTuple_ITEMS(args)[0], result);
Py_XSETREF(_PyTuple_ITEMS(args)[1], op2);
if ((result = PyObject_Call(func, args, NULL)) == NULL) {
diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c
index dd4a348d136..a815819ee90 100644
--- a/Modules/_gdbmmodule.c
+++ b/Modules/_gdbmmodule.c
@@ -349,7 +349,7 @@ dbm_contains(PyObject *self, PyObject *arg)
else if (!PyBytes_Check(arg)) {
PyErr_Format(PyExc_TypeError,
"gdbm key must be bytes or string, not %.100s",
- arg->ob_type->tp_name);
+ Py_TYPE(arg)->tp_name);
return -1;
}
else {
diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c
index a84cade3aaa..6bc18b5f82f 100644
--- a/Modules/_heapqmodule.c
+++ b/Modules/_heapqmodule.c
@@ -36,7 +36,11 @@ siftdown(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos)
while (pos > startpos) {
parentpos = (pos - 1) >> 1;
parent = arr[parentpos];
+ Py_INCREF(newitem);
+ Py_INCREF(parent);
cmp = PyObject_RichCompareBool(newitem, parent, Py_LT);
+ Py_DECREF(parent);
+ Py_DECREF(newitem);
if (cmp < 0)
return -1;
if (size != PyList_GET_SIZE(heap)) {
@@ -78,10 +82,13 @@ siftup(PyListObject *heap, Py_ssize_t pos)
/* Set childpos to index of smaller child. */
childpos = 2*pos + 1; /* leftmost child position */
if (childpos + 1 < endpos) {
- cmp = PyObject_RichCompareBool(
- arr[childpos],
- arr[childpos + 1],
- Py_LT);
+ PyObject* a = arr[childpos];
+ PyObject* b = arr[childpos + 1];
+ Py_INCREF(a);
+ Py_INCREF(b);
+ cmp = PyObject_RichCompareBool(a, b, Py_LT);
+ Py_DECREF(a);
+ Py_DECREF(b);
if (cmp < 0)
return -1;
childpos += ((unsigned)cmp ^ 1); /* increment when cmp==0 */
@@ -264,7 +271,10 @@ _heapq_heappushpop_impl(PyObject *module, PyObject *heap, PyObject *item)
return item;
}
- cmp = PyObject_RichCompareBool(PyList_GET_ITEM(heap, 0), item, Py_LT);
+ PyObject* top = PyList_GET_ITEM(heap, 0);
+ Py_INCREF(top);
+ cmp = PyObject_RichCompareBool(top, item, Py_LT);
+ Py_DECREF(top);
if (cmp < 0)
return NULL;
if (cmp == 0) {
@@ -420,7 +430,11 @@ siftdown_max(PyListObject *heap, Py_ssize_t startpos, Py_ssize_t pos)
while (pos > startpos) {
parentpos = (pos - 1) >> 1;
parent = arr[parentpos];
+ Py_INCREF(parent);
+ Py_INCREF(newitem);
cmp = PyObject_RichCompareBool(parent, newitem, Py_LT);
+ Py_DECREF(parent);
+ Py_DECREF(newitem);
if (cmp < 0)
return -1;
if (size != PyList_GET_SIZE(heap)) {
@@ -462,10 +476,13 @@ siftup_max(PyListObject *heap, Py_ssize_t pos)
/* Set childpos to index of smaller child. */
childpos = 2*pos + 1; /* leftmost child position */
if (childpos + 1 < endpos) {
- cmp = PyObject_RichCompareBool(
- arr[childpos + 1],
- arr[childpos],
- Py_LT);
+ PyObject* a = arr[childpos + 1];
+ PyObject* b = arr[childpos];
+ Py_INCREF(a);
+ Py_INCREF(b);
+ cmp = PyObject_RichCompareBool(a, b, Py_LT);
+ Py_DECREF(a);
+ Py_DECREF(b);
if (cmp < 0)
return -1;
childpos += ((unsigned)cmp ^ 1); /* increment when cmp==0 */
diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c
index 5932363f3af..d609fa4afec 100644
--- a/Modules/_io/_iomodule.c
+++ b/Modules/_io/_iomodule.c
@@ -544,7 +544,7 @@ PyNumber_AsOff_t(PyObject *item, PyObject *err)
/* Otherwise replace the error with caller's error object. */
PyErr_Format(err,
"cannot fit '%.200s' into an offset-sized integer",
- item->ob_type->tp_name);
+ Py_TYPE(item)->tp_name);
}
finish:
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index 586e93f25e2..6f55577813c 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -461,7 +461,7 @@ static PyObject *
buffered_simple_flush(buffered *self, PyObject *args)
{
CHECK_INITIALIZED(self)
- return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_flush);
+ return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_flush);
}
static int
@@ -513,7 +513,7 @@ buffered_close(buffered *self, PyObject *args)
}
/* flush() will most probably re-take the lock, so drop it first */
LEAVE_BUFFERED(self)
- res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
+ res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
if (!ENTER_BUFFERED(self))
return NULL;
if (res == NULL)
@@ -521,7 +521,7 @@ buffered_close(buffered *self, PyObject *args)
else
Py_DECREF(res);
- res = _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_close);
+ res = PyObject_CallMethodNoArgs(self->raw, _PyIO_str_close);
if (self->buffer) {
PyMem_Free(self->buffer);
@@ -545,7 +545,7 @@ buffered_detach(buffered *self, PyObject *Py_UNUSED(ignored))
{
PyObject *raw, *res;
CHECK_INITIALIZED(self)
- res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
+ res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
if (res == NULL)
return NULL;
Py_DECREF(res);
@@ -562,21 +562,21 @@ static PyObject *
buffered_seekable(buffered *self, PyObject *Py_UNUSED(ignored))
{
CHECK_INITIALIZED(self)
- return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_seekable);
+ return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_seekable);
}
static PyObject *
buffered_readable(buffered *self, PyObject *Py_UNUSED(ignored))
{
CHECK_INITIALIZED(self)
- return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_readable);
+ return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_readable);
}
static PyObject *
buffered_writable(buffered *self, PyObject *Py_UNUSED(ignored))
{
CHECK_INITIALIZED(self)
- return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_writable);
+ return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_writable);
}
static PyObject *
@@ -599,14 +599,14 @@ static PyObject *
buffered_fileno(buffered *self, PyObject *Py_UNUSED(ignored))
{
CHECK_INITIALIZED(self)
- return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_fileno);
+ return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_fileno);
}
static PyObject *
buffered_isatty(buffered *self, PyObject *Py_UNUSED(ignored))
{
CHECK_INITIALIZED(self)
- return _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_isatty);
+ return PyObject_CallMethodNoArgs(self->raw, _PyIO_str_isatty);
}
/* Forward decls */
@@ -670,7 +670,7 @@ _buffered_raw_tell(buffered *self)
{
Py_off_t n;
PyObject *res;
- res = _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_tell);
+ res = PyObject_CallMethodNoArgs(self->raw, _PyIO_str_tell);
if (res == NULL)
return -1;
n = PyNumber_AsOff_t(res, PyExc_ValueError);
@@ -965,6 +965,7 @@ _buffered_readinto_generic(buffered *self, Py_buffer *buffer, char readinto1)
PyObject *res = NULL;
CHECK_INITIALIZED(self)
+ CHECK_CLOSED(self, "readinto of closed file")
n = Py_SAFE_DOWNCAST(READAHEAD(self), Py_off_t, Py_ssize_t);
if (n > 0) {
@@ -1323,7 +1324,7 @@ _io__Buffered_truncate_impl(buffered *self, PyObject *pos)
goto end;
Py_CLEAR(res);
}
- res = _PyObject_CallMethodOneArg(self->raw, _PyIO_str_truncate, pos);
+ res = PyObject_CallMethodOneArg(self->raw, _PyIO_str_truncate, pos);
if (res == NULL)
goto end;
/* Reset cached position */
@@ -1350,7 +1351,7 @@ buffered_iternext(buffered *self)
line = _buffered_readline(self, -1);
}
else {
- line = _PyObject_CallMethodNoArgs((PyObject *)self,
+ line = PyObject_CallMethodNoArgs((PyObject *)self,
_PyIO_str_readline);
if (line && !PyBytes_Check(line)) {
PyErr_Format(PyExc_OSError,
@@ -1469,7 +1470,7 @@ _bufferedreader_raw_read(buffered *self, char *start, Py_ssize_t len)
raised (see issue #10956).
*/
do {
- res = _PyObject_CallMethodOneArg(self->raw, _PyIO_str_readinto, memobj);
+ res = PyObject_CallMethodOneArg(self->raw, _PyIO_str_readinto, memobj);
} while (res == NULL && _PyIO_trap_eintr());
Py_DECREF(memobj);
if (res == NULL)
@@ -1568,7 +1569,7 @@ _bufferedreader_read_all(buffered *self)
}
/* Read until EOF or until read() would block. */
- data = _PyObject_CallMethodNoArgs(self->raw, _PyIO_str_read);
+ data = PyObject_CallMethodNoArgs(self->raw, _PyIO_str_read);
if (data == NULL)
goto cleanup;
if (data != Py_None && !PyBytes_Check(data)) {
@@ -1817,7 +1818,7 @@ _bufferedwriter_raw_write(buffered *self, char *start, Py_ssize_t len)
*/
do {
errno = 0;
- res = _PyObject_CallMethodOneArg(self->raw, _PyIO_str_write, memobj);
+ res = PyObject_CallMethodOneArg(self->raw, _PyIO_str_write, memobj);
errnum = errno;
} while (res == NULL && _PyIO_trap_eintr());
Py_DECREF(memobj);
diff --git a/Modules/_io/clinic/bufferedio.c.h b/Modules/_io/clinic/bufferedio.c.h
index 72841fcb677..56d6332a250 100644
--- a/Modules/_io/clinic/bufferedio.c.h
+++ b/Modules/_io/clinic/bufferedio.c.h
@@ -578,7 +578,7 @@ _io_BufferedRWPair___init__(PyObject *self, PyObject *args, PyObject *kwargs)
PyObject *writer;
Py_ssize_t buffer_size = DEFAULT_BUFFER_SIZE;
- if ((Py_TYPE(self) == &PyBufferedRWPair_Type) &&
+ if (Py_IS_TYPE(self, &PyBufferedRWPair_Type) &&
!_PyArg_NoKeywords("BufferedRWPair", kwargs)) {
goto exit;
}
@@ -672,4 +672,4 @@ skip_optional_pos:
exit:
return return_value;
}
-/*[clinic end generated code: output=7246104f6c7d3167 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=7d9ad40c95bdd808 input=a9049054013a1b77]*/
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index d51fc944e1a..1ff35648e55 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -235,7 +235,7 @@ _io__IOBase_close_impl(PyObject *self)
Py_RETURN_NONE;
}
- res = _PyObject_CallMethodNoArgs(self, _PyIO_str_flush);
+ res = PyObject_CallMethodNoArgs(self, _PyIO_str_flush);
PyErr_Fetch(&exc, &val, &tb);
rc = _PyObject_SetAttrId(self, &PyId___IOBase_closed, Py_True);
@@ -281,7 +281,7 @@ iobase_finalize(PyObject *self)
finalization process. */
if (_PyObject_SetAttrId(self, &PyId__finalizing, Py_True))
PyErr_Clear();
- res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_close);
+ res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_close);
/* Silencing I/O errors is bad, but printing spurious tracebacks is
equally as bad, and potentially more frequent (because of
shutdown issues). */
@@ -382,7 +382,7 @@ _io__IOBase_seekable_impl(PyObject *self)
PyObject *
_PyIOBase_check_seekable(PyObject *self, PyObject *args)
{
- PyObject *res = _PyObject_CallMethodNoArgs(self, _PyIO_str_seekable);
+ PyObject *res = PyObject_CallMethodNoArgs(self, _PyIO_str_seekable);
if (res == NULL)
return NULL;
if (res != Py_True) {
@@ -415,7 +415,7 @@ _io__IOBase_readable_impl(PyObject *self)
PyObject *
_PyIOBase_check_readable(PyObject *self, PyObject *args)
{
- PyObject *res = _PyObject_CallMethodNoArgs(self, _PyIO_str_readable);
+ PyObject *res = PyObject_CallMethodNoArgs(self, _PyIO_str_readable);
if (res == NULL)
return NULL;
if (res != Py_True) {
@@ -448,7 +448,7 @@ _io__IOBase_writable_impl(PyObject *self)
PyObject *
_PyIOBase_check_writable(PyObject *self, PyObject *args)
{
- PyObject *res = _PyObject_CallMethodNoArgs(self, _PyIO_str_writable);
+ PyObject *res = PyObject_CallMethodNoArgs(self, _PyIO_str_writable);
if (res == NULL)
return NULL;
if (res != Py_True) {
@@ -477,7 +477,7 @@ iobase_enter(PyObject *self, PyObject *args)
static PyObject *
iobase_exit(PyObject *self, PyObject *args)
{
- return _PyObject_CallMethodNoArgs(self, _PyIO_str_close);
+ return PyObject_CallMethodNoArgs(self, _PyIO_str_close);
}
/* Lower-level APIs */
@@ -556,7 +556,7 @@ _io__IOBase_readline_impl(PyObject *self, Py_ssize_t limit)
PyObject *b;
if (peek != NULL) {
- PyObject *readahead = _PyObject_CallOneArg(peek, _PyLong_One);
+ PyObject *readahead = PyObject_CallOneArg(peek, _PyLong_One);
if (readahead == NULL) {
/* NOTE: PyErr_SetFromErrno() calls PyErr_CheckSignals()
when EINTR occurs so we needn't do it ourselves. */
@@ -655,7 +655,7 @@ iobase_iter(PyObject *self)
static PyObject *
iobase_iternext(PyObject *self)
{
- PyObject *line = _PyObject_CallMethodNoArgs(self, _PyIO_str_readline);
+ PyObject *line = PyObject_CallMethodNoArgs(self, _PyIO_str_readline);
if (line == NULL)
return NULL;
diff --git a/Modules/_io/stringio.c b/Modules/_io/stringio.c
index 89b29bb8fbb..28d54e00d8a 100644
--- a/Modules/_io/stringio.c
+++ b/Modules/_io/stringio.c
@@ -408,7 +408,7 @@ stringio_iternext(stringio *self)
}
else {
/* XXX is subclassing StringIO really supported? */
- line = _PyObject_CallMethodNoArgs((PyObject *)self,
+ line = PyObject_CallMethodNoArgs((PyObject *)self,
_PyIO_str_readline);
if (line && !PyUnicode_Check(line)) {
PyErr_Format(PyExc_OSError,
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index 5ebeb024e57..3a9ce93a5eb 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -527,7 +527,7 @@ _io_IncrementalNewlineDecoder_getstate_impl(nldecoder_object *self)
unsigned long long flag;
if (self->decoder != Py_None) {
- PyObject *state = _PyObject_CallMethodNoArgs(self->decoder,
+ PyObject *state = PyObject_CallMethodNoArgs(self->decoder,
_PyIO_str_getstate);
if (state == NULL)
return NULL;
@@ -601,7 +601,7 @@ _io_IncrementalNewlineDecoder_reset_impl(nldecoder_object *self)
self->seennl = 0;
self->pendingcr = 0;
if (self->decoder != Py_None)
- return _PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset);
+ return PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset);
else
Py_RETURN_NONE;
}
@@ -963,7 +963,7 @@ _textiowrapper_fix_encoder_state(textio *self)
self->encoding_start_of_stream = 1;
- PyObject *cookieObj = _PyObject_CallMethodNoArgs(
+ PyObject *cookieObj = PyObject_CallMethodNoArgs(
self->buffer, _PyIO_str_tell);
if (cookieObj == NULL) {
return -1;
@@ -977,7 +977,7 @@ _textiowrapper_fix_encoder_state(textio *self)
if (cmp == 0) {
self->encoding_start_of_stream = 0;
- PyObject *res = _PyObject_CallMethodOneArg(
+ PyObject *res = PyObject_CallMethodOneArg(
self->encoder, _PyIO_str_setstate, _PyLong_Zero);
if (res == NULL) {
return -1;
@@ -1094,7 +1094,7 @@ _io_TextIOWrapper___init___impl(textio *self, PyObject *buffer,
PyErr_Format(
PyExc_TypeError,
"TextIOWrapper() argument 'errors' must be str or None, not %.50s",
- errors->ob_type->tp_name);
+ Py_TYPE(errors)->tp_name);
return -1;
}
else if (io_check_errors(errors)) {
@@ -1386,7 +1386,7 @@ _io_TextIOWrapper_reconfigure_impl(textio *self, PyObject *encoding,
return NULL;
}
- PyObject *res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
+ PyObject *res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
if (res == NULL) {
return NULL;
}
@@ -1525,7 +1525,7 @@ _io_TextIOWrapper_detach_impl(textio *self)
{
PyObject *buffer, *res;
CHECK_ATTACHED(self);
- res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
+ res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
if (res == NULL)
return NULL;
Py_DECREF(res);
@@ -1597,7 +1597,7 @@ _textiowrapper_writeflush(textio *self)
PyObject *ret;
do {
- ret = _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_write, b);
+ ret = PyObject_CallMethodOneArg(self->buffer, _PyIO_str_write, b);
} while (ret == NULL && _PyIO_trap_eintr());
Py_DECREF(b);
if (ret == NULL)
@@ -1667,7 +1667,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text)
self->encoding_start_of_stream = 0;
}
else
- b = _PyObject_CallMethodOneArg(self->encoder, _PyIO_str_encode, text);
+ b = PyObject_CallMethodOneArg(self->encoder, _PyIO_str_encode, text);
Py_DECREF(text);
if (b == NULL)
@@ -1718,7 +1718,7 @@ _io_TextIOWrapper_write_impl(textio *self, PyObject *text)
}
if (needflush) {
- ret = _PyObject_CallMethodNoArgs(self->buffer, _PyIO_str_flush);
+ ret = PyObject_CallMethodNoArgs(self->buffer, _PyIO_str_flush);
if (ret == NULL)
return NULL;
Py_DECREF(ret);
@@ -1808,7 +1808,7 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint)
/* To prepare for tell(), we need to snapshot a point in the file
* where the decoder's input buffer is empty.
*/
- PyObject *state = _PyObject_CallMethodNoArgs(self->decoder,
+ PyObject *state = PyObject_CallMethodNoArgs(self->decoder,
_PyIO_str_getstate);
if (state == NULL)
return -1;
@@ -1849,7 +1849,7 @@ textiowrapper_read_chunk(textio *self, Py_ssize_t size_hint)
if (chunk_size == NULL)
goto fail;
- input_chunk = _PyObject_CallMethodOneArg(self->buffer,
+ input_chunk = PyObject_CallMethodOneArg(self->buffer,
(self->has_read1 ? _PyIO_str_read1: _PyIO_str_read),
chunk_size);
Py_DECREF(chunk_size);
@@ -2025,7 +2025,7 @@ find_control_char(int kind, const char *s, const char *end, Py_UCS4 ch)
{
if (kind == PyUnicode_1BYTE_KIND) {
assert(ch < 256);
- return (char *) memchr((void *) s, (char) ch, end - s);
+ return (char *) memchr((const void *) s, (char) ch, end - s);
}
for (;;) {
while (PyUnicode_READ(kind, s, 0) > ch)
@@ -2043,7 +2043,7 @@ _PyIO_find_line_ending(
int translated, int universal, PyObject *readnl,
int kind, const char *start, const char *end, Py_ssize_t *consumed)
{
- Py_ssize_t len = ((char*)end - (char*)start)/kind;
+ Py_ssize_t len = (end - start)/kind;
if (translated) {
/* Newlines are already translated, only search for \n */
@@ -2393,7 +2393,7 @@ _textiowrapper_decoder_setstate(textio *self, cookie_type *cookie)
utf-16, that we are expecting a BOM).
*/
if (cookie->start_pos == 0 && cookie->dec_flags == 0)
- res = _PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset);
+ res = PyObject_CallMethodNoArgs(self->decoder, _PyIO_str_reset);
else
res = _PyObject_CallMethodId(self->decoder, &PyId_setstate,
"((yi))", "", cookie->dec_flags);
@@ -2408,11 +2408,11 @@ _textiowrapper_encoder_reset(textio *self, int start_of_stream)
{
PyObject *res;
if (start_of_stream) {
- res = _PyObject_CallMethodNoArgs(self->encoder, _PyIO_str_reset);
+ res = PyObject_CallMethodNoArgs(self->encoder, _PyIO_str_reset);
self->encoding_start_of_stream = 1;
}
else {
- res = _PyObject_CallMethodOneArg(self->encoder, _PyIO_str_setstate,
+ res = PyObject_CallMethodOneArg(self->encoder, _PyIO_str_setstate,
_PyLong_Zero);
self->encoding_start_of_stream = 0;
}
@@ -2537,7 +2537,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence)
goto fail;
}
- res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
+ res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
if (res == NULL)
goto fail;
Py_DECREF(res);
@@ -2552,7 +2552,7 @@ _io_TextIOWrapper_seek_impl(textio *self, PyObject *cookieObj, int whence)
posobj = PyLong_FromOff_t(cookie.start_pos);
if (posobj == NULL)
goto fail;
- res = _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_seek, posobj);
+ res = PyObject_CallMethodOneArg(self->buffer, _PyIO_str_seek, posobj);
Py_DECREF(posobj);
if (res == NULL)
goto fail;
@@ -2700,14 +2700,14 @@ _io_TextIOWrapper_tell_impl(textio *self)
chars_to_skip = self->decoded_chars_used;
/* Decoder state will be restored at the end */
- saved_state = _PyObject_CallMethodNoArgs(self->decoder,
+ saved_state = PyObject_CallMethodNoArgs(self->decoder,
_PyIO_str_getstate);
if (saved_state == NULL)
goto fail;
#define DECODER_GETSTATE() do { \
PyObject *dec_buffer; \
- PyObject *_state = _PyObject_CallMethodNoArgs(self->decoder, \
+ PyObject *_state = PyObject_CallMethodNoArgs(self->decoder, \
_PyIO_str_getstate); \
if (_state == NULL) \
goto fail; \
@@ -2870,12 +2870,12 @@ _io_TextIOWrapper_truncate_impl(textio *self, PyObject *pos)
CHECK_ATTACHED(self)
- res = _PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
+ res = PyObject_CallMethodNoArgs((PyObject *)self, _PyIO_str_flush);
if (res == NULL)
return NULL;
Py_DECREF(res);
- return _PyObject_CallMethodOneArg(self->buffer, _PyIO_str_truncate, pos);
+ return PyObject_CallMethodOneArg(self->buffer, _PyIO_str_truncate, pos);
}
static PyObject *
@@ -3084,7 +3084,7 @@ textiowrapper_iternext(textio *self)
line = _textiowrapper_readline(self, -1);
}
else {
- line = _PyObject_CallMethodNoArgs((PyObject *)self,
+ line = PyObject_CallMethodNoArgs((PyObject *)self,
_PyIO_str_readline);
if (line && !PyUnicode_Check(line)) {
PyErr_Format(PyExc_OSError,
diff --git a/Modules/_json.c b/Modules/_json.c
index 439414fd59e..ee2070c043e 100644
--- a/Modules/_json.c
+++ b/Modules/_json.c
@@ -777,14 +777,14 @@ _parse_object_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t idx, Py_ss
*next_idx_ptr = idx + 1;
if (has_pairs_hook) {
- val = _PyObject_CallOneArg(s->object_pairs_hook, rval);
+ val = PyObject_CallOneArg(s->object_pairs_hook, rval);
Py_DECREF(rval);
return val;
}
/* if object_hook is not None: rval = object_hook(rval) */
if (s->object_hook != Py_None) {
- val = _PyObject_CallOneArg(s->object_hook, rval);
+ val = PyObject_CallOneArg(s->object_hook, rval);
Py_DECREF(rval);
return val;
}
@@ -890,7 +890,7 @@ _parse_constant(PyScannerObject *s, const char *constant, Py_ssize_t idx, Py_ssi
return NULL;
/* rval = parse_constant(constant) */
- rval = _PyObject_CallOneArg(s->parse_constant, cstr);
+ rval = PyObject_CallOneArg(s->parse_constant, cstr);
idx += PyUnicode_GET_LENGTH(cstr);
Py_DECREF(cstr);
*next_idx_ptr = idx;
@@ -989,7 +989,7 @@ _match_number_unicode(PyScannerObject *s, PyObject *pystr, Py_ssize_t start, Py_
idx - start);
if (numstr == NULL)
return NULL;
- rval = _PyObject_CallOneArg(custom_func, numstr);
+ rval = PyObject_CallOneArg(custom_func, numstr);
}
else {
Py_ssize_t i, n;
@@ -1399,7 +1399,7 @@ encoder_encode_string(PyEncoderObject *s, PyObject *obj)
if (s->fast_encode) {
return s->fast_encode(NULL, obj);
}
- encoded = _PyObject_CallOneArg(s->encoder, obj);
+ encoded = PyObject_CallOneArg(s->encoder, obj);
if (encoded != NULL && !PyUnicode_Check(encoded)) {
PyErr_Format(PyExc_TypeError,
"encoder() must return a string, not %.80s",
@@ -1485,7 +1485,7 @@ encoder_listencode_obj(PyEncoderObject *s, _PyAccu *acc,
return -1;
}
}
- newobj = _PyObject_CallOneArg(s->defaultfn, obj);
+ newobj = PyObject_CallOneArg(s->defaultfn, obj);
if (newobj == NULL) {
Py_XDECREF(ident);
return -1;
@@ -1617,7 +1617,7 @@ encoder_listencode_dict(PyEncoderObject *s, _PyAccu *acc,
else {
PyErr_Format(PyExc_TypeError,
"keys must be str, int, float, bool or None, "
- "not %.100s", key->ob_type->tp_name);
+ "not %.100s", Py_TYPE(key)->tp_name);
goto bail;
}
@@ -1863,13 +1863,40 @@ static PyMethodDef speedups_methods[] = {
PyDoc_STRVAR(module_doc,
"json speedups\n");
+static int
+_json_exec(PyObject *module)
+{
+ if (PyType_Ready(&PyScannerType) < 0) {
+ return -1;
+ }
+ if (PyType_Ready(&PyEncoderType) < 0) {
+ return -1;
+ }
+ Py_INCREF((PyObject*)&PyScannerType);
+ if (PyModule_AddObject(module, "make_scanner", (PyObject*)&PyScannerType) < 0) {
+ Py_DECREF((PyObject*)&PyScannerType);
+ return -1;
+ }
+ Py_INCREF((PyObject*)&PyEncoderType);
+ if (PyModule_AddObject(module, "make_encoder", (PyObject*)&PyEncoderType) < 0) {
+ Py_DECREF((PyObject*)&PyEncoderType);
+ return -1;
+ }
+ return 0;
+}
+
+static PyModuleDef_Slot _json_slots[] = {
+ {Py_mod_exec, _json_exec},
+ {0, NULL}
+};
+
static struct PyModuleDef jsonmodule = {
PyModuleDef_HEAD_INIT,
"_json",
module_doc,
- -1,
+ 0,
speedups_methods,
- NULL,
+ _json_slots,
NULL,
NULL,
NULL
@@ -1878,25 +1905,5 @@ static struct PyModuleDef jsonmodule = {
PyMODINIT_FUNC
PyInit__json(void)
{
- PyObject *m = PyModule_Create(&jsonmodule);
- if (!m)
- return NULL;
- if (PyType_Ready(&PyScannerType) < 0)
- goto fail;
- if (PyType_Ready(&PyEncoderType) < 0)
- goto fail;
- Py_INCREF((PyObject*)&PyScannerType);
- if (PyModule_AddObject(m, "make_scanner", (PyObject*)&PyScannerType) < 0) {
- Py_DECREF((PyObject*)&PyScannerType);
- goto fail;
- }
- Py_INCREF((PyObject*)&PyEncoderType);
- if (PyModule_AddObject(m, "make_encoder", (PyObject*)&PyEncoderType) < 0) {
- Py_DECREF((PyObject*)&PyEncoderType);
- goto fail;
- }
- return m;
- fail:
- Py_DECREF(m);
- return NULL;
+ return PyModuleDef_Init(&jsonmodule);
}
diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c
index 4be2deae377..ee490256d2a 100644
--- a/Modules/_multiprocessing/semaphore.c
+++ b/Modules/_multiprocessing/semaphore.c
@@ -268,11 +268,8 @@ static PyObject *
semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds)
{
int blocking = 1, res, err = 0;
- double timeout;
PyObject *timeout_obj = Py_None;
struct timespec deadline = {0};
- struct timeval now;
- long sec, nsec;
static char *kwlist[] = {"block", "timeout", NULL};
@@ -285,19 +282,23 @@ semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds)
Py_RETURN_TRUE;
}
- if (timeout_obj != Py_None) {
- timeout = PyFloat_AsDouble(timeout_obj);
- if (PyErr_Occurred())
+ int use_deadline = (timeout_obj != Py_None);
+ if (use_deadline) {
+ double timeout = PyFloat_AsDouble(timeout_obj);
+ if (PyErr_Occurred()) {
return NULL;
- if (timeout < 0.0)
+ }
+ if (timeout < 0.0) {
timeout = 0.0;
+ }
+ struct timeval now;
if (gettimeofday(&now, NULL) < 0) {
PyErr_SetFromErrno(PyExc_OSError);
return NULL;
}
- sec = (long) timeout;
- nsec = (long) (1e9 * (timeout - sec) + 0.5);
+ long sec = (long) timeout;
+ long nsec = (long) (1e9 * (timeout - sec) + 0.5);
deadline.tv_sec = now.tv_sec + sec;
deadline.tv_nsec = now.tv_usec * 1000 + nsec;
deadline.tv_sec += (deadline.tv_nsec / 1000000000);
@@ -315,7 +316,7 @@ semlock_acquire(SemLockObject *self, PyObject *args, PyObject *kwds)
/* Couldn't acquire immediately, need to block */
do {
Py_BEGIN_ALLOW_THREADS
- if (timeout_obj == Py_None) {
+ if (!use_deadline) {
res = sem_wait(self->handle);
}
else {
diff --git a/Modules/_operator.c b/Modules/_operator.c
index 5aa229fa781..adee5fd7968 100644
--- a/Modules/_operator.c
+++ b/Modules/_operator.c
@@ -1682,7 +1682,7 @@ methodcaller_reduce(methodcallerobject *mc, PyObject *Py_UNUSED(ignored))
newargs[0] = (PyObject *)Py_TYPE(mc);
newargs[1] = mc->name;
- constructor = _PyObject_FastCallDict(partial, newargs, 2, mc->kwds);
+ constructor = PyObject_VectorcallDict(partial, newargs, 2, mc->kwds);
Py_DECREF(partial);
return Py_BuildValue("NO", constructor, mc->args);
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index baa0a274196..2ba7a168d0e 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -359,7 +359,7 @@ _Pickle_FastCall(PyObject *func, PyObject *obj)
{
PyObject *result;
- result = _PyObject_CallOneArg(func, obj);
+ result = PyObject_CallOneArg(func, obj);
Py_DECREF(obj);
return result;
}
@@ -420,7 +420,7 @@ call_method(PyObject *func, PyObject *self, PyObject *obj)
return PyObject_CallFunctionObjArgs(func, self, obj, NULL);
}
else {
- return _PyObject_CallOneArg(func, obj);
+ return PyObject_CallOneArg(func, obj);
}
}
@@ -461,7 +461,7 @@ Pdata_New(void)
if (!(self = PyObject_New(Pdata, &Pdata_Type)))
return NULL;
- Py_SIZE(self) = 0;
+ Py_SET_SIZE(self, 0);
self->mark_set = 0;
self->fence = 0;
self->allocated = 8;
@@ -488,7 +488,7 @@ Pdata_clear(Pdata *self, Py_ssize_t clearto)
while (--i >= clearto) {
Py_CLEAR(self->data[i]);
}
- Py_SIZE(self) = clearto;
+ Py_SET_SIZE(self, clearto);
return 0;
}
@@ -539,7 +539,8 @@ Pdata_pop(Pdata *self)
Pdata_stack_underflow(self);
return NULL;
}
- return self->data[--Py_SIZE(self)];
+ Py_SET_SIZE(self, Py_SIZE(self) - 1);
+ return self->data[Py_SIZE(self)];
}
#define PDATA_POP(D, V) do { (V) = Pdata_pop((D)); } while (0)
@@ -549,7 +550,8 @@ Pdata_push(Pdata *self, PyObject *obj)
if (Py_SIZE(self) == self->allocated && Pdata_grow(self) < 0) {
return -1;
}
- self->data[Py_SIZE(self)++] = obj;
+ self->data[Py_SIZE(self)] = obj;
+ Py_SET_SIZE(self, Py_SIZE(self) + 1);
return 0;
}
@@ -579,7 +581,7 @@ Pdata_poptuple(Pdata *self, Py_ssize_t start)
for (i = start, j = 0; j < len; i++, j++)
PyTuple_SET_ITEM(tuple, j, self->data[i]);
- Py_SIZE(self) = start;
+ Py_SET_SIZE(self, start);
return tuple;
}
@@ -596,7 +598,7 @@ Pdata_poplist(Pdata *self, Py_ssize_t start)
for (i = start, j = 0; j < len; i++, j++)
PyList_SET_ITEM(list, j, self->data[i]);
- Py_SIZE(self) = start;
+ Py_SET_SIZE(self, start);
return list;
}
@@ -1976,7 +1978,7 @@ fast_save_enter(PicklerObject *self, PyObject *obj)
PyErr_Format(PyExc_ValueError,
"fast mode: can't pickle cyclic objects "
"including object type %.200s at %p",
- obj->ob_type->tp_name, obj);
+ Py_TYPE(obj)->tp_name, obj);
self->fast_nesting = -1;
return 0;
}
@@ -2296,7 +2298,7 @@ _Pickler_write_bytes(PicklerObject *self,
return -1;
}
}
- result = _PyObject_CallOneArg(self->write, payload);
+ result = PyObject_CallOneArg(self->write, payload);
Py_XDECREF(mem);
if (result == NULL) {
return -1;
@@ -2504,7 +2506,7 @@ save_picklebuffer(PicklerObject *self, PyObject *obj)
}
int in_band = 1;
if (self->buffer_callback != NULL) {
- PyObject *ret = _PyObject_CallOneArg(self->buffer_callback, obj);
+ PyObject *ret = PyObject_CallOneArg(self->buffer_callback, obj);
if (ret == NULL) {
return -1;
}
@@ -4321,7 +4323,7 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
* regular reduction mechanism.
*/
if (self->reducer_override != NULL) {
- reduce_value = _PyObject_CallOneArg(self->reducer_override, obj);
+ reduce_value = PyObject_CallOneArg(self->reducer_override, obj);
if (reduce_value == NULL) {
goto error;
}
@@ -4455,12 +4457,13 @@ static int
dump(PicklerObject *self, PyObject *obj)
{
const char stop_op = STOP;
+ int status = -1;
PyObject *tmp;
_Py_IDENTIFIER(reducer_override);
if (_PyObject_LookupAttrId((PyObject *)self, &PyId_reducer_override,
&tmp) < 0) {
- return -1;
+ goto error;
}
/* Cache the reducer_override method, if it exists. */
if (tmp != NULL) {
@@ -4477,7 +4480,7 @@ dump(PicklerObject *self, PyObject *obj)
assert(self->proto >= 0 && self->proto < 256);
header[1] = (unsigned char)self->proto;
if (_Pickler_Write(self, header, 2) < 0)
- return -1;
+ goto error;
if (self->proto >= 4)
self->framing = 1;
}
@@ -4485,9 +4488,22 @@ dump(PicklerObject *self, PyObject *obj)
if (save(self, obj, 0) < 0 ||
_Pickler_Write(self, &stop_op, 1) < 0 ||
_Pickler_CommitFrame(self) < 0)
- return -1;
+ goto error;
+
+ // Success
+ status = 0;
+
+ error:
self->framing = 0;
- return 0;
+
+ /* Break the reference cycle we generated at the beginning this function
+ * call when setting the reducer_override attribute of the Pickler instance
+ * to a bound method of the same instance. This is important as the Pickler
+ * instance holds a reference to each object it has pickled (through its
+ * memo): thus, these objects wont be garbage-collected as long as the
+ * Pickler itself is not collected. */
+ Py_CLEAR(self->reducer_override);
+ return status;
}
/*[clinic input]
@@ -4645,8 +4661,9 @@ _pickle.Pickler.__init__
This takes a binary file for writing a pickle data stream.
The optional *protocol* argument tells the pickler to use the given
-protocol; supported protocols are 0, 1, 2, 3 and 4. The default
-protocol is 3; a backward-incompatible protocol designed for Python 3.
+protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default
+protocol is 4. It was introduced in Python 3.4, and is incompatible
+with previous versions.
Specifying a negative protocol version selects the highest protocol
version supported. The higher the protocol used, the more recent the
@@ -4678,7 +4695,7 @@ static int
_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file,
PyObject *protocol, int fix_imports,
PyObject *buffer_callback)
-/*[clinic end generated code: output=0abedc50590d259b input=bb886e00443a7811]*/
+/*[clinic end generated code: output=0abedc50590d259b input=a7c969699bf5dad3]*/
{
_Py_IDENTIFIER(persistent_id);
_Py_IDENTIFIER(dispatch_table);
@@ -6119,7 +6136,7 @@ load_pop(UnpicklerObject *self)
else {
len--;
Py_DECREF(self->stack->data[len]);
- Py_SIZE(self->stack) = len;
+ Py_SET_SIZE(self->stack, len);
}
return 0;
}
@@ -6480,13 +6497,13 @@ do_append(UnpicklerObject *self, Py_ssize_t x)
result = _Pickle_FastCall(append_func, value);
if (result == NULL) {
Pdata_clear(self->stack, i + 1);
- Py_SIZE(self->stack) = x;
+ Py_SET_SIZE(self->stack, x);
Py_DECREF(append_func);
return -1;
}
Py_DECREF(result);
}
- Py_SIZE(self->stack) = x;
+ Py_SET_SIZE(self->stack, x);
Py_DECREF(append_func);
}
}
@@ -6608,12 +6625,12 @@ load_additems(UnpicklerObject *self)
result = _Pickle_FastCall(add_func, item);
if (result == NULL) {
Pdata_clear(self->stack, i + 1);
- Py_SIZE(self->stack) = mark;
+ Py_SET_SIZE(self->stack, mark);
return -1;
}
Py_DECREF(result);
}
- Py_SIZE(self->stack) = mark;
+ Py_SET_SIZE(self->stack, mark);
}
return 0;
@@ -7635,8 +7652,8 @@ This is equivalent to ``Pickler(file, protocol).dump(obj)``, but may
be more efficient.
The optional *protocol* argument tells the pickler to use the given
-protocol; supported protocols are 0, 1, 2, 3 and 4. The default
-protocol is 4. It was introduced in Python 3.4, it is incompatible
+protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default
+protocol is 4. It was introduced in Python 3.4, and is incompatible
with previous versions.
Specifying a negative protocol version selects the highest protocol
@@ -7662,7 +7679,7 @@ static PyObject *
_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file,
PyObject *protocol, int fix_imports,
PyObject *buffer_callback)
-/*[clinic end generated code: output=706186dba996490c input=cfdcaf573ed6e46c]*/
+/*[clinic end generated code: output=706186dba996490c input=5ed6653da99cd97c]*/
{
PicklerObject *pickler = _Pickler_New();
@@ -7705,8 +7722,8 @@ _pickle.dumps
Return the pickled representation of the object as a bytes object.
The optional *protocol* argument tells the pickler to use the given
-protocol; supported protocols are 0, 1, 2, 3 and 4. The default
-protocol is 4. It was introduced in Python 3.4, it is incompatible
+protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default
+protocol is 4. It was introduced in Python 3.4, and is incompatible
with previous versions.
Specifying a negative protocol version selects the highest protocol
@@ -7726,7 +7743,7 @@ into *file* as part of the pickle stream. It is an error if
static PyObject *
_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol,
int fix_imports, PyObject *buffer_callback)
-/*[clinic end generated code: output=fbab0093a5580fdf input=9f334d535ff7194f]*/
+/*[clinic end generated code: output=fbab0093a5580fdf input=e543272436c6f987]*/
{
PyObject *result;
PicklerObject *pickler = _Pickler_New();
diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c
index 80bb44dce90..2aed79e14c4 100644
--- a/Modules/_posixsubprocess.c
+++ b/Modules/_posixsubprocess.c
@@ -80,7 +80,7 @@ _enable_gc(int need_to_reenable_gc, PyObject *gc_module)
if (need_to_reenable_gc) {
PyErr_Fetch(&exctype, &val, &tb);
- result = _PyObject_CallMethodNoArgs(
+ result = PyObject_CallMethodNoArgs(
gc_module, _posixsubprocessstate_global->enable);
if (exctype != NULL) {
PyErr_Restore(exctype, val, tb);
@@ -657,7 +657,7 @@ subprocess_fork_exec(PyObject* self, PyObject *args)
gc_module = PyImport_ImportModule("gc");
if (gc_module == NULL)
return NULL;
- result = _PyObject_CallMethodNoArgs(
+ result = PyObject_CallMethodNoArgs(
gc_module, _posixsubprocessstate_global->isenabled);
if (result == NULL) {
Py_DECREF(gc_module);
@@ -669,7 +669,7 @@ subprocess_fork_exec(PyObject* self, PyObject *args)
Py_DECREF(gc_module);
return NULL;
}
- result = _PyObject_CallMethodNoArgs(
+ result = PyObject_CallMethodNoArgs(
gc_module, _posixsubprocessstate_global->disable);
if (result == NULL) {
Py_DECREF(gc_module);
diff --git a/Modules/_randommodule.c b/Modules/_randommodule.c
index 1f4bf74fc7a..f0fdb0382c5 100644
--- a/Modules/_randommodule.c
+++ b/Modules/_randommodule.c
@@ -287,7 +287,7 @@ random_seed(RandomObject *self, PyObject *arg)
/* Calling int.__abs__() prevents calling arg.__abs__(), which might
return an invalid value. See issue #31478. */
args[0] = arg;
- n = _PyObject_Vectorcall(_randomstate_global->Long___abs__, args, 0,
+ n = PyObject_Vectorcall(_randomstate_global->Long___abs__, args, 0,
NULL);
}
else {
diff --git a/Modules/_sha3/sha3module.c b/Modules/_sha3/sha3module.c
index d4ca9a111da..9cdee5869a2 100644
--- a/Modules/_sha3/sha3module.c
+++ b/Modules/_sha3/sha3module.c
@@ -713,7 +713,7 @@ PyInit__sha3(void)
#define init_sha3type(name, type) \
do { \
- Py_TYPE(type) = &PyType_Type; \
+ Py_SET_TYPE(type, &PyType_Type); \
if (PyType_Ready(type) < 0) { \
goto error; \
} \
diff --git a/Modules/_sqlite/cache.c b/Modules/_sqlite/cache.c
index 7552d1b1453..758fc022f78 100644
--- a/Modules/_sqlite/cache.c
+++ b/Modules/_sqlite/cache.c
@@ -183,7 +183,7 @@ PyObject* pysqlite_cache_get(pysqlite_Cache* self, PyObject* key)
}
}
- /* We cannot replace this by _PyObject_CallOneArg() since
+ /* We cannot replace this by PyObject_CallOneArg() since
* PyObject_CallFunction() has a special case when using a
* single tuple as argument. */
data = PyObject_CallFunction(self->factory, "O", key);
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 64051669185..697295da9ce 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -308,7 +308,7 @@ PyObject* pysqlite_connection_cursor(pysqlite_Connection* self, PyObject* args,
factory = (PyObject*)&pysqlite_CursorType;
}
- cursor = _PyObject_CallOneArg(factory, (PyObject *)self);
+ cursor = PyObject_CallOneArg(factory, (PyObject *)self);
if (cursor == NULL)
return NULL;
if (!PyObject_TypeCheck(cursor, &pysqlite_CursorType)) {
@@ -975,7 +975,7 @@ static void _trace_callback(void* user_arg, const char* statement_string)
py_statement = PyUnicode_DecodeUTF8(statement_string,
strlen(statement_string), "replace");
if (py_statement) {
- ret = _PyObject_CallOneArg((PyObject*)user_arg, py_statement);
+ ret = PyObject_CallOneArg((PyObject*)user_arg, py_statement);
Py_DECREF(py_statement);
}
@@ -1472,7 +1472,7 @@ pysqlite_connection_iterdump(pysqlite_Connection* self, PyObject* args)
goto finally;
}
- retval = _PyObject_CallOneArg(pyfn_iterdump, (PyObject *)self);
+ retval = PyObject_CallOneArg(pyfn_iterdump, (PyObject *)self);
finally:
Py_XDECREF(module);
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c
index 45f5865590d..ab276db7826 100644
--- a/Modules/_sqlite/cursor.c
+++ b/Modules/_sqlite/cursor.c
@@ -266,7 +266,7 @@ _pysqlite_fetch_one_row(pysqlite_Cursor* self)
item = PyBytes_FromStringAndSize(val_str, nbytes);
if (!item)
goto error;
- converted = _PyObject_CallOneArg(converter, item);
+ converted = PyObject_CallOneArg(converter, item);
Py_DECREF(item);
}
} else {
@@ -611,7 +611,6 @@ static PyObject *
pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args)
{
PyObject* script_obj;
- PyObject* script_str = NULL;
const char* script_cstr;
sqlite3_stmt* statement;
int rc;
@@ -685,8 +684,6 @@ pysqlite_cursor_executescript(pysqlite_Cursor* self, PyObject* args)
}
error:
- Py_XDECREF(script_str);
-
if (PyErr_Occurred()) {
return NULL;
} else {
@@ -773,7 +770,7 @@ PyObject* pysqlite_cursor_fetchone(pysqlite_Cursor* self, PyObject* args)
PyObject* pysqlite_cursor_fetchmany(pysqlite_Cursor* self, PyObject* args, PyObject* kwargs)
{
- static char *kwlist[] = {"size", NULL, NULL};
+ static char *kwlist[] = {"size", NULL};
PyObject* row;
PyObject* list;
@@ -789,17 +786,9 @@ PyObject* pysqlite_cursor_fetchmany(pysqlite_Cursor* self, PyObject* args, PyObj
return NULL;
}
- /* just make sure we enter the loop */
- row = Py_None;
-
- while (row) {
- row = pysqlite_cursor_iternext(self);
- if (row) {
- PyList_Append(list, row);
- Py_DECREF(row);
- } else {
- break;
- }
+ while ((row = pysqlite_cursor_iternext(self))) {
+ PyList_Append(list, row);
+ Py_XDECREF(row);
if (++counter == maxrows) {
break;
@@ -824,15 +813,9 @@ PyObject* pysqlite_cursor_fetchall(pysqlite_Cursor* self, PyObject* args)
return NULL;
}
- /* just make sure we enter the loop */
- row = (PyObject*)Py_None;
-
- while (row) {
- row = pysqlite_cursor_iternext(self);
- if (row) {
- PyList_Append(list, row);
- Py_DECREF(row);
- }
+ while ((row = pysqlite_cursor_iternext(self))) {
+ PyList_Append(list, row);
+ Py_XDECREF(row);
}
if (PyErr_Occurred()) {
diff --git a/Modules/_sqlite/microprotocols.c b/Modules/_sqlite/microprotocols.c
index 59a5e228454..bb0d19f653b 100644
--- a/Modules/_sqlite/microprotocols.c
+++ b/Modules/_sqlite/microprotocols.c
@@ -84,7 +84,7 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
way to get a quotable object to be its instance */
/* look for an adapter in the registry */
- key = Py_BuildValue("(OO)", (PyObject*)obj->ob_type, proto);
+ key = Py_BuildValue("(OO)", (PyObject*)Py_TYPE(obj), proto);
if (!key) {
return NULL;
}
@@ -92,7 +92,7 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
Py_DECREF(key);
if (adapter) {
Py_INCREF(adapter);
- adapted = _PyObject_CallOneArg(adapter, obj);
+ adapted = PyObject_CallOneArg(adapter, obj);
Py_DECREF(adapter);
return adapted;
}
@@ -105,7 +105,7 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
return NULL;
}
if (adapter) {
- adapted = _PyObject_CallOneArg(adapter, obj);
+ adapted = PyObject_CallOneArg(adapter, obj);
Py_DECREF(adapter);
if (adapted == Py_None) {
@@ -124,7 +124,7 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt)
return NULL;
}
if (adapter) {
- adapted = _PyObject_CallOneArg(adapter, proto);
+ adapted = PyObject_CallOneArg(adapter, proto);
Py_DECREF(adapter);
if (adapted == Py_None) {
diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c
index d5c353ea7be..4d9d3d41c7b 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -105,7 +105,7 @@ RAM instead of on disk.");
static PyObject* module_complete(PyObject* self, PyObject* args, PyObject*
kwargs)
{
- static char *kwlist[] = {"statement", NULL, NULL};
+ static char *kwlist[] = {"statement", NULL};
char* statement;
PyObject* result;
@@ -135,7 +135,7 @@ Checks if a string contains a complete SQL statement. Non-standard.");
static PyObject* module_enable_shared_cache(PyObject* self, PyObject* args, PyObject*
kwargs)
{
- static char *kwlist[] = {"do_enable", NULL, NULL};
+ static char *kwlist[] = {"do_enable", NULL};
int do_enable;
int rc;
diff --git a/Modules/_sqlite/prepare_protocol.c b/Modules/_sqlite/prepare_protocol.c
index 181c7edf96b..05a2ca5a652 100644
--- a/Modules/_sqlite/prepare_protocol.c
+++ b/Modules/_sqlite/prepare_protocol.c
@@ -78,6 +78,6 @@ PyTypeObject pysqlite_PrepareProtocolType= {
extern int pysqlite_prepare_protocol_setup_types(void)
{
pysqlite_PrepareProtocolType.tp_new = PyType_GenericNew;
- Py_TYPE(&pysqlite_PrepareProtocolType)= &PyType_Type;
+ Py_SET_TYPE(&pysqlite_PrepareProtocolType, &PyType_Type);
return PyType_Ready(&pysqlite_PrepareProtocolType);
}
diff --git a/Modules/_sre.c b/Modules/_sre.c
index f4f9d01dfcc..80c41849229 100644
--- a/Modules/_sre.c
+++ b/Modules/_sre.c
@@ -1002,7 +1002,6 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string,
int literal;
view.buf = NULL;
ptr = getstring(ptemplate, &n, &isbytes, &charsize, &view);
- b = charsize;
if (ptr) {
if (charsize == 1)
literal = memchr(ptr, '\\', n) == NULL;
@@ -1082,7 +1081,7 @@ pattern_subx(PatternObject* self, PyObject* ptemplate, PyObject* string,
match = pattern_new_match(self, &state, 1);
if (!match)
goto error;
- item = _PyObject_CallOneArg(filter, match);
+ item = PyObject_CallOneArg(filter, match);
Py_DECREF(match);
if (!item)
goto error;
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 43b236c2121..a0d34b34baa 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -4223,7 +4223,6 @@ _ssl__SSLContext_load_verify_locations_impl(PySSLContext *self,
r = SSL_CTX_load_verify_locations(self->ctx, cafile_buf, capath_buf);
PySSL_END_ALLOW_THREADS
if (r != 1) {
- ok = 0;
if (errno != 0) {
ERR_clear_error();
PyErr_SetFromErrno(PyExc_OSError);
diff --git a/Modules/_struct.c b/Modules/_struct.c
index cc536b46a62..0cdfe268e64 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -2097,7 +2097,7 @@ cache_struct_converter(PyObject *fmt, PyStructObject **ptr)
return 0;
}
- s_object = _PyObject_CallOneArg(_structmodulestate_global->PyStructType, fmt);
+ s_object = PyObject_CallOneArg(_structmodulestate_global->PyStructType, fmt);
if (s_object != NULL) {
if (PyDict_GET_SIZE(cache) >= MAXCACHE)
PyDict_Clear(cache);
diff --git a/Modules/_testbuffer.c b/Modules/_testbuffer.c
index d7d3cc8d0d5..600a52aa872 100644
--- a/Modules/_testbuffer.c
+++ b/Modules/_testbuffer.c
@@ -1854,7 +1854,7 @@ ndarray_subscript(NDArrayObject *self, PyObject *key)
type_error:
PyErr_Format(PyExc_TypeError,
"cannot index memory using \"%.200s\"",
- key->ob_type->tp_name);
+ Py_TYPE(key)->tp_name);
err_occurred:
Py_DECREF(nd);
return NULL;
@@ -2835,11 +2835,11 @@ PyInit__testbuffer(void)
if (m == NULL)
return NULL;
- Py_TYPE(&NDArray_Type) = &PyType_Type;
+ Py_SET_TYPE(&NDArray_Type, &PyType_Type);
Py_INCREF(&NDArray_Type);
PyModule_AddObject(m, "ndarray", (PyObject *)&NDArray_Type);
- Py_TYPE(&StaticArray_Type) = &PyType_Type;
+ Py_SET_TYPE(&StaticArray_Type, &PyType_Type);
Py_INCREF(&StaticArray_Type);
PyModule_AddObject(m, "staticarray", (PyObject *)&StaticArray_Type);
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index 943bee6e21e..eb31a0ef5c9 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -274,7 +274,7 @@ dict_hassplittable(PyObject *self, PyObject *arg)
if (!PyDict_Check(arg)) {
PyErr_Format(PyExc_TypeError,
"dict_hassplittable() argument must be dict, not '%s'",
- arg->ob_type->tp_name);
+ Py_TYPE(arg)->tp_name);
return NULL;
}
@@ -2724,7 +2724,7 @@ test_thread_state(PyObject *self, PyObject *args)
if (!PyCallable_Check(fn)) {
PyErr_Format(PyExc_TypeError, "'%s' object is not callable",
- fn->ob_type->tp_name);
+ Py_TYPE(fn)->tp_name);
return NULL;
}
@@ -3550,8 +3550,8 @@ slot_tp_del(PyObject *self)
PyObject *error_type, *error_value, *error_traceback;
/* Temporarily resurrect the object. */
- assert(self->ob_refcnt == 0);
- self->ob_refcnt = 1;
+ assert(Py_REFCNT(self) == 0);
+ Py_SET_REFCNT(self, 1);
/* Save the current exception, if any. */
PyErr_Fetch(&error_type, &error_value, &error_traceback);
@@ -3573,31 +3573,26 @@ slot_tp_del(PyObject *self)
/* Undo the temporary resurrection; can't use DECREF here, it would
* cause a recursive call.
*/
- assert(self->ob_refcnt > 0);
- if (--self->ob_refcnt == 0)
- return; /* this is the normal path out */
+ assert(Py_REFCNT(self) > 0);
+ Py_SET_REFCNT(self, Py_REFCNT(self) - 1);
+ if (Py_REFCNT(self) == 0) {
+ /* this is the normal path out */
+ return;
+ }
/* __del__ resurrected it! Make it look like the original Py_DECREF
* never happened.
*/
{
- Py_ssize_t refcnt = self->ob_refcnt;
+ Py_ssize_t refcnt = Py_REFCNT(self);
_Py_NewReference(self);
- self->ob_refcnt = refcnt;
+ Py_SET_REFCNT(self, refcnt);
}
assert(!PyType_IS_GC(Py_TYPE(self)) || _PyObject_GC_IS_TRACKED(self));
- /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
- * we need to undo that. */
- _Py_DEC_REFTOTAL;
- /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
- * chain, so no more to do there.
- * If COUNT_ALLOCS, the original decref bumped tp_frees, and
- * _Py_NewReference bumped tp_allocs: both of those need to be
- * undone.
- */
-#ifdef COUNT_ALLOCS
- --Py_TYPE(self)->tp_frees;
- --Py_TYPE(self)->tp_allocs;
+ /* If Py_REF_DEBUG macro is defined, _Py_NewReference() increased
+ _Py_RefTotal, so we need to undo that. */
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
#endif
}
@@ -4627,7 +4622,7 @@ check_pyobject_uninitialized_is_freed(PyObject *self, PyObject *Py_UNUSED(args))
return NULL;
}
/* Initialize reference count to avoid early crash in ceval or GC */
- Py_REFCNT(op) = 1;
+ Py_SET_REFCNT(op, 1);
/* object fields like ob_type are uninitialized! */
return test_pyobject_is_freed("check_pyobject_uninitialized_is_freed", op);
}
@@ -4642,7 +4637,7 @@ check_pyobject_forbidden_bytes_is_freed(PyObject *self, PyObject *Py_UNUSED(args
return NULL;
}
/* Initialize reference count to avoid early crash in ceval or GC */
- Py_REFCNT(op) = 1;
+ Py_SET_REFCNT(op, 1);
/* ob_type field is after the memory block: part of "forbidden bytes"
when using debug hooks on memory allocators! */
return test_pyobject_is_freed("check_pyobject_forbidden_bytes_is_freed", op);
@@ -4658,7 +4653,7 @@ check_pyobject_freed_is_freed(PyObject *self, PyObject *Py_UNUSED(args))
}
Py_TYPE(op)->tp_dealloc(op);
/* Reset reference count to avoid early crash in ceval or GC */
- Py_REFCNT(op) = 1;
+ Py_SET_REFCNT(op, 1);
/* object memory is freed! */
return test_pyobject_is_freed("check_pyobject_freed_is_freed", op);
}
@@ -4851,7 +4846,7 @@ test_pyobject_fastcalldict(PyObject *self, PyObject *args)
return NULL;
}
- return _PyObject_FastCallDict(func, stack, nargs, kwargs);
+ return PyObject_VectorcallDict(func, stack, nargs, kwargs);
}
@@ -4885,7 +4880,7 @@ test_pyobject_vectorcall(PyObject *self, PyObject *args)
PyErr_SetString(PyExc_TypeError, "kwnames must be None or a tuple");
return NULL;
}
- return _PyObject_Vectorcall(func, stack, nargs, kwnames);
+ return PyObject_Vectorcall(func, stack, nargs, kwnames);
}
@@ -5140,7 +5135,7 @@ negative_refcount(PyObject *self, PyObject *Py_UNUSED(args))
}
assert(Py_REFCNT(obj) == 1);
- Py_REFCNT(obj) = 0;
+ Py_SET_REFCNT(obj, 0);
/* Py_DECREF() must call _Py_NegativeRefcount() and abort Python */
Py_DECREF(obj);
@@ -5258,7 +5253,7 @@ meth_fastcall_keywords(PyObject* self, PyObject* const* args,
if (pyargs == NULL) {
return NULL;
}
- PyObject *pykwargs = _PyObject_Vectorcall((PyObject*)&PyDict_Type,
+ PyObject *pykwargs = PyObject_Vectorcall((PyObject*)&PyDict_Type,
args + nargs, 0, kwargs);
return Py_BuildValue("NNN", _null_to_none(self), pyargs, pykwargs);
}
@@ -6138,7 +6133,7 @@ static PyTypeObject MethodDescriptorBase_Type = {
.tp_call = PyVectorcall_Call,
.tp_vectorcall_offset = offsetof(MethodDescriptorObject, vectorcall),
.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
- Py_TPFLAGS_METHOD_DESCRIPTOR | _Py_TPFLAGS_HAVE_VECTORCALL,
+ Py_TPFLAGS_METHOD_DESCRIPTOR | Py_TPFLAGS_HAVE_VECTORCALL,
.tp_descr_get = func_descr_get,
};
@@ -6177,7 +6172,7 @@ static PyTypeObject MethodDescriptor2_Type = {
.tp_new = MethodDescriptor2_new,
.tp_call = PyVectorcall_Call,
.tp_vectorcall_offset = offsetof(MethodDescriptor2Object, vectorcall),
- .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | _Py_TPFLAGS_HAVE_VECTORCALL,
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_VECTORCALL,
};
PyDoc_STRVAR(heapgctype__doc__,
@@ -6610,9 +6605,9 @@ PyInit__testcapi(void)
if (m == NULL)
return NULL;
- Py_TYPE(&_HashInheritanceTester_Type)=&PyType_Type;
+ Py_SET_TYPE(&_HashInheritanceTester_Type, &PyType_Type);
- Py_TYPE(&test_structmembersType)=&PyType_Type;
+ Py_SET_TYPE(&test_structmembersType, &PyType_Type);
Py_INCREF(&test_structmembersType);
/* don't use a name starting with "test", since we don't want
test_capi to automatically call this */
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c
index 4f7d1b78ebe..87bc7ae8aee 100644
--- a/Modules/_tkinter.c
+++ b/Modules/_tkinter.c
@@ -833,7 +833,7 @@ typedef struct {
} PyTclObject;
static PyObject *PyTclObject_Type;
-#define PyTclObject_Check(v) ((v)->ob_type == (PyTypeObject *) PyTclObject_Type)
+#define PyTclObject_Check(v) (Py_TYPE(v) == (PyTypeObject *) PyTclObject_Type)
static PyObject *
newPyTclObject(Tcl_Obj *arg)
@@ -1734,7 +1734,7 @@ varname_converter(PyObject *in, void *_out)
}
PyErr_Format(PyExc_TypeError,
"must be str, bytes or Tcl_Obj, not %.50s",
- in->ob_type->tp_name);
+ Py_TYPE(in)->tp_name);
return 0;
}
diff --git a/Modules/_tracemalloc.c b/Modules/_tracemalloc.c
index 70219721b51..ddf6ef4e11d 100644
--- a/Modules/_tracemalloc.c
+++ b/Modules/_tracemalloc.c
@@ -1,4 +1,5 @@
#include "Python.h"
+#include "pycore_pymem.h"
#include "pycore_traceback.h"
#include "hashtable.h"
#include "frameobject.h"
diff --git a/Modules/_xxsubinterpretersmodule.c b/Modules/_xxsubinterpretersmodule.c
index 4a6ffdd3266..cc4f5d9e6dc 100644
--- a/Modules/_xxsubinterpretersmodule.c
+++ b/Modules/_xxsubinterpretersmodule.c
@@ -221,8 +221,9 @@ _sharedexception_bind(PyObject *exctype, PyObject *exc, PyObject *tb)
if (err->name == NULL) {
if (PyErr_ExceptionMatches(PyExc_MemoryError)) {
failure = "out of memory copying exception type name";
+ } else {
+ failure = "unable to encode and copy exception type name";
}
- failure = "unable to encode and copy exception type name";
goto finally;
}
@@ -237,8 +238,9 @@ _sharedexception_bind(PyObject *exctype, PyObject *exc, PyObject *tb)
if (err->msg == NULL) {
if (PyErr_ExceptionMatches(PyExc_MemoryError)) {
failure = "out of memory copying exception message";
+ } else {
+ failure = "unable to encode and copy exception message";
}
- failure = "unable to encode and copy exception message";
goto finally;
}
}
@@ -1426,7 +1428,7 @@ channel_id_converter(PyObject *arg, void *ptr)
else {
PyErr_Format(PyExc_TypeError,
"channel ID must be an int, got %.100s",
- arg->ob_type->tp_name);
+ Py_TYPE(arg)->tp_name);
return 0;
}
*(int64_t *)ptr = cid;
diff --git a/Modules/_xxtestfuzz/fuzzer.c b/Modules/_xxtestfuzz/fuzzer.c
index dae1eaeabd0..74ba819b8b5 100644
--- a/Modules/_xxtestfuzz/fuzzer.c
+++ b/Modules/_xxtestfuzz/fuzzer.c
@@ -104,7 +104,7 @@ static int fuzz_json_loads(const char* data, size_t size) {
if (input_bytes == NULL) {
return 0;
}
- PyObject* parsed = _PyObject_CallOneArg(json_loads_method, input_bytes);
+ PyObject* parsed = PyObject_CallOneArg(json_loads_method, input_bytes);
if (parsed == NULL) {
/* Ignore ValueError as the fuzzer will more than likely
generate some invalid json and values */
@@ -263,7 +263,7 @@ static int fuzz_sre_match(const char* data, size_t size) {
PyObject* pattern = compiled_patterns[idx];
PyObject* match_callable = PyObject_GetAttrString(pattern, "match");
- PyObject* matches = _PyObject_CallOneArg(match_callable, to_match);
+ PyObject* matches = PyObject_CallOneArg(match_callable, to_match);
Py_XDECREF(matches);
Py_DECREF(match_callable);
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index edb56ab6e18..eeda714d6a9 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -128,14 +128,14 @@ array_resize(arrayobject *self, Py_ssize_t newsize)
if (self->allocated >= newsize &&
Py_SIZE(self) < newsize + 16 &&
self->ob_item != NULL) {
- Py_SIZE(self) = newsize;
+ Py_SET_SIZE(self, newsize);
return 0;
}
if (newsize == 0) {
PyMem_FREE(self->ob_item);
self->ob_item = NULL;
- Py_SIZE(self) = 0;
+ Py_SET_SIZE(self, 0);
self->allocated = 0;
return 0;
}
@@ -165,7 +165,7 @@ array_resize(arrayobject *self, Py_ssize_t newsize)
return -1;
}
self->ob_item = items;
- Py_SIZE(self) = newsize;
+ Py_SET_SIZE(self, newsize);
self->allocated = _new_size;
return 0;
}
@@ -593,7 +593,7 @@ newarrayobject(PyTypeObject *type, Py_ssize_t size, const struct arraydescr *des
op->ob_descr = descr;
op->allocated = size;
op->weakreflist = NULL;
- Py_SIZE(op) = size;
+ Py_SET_SIZE(op, size);
if (size <= 0) {
op->ob_item = NULL;
}
@@ -2696,7 +2696,7 @@ array_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
return NULL;
}
self->ob_item = item;
- Py_SIZE(self) = n / sizeof(Py_UNICODE);
+ Py_SET_SIZE(self, n / sizeof(Py_UNICODE));
memcpy(item, ustr, n);
self->allocated = Py_SIZE(self);
}
@@ -2996,7 +2996,7 @@ array_modexec(PyObject *m)
if (PyType_Ready(&Arraytype) < 0)
return -1;
- Py_TYPE(&PyArrayIter_Type) = &PyType_Type;
+ Py_SET_TYPE(&PyArrayIter_Type, &PyType_Type);
Py_INCREF((PyObject *)&Arraytype);
if (PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype) < 0) {
diff --git a/Modules/binascii.c b/Modules/binascii.c
index 94b0732c12c..e428b0d6f96 100644
--- a/Modules/binascii.c
+++ b/Modules/binascii.c
@@ -613,6 +613,11 @@ static PyObject *
binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data)
/*[clinic end generated code: output=4d6d8c54d54ea1c1 input=0d914c680e0eed55]*/
{
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "binascii.a2b_hqx() is deprecated", 1) < 0) {
+ return NULL;
+ }
+
const unsigned char *ascii_data;
unsigned char *bin_data;
int leftbits = 0;
@@ -701,6 +706,11 @@ static PyObject *
binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data)
/*[clinic end generated code: output=393d79338f5f5629 input=e1f1712447a82b09]*/
{
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "binascii.rlecode_hqx() is deprecated", 1) < 0) {
+ return NULL;
+ }
+
const unsigned char *in_data;
unsigned char *out_data;
unsigned char ch;
@@ -763,6 +773,11 @@ static PyObject *
binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data)
/*[clinic end generated code: output=d0aa5a704bc9f7de input=9596ebe019fe12ba]*/
{
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "binascii.b2a_hqx() is deprecated", 1) < 0) {
+ return NULL;
+ }
+
unsigned char *ascii_data;
const unsigned char *bin_data;
int leftbits = 0;
@@ -818,6 +833,11 @@ static PyObject *
binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data)
/*[clinic end generated code: output=9826619565de1c6c input=54cdd49fc014402c]*/
{
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "binascii.rledecode_hqx() is deprecated", 1) < 0) {
+ return NULL;
+ }
+
const unsigned char *in_data;
unsigned char *out_data;
unsigned char in_byte, in_repeat;
@@ -932,7 +952,7 @@ error:
/*[clinic input]
-binascii.crc_hqx -> unsigned_int
+binascii.crc_hqx
data: Py_buffer
crc: unsigned_int(bitwise=True)
@@ -941,9 +961,9 @@ binascii.crc_hqx -> unsigned_int
Compute CRC-CCITT incrementally.
[clinic start generated code]*/
-static unsigned int
+static PyObject *
binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc)
-/*[clinic end generated code: output=8ec2a78590d19170 input=f18240ff8c705b79]*/
+/*[clinic end generated code: output=2fde213d0f547a98 input=56237755370a951c]*/
{
const unsigned char *bin_data;
Py_ssize_t len;
@@ -956,7 +976,7 @@ binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc)
crc = ((crc<<8)&0xff00) ^ crctab_hqx[(crc>>8)^*bin_data++];
}
- return crc;
+ return PyLong_FromUnsignedLong(crc);
}
#ifndef USE_ZLIB_CRC32
diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h
index 7ed836598b3..8f6f880cadf 100644
--- a/Modules/cjkcodecs/cjkcodecs.h
+++ b/Modules/cjkcodecs/cjkcodecs.h
@@ -291,7 +291,7 @@ getcodec(PyObject *self, PyObject *encoding)
if (codecobj == NULL)
return NULL;
- r = _PyObject_CallOneArg(cofunc, codecobj);
+ r = PyObject_CallOneArg(cofunc, codecobj);
Py_DECREF(codecobj);
return r;
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c
index f24ec933508..3bc07b2d8d5 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -92,7 +92,7 @@ call_error_callback(PyObject *errors, PyObject *exc)
if (cb == NULL)
return NULL;
- r = _PyObject_CallOneArg(cb, exc);
+ r = PyObject_CallOneArg(cb, exc);
Py_DECREF(cb);
return r;
}
@@ -1450,7 +1450,7 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self,
PyErr_Format(PyExc_TypeError,
"stream function returned a "
"non-bytes object (%.100s)",
- cres->ob_type->tp_name);
+ Py_TYPE(cres)->tp_name);
goto errorexit;
}
diff --git a/Modules/cjkcodecs/multibytecodec.h b/Modules/cjkcodecs/multibytecodec.h
index 6d34534ee68..94670ecafef 100644
--- a/Modules/cjkcodecs/multibytecodec.h
+++ b/Modules/cjkcodecs/multibytecodec.h
@@ -65,7 +65,7 @@ typedef struct {
MultibyteCodec *codec;
} MultibyteCodecObject;
-#define MultibyteCodec_Check(op) ((op)->ob_type == &MultibyteCodec_Type)
+#define MultibyteCodec_Check(op) (Py_TYPE(op) == &MultibyteCodec_Type)
#define _MultibyteStatefulCodec_HEAD \
PyObject_HEAD \
diff --git a/Modules/clinic/_bz2module.c.h b/Modules/clinic/_bz2module.c.h
index ac826bd9b59..0eb6280d6e0 100644
--- a/Modules/clinic/_bz2module.c.h
+++ b/Modules/clinic/_bz2module.c.h
@@ -85,7 +85,7 @@ _bz2_BZ2Compressor___init__(PyObject *self, PyObject *args, PyObject *kwargs)
int return_value = -1;
int compresslevel = 9;
- if ((Py_TYPE(self) == &BZ2Compressor_Type) &&
+ if (Py_IS_TYPE(self, &BZ2Compressor_Type) &&
!_PyArg_NoKeywords("BZ2Compressor", kwargs)) {
goto exit;
}
@@ -207,11 +207,11 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs)
{
int return_value = -1;
- if ((Py_TYPE(self) == &BZ2Decompressor_Type) &&
+ if (Py_IS_TYPE(self, &BZ2Decompressor_Type) &&
!_PyArg_NoPositional("BZ2Decompressor", args)) {
goto exit;
}
- if ((Py_TYPE(self) == &BZ2Decompressor_Type) &&
+ if (Py_IS_TYPE(self, &BZ2Decompressor_Type) &&
!_PyArg_NoKeywords("BZ2Decompressor", kwargs)) {
goto exit;
}
@@ -220,4 +220,4 @@ _bz2_BZ2Decompressor___init__(PyObject *self, PyObject *args, PyObject *kwargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=ec3d1b3652c98823 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=3f3f1e788fe28ee1 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h
index 9da3f1195a3..0457a433e79 100644
--- a/Modules/clinic/_pickle.c.h
+++ b/Modules/clinic/_pickle.c.h
@@ -69,8 +69,9 @@ PyDoc_STRVAR(_pickle_Pickler___init____doc__,
"This takes a binary file for writing a pickle data stream.\n"
"\n"
"The optional *protocol* argument tells the pickler to use the given\n"
-"protocol; supported protocols are 0, 1, 2, 3 and 4. The default\n"
-"protocol is 3; a backward-incompatible protocol designed for Python 3.\n"
+"protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default\n"
+"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
+"with previous versions.\n"
"\n"
"Specifying a negative protocol version selects the highest protocol\n"
"version supported. The higher the protocol used, the more recent the\n"
@@ -463,8 +464,8 @@ PyDoc_STRVAR(_pickle_dump__doc__,
"be more efficient.\n"
"\n"
"The optional *protocol* argument tells the pickler to use the given\n"
-"protocol; supported protocols are 0, 1, 2, 3 and 4. The default\n"
-"protocol is 4. It was introduced in Python 3.4, it is incompatible\n"
+"protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default\n"
+"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
"with previous versions.\n"
"\n"
"Specifying a negative protocol version selects the highest protocol\n"
@@ -550,8 +551,8 @@ PyDoc_STRVAR(_pickle_dumps__doc__,
"Return the pickled representation of the object as a bytes object.\n"
"\n"
"The optional *protocol* argument tells the pickler to use the given\n"
-"protocol; supported protocols are 0, 1, 2, 3 and 4. The default\n"
-"protocol is 4. It was introduced in Python 3.4, it is incompatible\n"
+"protocol; supported protocols are 0, 1, 2, 3, 4 and 5. The default\n"
+"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
"with previous versions.\n"
"\n"
"Specifying a negative protocol version selects the highest protocol\n"
@@ -835,4 +836,4 @@ skip_optional_kwonly:
exit:
return return_value;
}
-/*[clinic end generated code: output=de075ec48d4ee0e1 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=e2506823be1960c5 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h
index 82942f08a68..4d02c72c472 100644
--- a/Modules/clinic/binascii.c.h
+++ b/Modules/clinic/binascii.c.h
@@ -328,7 +328,7 @@ PyDoc_STRVAR(binascii_crc_hqx__doc__,
#define BINASCII_CRC_HQX_METHODDEF \
{"crc_hqx", (PyCFunction)(void(*)(void))binascii_crc_hqx, METH_FASTCALL, binascii_crc_hqx__doc__},
-static unsigned int
+static PyObject *
binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc);
static PyObject *
@@ -337,7 +337,6 @@ binascii_crc_hqx(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
PyObject *return_value = NULL;
Py_buffer data = {NULL, NULL};
unsigned int crc;
- unsigned int _return_value;
if (!_PyArg_CheckPositional("crc_hqx", nargs, 2, 2)) {
goto exit;
@@ -358,11 +357,7 @@ binascii_crc_hqx(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
if (crc == (unsigned int)-1 && PyErr_Occurred()) {
goto exit;
}
- _return_value = binascii_crc_hqx_impl(module, &data, crc);
- if ((_return_value == (unsigned int)-1) && PyErr_Occurred()) {
- goto exit;
- }
- return_value = PyLong_FromUnsignedLong((unsigned long)_return_value);
+ return_value = binascii_crc_hqx_impl(module, &data, crc);
exit:
/* Cleanup for data */
@@ -801,4 +796,4 @@ exit:
return return_value;
}
-/*[clinic end generated code: output=ec26d03c2007eaac input=a9049054013a1b77]*/
+/*[clinic end generated code: output=a1e878d3963b615e input=a9049054013a1b77]*/
diff --git a/Modules/clinic/gcmodule.c.h b/Modules/clinic/gcmodule.c.h
index 22d2aa4a87b..72795c66bf7 100644
--- a/Modules/clinic/gcmodule.c.h
+++ b/Modules/clinic/gcmodule.c.h
@@ -304,6 +304,15 @@ PyDoc_STRVAR(gc_is_tracked__doc__,
#define GC_IS_TRACKED_METHODDEF \
{"is_tracked", (PyCFunction)gc_is_tracked, METH_O, gc_is_tracked__doc__},
+PyDoc_STRVAR(gc_is_finalized__doc__,
+"is_finalized($module, obj, /)\n"
+"--\n"
+"\n"
+"Returns true if the object has been already finalized by the GC.");
+
+#define GC_IS_FINALIZED_METHODDEF \
+ {"is_finalized", (PyCFunction)gc_is_finalized, METH_O, gc_is_finalized__doc__},
+
PyDoc_STRVAR(gc_freeze__doc__,
"freeze($module, /)\n"
"--\n"
@@ -373,4 +382,4 @@ gc_get_freeze_count(PyObject *module, PyObject *Py_UNUSED(ignored))
exit:
return return_value;
}
-/*[clinic end generated code: output=e40d384b1f0d513c input=a9049054013a1b77]*/
+/*[clinic end generated code: output=bd6a8056989e2e69 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/mathmodule.c.h b/Modules/clinic/mathmodule.c.h
index 95d68ee55ae..f95d291d41f 100644
--- a/Modules/clinic/mathmodule.c.h
+++ b/Modules/clinic/mathmodule.c.h
@@ -808,4 +808,91 @@ math_comb(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
exit:
return return_value;
}
-/*[clinic end generated code: output=9a2b3dc91eb9aadd input=a9049054013a1b77]*/
+
+PyDoc_STRVAR(math_nextafter__doc__,
+"nextafter($module, x, y, /)\n"
+"--\n"
+"\n"
+"Return the next floating-point value after x towards y.");
+
+#define MATH_NEXTAFTER_METHODDEF \
+ {"nextafter", (PyCFunction)(void(*)(void))math_nextafter, METH_FASTCALL, math_nextafter__doc__},
+
+static PyObject *
+math_nextafter_impl(PyObject *module, double x, double y);
+
+static PyObject *
+math_nextafter(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
+{
+ PyObject *return_value = NULL;
+ double x;
+ double y;
+
+ if (!_PyArg_CheckPositional("nextafter", nargs, 2, 2)) {
+ goto exit;
+ }
+ if (PyFloat_CheckExact(args[0])) {
+ x = PyFloat_AS_DOUBLE(args[0]);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(args[0]);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ if (PyFloat_CheckExact(args[1])) {
+ y = PyFloat_AS_DOUBLE(args[1]);
+ }
+ else
+ {
+ y = PyFloat_AsDouble(args[1]);
+ if (y == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ return_value = math_nextafter_impl(module, x, y);
+
+exit:
+ return return_value;
+}
+
+PyDoc_STRVAR(math_ulp__doc__,
+"ulp($module, x, /)\n"
+"--\n"
+"\n"
+"Return the value of the least significant bit of the float x.");
+
+#define MATH_ULP_METHODDEF \
+ {"ulp", (PyCFunction)math_ulp, METH_O, math_ulp__doc__},
+
+static double
+math_ulp_impl(PyObject *module, double x);
+
+static PyObject *
+math_ulp(PyObject *module, PyObject *arg)
+{
+ PyObject *return_value = NULL;
+ double x;
+ double _return_value;
+
+ if (PyFloat_CheckExact(arg)) {
+ x = PyFloat_AS_DOUBLE(arg);
+ }
+ else
+ {
+ x = PyFloat_AsDouble(arg);
+ if (x == -1.0 && PyErr_Occurred()) {
+ goto exit;
+ }
+ }
+ _return_value = math_ulp_impl(module, x);
+ if ((_return_value == -1.0) && PyErr_Occurred()) {
+ goto exit;
+ }
+ return_value = PyFloat_FromDouble(_return_value);
+
+exit:
+ return return_value;
+}
+/*[clinic end generated code: output=9b51d215dbcac060 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h
index aa4756a620a..48dd7a74b3b 100644
--- a/Modules/clinic/posixmodule.c.h
+++ b/Modules/clinic/posixmodule.c.h
@@ -6034,7 +6034,7 @@ exit:
#endif /* (defined(HAVE_POSIX_FADVISE) && !defined(POSIX_FADVISE_AIX_BUG)) */
-#if defined(HAVE_PUTENV) && defined(MS_WINDOWS)
+#if defined(MS_WINDOWS)
PyDoc_STRVAR(os_putenv__doc__,
"putenv($module, name, value, /)\n"
@@ -6080,9 +6080,9 @@ exit:
return return_value;
}
-#endif /* defined(HAVE_PUTENV) && defined(MS_WINDOWS) */
+#endif /* defined(MS_WINDOWS) */
-#if defined(HAVE_PUTENV) && !defined(MS_WINDOWS)
+#if !defined(MS_WINDOWS)
PyDoc_STRVAR(os_putenv__doc__,
"putenv($module, name, value, /)\n"
@@ -6123,9 +6123,45 @@ exit:
return return_value;
}
-#endif /* defined(HAVE_PUTENV) && !defined(MS_WINDOWS) */
+#endif /* !defined(MS_WINDOWS) */
-#if defined(HAVE_UNSETENV)
+#if defined(MS_WINDOWS)
+
+PyDoc_STRVAR(os_unsetenv__doc__,
+"unsetenv($module, name, /)\n"
+"--\n"
+"\n"
+"Delete an environment variable.");
+
+#define OS_UNSETENV_METHODDEF \
+ {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__},
+
+static PyObject *
+os_unsetenv_impl(PyObject *module, PyObject *name);
+
+static PyObject *
+os_unsetenv(PyObject *module, PyObject *arg)
+{
+ PyObject *return_value = NULL;
+ PyObject *name;
+
+ if (!PyUnicode_Check(arg)) {
+ _PyArg_BadArgument("unsetenv", "argument", "str", arg);
+ goto exit;
+ }
+ if (PyUnicode_READY(arg) == -1) {
+ goto exit;
+ }
+ name = arg;
+ return_value = os_unsetenv_impl(module, name);
+
+exit:
+ return return_value;
+}
+
+#endif /* defined(MS_WINDOWS) */
+
+#if !defined(MS_WINDOWS)
PyDoc_STRVAR(os_unsetenv__doc__,
"unsetenv($module, name, /)\n"
@@ -6157,7 +6193,7 @@ exit:
return return_value;
}
-#endif /* defined(HAVE_UNSETENV) */
+#endif /* !defined(MS_WINDOWS) */
PyDoc_STRVAR(os_strerror__doc__,
"strerror($module, code, /)\n"
@@ -8773,4 +8809,4 @@ exit:
#ifndef OS__REMOVE_DLL_DIRECTORY_METHODDEF
#define OS__REMOVE_DLL_DIRECTORY_METHODDEF
#endif /* !defined(OS__REMOVE_DLL_DIRECTORY_METHODDEF) */
-/*[clinic end generated code: output=51ba5b9536420cea input=a9049054013a1b77]*/
+/*[clinic end generated code: output=5d99f90cead7c0e1 input=a9049054013a1b77]*/
diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c
index 8b21decfa53..5eac4b4940b 100644
--- a/Modules/cmathmodule.c
+++ b/Modules/cmathmodule.c
@@ -3,6 +3,7 @@
/* much code borrowed from mathmodule.c */
#include "Python.h"
+#include "pycore_dtoa.h"
#include "_math.h"
/* we need DBL_MAX, DBL_MIN, DBL_EPSILON, DBL_MANT_DIG and FLT_RADIX from
float.h. We assume that FLT_RADIX is either 2 or 16. */
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
index b19401e94d8..555e1afc9f8 100644
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -1065,24 +1065,10 @@ faulthandler_sigsegv(PyObject *self, PyObject *args)
Py_RETURN_NONE;
}
-static void
+static void _Py_NO_RETURN
faulthandler_fatal_error_thread(void *plock)
{
-#ifndef __clang__
- PyThread_type_lock *lock = (PyThread_type_lock *)plock;
-#endif
-
Py_FatalError("in new thread");
-
-#ifndef __clang__
- /* Issue #28152: Py_FatalError() is declared with
- __attribute__((__noreturn__)). GCC emits a warning without
- "PyThread_release_lock()" (compiler bug?), but Clang is smarter and
- emits a warning on the return. */
-
- /* notify the caller that we are done */
- PyThread_release_lock(lock);
-#endif
}
static PyObject *
diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c
index 11906aa5829..43f9b22f672 100644
--- a/Modules/fcntlmodule.c
+++ b/Modules/fcntlmodule.c
@@ -66,6 +66,10 @@ fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg)
char buf[1024];
int async_err = 0;
+ if (PySys_Audit("fcntl.fcntl", "iiO", fd, code, arg ? arg : Py_None) < 0) {
+ return NULL;
+ }
+
if (arg != NULL) {
int parse_result;
@@ -171,6 +175,11 @@ fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code,
Py_ssize_t len;
char buf[IOCTL_BUFSZ+1]; /* argument plus NUL byte */
+ if (PySys_Audit("fcntl.ioctl", "iIO", fd, code,
+ ob_arg ? ob_arg : Py_None) < 0) {
+ return NULL;
+ }
+
if (ob_arg != NULL) {
if (PyArg_Parse(ob_arg, "w*:ioctl", &pstr)) {
char *arg;
@@ -288,6 +297,10 @@ fcntl_flock_impl(PyObject *module, int fd, int code)
int ret;
int async_err = 0;
+ if (PySys_Audit("fcntl.flock", "ii", fd, code) < 0) {
+ return NULL;
+ }
+
#ifdef HAVE_FLOCK
do {
Py_BEGIN_ALLOW_THREADS
@@ -372,6 +385,11 @@ fcntl_lockf_impl(PyObject *module, int fd, int code, PyObject *lenobj,
int ret;
int async_err = 0;
+ if (PySys_Audit("fcntl.lockf", "iiOOi", fd, code, lenobj ? lenobj : Py_None,
+ startobj ? startobj : Py_None, whence) < 0) {
+ return NULL;
+ }
+
#ifndef LOCK_SH
#define LOCK_SH 1 /* shared lock */
#define LOCK_EX 2 /* exclusive lock */
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 64afe831c84..cf164c17d7b 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -118,9 +118,6 @@ gc_decref(PyGC_Head *g)
g->_gc_prev -= 1 << _PyGC_PREV_SHIFT;
}
-/* Python string to use if unhandled exception occurs */
-static PyObject *gc_str = NULL;
-
/* set for debugging information */
#define DEBUG_STATS (1<<0) /* print collection statistics */
#define DEBUG_COLLECTABLE (1<<1) /* print collectable objects */
@@ -609,7 +606,7 @@ move_unreachable(PyGC_Head *young, PyGC_Head *unreachable)
// NEXT_MASK_UNREACHABLE flag, we set it unconditionally.
// But this may pollute the unreachable list head's 'next' pointer
// too. That's semantically senseless but expedient here - the
- // damage is repaired when this fumction ends.
+ // damage is repaired when this function ends.
last->_gc_next = (NEXT_MASK_UNREACHABLE | (uintptr_t)gc);
_PyGCHead_SET_PREV(gc, last);
gc->_gc_next = (NEXT_MASK_UNREACHABLE | (uintptr_t)unreachable);
@@ -656,7 +653,7 @@ untrack_dicts(PyGC_Head *head)
static int
has_legacy_finalizer(PyObject *op)
{
- return op->ob_type->tp_del != NULL;
+ return Py_TYPE(op)->tp_del != NULL;
}
/* Move the objects in unreachable with tp_del slots into `finalizers`.
@@ -875,7 +872,7 @@ handle_weakrefs(PyGC_Head *unreachable, PyGC_Head *old)
_PyObject_ASSERT(op, callback != NULL);
/* copy-paste of weakrefobject.c's handle_callback() */
- temp = _PyObject_CallOneArg(callback, (PyObject *)wr);
+ temp = PyObject_CallOneArg(callback, (PyObject *)wr);
if (temp == NULL)
PyErr_WriteUnraisable(callback);
else
@@ -1039,7 +1036,7 @@ clear_freelists(void)
(void)PyContext_ClearFreeList();
}
-// Show stats for objects in each gennerations.
+// Show stats for objects in each generations
static void
show_stats_each_generations(GCState *gcstate)
{
@@ -1058,17 +1055,17 @@ show_stats_each_generations(GCState *gcstate)
buf, gc_list_size(&gcstate->permanent_generation.head));
}
-/* Deduce wich objects among "base" are unreachable from outside the list
+/* Deduce which objects among "base" are unreachable from outside the list
and move them to 'unreachable'. The process consist in the following steps:
1. Copy all reference counts to a different field (gc_prev is used to hold
this copy to save memory).
2. Traverse all objects in "base" and visit all referred objects using
- "tp_traverse" and for every visited object, substract 1 to the reference
+ "tp_traverse" and for every visited object, subtract 1 to the reference
count (the one that we copied in the previous step). After this step, all
objects that can be reached directly from outside must have strictly positive
reference count, while all unreachable objects must have a count of exactly 0.
-3. Indentify all unreachable objects (the ones with 0 reference count) and move
+3. Identify all unreachable objects (the ones with 0 reference count) and move
them to the "unreachable" list. This step also needs to move back to "base" all
objects that were initially marked as unreachable but are referred transitively
by the reachable objects (the ones with strictly positive reference count).
@@ -1098,10 +1095,38 @@ deduce_unreachable(PyGC_Head *base, PyGC_Head *unreachable) {
/* Leave everything reachable from outside base in base, and move
* everything else (in base) to unreachable.
+ *
* NOTE: This used to move the reachable objects into a reachable
* set instead. But most things usually turn out to be reachable,
- * so it's more efficient to move the unreachable things. See note
- ^ [REACHABLE OR UNREACHABLE?] at the file end.
+ * so it's more efficient to move the unreachable things. It "sounds slick"
+ * to move the unreachable objects, until you think about it - the reason it
+ * pays isn't actually obvious.
+ *
+ * Suppose we create objects A, B, C in that order. They appear in the young
+ * generation in the same order. If B points to A, and C to B, and C is
+ * reachable from outside, then the adjusted refcounts will be 0, 0, and 1
+ * respectively.
+ *
+ * When move_unreachable finds A, A is moved to the unreachable list. The
+ * same for B when it's first encountered. Then C is traversed, B is moved
+ * _back_ to the reachable list. B is eventually traversed, and then A is
+ * moved back to the reachable list.
+ *
+ * So instead of not moving at all, the reachable objects B and A are moved
+ * twice each. Why is this a win? A straightforward algorithm to move the
+ * reachable objects instead would move A, B, and C once each.
+ *
+ * The key is that this dance leaves the objects in order C, B, A - it's
+ * reversed from the original order. On all _subsequent_ scans, none of
+ * them will move. Since most objects aren't in cycles, this can save an
+ * unbounded number of moves across an unbounded number of later collections.
+ * It can cost more only the first time the chain is scanned.
+ *
+ * Drawback: move_unreachable is also used to find out what's still trash
+ * after finalizers may resurrect objects. In _that_ case most unreachable
+ * objects will remain unreachable, so it would be more efficient to move
+ * the reachable objects instead. But this is a one-time cost, probably not
+ * worth complicating the code to speed just a little.
*/
gc_list_init(unreachable);
move_unreachable(base, unreachable); // gc_prev is pointer again
@@ -1197,7 +1222,7 @@ collect(PyThreadState *tstate, int generation,
gc_list_merge(young, old);
}
else {
- /* We only untrack dicts in full collections, to avoid quadratic
+ /* We only un-track dicts in full collections, to avoid quadratic
dict build-up. See issue #14775. */
untrack_dicts(young);
gcstate->long_lived_pending = 0;
@@ -1282,10 +1307,7 @@ collect(PyThreadState *tstate, int generation,
_PyErr_Clear(tstate);
}
else {
- if (gc_str == NULL)
- gc_str = PyUnicode_FromString("garbage collection");
- PyErr_WriteUnraisable(gc_str);
- Py_FatalError("unexpected exception during garbage collection");
+ _PyErr_WriteUnraisableMsg("in garbage collection", NULL);
}
}
@@ -1381,8 +1403,40 @@ collect_generations(PyThreadState *tstate)
for (int i = NUM_GENERATIONS-1; i >= 0; i--) {
if (gcstate->generations[i].count > gcstate->generations[i].threshold) {
/* Avoid quadratic performance degradation in number
- of tracked objects. See comments at the beginning
- of this file, and issue #4074.
+ of tracked objects (see also issue #4074):
+
+ To limit the cost of garbage collection, there are two strategies;
+ - make each collection faster, e.g. by scanning fewer objects
+ - do less collections
+ This heuristic is about the latter strategy.
+
+ In addition to the various configurable thresholds, we only trigger a
+ full collection if the ratio
+
+ long_lived_pending / long_lived_total
+
+ is above a given value (hardwired to 25%).
+
+ The reason is that, while "non-full" collections (i.e., collections of
+ the young and middle generations) will always examine roughly the same
+ number of objects -- determined by the aforementioned thresholds --,
+ the cost of a full collection is proportional to the total number of
+ long-lived objects, which is virtually unbounded.
+
+ Indeed, it has been remarked that doing a full collection every
+ of object creations entails a dramatic performance
+ degradation in workloads which consist in creating and storing lots of
+ long-lived objects (e.g. building a large list of GC-tracked objects would
+ show quadratic performance, instead of linear as expected: see issue #4074).
+
+ Using the above ratio, instead, yields amortized linear performance in
+ the total number of objects (the effect of which can be summarized
+ thusly: "each full garbage collection is more and more costly as the
+ number of objects grows, but we do fewer and fewer of them").
+
+ This heuristic was suggested by Martin von Löwis on python-dev in
+ June 2008. His original analysis and proposal can be found at:
+ http://mail.python.org/pipermail/python-dev/2008-June/080579.html
*/
if (i == NUM_GENERATIONS - 1
&& gcstate->long_lived_pending < gcstate->long_lived_total / 4)
@@ -1809,6 +1863,25 @@ gc_is_tracked(PyObject *module, PyObject *obj)
return result;
}
+/*[clinic input]
+gc.is_finalized
+
+ obj: object
+ /
+
+Returns true if the object has been already finalized by the GC.
+[clinic start generated code]*/
+
+static PyObject *
+gc_is_finalized(PyObject *module, PyObject *obj)
+/*[clinic end generated code: output=e1516ac119a918ed input=201d0c58f69ae390]*/
+{
+ if (PyObject_IS_GC(obj) && _PyGCHead_FINALIZED(AS_GC(obj))) {
+ Py_RETURN_TRUE;
+ }
+ Py_RETURN_FALSE;
+}
+
/*[clinic input]
gc.freeze
@@ -1882,6 +1955,7 @@ PyDoc_STRVAR(gc__doc__,
"get_threshold() -- Return the current the collection thresholds.\n"
"get_objects() -- Return a list of all objects tracked by the collector.\n"
"is_tracked() -- Returns true if a given object is tracked.\n"
+"is_finalized() -- Returns true if a given object has been already finalized.\n"
"get_referrers() -- Return the list of objects that refer to an object.\n"
"get_referents() -- Return the list of objects that an object refers to.\n"
"freeze() -- Freeze all tracked objects and ignore them for future collections.\n"
@@ -1901,6 +1975,7 @@ static PyMethodDef GcMethods[] = {
GC_GET_OBJECTS_METHODDEF
GC_GET_STATS_METHODDEF
GC_IS_TRACKED_METHODDEF
+ GC_IS_FINALIZED_METHODDEF
{"get_referrers", gc_get_referrers, METH_VARARGS,
gc_get_referrers__doc__},
{"get_referents", gc_get_referents, METH_VARARGS,
@@ -2219,7 +2294,7 @@ _PyObject_GC_Resize(PyVarObject *op, Py_ssize_t nitems)
if (g == NULL)
return (PyVarObject *)PyErr_NoMemory();
op = (PyVarObject *) FROM_GC(g);
- Py_SIZE(op) = nitems;
+ Py_SET_SIZE(op, nitems);
return op;
}
@@ -2237,39 +2312,3 @@ PyObject_GC_Del(void *op)
}
PyObject_FREE(g);
}
-
-/* ------------------------------------------------------------------------
-Notes
-
-[REACHABLE OR UNREACHABLE?]
-
-It "sounds slick" to move the unreachable objects, until you think about
-it - the reason it pays isn't actually obvious.
-
-Suppose we create objects A, B, C in that order. They appear in the young
-generation in the same order. If B points to A, and C to B, and C is
-reachable from outside, then the adjusted refcounts will be 0, 0, and 1
-respectively.
-
-When move_unreachable finds A, A is moved to the unreachable list. The
-same for B when it's first encountered. Then C is traversed, B is moved
-_back_ to the reachable list. B is eventually traversed, and then A is
-moved back to the reachable list.
-
-So instead of not moving at all, the reachable objects B and A are moved
-twice each. Why is this a win? A straightforward algorithm to move the
-reachable objects instead would move A, B, and C once each.
-
-The key is that this dance leaves the objects in order C, B, A - it's
-reversed from the original order. On all _subsequent_ scans, none of
-them will move. Since most objects aren't in cycles, this can save an
-unbounded number of moves across an unbounded number of later collections.
-It can cost more only the first time the chain is scanned.
-
-Drawback: move_unreachable is also used to find out what's still trash
-after finalizers may resurrect objects. In _that_ case most unreachable
-objects will remain unreachable, so it would be more efficient to move
-the reachable objects instead. But this is a one-time cost, probably not
-worth complicating the code to speed just a little.
------------------------------------------------------------------------- */
-
diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c
index 81f969c51dd..0e2801fce50 100644
--- a/Modules/grpmodule.c
+++ b/Modules/grpmodule.c
@@ -116,7 +116,7 @@ grp_getgrgid_impl(PyObject *module, PyObject *id)
PyErr_Clear();
if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
"group id must be int, not %.200",
- id->ob_type->tp_name) < 0) {
+ Py_TYPE(id)->tp_name) < 0) {
return NULL;
}
py_int_id = PyNumber_Long(id);
diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c
index 0cb472966d1..c00c2745d3f 100644
--- a/Modules/itertoolsmodule.c
+++ b/Modules/itertoolsmodule.c
@@ -134,7 +134,7 @@ groupby_step(groupbyobject *gbo)
newkey = newvalue;
Py_INCREF(newvalue);
} else {
- newkey = _PyObject_CallOneArg(gbo->keyfunc, newvalue);
+ newkey = PyObject_CallOneArg(gbo->keyfunc, newvalue);
if (newkey == NULL) {
Py_DECREF(newvalue);
return -1;
@@ -1219,7 +1219,7 @@ dropwhile_next(dropwhileobject *lz)
if (lz->start == 1)
return item;
- good = _PyObject_CallOneArg(lz->func, item);
+ good = PyObject_CallOneArg(lz->func, item);
if (good == NULL) {
Py_DECREF(item);
return NULL;
@@ -1382,7 +1382,7 @@ takewhile_next(takewhileobject *lz)
if (item == NULL)
return NULL;
- good = _PyObject_CallOneArg(lz->func, item);
+ good = PyObject_CallOneArg(lz->func, item);
if (good == NULL) {
Py_DECREF(item);
return NULL;
@@ -3918,7 +3918,7 @@ filterfalse_next(filterfalseobject *lz)
ok = PyObject_IsTrue(item);
} else {
PyObject *good;
- good = _PyObject_CallOneArg(lz->func, item);
+ good = PyObject_CallOneArg(lz->func, item);
if (good == NULL) {
Py_DECREF(item);
return NULL;
@@ -4750,14 +4750,16 @@ PyInit_itertools(void)
NULL
};
- Py_TYPE(&teedataobject_type) = &PyType_Type;
+ Py_SET_TYPE(&teedataobject_type, &PyType_Type);
m = PyModule_Create(&itertoolsmodule);
- if (m == NULL)
+ if (m == NULL) {
return NULL;
+ }
for (i=0 ; typelist[i] != NULL ; i++) {
- if (PyType_Ready(typelist[i]) < 0)
+ if (PyType_Ready(typelist[i]) < 0) {
return NULL;
+ }
name = _PyType_Name(typelist[i]);
Py_INCREF(typelist[i]);
PyModule_AddObject(m, name, (PyObject *)typelist[i]);
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index e60e19bc490..309f2291595 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -53,6 +53,7 @@ raised for division by zero and mod by zero.
*/
#include "Python.h"
+#include "pycore_dtoa.h"
#include "_math.h"
#include "clinic/mathmodule.c.h"
@@ -1441,28 +1442,6 @@ math_fsum(PyObject *module, PyObject *seq)
#undef NUM_PARTIALS
-/* Return the smallest integer k such that n < 2**k, or 0 if n == 0.
- * Equivalent to floor(lg(x))+1. Also equivalent to: bitwidth_of_type -
- * count_leading_zero_bits(x)
- */
-
-/* XXX: This routine does more or less the same thing as
- * bits_in_digit() in Objects/longobject.c. Someday it would be nice to
- * consolidate them. On BSD, there's a library function called fls()
- * that we could use, and GCC provides __builtin_clz().
- */
-
-static unsigned long
-bit_length(unsigned long n)
-{
- unsigned long len = 0;
- while (n != 0) {
- ++len;
- n >>= 1;
- }
- return len;
-}
-
static unsigned long
count_set_bits(unsigned long n)
{
@@ -1877,7 +1856,7 @@ factorial_partial_product(unsigned long start, unsigned long stop,
/* find midpoint of range(start, stop), rounded up to next odd number. */
midpoint = (start + num_operands) | 1;
left = factorial_partial_product(start, midpoint,
- bit_length(midpoint - 2));
+ _Py_bit_length(midpoint - 2));
if (left == NULL)
goto error;
right = factorial_partial_product(midpoint, stop, max_bits);
@@ -1907,7 +1886,7 @@ factorial_odd_part(unsigned long n)
Py_INCREF(outer);
upper = 3;
- for (i = bit_length(n) - 2; i >= 0; i--) {
+ for (i = _Py_bit_length(n) - 2; i >= 0; i--) {
v = n >> i;
if (v <= 2)
continue;
@@ -1917,7 +1896,7 @@ factorial_odd_part(unsigned long n)
/* Here inner is the product of all odd integers j in the range (0,
n/2**(i+1)]. The factorial_partial_product call below gives the
product of all odd integers j in the range (n/2**(i+1), n/2**i]. */
- partial = factorial_partial_product(lower, upper, bit_length(upper-2));
+ partial = factorial_partial_product(lower, upper, _Py_bit_length(upper-2));
/* inner *= partial */
if (partial == NULL)
goto error;
@@ -3295,6 +3274,62 @@ error:
}
+/*[clinic input]
+math.nextafter
+
+ x: double
+ y: double
+ /
+
+Return the next floating-point value after x towards y.
+[clinic start generated code]*/
+
+static PyObject *
+math_nextafter_impl(PyObject *module, double x, double y)
+/*[clinic end generated code: output=750c8266c1c540ce input=02b2d50cd1d9f9b6]*/
+{
+#if defined(_AIX)
+ if (x == y) {
+ /* On AIX 7.1, libm nextafter(-0.0, +0.0) returns -0.0.
+ Bug fixed in bos.adt.libm 7.2.2.0 by APAR IV95512. */
+ return PyFloat_FromDouble(y);
+ }
+#endif
+ return PyFloat_FromDouble(nextafter(x, y));
+}
+
+
+/*[clinic input]
+math.ulp -> double
+
+ x: double
+ /
+
+Return the value of the least significant bit of the float x.
+[clinic start generated code]*/
+
+static double
+math_ulp_impl(PyObject *module, double x)
+/*[clinic end generated code: output=f5207867a9384dd4 input=31f9bfbbe373fcaa]*/
+{
+ if (Py_IS_NAN(x)) {
+ return x;
+ }
+ x = fabs(x);
+ if (Py_IS_INFINITY(x)) {
+ return x;
+ }
+ double inf = m_inf();
+ double x2 = nextafter(x, inf);
+ if (Py_IS_INFINITY(x2)) {
+ /* special case: x is the largest positive representable float */
+ x2 = nextafter(x, -inf);
+ return x - x2;
+ }
+ return x2 - x;
+}
+
+
static PyMethodDef math_methods[] = {
{"acos", math_acos, METH_O, math_acos_doc},
{"acosh", math_acosh, METH_O, math_acosh_doc},
@@ -3346,6 +3381,8 @@ static PyMethodDef math_methods[] = {
MATH_PROD_METHODDEF
MATH_PERM_METHODDEF
MATH_COMB_METHODDEF
+ MATH_NEXTAFTER_METHODDEF
+ MATH_ULP_METHODDEF
{NULL, NULL} /* sentinel */
};
diff --git a/Modules/md5module.c b/Modules/md5module.c
index f2c2d32cbe7..ea2bafb9b65 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -119,7 +119,7 @@ typedef struct {
a = (a + I(b,c,d) + M + t); a = ROLc(a, s) + b;
-static void md5_compress(struct md5_state *md5, unsigned char *buf)
+static void md5_compress(struct md5_state *md5, const unsigned char *buf)
{
MD5_INT32 i, W[16], a, b, c, d;
@@ -242,7 +242,7 @@ md5_process(struct md5_state *md5, const unsigned char *in, Py_ssize_t inlen)
while (inlen > 0) {
if (md5->curlen == 0 && inlen >= MD5_BLOCKSIZE) {
- md5_compress(md5, (unsigned char *)in);
+ md5_compress(md5, in);
md5->length += MD5_BLOCKSIZE * 8;
in += MD5_BLOCKSIZE;
inlen -= MD5_BLOCKSIZE;
@@ -572,13 +572,15 @@ PyInit__md5(void)
{
PyObject *m;
- Py_TYPE(&MD5type) = &PyType_Type;
- if (PyType_Ready(&MD5type) < 0)
+ Py_SET_TYPE(&MD5type, &PyType_Type);
+ if (PyType_Ready(&MD5type) < 0) {
return NULL;
+ }
m = PyModule_Create(&_md5module);
- if (m == NULL)
+ if (m == NULL) {
return NULL;
+ }
Py_INCREF((PyObject *)&MD5type);
PyModule_AddObject(m, "MD5Type", (PyObject *)&MD5type);
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index ef63ca936e9..f00329b3541 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -256,7 +256,7 @@ PyTypeObject PyST_Type = {
/* PyST_Type isn't subclassable, so just check ob_type */
-#define PyST_Object_Check(v) ((v)->ob_type == &PyST_Type)
+#define PyST_Object_Check(v) (Py_TYPE(v) == &PyST_Type)
static int
parser_compare_nodes(node *left, node *right)
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 322c2159812..4d6d255b346 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -821,7 +821,6 @@ dir_fd_converter(PyObject *o, void *p)
typedef struct {
PyObject *billion;
- PyObject *posix_putenv_garbage;
PyObject *DirEntryType;
PyObject *ScandirIteratorType;
#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
@@ -2105,7 +2104,6 @@ static int
_posix_clear(PyObject *module)
{
Py_CLEAR(_posixstate(module)->billion);
- Py_CLEAR(_posixstate(module)->posix_putenv_garbage);
Py_CLEAR(_posixstate(module)->DirEntryType);
Py_CLEAR(_posixstate(module)->ScandirIteratorType);
#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
@@ -2130,7 +2128,6 @@ static int
_posix_traverse(PyObject *module, visitproc visit, void *arg)
{
Py_VISIT(_posixstate(module)->billion);
- Py_VISIT(_posixstate(module)->posix_putenv_garbage);
Py_VISIT(_posixstate(module)->DirEntryType);
Py_VISIT(_posixstate(module)->ScandirIteratorType);
#if defined(HAVE_SCHED_SETPARAM) || defined(HAVE_SCHED_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDULER) || defined(POSIX_SPAWN_SETSCHEDPARAM)
@@ -2914,6 +2911,10 @@ os_chdir_impl(PyObject *module, path_t *path)
{
int result;
+ if (PySys_Audit("os.chdir", "(O)", path->object) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
#ifdef MS_WINDOWS
/* on unix, success = 0, on windows, success = !0 */
@@ -2953,6 +2954,9 @@ static PyObject *
os_fchdir_impl(PyObject *module, int fd)
/*[clinic end generated code: output=42e064ec4dc00ab0 input=18e816479a2fa985]*/
{
+ if (PySys_Audit("os.chdir", "(i)", fd) < 0) {
+ return NULL;
+ }
return posix_fildes_fd(fd, fchdir);
}
#endif /* HAVE_FCHDIR */
@@ -3010,6 +3014,11 @@ os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd,
return NULL;
#endif
+ if (PySys_Audit("os.chmod", "Oii", path->object, mode,
+ dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
+ return NULL;
+ }
+
#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
attr = GetFileAttributesW(path->wide);
@@ -3106,6 +3115,10 @@ os_fchmod_impl(PyObject *module, int fd, int mode)
int res;
int async_err = 0;
+ if (PySys_Audit("os.chmod", "iii", fd, mode, -1) < 0) {
+ return NULL;
+ }
+
do {
Py_BEGIN_ALLOW_THREADS
res = fchmod(fd, mode);
@@ -3137,6 +3150,9 @@ os_lchmod_impl(PyObject *module, path_t *path, int mode)
/*[clinic end generated code: output=082344022b51a1d5 input=90c5663c7465d24f]*/
{
int res;
+ if (PySys_Audit("os.chmod", "Oii", path->object, mode, -1) < 0) {
+ return NULL;
+ }
Py_BEGIN_ALLOW_THREADS
res = lchmod(path->narrow, mode);
Py_END_ALLOW_THREADS
@@ -3179,6 +3195,10 @@ os_chflags_impl(PyObject *module, path_t *path, unsigned long flags,
return NULL;
#endif
+ if (PySys_Audit("os.chflags", "Ok", path->object, flags) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
#ifdef HAVE_LCHFLAGS
if (!follow_symlinks)
@@ -3214,6 +3234,9 @@ os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags)
/*[clinic end generated code: output=30ae958695c07316 input=f9f82ea8b585ca9d]*/
{
int res;
+ if (PySys_Audit("os.chflags", "Ok", path->object, flags) < 0) {
+ return NULL;
+ }
Py_BEGIN_ALLOW_THREADS
res = lchflags(path->narrow, flags);
Py_END_ALLOW_THREADS
@@ -3376,6 +3399,11 @@ os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid,
}
#endif
+ if (PySys_Audit("os.chown", "OIIi", path->object, uid, gid,
+ dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
#ifdef HAVE_FCHOWN
if (path->fd != -1)
@@ -3425,6 +3453,10 @@ os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid)
int res;
int async_err = 0;
+ if (PySys_Audit("os.chown", "iIIi", fd, uid, gid, -1) < 0) {
+ return NULL;
+ }
+
do {
Py_BEGIN_ALLOW_THREADS
res = fchown(fd, uid, gid);
@@ -3457,6 +3489,9 @@ os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid)
/*[clinic end generated code: output=25eaf6af412fdf2f input=b1c6014d563a7161]*/
{
int res;
+ if (PySys_Audit("os.chown", "OIIi", path->object, uid, gid, -1) < 0) {
+ return NULL;
+ }
Py_BEGIN_ALLOW_THREADS
res = lchown(path->narrow, uid, gid);
Py_END_ALLOW_THREADS
@@ -3650,6 +3685,12 @@ os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd,
}
#endif
+ if (PySys_Audit("os.link", "OOii", src->object, dst->object,
+ src_dir_fd == DEFAULT_DIR_FD ? -1 : src_dir_fd,
+ dst_dir_fd == DEFAULT_DIR_FD ? -1 : dst_dir_fd) < 0) {
+ return NULL;
+ }
+
#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
result = CreateHardLinkW(dst->wide, src->wide, NULL);
@@ -4117,6 +4158,11 @@ os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd)
{
int result;
+ if (PySys_Audit("os.mkdir", "Oii", path->object, mode,
+ dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
+ return NULL;
+ }
+
#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
result = CreateDirectoryW(path->wide, NULL);
@@ -4262,6 +4308,12 @@ internal_rename(path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int is
}
#endif
+ if (PySys_Audit("os.rename", "OOii", src->object, dst->object,
+ src_dir_fd == DEFAULT_DIR_FD ? -1 : src_dir_fd,
+ dst_dir_fd == DEFAULT_DIR_FD ? -1 : dst_dir_fd) < 0) {
+ return NULL;
+ }
+
#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
result = MoveFileExW(src->wide, dst->wide, flags);
@@ -4362,6 +4414,11 @@ os_rmdir_impl(PyObject *module, path_t *path, int dir_fd)
{
int result;
+ if (PySys_Audit("os.rmdir", "Oi", path->object,
+ dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
#ifdef MS_WINDOWS
/* Windows, success=1, UNIX, success=0 */
@@ -4520,6 +4577,11 @@ os_unlink_impl(PyObject *module, path_t *path, int dir_fd)
{
int result;
+ if (PySys_Audit("os.remove", "Oi", path->object,
+ dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
#ifdef MS_WINDOWS
@@ -4936,6 +4998,11 @@ os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns,
}
#endif
+ if (PySys_Audit("os.utime", "OOOi", path->object, times, ns ? ns : Py_None,
+ dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
+ return NULL;
+ }
+
#ifdef MS_WINDOWS
Py_BEGIN_ALLOW_THREADS
hFile = CreateFileW(path->wide, FILE_WRITE_ATTRIBUTES, 0,
@@ -5237,6 +5304,11 @@ os_execv_impl(PyObject *module, path_t *path, PyObject *argv)
return NULL;
}
+ if (PySys_Audit("os.exec", "OOO", path->object, argv, Py_None) < 0) {
+ free_string_array(argvlist, argc);
+ return NULL;
+ }
+
_Py_BEGIN_SUPPRESS_IPH
#ifdef HAVE_WEXECV
_wexecv(path->wide, argvlist);
@@ -5280,7 +5352,7 @@ os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env)
if (!PyList_Check(argv) && !PyTuple_Check(argv)) {
PyErr_SetString(PyExc_TypeError,
"execve: argv must be a tuple or list");
- goto fail;
+ goto fail_0;
}
argc = PySequence_Size(argv);
if (argc < 1) {
@@ -5291,22 +5363,26 @@ os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env)
if (!PyMapping_Check(env)) {
PyErr_SetString(PyExc_TypeError,
"execve: environment must be a mapping object");
- goto fail;
+ goto fail_0;
}
argvlist = parse_arglist(argv, &argc);
if (argvlist == NULL) {
- goto fail;
+ goto fail_0;
}
if (!argvlist[0][0]) {
PyErr_SetString(PyExc_ValueError,
"execve: argv first element cannot be empty");
- goto fail;
+ goto fail_0;
}
envlist = parse_envlist(env, &envc);
if (envlist == NULL)
- goto fail;
+ goto fail_0;
+
+ if (PySys_Audit("os.exec", "OOO", path->object, argv, env) < 0) {
+ goto fail_1;
+ }
_Py_BEGIN_SUPPRESS_IPH
#ifdef HAVE_FEXECVE
@@ -5324,9 +5400,9 @@ os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env)
/* If we get here it's definitely an error */
posix_path_error(path);
-
+ fail_1:
free_string_array(envlist, envc);
- fail:
+ fail_0:
if (argvlist)
free_string_array(argvlist, argc);
return NULL;
@@ -5657,6 +5733,10 @@ py_posix_spawn(int use_posix_spawnp, PyObject *module, path_t *path, PyObject *a
}
attrp = &attr;
+ if (PySys_Audit("os.posix_spawn", "OOO", path->object, argv, env) < 0) {
+ goto exit;
+ }
+
_Py_BEGIN_SUPPRESS_IPH
#ifdef HAVE_POSIX_SPAWNP
if (use_posix_spawnp) {
@@ -5897,6 +5977,12 @@ os_spawnv_impl(PyObject *module, int mode, path_t *path, PyObject *argv)
mode = _P_OVERLAY;
#endif
+ if (PySys_Audit("os.spawn", "iOOO", mode, path->object, argv,
+ Py_None) < 0) {
+ free_string_array(argvlist, argc);
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
#ifdef HAVE_WSPAWNV
@@ -6006,6 +6092,10 @@ os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv,
mode = _P_OVERLAY;
#endif
+ if (PySys_Audit("os.spawn", "iOOO", mode, path->object, argv, env) < 0) {
+ goto fail_2;
+ }
+
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
#ifdef HAVE_WSPAWNV
@@ -6024,6 +6114,7 @@ os_spawnve_impl(PyObject *module, int mode, path_t *path, PyObject *argv,
else
res = Py_BuildValue(_Py_PARSE_INTPTR, spawnval);
+ fail_2:
while (--envc >= 0)
PyMem_DEL(envlist[envc]);
PyMem_DEL(envlist);
@@ -6156,6 +6247,9 @@ os_fork_impl(PyObject *module)
PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters");
return NULL;
}
+ if (PySys_Audit("os.fork", NULL) < 0) {
+ return NULL;
+ }
PyOS_BeforeFork();
pid = fork();
if (pid == 0) {
@@ -6762,6 +6856,9 @@ os_forkpty_impl(PyObject *module)
PyErr_SetString(PyExc_RuntimeError, "fork not supported for subinterpreters");
return NULL;
}
+ if (PySys_Audit("os.forkpty", NULL) < 0) {
+ return NULL;
+ }
PyOS_BeforeFork();
pid = forkpty(&master_fd, NULL, NULL, NULL);
if (pid == 0) {
@@ -7283,14 +7380,15 @@ Kill a process with a signal.
static PyObject *
os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal)
/*[clinic end generated code: output=8e346a6701c88568 input=61a36b86ca275ab9]*/
-#ifndef MS_WINDOWS
{
+ if (PySys_Audit("os.kill", "in", pid, signal) < 0) {
+ return NULL;
+ }
+#ifndef MS_WINDOWS
if (kill(pid, (int)signal) == -1)
return posix_error();
Py_RETURN_NONE;
-}
#else /* !MS_WINDOWS */
-{
PyObject *result;
DWORD sig = (DWORD)signal;
DWORD err;
@@ -7325,8 +7423,8 @@ os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal)
CloseHandle(handle);
return result;
-}
#endif /* !MS_WINDOWS */
+}
#endif /* HAVE_KILL */
@@ -7345,6 +7443,9 @@ static PyObject *
os_killpg_impl(PyObject *module, pid_t pgid, int signal)
/*[clinic end generated code: output=6dbcd2f1fdf5fdba input=38b5449eb8faec19]*/
{
+ if (PySys_Audit("os.killpg", "ii", pgid, signal) < 0) {
+ return NULL;
+ }
/* XXX some man pages make the `pgid` parameter an int, others
a pid_t. Since getpgrp() returns a pid_t, we assume killpg should
take the same type. Moreover, pid_t is always at least as wide as
@@ -8117,6 +8218,11 @@ os_symlink_impl(PyObject *module, path_t *src, path_t *dst,
int result;
#endif
+ if (PySys_Audit("os.symlink", "OOi", src->object, dst->object,
+ dir_fd == DEFAULT_DIR_FD ? -1 : dir_fd) < 0) {
+ return NULL;
+ }
+
#ifdef MS_WINDOWS
if (windows_has_symlink_unprivileged_flag) {
@@ -8719,6 +8825,10 @@ os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length)
{
int res;
+ if (PySys_Audit("os.lockf", "iiL", fd, command, length) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
res = lockf(fd, command, length);
Py_END_ALLOW_THREADS
@@ -10047,21 +10157,63 @@ os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset,
}
#endif /* HAVE_POSIX_FADVISE && !POSIX_FADVISE_AIX_BUG */
-#ifdef HAVE_PUTENV
-static void
-posix_putenv_garbage_setitem(PyObject *name, PyObject *value)
+#ifdef MS_WINDOWS
+static PyObject*
+win32_putenv(PyObject *name, PyObject *value)
{
- /* Install the first arg and newstr in posix_putenv_garbage;
- * this will cause previous value to be collected. This has to
- * happen after the real putenv() call because the old value
- * was still accessible until then. */
- if (PyDict_SetItem(_posixstate_global->posix_putenv_garbage, name, value))
- /* really not much we can do; just leak */
- PyErr_Clear();
- else
- Py_DECREF(value);
+ /* Search from index 1 because on Windows starting '=' is allowed for
+ defining hidden environment variables. */
+ if (PyUnicode_GET_LENGTH(name) == 0 ||
+ PyUnicode_FindChar(name, '=', 1, PyUnicode_GET_LENGTH(name), 1) != -1)
+ {
+ PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+ return NULL;
+ }
+ PyObject *unicode;
+ if (value != NULL) {
+ unicode = PyUnicode_FromFormat("%U=%U", name, value);
+ }
+ else {
+ unicode = PyUnicode_FromFormat("%U=", name);
+ }
+ if (unicode == NULL) {
+ return NULL;
+ }
+
+ Py_ssize_t size;
+ /* PyUnicode_AsWideCharString() rejects embedded null characters */
+ wchar_t *env = PyUnicode_AsWideCharString(unicode, &size);
+ Py_DECREF(unicode);
+
+ if (env == NULL) {
+ return NULL;
+ }
+ if (size > _MAX_ENV) {
+ PyErr_Format(PyExc_ValueError,
+ "the environment variable is longer than %u characters",
+ _MAX_ENV);
+ PyMem_Free(env);
+ return NULL;
+ }
+
+ /* _wputenv() and SetEnvironmentVariableW() update the environment in the
+ Process Environment Block (PEB). _wputenv() also updates CRT 'environ'
+ and '_wenviron' variables, whereas SetEnvironmentVariableW() does not.
+
+ Prefer _wputenv() to be compatible with C libraries using CRT
+ variables and CRT functions using these variables (ex: getenv()). */
+ int err = _wputenv(env);
+ PyMem_Free(env);
+
+ if (err) {
+ posix_error();
+ return NULL;
+ }
+
+ Py_RETURN_NONE;
}
+#endif
#ifdef MS_WINDOWS
@@ -10079,49 +10231,12 @@ static PyObject *
os_putenv_impl(PyObject *module, PyObject *name, PyObject *value)
/*[clinic end generated code: output=d29a567d6b2327d2 input=ba586581c2e6105f]*/
{
- const wchar_t *env;
- Py_ssize_t size;
-
- /* Search from index 1 because on Windows starting '=' is allowed for
- defining hidden environment variables. */
- if (PyUnicode_GET_LENGTH(name) == 0 ||
- PyUnicode_FindChar(name, '=', 1, PyUnicode_GET_LENGTH(name), 1) != -1)
- {
- PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
+ if (PySys_Audit("os.putenv", "OO", name, value) < 0) {
return NULL;
}
- PyObject *unicode = PyUnicode_FromFormat("%U=%U", name, value);
- if (unicode == NULL) {
- return NULL;
- }
-
- env = PyUnicode_AsUnicodeAndSize(unicode, &size);
- if (env == NULL)
- goto error;
- if (size > _MAX_ENV) {
- PyErr_Format(PyExc_ValueError,
- "the environment variable is longer than %u characters",
- _MAX_ENV);
- goto error;
- }
- if (wcslen(env) != (size_t)size) {
- PyErr_SetString(PyExc_ValueError, "embedded null character");
- goto error;
- }
-
- if (_wputenv(env)) {
- posix_error();
- goto error;
- }
-
- posix_putenv_garbage_setitem(name, unicode);
- Py_RETURN_NONE;
-
-error:
- Py_DECREF(unicode);
- return NULL;
+ return win32_putenv(name, value);
}
-#else /* MS_WINDOWS */
+#else
/*[clinic input]
os.putenv
@@ -10136,8 +10251,6 @@ static PyObject *
os_putenv_impl(PyObject *module, PyObject *name, PyObject *value)
/*[clinic end generated code: output=d29a567d6b2327d2 input=a97bc6152f688d31]*/
{
- PyObject *bytes = NULL;
- char *env;
const char *name_string = PyBytes_AS_STRING(name);
const char *value_string = PyBytes_AS_STRING(value);
@@ -10145,25 +10258,38 @@ os_putenv_impl(PyObject *module, PyObject *name, PyObject *value)
PyErr_SetString(PyExc_ValueError, "illegal environment variable name");
return NULL;
}
- bytes = PyBytes_FromFormat("%s=%s", name_string, value_string);
- if (bytes == NULL) {
+
+ if (PySys_Audit("os.putenv", "OO", name, value) < 0) {
return NULL;
}
- env = PyBytes_AS_STRING(bytes);
- if (putenv(env)) {
- Py_DECREF(bytes);
+ if (setenv(name_string, value_string, 1)) {
return posix_error();
}
-
- posix_putenv_garbage_setitem(name, bytes);
Py_RETURN_NONE;
}
-#endif /* MS_WINDOWS */
-#endif /* HAVE_PUTENV */
+#endif /* !defined(MS_WINDOWS) */
-#ifdef HAVE_UNSETENV
+#ifdef MS_WINDOWS
+/*[clinic input]
+os.unsetenv
+ name: unicode
+ /
+
+Delete an environment variable.
+[clinic start generated code]*/
+
+static PyObject *
+os_unsetenv_impl(PyObject *module, PyObject *name)
+/*[clinic end generated code: output=54c4137ab1834f02 input=4d6a1747cc526d2f]*/
+{
+ if (PySys_Audit("os.unsetenv", "(O)", name) < 0) {
+ return NULL;
+ }
+ return win32_putenv(name, NULL);
+}
+#else
/*[clinic input]
os.unsetenv
name: FSConverter
@@ -10176,33 +10302,21 @@ static PyObject *
os_unsetenv_impl(PyObject *module, PyObject *name)
/*[clinic end generated code: output=54c4137ab1834f02 input=2bb5288a599c7107]*/
{
-#ifndef HAVE_BROKEN_UNSETENV
- int err;
-#endif
-
+ if (PySys_Audit("os.unsetenv", "(O)", name) < 0) {
+ return NULL;
+ }
#ifdef HAVE_BROKEN_UNSETENV
unsetenv(PyBytes_AS_STRING(name));
#else
- err = unsetenv(PyBytes_AS_STRING(name));
- if (err)
+ int err = unsetenv(PyBytes_AS_STRING(name));
+ if (err) {
return posix_error();
+ }
#endif
- /* Remove the key from posix_putenv_garbage;
- * this will cause it to be collected. This has to
- * happen after the real unsetenv() call because the
- * old value was still accessible until then.
- */
- if (PyDict_DelItem(_posixstate(module)->posix_putenv_garbage, name)) {
- /* really not much we can do; just leak */
- if (!PyErr_ExceptionMatches(PyExc_KeyError)) {
- return NULL;
- }
- PyErr_Clear();
- }
Py_RETURN_NONE;
}
-#endif /* HAVE_UNSETENV */
+#endif /* !MS_WINDOWS */
/*[clinic input]
@@ -11713,6 +11827,10 @@ os_startfile_impl(PyObject *module, path_t *filepath,
"startfile not available on this platform");
}
+ if (PySys_Audit("os.startfile", "Ou", filepath->object, operation) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
rc = Py_ShellExecuteW((HWND)0, operation, filepath->wide,
NULL, NULL, SW_SHOWNORMAL);
@@ -11887,6 +12005,10 @@ os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute,
if (fd_and_follow_symlinks_invalid("getxattr", path->fd, follow_symlinks))
return NULL;
+ if (PySys_Audit("os.getxattr", "OO", path->object, attribute->object) < 0) {
+ return NULL;
+ }
+
for (i = 0; ; i++) {
void *ptr;
ssize_t result;
@@ -11958,6 +12080,11 @@ os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute,
if (fd_and_follow_symlinks_invalid("setxattr", path->fd, follow_symlinks))
return NULL;
+ if (PySys_Audit("os.setxattr", "OOy#i", path->object, attribute->object,
+ value->buf, value->len, flags) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS;
if (path->fd > -1)
result = fsetxattr(path->fd, attribute->narrow,
@@ -12006,6 +12133,10 @@ os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute,
if (fd_and_follow_symlinks_invalid("removexattr", path->fd, follow_symlinks))
return NULL;
+ if (PySys_Audit("os.removexattr", "OO", path->object, attribute->object) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS;
if (path->fd > -1)
result = fremovexattr(path->fd, attribute->narrow);
@@ -12051,6 +12182,11 @@ os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks)
if (fd_and_follow_symlinks_invalid("listxattr", path->fd, follow_symlinks))
goto exit;
+ if (PySys_Audit("os.listxattr", "(O)",
+ path->object ? path->object : Py_None) < 0) {
+ return NULL;
+ }
+
name = path->narrow ? path->narrow : ".";
for (i = 0; ; i++) {
@@ -13527,6 +13663,10 @@ os__add_dll_directory_impl(PyObject *module, path_t *path)
DLL_DIRECTORY_COOKIE cookie = 0;
DWORD err = 0;
+ if (PySys_Audit("os.add_dll_directory", "(O)", path->object) < 0) {
+ return NULL;
+ }
+
/* For Windows 7, we have to load this. As this will be a fairly
infrequent operation, just do it each time. Kernel32 is always
loaded. */
@@ -14496,12 +14636,6 @@ INITFUNC(void)
Py_INCREF(PyExc_OSError);
PyModule_AddObject(m, "error", PyExc_OSError);
-#ifdef HAVE_PUTENV
- /* Save putenv() parameters as values here, so we can collect them when they
- * get re-set with another call for the same key. */
- _posixstate(m)->posix_putenv_garbage = PyDict_New();
-#endif
-
#if defined(HAVE_WAITID) && !defined(__APPLE__)
waitid_result_desc.name = MODNAME ".waitid_result";
PyObject *WaitidResultType = (PyObject *)PyStructSequence_NewType(&waitid_result_desc);
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index 90167342fee..a7f8b5086bb 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -119,7 +119,7 @@ set_error(xmlparseobject *self, enum XML_Error code)
XML_ErrorString(code), lineno, column);
if (buffer == NULL)
return NULL;
- err = _PyObject_CallOneArg(ErrorObject, buffer);
+ err = PyObject_CallOneArg(ErrorObject, buffer);
Py_DECREF(buffer);
if ( err != NULL
&& set_error_attr(err, "code", code)
diff --git a/Modules/resource.c b/Modules/resource.c
index 87c72e74098..afde03c6c7e 100644
--- a/Modules/resource.c
+++ b/Modules/resource.c
@@ -224,6 +224,11 @@ resource_setrlimit_impl(PyObject *module, int resource, PyObject *limits)
return NULL;
}
+ if (PySys_Audit("resource.setrlimit", "iO", resource,
+ limits ? limits : Py_None) < 0) {
+ return NULL;
+ }
+
if (py2rlimit(limits, &rl) < 0) {
return NULL;
}
@@ -269,6 +274,11 @@ resource_prlimit_impl(PyObject *module, pid_t pid, int resource,
return NULL;
}
+ if (PySys_Audit("resource.prlimit", "iiO", pid, resource,
+ limits ? limits : Py_None) < 0) {
+ return NULL;
+ }
+
if (group_right_1) {
if (py2rlimit(limits, &new_limit) < 0) {
return NULL;
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 79cc1b26555..7c6d7e4a15e 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -1447,11 +1447,6 @@ pyepoll_internal_ctl(int epfd, int op, int fd, unsigned int events)
* though this argument is ignored. */
Py_BEGIN_ALLOW_THREADS
result = epoll_ctl(epfd, op, fd, &ev);
- if (errno == EBADF) {
- /* fd already closed */
- result = 0;
- errno = 0;
- }
Py_END_ALLOW_THREADS
break;
default:
diff --git a/Modules/sha1module.c b/Modules/sha1module.c
index 4d191c3c488..e066b880229 100644
--- a/Modules/sha1module.c
+++ b/Modules/sha1module.c
@@ -549,13 +549,15 @@ PyInit__sha1(void)
{
PyObject *m;
- Py_TYPE(&SHA1type) = &PyType_Type;
- if (PyType_Ready(&SHA1type) < 0)
+ Py_SET_TYPE(&SHA1type, &PyType_Type);
+ if (PyType_Ready(&SHA1type) < 0) {
return NULL;
+ }
m = PyModule_Create(&_sha1module);
- if (m == NULL)
+ if (m == NULL) {
return NULL;
+ }
Py_INCREF((PyObject *)&SHA1type);
PyModule_AddObject(m, "SHA1Type", (PyObject *)&SHA1type);
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index 245f4c04542..0e0c4461880 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -713,12 +713,14 @@ PyInit__sha256(void)
{
PyObject *m;
- Py_TYPE(&SHA224type) = &PyType_Type;
- if (PyType_Ready(&SHA224type) < 0)
+ Py_SET_TYPE(&SHA224type, &PyType_Type);
+ if (PyType_Ready(&SHA224type) < 0) {
return NULL;
- Py_TYPE(&SHA256type) = &PyType_Type;
- if (PyType_Ready(&SHA256type) < 0)
+ }
+ Py_SET_TYPE(&SHA256type, &PyType_Type);
+ if (PyType_Ready(&SHA256type) < 0) {
return NULL;
+ }
m = PyModule_Create(&_sha256module);
if (m == NULL)
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index df4f9d2d741..07bf2835188 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -478,7 +478,7 @@ SHA512Type_copy_impl(SHAobject *self)
{
SHAobject *newobj;
- if (((PyObject*)self)->ob_type == &SHA512type) {
+ if (Py_TYPE((PyObject*)self) == &SHA512type) {
if ( (newobj = newSHA512object())==NULL)
return NULL;
} else {
@@ -778,16 +778,19 @@ PyInit__sha512(void)
{
PyObject *m;
- Py_TYPE(&SHA384type) = &PyType_Type;
- if (PyType_Ready(&SHA384type) < 0)
+ Py_SET_TYPE(&SHA384type, &PyType_Type);
+ if (PyType_Ready(&SHA384type) < 0) {
return NULL;
- Py_TYPE(&SHA512type) = &PyType_Type;
- if (PyType_Ready(&SHA512type) < 0)
+ }
+ Py_SET_TYPE(&SHA512type, &PyType_Type);
+ if (PyType_Ready(&SHA512type) < 0) {
return NULL;
+ }
m = PyModule_Create(&_sha512module);
- if (m == NULL)
+ if (m == NULL) {
return NULL;
+ }
Py_INCREF((PyObject *)&SHA384type);
PyModule_AddObject(m, "SHA384Type", (PyObject *)&SHA384type);
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 693b90b6c63..a1976737462 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -1236,6 +1236,10 @@ signal_pthread_kill_impl(PyObject *module, unsigned long thread_id,
{
int err;
+ if (PySys_Audit("signal.pthread_kill", "ki", thread_id, signalnum) < 0) {
+ return NULL;
+ }
+
err = pthread_kill((pthread_t)thread_id, signalnum);
if (err != 0) {
errno = err;
diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c
index d42fa7ce182..37b312396f9 100644
--- a/Modules/socketmodule.c
+++ b/Modules/socketmodule.c
@@ -1670,7 +1670,7 @@ idna_converter(PyObject *obj, struct maybe_idna *data)
}
else {
PyErr_Format(PyExc_TypeError, "str, bytes or bytearray expected, not %s",
- obj->ob_type->tp_name);
+ Py_TYPE(obj)->tp_name);
return 0;
}
if (strlen(data->buf) != len) {
@@ -7100,7 +7100,7 @@ PyInit__socket(void)
}
#endif
- Py_TYPE(&sock_type) = &PyType_Type;
+ Py_SET_TYPE(&sock_type, &PyType_Type);
m = PyModule_Create(&socketmodule);
if (m == NULL)
return NULL;
diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c
index b2ea73baa1b..24517925c32 100644
--- a/Modules/syslogmodule.c
+++ b/Modules/syslogmodule.c
@@ -99,7 +99,7 @@ syslog_get_argv(void)
if (slash == -2)
return NULL;
if (slash != -1) {
- return PyUnicode_Substring(scriptobj, slash, scriptlen);
+ return PyUnicode_Substring(scriptobj, slash + 1, scriptlen);
} else {
Py_INCREF(scriptobj);
return(scriptobj);
@@ -144,6 +144,10 @@ syslog_openlog(PyObject * self, PyObject * args, PyObject *kwds)
return NULL;
}
+ if (PySys_Audit("syslog.openlog", "sll", ident, logopt, facility) < 0) {
+ return NULL;
+ }
+
openlog(ident, logopt, facility);
S_log_open = 1;
@@ -170,6 +174,10 @@ syslog_syslog(PyObject * self, PyObject * args)
if (message == NULL)
return NULL;
+ if (PySys_Audit("syslog.syslog", "is", priority, message) < 0) {
+ return NULL;
+ }
+
/* if log is not opened, open it now */
if (!S_log_open) {
PyObject *openargs;
@@ -194,6 +202,9 @@ syslog_syslog(PyObject * self, PyObject * args)
static PyObject *
syslog_closelog(PyObject *self, PyObject *unused)
{
+ if (PySys_Audit("syslog.closelog", NULL) < 0) {
+ return NULL;
+ }
if (S_log_open) {
closelog();
Py_CLEAR(S_ident_o);
@@ -209,6 +220,9 @@ syslog_setlogmask(PyObject *self, PyObject *args)
if (!PyArg_ParseTuple(args, "l;mask for priority", &maskpri))
return NULL;
+ if (PySys_Audit("syslog.setlogmask", "(O)", args ? args : Py_None) < 0) {
+ return NULL;
+ }
omaskpri = setlogmask(maskpri);
return PyLong_FromLong(omaskpri);
}
diff --git a/Modules/termios.c b/Modules/termios.c
index b3b8c72bf6b..0fd93c06c72 100644
--- a/Modules/termios.c
+++ b/Modules/termios.c
@@ -613,6 +613,39 @@ static struct constant {
#ifdef B460800
{"B460800", B460800},
#endif
+#ifdef B500000
+ {"B500000", B500000},
+#endif
+#ifdef B576000
+ { "B576000", B576000},
+#endif
+#ifdef B921600
+ { "B921600", B921600},
+#endif
+#ifdef B1000000
+ { "B1000000", B1000000},
+#endif
+#ifdef B1152000
+ { "B1152000", B1152000},
+#endif
+#ifdef B1500000
+ { "B1500000", B1500000},
+#endif
+#ifdef B2000000
+ { "B2000000", B2000000},
+#endif
+#ifdef B2500000
+ { "B2500000", B2500000},
+#endif
+#ifdef B3000000
+ { "B3000000", B3000000},
+#endif
+#ifdef B3500000
+ { "B3500000", B3500000},
+#endif
+#ifdef B4000000
+ { "B4000000", B4000000},
+#endif
#ifdef CBAUD
{"CBAUD", CBAUD},
#endif
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index e99d914b797..58b1bc2d0a1 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -1455,7 +1455,7 @@ PyInit_unicodedata(void)
{
PyObject *m, *v;
- Py_TYPE(&UCD_Type) = &PyType_Type;
+ Py_SET_TYPE(&UCD_Type, &PyType_Type);
m = PyModule_Create(&unicodedatamodule);
if (!m)
diff --git a/Objects/abstract.c b/Objects/abstract.c
index dc8ba10762d..f0e01f7691b 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -14,7 +14,7 @@
static PyObject *
type_error(const char *msg, PyObject *obj)
{
- PyErr_Format(PyExc_TypeError, msg, obj->ob_type->tp_name);
+ PyErr_Format(PyExc_TypeError, msg, Py_TYPE(obj)->tp_name);
return NULL;
}
@@ -38,7 +38,7 @@ PyObject_Type(PyObject *o)
return null_error();
}
- v = (PyObject *)o->ob_type;
+ v = (PyObject *)Py_TYPE(o);
Py_INCREF(v);
return v;
}
@@ -53,7 +53,7 @@ PyObject_Size(PyObject *o)
return -1;
}
- m = o->ob_type->tp_as_sequence;
+ m = Py_TYPE(o)->tp_as_sequence;
if (m && m->sq_length) {
Py_ssize_t len = m->sq_length(o);
assert(len >= 0 || PyErr_Occurred());
@@ -150,14 +150,14 @@ PyObject_GetItem(PyObject *o, PyObject *key)
return null_error();
}
- m = o->ob_type->tp_as_mapping;
+ m = Py_TYPE(o)->tp_as_mapping;
if (m && m->mp_subscript) {
PyObject *item = m->mp_subscript(o, key);
assert((item != NULL) ^ (PyErr_Occurred() != NULL));
return item;
}
- ms = o->ob_type->tp_as_sequence;
+ ms = Py_TYPE(o)->tp_as_sequence;
if (ms && ms->sq_item) {
if (PyIndex_Check(key)) {
Py_ssize_t key_value;
@@ -179,7 +179,7 @@ PyObject_GetItem(PyObject *o, PyObject *key)
return NULL;
}
if (meth) {
- result = _PyObject_CallOneArg(meth, key);
+ result = PyObject_CallOneArg(meth, key);
Py_DECREF(meth);
return result;
}
@@ -197,11 +197,11 @@ PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
null_error();
return -1;
}
- m = o->ob_type->tp_as_mapping;
+ m = Py_TYPE(o)->tp_as_mapping;
if (m && m->mp_ass_subscript)
return m->mp_ass_subscript(o, key, value);
- if (o->ob_type->tp_as_sequence) {
+ if (Py_TYPE(o)->tp_as_sequence) {
if (PyIndex_Check(key)) {
Py_ssize_t key_value;
key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
@@ -209,7 +209,7 @@ PyObject_SetItem(PyObject *o, PyObject *key, PyObject *value)
return -1;
return PySequence_SetItem(o, key_value, value);
}
- else if (o->ob_type->tp_as_sequence->sq_ass_item) {
+ else if (Py_TYPE(o)->tp_as_sequence->sq_ass_item) {
type_error("sequence index must be "
"integer, not '%.200s'", key);
return -1;
@@ -229,11 +229,11 @@ PyObject_DelItem(PyObject *o, PyObject *key)
null_error();
return -1;
}
- m = o->ob_type->tp_as_mapping;
+ m = Py_TYPE(o)->tp_as_mapping;
if (m && m->mp_ass_subscript)
return m->mp_ass_subscript(o, key, (PyObject*)NULL);
- if (o->ob_type->tp_as_sequence) {
+ if (Py_TYPE(o)->tp_as_sequence) {
if (PyIndex_Check(key)) {
Py_ssize_t key_value;
key_value = PyNumber_AsSsize_t(key, PyExc_IndexError);
@@ -241,7 +241,7 @@ PyObject_DelItem(PyObject *o, PyObject *key)
return -1;
return PySequence_DelItem(o, key_value);
}
- else if (o->ob_type->tp_as_sequence->sq_ass_item) {
+ else if (Py_TYPE(o)->tp_as_sequence->sq_ass_item) {
type_error("sequence index must be "
"integer, not '%.200s'", key);
return -1;
@@ -276,7 +276,7 @@ PyObject_DelItemString(PyObject *o, const char *key)
int
PyObject_CheckReadBuffer(PyObject *obj)
{
- PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
+ PyBufferProcs *pb = Py_TYPE(obj)->tp_as_buffer;
Py_buffer view;
if (pb == NULL ||
@@ -334,7 +334,7 @@ int PyObject_AsWriteBuffer(PyObject *obj,
null_error();
return -1;
}
- pb = obj->ob_type->tp_as_buffer;
+ pb = Py_TYPE(obj)->tp_as_buffer;
if (pb == NULL ||
pb->bf_getbuffer == NULL ||
((*pb->bf_getbuffer)(obj, &view, PyBUF_WRITABLE) != 0)) {
@@ -354,7 +354,7 @@ int PyObject_AsWriteBuffer(PyObject *obj,
int
PyObject_GetBuffer(PyObject *obj, Py_buffer *view, int flags)
{
- PyBufferProcs *pb = obj->ob_type->tp_as_buffer;
+ PyBufferProcs *pb = Py_TYPE(obj)->tp_as_buffer;
if (pb == NULL || pb->bf_getbuffer == NULL) {
PyErr_Format(PyExc_TypeError,
@@ -780,7 +780,7 @@ PyObject_Format(PyObject *obj, PyObject *format_spec)
}
/* And call it. */
- result = _PyObject_CallOneArg(meth, format_spec);
+ result = PyObject_CallOneArg(meth, format_spec);
Py_DECREF(meth);
if (result && !PyUnicode_Check(result)) {
@@ -801,10 +801,10 @@ done:
int
PyNumber_Check(PyObject *o)
{
- return o && o->ob_type->tp_as_number &&
- (o->ob_type->tp_as_number->nb_index ||
- o->ob_type->tp_as_number->nb_int ||
- o->ob_type->tp_as_number->nb_float);
+ return o && Py_TYPE(o)->tp_as_number &&
+ (Py_TYPE(o)->tp_as_number->nb_index ||
+ Py_TYPE(o)->tp_as_number->nb_int ||
+ Py_TYPE(o)->tp_as_number->nb_float);
}
/* Binary operators */
@@ -821,8 +821,8 @@ PyNumber_Check(PyObject *o)
Order operations are tried until either a valid result or error:
w.op(v,w)[*], v.op(v,w), w.op(v,w)
- [*] only when v->ob_type != w->ob_type && w->ob_type is a subclass of
- v->ob_type
+ [*] only when Py_TYPE(v) != Py_TYPE(w) && Py_TYPE(w) is a subclass of
+ Py_TYPE(v)
*/
static PyObject *
@@ -832,16 +832,16 @@ binary_op1(PyObject *v, PyObject *w, const int op_slot)
binaryfunc slotv = NULL;
binaryfunc slotw = NULL;
- if (v->ob_type->tp_as_number != NULL)
- slotv = NB_BINOP(v->ob_type->tp_as_number, op_slot);
- if (w->ob_type != v->ob_type &&
- w->ob_type->tp_as_number != NULL) {
- slotw = NB_BINOP(w->ob_type->tp_as_number, op_slot);
+ if (Py_TYPE(v)->tp_as_number != NULL)
+ slotv = NB_BINOP(Py_TYPE(v)->tp_as_number, op_slot);
+ if (Py_TYPE(w) != Py_TYPE(v) &&
+ Py_TYPE(w)->tp_as_number != NULL) {
+ slotw = NB_BINOP(Py_TYPE(w)->tp_as_number, op_slot);
if (slotw == slotv)
slotw = NULL;
}
if (slotv) {
- if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
+ if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
x = slotw(v, w);
if (x != Py_NotImplemented)
return x;
@@ -869,8 +869,8 @@ binop_type_error(PyObject *v, PyObject *w, const char *op_name)
"unsupported operand type(s) for %.100s: "
"'%.100s' and '%.100s'",
op_name,
- v->ob_type->tp_name,
- w->ob_type->tp_name);
+ Py_TYPE(v)->tp_name,
+ Py_TYPE(w)->tp_name);
return NULL;
}
@@ -890,8 +890,8 @@ binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
"'%.100s' and '%.100s'. Did you mean \"print(, "
"file=)\"?",
op_name,
- v->ob_type->tp_name,
- w->ob_type->tp_name);
+ Py_TYPE(v)->tp_name,
+ Py_TYPE(w)->tp_name);
return NULL;
}
@@ -921,18 +921,18 @@ ternary_op(PyObject *v,
ternaryfunc slotw = NULL;
ternaryfunc slotz = NULL;
- mv = v->ob_type->tp_as_number;
- mw = w->ob_type->tp_as_number;
+ mv = Py_TYPE(v)->tp_as_number;
+ mw = Py_TYPE(w)->tp_as_number;
if (mv != NULL)
slotv = NB_TERNOP(mv, op_slot);
- if (w->ob_type != v->ob_type &&
+ if (Py_TYPE(w) != Py_TYPE(v) &&
mw != NULL) {
slotw = NB_TERNOP(mw, op_slot);
if (slotw == slotv)
slotw = NULL;
}
if (slotv) {
- if (slotw && PyType_IsSubtype(w->ob_type, v->ob_type)) {
+ if (slotw && PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v))) {
x = slotw(v, w, z);
if (x != Py_NotImplemented)
return x;
@@ -950,7 +950,7 @@ ternary_op(PyObject *v,
return x;
Py_DECREF(x); /* can't do it */
}
- mz = z->ob_type->tp_as_number;
+ mz = Py_TYPE(z)->tp_as_number;
if (mz != NULL) {
slotz = NB_TERNOP(mz, op_slot);
if (slotz == slotv || slotz == slotw)
@@ -968,16 +968,16 @@ ternary_op(PyObject *v,
PyExc_TypeError,
"unsupported operand type(s) for ** or pow(): "
"'%.100s' and '%.100s'",
- v->ob_type->tp_name,
- w->ob_type->tp_name);
+ Py_TYPE(v)->tp_name,
+ Py_TYPE(w)->tp_name);
else
PyErr_Format(
PyExc_TypeError,
"unsupported operand type(s) for pow(): "
"'%.100s', '%.100s', '%.100s'",
- v->ob_type->tp_name,
- w->ob_type->tp_name,
- z->ob_type->tp_name);
+ Py_TYPE(v)->tp_name,
+ Py_TYPE(w)->tp_name,
+ Py_TYPE(z)->tp_name);
return NULL;
}
@@ -1000,7 +1000,7 @@ PyNumber_Add(PyObject *v, PyObject *w)
{
PyObject *result = binary_op1(v, w, NB_SLOT(nb_add));
if (result == Py_NotImplemented) {
- PySequenceMethods *m = v->ob_type->tp_as_sequence;
+ PySequenceMethods *m = Py_TYPE(v)->tp_as_sequence;
Py_DECREF(result);
if (m && m->sq_concat) {
return (*m->sq_concat)(v, w);
@@ -1031,8 +1031,8 @@ PyNumber_Multiply(PyObject *v, PyObject *w)
{
PyObject *result = binary_op1(v, w, NB_SLOT(nb_multiply));
if (result == Py_NotImplemented) {
- PySequenceMethods *mv = v->ob_type->tp_as_sequence;
- PySequenceMethods *mw = w->ob_type->tp_as_sequence;
+ PySequenceMethods *mv = Py_TYPE(v)->tp_as_sequence;
+ PySequenceMethods *mw = Py_TYPE(w)->tp_as_sequence;
Py_DECREF(result);
if (mv && mv->sq_repeat) {
return sequence_repeat(mv->sq_repeat, v, w);
@@ -1094,7 +1094,7 @@ PyNumber_Power(PyObject *v, PyObject *w, PyObject *z)
static PyObject *
binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot)
{
- PyNumberMethods *mv = v->ob_type->tp_as_number;
+ PyNumberMethods *mv = Py_TYPE(v)->tp_as_number;
if (mv != NULL) {
binaryfunc slot = NB_BINOP(mv, iop_slot);
if (slot) {
@@ -1154,7 +1154,7 @@ PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
PyObject *result = binary_iop1(v, w, NB_SLOT(nb_inplace_add),
NB_SLOT(nb_add));
if (result == Py_NotImplemented) {
- PySequenceMethods *m = v->ob_type->tp_as_sequence;
+ PySequenceMethods *m = Py_TYPE(v)->tp_as_sequence;
Py_DECREF(result);
if (m != NULL) {
binaryfunc f = NULL;
@@ -1176,8 +1176,8 @@ PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
NB_SLOT(nb_multiply));
if (result == Py_NotImplemented) {
ssizeargfunc f = NULL;
- PySequenceMethods *mv = v->ob_type->tp_as_sequence;
- PySequenceMethods *mw = w->ob_type->tp_as_sequence;
+ PySequenceMethods *mv = Py_TYPE(v)->tp_as_sequence;
+ PySequenceMethods *mw = Py_TYPE(w)->tp_as_sequence;
Py_DECREF(result);
if (mv != NULL) {
f = mv->sq_inplace_repeat;
@@ -1215,8 +1215,8 @@ PyNumber_InPlaceRemainder(PyObject *v, PyObject *w)
PyObject *
PyNumber_InPlacePower(PyObject *v, PyObject *w, PyObject *z)
{
- if (v->ob_type->tp_as_number &&
- v->ob_type->tp_as_number->nb_inplace_power != NULL) {
+ if (Py_TYPE(v)->tp_as_number &&
+ Py_TYPE(v)->tp_as_number->nb_inplace_power != NULL) {
return ternary_op(v, w, z, NB_SLOT(nb_inplace_power), "**=");
}
else {
@@ -1236,7 +1236,7 @@ PyNumber_Negative(PyObject *o)
return null_error();
}
- m = o->ob_type->tp_as_number;
+ m = Py_TYPE(o)->tp_as_number;
if (m && m->nb_negative)
return (*m->nb_negative)(o);
@@ -1252,7 +1252,7 @@ PyNumber_Positive(PyObject *o)
return null_error();
}
- m = o->ob_type->tp_as_number;
+ m = Py_TYPE(o)->tp_as_number;
if (m && m->nb_positive)
return (*m->nb_positive)(o);
@@ -1268,7 +1268,7 @@ PyNumber_Invert(PyObject *o)
return null_error();
}
- m = o->ob_type->tp_as_number;
+ m = Py_TYPE(o)->tp_as_number;
if (m && m->nb_invert)
return (*m->nb_invert)(o);
@@ -1284,7 +1284,7 @@ PyNumber_Absolute(PyObject *o)
return null_error();
}
- m = o->ob_type->tp_as_number;
+ m = Py_TYPE(o)->tp_as_number;
if (m && m->nb_absolute)
return m->nb_absolute(o);
@@ -1296,8 +1296,8 @@ PyNumber_Absolute(PyObject *o)
int
PyIndex_Check(PyObject *obj)
{
- return obj->ob_type->tp_as_number != NULL &&
- obj->ob_type->tp_as_number->nb_index != NULL;
+ return Py_TYPE(obj)->tp_as_number != NULL &&
+ Py_TYPE(obj)->tp_as_number->nb_index != NULL;
}
/* Return a Python int from the object item.
@@ -1319,16 +1319,16 @@ PyNumber_Index(PyObject *item)
if (!PyIndex_Check(item)) {
PyErr_Format(PyExc_TypeError,
"'%.200s' object cannot be interpreted "
- "as an integer", item->ob_type->tp_name);
+ "as an integer", Py_TYPE(item)->tp_name);
return NULL;
}
- result = item->ob_type->tp_as_number->nb_index(item);
+ result = Py_TYPE(item)->tp_as_number->nb_index(item);
if (!result || PyLong_CheckExact(result))
return result;
if (!PyLong_Check(result)) {
PyErr_Format(PyExc_TypeError,
"__index__ returned non-int (type %.200s)",
- result->ob_type->tp_name);
+ Py_TYPE(result)->tp_name);
Py_DECREF(result);
return NULL;
}
@@ -1337,7 +1337,7 @@ PyNumber_Index(PyObject *item)
"__index__ returned non-int (type %.200s). "
"The ability to return an instance of a strict subclass of int "
"is deprecated, and may be removed in a future version of Python.",
- result->ob_type->tp_name)) {
+ Py_TYPE(result)->tp_name)) {
Py_DECREF(result);
return NULL;
}
@@ -1382,7 +1382,7 @@ PyNumber_AsSsize_t(PyObject *item, PyObject *err)
/* Otherwise replace the error with caller's error object. */
PyErr_Format(err,
"cannot fit '%.200s' into an index-sized integer",
- item->ob_type->tp_name);
+ Py_TYPE(item)->tp_name);
}
finish:
@@ -1408,7 +1408,7 @@ PyNumber_Long(PyObject *o)
Py_INCREF(o);
return o;
}
- m = o->ob_type->tp_as_number;
+ m = Py_TYPE(o)->tp_as_number;
if (m && m->nb_int) { /* This should include subclasses of int */
result = _PyLong_FromNbInt(o);
if (result != NULL && !PyLong_CheckExact(result)) {
@@ -1436,12 +1436,12 @@ PyNumber_Long(PyObject *o)
}
/* __trunc__ is specified to return an Integral type,
but int() needs to return an int. */
- m = result->ob_type->tp_as_number;
+ m = Py_TYPE(result)->tp_as_number;
if (m == NULL || (m->nb_index == NULL && m->nb_int == NULL)) {
PyErr_Format(
PyExc_TypeError,
"__trunc__ returned non-Integral (type %.200s)",
- result->ob_type->tp_name);
+ Py_TYPE(result)->tp_name);
Py_DECREF(result);
return NULL;
}
@@ -1503,7 +1503,7 @@ PyNumber_Float(PyObject *o)
Py_INCREF(o);
return o;
}
- m = o->ob_type->tp_as_number;
+ m = Py_TYPE(o)->tp_as_number;
if (m && m->nb_float) { /* This should include subclasses of float */
PyObject *res = m->nb_float(o);
double val;
@@ -1513,7 +1513,7 @@ PyNumber_Float(PyObject *o)
if (!PyFloat_Check(res)) {
PyErr_Format(PyExc_TypeError,
"%.50s.__float__ returned non-float (type %.50s)",
- o->ob_type->tp_name, res->ob_type->tp_name);
+ Py_TYPE(o)->tp_name, Py_TYPE(res)->tp_name);
Py_DECREF(res);
return NULL;
}
@@ -1522,7 +1522,7 @@ PyNumber_Float(PyObject *o)
"%.50s.__float__ returned non-float (type %.50s). "
"The ability to return an instance of a strict subclass of float "
"is deprecated, and may be removed in a future version of Python.",
- o->ob_type->tp_name, res->ob_type->tp_name)) {
+ Py_TYPE(o)->tp_name, Py_TYPE(res)->tp_name)) {
Py_DECREF(res);
return NULL;
}
@@ -1576,8 +1576,8 @@ PySequence_Check(PyObject *s)
{
if (PyDict_Check(s))
return 0;
- return s->ob_type->tp_as_sequence &&
- s->ob_type->tp_as_sequence->sq_item != NULL;
+ return Py_TYPE(s)->tp_as_sequence &&
+ Py_TYPE(s)->tp_as_sequence->sq_item != NULL;
}
Py_ssize_t
@@ -1590,14 +1590,14 @@ PySequence_Size(PyObject *s)
return -1;
}
- m = s->ob_type->tp_as_sequence;
+ m = Py_TYPE(s)->tp_as_sequence;
if (m && m->sq_length) {
Py_ssize_t len = m->sq_length(s);
assert(len >= 0 || PyErr_Occurred());
return len;
}
- if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_length) {
+ if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_length) {
type_error("%.200s is not a sequence", s);
return -1;
}
@@ -1622,7 +1622,7 @@ PySequence_Concat(PyObject *s, PyObject *o)
return null_error();
}
- m = s->ob_type->tp_as_sequence;
+ m = Py_TYPE(s)->tp_as_sequence;
if (m && m->sq_concat)
return m->sq_concat(s, o);
@@ -1647,7 +1647,7 @@ PySequence_Repeat(PyObject *o, Py_ssize_t count)
return null_error();
}
- m = o->ob_type->tp_as_sequence;
+ m = Py_TYPE(o)->tp_as_sequence;
if (m && m->sq_repeat)
return m->sq_repeat(o, count);
@@ -1677,7 +1677,7 @@ PySequence_InPlaceConcat(PyObject *s, PyObject *o)
return null_error();
}
- m = s->ob_type->tp_as_sequence;
+ m = Py_TYPE(s)->tp_as_sequence;
if (m && m->sq_inplace_concat)
return m->sq_inplace_concat(s, o);
if (m && m->sq_concat)
@@ -1702,7 +1702,7 @@ PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
return null_error();
}
- m = o->ob_type->tp_as_sequence;
+ m = Py_TYPE(o)->tp_as_sequence;
if (m && m->sq_inplace_repeat)
return m->sq_inplace_repeat(o, count);
if (m && m->sq_repeat)
@@ -1732,7 +1732,7 @@ PySequence_GetItem(PyObject *s, Py_ssize_t i)
return null_error();
}
- m = s->ob_type->tp_as_sequence;
+ m = Py_TYPE(s)->tp_as_sequence;
if (m && m->sq_item) {
if (i < 0) {
if (m->sq_length) {
@@ -1747,7 +1747,7 @@ PySequence_GetItem(PyObject *s, Py_ssize_t i)
return m->sq_item(s, i);
}
- if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_subscript) {
+ if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_subscript) {
return type_error("%.200s is not a sequence", s);
}
return type_error("'%.200s' object does not support indexing", s);
@@ -1762,7 +1762,7 @@ PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
return null_error();
}
- mp = s->ob_type->tp_as_mapping;
+ mp = Py_TYPE(s)->tp_as_mapping;
if (mp && mp->mp_subscript) {
PyObject *res;
PyObject *slice = _PySlice_FromIndices(i1, i2);
@@ -1786,7 +1786,7 @@ PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
return -1;
}
- m = s->ob_type->tp_as_sequence;
+ m = Py_TYPE(s)->tp_as_sequence;
if (m && m->sq_ass_item) {
if (i < 0) {
if (m->sq_length) {
@@ -1801,7 +1801,7 @@ PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o)
return m->sq_ass_item(s, i, o);
}
- if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_ass_subscript) {
+ if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_ass_subscript) {
type_error("%.200s is not a sequence", s);
return -1;
}
@@ -1819,7 +1819,7 @@ PySequence_DelItem(PyObject *s, Py_ssize_t i)
return -1;
}
- m = s->ob_type->tp_as_sequence;
+ m = Py_TYPE(s)->tp_as_sequence;
if (m && m->sq_ass_item) {
if (i < 0) {
if (m->sq_length) {
@@ -1834,7 +1834,7 @@ PySequence_DelItem(PyObject *s, Py_ssize_t i)
return m->sq_ass_item(s, i, (PyObject *)NULL);
}
- if (s->ob_type->tp_as_mapping && s->ob_type->tp_as_mapping->mp_ass_subscript) {
+ if (Py_TYPE(s)->tp_as_mapping && Py_TYPE(s)->tp_as_mapping->mp_ass_subscript) {
type_error("%.200s is not a sequence", s);
return -1;
}
@@ -1852,7 +1852,7 @@ PySequence_SetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2, PyObject *o)
return -1;
}
- mp = s->ob_type->tp_as_mapping;
+ mp = Py_TYPE(s)->tp_as_mapping;
if (mp && mp->mp_ass_subscript) {
int res;
PyObject *slice = _PySlice_FromIndices(i1, i2);
@@ -1877,7 +1877,7 @@ PySequence_DelSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2)
return -1;
}
- mp = s->ob_type->tp_as_mapping;
+ mp = Py_TYPE(s)->tp_as_mapping;
if (mp && mp->mp_ass_subscript) {
int res;
PyObject *slice = _PySlice_FromIndices(i1, i2);
@@ -2127,7 +2127,7 @@ int
PySequence_Contains(PyObject *seq, PyObject *ob)
{
Py_ssize_t result;
- PySequenceMethods *sqm = seq->ob_type->tp_as_sequence;
+ PySequenceMethods *sqm = Py_TYPE(seq)->tp_as_sequence;
if (sqm != NULL && sqm->sq_contains != NULL)
return (*sqm->sq_contains)(seq, ob);
result = _PySequence_IterSearch(seq, ob, PY_ITERSEARCH_CONTAINS);
@@ -2153,8 +2153,8 @@ PySequence_Index(PyObject *s, PyObject *o)
int
PyMapping_Check(PyObject *o)
{
- return o && o->ob_type->tp_as_mapping &&
- o->ob_type->tp_as_mapping->mp_subscript;
+ return o && Py_TYPE(o)->tp_as_mapping &&
+ Py_TYPE(o)->tp_as_mapping->mp_subscript;
}
Py_ssize_t
@@ -2167,14 +2167,14 @@ PyMapping_Size(PyObject *o)
return -1;
}
- m = o->ob_type->tp_as_mapping;
+ m = Py_TYPE(o)->tp_as_mapping;
if (m && m->mp_length) {
Py_ssize_t len = m->mp_length(o);
assert(len >= 0 || PyErr_Occurred());
return len;
}
- if (o->ob_type->tp_as_sequence && o->ob_type->tp_as_sequence->sq_length) {
+ if (Py_TYPE(o)->tp_as_sequence && Py_TYPE(o)->tp_as_sequence->sq_length) {
type_error("%.200s is not a mapping", o);
return -1;
}
@@ -2423,7 +2423,7 @@ check_class(PyObject *cls, const char *error)
}
static int
-recursive_isinstance(PyObject *inst, PyObject *cls)
+object_isinstance(PyObject *inst, PyObject *cls)
{
PyObject *icls;
int retval;
@@ -2434,7 +2434,7 @@ recursive_isinstance(PyObject *inst, PyObject *cls)
if (retval == 0) {
retval = _PyObject_LookupAttrId(inst, &PyId___class__, &icls);
if (icls != NULL) {
- if (icls != (PyObject *)(inst->ob_type) && PyType_Check(icls)) {
+ if (icls != (PyObject *)(Py_TYPE(inst)) && PyType_Check(icls)) {
retval = PyType_IsSubtype(
(PyTypeObject *)icls,
(PyTypeObject *)cls);
@@ -2461,21 +2461,23 @@ recursive_isinstance(PyObject *inst, PyObject *cls)
}
static int
-object_isinstance(PyThreadState *tstate, PyObject *inst, PyObject *cls)
+object_recursive_isinstance(PyThreadState *tstate, PyObject *inst, PyObject *cls)
{
_Py_IDENTIFIER(__instancecheck__);
- PyObject *checker;
/* Quick test for an exact match */
- if (Py_TYPE(inst) == (PyTypeObject *)cls)
+ if (Py_TYPE(inst) == (PyTypeObject *)cls) {
return 1;
+ }
/* We know what type's __instancecheck__ does. */
if (PyType_CheckExact(cls)) {
- return recursive_isinstance(inst, cls);
+ return object_isinstance(inst, cls);
}
if (PyTuple_Check(cls)) {
+ /* Not a general sequence -- that opens up the road to
+ recursion and stack overflow. */
if (_Py_EnterRecursiveCall(tstate, " in __instancecheck__")) {
return -1;
}
@@ -2483,37 +2485,41 @@ object_isinstance(PyThreadState *tstate, PyObject *inst, PyObject *cls)
int r = 0;
for (Py_ssize_t i = 0; i < n; ++i) {
PyObject *item = PyTuple_GET_ITEM(cls, i);
- r = object_isinstance(tstate, inst, item);
- if (r != 0)
+ r = object_recursive_isinstance(tstate, inst, item);
+ if (r != 0) {
/* either found it, or got an error */
break;
+ }
}
_Py_LeaveRecursiveCall(tstate);
return r;
}
- checker = _PyObject_LookupSpecial(cls, &PyId___instancecheck__);
+ PyObject *checker = _PyObject_LookupSpecial(cls, &PyId___instancecheck__);
if (checker != NULL) {
- int ok = -1;
if (_Py_EnterRecursiveCall(tstate, " in __instancecheck__")) {
Py_DECREF(checker);
- return ok;
+ return -1;
}
- PyObject *res = _PyObject_CallOneArg(checker, inst);
+
+ PyObject *res = PyObject_CallOneArg(checker, inst);
_Py_LeaveRecursiveCall(tstate);
Py_DECREF(checker);
- if (res != NULL) {
- ok = PyObject_IsTrue(res);
- Py_DECREF(res);
+
+ if (res == NULL) {
+ return -1;
}
+ int ok = PyObject_IsTrue(res);
+ Py_DECREF(res);
+
return ok;
}
else if (_PyErr_Occurred(tstate)) {
return -1;
}
- /* Probably never reached anymore. */
- return recursive_isinstance(inst, cls);
+ /* cls has no __instancecheck__() method */
+ return object_isinstance(inst, cls);
}
@@ -2521,7 +2527,7 @@ int
PyObject_IsInstance(PyObject *inst, PyObject *cls)
{
PyThreadState *tstate = _PyThreadState_GET();
- return object_isinstance(tstate, inst, cls);
+ return object_recursive_isinstance(tstate, inst, cls);
}
@@ -2582,7 +2588,7 @@ object_issubclass(PyThreadState *tstate, PyObject *derived, PyObject *cls)
Py_DECREF(checker);
return ok;
}
- PyObject *res = _PyObject_CallOneArg(checker, derived);
+ PyObject *res = PyObject_CallOneArg(checker, derived);
_Py_LeaveRecursiveCall(tstate);
Py_DECREF(checker);
if (res != NULL) {
@@ -2611,7 +2617,7 @@ PyObject_IsSubclass(PyObject *derived, PyObject *cls)
int
_PyObject_RealIsInstance(PyObject *inst, PyObject *cls)
{
- return recursive_isinstance(inst, cls);
+ return object_isinstance(inst, cls);
}
int
@@ -2624,7 +2630,7 @@ _PyObject_RealIsSubclass(PyObject *derived, PyObject *cls)
PyObject *
PyObject_GetIter(PyObject *o)
{
- PyTypeObject *t = o->ob_type;
+ PyTypeObject *t = Py_TYPE(o);
getiterfunc f;
f = t->tp_iter;
@@ -2639,7 +2645,7 @@ PyObject_GetIter(PyObject *o)
PyErr_Format(PyExc_TypeError,
"iter() returned non-iterator "
"of type '%.100s'",
- res->ob_type->tp_name);
+ Py_TYPE(res)->tp_name);
Py_DECREF(res);
res = NULL;
}
@@ -2651,8 +2657,8 @@ PyObject_GetIter(PyObject *o)
int PyIter_Check(PyObject *obj)
{
- return obj->ob_type->tp_iternext != NULL &&
- obj->ob_type->tp_iternext != &_PyObject_NextNotImplemented;
+ return Py_TYPE(obj)->tp_iternext != NULL &&
+ Py_TYPE(obj)->tp_iternext != &_PyObject_NextNotImplemented;
}
/* Return next item.
@@ -2666,7 +2672,7 @@ PyObject *
PyIter_Next(PyObject *iter)
{
PyObject *result;
- result = (*iter->ob_type->tp_iternext)(iter);
+ result = (*Py_TYPE(iter)->tp_iternext)(iter);
if (result == NULL &&
PyErr_Occurred() &&
PyErr_ExceptionMatches(PyExc_StopIteration))
diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c
index c9bf11bba1d..d3964358bc5 100644
--- a/Objects/bytearrayobject.c
+++ b/Objects/bytearrayobject.c
@@ -2,11 +2,11 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#include "pycore_bytes_methods.h"
#include "pycore_object.h"
#include "pycore_pymem.h"
#include "pycore_pystate.h"
#include "structmember.h"
-#include "bytes_methods.h"
#include "bytesobject.h"
#include "pystrhex.h"
@@ -89,7 +89,7 @@ _canresize(PyByteArrayObject *self)
PyObject *
PyByteArray_FromObject(PyObject *input)
{
- return _PyObject_CallOneArg((PyObject *)&PyByteArray_Type, input);
+ return PyObject_CallOneArg((PyObject *)&PyByteArray_Type, input);
}
static PyObject *
@@ -148,7 +148,7 @@ PyByteArray_FromStringAndSize(const char *bytes, Py_ssize_t size)
memcpy(new->ob_bytes, bytes, size);
new->ob_bytes[size] = '\0'; /* Trailing null byte */
}
- Py_SIZE(new) = size;
+ Py_SET_SIZE(new, size);
new->ob_alloc = alloc;
new->ob_start = new->ob_bytes;
new->ob_exports = 0;
@@ -206,7 +206,7 @@ PyByteArray_Resize(PyObject *self, Py_ssize_t requested_size)
}
else {
/* Minor downsize; quick exit */
- Py_SIZE(self) = size;
+ Py_SET_SIZE(self, size);
PyByteArray_AS_STRING(self)[size] = '\0'; /* Trailing null */
return 0;
}
@@ -246,7 +246,7 @@ PyByteArray_Resize(PyObject *self, Py_ssize_t requested_size)
}
obj->ob_bytes = obj->ob_start = sval;
- Py_SIZE(self) = size;
+ Py_SET_SIZE(self, size);
obj->ob_alloc = alloc;
obj->ob_bytes[size] = '\0'; /* Trailing null byte */
@@ -498,7 +498,7 @@ bytearray_setslice_linear(PyByteArrayObject *self,
}
/* memmove() removed bytes, the bytearray object cannot be
restored in its previous state. */
- Py_SIZE(self) += growth;
+ Py_SET_SIZE(self, Py_SIZE(self) + growth);
res = -1;
}
buf = PyByteArray_AS_STRING(self);
@@ -856,7 +856,7 @@ bytearray_init(PyByteArrayObject *self, PyObject *args, PyObject *kwds)
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
PyErr_Format(PyExc_TypeError,
"cannot convert '%.200s' object to bytearray",
- arg->ob_type->tp_name);
+ Py_TYPE(arg)->tp_name);
}
return -1;
}
@@ -886,7 +886,7 @@ bytearray_init(PyByteArrayObject *self, PyObject *args, PyObject *kwds)
/* Append the byte */
if (Py_SIZE(self) + 1 < self->ob_alloc) {
- Py_SIZE(self)++;
+ Py_SET_SIZE(self, Py_SIZE(self) + 1);
PyByteArray_AS_STRING(self)[Py_SIZE(self)] = '\0';
}
else if (PyByteArray_Resize((PyObject *)self, Py_SIZE(self)+1) < 0)
@@ -1630,7 +1630,7 @@ bytearray_extend(PyByteArrayObject *self, PyObject *iterable_of_ints)
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
PyErr_Format(PyExc_TypeError,
"can't extend bytearray with %.100s",
- iterable_of_ints->ob_type->tp_name);
+ Py_TYPE(iterable_of_ints)->tp_name);
}
return NULL;
}
@@ -2015,7 +2015,7 @@ bytearray_fromhex_impl(PyTypeObject *type, PyObject *string)
{
PyObject *result = _PyBytes_FromHex(string, type == &PyByteArray_Type);
if (type != &PyByteArray_Type && result != NULL) {
- Py_SETREF(result, _PyObject_CallOneArg((PyObject *)type, result));
+ Py_SETREF(result, PyObject_CallOneArg((PyObject *)type, result));
}
return result;
}
diff --git a/Objects/bytes_methods.c b/Objects/bytes_methods.c
index 7d131842059..a4b3868e725 100644
--- a/Objects/bytes_methods.c
+++ b/Objects/bytes_methods.c
@@ -1,6 +1,6 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
-#include "bytes_methods.h"
+#include "pycore_bytes_methods.h"
PyDoc_STRVAR_shared(_Py_isspace__doc__,
"B.isspace() -> bool\n\
@@ -12,7 +12,7 @@ PyObject*
_Py_bytes_isspace(const char *cptr, Py_ssize_t len)
{
const unsigned char *p
- = (unsigned char *) cptr;
+ = (const unsigned char *) cptr;
const unsigned char *e;
/* Shortcut for single character strings */
@@ -42,7 +42,7 @@ PyObject*
_Py_bytes_isalpha(const char *cptr, Py_ssize_t len)
{
const unsigned char *p
- = (unsigned char *) cptr;
+ = (const unsigned char *) cptr;
const unsigned char *e;
/* Shortcut for single character strings */
@@ -72,7 +72,7 @@ PyObject*
_Py_bytes_isalnum(const char *cptr, Py_ssize_t len)
{
const unsigned char *p
- = (unsigned char *) cptr;
+ = (const unsigned char *) cptr;
const unsigned char *e;
/* Shortcut for single character strings */
@@ -123,7 +123,7 @@ _Py_bytes_isascii(const char *cptr, Py_ssize_t len)
/* Help allocation */
const char *_p = p;
while (_p < aligned_end) {
- unsigned long value = *(unsigned long *) _p;
+ unsigned long value = *(const unsigned long *) _p;
if (value & ASCII_CHAR_MASK) {
Py_RETURN_FALSE;
}
@@ -154,7 +154,7 @@ PyObject*
_Py_bytes_isdigit(const char *cptr, Py_ssize_t len)
{
const unsigned char *p
- = (unsigned char *) cptr;
+ = (const unsigned char *) cptr;
const unsigned char *e;
/* Shortcut for single character strings */
@@ -184,7 +184,7 @@ PyObject*
_Py_bytes_islower(const char *cptr, Py_ssize_t len)
{
const unsigned char *p
- = (unsigned char *) cptr;
+ = (const unsigned char *) cptr;
const unsigned char *e;
int cased;
@@ -218,7 +218,7 @@ PyObject*
_Py_bytes_isupper(const char *cptr, Py_ssize_t len)
{
const unsigned char *p
- = (unsigned char *) cptr;
+ = (const unsigned char *) cptr;
const unsigned char *e;
int cased;
@@ -254,7 +254,7 @@ PyObject*
_Py_bytes_istitle(const char *cptr, Py_ssize_t len)
{
const unsigned char *p
- = (unsigned char *) cptr;
+ = (const unsigned char *) cptr;
const unsigned char *e;
int cased, previous_is_cased;
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index f9823f18e86..bd8af72ade5 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -3,11 +3,11 @@
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#include "pycore_bytes_methods.h"
#include "pycore_object.h"
#include "pycore_pymem.h"
#include "pycore_pystate.h"
-#include "bytes_methods.h"
#include "pystrhex.h"
#include
@@ -18,13 +18,11 @@ class bytes "PyBytesObject *" "&PyBytes_Type"
#include "clinic/bytesobject.c.h"
-#ifdef COUNT_ALLOCS
-Py_ssize_t _Py_null_strings, _Py_one_strings;
-#endif
-
static PyBytesObject *characters[UCHAR_MAX + 1];
static PyBytesObject *nullstring;
+_Py_IDENTIFIER(__bytes__);
+
/* PyBytesObject_SIZE gives the basic size of a string; any memory allocation
for a string of length n should request PyBytesObject_SIZE + n bytes.
@@ -66,9 +64,6 @@ _PyBytes_FromSize(Py_ssize_t size, int use_calloc)
assert(size >= 0);
if (size == 0 && (op = nullstring) != NULL) {
-#ifdef COUNT_ALLOCS
- _Py_null_strings++;
-#endif
Py_INCREF(op);
return (PyObject *)op;
}
@@ -110,9 +105,6 @@ PyBytes_FromStringAndSize(const char *str, Py_ssize_t size)
if (size == 1 && str != NULL &&
(op = characters[*str & UCHAR_MAX]) != NULL)
{
-#ifdef COUNT_ALLOCS
- _Py_one_strings++;
-#endif
Py_INCREF(op);
return (PyObject *)op;
}
@@ -146,16 +138,10 @@ PyBytes_FromString(const char *str)
return NULL;
}
if (size == 0 && (op = nullstring) != NULL) {
-#ifdef COUNT_ALLOCS
- _Py_null_strings++;
-#endif
Py_INCREF(op);
return (PyObject *)op;
}
if (size == 1 && (op = characters[*str & UCHAR_MAX]) != NULL) {
-#ifdef COUNT_ALLOCS
- _Py_one_strings++;
-#endif
Py_INCREF(op);
return (PyObject *)op;
}
@@ -543,7 +529,6 @@ static PyObject *
format_obj(PyObject *v, const char **pbuf, Py_ssize_t *plen)
{
PyObject *func, *result;
- _Py_IDENTIFIER(__bytes__);
/* is it a bytes object? */
if (PyBytes_Check(v)) {
*pbuf = PyBytes_AS_STRING(v);
@@ -2274,7 +2259,7 @@ bytes_fromhex_impl(PyTypeObject *type, PyObject *string)
{
PyObject *result = _PyBytes_FromHex(string, 0);
if (type != &PyBytes_Type && result != NULL) {
- Py_SETREF(result, _PyObject_CallOneArg((PyObject *)type, result));
+ Py_SETREF(result, PyObject_CallOneArg((PyObject *)type, result));
}
return result;
}
@@ -2485,7 +2470,6 @@ bytes_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *func;
Py_ssize_t size;
static char *kwlist[] = {"source", "encoding", "errors", 0};
- _Py_IDENTIFIER(__bytes__);
if (type != &PyBytes_Type)
return bytes_subtype_new(type, args, kwds);
@@ -2778,7 +2762,7 @@ PyBytes_FromObject(PyObject *x)
PyErr_Format(PyExc_TypeError,
"cannot convert '%.200s' object to bytes",
- x->ob_type->tp_name);
+ Py_TYPE(x)->tp_name);
return NULL;
}
@@ -2964,8 +2948,12 @@ _PyBytes_Resize(PyObject **pv, Py_ssize_t newsize)
return (*pv == NULL) ? -1 : 0;
}
/* XXX UNREF/NEWREF interface should be more symmetrical */
- _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
+#endif
+#ifdef Py_TRACE_REFS
_Py_ForgetReference(v);
+#endif
*pv = (PyObject *)
PyObject_REALLOC(v, PyBytesObject_SIZE + newsize);
if (*pv == NULL) {
@@ -2975,7 +2963,7 @@ _PyBytes_Resize(PyObject **pv, Py_ssize_t newsize)
}
_Py_NewReference(*pv);
sv = (PyBytesObject *) *pv;
- Py_SIZE(sv) = newsize;
+ Py_SET_SIZE(sv, newsize);
sv->ob_sval[newsize] = '\0';
sv->ob_shash = -1; /* invalidate cached hash value */
return 0;
diff --git a/Objects/call.c b/Objects/call.c
index 0f8cb5aa246..37d079d169d 100644
--- a/Objects/call.c
+++ b/Objects/call.c
@@ -95,7 +95,7 @@ _PyObject_FastCallDictTstate(PyThreadState *tstate, PyObject *callable,
{
assert(callable != NULL);
- /* _PyObject_FastCallDict() must not be called with an exception set,
+ /* PyObject_VectorcallDict() must not be called with an exception set,
because it can clear it (directly or indirectly) and so the
caller loses its exception */
assert(!_PyErr_Occurred(tstate));
@@ -105,7 +105,7 @@ _PyObject_FastCallDictTstate(PyThreadState *tstate, PyObject *callable,
assert(nargs == 0 || args != NULL);
assert(kwargs == NULL || PyDict_Check(kwargs));
- vectorcallfunc func = _PyVectorcall_Function(callable);
+ vectorcallfunc func = PyVectorcall_Function(callable);
if (func == NULL) {
/* Use tp_call instead */
return _PyObject_MakeTpCall(tstate, callable, args, nargs, kwargs);
@@ -133,7 +133,7 @@ _PyObject_FastCallDictTstate(PyThreadState *tstate, PyObject *callable,
PyObject *
-_PyObject_FastCallDict(PyObject *callable, PyObject *const *args,
+PyObject_VectorcallDict(PyObject *callable, PyObject *const *args,
size_t nargsf, PyObject *kwargs)
{
PyThreadState *tstate = _PyThreadState_GET();
@@ -204,8 +204,8 @@ PyVectorcall_Call(PyObject *callable, PyObject *tuple, PyObject *kwargs)
{
PyThreadState *tstate = _PyThreadState_GET();
- /* get vectorcallfunc as in _PyVectorcall_Function, but without
- * the _Py_TPFLAGS_HAVE_VECTORCALL check */
+ /* get vectorcallfunc as in PyVectorcall_Function, but without
+ * the Py_TPFLAGS_HAVE_VECTORCALL check */
Py_ssize_t offset = Py_TYPE(callable)->tp_vectorcall_offset;
if (offset <= 0) {
_PyErr_Format(tstate, PyExc_TypeError,
@@ -259,15 +259,15 @@ _PyObject_Call(PyThreadState *tstate, PyObject *callable,
assert(PyTuple_Check(args));
assert(kwargs == NULL || PyDict_Check(kwargs));
- if (_PyVectorcall_Function(callable) != NULL) {
+ if (PyVectorcall_Function(callable) != NULL) {
return PyVectorcall_Call(callable, args, kwargs);
}
else {
- call = callable->ob_type->tp_call;
+ call = Py_TYPE(callable)->tp_call;
if (call == NULL) {
_PyErr_Format(tstate, PyExc_TypeError,
"'%.200s' object is not callable",
- callable->ob_type->tp_name);
+ Py_TYPE(callable)->tp_name);
return NULL;
}
@@ -796,7 +796,7 @@ object_vacall(PyThreadState *tstate, PyObject *base,
PyObject *
-_PyObject_VectorcallMethod(PyObject *name, PyObject *const *args,
+PyObject_VectorcallMethod(PyObject *name, PyObject *const *args,
size_t nargsf, PyObject *kwnames)
{
assert(name != NULL);
diff --git a/Objects/cellobject.c b/Objects/cellobject.c
index 911cf527a43..e97feefbf6d 100644
--- a/Objects/cellobject.c
+++ b/Objects/cellobject.c
@@ -112,7 +112,7 @@ cell_repr(PyCellObject *op)
return PyUnicode_FromFormat("", op);
return PyUnicode_FromFormat("",
- op, op->ob_ref->ob_type->tp_name,
+ op, Py_TYPE(op->ob_ref)->tp_name,
op->ob_ref);
}
diff --git a/Objects/classobject.c b/Objects/classobject.c
index db53f04862c..33afbcd8747 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -178,7 +178,7 @@ static PyObject *
method_getattro(PyObject *obj, PyObject *name)
{
PyMethodObject *im = (PyMethodObject *)obj;
- PyTypeObject *tp = obj->ob_type;
+ PyTypeObject *tp = Py_TYPE(obj);
PyObject *descr = NULL;
{
@@ -190,9 +190,9 @@ method_getattro(PyObject *obj, PyObject *name)
}
if (descr != NULL) {
- descrgetfunc f = TP_DESCR_GET(descr->ob_type);
+ descrgetfunc f = TP_DESCR_GET(Py_TYPE(descr));
if (f != NULL)
- return f(descr, obj, (PyObject *)obj->ob_type);
+ return f(descr, obj, (PyObject *)Py_TYPE(obj));
else {
Py_INCREF(descr);
return descr;
@@ -350,7 +350,7 @@ PyTypeObject PyMethod_Type = {
PyObject_GenericSetAttr, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
- _Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
+ Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
method_doc, /* tp_doc */
(traverseproc)method_traverse, /* tp_traverse */
0, /* tp_clear */
@@ -425,7 +425,7 @@ static PyGetSetDef instancemethod_getset[] = {
static PyObject *
instancemethod_getattro(PyObject *self, PyObject *name)
{
- PyTypeObject *tp = self->ob_type;
+ PyTypeObject *tp = Py_TYPE(self);
PyObject *descr = NULL;
if (tp->tp_dict == NULL) {
@@ -435,9 +435,9 @@ instancemethod_getattro(PyObject *self, PyObject *name)
descr = _PyType_Lookup(tp, name);
if (descr != NULL) {
- descrgetfunc f = TP_DESCR_GET(descr->ob_type);
+ descrgetfunc f = TP_DESCR_GET(Py_TYPE(descr));
if (f != NULL)
- return f(descr, self, (PyObject *)self->ob_type);
+ return f(descr, self, (PyObject *)Py_TYPE(self));
else {
Py_INCREF(descr);
return descr;
diff --git a/Objects/clinic/codeobject.c.h b/Objects/clinic/codeobject.c.h
index 6596de051ca..1dd82278cf3 100644
--- a/Objects/clinic/codeobject.c.h
+++ b/Objects/clinic/codeobject.c.h
@@ -11,7 +11,7 @@ PyDoc_STRVAR(code_replace__doc__,
" co_lnotab=None)\n"
"--\n"
"\n"
-"Return a new code object with new specified fields.");
+"Return a copy of the code object with new values for the specified fields.");
#define CODE_REPLACE_METHODDEF \
{"replace", (PyCFunction)(void(*)(void))code_replace, METH_FASTCALL|METH_KEYWORDS, code_replace__doc__},
@@ -253,4 +253,4 @@ skip_optional_kwonly:
exit:
return return_value;
}
-/*[clinic end generated code: output=fade581d6313a0c2 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=27fe34e82106b220 input=a9049054013a1b77]*/
diff --git a/Objects/clinic/listobject.c.h b/Objects/clinic/listobject.c.h
index 57f0a48eb08..ed137c95a8e 100644
--- a/Objects/clinic/listobject.c.h
+++ b/Objects/clinic/listobject.c.h
@@ -314,7 +314,7 @@ list___init__(PyObject *self, PyObject *args, PyObject *kwargs)
int return_value = -1;
PyObject *iterable = NULL;
- if ((Py_TYPE(self) == &PyList_Type) &&
+ if (Py_IS_TYPE(self, &PyList_Type) &&
!_PyArg_NoKeywords("list", kwargs)) {
goto exit;
}
@@ -367,4 +367,4 @@ list___reversed__(PyListObject *self, PyObject *Py_UNUSED(ignored))
{
return list___reversed___impl(self);
}
-/*[clinic end generated code: output=73718c0c33798c62 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=1ff61490c091d165 input=a9049054013a1b77]*/
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index f0b62ec9414..fd64393c235 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -38,7 +38,7 @@ all_name_chars(PyObject *o)
return 1;
}
-static void
+static int
intern_strings(PyObject *tuple)
{
Py_ssize_t i;
@@ -46,60 +46,70 @@ intern_strings(PyObject *tuple)
for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
PyObject *v = PyTuple_GET_ITEM(tuple, i);
if (v == NULL || !PyUnicode_CheckExact(v)) {
- Py_FatalError("non-string found in code slot");
+ PyErr_SetString(PyExc_SystemError,
+ "non-string found in code slot");
+ return -1;
}
PyUnicode_InternInPlace(&_PyTuple_ITEMS(tuple)[i]);
}
+ return 0;
}
/* Intern selected string constants */
static int
-intern_string_constants(PyObject *tuple)
+intern_string_constants(PyObject *tuple, int *modified)
{
- int modified = 0;
- Py_ssize_t i;
-
- for (i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
+ for (Py_ssize_t i = PyTuple_GET_SIZE(tuple); --i >= 0; ) {
PyObject *v = PyTuple_GET_ITEM(tuple, i);
if (PyUnicode_CheckExact(v)) {
if (PyUnicode_READY(v) == -1) {
- PyErr_Clear();
- continue;
+ return -1;
}
+
if (all_name_chars(v)) {
PyObject *w = v;
PyUnicode_InternInPlace(&v);
if (w != v) {
PyTuple_SET_ITEM(tuple, i, v);
- modified = 1;
+ if (modified) {
+ *modified = 1;
+ }
}
}
}
else if (PyTuple_CheckExact(v)) {
- intern_string_constants(v);
+ if (intern_string_constants(v, NULL) < 0) {
+ return -1;
+ }
}
else if (PyFrozenSet_CheckExact(v)) {
PyObject *w = v;
PyObject *tmp = PySequence_Tuple(v);
if (tmp == NULL) {
- PyErr_Clear();
- continue;
+ return -1;
}
- if (intern_string_constants(tmp)) {
+ int tmp_modified = 0;
+ if (intern_string_constants(tmp, &tmp_modified) < 0) {
+ Py_DECREF(tmp);
+ return -1;
+ }
+ if (tmp_modified) {
v = PyFrozenSet_New(tmp);
if (v == NULL) {
- PyErr_Clear();
+ Py_DECREF(tmp);
+ return -1;
}
- else {
- PyTuple_SET_ITEM(tuple, i, v);
- Py_DECREF(w);
- modified = 1;
+
+ PyTuple_SET_ITEM(tuple, i, v);
+ Py_DECREF(w);
+ if (modified) {
+ *modified = 1;
}
}
Py_DECREF(tmp);
}
}
- return modified;
+ return 0;
}
PyCodeObject *
@@ -139,11 +149,21 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount,
return NULL;
}
- intern_strings(names);
- intern_strings(varnames);
- intern_strings(freevars);
- intern_strings(cellvars);
- intern_string_constants(consts);
+ if (intern_strings(names) < 0) {
+ return NULL;
+ }
+ if (intern_strings(varnames) < 0) {
+ return NULL;
+ }
+ if (intern_strings(freevars) < 0) {
+ return NULL;
+ }
+ if (intern_strings(cellvars) < 0) {
+ return NULL;
+ }
+ if (intern_string_constants(consts, NULL) < 0) {
+ return NULL;
+ }
/* Check for any inner or outer closure references */
n_cellvars = PyTuple_GET_SIZE(cellvars);
@@ -396,7 +416,7 @@ validate_and_copy_tuple(PyObject *tup)
PyExc_TypeError,
"name tuples must contain only "
"strings, not '%.500s'",
- item->ob_type->tp_name);
+ Py_TYPE(item)->tp_name);
Py_DECREF(newtuple);
return NULL;
}
@@ -513,7 +533,7 @@ code_new(PyTypeObject *type, PyObject *args, PyObject *kw)
ourvarnames, ourfreevars,
ourcellvars, filename,
name, firstlineno, lnotab);
- cleanup:
+ cleanup:
Py_XDECREF(ournames);
Py_XDECREF(ourvarnames);
Py_XDECREF(ourfreevars);
@@ -610,7 +630,7 @@ code.replace
co_name: unicode(c_default="self->co_name") = None
co_lnotab: PyBytesObject(c_default="(PyBytesObject *)self->co_lnotab") = None
-Return a new code object with new specified fields.
+Return a copy of the code object with new values for the specified fields.
[clinic start generated code]*/
static PyObject *
@@ -622,7 +642,7 @@ code_replace_impl(PyCodeObject *self, int co_argcount,
PyObject *co_varnames, PyObject *co_freevars,
PyObject *co_cellvars, PyObject *co_filename,
PyObject *co_name, PyBytesObject *co_lnotab)
-/*[clinic end generated code: output=25c8e303913bcace input=77189e46579ec426]*/
+/*[clinic end generated code: output=25c8e303913bcace input=d9051bc8f24e6b28]*/
{
#define CHECK_INT_ARG(ARG) \
if (ARG < 0) { \
diff --git a/Objects/complexobject.c b/Objects/complexobject.c
index 367752db78f..8d1461b29b4 100644
--- a/Objects/complexobject.c
+++ b/Objects/complexobject.c
@@ -296,7 +296,7 @@ try_complex_special_method(PyObject *op)
if (!PyComplex_Check(res)) {
PyErr_Format(PyExc_TypeError,
"__complex__ returned non-complex (type %.200s)",
- res->ob_type->tp_name);
+ Py_TYPE(res)->tp_name);
Py_DECREF(res);
return NULL;
}
@@ -305,7 +305,7 @@ try_complex_special_method(PyObject *op)
"__complex__ returned non-complex (type %.200s). "
"The ability to return an instance of a strict subclass of complex "
"is deprecated, and may be removed in a future version of Python.",
- res->ob_type->tp_name)) {
+ Py_TYPE(res)->tp_name)) {
Py_DECREF(res);
return NULL;
}
@@ -731,29 +731,9 @@ complex__format__(PyObject* self, PyObject* args)
return _PyUnicodeWriter_Finish(&writer);
}
-#if 0
-static PyObject *
-complex_is_finite(PyObject *self)
-{
- Py_complex c;
- c = ((PyComplexObject *)self)->cval;
- return PyBool_FromLong((long)(Py_IS_FINITE(c.real) &&
- Py_IS_FINITE(c.imag)));
-}
-
-PyDoc_STRVAR(complex_is_finite_doc,
-"complex.is_finite() -> bool\n"
-"\n"
-"Returns True if the real and the imaginary part is finite.");
-#endif
-
static PyMethodDef complex_methods[] = {
{"conjugate", (PyCFunction)complex_conjugate, METH_NOARGS,
complex_conjugate_doc},
-#if 0
- {"is_finite", (PyCFunction)complex_is_finite, METH_NOARGS,
- complex_is_finite_doc},
-#endif
{"__getnewargs__", (PyCFunction)complex_getnewargs, METH_NOARGS},
{"__format__", (PyCFunction)complex__format__,
METH_VARARGS, complex__format__doc},
@@ -978,7 +958,7 @@ complex_new_impl(PyTypeObject *type, PyObject *r, PyObject *i)
return NULL;
}
- nbr = r->ob_type->tp_as_number;
+ nbr = Py_TYPE(r)->tp_as_number;
if (nbr == NULL || (nbr->nb_float == NULL && nbr->nb_index == NULL)) {
PyErr_Format(PyExc_TypeError,
"complex() first argument must be a string or a number, "
@@ -990,7 +970,7 @@ complex_new_impl(PyTypeObject *type, PyObject *r, PyObject *i)
return NULL;
}
if (i != NULL) {
- nbi = i->ob_type->tp_as_number;
+ nbi = Py_TYPE(i)->tp_as_number;
if (nbi == NULL || (nbi->nb_float == NULL && nbi->nb_index == NULL)) {
PyErr_Format(PyExc_TypeError,
"complex() second argument must be a number, "
diff --git a/Objects/descrobject.c b/Objects/descrobject.c
index 342b993e090..aaaa4479e4b 100644
--- a/Objects/descrobject.c
+++ b/Objects/descrobject.c
@@ -6,6 +6,8 @@
#include "pycore_tupleobject.h"
#include "structmember.h" /* Why is this not included in Python.h? */
+_Py_IDENTIFIER(getattr);
+
/*[clinic input]
class mappingproxy "mappingproxyobject *" "&PyDictProxy_Type"
class property "propertyobject *" "&PyProperty_Type"
@@ -82,7 +84,7 @@ descr_check(PyDescrObject *descr, PyObject *obj, PyObject **pres)
"doesn't apply to a '%.100s' object",
descr_name((PyDescrObject *)descr), "?",
descr->d_type->tp_name,
- obj->ob_type->tp_name);
+ Py_TYPE(obj)->tp_name);
*pres = NULL;
return 1;
}
@@ -95,7 +97,7 @@ classmethod_get(PyMethodDescrObject *descr, PyObject *obj, PyObject *type)
/* Ensure a valid type. Class methods ignore obj. */
if (type == NULL) {
if (obj != NULL)
- type = (PyObject *)obj->ob_type;
+ type = (PyObject *)Py_TYPE(obj);
else {
/* Wot - no type?! */
PyErr_Format(PyExc_TypeError,
@@ -112,7 +114,7 @@ classmethod_get(PyMethodDescrObject *descr, PyObject *obj, PyObject *type)
"needs a type, not a '%.100s' as arg 2",
descr_name((PyDescrObject *)descr), "?",
PyDescr_TYPE(descr)->tp_name,
- type->ob_type->tp_name);
+ Py_TYPE(type)->tp_name);
return NULL;
}
if (!PyType_IsSubtype((PyTypeObject *)type, PyDescr_TYPE(descr))) {
@@ -192,7 +194,7 @@ descr_setcheck(PyDescrObject *descr, PyObject *obj, PyObject *value,
"doesn't apply to a '%.100s' object",
descr_name(descr), "?",
descr->d_type->tp_name,
- obj->ob_type->tp_name);
+ Py_TYPE(obj)->tp_name);
*pres = -1;
return 1;
}
@@ -452,7 +454,7 @@ classmethoddescr_call(PyMethodDescrObject *descr, PyObject *args,
if (bound == NULL) {
return NULL;
}
- PyObject *res = _PyObject_FastCallDict(bound, _PyTuple_ITEMS(args)+1,
+ PyObject *res = PyObject_VectorcallDict(bound, _PyTuple_ITEMS(args)+1,
argc-1, kwds);
Py_DECREF(bound);
return res;
@@ -504,7 +506,7 @@ wrapperdescr_call(PyWrapperDescrObject *descr, PyObject *args, PyObject *kwds)
"but received a '%.100s'",
descr_name((PyDescrObject *)descr), "?",
PyDescr_TYPE(descr)->tp_name,
- self->ob_type->tp_name);
+ Py_TYPE(self)->tp_name);
return NULL;
}
@@ -571,7 +573,6 @@ descr_get_qualname(PyDescrObject *descr, void *Py_UNUSED(ignored))
static PyObject *
descr_reduce(PyDescrObject *descr, PyObject *Py_UNUSED(ignored))
{
- _Py_IDENTIFIER(getattr);
return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
PyDescr_TYPE(descr), PyDescr_NAME(descr));
}
@@ -672,7 +673,7 @@ PyTypeObject PyMethodDescr_Type = {
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
- _Py_TPFLAGS_HAVE_VECTORCALL |
+ Py_TPFLAGS_HAVE_VECTORCALL |
Py_TPFLAGS_METHOD_DESCRIPTOR, /* tp_flags */
0, /* tp_doc */
descr_traverse, /* tp_traverse */
@@ -1233,14 +1234,13 @@ wrapper_repr(wrapperobject *wp)
{
return PyUnicode_FromFormat("",
wp->descr->d_base->name,
- wp->self->ob_type->tp_name,
+ Py_TYPE(wp->self)->tp_name,
wp->self);
}
static PyObject *
wrapper_reduce(wrapperobject *wp, PyObject *Py_UNUSED(ignored))
{
- _Py_IDENTIFIER(getattr);
return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_getattr),
wp->self, PyDescr_NAME(wp->descr));
}
@@ -1476,7 +1476,7 @@ property_dealloc(PyObject *self)
Py_XDECREF(gs->prop_set);
Py_XDECREF(gs->prop_del);
Py_XDECREF(gs->prop_doc);
- self->ob_type->tp_free(self);
+ Py_TYPE(self)->tp_free(self);
}
static PyObject *
@@ -1493,7 +1493,7 @@ property_descr_get(PyObject *self, PyObject *obj, PyObject *type)
return NULL;
}
- return _PyObject_CallOneArg(gs->prop_get, obj);
+ return PyObject_CallOneArg(gs->prop_get, obj);
}
static int
@@ -1514,7 +1514,7 @@ property_descr_set(PyObject *self, PyObject *obj, PyObject *value)
return -1;
}
if (value == NULL)
- res = _PyObject_CallOneArg(func, obj);
+ res = PyObject_CallOneArg(func, obj);
else
res = PyObject_CallFunctionObjArgs(func, obj, value, NULL);
if (res == NULL)
diff --git a/Objects/dictobject.c b/Objects/dictobject.c
index 4afa19c8a0a..8f6ce3996a1 100644
--- a/Objects/dictobject.c
+++ b/Objects/dictobject.c
@@ -311,7 +311,9 @@ static void free_keys_object(PyDictKeysObject *keys);
static inline void
dictkeys_incref(PyDictKeysObject *dk)
{
- _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal++;
+#endif
dk->dk_refcnt++;
}
@@ -319,7 +321,9 @@ static inline void
dictkeys_decref(PyDictKeysObject *dk)
{
assert(dk->dk_refcnt > 0);
- _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
+#endif
if (--dk->dk_refcnt == 0) {
free_keys_object(dk);
}
@@ -563,7 +567,9 @@ static PyDictKeysObject *new_keys_object(Py_ssize_t size)
return NULL;
}
}
- _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal++;
+#endif
dk->dk_refcnt = 1;
dk->dk_size = size;
dk->dk_usable = usable;
@@ -687,10 +693,12 @@ clone_combined_dict(PyDictObject *orig)
}
/* Since we copied the keys table we now have an extra reference
- in the system. Manually call _Py_INC_REFTOTAL to signal that
+ in the system. Manually call increment _Py_RefTotal to signal that
we have it now; calling dictkeys_incref would be an error as
keys->dk_refcnt is already set to 1 (after memcpy). */
- _Py_INC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal++;
+#endif
return (PyObject *)new;
}
@@ -1249,13 +1257,15 @@ dictresize(PyDictObject *mp, Py_ssize_t minsize)
assert(oldkeys->dk_lookup != lookdict_split);
assert(oldkeys->dk_refcnt == 1);
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
+#endif
if (oldkeys->dk_size == PyDict_MINSIZE &&
- numfreekeys < PyDict_MAXFREELIST) {
- _Py_DEC_REFTOTAL;
+ numfreekeys < PyDict_MAXFREELIST)
+ {
keys_free_list[numfreekeys++] = oldkeys;
}
else {
- _Py_DEC_REFTOTAL;
PyObject_FREE(oldkeys);
}
}
@@ -2117,7 +2127,7 @@ dict_subscript(PyDictObject *mp, PyObject *key)
_Py_IDENTIFIER(__missing__);
missing = _PyObject_LookupSpecial((PyObject *)mp, &PyId___missing__);
if (missing != NULL) {
- res = _PyObject_CallOneArg(missing, key);
+ res = PyObject_CallOneArg(missing, key);
Py_DECREF(missing);
return res;
}
@@ -2777,9 +2787,11 @@ dict_equal(PyDictObject *a, PyDictObject *b)
return -1;
return 0;
}
+ Py_INCREF(bval);
cmp = PyObject_RichCompareBool(aval, bval, Py_EQ);
Py_DECREF(key);
Py_DECREF(aval);
+ Py_DECREF(bval);
if (cmp <= 0) /* error or not equal */
return cmp;
}
@@ -4003,7 +4015,7 @@ _PyDictView_New(PyObject *dict, PyTypeObject *type)
/* XXX Get rid of this restriction later */
PyErr_Format(PyExc_TypeError,
"%s() requires a dict argument, not '%s'",
- type->tp_name, dict->ob_type->tp_name);
+ type->tp_name, Py_TYPE(dict)->tp_name);
return NULL;
}
dv = PyObject_GC_New(_PyDictViewObject, type);
diff --git a/Objects/enumobject.c b/Objects/enumobject.c
index 4786297c41a..75703be5fcf 100644
--- a/Objects/enumobject.c
+++ b/Objects/enumobject.c
@@ -122,7 +122,7 @@ enum_next_long(enumobject *en, PyObject* next_item)
}
en->en_longindex = stepped_up;
- if (result->ob_refcnt == 1) {
+ if (Py_REFCNT(result) == 1) {
Py_INCREF(result);
old_index = PyTuple_GET_ITEM(result, 0);
old_item = PyTuple_GET_ITEM(result, 1);
@@ -167,7 +167,7 @@ enum_next(enumobject *en)
}
en->en_index++;
- if (result->ob_refcnt == 1) {
+ if (Py_REFCNT(result) == 1) {
Py_INCREF(result);
old_index = PyTuple_GET_ITEM(result, 0);
old_item = PyTuple_GET_ITEM(result, 1);
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 3ec5a00f30f..840d17bee66 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -25,6 +25,8 @@
extern "C" {
#endif
+_Py_IDENTIFIER(open);
+
/* External C interface */
PyObject *
@@ -32,7 +34,6 @@ PyFile_FromFd(int fd, const char *name, const char *mode, int buffering, const c
const char *errors, const char *newline, int closefd)
{
PyObject *io, *stream;
- _Py_IDENTIFIER(open);
/* import _io in case we are being used to open io.py */
io = PyImport_ImportModule("_io");
@@ -84,7 +85,7 @@ PyFile_GetLine(PyObject *f, int n)
"EOF when reading a line");
}
else if (s[len-1] == '\n') {
- if (result->ob_refcnt == 1)
+ if (Py_REFCNT(result) == 1)
_PyBytes_Resize(&result, len-1);
else {
PyObject *v;
@@ -136,7 +137,7 @@ PyFile_WriteObject(PyObject *v, PyObject *f, int flags)
Py_DECREF(writer);
return -1;
}
- result = _PyObject_CallOneArg(writer, value);
+ result = PyObject_CallOneArg(writer, value);
Py_DECREF(value);
Py_DECREF(writer);
if (result == NULL)
@@ -547,7 +548,6 @@ PyObject *
PyFile_OpenCodeObject(PyObject *path)
{
PyObject *iomod, *f = NULL;
- _Py_IDENTIFIER(open);
if (!PyUnicode_Check(path)) {
PyErr_Format(PyExc_TypeError, "'path' must be 'str', not '%.200s'",
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 4fc412b43f7..04f968e56b1 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -4,6 +4,7 @@
for any kind of float exception without losing portability. */
#include "Python.h"
+#include "pycore_dtoa.h"
#include
#include
@@ -221,7 +222,7 @@ float_dealloc(PyFloatObject *op)
return;
}
numfree++;
- Py_TYPE(op) = (struct _typeobject *)free_list;
+ Py_SET_TYPE(op, (PyTypeObject *)free_list);
free_list = op;
}
else
@@ -256,7 +257,7 @@ PyFloat_AsDouble(PyObject *op)
return val;
}
PyErr_Format(PyExc_TypeError, "must be real number, not %.50s",
- op->ob_type->tp_name);
+ Py_TYPE(op)->tp_name);
return -1;
}
@@ -268,7 +269,7 @@ PyFloat_AsDouble(PyObject *op)
if (!PyFloat_Check(res)) {
PyErr_Format(PyExc_TypeError,
"%.50s.__float__ returned non-float (type %.50s)",
- op->ob_type->tp_name, res->ob_type->tp_name);
+ Py_TYPE(op)->tp_name, Py_TYPE(res)->tp_name);
Py_DECREF(res);
return -1;
}
@@ -276,7 +277,7 @@ PyFloat_AsDouble(PyObject *op)
"%.50s.__float__ returned non-float (type %.50s). "
"The ability to return an instance of a strict subclass of float "
"is deprecated, and may be removed in a future version of Python.",
- op->ob_type->tp_name, res->ob_type->tp_name)) {
+ Py_TYPE(op)->tp_name, Py_TYPE(res)->tp_name)) {
Py_DECREF(res);
return -1;
}
@@ -611,29 +612,22 @@ float_rem(PyObject *v, PyObject *w)
return PyFloat_FromDouble(mod);
}
-static PyObject *
-float_divmod(PyObject *v, PyObject *w)
+static void
+_float_div_mod(double vx, double wx, double *floordiv, double *mod)
{
- double vx, wx;
- double div, mod, floordiv;
- CONVERT_TO_DOUBLE(v, vx);
- CONVERT_TO_DOUBLE(w, wx);
- if (wx == 0.0) {
- PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
- return NULL;
- }
- mod = fmod(vx, wx);
+ double div;
+ *mod = fmod(vx, wx);
/* fmod is typically exact, so vx-mod is *mathematically* an
exact multiple of wx. But this is fp arithmetic, and fp
vx - mod is an approximation; the result is that div may
not be an exact integral value after the division, although
it will always be very close to one.
*/
- div = (vx - mod) / wx;
- if (mod) {
+ div = (vx - *mod) / wx;
+ if (*mod) {
/* ensure the remainder has the same sign as the denominator */
- if ((wx < 0) != (mod < 0)) {
- mod += wx;
+ if ((wx < 0) != (*mod < 0)) {
+ *mod += wx;
div -= 1.0;
}
}
@@ -641,34 +635,49 @@ float_divmod(PyObject *v, PyObject *w)
/* the remainder is zero, and in the presence of signed zeroes
fmod returns different results across platforms; ensure
it has the same sign as the denominator. */
- mod = copysign(0.0, wx);
+ *mod = copysign(0.0, wx);
}
/* snap quotient to nearest integral value */
if (div) {
- floordiv = floor(div);
- if (div - floordiv > 0.5)
- floordiv += 1.0;
+ *floordiv = floor(div);
+ if (div - *floordiv > 0.5) {
+ *floordiv += 1.0;
+ }
}
else {
/* div is zero - get the same sign as the true quotient */
- floordiv = copysign(0.0, vx / wx); /* zero w/ sign of vx/wx */
+ *floordiv = copysign(0.0, vx / wx); /* zero w/ sign of vx/wx */
}
+}
+
+static PyObject *
+float_divmod(PyObject *v, PyObject *w)
+{
+ double vx, wx;
+ double mod, floordiv;
+ CONVERT_TO_DOUBLE(v, vx);
+ CONVERT_TO_DOUBLE(w, wx);
+ if (wx == 0.0) {
+ PyErr_SetString(PyExc_ZeroDivisionError, "float divmod()");
+ return NULL;
+ }
+ _float_div_mod(vx, wx, &floordiv, &mod);
return Py_BuildValue("(dd)", floordiv, mod);
}
static PyObject *
float_floor_div(PyObject *v, PyObject *w)
{
- PyObject *t, *r;
-
- t = float_divmod(v, w);
- if (t == NULL || t == Py_NotImplemented)
- return t;
- assert(PyTuple_CheckExact(t));
- r = PyTuple_GET_ITEM(t, 0);
- Py_INCREF(r);
- Py_DECREF(t);
- return r;
+ double vx, wx;
+ double mod, floordiv;
+ CONVERT_TO_DOUBLE(v, vx);
+ CONVERT_TO_DOUBLE(w, wx);
+ if (wx == 0.0) {
+ PyErr_SetString(PyExc_ZeroDivisionError, "float floor division by zero");
+ return NULL;
+ }
+ _float_div_mod(vx, wx, &floordiv, &mod);
+ return PyFloat_FromDouble(floordiv);
}
/* determine whether x is an odd integer or not; assumes that
@@ -843,35 +852,6 @@ float_is_integer_impl(PyObject *self)
return o;
}
-#if 0
-static PyObject *
-float_is_inf(PyObject *v)
-{
- double x = PyFloat_AsDouble(v);
- if (x == -1.0 && PyErr_Occurred())
- return NULL;
- return PyBool_FromLong((long)Py_IS_INFINITY(x));
-}
-
-static PyObject *
-float_is_nan(PyObject *v)
-{
- double x = PyFloat_AsDouble(v);
- if (x == -1.0 && PyErr_Occurred())
- return NULL;
- return PyBool_FromLong((long)Py_IS_NAN(x));
-}
-
-static PyObject *
-float_is_finite(PyObject *v)
-{
- double x = PyFloat_AsDouble(v);
- if (x == -1.0 && PyErr_Occurred())
- return NULL;
- return PyBool_FromLong((long)Py_IS_FINITE(x));
-}
-#endif
-
/*[clinic input]
float.__trunc__
@@ -1511,7 +1491,7 @@ float_fromhex(PyTypeObject *type, PyObject *string)
goto parse_error;
result = PyFloat_FromDouble(negate ? -x : x);
if (type != &PyFloat_Type && result != NULL) {
- Py_SETREF(result, _PyObject_CallOneArg((PyObject *)type, result));
+ Py_SETREF(result, PyObject_CallOneArg((PyObject *)type, result));
}
return result;
@@ -1863,14 +1843,6 @@ static PyMethodDef float_methods[] = {
FLOAT_FROMHEX_METHODDEF
FLOAT_HEX_METHODDEF
FLOAT_IS_INTEGER_METHODDEF
-#if 0
- {"is_inf", (PyCFunction)float_is_inf, METH_NOARGS,
- "Return True if the float is positive or negative infinite."},
- {"is_finite", (PyCFunction)float_is_finite, METH_NOARGS,
- "Return True if the float is finite, neither infinite nor NaN."},
- {"is_nan", (PyCFunction)float_is_nan, METH_NOARGS,
- "Return True if the float is not a number (NaN)."},
-#endif
FLOAT___GETNEWARGS___METHODDEF
FLOAT___GETFORMAT___METHODDEF
FLOAT___SET_FORMAT___METHODDEF
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index d7acb41f7a3..64f5754fe20 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -338,7 +338,7 @@ frame_block_unwind(PyFrameObject *f)
assert(f->f_iblock > 0);
f->f_iblock--;
PyTryBlock *b = &f->f_blockstack[f->f_iblock];
- int delta = (f->f_stacktop - f->f_valuestack) - b->b_level;
+ intptr_t delta = (f->f_stacktop - f->f_valuestack) - b->b_level;
while (delta > 0) {
frame_stack_pop(f);
delta--;
@@ -475,7 +475,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore
if (new_stack.depth > current_stack.depth ||
top_block(&new_stack)->start_line != current_block_at_new_depth->start_line) {
unsigned char target_kind = top_block(&new_stack)->kind;
- char *msg;
+ const char *msg;
if (target_kind == POP_EXCEPT) {
msg = "can't jump into an 'except' block as there's no exception";
}
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
index b6ffc2a184c..419db33602a 100644
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -196,7 +196,7 @@ PyFunction_SetClosure(PyObject *op, PyObject *closure)
else {
PyErr_Format(PyExc_SystemError,
"expected tuple for closure, got '%.100s'",
- closure->ob_type->tp_name);
+ Py_TYPE(closure)->tp_name);
return -1;
}
Py_XSETREF(((PyFunctionObject *)op)->func_closure, closure);
@@ -541,7 +541,7 @@ func_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals,
if (!PyCell_Check(o)) {
return PyErr_Format(PyExc_TypeError,
"arg 5 (closure) expected cell, found %s",
- o->ob_type->tp_name);
+ Py_TYPE(o)->tp_name);
}
}
}
@@ -654,7 +654,7 @@ PyTypeObject PyFunction_Type = {
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
- _Py_TPFLAGS_HAVE_VECTORCALL |
+ Py_TPFLAGS_HAVE_VECTORCALL |
Py_TPFLAGS_METHOD_DESCRIPTOR, /* tp_flags */
func_new__doc__, /* tp_doc */
(traverseproc)func_traverse, /* tp_traverse */
diff --git a/Objects/genobject.c b/Objects/genobject.c
index c5fe9999af2..ef892bb0366 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -12,10 +12,10 @@ static PyObject *gen_close(PyGenObject *, PyObject *);
static PyObject *async_gen_asend_new(PyAsyncGenObject *, PyObject *);
static PyObject *async_gen_athrow_new(PyAsyncGenObject *, PyObject *);
-static char *NON_INIT_CORO_MSG = "can't send non-None value to a "
+static const char *NON_INIT_CORO_MSG = "can't send non-None value to a "
"just-started coroutine";
-static char *ASYNC_GEN_IGNORED_EXIT_MSG =
+static const char *ASYNC_GEN_IGNORED_EXIT_MSG =
"async generator ignored GeneratorExit";
static inline int
@@ -58,7 +58,7 @@ _PyGen_Finalize(PyObject *self)
/* Save the current exception, if any. */
PyErr_Fetch(&error_type, &error_value, &error_traceback);
- res = _PyObject_CallOneArg(finalizer, self);
+ res = PyObject_CallOneArg(finalizer, self);
if (res == NULL) {
PyErr_WriteUnraisable(self);
@@ -255,7 +255,7 @@ gen_send_ex(PyGenObject *gen, PyObject *arg, int exc, int closing)
if (PyCoro_CheckExact(gen)) {
msg = "coroutine raised StopIteration";
}
- else if PyAsyncGen_CheckExact(gen) {
+ else if (PyAsyncGen_CheckExact(gen)) {
msg = "async generator raised StopIteration";
}
_PyErr_FormatFromCause(PyExc_RuntimeError, "%s", msg);
@@ -563,7 +563,7 @@ _PyGen_SetStopIterationValue(PyObject *value)
return 0;
}
/* Construct an exception instance manually with
- * _PyObject_CallOneArg and pass it to PyErr_SetObject.
+ * PyObject_CallOneArg and pass it to PyErr_SetObject.
*
* We do this to handle a situation when "value" is a tuple, in which
* case PyErr_SetObject would set the value of StopIteration to
@@ -571,7 +571,7 @@ _PyGen_SetStopIterationValue(PyObject *value)
*
* (See PyErr_SetObject/_PyErr_CreateException code for details.)
*/
- e = _PyObject_CallOneArg(PyExc_StopIteration, value);
+ e = PyObject_CallOneArg(PyExc_StopIteration, value);
if (e == NULL) {
return -1;
}
@@ -1264,7 +1264,7 @@ async_gen_init_hooks(PyAsyncGenObject *o)
PyObject *res;
Py_INCREF(firstiter);
- res = _PyObject_CallOneArg(firstiter, (PyObject *)o);
+ res = PyObject_CallOneArg(firstiter, (PyObject *)o);
Py_DECREF(firstiter);
if (res == NULL) {
return 1;
@@ -1518,7 +1518,9 @@ async_gen_asend_send(PyAsyncGenASend *o, PyObject *arg)
PyObject *result;
if (o->ags_state == AWAITABLE_STATE_CLOSED) {
- PyErr_SetNone(PyExc_StopIteration);
+ PyErr_SetString(
+ PyExc_RuntimeError,
+ "cannot reuse already awaited __anext__()/asend()");
return NULL;
}
@@ -1561,7 +1563,9 @@ async_gen_asend_throw(PyAsyncGenASend *o, PyObject *args)
PyObject *result;
if (o->ags_state == AWAITABLE_STATE_CLOSED) {
- PyErr_SetNone(PyExc_StopIteration);
+ PyErr_SetString(
+ PyExc_RuntimeError,
+ "cannot reuse already awaited __anext__()/asend()");
return NULL;
}
@@ -1793,14 +1797,22 @@ async_gen_athrow_send(PyAsyncGenAThrow *o, PyObject *arg)
PyFrameObject *f = gen->gi_frame;
PyObject *retval;
- if (f == NULL || f->f_stacktop == NULL ||
- o->agt_state == AWAITABLE_STATE_CLOSED) {
+ if (o->agt_state == AWAITABLE_STATE_CLOSED) {
+ PyErr_SetString(
+ PyExc_RuntimeError,
+ "cannot reuse already awaited aclose()/athrow()");
+ return NULL;
+ }
+
+ if (f == NULL || f->f_stacktop == NULL) {
+ o->agt_state = AWAITABLE_STATE_CLOSED;
PyErr_SetNone(PyExc_StopIteration);
return NULL;
}
if (o->agt_state == AWAITABLE_STATE_INIT) {
if (o->agt_gen->ag_running_async) {
+ o->agt_state = AWAITABLE_STATE_CLOSED;
if (o->agt_args == NULL) {
PyErr_SetString(
PyExc_RuntimeError,
@@ -1872,7 +1884,6 @@ async_gen_athrow_send(PyAsyncGenAThrow *o, PyObject *arg)
/* aclose() mode */
if (retval) {
if (_PyAsyncGenWrappedValue_CheckExact(retval)) {
- o->agt_gen->ag_running_async = 0;
Py_DECREF(retval);
goto yield_close;
}
@@ -1887,16 +1898,17 @@ async_gen_athrow_send(PyAsyncGenAThrow *o, PyObject *arg)
yield_close:
o->agt_gen->ag_running_async = 0;
+ o->agt_state = AWAITABLE_STATE_CLOSED;
PyErr_SetString(
PyExc_RuntimeError, ASYNC_GEN_IGNORED_EXIT_MSG);
return NULL;
check_error:
o->agt_gen->ag_running_async = 0;
+ o->agt_state = AWAITABLE_STATE_CLOSED;
if (PyErr_ExceptionMatches(PyExc_StopAsyncIteration) ||
PyErr_ExceptionMatches(PyExc_GeneratorExit))
{
- o->agt_state = AWAITABLE_STATE_CLOSED;
if (o->agt_args == NULL) {
/* when aclose() is called we don't want to propagate
StopAsyncIteration or GeneratorExit; just raise
@@ -1917,7 +1929,9 @@ async_gen_athrow_throw(PyAsyncGenAThrow *o, PyObject *args)
PyObject *retval;
if (o->agt_state == AWAITABLE_STATE_CLOSED) {
- PyErr_SetNone(PyExc_StopIteration);
+ PyErr_SetString(
+ PyExc_RuntimeError,
+ "cannot reuse already awaited aclose()/athrow()");
return NULL;
}
@@ -1928,6 +1942,7 @@ async_gen_athrow_throw(PyAsyncGenAThrow *o, PyObject *args)
/* aclose() mode */
if (retval && _PyAsyncGenWrappedValue_CheckExact(retval)) {
o->agt_gen->ag_running_async = 0;
+ o->agt_state = AWAITABLE_STATE_CLOSED;
Py_DECREF(retval);
PyErr_SetString(PyExc_RuntimeError, ASYNC_GEN_IGNORED_EXIT_MSG);
return NULL;
diff --git a/Objects/interpreteridobject.c b/Objects/interpreteridobject.c
index 94f5dd709bb..57748e8139f 100644
--- a/Objects/interpreteridobject.c
+++ b/Objects/interpreteridobject.c
@@ -56,7 +56,7 @@ interp_id_converter(PyObject *arg, void *ptr)
else {
PyErr_Format(PyExc_TypeError,
"interpreter ID must be an int, got %.100s",
- arg->ob_type->tp_name);
+ Py_TYPE(arg)->tp_name);
return 0;
}
*(int64_t *)ptr = id;
diff --git a/Objects/iterobject.c b/Objects/iterobject.c
index da89298edc5..fe1de7e211c 100644
--- a/Objects/iterobject.c
+++ b/Objects/iterobject.c
@@ -11,6 +11,8 @@ typedef struct {
PyObject *it_seq; /* Set to NULL when iterator is exhausted */
} seqiterobject;
+_Py_IDENTIFIER(iter);
+
PyObject *
PySeqIter_New(PyObject *seq)
{
@@ -104,7 +106,6 @@ PyDoc_STRVAR(length_hint_doc, "Private method returning an estimate of len(list(
static PyObject *
iter_reduce(seqiterobject *it, PyObject *Py_UNUSED(ignored))
{
- _Py_IDENTIFIER(iter);
if (it->it_seq != NULL)
return Py_BuildValue("N(O)n", _PyEval_GetBuiltinId(&PyId_iter),
it->it_seq, it->it_index);
@@ -244,7 +245,6 @@ calliter_iternext(calliterobject *it)
static PyObject *
calliter_reduce(calliterobject *it, PyObject *Py_UNUSED(ignored))
{
- _Py_IDENTIFIER(iter);
if (it->it_callable != NULL && it->it_sentinel != NULL)
return Py_BuildValue("N(OO)", _PyEval_GetBuiltinId(&PyId_iter),
it->it_callable, it->it_sentinel);
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 645742b801f..3c39c6444bf 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -45,7 +45,7 @@ list_resize(PyListObject *self, Py_ssize_t newsize)
*/
if (allocated >= newsize && newsize >= (allocated >> 1)) {
assert(self->ob_item != NULL || newsize == 0);
- Py_SIZE(self) = newsize;
+ Py_SET_SIZE(self, newsize);
return 0;
}
@@ -73,7 +73,7 @@ list_resize(PyListObject *self, Py_ssize_t newsize)
return -1;
}
self->ob_item = items;
- Py_SIZE(self) = newsize;
+ Py_SET_SIZE(self, newsize);
self->allocated = new_allocated;
return 0;
}
@@ -94,29 +94,6 @@ list_preallocate_exact(PyListObject *self, Py_ssize_t size)
return 0;
}
-/* Debug statistic to compare allocations with reuse through the free list */
-#undef SHOW_ALLOC_COUNT
-#ifdef SHOW_ALLOC_COUNT
-static size_t count_alloc = 0;
-static size_t count_reuse = 0;
-
-static void
-show_alloc(void)
-{
- PyInterpreterState *interp = _PyInterpreterState_Get();
- if (!interp->config.show_alloc_count) {
- return;
- }
-
- fprintf(stderr, "List allocations: %" PY_FORMAT_SIZE_T "d\n",
- count_alloc);
- fprintf(stderr, "List reuse through freelist: %" PY_FORMAT_SIZE_T
- "d\n", count_reuse);
- fprintf(stderr, "%.2f%% reuse rate\n\n",
- (100.0*count_reuse/(count_alloc+count_reuse)));
-}
-#endif
-
/* Empty list reuse scheme to save calls to malloc and free */
#ifndef PyList_MAXFREELIST
#define PyList_MAXFREELIST 80
@@ -156,13 +133,6 @@ PyObject *
PyList_New(Py_ssize_t size)
{
PyListObject *op;
-#ifdef SHOW_ALLOC_COUNT
- static int initialized = 0;
- if (!initialized) {
- Py_AtExit(show_alloc);
- initialized = 1;
- }
-#endif
if (size < 0) {
PyErr_BadInternalCall();
@@ -172,16 +142,10 @@ PyList_New(Py_ssize_t size)
numfree--;
op = free_list[numfree];
_Py_NewReference((PyObject *)op);
-#ifdef SHOW_ALLOC_COUNT
- count_reuse++;
-#endif
} else {
op = PyObject_GC_New(PyListObject, &PyList_Type);
if (op == NULL)
return NULL;
-#ifdef SHOW_ALLOC_COUNT
- count_alloc++;
-#endif
}
if (size <= 0)
op->ob_item = NULL;
@@ -192,7 +156,7 @@ PyList_New(Py_ssize_t size)
return PyErr_NoMemory();
}
}
- Py_SIZE(op) = size;
+ Py_SET_SIZE(op, size);
op->allocated = size;
_PyObject_GC_TRACK(op);
return (PyObject *) op;
@@ -445,11 +409,16 @@ list_length(PyListObject *a)
static int
list_contains(PyListObject *a, PyObject *el)
{
+ PyObject *item;
Py_ssize_t i;
int cmp;
- for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(a); ++i)
- cmp = PyObject_RichCompareBool(PyList_GET_ITEM(a, i), el, Py_EQ);
+ for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(a); ++i) {
+ item = PyList_GET_ITEM(a, i);
+ Py_INCREF(item);
+ cmp = PyObject_RichCompareBool(item, el, Py_EQ);
+ Py_DECREF(item);
+ }
return cmp;
}
@@ -488,7 +457,7 @@ list_slice(PyListObject *a, Py_ssize_t ilow, Py_ssize_t ihigh)
Py_INCREF(v);
dest[i] = v;
}
- Py_SIZE(np) = len;
+ Py_SET_SIZE(np, len);
return (PyObject *)np;
}
@@ -524,7 +493,7 @@ list_concat(PyListObject *a, PyObject *bb)
if (!PyList_Check(bb)) {
PyErr_Format(PyExc_TypeError,
"can only concatenate list (not \"%.200s\") to list",
- bb->ob_type->tp_name);
+ Py_TYPE(bb)->tp_name);
return NULL;
}
#define b ((PyListObject *)bb)
@@ -549,7 +518,7 @@ list_concat(PyListObject *a, PyObject *bb)
Py_INCREF(v);
dest[i] = v;
}
- Py_SIZE(np) = size;
+ Py_SET_SIZE(np, size);
return (PyObject *)np;
#undef b
}
@@ -592,7 +561,7 @@ list_repeat(PyListObject *a, Py_ssize_t n)
}
}
}
- Py_SIZE(np) = size;
+ Py_SET_SIZE(np, size);
return (PyObject *) np;
}
@@ -605,7 +574,7 @@ _list_clear(PyListObject *a)
/* Because XDECREF can recursively invoke operations on
this list, we make it empty first. */
i = Py_SIZE(a);
- Py_SIZE(a) = 0;
+ Py_SET_SIZE(a, 0);
a->ob_item = NULL;
a->allocated = 0;
while (--i >= 0) {
@@ -923,7 +892,7 @@ list_extend(PyListObject *self, PyObject *iterable)
it = PyObject_GetIter(iterable);
if (it == NULL)
return NULL;
- iternext = *it->ob_type->tp_iternext;
+ iternext = *Py_TYPE(it)->tp_iternext;
/* Guess a result list size. */
n = PyObject_LengthHint(iterable, 8);
@@ -944,7 +913,7 @@ list_extend(PyListObject *self, PyObject *iterable)
if (list_resize(self, mn) < 0)
goto error;
/* Make the list sane again. */
- Py_SIZE(self) = m;
+ Py_SET_SIZE(self, m);
}
/* Run iterator to exhaustion. */
@@ -962,7 +931,7 @@ list_extend(PyListObject *self, PyObject *iterable)
if (Py_SIZE(self) < self->allocated) {
/* steals ref */
PyList_SET_ITEM(self, Py_SIZE(self), item);
- ++Py_SIZE(self);
+ Py_SET_SIZE(self, Py_SIZE(self) + 1);
}
else {
int status = app1(self, item);
@@ -1210,7 +1179,7 @@ struct s_MergeState {
/* This function is used by unsafe_object_compare to optimize comparisons
* when we know our list is type-homogeneous but we can't assume anything else.
- * In the pre-sort check it is set equal to key->ob_type->tp_richcompare */
+ * In the pre-sort check it is set equal to Py_TYPE(key)->tp_richcompare */
PyObject *(*key_richcompare)(PyObject *, PyObject *, int);
/* This function is used by unsafe_tuple_compare to compare the first elements
@@ -2046,7 +2015,7 @@ unsafe_object_compare(PyObject *v, PyObject *w, MergeState *ms)
PyObject *res_obj; int res;
/* No assumptions, because we check first: */
- if (v->ob_type->tp_richcompare != ms->key_richcompare)
+ if (Py_TYPE(v)->tp_richcompare != ms->key_richcompare)
return PyObject_RichCompareBool(v, w, Py_LT);
assert(ms->key_richcompare != NULL);
@@ -2083,8 +2052,8 @@ unsafe_latin_compare(PyObject *v, PyObject *w, MergeState *ms)
int res;
/* Modified from Objects/unicodeobject.c:unicode_compare, assuming: */
- assert(v->ob_type == w->ob_type);
- assert(v->ob_type == &PyUnicode_Type);
+ assert(Py_TYPE(v) == Py_TYPE(w));
+ assert(Py_TYPE(v) == &PyUnicode_Type);
assert(PyUnicode_KIND(v) == PyUnicode_KIND(w));
assert(PyUnicode_KIND(v) == PyUnicode_1BYTE_KIND);
@@ -2106,8 +2075,8 @@ unsafe_long_compare(PyObject *v, PyObject *w, MergeState *ms)
PyLongObject *vl, *wl; sdigit v0, w0; int res;
/* Modified from Objects/longobject.c:long_compare, assuming: */
- assert(v->ob_type == w->ob_type);
- assert(v->ob_type == &PyLong_Type);
+ assert(Py_TYPE(v) == Py_TYPE(w));
+ assert(Py_TYPE(v) == &PyLong_Type);
assert(Py_ABS(Py_SIZE(v)) <= 1);
assert(Py_ABS(Py_SIZE(w)) <= 1);
@@ -2134,8 +2103,8 @@ unsafe_float_compare(PyObject *v, PyObject *w, MergeState *ms)
int res;
/* Modified from Objects/floatobject.c:float_richcompare, assuming: */
- assert(v->ob_type == w->ob_type);
- assert(v->ob_type == &PyFloat_Type);
+ assert(Py_TYPE(v) == Py_TYPE(w));
+ assert(Py_TYPE(v) == &PyFloat_Type);
res = PyFloat_AS_DOUBLE(v) < PyFloat_AS_DOUBLE(w);
assert(res == PyObject_RichCompareBool(v, w, Py_LT));
@@ -2156,8 +2125,8 @@ unsafe_tuple_compare(PyObject *v, PyObject *w, MergeState *ms)
int k;
/* Modified from Objects/tupleobject.c:tuplerichcompare, assuming: */
- assert(v->ob_type == w->ob_type);
- assert(v->ob_type == &PyTuple_Type);
+ assert(Py_TYPE(v) == Py_TYPE(w));
+ assert(Py_TYPE(v) == &PyTuple_Type);
assert(Py_SIZE(v) > 0);
assert(Py_SIZE(w) > 0);
@@ -2235,7 +2204,7 @@ list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse)
saved_ob_size = Py_SIZE(self);
saved_ob_item = self->ob_item;
saved_allocated = self->allocated;
- Py_SIZE(self) = 0;
+ Py_SET_SIZE(self, 0);
self->ob_item = NULL;
self->allocated = -1; /* any operation will reset it to >= 0 */
@@ -2257,7 +2226,7 @@ list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse)
}
for (i = 0; i < saved_ob_size ; i++) {
- keys[i] = _PyObject_CallOneArg(keyfunc, saved_ob_item[i]);
+ keys[i] = PyObject_CallOneArg(keyfunc, saved_ob_item[i]);
if (keys[i] == NULL) {
for (i=i-1 ; i>=0 ; i--)
Py_DECREF(keys[i]);
@@ -2278,12 +2247,12 @@ list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse)
* set ms appropriately. */
if (saved_ob_size > 1) {
/* Assume the first element is representative of the whole list. */
- int keys_are_in_tuples = (lo.keys[0]->ob_type == &PyTuple_Type &&
+ int keys_are_in_tuples = (Py_TYPE(lo.keys[0]) == &PyTuple_Type &&
Py_SIZE(lo.keys[0]) > 0);
PyTypeObject* key_type = (keys_are_in_tuples ?
- PyTuple_GET_ITEM(lo.keys[0], 0)->ob_type :
- lo.keys[0]->ob_type);
+ Py_TYPE(PyTuple_GET_ITEM(lo.keys[0], 0)) :
+ Py_TYPE(lo.keys[0]));
int keys_are_all_same_type = 1;
int strings_are_latin = 1;
@@ -2293,7 +2262,7 @@ list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse)
for (i=0; i < saved_ob_size; i++) {
if (keys_are_in_tuples &&
- !(lo.keys[i]->ob_type == &PyTuple_Type && Py_SIZE(lo.keys[i]) != 0)) {
+ !(Py_TYPE(lo.keys[i]) == &PyTuple_Type && Py_SIZE(lo.keys[i]) != 0)) {
keys_are_in_tuples = 0;
keys_are_all_same_type = 0;
break;
@@ -2306,7 +2275,7 @@ list_sort_impl(PyListObject *self, PyObject *keyfunc, int reverse)
PyTuple_GET_ITEM(lo.keys[i], 0) :
lo.keys[i]);
- if (key->ob_type != key_type) {
+ if (Py_TYPE(key) != key_type) {
keys_are_all_same_type = 0;
/* If keys are in tuple we must loop over the whole list to make
sure all items are tuples */
@@ -2452,7 +2421,7 @@ fail:
keyfunc_fail:
final_ob_item = self->ob_item;
i = Py_SIZE(self);
- Py_SIZE(self) = saved_ob_size;
+ Py_SET_SIZE(self, saved_ob_size);
self->ob_item = saved_ob_item;
self->allocated = saved_allocated;
if (final_ob_item != NULL) {
@@ -2553,7 +2522,10 @@ list_index_impl(PyListObject *self, PyObject *value, Py_ssize_t start,
stop = 0;
}
for (i = start; i < stop && i < Py_SIZE(self); i++) {
- int cmp = PyObject_RichCompareBool(self->ob_item[i], value, Py_EQ);
+ PyObject *obj = self->ob_item[i];
+ Py_INCREF(obj);
+ int cmp = PyObject_RichCompareBool(obj, value, Py_EQ);
+ Py_DECREF(obj);
if (cmp > 0)
return PyLong_FromSsize_t(i);
else if (cmp < 0)
@@ -2580,7 +2552,14 @@ list_count(PyListObject *self, PyObject *value)
Py_ssize_t i;
for (i = 0; i < Py_SIZE(self); i++) {
- int cmp = PyObject_RichCompareBool(self->ob_item[i], value, Py_EQ);
+ PyObject *obj = self->ob_item[i];
+ if (obj == value) {
+ count++;
+ continue;
+ }
+ Py_INCREF(obj);
+ int cmp = PyObject_RichCompareBool(obj, value, Py_EQ);
+ Py_DECREF(obj);
if (cmp > 0)
count++;
else if (cmp < 0)
@@ -2607,7 +2586,10 @@ list_remove(PyListObject *self, PyObject *value)
Py_ssize_t i;
for (i = 0; i < Py_SIZE(self); i++) {
- int cmp = PyObject_RichCompareBool(self->ob_item[i], value, Py_EQ);
+ PyObject *obj = self->ob_item[i];
+ Py_INCREF(obj);
+ int cmp = PyObject_RichCompareBool(obj, value, Py_EQ);
+ Py_DECREF(obj);
if (cmp > 0) {
if (list_ass_slice(self, i, i+1,
(PyObject *)NULL) == 0)
@@ -2653,8 +2635,18 @@ list_richcompare(PyObject *v, PyObject *w, int op)
/* Search for the first index where items are different */
for (i = 0; i < Py_SIZE(vl) && i < Py_SIZE(wl); i++) {
+ PyObject *vitem = vl->ob_item[i];
+ PyObject *witem = wl->ob_item[i];
+ if (vitem == witem) {
+ continue;
+ }
+
+ Py_INCREF(vitem);
+ Py_INCREF(witem);
int k = PyObject_RichCompareBool(vl->ob_item[i],
wl->ob_item[i], Py_EQ);
+ Py_DECREF(vitem);
+ Py_DECREF(witem);
if (k < 0)
return NULL;
if (!k)
@@ -2819,14 +2811,14 @@ list_subscript(PyListObject* self, PyObject* item)
Py_INCREF(it);
dest[i] = it;
}
- Py_SIZE(result) = slicelength;
+ Py_SET_SIZE(result, slicelength);
return result;
}
}
else {
PyErr_Format(PyExc_TypeError,
"list indices must be integers or slices, not %.200s",
- item->ob_type->tp_name);
+ Py_TYPE(item)->tp_name);
return NULL;
}
}
@@ -2912,7 +2904,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
sizeof(PyObject *));
}
- Py_SIZE(self) -= slicelength;
+ Py_SET_SIZE(self, Py_SIZE(self) - slicelength);
res = list_resize(self, Py_SIZE(self));
for (i = 0; i < slicelength; i++) {
@@ -2989,7 +2981,7 @@ list_ass_subscript(PyListObject* self, PyObject* item, PyObject* value)
else {
PyErr_Format(PyExc_TypeError,
"list indices must be integers or slices, not %.200s",
- item->ob_type->tp_name);
+ Py_TYPE(item)->tp_name);
return -1;
}
}
diff --git a/Objects/listsort.txt b/Objects/listsort.txt
index 43fe1574c32..174777a2658 100644
--- a/Objects/listsort.txt
+++ b/Objects/listsort.txt
@@ -319,13 +319,13 @@ So merging is always done on two consecutive runs at a time, and in-place,
although this may require some temp memory (more on that later).
When a run is identified, its base address and length are pushed on a stack
-in the MergeState struct. merge_collapse() is then called to see whether it
-should merge it with preceding run(s). We would like to delay merging as
-long as possible in order to exploit patterns that may come up later, but we
-like even more to do merging as soon as possible to exploit that the run just
-found is still high in the memory hierarchy. We also can't delay merging
-"too long" because it consumes memory to remember the runs that are still
-unmerged, and the stack has a fixed size.
+in the MergeState struct. merge_collapse() is then called to potentially
+merge runs on that stack. We would like to delay merging as long as possible
+in order to exploit patterns that may come up later, but we like even more to
+do merging as soon as possible to exploit that the run just found is still
+high in the memory hierarchy. We also can't delay merging "too long" because
+it consumes memory to remember the runs that are still unmerged, and the
+stack has a fixed size.
What turned out to be a good compromise maintains two invariants on the
stack entries, where A, B and C are the lengths of the three rightmost not-yet
@@ -739,7 +739,7 @@ slice (leaving off both endpoints) (2**(k-1)-1)+1 through (2**k-1)-1
inclusive = 2**(k-1) through (2**k-1)-1 inclusive, which has
(2**k-1)-1 - 2**(k-1) + 1 =
2**k-1 - 2**(k-1) =
- 2*2**k-1 - 2**(k-1) =
+ 2*2**(k-1)-1 - 2**(k-1) =
(2-1)*2**(k-1) - 1 =
2**(k-1) - 1
elements.
diff --git a/Objects/longobject.c b/Objects/longobject.c
index be9301f8516..5d225cbd2fb 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -35,10 +35,6 @@ PyObject *_PyLong_One = NULL;
#define IS_SMALL_INT(ival) (-NSMALLNEGINTS <= (ival) && (ival) < NSMALLPOSINTS)
#define IS_SMALL_UINT(ival) ((ival) < NSMALLPOSINTS)
-#ifdef COUNT_ALLOCS
-Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
-#endif
-
static PyObject *
get_small_int(sdigit ival)
{
@@ -46,12 +42,6 @@ get_small_int(sdigit ival)
PyThreadState *tstate = _PyThreadState_GET();
PyObject *v = (PyObject*)tstate->interp->small_ints[ival + NSMALLNEGINTS];
Py_INCREF(v);
-#ifdef COUNT_ALLOCS
- if (ival >= 0)
- _Py_quick_int_allocs++;
- else
- _Py_quick_neg_int_allocs++;
-#endif
return v;
}
@@ -83,7 +73,7 @@ _PyLong_Negate(PyLongObject **x_p)
x = (PyLongObject *)*x_p;
if (Py_REFCNT(x) == 1) {
- Py_SIZE(x) = -Py_SIZE(x);
+ Py_SET_SIZE(x, -Py_SIZE(x));
return;
}
@@ -122,8 +112,9 @@ long_normalize(PyLongObject *v)
while (i > 0 && v->ob_digit[i-1] == 0)
--i;
- if (i != j)
- Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
+ if (i != j) {
+ Py_SET_SIZE(v, (Py_SIZE(v) < 0) ? -(i) : i);
+ }
return v;
}
@@ -160,7 +151,7 @@ _PyLong_FromNbInt(PyObject *integral)
if (!PyLong_Check(result)) {
PyErr_Format(PyExc_TypeError,
"__int__ returned non-int (type %.200s)",
- result->ob_type->tp_name);
+ Py_TYPE(result)->tp_name);
Py_DECREF(result);
return NULL;
}
@@ -169,7 +160,7 @@ _PyLong_FromNbInt(PyObject *integral)
"__int__ returned non-int (type %.200s). "
"The ability to return an instance of a strict subclass of int "
"is deprecated, and may be removed in a future version of Python.",
- result->ob_type->tp_name)) {
+ Py_TYPE(result)->tp_name)) {
Py_DECREF(result);
return NULL;
}
@@ -213,7 +204,7 @@ _PyLong_FromNbIndexOrNbInt(PyObject *integral)
if (!PyLong_Check(result)) {
PyErr_Format(PyExc_TypeError,
"__index__ returned non-int (type %.200s)",
- result->ob_type->tp_name);
+ Py_TYPE(result)->tp_name);
Py_DECREF(result);
return NULL;
}
@@ -222,7 +213,7 @@ _PyLong_FromNbIndexOrNbInt(PyObject *integral)
"__index__ returned non-int (type %.200s). "
"The ability to return an instance of a strict subclass of int "
"is deprecated, and may be removed in a future version of Python.",
- result->ob_type->tp_name))
+ Py_TYPE(result)->tp_name))
{
Py_DECREF(result);
return NULL;
@@ -291,9 +282,10 @@ _PyLong_Copy(PyLongObject *src)
}
result = _PyLong_New(i);
if (result != NULL) {
- Py_SIZE(result) = Py_SIZE(src);
- while (--i >= 0)
+ Py_SET_SIZE(result, Py_SIZE(src));
+ while (--i >= 0) {
result->ob_digit[i] = src->ob_digit[i];
+ }
}
return (PyObject *)result;
}
@@ -328,7 +320,7 @@ PyLong_FromLong(long ival)
if (!(abs_ival >> PyLong_SHIFT)) {
v = _PyLong_New(1);
if (v) {
- Py_SIZE(v) = sign;
+ Py_SET_SIZE(v, sign);
v->ob_digit[0] = Py_SAFE_DOWNCAST(
abs_ival, unsigned long, digit);
}
@@ -340,7 +332,7 @@ PyLong_FromLong(long ival)
if (!(abs_ival >> 2*PyLong_SHIFT)) {
v = _PyLong_New(2);
if (v) {
- Py_SIZE(v) = 2*sign;
+ Py_SET_SIZE(v, 2 * sign);
v->ob_digit[0] = Py_SAFE_DOWNCAST(
abs_ival & PyLong_MASK, unsigned long, digit);
v->ob_digit[1] = Py_SAFE_DOWNCAST(
@@ -359,7 +351,7 @@ PyLong_FromLong(long ival)
v = _PyLong_New(ndigits);
if (v != NULL) {
digit *p = v->ob_digit;
- Py_SIZE(v) = ndigits*sign;
+ Py_SET_SIZE(v, ndigits * sign);
t = abs_ival;
while (t) {
*p++ = Py_SAFE_DOWNCAST(
@@ -455,8 +447,9 @@ PyLong_FromDouble(double dval)
frac = frac - (double)bits;
frac = ldexp(frac, PyLong_SHIFT);
}
- if (neg)
- Py_SIZE(v) = -(Py_SIZE(v));
+ if (neg) {
+ Py_SET_SIZE(v, -(Py_SIZE(v)));
+ }
return (PyObject *)v;
}
@@ -803,26 +796,6 @@ _PyLong_Sign(PyObject *vv)
return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
}
-/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
- 2**k if d is nonzero, else 0. */
-
-static const unsigned char BitLengthTable[32] = {
- 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
-};
-
-static int
-bits_in_digit(digit d)
-{
- int d_bits = 0;
- while (d >= 32) {
- d_bits += 6;
- d >>= 6;
- }
- d_bits += (int)BitLengthTable[d];
- return d_bits;
-}
-
size_t
_PyLong_NumBits(PyObject *vv)
{
@@ -840,7 +813,7 @@ _PyLong_NumBits(PyObject *vv)
if ((size_t)(ndigits - 1) > SIZE_MAX / (size_t)PyLong_SHIFT)
goto Overflow;
result = (size_t)(ndigits - 1) * (size_t)PyLong_SHIFT;
- msd_bits = bits_in_digit(msd);
+ msd_bits = _Py_bit_length(msd);
if (SIZE_MAX - msd_bits < result)
goto Overflow;
result += msd_bits;
@@ -960,7 +933,7 @@ _PyLong_FromByteArray(const unsigned char* bytes, size_t n,
}
}
- Py_SIZE(v) = is_signed ? -idigit : idigit;
+ Py_SET_SIZE(v, is_signed ? -idigit : idigit);
return (PyObject *)long_normalize(v);
}
@@ -1188,7 +1161,7 @@ PyLong_FromLongLong(long long ival)
v = _PyLong_New(ndigits);
if (v != NULL) {
digit *p = v->ob_digit;
- Py_SIZE(v) = negative ? -ndigits : ndigits;
+ Py_SET_SIZE(v, negative ? -ndigits : ndigits);
t = abs_ival;
while (t) {
*p++ = (digit)(t & PyLong_MASK);
@@ -1231,7 +1204,7 @@ PyLong_FromSsize_t(Py_ssize_t ival)
v = _PyLong_New(ndigits);
if (v != NULL) {
digit *p = v->ob_digit;
- Py_SIZE(v) = negative ? -ndigits : ndigits;
+ Py_SET_SIZE(v, negative ? -ndigits : ndigits);
t = abs_ival;
while (t) {
*p++ = (digit)(t & PyLong_MASK);
@@ -1950,7 +1923,7 @@ long_format_binary(PyObject *aa, int base, int alternate,
return -1;
}
size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
- bits_in_digit(a->ob_digit[size_a - 1]);
+ _Py_bit_length(a->ob_digit[size_a - 1]);
/* Allow 1 character for a '-' sign. */
sz = negative + (size_a_in_bits + (bits - 1)) / bits;
}
@@ -2473,7 +2446,7 @@ digit beyond the first.
if (z == NULL) {
return NULL;
}
- Py_SIZE(z) = 0;
+ Py_SET_SIZE(z, 0);
/* `convwidth` consecutive input digits are treated as a single
* digit in base `convmultmax`.
@@ -2523,7 +2496,7 @@ digit beyond the first.
assert(c < PyLong_BASE);
if (Py_SIZE(z) < size_z) {
*pz = (digit)c;
- ++Py_SIZE(z);
+ Py_SET_SIZE(z, Py_SIZE(z) + 1);
}
else {
PyLongObject *tmp;
@@ -2562,7 +2535,7 @@ digit beyond the first.
goto onError;
}
if (sign < 0) {
- Py_SIZE(z) = -(Py_SIZE(z));
+ Py_SET_SIZE(z, -(Py_SIZE(z)));
}
while (*str && Py_ISSPACE(*str)) {
str++;
@@ -2770,7 +2743,7 @@ x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
/* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
shift v1 left by the same amount. Results go into w and v. */
- d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
+ d = PyLong_SHIFT - _Py_bit_length(w1->ob_digit[size_w-1]);
carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
assert(carry == 0);
carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
@@ -2891,7 +2864,7 @@ _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
*e = 0;
return 0.0;
}
- a_bits = bits_in_digit(a->ob_digit[a_size-1]);
+ a_bits = _Py_bit_length(a->ob_digit[a_size-1]);
/* The following is an overflow-free version of the check
"if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
@@ -3195,7 +3168,7 @@ x_sub(PyLongObject *a, PyLongObject *b)
}
assert(borrow == 0);
if (sign < 0) {
- Py_SIZE(z) = -Py_SIZE(z);
+ Py_SET_SIZE(z, -Py_SIZE(z));
}
return maybe_small_long(long_normalize(z));
}
@@ -3219,7 +3192,7 @@ long_add(PyLongObject *a, PyLongObject *b)
That also means z is not an element of
small_ints, so negating it in-place is safe. */
assert(Py_REFCNT(z) == 1);
- Py_SIZE(z) = -(Py_SIZE(z));
+ Py_SET_SIZE(z, -(Py_SIZE(z)));
}
}
else
@@ -3252,7 +3225,7 @@ long_sub(PyLongObject *a, PyLongObject *b)
z = x_add(a, b);
if (z != NULL) {
assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
- Py_SIZE(z) = -(Py_SIZE(z));
+ Py_SET_SIZE(z, -(Py_SIZE(z)));
}
}
}
@@ -3645,7 +3618,7 @@ k_lopsided_mul(PyLongObject *a, PyLongObject *b)
/* Multiply the next slice of b by a. */
memcpy(bslice->ob_digit, b->ob_digit + nbdone,
nbtouse * sizeof(digit));
- Py_SIZE(bslice) = nbtouse;
+ Py_SET_SIZE(bslice, nbtouse);
product = k_mul(a, bslice);
if (product == NULL)
goto fail;
@@ -3986,8 +3959,8 @@ long_true_divide(PyObject *v, PyObject *w)
/* Extreme underflow */
goto underflow_or_zero;
/* Next line is now safe from overflowing a Py_ssize_t */
- diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
- bits_in_digit(b->ob_digit[b_size - 1]);
+ diff = diff * PyLong_SHIFT + _Py_bit_length(a->ob_digit[a_size - 1]) -
+ _Py_bit_length(b->ob_digit[b_size - 1]);
/* Now diff = a_bits - b_bits. */
if (diff > DBL_MAX_EXP)
goto overflow;
@@ -4063,7 +4036,7 @@ long_true_divide(PyObject *v, PyObject *w)
}
x_size = Py_ABS(Py_SIZE(x));
assert(x_size > 0); /* result of division is never zero */
- x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
+ x_bits = (x_size-1)*PyLong_SHIFT+_Py_bit_length(x->ob_digit[x_size-1]);
/* The number of extra bits that have to be rounded away. */
extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
@@ -4461,7 +4434,7 @@ long_neg(PyLongObject *v)
return PyLong_FromLong(-MEDIUM_VALUE(v));
z = (PyLongObject *)_PyLong_Copy(v);
if (z != NULL)
- Py_SIZE(z) = -(Py_SIZE(v));
+ Py_SET_SIZE(z, -(Py_SIZE(v)));
return (PyObject *)z;
}
@@ -4606,7 +4579,7 @@ long_lshift1(PyLongObject *a, Py_ssize_t wordshift, digit remshift)
return NULL;
if (Py_SIZE(a) < 0) {
assert(Py_REFCNT(z) == 1);
- Py_SIZE(z) = -Py_SIZE(z);
+ Py_SET_SIZE(z, -Py_SIZE(z));
}
for (i = 0; i < wordshift; i++)
z->ob_digit[i] = 0;
@@ -4790,7 +4763,7 @@ long_bitwise(PyLongObject *a,
/* Complement result if negative. */
if (negz) {
- Py_SIZE(z) = -(Py_SIZE(z));
+ Py_SET_SIZE(z, -(Py_SIZE(z)));
z->ob_digit[size_z] = PyLong_MASK;
v_complement(z->ob_digit, z->ob_digit, size_z+1);
}
@@ -4877,7 +4850,7 @@ _PyLong_GCD(PyObject *aarg, PyObject *barg)
alloc_b = Py_SIZE(b);
/* reduce until a fits into 2 digits */
while ((size_a = Py_SIZE(a)) > 2) {
- nbits = bits_in_digit(a->ob_digit[size_a-1]);
+ nbits = _Py_bit_length(a->ob_digit[size_a-1]);
/* extract top 2*PyLong_SHIFT bits of a into x, along with
corresponding bits of b into y */
size_b = Py_SIZE(b);
@@ -4937,8 +4910,9 @@ _PyLong_GCD(PyObject *aarg, PyObject *barg)
T = -A; A = -B; B = T;
T = -C; C = -D; D = T;
}
- if (c != NULL)
- Py_SIZE(c) = size_a;
+ if (c != NULL) {
+ Py_SET_SIZE(c, size_a);
+ }
else if (Py_REFCNT(a) == 1) {
Py_INCREF(a);
c = a;
@@ -4950,12 +4924,13 @@ _PyLong_GCD(PyObject *aarg, PyObject *barg)
goto error;
}
- if (d != NULL)
- Py_SIZE(d) = size_a;
+ if (d != NULL) {
+ Py_SET_SIZE(d, size_a);
+ }
else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) {
Py_INCREF(b);
d = b;
- Py_SIZE(d) = size_a;
+ Py_SET_SIZE(d, size_a);
}
else {
alloc_b = size_a;
@@ -5135,9 +5110,10 @@ long_subtype_new(PyTypeObject *type, PyObject *x, PyObject *obase)
return NULL;
}
assert(PyLong_Check(newobj));
- Py_SIZE(newobj) = Py_SIZE(tmp);
- for (i = 0; i < n; i++)
+ Py_SET_SIZE(newobj, Py_SIZE(tmp));
+ for (i = 0; i < n; i++) {
newobj->ob_digit[i] = tmp->ob_digit[i];
+ }
Py_DECREF(tmp);
return (PyObject *)newobj;
}
@@ -5395,7 +5371,7 @@ int_bit_length_impl(PyObject *self)
return PyLong_FromLong(0);
msd = ((PyLongObject *)self)->ob_digit[ndigits-1];
- msd_bits = bits_in_digit(msd);
+ msd_bits = _Py_bit_length(msd);
if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
@@ -5431,13 +5407,6 @@ int_bit_length_impl(PyObject *self)
return NULL;
}
-#if 0
-static PyObject *
-long_is_finite(PyObject *v)
-{
- Py_RETURN_TRUE;
-}
-#endif
/*[clinic input]
int.as_integer_ratio
@@ -5578,7 +5547,7 @@ int_from_bytes_impl(PyTypeObject *type, PyObject *bytes_obj,
Py_DECREF(bytes);
if (long_obj != NULL && type != &PyLong_Type) {
- Py_SETREF(long_obj, _PyObject_CallOneArg((PyObject *)type, long_obj));
+ Py_SETREF(long_obj, PyObject_CallOneArg((PyObject *)type, long_obj));
}
return long_obj;
@@ -5594,10 +5563,6 @@ static PyMethodDef long_methods[] = {
{"conjugate", long_long_meth, METH_NOARGS,
"Returns self, the complex conjugate of any int."},
INT_BIT_LENGTH_METHODDEF
-#if 0
- {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
- "Returns always True."},
-#endif
INT_TO_BYTES_METHODDEF
INT_FROM_BYTES_METHODDEF
INT_AS_INTEGER_RATIO_METHODDEF
@@ -5785,7 +5750,7 @@ _PyLong_Init(PyThreadState *tstate)
return -1;
}
- Py_SIZE(v) = size;
+ Py_SET_SIZE(v, size);
v->ob_digit[0] = (digit)abs(ival);
tstate->interp->small_ints[i] = v;
diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c
index 66920eaf947..6887c4335f1 100644
--- a/Objects/memoryobject.c
+++ b/Objects/memoryobject.c
@@ -1048,7 +1048,8 @@ _memory_release(PyMemoryViewObject *self)
return -1;
}
- Py_FatalError("_memory_release(): negative export count");
+ PyErr_SetString(PyExc_SystemError,
+ "_memory_release(): negative export count");
return -1;
}
@@ -1681,8 +1682,8 @@ unpack_single(const char *ptr, const char *fmt)
switch (fmt[0]) {
/* signed integers and fast path for 'B' */
- case 'B': uc = *((unsigned char *)ptr); goto convert_uc;
- case 'b': ld = *((signed char *)ptr); goto convert_ld;
+ case 'B': uc = *((const unsigned char *)ptr); goto convert_uc;
+ case 'b': ld = *((const signed char *)ptr); goto convert_ld;
case 'h': UNPACK_SINGLE(ld, ptr, short); goto convert_ld;
case 'i': UNPACK_SINGLE(ld, ptr, int); goto convert_ld;
case 'l': UNPACK_SINGLE(ld, ptr, long); goto convert_ld;
@@ -1962,7 +1963,7 @@ struct_get_unpacker(const char *fmt, Py_ssize_t itemsize)
if (format == NULL)
goto error;
- structobj = _PyObject_CallOneArg(Struct, format);
+ structobj = PyObject_CallOneArg(Struct, format);
if (structobj == NULL)
goto error;
@@ -2001,7 +2002,7 @@ struct_unpack_single(const char *ptr, struct unpacker *x)
PyObject *v;
memcpy(x->item, ptr, x->itemsize);
- v = _PyObject_CallOneArg(x->unpack_from, x->mview);
+ v = PyObject_CallOneArg(x->unpack_from, x->mview);
if (v == NULL)
return NULL;
@@ -2683,8 +2684,8 @@ unpack_cmp(const char *p, const char *q, char fmt,
switch (fmt) {
/* signed integers and fast path for 'B' */
- case 'B': return *((unsigned char *)p) == *((unsigned char *)q);
- case 'b': return *((signed char *)p) == *((signed char *)q);
+ case 'B': return *((const unsigned char *)p) == *((const unsigned char *)q);
+ case 'b': return *((const signed char *)p) == *((const signed char *)q);
case 'h': CMP_SINGLE(p, q, short); return equal;
case 'i': CMP_SINGLE(p, q, int); return equal;
case 'l': CMP_SINGLE(p, q, long); return equal;
diff --git a/Objects/methodobject.c b/Objects/methodobject.c
index 6a37238d86d..1d54c4cea69 100644
--- a/Objects/methodobject.c
+++ b/Objects/methodobject.c
@@ -234,7 +234,7 @@ meth_repr(PyCFunctionObject *m)
m->m_ml->ml_name);
return PyUnicode_FromFormat("",
m->m_ml->ml_name,
- m->m_self->ob_type->tp_name,
+ Py_TYPE(m->m_self)->tp_name,
m->m_self);
}
@@ -298,7 +298,7 @@ PyTypeObject PyCFunction_Type = {
0, /* tp_setattro */
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
- _Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
+ Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
0, /* tp_doc */
(traverseproc)meth_traverse, /* tp_traverse */
0, /* tp_clear */
diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c
index 03c7381311a..30de53d902b 100644
--- a/Objects/moduleobject.c
+++ b/Objects/moduleobject.c
@@ -7,6 +7,10 @@
static Py_ssize_t max_module_number;
+_Py_IDENTIFIER(__doc__);
+_Py_IDENTIFIER(__name__);
+_Py_IDENTIFIER(__spec__);
+
typedef struct {
PyObject_HEAD
PyObject *md_dict;
@@ -47,8 +51,8 @@ PyModuleDef_Init(struct PyModuleDef* def)
return NULL;
if (def->m_base.m_index == 0) {
max_module_number++;
- Py_REFCNT(def) = 1;
- Py_TYPE(def) = &PyModuleDef_Type;
+ Py_SET_REFCNT(def, 1);
+ Py_SET_TYPE(def, &PyModuleDef_Type);
def->m_base.m_index = max_module_number;
}
return (PyObject*)def;
@@ -58,11 +62,8 @@ static int
module_init_dict(PyModuleObject *mod, PyObject *md_dict,
PyObject *name, PyObject *doc)
{
- _Py_IDENTIFIER(__name__);
- _Py_IDENTIFIER(__doc__);
_Py_IDENTIFIER(__package__);
_Py_IDENTIFIER(__loader__);
- _Py_IDENTIFIER(__spec__);
if (md_dict == NULL)
return -1;
@@ -173,8 +174,11 @@ _add_methods_to_object(PyObject *module, PyObject *name, PyMethodDef *functions)
PyObject *
PyModule_Create2(struct PyModuleDef* module, int module_api_version)
{
- if (!_PyImport_IsInitialized(_PyInterpreterState_Get()))
- Py_FatalError("Python import machinery not initialized");
+ if (!_PyImport_IsInitialized(_PyInterpreterState_Get())) {
+ PyErr_SetString(PyExc_SystemError,
+ "Python import machinery not initialized");
+ return NULL;
+ }
return _PyModule_CreateInitialized(module, module_api_version);
}
@@ -458,7 +462,6 @@ int
PyModule_SetDocString(PyObject *m, const char *doc)
{
PyObject *v;
- _Py_IDENTIFIER(__doc__);
v = PyUnicode_FromString(doc);
if (v == NULL || _PyObject_SetAttrId(m, &PyId___doc__, v) != 0) {
@@ -485,7 +488,6 @@ PyModule_GetDict(PyObject *m)
PyObject*
PyModule_GetNameObject(PyObject *m)
{
- _Py_IDENTIFIER(__name__);
PyObject *d;
PyObject *name;
if (!PyModule_Check(m)) {
@@ -736,12 +738,10 @@ module_getattro(PyModuleObject *m, PyObject *name)
_Py_IDENTIFIER(__getattr__);
getattr = _PyDict_GetItemId(m->md_dict, &PyId___getattr__);
if (getattr) {
- return _PyObject_CallOneArg(getattr, name);
+ return PyObject_CallOneArg(getattr, name);
}
- _Py_IDENTIFIER(__name__);
mod_name = _PyDict_GetItemId(m->md_dict, &PyId___name__);
if (mod_name && PyUnicode_Check(mod_name)) {
- _Py_IDENTIFIER(__spec__);
Py_INCREF(mod_name);
PyObject *spec = _PyDict_GetItemId(m->md_dict, &PyId___spec__);
Py_XINCREF(spec);
diff --git a/Objects/namespaceobject.c b/Objects/namespaceobject.c
index ddad39a9107..5c7163f36dc 100644
--- a/Objects/namespaceobject.c
+++ b/Objects/namespaceobject.c
@@ -73,7 +73,7 @@ namespace_repr(PyObject *ns)
const char * name;
name = (Py_TYPE(ns) == &_PyNamespace_Type) ? "namespace"
- : ns->ob_type->tp_name;
+ : Py_TYPE(ns)->tp_name;
i = Py_ReprEnter(ns);
if (i != 0) {
diff --git a/Objects/object.c b/Objects/object.c
index 6fc114621c1..81de3b82530 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -6,6 +6,7 @@
#include "pycore_initconfig.h"
#include "pycore_object.h"
#include "pycore_pyerrors.h"
+#include "pycore_pylifecycle.h"
#include "pycore_pystate.h"
#include "frameobject.h"
#include "interpreteridobject.h"
@@ -32,8 +33,8 @@ _PyObject_CheckConsistency(PyObject *op, int check_content)
CHECK(!_PyObject_IsFreed(op));
CHECK(Py_REFCNT(op) >= 1);
- CHECK(op->ob_type != NULL);
- _PyType_CheckConsistency(op->ob_type);
+ CHECK(Py_TYPE(op) != NULL);
+ _PyType_CheckConsistency(Py_TYPE(op));
if (PyUnicode_Check(op)) {
_PyUnicode_CheckConsistency(op, check_content);
@@ -57,7 +58,7 @@ _Py_GetRefTotal(void)
Py_ssize_t total = _Py_RefTotal;
o = _PySet_Dummy;
if (o != NULL)
- total -= o->ob_refcnt;
+ total -= Py_REFCNT(o);
return total;
}
@@ -112,122 +113,6 @@ _Py_AddToAllObjects(PyObject *op, int force)
}
#endif /* Py_TRACE_REFS */
-#ifdef COUNT_ALLOCS
-static PyTypeObject *type_list;
-/* All types are added to type_list, at least when
- they get one object created. That makes them
- immortal, which unfortunately contributes to
- garbage itself. If unlist_types_without_objects
- is set, they will be removed from the type_list
- once the last object is deallocated. */
-static int unlist_types_without_objects;
-extern Py_ssize_t _Py_tuple_zero_allocs, _Py_fast_tuple_allocs;
-extern Py_ssize_t _Py_quick_int_allocs, _Py_quick_neg_int_allocs;
-extern Py_ssize_t _Py_null_strings, _Py_one_strings;
-void
-_Py_dump_counts(FILE* f)
-{
- PyInterpreterState *interp = _PyInterpreterState_Get();
- if (!interp->config.show_alloc_count) {
- return;
- }
-
- PyTypeObject *tp;
- for (tp = type_list; tp; tp = tp->tp_next)
- fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, "
- "freed: %" PY_FORMAT_SIZE_T "d, "
- "max in use: %" PY_FORMAT_SIZE_T "d\n",
- tp->tp_name, tp->tp_allocs, tp->tp_frees,
- tp->tp_maxalloc);
- fprintf(f, "fast tuple allocs: %" PY_FORMAT_SIZE_T "d, "
- "empty: %" PY_FORMAT_SIZE_T "d\n",
- _Py_fast_tuple_allocs, _Py_tuple_zero_allocs);
- fprintf(f, "fast int allocs: pos: %" PY_FORMAT_SIZE_T "d, "
- "neg: %" PY_FORMAT_SIZE_T "d\n",
- _Py_quick_int_allocs, _Py_quick_neg_int_allocs);
- fprintf(f, "null strings: %" PY_FORMAT_SIZE_T "d, "
- "1-strings: %" PY_FORMAT_SIZE_T "d\n",
- _Py_null_strings, _Py_one_strings);
-}
-
-PyObject *
-_Py_get_counts(void)
-{
- PyTypeObject *tp;
- PyObject *result;
- PyObject *v;
-
- result = PyList_New(0);
- if (result == NULL)
- return NULL;
- for (tp = type_list; tp; tp = tp->tp_next) {
- v = Py_BuildValue("(snnn)", tp->tp_name, tp->tp_allocs,
- tp->tp_frees, tp->tp_maxalloc);
- if (v == NULL) {
- Py_DECREF(result);
- return NULL;
- }
- if (PyList_Append(result, v) < 0) {
- Py_DECREF(v);
- Py_DECREF(result);
- return NULL;
- }
- Py_DECREF(v);
- }
- return result;
-}
-
-void
-_Py_inc_count(PyTypeObject *tp)
-{
- if (tp->tp_next == NULL && tp->tp_prev == NULL) {
- /* first time; insert in linked list */
- if (tp->tp_next != NULL) /* sanity check */
- Py_FatalError("XXX _Py_inc_count sanity check");
- if (type_list)
- type_list->tp_prev = tp;
- tp->tp_next = type_list;
- /* Note that as of Python 2.2, heap-allocated type objects
- * can go away, but this code requires that they stay alive
- * until program exit. That's why we're careful with
- * refcounts here. type_list gets a new reference to tp,
- * while ownership of the reference type_list used to hold
- * (if any) was transferred to tp->tp_next in the line above.
- * tp is thus effectively immortal after this.
- */
- Py_INCREF(tp);
- type_list = tp;
-#ifdef Py_TRACE_REFS
- /* Also insert in the doubly-linked list of all objects,
- * if not already there.
- */
- _Py_AddToAllObjects((PyObject *)tp, 0);
-#endif
- }
- tp->tp_allocs++;
- if (tp->tp_allocs - tp->tp_frees > tp->tp_maxalloc)
- tp->tp_maxalloc = tp->tp_allocs - tp->tp_frees;
-}
-
-void _Py_dec_count(PyTypeObject *tp)
-{
- tp->tp_frees++;
- if (unlist_types_without_objects &&
- tp->tp_allocs == tp->tp_frees) {
- /* unlink the type from type_list */
- if (tp->tp_prev)
- tp->tp_prev->tp_next = tp->tp_next;
- else
- type_list = tp->tp_next;
- if (tp->tp_next)
- tp->tp_next->tp_prev = tp->tp_prev;
- tp->tp_next = tp->tp_prev = NULL;
- Py_DECREF(tp);
- }
-}
-
-#endif
-
#ifdef Py_REF_DEBUG
/* Log a fatal error; doesn't return. */
void
@@ -254,10 +139,12 @@ Py_DecRef(PyObject *o)
PyObject *
PyObject_Init(PyObject *op, PyTypeObject *tp)
{
- if (op == NULL)
+ /* Any changes should be reflected in PyObject_INIT() macro */
+ if (op == NULL) {
return PyErr_NoMemory();
- /* Any changes should be reflected in PyObject_INIT (objimpl.h) */
- Py_TYPE(op) = tp;
+ }
+
+ Py_SET_TYPE(op, tp);
if (PyType_GetFlags(tp) & Py_TPFLAGS_HEAPTYPE) {
Py_INCREF(tp);
}
@@ -268,10 +155,12 @@ PyObject_Init(PyObject *op, PyTypeObject *tp)
PyVarObject *
PyObject_InitVar(PyVarObject *op, PyTypeObject *tp, Py_ssize_t size)
{
- if (op == NULL)
+ /* Any changes should be reflected in PyObject_INIT_VAR() macro */
+ if (op == NULL) {
return (PyVarObject *) PyErr_NoMemory();
- /* Any changes should be reflected in PyObject_INIT_VAR */
- Py_SIZE(op) = size;
+ }
+
+ Py_SET_SIZE(op, size);
PyObject_Init((PyObject *)op, tp);
return op;
}
@@ -317,48 +206,41 @@ PyObject_CallFinalizer(PyObject *self)
int
PyObject_CallFinalizerFromDealloc(PyObject *self)
{
- Py_ssize_t refcnt;
+ if (Py_REFCNT(self) != 0) {
+ _PyObject_ASSERT_FAILED_MSG(self,
+ "PyObject_CallFinalizerFromDealloc called "
+ "on object with a non-zero refcount");
+ }
/* Temporarily resurrect the object. */
- if (self->ob_refcnt != 0) {
- Py_FatalError("PyObject_CallFinalizerFromDealloc called on "
- "object with a non-zero refcount");
- }
- self->ob_refcnt = 1;
+ Py_SET_REFCNT(self, 1);
PyObject_CallFinalizer(self);
- /* Undo the temporary resurrection; can't use DECREF here, it would
- * cause a recursive call.
- */
_PyObject_ASSERT_WITH_MSG(self,
- self->ob_refcnt > 0,
+ Py_REFCNT(self) > 0,
"refcount is too small");
- if (--self->ob_refcnt == 0)
+
+ /* Undo the temporary resurrection; can't use DECREF here, it would
+ * cause a recursive call. */
+ Py_SET_REFCNT(self, Py_REFCNT(self) - 1);
+ if (Py_REFCNT(self) == 0) {
return 0; /* this is the normal path out */
+ }
/* tp_finalize resurrected it! Make it look like the original Py_DECREF
- * never happened.
- */
- refcnt = self->ob_refcnt;
+ * never happened. */
+ Py_ssize_t refcnt = Py_REFCNT(self);
_Py_NewReference(self);
- self->ob_refcnt = refcnt;
+ Py_SET_REFCNT(self, refcnt);
_PyObject_ASSERT(self,
(!PyType_IS_GC(Py_TYPE(self))
|| _PyObject_GC_IS_TRACKED(self)));
- /* If Py_REF_DEBUG, _Py_NewReference bumped _Py_RefTotal, so
- * we need to undo that. */
- _Py_DEC_REFTOTAL;
- /* If Py_TRACE_REFS, _Py_NewReference re-added self to the object
- * chain, so no more to do there.
- * If COUNT_ALLOCS, the original decref bumped tp_frees, and
- * _Py_NewReference bumped tp_allocs: both of those need to be
- * undone.
- */
-#ifdef COUNT_ALLOCS
- --Py_TYPE(self)->tp_frees;
- --Py_TYPE(self)->tp_allocs;
+ /* If Py_REF_DEBUG macro is defined, _Py_NewReference() increased
+ _Py_RefTotal, so we need to undo that. */
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
#endif
return -1;
}
@@ -382,12 +264,12 @@ PyObject_Print(PyObject *op, FILE *fp, int flags)
Py_END_ALLOW_THREADS
}
else {
- if (op->ob_refcnt <= 0) {
+ if (Py_REFCNT(op) <= 0) {
/* XXX(twouters) cast refcount to long until %zd is
universally available */
Py_BEGIN_ALLOW_THREADS
fprintf(fp, "",
- (long)op->ob_refcnt, (void *)op);
+ (long)Py_REFCNT(op), (void *)op);
Py_END_ALLOW_THREADS
}
else {
@@ -417,7 +299,7 @@ PyObject_Print(PyObject *op, FILE *fp, int flags)
else {
PyErr_Format(PyExc_TypeError,
"str() or repr() returned '%.100s'",
- s->ob_type->tp_name);
+ Py_TYPE(s)->tp_name);
ret = -1;
}
Py_XDECREF(s);
@@ -449,7 +331,7 @@ _Py_BreakPoint(void)
int
_PyObject_IsFreed(PyObject *op)
{
- if (_PyMem_IsPtrFreed(op) || _PyMem_IsPtrFreed(op->ob_type)) {
+ if (_PyMem_IsPtrFreed(op) || _PyMem_IsPtrFreed(Py_TYPE(op))) {
return 1;
}
/* ignore op->ob_ref: its value can have be modified
@@ -482,7 +364,7 @@ _PyObject_Dump(PyObject* op)
fprintf(stderr, "object address : %p\n", (void *)op);
/* XXX(twouters) cast refcount to long until %zd is
universally available */
- fprintf(stderr, "object refcount : %ld\n", (long)op->ob_refcnt);
+ fprintf(stderr, "object refcount : %ld\n", (long)Py_REFCNT(op));
fflush(stderr);
PyTypeObject *type = Py_TYPE(op);
@@ -524,7 +406,7 @@ PyObject_Repr(PyObject *v)
return PyUnicode_FromString("");
if (Py_TYPE(v)->tp_repr == NULL)
return PyUnicode_FromFormat("<%s object at %p>",
- v->ob_type->tp_name, v);
+ Py_TYPE(v)->tp_name, v);
PyThreadState *tstate = _PyThreadState_GET();
#ifdef Py_DEBUG
@@ -540,7 +422,7 @@ PyObject_Repr(PyObject *v)
" while getting the repr of an object")) {
return NULL;
}
- res = (*v->ob_type->tp_repr)(v);
+ res = (*Py_TYPE(v)->tp_repr)(v);
_Py_LeaveRecursiveCall(tstate);
if (res == NULL) {
@@ -549,7 +431,7 @@ PyObject_Repr(PyObject *v)
if (!PyUnicode_Check(res)) {
_PyErr_Format(tstate, PyExc_TypeError,
"__repr__ returned non-string (type %.200s)",
- res->ob_type->tp_name);
+ Py_TYPE(res)->tp_name);
Py_DECREF(res);
return NULL;
}
@@ -783,22 +665,22 @@ do_richcompare(PyThreadState *tstate, PyObject *v, PyObject *w, int op)
PyObject *res;
int checked_reverse_op = 0;
- if (v->ob_type != w->ob_type &&
- PyType_IsSubtype(w->ob_type, v->ob_type) &&
- (f = w->ob_type->tp_richcompare) != NULL) {
+ if (Py_TYPE(v) != Py_TYPE(w) &&
+ PyType_IsSubtype(Py_TYPE(w), Py_TYPE(v)) &&
+ (f = Py_TYPE(w)->tp_richcompare) != NULL) {
checked_reverse_op = 1;
res = (*f)(w, v, _Py_SwappedOp[op]);
if (res != Py_NotImplemented)
return res;
Py_DECREF(res);
}
- if ((f = v->ob_type->tp_richcompare) != NULL) {
+ if ((f = Py_TYPE(v)->tp_richcompare) != NULL) {
res = (*f)(v, w, op);
if (res != Py_NotImplemented)
return res;
Py_DECREF(res);
}
- if (!checked_reverse_op && (f = w->ob_type->tp_richcompare) != NULL) {
+ if (!checked_reverse_op && (f = Py_TYPE(w)->tp_richcompare) != NULL) {
res = (*f)(w, v, _Py_SwappedOp[op]);
if (res != Py_NotImplemented)
return res;
@@ -817,8 +699,8 @@ do_richcompare(PyThreadState *tstate, PyObject *v, PyObject *w, int op)
_PyErr_Format(tstate, PyExc_TypeError,
"'%s' not supported between instances of '%.100s' and '%.100s'",
opstrings[op],
- v->ob_type->tp_name,
- w->ob_type->tp_name);
+ Py_TYPE(v)->tp_name,
+ Py_TYPE(w)->tp_name);
return NULL;
}
Py_INCREF(res);
@@ -1006,7 +888,7 @@ PyObject_GetAttr(PyObject *v, PyObject *name)
if (!PyUnicode_Check(name)) {
PyErr_Format(PyExc_TypeError,
"attribute name must be string, not '%.200s'",
- name->ob_type->tp_name);
+ Py_TYPE(name)->tp_name);
return NULL;
}
if (tp->tp_getattro != NULL)
@@ -1031,7 +913,7 @@ _PyObject_LookupAttr(PyObject *v, PyObject *name, PyObject **result)
if (!PyUnicode_Check(name)) {
PyErr_Format(PyExc_TypeError,
"attribute name must be string, not '%.200s'",
- name->ob_type->tp_name);
+ Py_TYPE(name)->tp_name);
*result = NULL;
return -1;
}
@@ -1107,7 +989,7 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
if (!PyUnicode_Check(name)) {
PyErr_Format(PyExc_TypeError,
"attribute name must be string, not '%.200s'",
- name->ob_type->tp_name);
+ Py_TYPE(name)->tp_name);
return -1;
}
Py_INCREF(name);
@@ -1129,7 +1011,7 @@ PyObject_SetAttr(PyObject *v, PyObject *name, PyObject *value)
return err;
}
Py_DECREF(name);
- _PyObject_ASSERT(name, name->ob_refcnt >= 1);
+ _PyObject_ASSERT(name, Py_REFCNT(name) >= 1);
if (tp->tp_getattr == NULL && tp->tp_getattro == NULL)
PyErr_Format(PyExc_TypeError,
"'%.100s' object has no attributes "
@@ -1159,13 +1041,11 @@ _PyObject_GetDictPtr(PyObject *obj)
if (dictoffset == 0)
return NULL;
if (dictoffset < 0) {
- Py_ssize_t tsize;
- size_t size;
-
- tsize = ((PyVarObject *)obj)->ob_size;
- if (tsize < 0)
+ Py_ssize_t tsize = Py_SIZE(obj);
+ if (tsize < 0) {
tsize = -tsize;
- size = _PyObject_VAR_SIZE(tp, tsize);
+ }
+ size_t size = _PyObject_VAR_SIZE(tp, tsize);
dictoffset += (long)size;
_PyObject_ASSERT(obj, dictoffset > 0);
@@ -1233,9 +1113,9 @@ _PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method)
if (PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)) {
meth_found = 1;
} else {
- f = descr->ob_type->tp_descr_get;
+ f = Py_TYPE(descr)->tp_descr_get;
if (f != NULL && PyDescr_IsData(descr)) {
- *method = f(descr, obj, (PyObject *)obj->ob_type);
+ *method = f(descr, obj, (PyObject *)Py_TYPE(obj));
Py_DECREF(descr);
return 0;
}
@@ -1306,7 +1186,7 @@ _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name,
if (!PyUnicode_Check(name)){
PyErr_Format(PyExc_TypeError,
"attribute name must be string, not '%.200s'",
- name->ob_type->tp_name);
+ Py_TYPE(name)->tp_name);
return NULL;
}
Py_INCREF(name);
@@ -1321,9 +1201,9 @@ _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name,
f = NULL;
if (descr != NULL) {
Py_INCREF(descr);
- f = descr->ob_type->tp_descr_get;
+ f = Py_TYPE(descr)->tp_descr_get;
if (f != NULL && PyDescr_IsData(descr)) {
- res = f(descr, obj, (PyObject *)obj->ob_type);
+ res = f(descr, obj, (PyObject *)Py_TYPE(obj));
if (res == NULL && suppress &&
PyErr_ExceptionMatches(PyExc_AttributeError)) {
PyErr_Clear();
@@ -1337,13 +1217,11 @@ _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name,
dictoffset = tp->tp_dictoffset;
if (dictoffset != 0) {
if (dictoffset < 0) {
- Py_ssize_t tsize;
- size_t size;
-
- tsize = ((PyVarObject *)obj)->ob_size;
- if (tsize < 0)
+ Py_ssize_t tsize = Py_SIZE(obj);
+ if (tsize < 0) {
tsize = -tsize;
- size = _PyObject_VAR_SIZE(tp, tsize);
+ }
+ size_t size = _PyObject_VAR_SIZE(tp, tsize);
_PyObject_ASSERT(obj, size <= PY_SSIZE_T_MAX);
dictoffset += (Py_ssize_t)size;
@@ -1420,7 +1298,7 @@ _PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
if (!PyUnicode_Check(name)){
PyErr_Format(PyExc_TypeError,
"attribute name must be string, not '%.200s'",
- name->ob_type->tp_name);
+ Py_TYPE(name)->tp_name);
return -1;
}
@@ -1433,7 +1311,7 @@ _PyObject_GenericSetAttrWithDict(PyObject *obj, PyObject *name,
if (descr != NULL) {
Py_INCREF(descr);
- f = descr->ob_type->tp_descr_set;
+ f = Py_TYPE(descr)->tp_descr_set;
if (f != NULL) {
res = f(descr, obj, value);
goto done;
@@ -1526,15 +1404,15 @@ PyObject_IsTrue(PyObject *v)
return 0;
if (v == Py_None)
return 0;
- else if (v->ob_type->tp_as_number != NULL &&
- v->ob_type->tp_as_number->nb_bool != NULL)
- res = (*v->ob_type->tp_as_number->nb_bool)(v);
- else if (v->ob_type->tp_as_mapping != NULL &&
- v->ob_type->tp_as_mapping->mp_length != NULL)
- res = (*v->ob_type->tp_as_mapping->mp_length)(v);
- else if (v->ob_type->tp_as_sequence != NULL &&
- v->ob_type->tp_as_sequence->sq_length != NULL)
- res = (*v->ob_type->tp_as_sequence->sq_length)(v);
+ else if (Py_TYPE(v)->tp_as_number != NULL &&
+ Py_TYPE(v)->tp_as_number->nb_bool != NULL)
+ res = (*Py_TYPE(v)->tp_as_number->nb_bool)(v);
+ else if (Py_TYPE(v)->tp_as_mapping != NULL &&
+ Py_TYPE(v)->tp_as_mapping->mp_length != NULL)
+ res = (*Py_TYPE(v)->tp_as_mapping->mp_length)(v);
+ else if (Py_TYPE(v)->tp_as_sequence != NULL &&
+ Py_TYPE(v)->tp_as_sequence->sq_length != NULL)
+ res = (*Py_TYPE(v)->tp_as_sequence->sq_length)(v);
else
return 1;
/* if it is negative, it should be either -1 or -2 */
@@ -1561,7 +1439,7 @@ PyCallable_Check(PyObject *x)
{
if (x == NULL)
return 0;
- return x->ob_type->tp_call != NULL;
+ return Py_TYPE(x)->tp_call != NULL;
}
@@ -1648,7 +1526,7 @@ none_repr(PyObject *op)
}
/* ARGUSED */
-static void
+static void _Py_NO_RETURN
none_dealloc(PyObject* ignore)
{
/* This should never get called, but we also don't want to SEGV if
@@ -1786,7 +1664,7 @@ notimplemented_new(PyTypeObject *type, PyObject *args, PyObject *kwargs)
Py_RETURN_NOTIMPLEMENTED;
}
-static void
+static void _Py_NO_RETURN
notimplemented_dealloc(PyObject* ignore)
{
/* This should never get called, but we also don't want to SEGV if
@@ -1844,6 +1722,11 @@ PyObject _Py_NotImplementedStruct = {
PyStatus
_PyTypes_Init(void)
{
+ PyStatus status = _PyTypes_InitSlotDefs();
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
+
#define INIT_TYPE(TYPE, NAME) \
do { \
if (PyType_Ready(TYPE) < 0) { \
@@ -1923,50 +1806,53 @@ _PyTypes_Init(void)
}
-#ifdef Py_TRACE_REFS
-
void
_Py_NewReference(PyObject *op)
{
if (_Py_tracemalloc_config.tracing) {
_PyTraceMalloc_NewReference(op);
}
- _Py_INC_REFTOTAL;
- op->ob_refcnt = 1;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal++;
+#endif
+ Py_SET_REFCNT(op, 1);
+#ifdef Py_TRACE_REFS
_Py_AddToAllObjects(op, 1);
- _Py_INC_TPALLOCS(op);
+#endif
}
+
+#ifdef Py_TRACE_REFS
void
_Py_ForgetReference(PyObject *op)
{
+ if (Py_REFCNT(op) < 0) {
+ _PyObject_ASSERT_FAILED_MSG(op, "negative refcnt");
+ }
+
+ if (op == &refchain ||
+ op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op)
+ {
+ _PyObject_ASSERT_FAILED_MSG(op, "invalid object chain");
+ }
+
#ifdef SLOW_UNREF_CHECK
PyObject *p;
-#endif
- if (op->ob_refcnt < 0)
- Py_FatalError("UNREF negative refcnt");
- if (op == &refchain ||
- op->_ob_prev->_ob_next != op || op->_ob_next->_ob_prev != op) {
- fprintf(stderr, "* ob\n");
- _PyObject_Dump(op);
- fprintf(stderr, "* op->_ob_prev->_ob_next\n");
- _PyObject_Dump(op->_ob_prev->_ob_next);
- fprintf(stderr, "* op->_ob_next->_ob_prev\n");
- _PyObject_Dump(op->_ob_next->_ob_prev);
- Py_FatalError("UNREF invalid object");
- }
-#ifdef SLOW_UNREF_CHECK
for (p = refchain._ob_next; p != &refchain; p = p->_ob_next) {
- if (p == op)
+ if (p == op) {
break;
+ }
+ }
+ if (p == &refchain) {
+ /* Not found */
+ _PyObject_ASSERT_FAILED_MSG(op,
+ "object not found in the objects list");
}
- if (p == &refchain) /* Not found */
- Py_FatalError("UNREF unknown object");
#endif
+
op->_ob_next->_ob_prev = op->_ob_prev;
op->_ob_prev->_ob_next = op->_ob_next;
op->_ob_next = op->_ob_prev = NULL;
- _Py_INC_TPFREES(op);
}
/* Print all live objects. Because PyObject_Print is called, the
@@ -1978,7 +1864,7 @@ _Py_PrintReferences(FILE *fp)
PyObject *op;
fprintf(fp, "Remaining objects:\n");
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next) {
- fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, op->ob_refcnt);
+ fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] ", (void *)op, Py_REFCNT(op));
if (PyObject_Print(op, fp, 0) != 0)
PyErr_Clear();
putc('\n', fp);
@@ -1995,7 +1881,7 @@ _Py_PrintReferenceAddresses(FILE *fp)
fprintf(fp, "Remaining object addresses:\n");
for (op = refchain._ob_next; op != &refchain; op = op->_ob_next)
fprintf(fp, "%p [%" PY_FORMAT_SIZE_T "d] %s\n", (void *)op,
- op->ob_refcnt, Py_TYPE(op)->tp_name);
+ Py_REFCNT(op), Py_TYPE(op)->tp_name);
}
PyObject *
@@ -2136,7 +2022,7 @@ _PyTrash_deposit_object(PyObject *op)
_PyObject_ASSERT(op, PyObject_IS_GC(op));
_PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
- _PyObject_ASSERT(op, op->ob_refcnt == 0);
+ _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
_PyGCHead_SET_PREV(_Py_AS_GC(op), gcstate->trash_delete_later);
gcstate->trash_delete_later = op;
}
@@ -2148,7 +2034,7 @@ _PyTrash_thread_deposit_object(PyObject *op)
PyThreadState *tstate = _PyThreadState_GET();
_PyObject_ASSERT(op, PyObject_IS_GC(op));
_PyObject_ASSERT(op, !_PyObject_GC_IS_TRACKED(op));
- _PyObject_ASSERT(op, op->ob_refcnt == 0);
+ _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
_PyGCHead_SET_PREV(_Py_AS_GC(op), tstate->trash_delete_later);
tstate->trash_delete_later = op;
}
@@ -2175,7 +2061,7 @@ _PyTrash_destroy_chain(void)
* assorted non-release builds calling Py_DECREF again ends
* up distorting allocation statistics.
*/
- _PyObject_ASSERT(op, op->ob_refcnt == 0);
+ _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
++gcstate->trash_delete_nesting;
(*dealloc)(op);
--gcstate->trash_delete_nesting;
@@ -2213,7 +2099,7 @@ _PyTrash_thread_destroy_chain(void)
* assorted non-release builds calling Py_DECREF again ends
* up distorting allocation statistics.
*/
- _PyObject_ASSERT(op, op->ob_refcnt == 0);
+ _PyObject_ASSERT(op, Py_REFCNT(op) == 0);
(*dealloc)(op);
assert(tstate->trash_delete_nesting == 1);
}
@@ -2221,7 +2107,7 @@ _PyTrash_thread_destroy_chain(void)
}
-void
+void _Py_NO_RETURN
_PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
const char *file, int line, const char *function)
{
@@ -2277,16 +2163,12 @@ _PyObject_AssertFailed(PyObject *obj, const char *expr, const char *msg,
}
-#undef _Py_Dealloc
-
void
_Py_Dealloc(PyObject *op)
{
destructor dealloc = Py_TYPE(op)->tp_dealloc;
#ifdef Py_TRACE_REFS
_Py_ForgetReference(op);
-#else
- _Py_INC_TPFREES(op);
#endif
(*dealloc)(op);
}
diff --git a/Objects/obmalloc.c b/Objects/obmalloc.c
index 722e91e3db4..3881ff17e06 100644
--- a/Objects/obmalloc.c
+++ b/Objects/obmalloc.c
@@ -31,8 +31,8 @@ static void _PyMem_SetupDebugHooksDomain(PyMemAllocatorDomain domain);
#if defined(__has_feature) /* Clang */
# if __has_feature(address_sanitizer) /* is ASAN enabled? */
-# define _Py_NO_ADDRESS_SAFETY_ANALYSIS \
- __attribute__((no_address_safety_analysis))
+# define _Py_NO_SANITIZE_ADDRESS \
+ __attribute__((no_sanitize("address")))
# endif
# if __has_feature(thread_sanitizer) /* is TSAN enabled? */
# define _Py_NO_SANITIZE_THREAD __attribute__((no_sanitize_thread))
@@ -42,8 +42,8 @@ static void _PyMem_SetupDebugHooksDomain(PyMemAllocatorDomain domain);
# endif
#elif defined(__GNUC__)
# if defined(__SANITIZE_ADDRESS__) /* GCC 4.8+, is ASAN enabled? */
-# define _Py_NO_ADDRESS_SAFETY_ANALYSIS \
- __attribute__((no_address_safety_analysis))
+# define _Py_NO_SANITIZE_ADDRESS \
+ __attribute__((no_sanitize_address))
# endif
// TSAN is supported since GCC 5.1, but __SANITIZE_THREAD__ macro
// is provided only since GCC 7.
@@ -52,8 +52,8 @@ static void _PyMem_SetupDebugHooksDomain(PyMemAllocatorDomain domain);
# endif
#endif
-#ifndef _Py_NO_ADDRESS_SAFETY_ANALYSIS
-# define _Py_NO_ADDRESS_SAFETY_ANALYSIS
+#ifndef _Py_NO_SANITIZE_ADDRESS
+# define _Py_NO_SANITIZE_ADDRESS
#endif
#ifndef _Py_NO_SANITIZE_THREAD
# define _Py_NO_SANITIZE_THREAD
@@ -1407,7 +1407,7 @@ obmalloc controls. Since this test is needed at every entry point, it's
extremely desirable that it be this fast.
*/
-static bool _Py_NO_ADDRESS_SAFETY_ANALYSIS
+static bool _Py_NO_SANITIZE_ADDRESS
_Py_NO_SANITIZE_THREAD
_Py_NO_SANITIZE_MEMORY
address_in_range(void *p, poolp pool)
diff --git a/Objects/odictobject.c b/Objects/odictobject.c
index dfbd30a976c..f412220e8cc 100644
--- a/Objects/odictobject.c
+++ b/Objects/odictobject.c
@@ -526,6 +526,8 @@ struct _odictnode {
#define _odict_FOREACH(od, node) \
for (node = _odict_FIRST(od); node != NULL; node = _odictnode_NEXT(node))
+_Py_IDENTIFIER(items);
+
/* Return the index into the hash table, regardless of a valid node. */
static Py_ssize_t
_odict_get_index_raw(PyODictObject *od, PyObject *key, Py_hash_t hash)
@@ -896,7 +898,6 @@ static PyObject *
odict_reduce(register PyODictObject *od, PyObject *Py_UNUSED(ignored))
{
_Py_IDENTIFIER(__dict__);
- _Py_IDENTIFIER(items);
PyObject *dict = NULL, *result = NULL;
PyObject *items_iter, *items, *args = NULL;
@@ -1375,7 +1376,6 @@ static PyObject *
odict_repr(PyODictObject *self)
{
int i;
- _Py_IDENTIFIER(items);
PyObject *pieces = NULL, *result = NULL;
if (PyODict_SIZE(self) == 0)
@@ -1417,8 +1417,9 @@ odict_repr(PyODictObject *self)
}
count++;
}
- if (count < PyList_GET_SIZE(pieces))
- Py_SIZE(pieces) = count;
+ if (count < PyList_GET_SIZE(pieces)) {
+ Py_SET_SIZE(pieces, count);
+ }
}
else {
PyObject *items = _PyObject_CallMethodIdNoArgs((PyObject *)self,
@@ -2195,7 +2196,6 @@ mutablemapping_update(PyObject *self, PyObject *args, PyObject *kwargs)
{
int res = 0;
Py_ssize_t len;
- _Py_IDENTIFIER(items);
_Py_IDENTIFIER(keys);
/* first handle args, if any */
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index 239ace6f423..343a80c76b0 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -18,6 +18,8 @@ typedef struct {
PyObject *length;
} rangeobject;
+_Py_IDENTIFIER(iter);
+
/* Helper function for validating step. Always returns a new reference or
NULL on error.
*/
@@ -77,37 +79,52 @@ range_new(PyTypeObject *type, PyObject *args, PyObject *kw)
if (!_PyArg_NoKeywords("range", kw))
return NULL;
- if (PyTuple_Size(args) <= 1) {
- if (!PyArg_UnpackTuple(args, "range", 1, 1, &stop))
- return NULL;
- stop = PyNumber_Index(stop);
- if (!stop)
- return NULL;
- Py_INCREF(_PyLong_Zero);
- start = _PyLong_Zero;
- Py_INCREF(_PyLong_One);
- step = _PyLong_One;
- }
- else {
- if (!PyArg_UnpackTuple(args, "range", 2, 3,
- &start, &stop, &step))
- return NULL;
+ Py_ssize_t num_args = PyTuple_GET_SIZE(args);
+ switch (num_args) {
+ case 3:
+ step = PyTuple_GET_ITEM(args, 2);
+ /* fallthrough */
+ case 2:
+ start = PyTuple_GET_ITEM(args, 0);
+ start = PyNumber_Index(start);
+ if (!start) {
+ return NULL;
+ }
- /* Convert borrowed refs to owned refs */
- start = PyNumber_Index(start);
- if (!start)
+ stop = PyTuple_GET_ITEM(args, 1);
+ stop = PyNumber_Index(stop);
+ if (!stop) {
+ Py_DECREF(start);
+ return NULL;
+ }
+
+ step = validate_step(step);
+ if (!step) {
+ Py_DECREF(start);
+ Py_DECREF(stop);
+ return NULL;
+ }
+ break;
+ case 1:
+ stop = PyTuple_GET_ITEM(args, 0);
+ stop = PyNumber_Index(stop);
+ if (!stop) {
+ return NULL;
+ }
+ Py_INCREF(_PyLong_Zero);
+ start = _PyLong_Zero;
+ Py_INCREF(_PyLong_One);
+ step = _PyLong_One;
+ break;
+ case 0:
+ PyErr_SetString(PyExc_TypeError,
+ "range expected at least 1 argument, got 0");
return NULL;
- stop = PyNumber_Index(stop);
- if (!stop) {
- Py_DECREF(start);
+ default:
+ PyErr_Format(PyExc_TypeError,
+ "range expected at most 3 arguments, got %zd",
+ num_args);
return NULL;
- }
- step = validate_step(step); /* Caution, this can clear exceptions */
- if (!step) {
- Py_DECREF(start);
- Py_DECREF(stop);
- return NULL;
- }
}
obj = make_range_object(type, start, stop, step);
@@ -614,7 +631,7 @@ range_subscript(rangeobject* self, PyObject* item)
}
PyErr_Format(PyExc_TypeError,
"range indices must be integers or slices, not %.200s",
- item->ob_type->tp_name);
+ Py_TYPE(item)->tp_name);
return NULL;
}
@@ -742,7 +759,6 @@ PyDoc_STRVAR(length_hint_doc,
static PyObject *
rangeiter_reduce(rangeiterobject *r, PyObject *Py_UNUSED(ignored))
{
- _Py_IDENTIFIER(iter);
PyObject *start=NULL, *stop=NULL, *step=NULL;
PyObject *range;
@@ -900,7 +916,6 @@ longrangeiter_len(longrangeiterobject *r, PyObject *no_args)
static PyObject *
longrangeiter_reduce(longrangeiterobject *r, PyObject *Py_UNUSED(ignored))
{
- _Py_IDENTIFIER(iter);
PyObject *product, *stop=NULL;
PyObject *range;
diff --git a/Objects/setobject.c b/Objects/setobject.c
index 924885d7505..bb7c0b8f045 100644
--- a/Objects/setobject.c
+++ b/Objects/setobject.c
@@ -2529,7 +2529,7 @@ dummy_repr(PyObject *op)
return PyUnicode_FromString("");
}
-static void
+static void _Py_NO_RETURN
dummy_dealloc(PyObject* ignore)
{
Py_FatalError("deallocating ");
diff --git a/Objects/stringlib/asciilib.h b/Objects/stringlib/asciilib.h
index d0fc18d22fa..e69a2c076e3 100644
--- a/Objects/stringlib/asciilib.h
+++ b/Objects/stringlib/asciilib.h
@@ -18,12 +18,9 @@
#define STRINGLIB_TODECIMAL Py_UNICODE_TODECIMAL
#define STRINGLIB_STR PyUnicode_1BYTE_DATA
#define STRINGLIB_LEN PyUnicode_GET_LENGTH
-#define STRINGLIB_NEW(STR,LEN) _PyUnicode_FromASCII((char*)(STR),(LEN))
+#define STRINGLIB_NEW(STR,LEN) _PyUnicode_FromASCII((const char*)(STR),(LEN))
#define STRINGLIB_CHECK PyUnicode_Check
#define STRINGLIB_CHECK_EXACT PyUnicode_CheckExact
#define STRINGLIB_TOSTR PyObject_Str
#define STRINGLIB_TOASCII PyObject_ASCII
-
-#define _Py_InsertThousandsGrouping _PyUnicode_ascii_InsertThousandsGrouping
-
diff --git a/Objects/stringlib/codecs.h b/Objects/stringlib/codecs.h
index d6f2b98f2b3..269a5581f70 100644
--- a/Objects/stringlib/codecs.h
+++ b/Objects/stringlib/codecs.h
@@ -46,7 +46,7 @@ STRINGLIB(utf8_decode)(const char **inptr, const char *end,
/* Read a whole long at a time (either 4 or 8 bytes),
and do a fast unrolled copy if it only contains ASCII
characters. */
- unsigned long value = *(unsigned long *) _s;
+ unsigned long value = *(const unsigned long *) _s;
if (value & ASCII_CHAR_MASK)
break;
#if PY_LITTLE_ENDIAN
@@ -515,7 +515,7 @@ STRINGLIB(utf16_decode)(const unsigned char **inptr, const unsigned char *e,
/* Fast path for runs of in-range non-surrogate chars. */
const unsigned char *_q = q;
while (_q < aligned_end) {
- unsigned long block = * (unsigned long *) _q;
+ unsigned long block = * (const unsigned long *) _q;
if (native_ordering) {
/* Can use buffer directly */
if (block & FAST_CHAR_MASK)
diff --git a/Objects/stringlib/ctype.h b/Objects/stringlib/ctype.h
index 843cfa22a84..9b319b07d11 100644
--- a/Objects/stringlib/ctype.h
+++ b/Objects/stringlib/ctype.h
@@ -2,7 +2,7 @@
# error "ctype.h only compatible with byte-wise strings"
#endif
-#include "bytes_methods.h"
+#include "pycore_bytes_methods.h"
static PyObject*
stringlib_isspace(PyObject *self, PyObject *Py_UNUSED(ignored))
diff --git a/Objects/stringlib/find_max_char.h b/Objects/stringlib/find_max_char.h
index 8ccbc309446..f4e0a7761d3 100644
--- a/Objects/stringlib/find_max_char.h
+++ b/Objects/stringlib/find_max_char.h
@@ -28,7 +28,7 @@ STRINGLIB(find_max_char)(const STRINGLIB_CHAR *begin, const STRINGLIB_CHAR *end)
/* Help register allocation */
const unsigned char *_p = p;
while (_p < aligned_end) {
- unsigned long value = *(unsigned long *) _p;
+ unsigned long value = *(const unsigned long *) _p;
if (value & UCS1_ASCII_CHAR_MASK)
return 255;
_p += SIZEOF_LONG;
diff --git a/Objects/stringlib/join.h b/Objects/stringlib/join.h
index 6f314e1524e..8ad598ad5c9 100644
--- a/Objects/stringlib/join.h
+++ b/Objects/stringlib/join.h
@@ -18,6 +18,9 @@ STRINGLIB(bytes_join)(PyObject *sep, PyObject *iterable)
Py_buffer *buffers = NULL;
#define NB_STATIC_BUFFERS 10
Py_buffer static_buffers[NB_STATIC_BUFFERS];
+#define GIL_THRESHOLD 1048576
+ int drop_gil = 1;
+ PyThreadState *save = NULL;
seq = PySequence_Fast(iterable, "can only join an iterable");
if (seq == NULL) {
@@ -65,12 +68,21 @@ STRINGLIB(bytes_join)(PyObject *sep, PyObject *iterable)
buffers[i].buf = PyBytes_AS_STRING(item);
buffers[i].len = PyBytes_GET_SIZE(item);
}
- else if (PyObject_GetBuffer(item, &buffers[i], PyBUF_SIMPLE) != 0) {
- PyErr_Format(PyExc_TypeError,
- "sequence item %zd: expected a bytes-like object, "
- "%.80s found",
- i, Py_TYPE(item)->tp_name);
- goto error;
+ else {
+ if (PyObject_GetBuffer(item, &buffers[i], PyBUF_SIMPLE) != 0) {
+ PyErr_Format(PyExc_TypeError,
+ "sequence item %zd: expected a bytes-like object, "
+ "%.80s found",
+ i, Py_TYPE(item)->tp_name);
+ goto error;
+ }
+ /* If the backing objects are mutable, then dropping the GIL
+ * opens up race conditions where another thread tries to modify
+ * the object which we hold a buffer on it. Such code has data
+ * races anyway, but this is a conservative approach that avoids
+ * changing the behaviour of that data race.
+ */
+ drop_gil = 0;
}
nbufs = i + 1; /* for error cleanup */
itemlen = buffers[i].len;
@@ -102,6 +114,12 @@ STRINGLIB(bytes_join)(PyObject *sep, PyObject *iterable)
/* Catenate everything. */
p = STRINGLIB_STR(res);
+ if (sz < GIL_THRESHOLD) {
+ drop_gil = 0; /* Benefits are likely outweighed by the overheads */
+ }
+ if (drop_gil) {
+ save = PyEval_SaveThread();
+ }
if (!seplen) {
/* fast path */
for (i = 0; i < nbufs; i++) {
@@ -110,19 +128,23 @@ STRINGLIB(bytes_join)(PyObject *sep, PyObject *iterable)
memcpy(p, q, n);
p += n;
}
- goto done;
}
- for (i = 0; i < nbufs; i++) {
- Py_ssize_t n;
- char *q;
- if (i) {
- memcpy(p, sepstr, seplen);
- p += seplen;
+ else {
+ for (i = 0; i < nbufs; i++) {
+ Py_ssize_t n;
+ char *q;
+ if (i) {
+ memcpy(p, sepstr, seplen);
+ p += seplen;
+ }
+ n = buffers[i].len;
+ q = buffers[i].buf;
+ memcpy(p, q, n);
+ p += n;
}
- n = buffers[i].len;
- q = buffers[i].buf;
- memcpy(p, q, n);
- p += n;
+ }
+ if (drop_gil) {
+ PyEval_RestoreThread(save);
}
goto done;
@@ -138,3 +160,4 @@ done:
}
#undef NB_STATIC_BUFFERS
+#undef GIL_THRESHOLD
diff --git a/Objects/stringlib/split.h b/Objects/stringlib/split.h
index 31f77a77243..068047f9874 100644
--- a/Objects/stringlib/split.h
+++ b/Objects/stringlib/split.h
@@ -48,7 +48,7 @@
/* Always force the list to the expected size. */
-#define FIX_PREALLOC_SIZE(list) Py_SIZE(list) = count
+#define FIX_PREALLOC_SIZE(list) Py_SET_SIZE(list, count)
Py_LOCAL_INLINE(PyObject *)
STRINGLIB(split_whitespace)(PyObject* str_obj,
diff --git a/Objects/stringlib/ucs1lib.h b/Objects/stringlib/ucs1lib.h
index ce1eb57f0d7..bc4b104f112 100644
--- a/Objects/stringlib/ucs1lib.h
+++ b/Objects/stringlib/ucs1lib.h
@@ -24,7 +24,3 @@
#define STRINGLIB_TOSTR PyObject_Str
#define STRINGLIB_TOASCII PyObject_ASCII
-
-#define _Py_InsertThousandsGrouping _PyUnicode_ucs1_InsertThousandsGrouping
-
-
diff --git a/Objects/stringlib/ucs2lib.h b/Objects/stringlib/ucs2lib.h
index f900cb65f8c..86a1dff1b56 100644
--- a/Objects/stringlib/ucs2lib.h
+++ b/Objects/stringlib/ucs2lib.h
@@ -24,6 +24,3 @@
#define STRINGLIB_TOSTR PyObject_Str
#define STRINGLIB_TOASCII PyObject_ASCII
-
-#define _Py_InsertThousandsGrouping _PyUnicode_ucs2_InsertThousandsGrouping
-
diff --git a/Objects/stringlib/ucs4lib.h b/Objects/stringlib/ucs4lib.h
index 86a480f1e3a..3c32a93c96a 100644
--- a/Objects/stringlib/ucs4lib.h
+++ b/Objects/stringlib/ucs4lib.h
@@ -25,5 +25,3 @@
#define STRINGLIB_TOSTR PyObject_Str
#define STRINGLIB_TOASCII PyObject_ASCII
-#define _Py_InsertThousandsGrouping _PyUnicode_ucs4_InsertThousandsGrouping
-
diff --git a/Objects/stringlib/undef.h b/Objects/stringlib/undef.h
index f9d3f1d3328..c41e254fde6 100644
--- a/Objects/stringlib/undef.h
+++ b/Objects/stringlib/undef.h
@@ -6,6 +6,5 @@
#undef STRINGLIB_STR
#undef STRINGLIB_LEN
#undef STRINGLIB_NEW
-#undef _Py_InsertThousandsGrouping
#undef STRINGLIB_IS_UNICODE
diff --git a/Objects/structseq.c b/Objects/structseq.c
index c86fbe50b97..1865e2461a2 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -47,7 +47,7 @@ PyStructSequence_New(PyTypeObject *type)
return NULL;
/* Hack the size of the variable object, so invisible fields don't appear
to Python code. */
- Py_SIZE(obj) = VISIBLE_SIZE_TP(type);
+ Py_SET_SIZE(obj, VISIBLE_SIZE_TP(type));
for (i = 0; i < size; i++)
obj->ob_item[i] = NULL;
diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c
index 08f7022fda2..d114bd64096 100644
--- a/Objects/tupleobject.c
+++ b/Objects/tupleobject.c
@@ -28,43 +28,10 @@ class tuple "PyTupleObject *" "&PyTuple_Type"
static PyTupleObject *free_list[PyTuple_MAXSAVESIZE];
static int numfree[PyTuple_MAXSAVESIZE];
#endif
-#ifdef COUNT_ALLOCS
-Py_ssize_t _Py_fast_tuple_allocs;
-Py_ssize_t _Py_tuple_zero_allocs;
-#endif
-
-/* Debug statistic to count GC tracking of tuples.
- Please note that tuples are only untracked when considered by the GC, and
- many of them will be dead before. Therefore, a tracking rate close to 100%
- does not necessarily prove that the heuristic is inefficient.
-*/
-#ifdef SHOW_TRACK_COUNT
-static Py_ssize_t count_untracked = 0;
-static Py_ssize_t count_tracked = 0;
-
-static void
-show_track(void)
-{
- PyInterpreterState *interp = _PyInterpreterState_Get();
- if (!interp->config.show_alloc_count) {
- return;
- }
-
- fprintf(stderr, "Tuples created: %" PY_FORMAT_SIZE_T "d\n",
- count_tracked + count_untracked);
- fprintf(stderr, "Tuples tracked by the GC: %" PY_FORMAT_SIZE_T
- "d\n", count_tracked);
- fprintf(stderr, "%.2f%% tuple tracking rate\n\n",
- (100.0*count_tracked/(count_untracked+count_tracked)));
-}
-#endif
static inline void
tuple_gc_track(PyTupleObject *op)
{
-#ifdef SHOW_TRACK_COUNT
- count_tracked++;
-#endif
_PyObject_GC_TRACK(op);
}
@@ -106,9 +73,6 @@ tuple_alloc(Py_ssize_t size)
assert(size != 0);
free_list[size] = (PyTupleObject *) op->ob_item[0];
numfree[size]--;
-#ifdef COUNT_ALLOCS
- _Py_fast_tuple_allocs++;
-#endif
/* Inline PyObject_InitVar */
#ifdef Py_TRACE_REFS
Py_SIZE(op) = size;
@@ -139,9 +103,6 @@ PyTuple_New(Py_ssize_t size)
if (size == 0 && free_list[0]) {
op = free_list[0];
Py_INCREF(op);
-#ifdef COUNT_ALLOCS
- _Py_tuple_zero_allocs++;
-#endif
return (PyObject *) op;
}
#endif
@@ -192,7 +153,7 @@ int
PyTuple_SetItem(PyObject *op, Py_ssize_t i, PyObject *newitem)
{
PyObject **p;
- if (!PyTuple_Check(op) || op->ob_refcnt != 1) {
+ if (!PyTuple_Check(op) || Py_REFCNT(op) != 1) {
Py_XDECREF(newitem);
PyErr_BadInternalCall();
return -1;
@@ -227,10 +188,6 @@ _PyTuple_MaybeUntrack(PyObject *op)
_PyObject_GC_MAY_BE_TRACKED(elt))
return;
}
-#ifdef SHOW_TRACK_COUNT
- count_tracked--;
- count_untracked++;
-#endif
_PyObject_GC_UNTRACK(op);
}
@@ -945,10 +902,15 @@ _PyTuple_Resize(PyObject **pv, Py_ssize_t newsize)
}
/* XXX UNREF/NEWREF interface should be more symmetrical */
- _Py_DEC_REFTOTAL;
- if (_PyObject_GC_IS_TRACKED(v))
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
+#endif
+ if (_PyObject_GC_IS_TRACKED(v)) {
_PyObject_GC_UNTRACK(v);
+ }
+#ifdef Py_TRACE_REFS
_Py_ForgetReference((PyObject *) v);
+#endif
/* DECREF items deleted by shrinkage */
for (i = newsize; i < oldsize; i++) {
Py_CLEAR(v->ob_item[i]);
@@ -1001,9 +963,6 @@ _PyTuple_Fini(void)
(void)PyTuple_ClearFreeList();
#endif
-#ifdef SHOW_TRACK_COUNT
- show_track();
-#endif
}
/*********************** Tuple Iterator **************************/
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 720363410ce..f32ccb13798 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2,6 +2,7 @@
#include "Python.h"
#include "pycore_call.h"
+#include "pycore_initconfig.h"
#include "pycore_object.h"
#include "pycore_pyerrors.h"
#include "pycore_pystate.h"
@@ -73,6 +74,7 @@ _Py_IDENTIFIER(__new__);
_Py_IDENTIFIER(__set_name__);
_Py_IDENTIFIER(__setitem__);
_Py_IDENTIFIER(builtins);
+_Py_IDENTIFIER(mro);
static PyObject *
slot_tp_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
@@ -309,7 +311,6 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
return;
if (custom) {
- _Py_IDENTIFIER(mro);
mro_meth = lookup_maybe_method(
(PyObject *)type, &PyId_mro, &unbound);
if (mro_meth == NULL)
@@ -1172,8 +1173,9 @@ subtype_dealloc(PyObject *self)
}
if (type->tp_del) {
type->tp_del(self);
- if (self->ob_refcnt > 0)
+ if (Py_REFCNT(self) > 0) {
return;
+ }
}
/* Find the nearest base with a different tp_dealloc */
@@ -1238,7 +1240,7 @@ subtype_dealloc(PyObject *self)
if (type->tp_del) {
_PyObject_GC_TRACK(self);
type->tp_del(self);
- if (self->ob_refcnt > 0) {
+ if (Py_REFCNT(self) > 0) {
/* Resurrected */
goto endlabel;
}
@@ -1463,7 +1465,7 @@ static PyObject*
call_unbound_noarg(int unbound, PyObject *func, PyObject *self)
{
if (unbound) {
- return _PyObject_CallOneArg(func, self);
+ return PyObject_CallOneArg(func, self);
}
else {
return _PyObject_CallNoArg(func);
@@ -1890,7 +1892,6 @@ mro_invoke(PyTypeObject *type)
int custom = (Py_TYPE(type) != &PyType_Type);
if (custom) {
- _Py_IDENTIFIER(mro);
int unbound;
PyObject *mro_meth = lookup_method((PyObject *)type, &PyId_mro,
&unbound);
@@ -2344,7 +2345,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
assert(args != NULL && PyTuple_Check(args));
assert(kwds == NULL || PyDict_Check(kwds));
- /* Special case: type(x) should return x->ob_type */
+ /* Special case: type(x) should return Py_TYPE(x) */
/* We only want type itself to accept the one-argument form (#27157)
Note: We don't call PyType_CheckExact as that also allows subclasses */
if (metatype == &PyType_Type) {
@@ -3229,7 +3230,7 @@ type_getattro(PyTypeObject *type, PyObject *name)
if (!PyUnicode_Check(name)) {
PyErr_Format(PyExc_TypeError,
"attribute name must be string, not '%.200s'",
- name->ob_type->tp_name);
+ Py_TYPE(name)->tp_name);
return NULL;
}
@@ -3570,9 +3571,9 @@ type_traverse(PyTypeObject *type, visitproc visit, void *arg)
for heaptypes. */
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
char msg[200];
- sprintf(msg, "type_traverse() called for non-heap type '%.100s'",
+ sprintf(msg, "type_traverse() called on non-heap type '%.100s'",
type->tp_name);
- Py_FatalError(msg);
+ _PyObject_ASSERT_FAILED_MSG((PyObject *)type, msg);
}
Py_VISIT(type->tp_dict);
@@ -3664,7 +3665,7 @@ PyTypeObject PyType_Type = {
0, /* tp_as_buffer */
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_BASETYPE | Py_TPFLAGS_TYPE_SUBCLASS |
- _Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
+ Py_TPFLAGS_HAVE_VECTORCALL, /* tp_flags */
type_doc, /* tp_doc */
(traverseproc)type_traverse, /* tp_traverse */
(inquiry)type_clear, /* tp_clear */
@@ -3887,12 +3888,12 @@ object_richcompare(PyObject *self, PyObject *other, int op)
case Py_NE:
/* By default, __ne__() delegates to __eq__() and inverts the result,
unless the latter returns NotImplemented. */
- if (self->ob_type->tp_richcompare == NULL) {
+ if (Py_TYPE(self)->tp_richcompare == NULL) {
res = Py_NotImplemented;
Py_INCREF(res);
break;
}
- res = (*self->ob_type->tp_richcompare)(self, other, Py_EQ);
+ res = (*Py_TYPE(self)->tp_richcompare)(self, other, Py_EQ);
if (res != NULL && res != Py_NotImplemented) {
int ok = PyObject_IsTrue(res);
Py_DECREF(res);
@@ -4096,9 +4097,10 @@ object_set_class(PyObject *self, PyObject *value, void *closure)
}
if (compatible_for_assignment(oldto, newto, "__class__")) {
- if (newto->tp_flags & Py_TPFLAGS_HEAPTYPE)
+ if (newto->tp_flags & Py_TPFLAGS_HEAPTYPE) {
Py_INCREF(newto);
- Py_TYPE(self) = newto;
+ }
+ Py_SET_TYPE(self, newto);
if (oldto->tp_flags & Py_TPFLAGS_HEAPTYPE)
Py_DECREF(oldto);
return 0;
@@ -4214,7 +4216,7 @@ _PyObject_GetState(PyObject *obj, int required)
if (getstate == NULL) {
PyObject *slotnames;
- if (required && obj->ob_type->tp_itemsize) {
+ if (required && Py_TYPE(obj)->tp_itemsize) {
PyErr_Format(PyExc_TypeError,
"cannot pickle '%.200s' object",
Py_TYPE(obj)->tp_name);
@@ -4247,13 +4249,13 @@ _PyObject_GetState(PyObject *obj, int required)
assert(slotnames == Py_None || PyList_Check(slotnames));
if (required) {
Py_ssize_t basicsize = PyBaseObject_Type.tp_basicsize;
- if (obj->ob_type->tp_dictoffset)
+ if (Py_TYPE(obj)->tp_dictoffset)
basicsize += sizeof(PyObject *);
- if (obj->ob_type->tp_weaklistoffset)
+ if (Py_TYPE(obj)->tp_weaklistoffset)
basicsize += sizeof(PyObject *);
if (slotnames != Py_None)
basicsize += sizeof(PyObject *) * PyList_GET_SIZE(slotnames);
- if (obj->ob_type->tp_basicsize > basicsize) {
+ if (Py_TYPE(obj)->tp_basicsize > basicsize) {
Py_DECREF(slotnames);
Py_DECREF(state);
PyErr_Format(PyExc_TypeError,
@@ -4724,7 +4726,7 @@ object___format___impl(PyObject *self, PyObject *format_spec)
if (PyUnicode_GET_LENGTH(format_spec) > 0) {
PyErr_Format(PyExc_TypeError,
"unsupported format string passed to %.200s.__format__",
- self->ob_type->tp_name);
+ Py_TYPE(self)->tp_name);
return NULL;
}
return PyObject_Str(self);
@@ -4743,10 +4745,10 @@ object___sizeof___impl(PyObject *self)
Py_ssize_t res, isize;
res = 0;
- isize = self->ob_type->tp_itemsize;
+ isize = Py_TYPE(self)->tp_itemsize;
if (isize > 0)
res = Py_SIZE(self) * isize;
- res += self->ob_type->tp_basicsize;
+ res += Py_TYPE(self)->tp_basicsize;
return PyLong_FromSsize_t(res);
}
@@ -4793,7 +4795,7 @@ object___dir___impl(PyObject *self)
if (_PyObject_LookupAttrId(self, &PyId___class__, &itsclass) < 0) {
goto error;
}
- /* XXX(tomer): Perhaps fall back to obj->ob_type if no
+ /* XXX(tomer): Perhaps fall back to Py_TYPE(obj) if no
__class__ exists? */
if (itsclass != NULL && merge_class_dict(dict, itsclass) < 0)
goto error;
@@ -5194,17 +5196,17 @@ inherit_slots(PyTypeObject *type, PyTypeObject *base)
/* tp_hash see tp_richcompare */
{
/* Always inherit tp_vectorcall_offset to support PyVectorcall_Call().
- * If _Py_TPFLAGS_HAVE_VECTORCALL is not inherited, then vectorcall
+ * If Py_TPFLAGS_HAVE_VECTORCALL is not inherited, then vectorcall
* won't be used automatically. */
COPYSLOT(tp_vectorcall_offset);
- /* Inherit _Py_TPFLAGS_HAVE_VECTORCALL for non-heap types
+ /* Inherit Py_TPFLAGS_HAVE_VECTORCALL for non-heap types
* if tp_call is not overridden */
if (!type->tp_call &&
- (base->tp_flags & _Py_TPFLAGS_HAVE_VECTORCALL) &&
+ (base->tp_flags & Py_TPFLAGS_HAVE_VECTORCALL) &&
!(type->tp_flags & Py_TPFLAGS_HEAPTYPE))
{
- type->tp_flags |= _Py_TPFLAGS_HAVE_VECTORCALL;
+ type->tp_flags |= Py_TPFLAGS_HAVE_VECTORCALL;
}
COPYSLOT(tp_call);
}
@@ -5280,14 +5282,14 @@ PyType_Ready(PyTypeObject *type)
/* Consistency checks for PEP 590:
* - Py_TPFLAGS_METHOD_DESCRIPTOR requires tp_descr_get
- * - _Py_TPFLAGS_HAVE_VECTORCALL requires tp_call and
+ * - Py_TPFLAGS_HAVE_VECTORCALL requires tp_call and
* tp_vectorcall_offset > 0
* To avoid mistakes, we require this before inheriting.
*/
if (type->tp_flags & Py_TPFLAGS_METHOD_DESCRIPTOR) {
_PyObject_ASSERT((PyObject *)type, type->tp_descr_get != NULL);
}
- if (type->tp_flags & _Py_TPFLAGS_HAVE_VECTORCALL) {
+ if (type->tp_flags & Py_TPFLAGS_HAVE_VECTORCALL) {
_PyObject_ASSERT((PyObject *)type, type->tp_vectorcall_offset > 0);
_PyObject_ASSERT((PyObject *)type, type->tp_call != NULL);
}
@@ -5333,8 +5335,9 @@ PyType_Ready(PyTypeObject *type)
NULL when type is &PyBaseObject_Type, and we know its ob_type is
not NULL (it's initialized to &PyType_Type). But coverity doesn't
know that. */
- if (Py_TYPE(type) == NULL && base != NULL)
- Py_TYPE(type) = Py_TYPE(base);
+ if (Py_TYPE(type) == NULL && base != NULL) {
+ Py_SET_TYPE(type, Py_TYPE(base));
+ }
/* Initialize tp_bases */
bases = type->tp_bases;
@@ -6041,8 +6044,12 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds)
PyTypeObject *type, *subtype, *staticbase;
PyObject *arg0, *res;
- if (self == NULL || !PyType_Check(self))
- Py_FatalError("__new__() called with non-type 'self'");
+ if (self == NULL || !PyType_Check(self)) {
+ PyErr_Format(PyExc_SystemError,
+ "__new__() called with non-type 'self'");
+ return NULL;
+ }
+
type = (PyTypeObject *)self;
if (!PyTuple_Check(args) || PyTuple_GET_SIZE(args) < 1) {
PyErr_Format(PyExc_TypeError,
@@ -6607,7 +6614,7 @@ call_attribute(PyObject *self, PyObject *attr, PyObject *name)
else
attr = descr;
}
- res = _PyObject_CallOneArg(attr, name);
+ res = PyObject_CallOneArg(attr, name);
Py_XDECREF(descr);
return res;
}
@@ -6932,7 +6939,8 @@ which incorporates the additional structures used for numbers, sequences and
mappings. Note that multiple names may map to the same slot (e.g. __eq__,
__ne__ etc. all map to tp_richcompare) and one name may map to multiple slots
(e.g. __str__ affects tp_str as well as tp_repr). The table is terminated with
-an all-zero entry. (This table is further initialized in init_slotdefs().)
+an all-zero entry. (This table is further initialized in
+_PyTypes_InitSlotDefs().)
*/
typedef struct wrapperbase slotdef;
@@ -7423,28 +7431,29 @@ update_slots_callback(PyTypeObject *type, void *data)
static int slotdefs_initialized = 0;
/* Initialize the slotdefs table by adding interned string objects for the
names. */
-static void
-init_slotdefs(void)
+PyStatus
+_PyTypes_InitSlotDefs(void)
{
- slotdef *p;
+ if (slotdefs_initialized) {
+ return _PyStatus_OK();
+ }
- if (slotdefs_initialized)
- return;
- for (p = slotdefs; p->name; p++) {
+ for (slotdef *p = slotdefs; p->name; p++) {
/* Slots must be ordered by their offset in the PyHeapTypeObject. */
assert(!p[1].name || p->offset <= p[1].offset);
p->name_strobj = PyUnicode_InternFromString(p->name);
- if (!p->name_strobj || !PyUnicode_CHECK_INTERNED(p->name_strobj))
- Py_FatalError("Out of memory interning slotdef names");
+ if (!p->name_strobj || !PyUnicode_CHECK_INTERNED(p->name_strobj)) {
+ return _PyStatus_NO_MEMORY();
+ }
}
slotdefs_initialized = 1;
+ return _PyStatus_OK();
}
-/* Undo init_slotdefs, releasing the interned strings. */
+/* Undo _PyTypes_InitSlotDefs(), releasing the interned strings. */
static void clear_slotdefs(void)
{
- slotdef *p;
- for (p = slotdefs; p->name; p++) {
+ for (slotdef *p = slotdefs; p->name; p++) {
Py_CLEAR(p->name_strobj);
}
slotdefs_initialized = 0;
@@ -7462,7 +7471,7 @@ update_slot(PyTypeObject *type, PyObject *name)
assert(PyUnicode_CheckExact(name));
assert(PyUnicode_CHECK_INTERNED(name));
- init_slotdefs();
+ assert(slotdefs_initialized);
pp = ptrs;
for (p = slotdefs; p->name; p++) {
if (p->name_strobj == name)
@@ -7490,7 +7499,7 @@ fixup_slot_dispatchers(PyTypeObject *type)
{
slotdef *p;
- init_slotdefs();
+ assert(slotdefs_initialized);
for (p = slotdefs; p->name; )
p = update_one_slot(type, p);
}
@@ -7503,7 +7512,7 @@ update_all_slots(PyTypeObject* type)
/* Clear the VALID_VERSION flag of 'type' and all its subclasses. */
PyType_Modified(type);
- init_slotdefs();
+ assert(slotdefs_initialized);
for (p = slotdefs; p->name; p++) {
/* update_slot returns int but can't actually fail */
update_slot(type, p->name_strobj);
@@ -7530,7 +7539,7 @@ set_names(PyTypeObject *type)
_PyErr_FormatFromCause(PyExc_RuntimeError,
"Error calling __set_name__ on '%.100s' instance %R "
"in '%.100s'",
- value->ob_type->tp_name, key, type->tp_name);
+ Py_TYPE(value)->tp_name, key, type->tp_name);
Py_DECREF(names_to_set);
return -1;
}
@@ -7566,7 +7575,7 @@ init_subclass(PyTypeObject *type, PyObject *kwds)
}
- result = _PyObject_FastCallDict(func, NULL, 0, kwds);
+ result = PyObject_VectorcallDict(func, NULL, 0, kwds);
Py_DECREF(func);
if (result == NULL) {
return -1;
@@ -7663,7 +7672,7 @@ add_operators(PyTypeObject *type)
PyObject *descr;
void **ptr;
- init_slotdefs();
+ assert(slotdefs_initialized);
for (p = slotdefs; p->name; p++) {
if (p->wrapper == NULL)
continue;
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 1ec2accdb09..11fa1fb5ff7 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -40,6 +40,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#define PY_SSIZE_T_CLEAN
#include "Python.h"
+#include "pycore_bytes_methods.h"
#include "pycore_fileutils.h"
#include "pycore_initconfig.h"
#include "pycore_object.h"
@@ -47,7 +48,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#include "pycore_pylifecycle.h"
#include "pycore_pystate.h"
#include "ucnhash.h"
-#include "bytes_methods.h"
#include "stringlib/eq.h"
#ifdef MS_WINDOWS
@@ -172,8 +172,8 @@ extern "C" {
#define _PyUnicode_CONVERT_BYTES(from_type, to_type, begin, end, to) \
do { \
to_type *_to = (to_type *)(to); \
- const from_type *_iter = (from_type *)(begin); \
- const from_type *_end = (from_type *)(end); \
+ const from_type *_iter = (const from_type *)(begin);\
+ const from_type *_end = (const from_type *)(end);\
Py_ssize_t n = (_end) - (_iter); \
const from_type *_unrolled_end = \
_iter + _Py_SIZE_ROUND_DOWN(n, 4); \
@@ -964,21 +964,21 @@ findchar(const void *s, int kind,
if ((Py_UCS1) ch != ch)
return -1;
if (direction > 0)
- return ucs1lib_find_char((Py_UCS1 *) s, size, (Py_UCS1) ch);
+ return ucs1lib_find_char((const Py_UCS1 *) s, size, (Py_UCS1) ch);
else
- return ucs1lib_rfind_char((Py_UCS1 *) s, size, (Py_UCS1) ch);
+ return ucs1lib_rfind_char((const Py_UCS1 *) s, size, (Py_UCS1) ch);
case PyUnicode_2BYTE_KIND:
if ((Py_UCS2) ch != ch)
return -1;
if (direction > 0)
- return ucs2lib_find_char((Py_UCS2 *) s, size, (Py_UCS2) ch);
+ return ucs2lib_find_char((const Py_UCS2 *) s, size, (Py_UCS2) ch);
else
- return ucs2lib_rfind_char((Py_UCS2 *) s, size, (Py_UCS2) ch);
+ return ucs2lib_rfind_char((const Py_UCS2 *) s, size, (Py_UCS2) ch);
case PyUnicode_4BYTE_KIND:
if (direction > 0)
- return ucs4lib_find_char((Py_UCS4 *) s, size, ch);
+ return ucs4lib_find_char((const Py_UCS4 *) s, size, ch);
else
- return ucs4lib_rfind_char((Py_UCS4 *) s, size, ch);
+ return ucs4lib_rfind_char((const Py_UCS4 *) s, size, ch);
default:
Py_UNREACHABLE();
}
@@ -1037,8 +1037,12 @@ resize_compact(PyObject *unicode, Py_ssize_t length)
_PyUnicode_UTF8(unicode) = NULL;
_PyUnicode_UTF8_LENGTH(unicode) = 0;
}
- _Py_DEC_REFTOTAL;
+#ifdef Py_REF_DEBUG
+ _Py_RefTotal--;
+#endif
+#ifdef Py_TRACE_REFS
_Py_ForgetReference(unicode);
+#endif
new_unicode = (PyObject *)PyObject_REALLOC(unicode, new_size);
if (new_unicode == NULL) {
@@ -1899,26 +1903,30 @@ unicode_dealloc(PyObject *unicode)
case SSTATE_INTERNED_MORTAL:
/* revive dead object temporarily for DelItem */
- Py_REFCNT(unicode) = 3;
- if (PyDict_DelItem(interned, unicode) != 0)
- Py_FatalError(
- "deletion of interned string failed");
+ Py_SET_REFCNT(unicode, 3);
+ if (PyDict_DelItem(interned, unicode) != 0) {
+ _PyErr_WriteUnraisableMsg("deletion of interned string failed",
+ NULL);
+ }
break;
case SSTATE_INTERNED_IMMORTAL:
- Py_FatalError("Immortal interned string died.");
- /* fall through */
+ _PyObject_ASSERT_FAILED_MSG(unicode, "Immortal interned string died");
+ break;
default:
- Py_FatalError("Inconsistent interned string state.");
+ Py_UNREACHABLE();
}
- if (_PyUnicode_HAS_WSTR_MEMORY(unicode))
+ if (_PyUnicode_HAS_WSTR_MEMORY(unicode)) {
PyObject_DEL(_PyUnicode_WSTR(unicode));
- if (_PyUnicode_HAS_UTF8_MEMORY(unicode))
+ }
+ if (_PyUnicode_HAS_UTF8_MEMORY(unicode)) {
PyObject_DEL(_PyUnicode_UTF8(unicode));
- if (!PyUnicode_IS_COMPACT(unicode) && _PyUnicode_DATA_ANY(unicode))
+ }
+ if (!PyUnicode_IS_COMPACT(unicode) && _PyUnicode_DATA_ANY(unicode)) {
PyObject_DEL(_PyUnicode_DATA_ANY(unicode));
+ }
Py_TYPE(unicode)->tp_free(unicode);
}
@@ -3607,39 +3615,32 @@ PyObject *
PyUnicode_EncodeFSDefault(PyObject *unicode)
{
PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-#ifdef _Py_FORCE_UTF8_FS_ENCODING
- if (interp->fs_codec.encoding) {
+ if (interp->fs_codec.utf8) {
return unicode_encode_utf8(unicode,
interp->fs_codec.error_handler,
interp->fs_codec.errors);
}
- else {
- const wchar_t *filesystem_errors = interp->config.filesystem_errors;
- _Py_error_handler errors;
- errors = get_error_handler_wide(filesystem_errors);
- assert(errors != _Py_ERROR_UNKNOWN);
- return unicode_encode_utf8(unicode, errors, NULL);
- }
-#else
- /* Bootstrap check: if the filesystem codec is implemented in Python, we
- cannot use it to encode and decode filenames before it is loaded. Load
- the Python codec requires to encode at least its own filename. Use the C
- implementation of the locale codec until the codec registry is
- initialized and the Python codec is loaded.
- See _PyUnicode_InitEncodings(). */
- if (interp->fs_codec.encoding) {
+#ifndef _Py_FORCE_UTF8_FS_ENCODING
+ else if (interp->fs_codec.encoding) {
return PyUnicode_AsEncodedString(unicode,
interp->fs_codec.encoding,
interp->fs_codec.errors);
}
- else {
- const wchar_t *filesystem_errors = interp->config.filesystem_errors;
- _Py_error_handler errors;
- errors = get_error_handler_wide(filesystem_errors);
- assert(errors != _Py_ERROR_UNKNOWN);
- return unicode_encode_locale(unicode, errors, 0);
- }
#endif
+ else {
+ /* Before _PyUnicode_InitEncodings() is called, the Python codec
+ machinery is not ready and so cannot be used:
+ use wcstombs() in this case. */
+ const wchar_t *filesystem_errors = interp->config.filesystem_errors;
+ assert(filesystem_errors != NULL);
+ _Py_error_handler errors = get_error_handler_wide(filesystem_errors);
+ assert(errors != _Py_ERROR_UNKNOWN);
+#ifdef _Py_FORCE_UTF8_FS_ENCODING
+ return unicode_encode_utf8(unicode, errors, NULL);
+#else
+ return unicode_encode_locale(unicode, errors, 0);
+#endif
+ }
}
PyObject *
@@ -3849,39 +3850,33 @@ PyObject*
PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size)
{
PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
-#ifdef _Py_FORCE_UTF8_FS_ENCODING
- if (interp->fs_codec.encoding) {
+ if (interp->fs_codec.utf8) {
return unicode_decode_utf8(s, size,
interp->fs_codec.error_handler,
interp->fs_codec.errors,
NULL);
}
- else {
- const wchar_t *filesystem_errors = interp->config.filesystem_errors;
- _Py_error_handler errors;
- errors = get_error_handler_wide(filesystem_errors);
- assert(errors != _Py_ERROR_UNKNOWN);
- return unicode_decode_utf8(s, size, errors, NULL, NULL);
- }
-#else
- /* Bootstrap check: if the filesystem codec is implemented in Python, we
- cannot use it to encode and decode filenames before it is loaded. Load
- the Python codec requires to encode at least its own filename. Use the C
- implementation of the locale codec until the codec registry is
- initialized and the Python codec is loaded.
- See _PyUnicode_InitEncodings(). */
- if (interp->fs_codec.encoding) {
+#ifndef _Py_FORCE_UTF8_FS_ENCODING
+ else if (interp->fs_codec.encoding) {
return PyUnicode_Decode(s, size,
interp->fs_codec.encoding,
interp->fs_codec.errors);
}
- else {
- const wchar_t *filesystem_errors = interp->config.filesystem_errors;
- _Py_error_handler errors;
- errors = get_error_handler_wide(filesystem_errors);
- return unicode_decode_locale(s, size, errors, 0);
- }
#endif
+ else {
+ /* Before _PyUnicode_InitEncodings() is called, the Python codec
+ machinery is not ready and so cannot be used:
+ use mbstowcs() in this case. */
+ const wchar_t *filesystem_errors = interp->config.filesystem_errors;
+ assert(filesystem_errors != NULL);
+ _Py_error_handler errors = get_error_handler_wide(filesystem_errors);
+ assert(errors != _Py_ERROR_UNKNOWN);
+#ifdef _Py_FORCE_UTF8_FS_ENCODING
+ return unicode_decode_utf8(s, size, errors, NULL, NULL);
+#else
+ return unicode_decode_locale(s, size, errors, 0);
+#endif
+ }
}
@@ -4255,7 +4250,7 @@ unicode_decode_call_errorhandler_wchar(
if (*exceptionObject == NULL)
goto onError;
- restuple = _PyObject_CallOneArg(*errorHandler, *exceptionObject);
+ restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
if (restuple == NULL)
goto onError;
if (!PyTuple_Check(restuple)) {
@@ -4359,7 +4354,7 @@ unicode_decode_call_errorhandler_writer(
if (*exceptionObject == NULL)
goto onError;
- restuple = _PyObject_CallOneArg(*errorHandler, *exceptionObject);
+ restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
if (restuple == NULL)
goto onError;
if (!PyTuple_Check(restuple)) {
@@ -4926,7 +4921,7 @@ ascii_decode(const char *start, const char *end, Py_UCS1 *dest)
/* Help allocation */
const char *_p = p;
while (_p < aligned_end) {
- unsigned long value = *(unsigned long *) _p;
+ unsigned long value = *(const unsigned long *) _p;
if (value & ASCII_CHAR_MASK)
break;
_p += SIZEOF_LONG;
@@ -5477,7 +5472,7 @@ PyUnicode_DecodeUTF32Stateful(const char *s,
PyObject *errorHandler = NULL;
PyObject *exc = NULL;
- q = (unsigned char *)s;
+ q = (const unsigned char *)s;
e = q + size;
if (byteorder)
@@ -5802,7 +5797,7 @@ PyUnicode_DecodeUTF16Stateful(const char *s,
PyObject *exc = NULL;
const char *encoding;
- q = (unsigned char *)s;
+ q = (const unsigned char *)s;
e = q + size;
if (byteorder)
@@ -6731,7 +6726,7 @@ PyUnicode_DecodeLatin1(const char *s,
const char *errors)
{
/* Latin-1 is equivalent to the first 256 ordinals in Unicode. */
- return _PyUnicode_FromUCS1((unsigned char*)s, size);
+ return _PyUnicode_FromUCS1((const unsigned char*)s, size);
}
/* create or adjust a UnicodeEncodeError */
@@ -6806,7 +6801,7 @@ unicode_encode_call_errorhandler(const char *errors,
if (*exceptionObject == NULL)
return NULL;
- restuple = _PyObject_CallOneArg(*errorHandler, *exceptionObject);
+ restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
if (restuple == NULL)
return NULL;
if (!PyTuple_Check(restuple)) {
@@ -8406,7 +8401,7 @@ charmapencode_lookup(Py_UCS4 c, PyObject *mapping)
/* wrong return value */
PyErr_Format(PyExc_TypeError,
"character mapping must return integer, bytes or None, not %.400s",
- x->ob_type->tp_name);
+ Py_TYPE(x)->tp_name);
Py_DECREF(x);
return NULL;
}
@@ -8788,7 +8783,7 @@ unicode_translate_call_errorhandler(const char *errors,
if (*exceptionObject == NULL)
return NULL;
- restuple = _PyObject_CallOneArg(*errorHandler, *exceptionObject);
+ restuple = PyObject_CallOneArg(*errorHandler, *exceptionObject);
if (restuple == NULL)
return NULL;
if (!PyTuple_Check(restuple)) {
@@ -11087,8 +11082,8 @@ PyUnicode_Compare(PyObject *left, PyObject *right)
}
PyErr_Format(PyExc_TypeError,
"Can't compare %.100s and %.100s",
- left->ob_type->tp_name,
- right->ob_type->tp_name);
+ Py_TYPE(left)->tp_name,
+ Py_TYPE(right)->tp_name);
return -1;
}
@@ -11358,7 +11353,7 @@ PyUnicode_Concat(PyObject *left, PyObject *right)
if (!PyUnicode_Check(right)) {
PyErr_Format(PyExc_TypeError,
"can only concatenate str (not \"%.200s\") to str",
- right->ob_type->tp_name);
+ Py_TYPE(right)->tp_name);
return NULL;
}
if (PyUnicode_READY(right) < 0)
@@ -12203,22 +12198,33 @@ unicode_isnumeric_impl(PyObject *self)
int
PyUnicode_IsIdentifier(PyObject *self)
{
- int kind;
- void *data;
Py_ssize_t i;
- Py_UCS4 first;
+ int ready = PyUnicode_IS_READY(self);
- if (PyUnicode_READY(self) == -1) {
- Py_FatalError("identifier not ready");
+ Py_ssize_t len = ready ? PyUnicode_GET_LENGTH(self) : PyUnicode_GET_SIZE(self);
+ if (len == 0) {
+ /* an empty string is not a valid identifier */
return 0;
}
- /* Special case for empty strings */
- if (PyUnicode_GET_LENGTH(self) == 0)
- return 0;
- kind = PyUnicode_KIND(self);
- data = PyUnicode_DATA(self);
+ int kind;
+ void *data;
+ wchar_t *wstr;
+ if (ready) {
+ kind = PyUnicode_KIND(self);
+ data = PyUnicode_DATA(self);
+ }
+ else {
+ wstr = _PyUnicode_WSTR(self);
+ }
+ Py_UCS4 ch;
+ if (ready) {
+ ch = PyUnicode_READ(kind, data, 0);
+ }
+ else {
+ ch = wstr[0];
+ }
/* PEP 3131 says that the first character must be in
XID_Start and subsequent characters in XID_Continue,
and for the ASCII range, the 2.x rules apply (i.e
@@ -12227,13 +12233,21 @@ PyUnicode_IsIdentifier(PyObject *self)
definition of XID_Start and XID_Continue, it is sufficient
to check just for these, except that _ must be allowed
as starting an identifier. */
- first = PyUnicode_READ(kind, data, 0);
- if (!_PyUnicode_IsXidStart(first) && first != 0x5F /* LOW LINE */)
+ if (!_PyUnicode_IsXidStart(ch) && ch != 0x5F /* LOW LINE */) {
return 0;
+ }
- for (i = 1; i < PyUnicode_GET_LENGTH(self); i++)
- if (!_PyUnicode_IsXidContinue(PyUnicode_READ(kind, data, i)))
+ for (i = 1; i < len; i++) {
+ if (ready) {
+ ch = PyUnicode_READ(kind, data, i);
+ }
+ else {
+ ch = wstr[i];
+ }
+ if (!_PyUnicode_IsXidContinue(ch)) {
return 0;
+ }
+ }
return 1;
}
@@ -13789,7 +13803,7 @@ _PyUnicodeWriter_WriteASCIIString(_PyUnicodeWriter *writer,
if (len == -1)
len = strlen(ascii);
- assert(ucs1lib_find_max_char((Py_UCS1*)ascii, (Py_UCS1*)ascii + len) < 128);
+ assert(ucs1lib_find_max_char((const Py_UCS1*)ascii, (const Py_UCS1*)ascii + len) < 128);
if (writer->buffer == NULL && !writer->overallocate) {
PyObject *str;
@@ -13848,7 +13862,7 @@ _PyUnicodeWriter_WriteLatin1String(_PyUnicodeWriter *writer,
{
Py_UCS4 maxchar;
- maxchar = ucs1lib_find_max_char((Py_UCS1*)str, (Py_UCS1*)str + len);
+ maxchar = ucs1lib_find_max_char((const Py_UCS1*)str, (const Py_UCS1*)str + len);
if (_PyUnicodeWriter_Prepare(writer, len, maxchar) == -1)
return -1;
unicode_write_cstr(writer->buffer, writer->pos, str, len);
@@ -15372,7 +15386,7 @@ PyUnicode_InternInPlace(PyObject **p)
}
/* The two references in interned are not counted by refcnt.
The deallocator will take care of this */
- Py_REFCNT(s) -= 2;
+ Py_SET_REFCNT(s, Py_REFCNT(s) - 2);
_PyUnicode_STATE(s).interned = SSTATE_INTERNED_MORTAL;
}
@@ -15401,14 +15415,10 @@ PyUnicode_InternFromString(const char *cp)
static void
unicode_release_interned(void)
{
- PyObject *keys;
- PyObject *s;
- Py_ssize_t i, n;
- Py_ssize_t immortal_size = 0, mortal_size = 0;
-
- if (interned == NULL || !PyDict_Check(interned))
+ if (interned == NULL || !PyDict_Check(interned)) {
return;
- keys = PyDict_Keys(interned);
+ }
+ PyObject *keys = PyDict_Keys(interned);
if (keys == NULL || !PyList_Check(keys)) {
PyErr_Clear();
return;
@@ -15419,30 +15429,35 @@ unicode_release_interned(void)
rather, we give them their stolen references back, and then clear
and DECREF the interned dict. */
- n = PyList_GET_SIZE(keys);
+ Py_ssize_t n = PyList_GET_SIZE(keys);
#ifdef INTERNED_STATS
fprintf(stderr, "releasing %" PY_FORMAT_SIZE_T "d interned strings\n",
n);
+
+ Py_ssize_t immortal_size = 0, mortal_size = 0;
#endif
- for (i = 0; i < n; i++) {
- s = PyList_GET_ITEM(keys, i);
+ for (Py_ssize_t i = 0; i < n; i++) {
+ PyObject *s = PyList_GET_ITEM(keys, i);
if (PyUnicode_READY(s) == -1) {
Py_UNREACHABLE();
}
switch (PyUnicode_CHECK_INTERNED(s)) {
- case SSTATE_NOT_INTERNED:
- /* XXX Shouldn't happen */
- break;
case SSTATE_INTERNED_IMMORTAL:
Py_REFCNT(s) += 1;
+#ifdef INTERNED_STATS
immortal_size += PyUnicode_GET_LENGTH(s);
+#endif
break;
case SSTATE_INTERNED_MORTAL:
Py_REFCNT(s) += 2;
+#ifdef INTERNED_STATS
mortal_size += PyUnicode_GET_LENGTH(s);
+#endif
break;
+ case SSTATE_NOT_INTERNED:
+ /* fall through */
default:
- Py_FatalError("Inconsistent interned string state.");
+ Py_UNREACHABLE();
}
_PyUnicode_STATE(s).interned = SSTATE_NOT_INTERNED;
}
@@ -15840,10 +15855,16 @@ init_fs_codec(PyInterpreterState *interp)
PyMem_RawFree(interp->fs_codec.encoding);
interp->fs_codec.encoding = encoding;
+ /* encoding has been normalized by init_fs_encoding() */
+ interp->fs_codec.utf8 = (strcmp(encoding, "utf-8") == 0);
PyMem_RawFree(interp->fs_codec.errors);
interp->fs_codec.errors = errors;
interp->fs_codec.error_handler = error_handler;
+#ifdef _Py_FORCE_UTF8_FS_ENCODING
+ assert(interp->fs_codec.utf8 == 1);
+#endif
+
/* At this point, PyUnicode_EncodeFSDefault() and
PyUnicode_DecodeFSDefault() can now use the Python codec rather than
the C implementation of the filesystem encoding. */
@@ -15893,6 +15914,19 @@ _PyUnicode_InitEncodings(PyThreadState *tstate)
}
+static void
+_PyUnicode_FiniEncodings(PyThreadState *tstate)
+{
+ PyInterpreterState *interp = tstate->interp;
+ PyMem_RawFree(interp->fs_codec.encoding);
+ interp->fs_codec.encoding = NULL;
+ interp->fs_codec.utf8 = 0;
+ PyMem_RawFree(interp->fs_codec.errors);
+ interp->fs_codec.errors = NULL;
+ interp->fs_codec.error_handler = _Py_ERROR_UNKNOWN;
+}
+
+
#ifdef MS_WINDOWS
int
_PyUnicode_EnableLegacyWindowsFSEncoding(void)
@@ -15945,12 +15979,7 @@ _PyUnicode_Fini(PyThreadState *tstate)
_PyUnicode_ClearStaticStrings();
}
- PyInterpreterState *interp = _PyInterpreterState_GET_UNSAFE();
- PyMem_RawFree(interp->fs_codec.encoding);
- interp->fs_codec.encoding = NULL;
- PyMem_RawFree(interp->fs_codec.errors);
- interp->fs_codec.errors = NULL;
- interp->config.filesystem_errors = (wchar_t *)_Py_ERROR_UNKNOWN;
+ _PyUnicode_FiniEncodings(tstate);
}
diff --git a/Objects/weakrefobject.c b/Objects/weakrefobject.c
index bf79e0c7ecb..7a5d9fb88af 100644
--- a/Objects/weakrefobject.c
+++ b/Objects/weakrefobject.c
@@ -882,10 +882,12 @@ PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
if (result != NULL) {
PyWeakReference *prev;
- if (PyCallable_Check(ob))
- Py_TYPE(result) = &_PyWeakref_CallableProxyType;
- else
- Py_TYPE(result) = &_PyWeakref_ProxyType;
+ if (PyCallable_Check(ob)) {
+ Py_SET_TYPE(result, &_PyWeakref_CallableProxyType);
+ }
+ else {
+ Py_SET_TYPE(result, &_PyWeakref_ProxyType);
+ }
get_basic_refs(*list, &ref, &proxy);
if (callback == NULL) {
if (proxy != NULL) {
@@ -931,7 +933,7 @@ PyWeakref_GetObject(PyObject *ref)
static void
handle_callback(PyWeakReference *ref, PyObject *callback)
{
- PyObject *cbresult = _PyObject_CallOneArg(callback, (PyObject *)ref);
+ PyObject *cbresult = PyObject_CallOneArg(callback, (PyObject *)ref);
if (cbresult == NULL)
PyErr_WriteUnraisable(callback);
@@ -952,7 +954,8 @@ PyObject_ClearWeakRefs(PyObject *object)
if (object == NULL
|| !PyType_SUPPORTS_WEAKREFS(Py_TYPE(object))
- || object->ob_refcnt != 0) {
+ || Py_REFCNT(object) != 0)
+ {
PyErr_BadInternalCall();
return;
}
@@ -975,8 +978,9 @@ PyObject_ClearWeakRefs(PyObject *object)
current->wr_callback = NULL;
clear_weakref(current);
if (callback != NULL) {
- if (((PyObject *)current)->ob_refcnt > 0)
+ if (Py_REFCNT((PyObject *)current) > 0) {
handle_callback(current, callback);
+ }
Py_DECREF(callback);
}
}
@@ -993,8 +997,7 @@ PyObject_ClearWeakRefs(PyObject *object)
for (i = 0; i < count; ++i) {
PyWeakReference *next = current->wr_next;
- if (((PyObject *)current)->ob_refcnt > 0)
- {
+ if (Py_REFCNT((PyObject *)current) > 0) {
Py_INCREF(current);
PyTuple_SET_ITEM(tuple, i * 2, (PyObject *) current);
PyTuple_SET_ITEM(tuple, i * 2 + 1, current->wr_callback);
diff --git a/PC/dl_nt.c b/PC/dl_nt.c
index c87c51eb559..0bf04f1bf3d 100644
--- a/PC/dl_nt.c
+++ b/PC/dl_nt.c
@@ -23,68 +23,6 @@ char dllVersionBuffer[16] = ""; // a private buffer
HMODULE PyWin_DLLhModule = NULL;
const char *PyWin_DLLVersionString = dllVersionBuffer;
-#if HAVE_SXS
-// Windows "Activation Context" work.
-// Our .pyd extension modules are generally built without a manifest (ie,
-// those included with Python and those built with a default distutils.
-// This requires we perform some "activation context" magic when loading our
-// extensions. In summary:
-// * As our DLL loads we save the context being used.
-// * Before loading our extensions we re-activate our saved context.
-// * After extension load is complete we restore the old context.
-// As an added complication, this magic only works on XP or later - we simply
-// use the existence (or not) of the relevant function pointers from kernel32.
-// See bug 4566 (http://python.org/sf/4566) for more details.
-// In Visual Studio 2010, side by side assemblies are no longer used by
-// default.
-
-typedef BOOL (WINAPI * PFN_GETCURRENTACTCTX)(HANDLE *);
-typedef BOOL (WINAPI * PFN_ACTIVATEACTCTX)(HANDLE, ULONG_PTR *);
-typedef BOOL (WINAPI * PFN_DEACTIVATEACTCTX)(DWORD, ULONG_PTR);
-typedef BOOL (WINAPI * PFN_ADDREFACTCTX)(HANDLE);
-typedef BOOL (WINAPI * PFN_RELEASEACTCTX)(HANDLE);
-
-// locals and function pointers for this activation context magic.
-static HANDLE PyWin_DLLhActivationContext = NULL; // one day it might be public
-static PFN_GETCURRENTACTCTX pfnGetCurrentActCtx = NULL;
-static PFN_ACTIVATEACTCTX pfnActivateActCtx = NULL;
-static PFN_DEACTIVATEACTCTX pfnDeactivateActCtx = NULL;
-static PFN_ADDREFACTCTX pfnAddRefActCtx = NULL;
-static PFN_RELEASEACTCTX pfnReleaseActCtx = NULL;
-
-void _LoadActCtxPointers()
-{
- HINSTANCE hKernel32 = GetModuleHandleW(L"kernel32.dll");
- if (hKernel32)
- pfnGetCurrentActCtx = (PFN_GETCURRENTACTCTX) GetProcAddress(hKernel32, "GetCurrentActCtx");
- // If we can't load GetCurrentActCtx (ie, pre XP) , don't bother with the rest.
- if (pfnGetCurrentActCtx) {
- pfnActivateActCtx = (PFN_ACTIVATEACTCTX) GetProcAddress(hKernel32, "ActivateActCtx");
- pfnDeactivateActCtx = (PFN_DEACTIVATEACTCTX) GetProcAddress(hKernel32, "DeactivateActCtx");
- pfnAddRefActCtx = (PFN_ADDREFACTCTX) GetProcAddress(hKernel32, "AddRefActCtx");
- pfnReleaseActCtx = (PFN_RELEASEACTCTX) GetProcAddress(hKernel32, "ReleaseActCtx");
- }
-}
-
-ULONG_PTR _Py_ActivateActCtx()
-{
- ULONG_PTR ret = 0;
- if (PyWin_DLLhActivationContext && pfnActivateActCtx)
- if (!(*pfnActivateActCtx)(PyWin_DLLhActivationContext, &ret)) {
- OutputDebugString("Python failed to activate the activation context before loading a DLL\n");
- ret = 0; // no promise the failing function didn't change it!
- }
- return ret;
-}
-
-void _Py_DeactivateActCtx(ULONG_PTR cookie)
-{
- if (cookie && pfnDeactivateActCtx)
- if (!(*pfnDeactivateActCtx)(0, cookie))
- OutputDebugString("Python failed to de-activate the activation context\n");
-}
-#endif /* HAVE_SXS */
-
BOOL WINAPI DllMain (HANDLE hInst,
ULONG ul_reason_for_call,
LPVOID lpReserved)
@@ -98,22 +36,9 @@ BOOL WINAPI DllMain (HANDLE hInst,
// 1000 is a magic number I picked out of the air. Could do with a #define, I spose...
LoadString(hInst, 1000, dllVersionBuffer, sizeof(dllVersionBuffer));
#endif
-
-#if HAVE_SXS
- // and capture our activation context for use when loading extensions.
- _LoadActCtxPointers();
- if (pfnGetCurrentActCtx && pfnAddRefActCtx)
- if ((*pfnGetCurrentActCtx)(&PyWin_DLLhActivationContext))
- if (!(*pfnAddRefActCtx)(PyWin_DLLhActivationContext))
- OutputDebugString("Python failed to load the default activation context\n");
-#endif
break;
case DLL_PROCESS_DETACH:
-#if HAVE_SXS
- if (pfnReleaseActCtx)
- (*pfnReleaseActCtx)(PyWin_DLLhActivationContext);
-#endif
break;
}
return TRUE;
diff --git a/PC/getpathp.c b/PC/getpathp.c
index 085caf195a9..3b65b35ce61 100644
--- a/PC/getpathp.c
+++ b/PC/getpathp.c
@@ -91,6 +91,7 @@
#endif
#include
+#include
#include
#ifdef HAVE_SYS_TYPES_H
@@ -242,42 +243,14 @@ ismodule(wchar_t *filename, int update_filename)
stuff as fits will be appended.
*/
-static int _PathCchCombineEx_Initialized = 0;
-typedef HRESULT(__stdcall *PPathCchCombineEx) (PWSTR pszPathOut, size_t cchPathOut,
- PCWSTR pszPathIn, PCWSTR pszMore,
- unsigned long dwFlags);
-static PPathCchCombineEx _PathCchCombineEx;
-
static void
join(wchar_t *buffer, const wchar_t *stuff)
{
- if (_PathCchCombineEx_Initialized == 0) {
- HMODULE pathapi = LoadLibraryW(L"api-ms-win-core-path-l1-1-0.dll");
- if (pathapi) {
- _PathCchCombineEx = (PPathCchCombineEx)GetProcAddress(pathapi, "PathCchCombineEx");
- }
- else {
- _PathCchCombineEx = NULL;
- }
- _PathCchCombineEx_Initialized = 1;
- }
-
- if (_PathCchCombineEx) {
- if (FAILED(_PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) {
- Py_FatalError("buffer overflow in getpathp.c's join()");
- }
- } else {
- if (!PathCombineW(buffer, buffer, stuff)) {
- Py_FatalError("buffer overflow in getpathp.c's join()");
- }
+ if (FAILED(PathCchCombineEx(buffer, MAXPATHLEN+1, buffer, stuff, 0))) {
+ Py_FatalError("buffer overflow in getpathp.c's join()");
}
}
-static int _PathCchCanonicalizeEx_Initialized = 0;
-typedef HRESULT(__stdcall *PPathCchCanonicalizeEx) (PWSTR pszPathOut, size_t cchPathOut,
- PCWSTR pszPathIn, unsigned long dwFlags);
-static PPathCchCanonicalizeEx _PathCchCanonicalizeEx;
-
/* Call PathCchCanonicalizeEx(path): remove navigation elements such as "."
and ".." to produce a direct, well-formed path. */
static PyStatus
@@ -287,26 +260,8 @@ canonicalize(wchar_t *buffer, const wchar_t *path)
return _PyStatus_NO_MEMORY();
}
- if (_PathCchCanonicalizeEx_Initialized == 0) {
- HMODULE pathapi = LoadLibraryW(L"api-ms-win-core-path-l1-1-0.dll");
- if (pathapi) {
- _PathCchCanonicalizeEx = (PPathCchCanonicalizeEx)GetProcAddress(pathapi, "PathCchCanonicalizeEx");
- }
- else {
- _PathCchCanonicalizeEx = NULL;
- }
- _PathCchCanonicalizeEx_Initialized = 1;
- }
-
- if (_PathCchCanonicalizeEx) {
- if (FAILED(_PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) {
- return INIT_ERR_BUFFER_OVERFLOW();
- }
- }
- else {
- if (!PathCanonicalizeW(buffer, path)) {
- return INIT_ERR_BUFFER_OVERFLOW();
- }
+ if (FAILED(PathCchCanonicalizeEx(buffer, MAXPATHLEN + 1, path, 0))) {
+ return INIT_ERR_BUFFER_OVERFLOW();
}
return _PyStatus_OK();
}
diff --git a/PC/launcher.c b/PC/launcher.c
index 2749a4e7054..fd5ad0ab1a1 100644
--- a/PC/launcher.c
+++ b/PC/launcher.c
@@ -1247,6 +1247,7 @@ static PYC_MAGIC magic_values[] = {
{ 3360, 3379, L"3.6" },
{ 3390, 3399, L"3.7" },
{ 3400, 3419, L"3.8" },
+ { 3420, 3429, L"3.9" },
{ 0 }
};
@@ -1830,7 +1831,7 @@ process(int argc, wchar_t ** argv)
#if !defined(VENV_REDIRECT)
/* bpo-35811: The __PYVENV_LAUNCHER__ variable is used to
- * override sys.executable and locate the original prefix path.
+ * override sys.executable and locate the original prefix path.
* However, if it is silently inherited by a non-venv Python
* process, that process will believe it is running in the venv
* still. This is the only place where *we* can clear it (that is,
diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c
index c4113e54c2b..5c06ec2621e 100644
--- a/PC/msvcrtmodule.c
+++ b/PC/msvcrtmodule.c
@@ -116,6 +116,10 @@ msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes)
{
int err;
+ if (PySys_Audit("msvcrt.locking", "iil", fd, mode, nbytes) < 0) {
+ return NULL;
+ }
+
Py_BEGIN_ALLOW_THREADS
_Py_BEGIN_SUPPRESS_IPH
err = _locking(fd, mode, nbytes);
@@ -175,6 +179,10 @@ msvcrt_open_osfhandle_impl(PyObject *module, void *handle, int flags)
{
int fd;
+ if (PySys_Audit("msvcrt.open_osfhandle", "Ki", handle, flags) < 0) {
+ return NULL;
+ }
+
_Py_BEGIN_SUPPRESS_IPH
fd = _open_osfhandle((intptr_t)handle, flags);
_Py_END_SUPPRESS_IPH
@@ -201,6 +209,10 @@ msvcrt_get_osfhandle_impl(PyObject *module, int fd)
{
intptr_t handle = -1;
+ if (PySys_Audit("msvcrt.get_osfhandle", "(i)", fd) < 0) {
+ return NULL;
+ }
+
_Py_BEGIN_SUPPRESS_IPH
handle = _get_osfhandle(fd);
_Py_END_SUPPRESS_IPH
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index 6a437ce24bb..424c5be3709 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -195,11 +195,6 @@ typedef int pid_t;
#define Py_IS_FINITE(X) _finite(X)
#define copysign _copysign
-/* Side by Side assemblies supported in VS 2005 and VS 2008 but not 2010*/
-#if _MSC_VER >= 1400 && _MSC_VER < 1600
-#define HAVE_SXS 1
-#endif
-
/* define some ANSI types that are not defined in earlier Win headers */
#if _MSC_VER >= 1200
/* This file only exists in VC 6.0 or higher */
diff --git a/PC/python3.def b/PC/python3.def
index 4689b777a69..c7aed8789cf 100644
--- a/PC/python3.def
+++ b/PC/python3.def
@@ -727,6 +727,7 @@ EXPORTS
Py_DecodeLocale=python39.Py_DecodeLocale
Py_EncodeLocale=python39.Py_EncodeLocale
Py_EndInterpreter=python39.Py_EndInterpreter
+ Py_EnterRecursiveCall=python39.Py_EnterRecursiveCall
Py_Exit=python39.Py_Exit
Py_FatalError=python39.Py_FatalError
Py_FileSystemDefaultEncodeErrors=python39.Py_FileSystemDefaultEncodeErrors DATA
@@ -750,6 +751,7 @@ EXPORTS
Py_Initialize=python39.Py_Initialize
Py_InitializeEx=python39.Py_InitializeEx
Py_IsInitialized=python39.Py_IsInitialized
+ Py_LeaveRecursiveCall=python39.Py_LeaveRecursiveCall
Py_Main=python39.Py_Main
Py_MakePendingCalls=python39.Py_MakePendingCalls
Py_NewInterpreter=python39.Py_NewInterpreter
diff --git a/PCbuild/build.bat b/PCbuild/build.bat
index 7c24e0b1555..ba7154d8cb1 100644
--- a/PCbuild/build.bat
+++ b/PCbuild/build.bat
@@ -27,6 +27,8 @@ echo. building externals.
echo. -m Enable parallel build (enabled by default)
echo. -M Disable parallel build
echo. -v Increased output messages
+echo. -vv Verbose output messages
+echo. -q Quiet output messages (errors and warnings only)
echo. -k Attempt to kill any running Pythons before building (usually done
echo. automatically by the pythoncore project)
echo. --pgo Build with Profile-Guided Optimization. This flag
@@ -73,6 +75,8 @@ if "%~1"=="-d" (set conf=Debug) & shift & goto CheckOpts
if "%~1"=="-m" (set parallel=/m) & shift & goto CheckOpts
if "%~1"=="-M" (set parallel=) & shift & goto CheckOpts
if "%~1"=="-v" (set verbose=/v:n) & shift & goto CheckOpts
+if "%~1"=="-vv" (set verbose=/v:d /ds) & shift & goto CheckOpts
+if "%~1"=="-q" (set verbose=/v:q /nologo /clp:summary) & shift & goto CheckOpts
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
diff --git a/PCbuild/lib.pyproj b/PCbuild/lib.pyproj
index 401e207ae57..d4351dec3be 100644
--- a/PCbuild/lib.pyproj
+++ b/PCbuild/lib.pyproj
@@ -1125,6 +1125,8 @@
+
+
diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
index f5be8aa4051..0acf7f4a8de 100644
--- a/PCbuild/pythoncore.vcxproj
+++ b/PCbuild/pythoncore.vcxproj
@@ -106,7 +106,7 @@
_Py_HAVE_ZLIB;%(PreprocessorDefinitions)
- version.lib;shlwapi.lib;ws2_32.lib;%(AdditionalDependencies)
+ version.lib;shlwapi.lib;ws2_32.lib;pathcch.lib;%(AdditionalDependencies)
@@ -115,7 +115,6 @@
-
@@ -127,11 +126,15 @@
+
+
+
+
@@ -160,11 +163,13 @@
+
+
@@ -222,7 +227,6 @@
-
diff --git a/PCbuild/pythoncore.vcxproj.filters b/PCbuild/pythoncore.vcxproj.filters
index ba1839f8a38..a846a37630a 100644
--- a/PCbuild/pythoncore.vcxproj.filters
+++ b/PCbuild/pythoncore.vcxproj.filters
@@ -48,9 +48,6 @@
Include
-
- Include
-
Include
@@ -84,6 +81,12 @@
Include
+
+ Include
+
+
+ Include
+
Include
@@ -93,12 +96,18 @@
Include
+
+ Include
+
Include
Include
+
+ Include
+
Include
@@ -183,6 +192,9 @@
Include
+
+ Include
+
Include
@@ -198,6 +210,9 @@
Include
+
+ Include
+
Include
@@ -357,9 +372,6 @@
Include
-
- Include
-
Include
diff --git a/Parser/asdl_c.py b/Parser/asdl_c.py
index daac0966f56..e81506cc9a6 100755
--- a/Parser/asdl_c.py
+++ b/Parser/asdl_c.py
@@ -998,17 +998,25 @@ class ASTModuleVisitor(PickleVisitor):
self.emit("if (!init_types()) return NULL;", 1)
self.emit('m = PyState_FindModule(&_astmodule);', 1)
self.emit("if (!m) return NULL;", 1)
+ self.emit('if (PyModule_AddObject(m, "AST", astmodulestate_global->AST_type) < 0) {', 1)
+ self.emit('goto error;', 2)
+ self.emit('}', 1)
self.emit('Py_INCREF(astmodulestate(m)->AST_type);', 1)
- self.emit('if (PyModule_AddObject(m, "AST", astmodulestate_global->AST_type) < 0) return NULL;', 1)
- self.emit('if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0)', 1)
- self.emit("return NULL;", 2)
- self.emit('if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0)', 1)
- self.emit("return NULL;", 2)
- self.emit('if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0)', 1)
- self.emit("return NULL;", 2)
+ self.emit('if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {', 1)
+ self.emit("goto error;", 2)
+ self.emit('}', 1)
+ self.emit('if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {', 1)
+ self.emit("goto error;", 2)
+ self.emit('}', 1)
+ self.emit('if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {', 1)
+ self.emit("goto error;", 2)
+ self.emit('}', 1)
for dfn in mod.dfns:
self.visit(dfn)
self.emit("return m;", 1)
+ self.emit("error:", 0)
+ self.emit("Py_DECREF(m);", 1)
+ self.emit("return NULL;", 1)
self.emit("}", 0)
def visitProduct(self, prod, name):
@@ -1024,7 +1032,9 @@ class ASTModuleVisitor(PickleVisitor):
def addObj(self, name):
self.emit("if (PyModule_AddObject(m, \"%s\", "
- "astmodulestate_global->%s_type) < 0) return NULL;" % (name, name), 1)
+ "astmodulestate_global->%s_type) < 0) {" % (name, name), 1)
+ self.emit("goto error;", 2)
+ self.emit('}', 1)
self.emit("Py_INCREF(astmodulestate(m)->%s_type);" % name, 1)
diff --git a/Parser/parsetok.c b/Parser/parsetok.c
index a5d78974b87..b0b1bd38a7b 100644
--- a/Parser/parsetok.c
+++ b/Parser/parsetok.c
@@ -207,24 +207,6 @@ PyParser_ParseFileFlagsEx(FILE *fp, const char *filename,
return n;
}
-#ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
-#if 0
-static const char with_msg[] =
-"%s:%d: Warning: 'with' will become a reserved keyword in Python 2.6\n";
-
-static const char as_msg[] =
-"%s:%d: Warning: 'as' will become a reserved keyword in Python 2.6\n";
-
-static void
-warn(const char *msg, const char *filename, int lineno)
-{
- if (filename == NULL)
- filename = "";
- PySys_WriteStderr(msg, filename, lineno);
-}
-#endif
-#endif
-
/* Parse input coming from the given tokenizer structure.
Return error code. */
@@ -246,6 +228,7 @@ parsetok(struct tok_state *tok, grammar *g, int start, perrdetail *err_ret,
if ((ps = PyParser_New(g, start)) == NULL) {
err_ret->error = E_NOMEM;
+ growable_comment_array_deallocate(&type_ignores);
PyTokenizer_Free(tok);
return NULL;
}
diff --git a/Parser/pgen/__main__.py b/Parser/pgen/__main__.py
index bb96e75beea..d3780a7b77d 100644
--- a/Parser/pgen/__main__.py
+++ b/Parser/pgen/__main__.py
@@ -21,9 +21,19 @@ def main():
)
parser.add_argument("--verbose", "-v", action="count")
+ parser.add_argument(
+ "--graph",
+ type=argparse.FileType("w"),
+ action="store",
+ metavar="GRAPH_OUTPUT_FILE",
+ help="Dumps a DOT representation of the generated automata in a file",
+ )
+
args = parser.parse_args()
- p = ParserGenerator(args.grammar, args.tokens, verbose=args.verbose)
+ p = ParserGenerator(
+ args.grammar, args.tokens, verbose=args.verbose, graph_file=args.graph
+ )
grammar = p.make_grammar()
grammar.produce_graminit_h(args.graminit_h.write)
grammar.produce_graminit_c(args.graminit_c.write)
diff --git a/Parser/pgen/automata.py b/Parser/pgen/automata.py
index 545a7370f7e..d04ca7c6e80 100644
--- a/Parser/pgen/automata.py
+++ b/Parser/pgen/automata.py
@@ -48,6 +48,26 @@ class NFA:
else:
writer(" %s -> %d" % (label, j))
+ def dump_graph(self, writer):
+ """Dump a DOT representation of the NFA"""
+ writer('digraph %s_nfa {\n' % self.name)
+ todo = [self.start]
+ for i, state in enumerate(todo):
+ writer(' %d [label="State %d %s"];\n' % (i, i, state is self.end and "(final)" or ""))
+ for arc in state.arcs:
+ label = arc.label
+ next = arc.target
+ if next in todo:
+ j = todo.index(next)
+ else:
+ j = len(todo)
+ todo.append(next)
+ if label is None:
+ writer(" %d -> %d [style=dotted label=ε];\n" % (i, j))
+ else:
+ writer(" %d -> %d [label=%s];\n" % (i, j, label.replace("'", '"')))
+ writer('}\n')
+
class NFAArc:
"""An arc representing a transition between two NFA states.
@@ -301,6 +321,15 @@ class DFA:
for label, next in sorted(state.arcs.items()):
writer(" %s -> %d" % (label, self.states.index(next)))
+ def dump_graph(self, writer):
+ """Dump a DOT representation of the DFA"""
+ writer('digraph %s_dfa {\n' % self.name)
+ for i, state in enumerate(self.states):
+ writer(' %d [label="State %d %s"];\n' % (i, i, state.is_final and "(final)" or ""))
+ for label, next in sorted(state.arcs.items()):
+ writer(" %d -> %d [label=%s];\n" % (i, self.states.index(next), label.replace("'", '"')))
+ writer('}\n')
+
class DFAState(object):
"""A state of a DFA
diff --git a/Parser/pgen/pgen.py b/Parser/pgen/pgen.py
index 2f444eb8c86..03032d4ed8c 100644
--- a/Parser/pgen/pgen.py
+++ b/Parser/pgen/pgen.py
@@ -130,7 +130,7 @@ class Label(str):
class ParserGenerator(object):
- def __init__(self, grammar_file, token_file, verbose=False):
+ def __init__(self, grammar_file, token_file, verbose=False, graph_file=None):
with open(grammar_file) as f:
self.grammar = f.read()
with open(token_file) as tok_file:
@@ -141,6 +141,7 @@ class ParserGenerator(object):
self.opmap["<>"] = "NOTEQUAL"
self.verbose = verbose
self.filename = grammar_file
+ self.graph_file = graph_file
self.dfas, self.startsymbol = self.create_dfas()
self.first = {} # map from symbol name to set of tokens
self.calculate_first_sets()
@@ -152,11 +153,15 @@ class ParserGenerator(object):
if self.verbose:
print("Dump of NFA for", nfa.name)
nfa.dump()
+ if self.graph_file is not None:
+ nfa.dump_graph(self.graph_file.write)
dfa = DFA.from_nfa(nfa)
if self.verbose:
print("Dump of DFA for", dfa.name)
dfa.dump()
dfa.simplify()
+ if self.graph_file is not None:
+ dfa.dump_graph(self.graph_file.write)
rule_to_dfas[dfa.name] = dfa
if start_nonterminal is None:
diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c
index f84093dae5b..630b0aaab03 100644
--- a/Parser/tokenizer.c
+++ b/Parser/tokenizer.c
@@ -1,6 +1,7 @@
/* Tokenizer implementation */
+#define PY_SSIZE_T_CLEAN
#include "Python.h"
#include
@@ -886,6 +887,7 @@ tok_nextc(struct tok_state *tok)
size_t start = tok->start - tok->buf;
size_t oldlen = tok->cur - tok->buf;
size_t newlen = oldlen + strlen(newtok);
+ Py_ssize_t cur_multi_line_start = tok->multi_line_start - tok->buf;
char *buf = tok->buf;
buf = (char *)PyMem_REALLOC(buf, newlen+1);
tok->lineno++;
@@ -898,6 +900,7 @@ tok_nextc(struct tok_state *tok)
}
tok->buf = buf;
tok->cur = tok->buf + oldlen;
+ tok->multi_line_start = tok->buf + cur_multi_line_start;
tok->line_start = tok->cur;
strcpy(tok->buf + oldlen, newtok);
PyMem_FREE(newtok);
@@ -1032,17 +1035,44 @@ tok_backup(struct tok_state *tok, int c)
static int
syntaxerror(struct tok_state *tok, const char *format, ...)
{
+ PyObject *errmsg, *errtext, *args;
va_list vargs;
#ifdef HAVE_STDARG_PROTOTYPES
va_start(vargs, format);
#else
va_start(vargs);
#endif
- PyErr_FormatV(PyExc_SyntaxError, format, vargs);
+ errmsg = PyUnicode_FromFormatV(format, vargs);
va_end(vargs);
- PyErr_SyntaxLocationObject(tok->filename,
- tok->lineno,
- (int)(tok->cur - tok->line_start));
+ if (!errmsg) {
+ goto error;
+ }
+
+ errtext = PyUnicode_DecodeUTF8(tok->line_start, tok->cur - tok->line_start,
+ "replace");
+ if (!errtext) {
+ goto error;
+ }
+ int offset = (int)PyUnicode_GET_LENGTH(errtext);
+ Py_ssize_t line_len = strcspn(tok->line_start, "\n");
+ if (line_len != tok->cur - tok->line_start) {
+ Py_DECREF(errtext);
+ errtext = PyUnicode_DecodeUTF8(tok->line_start, line_len,
+ "replace");
+ }
+ if (!errtext) {
+ goto error;
+ }
+
+ args = Py_BuildValue("(O(OiiN))", errmsg,
+ tok->filename, tok->lineno, offset, errtext);
+ if (args) {
+ PyErr_SetObject(PyExc_SyntaxError, args);
+ Py_DECREF(args);
+ }
+
+error:
+ Py_XDECREF(errmsg);
tok->done = E_ERROR;
return ERRORTOKEN;
}
@@ -1077,8 +1107,9 @@ verify_identifier(struct tok_state *tok)
}
result = PyUnicode_IsIdentifier(s);
Py_DECREF(s);
- if (result == 0)
+ if (result == 0) {
tok->done = E_IDENTIFIER;
+ }
return result;
}
diff --git a/Programs/_testembed.c b/Programs/_testembed.c
index b98a38a1ba6..b98696cbe03 100644
--- a/Programs/_testembed.c
+++ b/Programs/_testembed.c
@@ -506,7 +506,6 @@ static int test_init_from_config(void)
config.import_time = 1;
config.show_ref_count = 1;
- config.show_alloc_count = 1;
/* FIXME: test dump_refs: bpo-34223 */
putenv("PYTHONMALLOCSTATS=0");
diff --git a/Python/Python-ast.c b/Python/Python-ast.c
index d5465d795cf..e9925e742e7 100644
--- a/Python/Python-ast.c
+++ b/Python/Python-ast.c
@@ -9887,355 +9887,533 @@ PyInit__ast(void)
if (!init_types()) return NULL;
m = PyState_FindModule(&_astmodule);
if (!m) return NULL;
+ if (PyModule_AddObject(m, "AST", astmodulestate_global->AST_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AST_type);
- if (PyModule_AddObject(m, "AST", astmodulestate_global->AST_type) < 0)
- return NULL;
- if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0)
- return NULL;
- if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0)
- return NULL;
- if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0)
- return NULL;
- if (PyModule_AddObject(m, "mod", astmodulestate_global->mod_type) < 0)
- return NULL;
+ if (PyModule_AddIntMacro(m, PyCF_ALLOW_TOP_LEVEL_AWAIT) < 0) {
+ goto error;
+ }
+ if (PyModule_AddIntMacro(m, PyCF_ONLY_AST) < 0) {
+ goto error;
+ }
+ if (PyModule_AddIntMacro(m, PyCF_TYPE_COMMENTS) < 0) {
+ goto error;
+ }
+ if (PyModule_AddObject(m, "mod", astmodulestate_global->mod_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->mod_type);
if (PyModule_AddObject(m, "Module", astmodulestate_global->Module_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Module_type);
if (PyModule_AddObject(m, "Interactive",
- astmodulestate_global->Interactive_type) < 0) return NULL;
+ astmodulestate_global->Interactive_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Interactive_type);
if (PyModule_AddObject(m, "Expression",
- astmodulestate_global->Expression_type) < 0) return NULL;
+ astmodulestate_global->Expression_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Expression_type);
if (PyModule_AddObject(m, "FunctionType",
- astmodulestate_global->FunctionType_type) < 0) return NULL;
+ astmodulestate_global->FunctionType_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->FunctionType_type);
- if (PyModule_AddObject(m, "Suite", astmodulestate_global->Suite_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Suite", astmodulestate_global->Suite_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Suite_type);
- if (PyModule_AddObject(m, "stmt", astmodulestate_global->stmt_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "stmt", astmodulestate_global->stmt_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->stmt_type);
if (PyModule_AddObject(m, "FunctionDef",
- astmodulestate_global->FunctionDef_type) < 0) return NULL;
+ astmodulestate_global->FunctionDef_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->FunctionDef_type);
if (PyModule_AddObject(m, "AsyncFunctionDef",
- astmodulestate_global->AsyncFunctionDef_type) < 0) return NULL;
+ astmodulestate_global->AsyncFunctionDef_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AsyncFunctionDef_type);
if (PyModule_AddObject(m, "ClassDef", astmodulestate_global->ClassDef_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->ClassDef_type);
if (PyModule_AddObject(m, "Return", astmodulestate_global->Return_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Return_type);
if (PyModule_AddObject(m, "Delete", astmodulestate_global->Delete_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Delete_type);
if (PyModule_AddObject(m, "Assign", astmodulestate_global->Assign_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Assign_type);
if (PyModule_AddObject(m, "AugAssign",
- astmodulestate_global->AugAssign_type) < 0) return NULL;
+ astmodulestate_global->AugAssign_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AugAssign_type);
if (PyModule_AddObject(m, "AnnAssign",
- astmodulestate_global->AnnAssign_type) < 0) return NULL;
+ astmodulestate_global->AnnAssign_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AnnAssign_type);
- if (PyModule_AddObject(m, "For", astmodulestate_global->For_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "For", astmodulestate_global->For_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->For_type);
if (PyModule_AddObject(m, "AsyncFor", astmodulestate_global->AsyncFor_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AsyncFor_type);
- if (PyModule_AddObject(m, "While", astmodulestate_global->While_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "While", astmodulestate_global->While_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->While_type);
- if (PyModule_AddObject(m, "If", astmodulestate_global->If_type) < 0) return
- NULL;
+ if (PyModule_AddObject(m, "If", astmodulestate_global->If_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->If_type);
- if (PyModule_AddObject(m, "With", astmodulestate_global->With_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "With", astmodulestate_global->With_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->With_type);
if (PyModule_AddObject(m, "AsyncWith",
- astmodulestate_global->AsyncWith_type) < 0) return NULL;
+ astmodulestate_global->AsyncWith_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AsyncWith_type);
- if (PyModule_AddObject(m, "Raise", astmodulestate_global->Raise_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Raise", astmodulestate_global->Raise_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Raise_type);
- if (PyModule_AddObject(m, "Try", astmodulestate_global->Try_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Try", astmodulestate_global->Try_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Try_type);
if (PyModule_AddObject(m, "Assert", astmodulestate_global->Assert_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Assert_type);
if (PyModule_AddObject(m, "Import", astmodulestate_global->Import_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Import_type);
if (PyModule_AddObject(m, "ImportFrom",
- astmodulestate_global->ImportFrom_type) < 0) return NULL;
+ astmodulestate_global->ImportFrom_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->ImportFrom_type);
if (PyModule_AddObject(m, "Global", astmodulestate_global->Global_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Global_type);
if (PyModule_AddObject(m, "Nonlocal", astmodulestate_global->Nonlocal_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Nonlocal_type);
- if (PyModule_AddObject(m, "Expr", astmodulestate_global->Expr_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Expr", astmodulestate_global->Expr_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Expr_type);
- if (PyModule_AddObject(m, "Pass", astmodulestate_global->Pass_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Pass", astmodulestate_global->Pass_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Pass_type);
- if (PyModule_AddObject(m, "Break", astmodulestate_global->Break_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Break", astmodulestate_global->Break_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Break_type);
if (PyModule_AddObject(m, "Continue", astmodulestate_global->Continue_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Continue_type);
- if (PyModule_AddObject(m, "expr", astmodulestate_global->expr_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "expr", astmodulestate_global->expr_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->expr_type);
if (PyModule_AddObject(m, "BoolOp", astmodulestate_global->BoolOp_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->BoolOp_type);
if (PyModule_AddObject(m, "NamedExpr",
- astmodulestate_global->NamedExpr_type) < 0) return NULL;
+ astmodulestate_global->NamedExpr_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->NamedExpr_type);
- if (PyModule_AddObject(m, "BinOp", astmodulestate_global->BinOp_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "BinOp", astmodulestate_global->BinOp_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->BinOp_type);
if (PyModule_AddObject(m, "UnaryOp", astmodulestate_global->UnaryOp_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->UnaryOp_type);
if (PyModule_AddObject(m, "Lambda", astmodulestate_global->Lambda_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Lambda_type);
- if (PyModule_AddObject(m, "IfExp", astmodulestate_global->IfExp_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "IfExp", astmodulestate_global->IfExp_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->IfExp_type);
- if (PyModule_AddObject(m, "Dict", astmodulestate_global->Dict_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Dict", astmodulestate_global->Dict_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Dict_type);
- if (PyModule_AddObject(m, "Set", astmodulestate_global->Set_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Set", astmodulestate_global->Set_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Set_type);
if (PyModule_AddObject(m, "ListComp", astmodulestate_global->ListComp_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->ListComp_type);
if (PyModule_AddObject(m, "SetComp", astmodulestate_global->SetComp_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->SetComp_type);
if (PyModule_AddObject(m, "DictComp", astmodulestate_global->DictComp_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->DictComp_type);
if (PyModule_AddObject(m, "GeneratorExp",
- astmodulestate_global->GeneratorExp_type) < 0) return NULL;
+ astmodulestate_global->GeneratorExp_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->GeneratorExp_type);
- if (PyModule_AddObject(m, "Await", astmodulestate_global->Await_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Await", astmodulestate_global->Await_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Await_type);
- if (PyModule_AddObject(m, "Yield", astmodulestate_global->Yield_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Yield", astmodulestate_global->Yield_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Yield_type);
if (PyModule_AddObject(m, "YieldFrom",
- astmodulestate_global->YieldFrom_type) < 0) return NULL;
+ astmodulestate_global->YieldFrom_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->YieldFrom_type);
if (PyModule_AddObject(m, "Compare", astmodulestate_global->Compare_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Compare_type);
- if (PyModule_AddObject(m, "Call", astmodulestate_global->Call_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Call", astmodulestate_global->Call_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Call_type);
if (PyModule_AddObject(m, "FormattedValue",
- astmodulestate_global->FormattedValue_type) < 0) return NULL;
+ astmodulestate_global->FormattedValue_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->FormattedValue_type);
if (PyModule_AddObject(m, "JoinedStr",
- astmodulestate_global->JoinedStr_type) < 0) return NULL;
+ astmodulestate_global->JoinedStr_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->JoinedStr_type);
if (PyModule_AddObject(m, "Constant", astmodulestate_global->Constant_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Constant_type);
if (PyModule_AddObject(m, "Attribute",
- astmodulestate_global->Attribute_type) < 0) return NULL;
+ astmodulestate_global->Attribute_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Attribute_type);
if (PyModule_AddObject(m, "Subscript",
- astmodulestate_global->Subscript_type) < 0) return NULL;
+ astmodulestate_global->Subscript_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Subscript_type);
if (PyModule_AddObject(m, "Starred", astmodulestate_global->Starred_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Starred_type);
- if (PyModule_AddObject(m, "Name", astmodulestate_global->Name_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Name", astmodulestate_global->Name_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Name_type);
- if (PyModule_AddObject(m, "List", astmodulestate_global->List_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "List", astmodulestate_global->List_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->List_type);
- if (PyModule_AddObject(m, "Tuple", astmodulestate_global->Tuple_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Tuple", astmodulestate_global->Tuple_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Tuple_type);
if (PyModule_AddObject(m, "expr_context",
- astmodulestate_global->expr_context_type) < 0) return NULL;
+ astmodulestate_global->expr_context_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->expr_context_type);
- if (PyModule_AddObject(m, "Load", astmodulestate_global->Load_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Load", astmodulestate_global->Load_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Load_type);
- if (PyModule_AddObject(m, "Store", astmodulestate_global->Store_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Store", astmodulestate_global->Store_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Store_type);
- if (PyModule_AddObject(m, "Del", astmodulestate_global->Del_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Del", astmodulestate_global->Del_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Del_type);
if (PyModule_AddObject(m, "AugLoad", astmodulestate_global->AugLoad_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AugLoad_type);
if (PyModule_AddObject(m, "AugStore", astmodulestate_global->AugStore_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->AugStore_type);
- if (PyModule_AddObject(m, "Param", astmodulestate_global->Param_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Param", astmodulestate_global->Param_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Param_type);
- if (PyModule_AddObject(m, "slice", astmodulestate_global->slice_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "slice", astmodulestate_global->slice_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->slice_type);
- if (PyModule_AddObject(m, "Slice", astmodulestate_global->Slice_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Slice", astmodulestate_global->Slice_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Slice_type);
if (PyModule_AddObject(m, "ExtSlice", astmodulestate_global->ExtSlice_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->ExtSlice_type);
- if (PyModule_AddObject(m, "Index", astmodulestate_global->Index_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Index", astmodulestate_global->Index_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Index_type);
if (PyModule_AddObject(m, "boolop", astmodulestate_global->boolop_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->boolop_type);
- if (PyModule_AddObject(m, "And", astmodulestate_global->And_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "And", astmodulestate_global->And_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->And_type);
- if (PyModule_AddObject(m, "Or", astmodulestate_global->Or_type) < 0) return
- NULL;
+ if (PyModule_AddObject(m, "Or", astmodulestate_global->Or_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Or_type);
if (PyModule_AddObject(m, "operator", astmodulestate_global->operator_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->operator_type);
- if (PyModule_AddObject(m, "Add", astmodulestate_global->Add_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Add", astmodulestate_global->Add_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Add_type);
- if (PyModule_AddObject(m, "Sub", astmodulestate_global->Sub_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Sub", astmodulestate_global->Sub_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Sub_type);
- if (PyModule_AddObject(m, "Mult", astmodulestate_global->Mult_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Mult", astmodulestate_global->Mult_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Mult_type);
if (PyModule_AddObject(m, "MatMult", astmodulestate_global->MatMult_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->MatMult_type);
- if (PyModule_AddObject(m, "Div", astmodulestate_global->Div_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Div", astmodulestate_global->Div_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Div_type);
- if (PyModule_AddObject(m, "Mod", astmodulestate_global->Mod_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Mod", astmodulestate_global->Mod_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Mod_type);
- if (PyModule_AddObject(m, "Pow", astmodulestate_global->Pow_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Pow", astmodulestate_global->Pow_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Pow_type);
if (PyModule_AddObject(m, "LShift", astmodulestate_global->LShift_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->LShift_type);
if (PyModule_AddObject(m, "RShift", astmodulestate_global->RShift_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->RShift_type);
- if (PyModule_AddObject(m, "BitOr", astmodulestate_global->BitOr_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "BitOr", astmodulestate_global->BitOr_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->BitOr_type);
if (PyModule_AddObject(m, "BitXor", astmodulestate_global->BitXor_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->BitXor_type);
if (PyModule_AddObject(m, "BitAnd", astmodulestate_global->BitAnd_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->BitAnd_type);
if (PyModule_AddObject(m, "FloorDiv", astmodulestate_global->FloorDiv_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->FloorDiv_type);
if (PyModule_AddObject(m, "unaryop", astmodulestate_global->unaryop_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->unaryop_type);
if (PyModule_AddObject(m, "Invert", astmodulestate_global->Invert_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Invert_type);
- if (PyModule_AddObject(m, "Not", astmodulestate_global->Not_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "Not", astmodulestate_global->Not_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Not_type);
- if (PyModule_AddObject(m, "UAdd", astmodulestate_global->UAdd_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "UAdd", astmodulestate_global->UAdd_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->UAdd_type);
- if (PyModule_AddObject(m, "USub", astmodulestate_global->USub_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "USub", astmodulestate_global->USub_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->USub_type);
- if (PyModule_AddObject(m, "cmpop", astmodulestate_global->cmpop_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "cmpop", astmodulestate_global->cmpop_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->cmpop_type);
- if (PyModule_AddObject(m, "Eq", astmodulestate_global->Eq_type) < 0) return
- NULL;
+ if (PyModule_AddObject(m, "Eq", astmodulestate_global->Eq_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Eq_type);
- if (PyModule_AddObject(m, "NotEq", astmodulestate_global->NotEq_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "NotEq", astmodulestate_global->NotEq_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->NotEq_type);
- if (PyModule_AddObject(m, "Lt", astmodulestate_global->Lt_type) < 0) return
- NULL;
+ if (PyModule_AddObject(m, "Lt", astmodulestate_global->Lt_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Lt_type);
- if (PyModule_AddObject(m, "LtE", astmodulestate_global->LtE_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "LtE", astmodulestate_global->LtE_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->LtE_type);
- if (PyModule_AddObject(m, "Gt", astmodulestate_global->Gt_type) < 0) return
- NULL;
+ if (PyModule_AddObject(m, "Gt", astmodulestate_global->Gt_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Gt_type);
- if (PyModule_AddObject(m, "GtE", astmodulestate_global->GtE_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "GtE", astmodulestate_global->GtE_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->GtE_type);
- if (PyModule_AddObject(m, "Is", astmodulestate_global->Is_type) < 0) return
- NULL;
+ if (PyModule_AddObject(m, "Is", astmodulestate_global->Is_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->Is_type);
- if (PyModule_AddObject(m, "IsNot", astmodulestate_global->IsNot_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "IsNot", astmodulestate_global->IsNot_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->IsNot_type);
- if (PyModule_AddObject(m, "In", astmodulestate_global->In_type) < 0) return
- NULL;
+ if (PyModule_AddObject(m, "In", astmodulestate_global->In_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->In_type);
- if (PyModule_AddObject(m, "NotIn", astmodulestate_global->NotIn_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "NotIn", astmodulestate_global->NotIn_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->NotIn_type);
if (PyModule_AddObject(m, "comprehension",
- astmodulestate_global->comprehension_type) < 0) return NULL;
+ astmodulestate_global->comprehension_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->comprehension_type);
if (PyModule_AddObject(m, "excepthandler",
- astmodulestate_global->excepthandler_type) < 0) return NULL;
+ astmodulestate_global->excepthandler_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->excepthandler_type);
if (PyModule_AddObject(m, "ExceptHandler",
- astmodulestate_global->ExceptHandler_type) < 0) return NULL;
+ astmodulestate_global->ExceptHandler_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->ExceptHandler_type);
if (PyModule_AddObject(m, "arguments",
- astmodulestate_global->arguments_type) < 0) return NULL;
+ astmodulestate_global->arguments_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->arguments_type);
- if (PyModule_AddObject(m, "arg", astmodulestate_global->arg_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "arg", astmodulestate_global->arg_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->arg_type);
if (PyModule_AddObject(m, "keyword", astmodulestate_global->keyword_type) <
- 0) return NULL;
+ 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->keyword_type);
- if (PyModule_AddObject(m, "alias", astmodulestate_global->alias_type) < 0)
- return NULL;
+ if (PyModule_AddObject(m, "alias", astmodulestate_global->alias_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->alias_type);
if (PyModule_AddObject(m, "withitem", astmodulestate_global->withitem_type)
- < 0) return NULL;
+ < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->withitem_type);
if (PyModule_AddObject(m, "type_ignore",
- astmodulestate_global->type_ignore_type) < 0) return NULL;
+ astmodulestate_global->type_ignore_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->type_ignore_type);
if (PyModule_AddObject(m, "TypeIgnore",
- astmodulestate_global->TypeIgnore_type) < 0) return NULL;
+ astmodulestate_global->TypeIgnore_type) < 0) {
+ goto error;
+ }
Py_INCREF(astmodulestate(m)->TypeIgnore_type);
return m;
+error:
+ Py_DECREF(m);
+ return NULL;
}
diff --git a/Python/_warnings.c b/Python/_warnings.c
index b8585d20478..acef313fc9f 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -24,6 +24,8 @@ typedef struct _warnings_runtime_state WarningsState;
/* Forward declaration of the _warnings module definition. */
static struct PyModuleDef warningsmodule;
+_Py_IDENTIFIER(__name__);
+
/* Given a module object, get its per-module state. */
static WarningsState *
_Warnings_GetState()
@@ -484,7 +486,6 @@ show_warning(PyObject *filename, int lineno, PyObject *text,
PyObject *f_stderr;
PyObject *name;
char lineno_str[128];
- _Py_IDENTIFIER(__name__);
PyOS_snprintf(lineno_str, sizeof(lineno_str), ":%d: ", lineno);
@@ -592,7 +593,7 @@ call_show_warning(PyObject *category, PyObject *text, PyObject *message,
if (msg == NULL)
goto error;
- res = _PyObject_CallOneArg(show_fn, msg);
+ res = PyObject_CallOneArg(show_fn, msg);
Py_DECREF(show_fn);
Py_DECREF(msg);
@@ -649,11 +650,11 @@ warn_explicit(PyObject *category, PyObject *message,
text = PyObject_Str(message);
if (text == NULL)
goto cleanup;
- category = (PyObject*)message->ob_type;
+ category = (PyObject*)Py_TYPE(message);
}
else {
text = message;
- message = _PyObject_CallOneArg(category, message);
+ message = PyObject_CallOneArg(category, message);
if (message == NULL)
goto cleanup;
}
@@ -818,7 +819,6 @@ setup_context(Py_ssize_t stack_level, PyObject **filename, int *lineno,
PyObject **module, PyObject **registry)
{
_Py_IDENTIFIER(__warningregistry__);
- _Py_IDENTIFIER(__name__);
PyObject *globals;
/* Setup globals, filename and lineno. */
@@ -906,7 +906,7 @@ get_category(PyObject *message, PyObject *category)
return NULL;
if (rc == 1)
- category = (PyObject*)message->ob_type;
+ category = (PyObject*)Py_TYPE(message);
else if (category == NULL || category == Py_None)
category = PyExc_UserWarning;
@@ -969,7 +969,6 @@ get_source_line(PyObject *module_globals, int lineno)
{
_Py_IDENTIFIER(get_source);
_Py_IDENTIFIER(__loader__);
- _Py_IDENTIFIER(__name__);
PyObject *loader;
PyObject *module_name;
PyObject *get_source;
@@ -998,7 +997,7 @@ get_source_line(PyObject *module_globals, int lineno)
return NULL;
}
/* Call get_source() to get the source code. */
- source = _PyObject_CallOneArg(get_source, module_name);
+ source = PyObject_CallOneArg(get_source, module_name);
Py_DECREF(get_source);
Py_DECREF(module_name);
if (!source) {
@@ -1285,7 +1284,7 @@ _PyErr_WarnUnawaitedCoroutine(PyObject *coro)
int warned = 0;
PyObject *fn = get_warnings_attr(&PyId__warn_unawaited_coroutine, 1);
if (fn) {
- PyObject *res = _PyObject_CallOneArg(fn, coro);
+ PyObject *res = PyObject_CallOneArg(fn, coro);
Py_DECREF(fn);
if (res || PyErr_ExceptionMatches(PyExc_RuntimeWarning)) {
warned = 1;
diff --git a/Python/ast.c b/Python/ast.c
index e4e9b837d34..ad25565b7c7 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -583,7 +583,7 @@ static stmt_ty ast_for_for_stmt(struct compiling *, const node *, bool);
/* Note different signature for ast_for_call */
static expr_ty ast_for_call(struct compiling *, const node *, expr_ty,
- const node *, const node *);
+ const node *, const node *, const node *);
static PyObject *parsenumber(struct compiling *, const char *);
static expr_ty parsestrplus(struct compiling *, const node *n);
@@ -1028,13 +1028,13 @@ forbidden_name(struct compiling *c, identifier name, const node *n,
}
static expr_ty
-copy_location(expr_ty e, const node *n)
+copy_location(expr_ty e, const node *n, const node *end)
{
if (e) {
e->lineno = LINENO(n);
e->col_offset = n->n_col_offset;
- e->end_lineno = n->n_end_lineno;
- e->end_col_offset = n->n_end_col_offset;
+ e->end_lineno = end->n_end_lineno;
+ e->end_col_offset = end->n_end_col_offset;
}
return e;
}
@@ -1715,11 +1715,12 @@ ast_for_dotted_name(struct compiling *c, const node *n)
return NULL;
for (i = 2; i < NCH(n); i+=2) {
- id = NEW_IDENTIFIER(CHILD(n, i));
+ const node *child = CHILD(n, i);
+ id = NEW_IDENTIFIER(child);
if (!id)
return NULL;
e = Attribute(e, id, Load, lineno, col_offset,
- n->n_end_lineno, n->n_end_col_offset, c->c_arena);
+ child->n_end_lineno, child->n_end_col_offset, c->c_arena);
if (!e)
return NULL;
}
@@ -1756,7 +1757,8 @@ ast_for_decorator(struct compiling *c, const node *n)
name_expr = NULL;
}
else {
- d = ast_for_call(c, CHILD(n, 3), name_expr, CHILD(n, 2), CHILD(n, 4));
+ d = ast_for_call(c, CHILD(n, 3), name_expr,
+ CHILD(n, 1), CHILD(n, 2), CHILD(n, 4));
if (!d)
return NULL;
name_expr = NULL;
@@ -1955,7 +1957,7 @@ ast_for_namedexpr(struct compiling *c, const node *n)
if (target->kind != Name_kind) {
const char *expr_name = get_expr_name(target);
if (expr_name != NULL) {
- ast_error(c, n, "cannot use named assignment with %s", expr_name);
+ ast_error(c, n, "cannot use assignment expressions with %s", expr_name);
}
return NULL;
}
@@ -2464,10 +2466,10 @@ ast_for_atom(struct compiling *c, const node *n)
}
if (TYPE(CHILD(ch, 1)) == comp_for) {
- return copy_location(ast_for_genexp(c, ch), n);
+ return copy_location(ast_for_genexp(c, ch), n, n);
}
else {
- return copy_location(ast_for_testlist(c, ch), n);
+ return copy_location(ast_for_testlist(c, ch), n, n);
}
case LSQB: /* list (or list comprehension) */
ch = CHILD(n, 1);
@@ -2486,7 +2488,7 @@ ast_for_atom(struct compiling *c, const node *n)
n->n_end_lineno, n->n_end_col_offset, c->c_arena);
}
else {
- return copy_location(ast_for_listcomp(c, ch), n);
+ return copy_location(ast_for_listcomp(c, ch), n, n);
}
case LBRACE: {
/* dictorsetmaker: ( ((test ':' test | '**' test)
@@ -2527,7 +2529,7 @@ ast_for_atom(struct compiling *c, const node *n)
/* It's a dictionary display. */
res = ast_for_dictdisplay(c, ch);
}
- return copy_location(res, n);
+ return copy_location(res, n, n);
}
}
default:
@@ -2657,7 +2659,7 @@ ast_for_binop(struct compiling *c, const node *n)
}
static expr_ty
-ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr)
+ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr, const node *start)
{
/* trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME
subscriptlist: subscript (',' subscript)* [',']
@@ -2667,17 +2669,18 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr)
REQ(n, trailer);
if (TYPE(CHILD(n, 0)) == LPAR) {
if (NCH(n) == 2)
- return Call(left_expr, NULL, NULL, LINENO(n), n->n_col_offset,
+ return Call(left_expr, NULL, NULL, LINENO(start), start->n_col_offset,
n->n_end_lineno, n->n_end_col_offset, c->c_arena);
else
- return ast_for_call(c, CHILD(n, 1), left_expr, CHILD(n, 0), CHILD(n, 2));
+ return ast_for_call(c, CHILD(n, 1), left_expr,
+ start, CHILD(n, 0), CHILD(n, 2));
}
else if (TYPE(CHILD(n, 0)) == DOT) {
PyObject *attr_id = NEW_IDENTIFIER(CHILD(n, 1));
if (!attr_id)
return NULL;
return Attribute(left_expr, attr_id, Load,
- LINENO(n), n->n_col_offset,
+ LINENO(start), start->n_col_offset,
n->n_end_lineno, n->n_end_col_offset, c->c_arena);
}
else {
@@ -2688,7 +2691,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr)
slice_ty slc = ast_for_slice(c, CHILD(n, 0));
if (!slc)
return NULL;
- return Subscript(left_expr, slc, Load, LINENO(n), n->n_col_offset,
+ return Subscript(left_expr, slc, Load, LINENO(start), start->n_col_offset,
n_copy->n_end_lineno, n_copy->n_end_col_offset,
c->c_arena);
}
@@ -2715,7 +2718,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr)
}
if (!simple) {
return Subscript(left_expr, ExtSlice(slices, c->c_arena),
- Load, LINENO(n), n->n_col_offset,
+ Load, LINENO(start), start->n_col_offset,
n_copy->n_end_lineno, n_copy->n_end_col_offset, c->c_arena);
}
/* extract Index values and put them in a Tuple */
@@ -2732,7 +2735,7 @@ ast_for_trailer(struct compiling *c, const node *n, expr_ty left_expr)
if (!e)
return NULL;
return Subscript(left_expr, Index(e, c->c_arena),
- Load, LINENO(n), n->n_col_offset,
+ Load, LINENO(start), start->n_col_offset,
n_copy->n_end_lineno, n_copy->n_end_col_offset, c->c_arena);
}
}
@@ -2770,7 +2773,7 @@ static expr_ty
ast_for_atom_expr(struct compiling *c, const node *n)
{
int i, nch, start = 0;
- expr_ty e, tmp;
+ expr_ty e;
REQ(n, atom_expr);
nch = NCH(n);
@@ -2799,12 +2802,9 @@ ast_for_atom_expr(struct compiling *c, const node *n)
node *ch = CHILD(n, i);
if (TYPE(ch) != trailer)
break;
- tmp = ast_for_trailer(c, ch, e);
- if (!tmp)
+ e = ast_for_trailer(c, ch, e, CHILD(n, start));
+ if (!e)
return NULL;
- tmp->lineno = e->lineno;
- tmp->col_offset = e->col_offset;
- e = tmp;
}
if (start) {
@@ -3034,7 +3034,7 @@ ast_for_expr(struct compiling *c, const node *n)
static expr_ty
ast_for_call(struct compiling *c, const node *n, expr_ty func,
- const node *maybegenbeg, const node *closepar)
+ const node *start, const node *maybegenbeg, const node *closepar)
{
/*
arglist: argument (',' argument)* [',']
@@ -3146,7 +3146,7 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func,
}
else if (TYPE(CHILD(ch, 1)) == comp_for) {
/* the lone generator expression */
- e = copy_location(ast_for_genexp(c, ch), maybegenbeg);
+ e = copy_location(ast_for_genexp(c, ch), maybegenbeg, closepar);
if (!e)
return NULL;
asdl_seq_SET(args, nargs++, e);
@@ -3238,7 +3238,7 @@ ast_for_call(struct compiling *c, const node *n, expr_ty func,
}
}
- return Call(func, args, keywords, func->lineno, func->col_offset,
+ return Call(func, args, keywords, LINENO(start), start->n_col_offset,
closepar->n_end_lineno, closepar->n_end_col_offset, c->c_arena);
}
@@ -4485,7 +4485,8 @@ ast_for_classdef(struct compiling *c, const node *n, asdl_seq *decorator_seq)
dummy = Name(dummy_name, Load, LINENO(n), n->n_col_offset,
CHILD(n, 1)->n_end_lineno, CHILD(n, 1)->n_end_col_offset,
c->c_arena);
- call = ast_for_call(c, CHILD(n, 3), dummy, NULL, CHILD(n, 4));
+ call = ast_for_call(c, CHILD(n, 3), dummy,
+ CHILD(n, 1), NULL, CHILD(n, 4));
if (!call)
return NULL;
}
diff --git a/Python/ast_opt.c b/Python/ast_opt.c
index 96c766fc095..f2a2c259149 100644
--- a/Python/ast_opt.c
+++ b/Python/ast_opt.c
@@ -617,6 +617,7 @@ astfold_comprehension(comprehension_ty node_, PyArena *ctx_, int optimize_)
static int
astfold_arguments(arguments_ty node_, PyArena *ctx_, int optimize_)
{
+ CALL_SEQ(astfold_arg, arg_ty, node_->posonlyargs);
CALL_SEQ(astfold_arg, arg_ty, node_->args);
CALL_OPT(astfold_arg, arg_ty, node_->vararg);
CALL_SEQ(astfold_arg, arg_ty, node_->kwonlyargs);
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 34267685be2..cb048af9785 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -4,6 +4,7 @@
#include
#include "ast.h"
#undef Yield /* undefine macro conflicting with */
+#include "pycore_object.h"
#include "pycore_pyerrors.h"
#include "pycore_pystate.h"
#include "pycore_tupleobject.h"
@@ -55,7 +56,7 @@ update_bases(PyObject *bases, PyObject *const *args, Py_ssize_t nargs)
}
continue;
}
- new_base = _PyObject_CallOneArg(meth, bases);
+ new_base = PyObject_CallOneArg(meth, bases);
Py_DECREF(meth);
if (!new_base) {
goto error;
@@ -169,7 +170,7 @@ builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
/* else get the type of the first base */
else {
PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
- meta = (PyObject *) (base0->ob_type);
+ meta = (PyObject *)Py_TYPE(base0);
}
Py_INCREF(meta);
isclass = 1; /* meta is really a class */
@@ -202,7 +203,7 @@ builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
}
else {
PyObject *pargs[2] = {name, bases};
- ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
+ ns = PyObject_VectorcallDict(prep, pargs, 2, mkw);
Py_DECREF(prep);
}
if (ns == NULL) {
@@ -228,7 +229,7 @@ builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs,
}
}
PyObject *margs[3] = {name, bases, ns};
- cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
+ cls = PyObject_VectorcallDict(meta, margs, 3, mkw);
if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
PyObject *cell_cls = PyCell_GET(cell);
if (cell_cls != cls) {
@@ -488,7 +489,7 @@ builtin_breakpoint(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
}
Py_INCREF(hook);
- PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
+ PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
Py_DECREF(hook);
return retval;
}
@@ -574,7 +575,7 @@ filter_next(filterobject *lz)
ok = PyObject_IsTrue(item);
} else {
PyObject *good;
- good = _PyObject_CallOneArg(lz->func, item);
+ good = PyObject_CallOneArg(lz->func, item);
if (good == NULL) {
Py_DECREF(item);
return NULL;
@@ -1001,13 +1002,13 @@ builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
if (!PyDict_Check(globals)) {
PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
- globals->ob_type->tp_name);
+ Py_TYPE(globals)->tp_name);
return NULL;
}
if (!PyMapping_Check(locals)) {
PyErr_Format(PyExc_TypeError,
"locals must be a mapping or None, not %.100s",
- locals->ob_type->tp_name);
+ Py_TYPE(locals)->tp_name);
return NULL;
}
if (_PyDict_GetItemIdWithError(globals, &PyId___builtins__) == NULL) {
@@ -1382,11 +1383,11 @@ builtin_next(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
if (!PyIter_Check(it)) {
PyErr_Format(PyExc_TypeError,
"'%.200s' object is not an iterator",
- it->ob_type->tp_name);
+ Py_TYPE(it)->tp_name);
return NULL;
}
- res = (*it->ob_type->tp_iternext)(it);
+ res = (*Py_TYPE(it)->tp_iternext)(it);
if (res != NULL) {
return res;
} else if (nargs > 1) {
@@ -1589,10 +1590,15 @@ min_max(PyObject *args, PyObject *kwds, int op)
const int positional = PyTuple_Size(args) > 1;
int ret;
- if (positional)
+ if (positional) {
v = args;
- else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
+ }
+ else if (!PyArg_UnpackTuple(args, name, 1, 1, &v)) {
+ if (PyExceptionClass_Check(PyExc_TypeError)) {
+ PyErr_Format(PyExc_TypeError, "%s expected at least 1 argument, got 0", name);
+ }
return NULL;
+ }
emptytuple = PyTuple_New(0);
if (emptytuple == NULL)
@@ -1625,7 +1631,7 @@ min_max(PyObject *args, PyObject *kwds, int op)
while (( item = PyIter_Next(it) )) {
/* get the value from the key function */
if (keyfunc != NULL) {
- val = _PyObject_CallOneArg(keyfunc, item);
+ val = PyObject_CallOneArg(keyfunc, item);
if (val == NULL)
goto Fail_it_item;
}
@@ -1782,7 +1788,7 @@ builtin_ord(PyObject *module, PyObject *c)
else {
PyErr_Format(PyExc_TypeError,
"ord() expected string of length 1, but " \
- "%.200s found", c->ob_type->tp_name);
+ "%.200s found", Py_TYPE(c)->tp_name);
return NULL;
}
@@ -1850,7 +1856,7 @@ builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject
else if (sep && !PyUnicode_Check(sep)) {
PyErr_Format(PyExc_TypeError,
"sep must be None or a string, not %.200s",
- sep->ob_type->tp_name);
+ Py_TYPE(sep)->tp_name);
return NULL;
}
if (end == Py_None) {
@@ -1859,7 +1865,7 @@ builtin_print(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject
else if (end && !PyUnicode_Check(end)) {
PyErr_Format(PyExc_TypeError,
"end must be None or a string, not %.200s",
- end->ob_type->tp_name);
+ Py_TYPE(end)->tp_name);
return NULL;
}
@@ -2172,7 +2178,7 @@ builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits)
if (ndigits == Py_None)
result = _PyObject_CallNoArg(round);
else
- result = _PyObject_CallOneArg(round, ndigits);
+ result = PyObject_CallOneArg(round, ndigits);
Py_DECREF(round);
return result;
}
@@ -2228,7 +2234,7 @@ builtin_sorted(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyObject
}
assert(nargs >= 1);
- v = _PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
+ v = PyObject_Vectorcall(callable, args + 1, nargs - 1, kwnames);
Py_DECREF(callable);
if (v == NULL) {
Py_DECREF(newlist);
@@ -2435,7 +2441,11 @@ builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
empty = []
sum([[x] for x in range(10)], empty)
- would change the value of empty. */
+ would change the value of empty. In fact, using
+ in-place addition rather that binary addition for
+ any of the steps introduces subtle behavior changes:
+
+ https://bugs.python.org/issue18305 */
temp = PyNumber_Add(result, item);
Py_DECREF(result);
Py_DECREF(item);
diff --git a/Python/ceval.c b/Python/ceval.c
index 96ed329b0d9..426d0bbee89 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -39,6 +39,7 @@
# error "ceval.c must be build with Py_BUILD_CORE define for best performance"
#endif
+_Py_IDENTIFIER(__name__);
/* Forward declarations */
Py_LOCAL_INLINE(PyObject *) call_function(
@@ -67,7 +68,6 @@ static void maybe_dtrace_line(PyFrameObject *, int *, int *, int *);
static void dtrace_function_entry(PyFrameObject *);
static void dtrace_function_return(PyFrameObject *);
-static PyObject * cmp_outcome(PyThreadState *, int, PyObject *, PyObject *);
static PyObject * import_name(PyThreadState *, PyFrameObject *,
PyObject *, PyObject *, PyObject *);
static PyObject * import_from(PyThreadState *, PyObject *, PyObject *);
@@ -303,9 +303,7 @@ PyEval_ReleaseLock(void)
void
PyEval_AcquireThread(PyThreadState *tstate)
{
- if (tstate == NULL) {
- Py_FatalError("PyEval_AcquireThread: NULL new thread state");
- }
+ assert(tstate != NULL);
_PyRuntimeState *runtime = tstate->interp->runtime;
struct _ceval_runtime_state *ceval = &runtime->ceval;
@@ -322,9 +320,7 @@ PyEval_AcquireThread(PyThreadState *tstate)
void
PyEval_ReleaseThread(PyThreadState *tstate)
{
- if (tstate == NULL) {
- Py_FatalError("PyEval_ReleaseThread: NULL thread state");
- }
+ assert(tstate != NULL);
_PyRuntimeState *runtime = tstate->interp->runtime;
PyThreadState *new_tstate = _PyThreadState_Swap(&runtime->gilstate, NULL);
@@ -386,12 +382,10 @@ PyEval_SaveThread(void)
void
PyEval_RestoreThread(PyThreadState *tstate)
{
+ assert(tstate != NULL);
+
_PyRuntimeState *runtime = tstate->interp->runtime;
struct _ceval_runtime_state *ceval = &runtime->ceval;
-
- if (tstate == NULL) {
- Py_FatalError("PyEval_RestoreThread: NULL tstate");
- }
assert(gil_created(&ceval->gil));
int err = errno;
@@ -585,11 +579,11 @@ error:
}
void
-_Py_FinishPendingCalls(_PyRuntimeState *runtime)
+_Py_FinishPendingCalls(PyThreadState *tstate)
{
assert(PyGILState_Check());
- PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
+ _PyRuntimeState *runtime = tstate->interp->runtime;
struct _pending_calls *pending = &runtime->ceval.pending;
PyThread_acquire_lock(pending->lock, WAIT_LOCK);
@@ -1880,7 +1874,7 @@ main_loop:
Py_DECREF(value);
goto error;
}
- res = _PyObject_CallOneArg(hook, value);
+ res = PyObject_CallOneArg(hook, value);
Py_DECREF(value);
if (res == NULL)
goto error;
@@ -1913,7 +1907,8 @@ main_loop:
case TARGET(RETURN_VALUE): {
retval = POP();
assert(f->f_iblock == 0);
- goto exit_returning;
+ assert(EMPTY());
+ goto exiting;
}
case TARGET(GET_AITER): {
@@ -2083,7 +2078,7 @@ main_loop:
/* and repeat... */
assert(f->f_lasti >= (int)sizeof(_Py_CODEUNIT));
f->f_lasti -= sizeof(_Py_CODEUNIT);
- goto exit_yielding;
+ goto exiting;
}
case TARGET(YIELD_VALUE): {
@@ -2100,7 +2095,7 @@ main_loop:
}
f->f_stacktop = stack_pointer;
- goto exit_yielding;
+ goto exiting;
}
case TARGET(POP_EXCEPT): {
@@ -2138,7 +2133,7 @@ main_loop:
PyObject *val = POP();
PyObject *tb = POP();
assert(PyExceptionClass_Check(exc));
- PyErr_Restore(exc, val, tb);
+ _PyErr_Restore(tstate, exc, val, tb);
goto exception_unwind;
}
@@ -2621,46 +2616,46 @@ main_loop:
DISPATCH();
}
- case TARGET(BUILD_TUPLE_UNPACK_WITH_CALL):
- case TARGET(BUILD_TUPLE_UNPACK):
- case TARGET(BUILD_LIST_UNPACK): {
- int convert_to_tuple = opcode != BUILD_LIST_UNPACK;
- Py_ssize_t i;
- PyObject *sum = PyList_New(0);
- PyObject *return_value;
-
- if (sum == NULL)
+ case TARGET(LIST_TO_TUPLE): {
+ PyObject *list = POP();
+ PyObject *tuple = PyList_AsTuple(list);
+ Py_DECREF(list);
+ if (tuple == NULL) {
goto error;
+ }
+ PUSH(tuple);
+ DISPATCH();
+ }
- for (i = oparg; i > 0; i--) {
- PyObject *none_val;
-
- none_val = _PyList_Extend((PyListObject *)sum, PEEK(i));
- if (none_val == NULL) {
- if (opcode == BUILD_TUPLE_UNPACK_WITH_CALL &&
- _PyErr_ExceptionMatches(tstate, PyExc_TypeError))
- {
- check_args_iterable(tstate, PEEK(1 + oparg), PEEK(i));
- }
- Py_DECREF(sum);
- goto error;
+ case TARGET(LIST_EXTEND): {
+ PyObject *iterable = POP();
+ PyObject *list = PEEK(oparg);
+ PyObject *none_val = _PyList_Extend((PyListObject *)list, iterable);
+ if (none_val == NULL) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
+ (Py_TYPE(iterable)->tp_iter == NULL && !PySequence_Check(iterable)))
+ {
+ _PyErr_Clear(tstate);
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "Value after * must be an iterable, not %.200s",
+ Py_TYPE(iterable)->tp_name);
}
- Py_DECREF(none_val);
+ Py_DECREF(iterable);
+ goto error;
}
+ Py_DECREF(none_val);
+ Py_DECREF(iterable);
+ DISPATCH();
+ }
- if (convert_to_tuple) {
- return_value = PyList_AsTuple(sum);
- Py_DECREF(sum);
- if (return_value == NULL)
- goto error;
+ case TARGET(SET_UPDATE): {
+ PyObject *iterable = POP();
+ PyObject *set = PEEK(oparg);
+ int err = _PySet_Update(set, iterable);
+ Py_DECREF(iterable);
+ if (err < 0) {
+ goto error;
}
- else {
- return_value = sum;
- }
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(return_value);
DISPATCH();
}
@@ -2685,25 +2680,6 @@ main_loop:
DISPATCH();
}
- case TARGET(BUILD_SET_UNPACK): {
- Py_ssize_t i;
- PyObject *sum = PySet_New(NULL);
- if (sum == NULL)
- goto error;
-
- for (i = oparg; i > 0; i--) {
- if (_PySet_Update(sum, PEEK(i)) < 0) {
- Py_DECREF(sum);
- goto error;
- }
- }
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(sum);
- DISPATCH();
- }
-
case TARGET(BUILD_MAP): {
Py_ssize_t i;
PyObject *map = _PyDict_NewPresized((Py_ssize_t)oparg);
@@ -2820,49 +2796,32 @@ main_loop:
DISPATCH();
}
- case TARGET(BUILD_MAP_UNPACK): {
- Py_ssize_t i;
- PyObject *sum = PyDict_New();
- if (sum == NULL)
- goto error;
-
- for (i = oparg; i > 0; i--) {
- PyObject *arg = PEEK(i);
- if (PyDict_Update(sum, arg) < 0) {
- if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
- _PyErr_Format(tstate, PyExc_TypeError,
- "'%.200s' object is not a mapping",
- arg->ob_type->tp_name);
- }
- Py_DECREF(sum);
- goto error;
+ case TARGET(DICT_UPDATE): {
+ PyObject *update = POP();
+ PyObject *dict = PEEK(oparg);
+ if (PyDict_Update(dict, update) < 0) {
+ if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
+ _PyErr_Format(tstate, PyExc_TypeError,
+ "'%.200s' object is not a mapping",
+ Py_TYPE(update)->tp_name);
}
+ Py_DECREF(update);
+ goto error;
}
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(sum);
+ Py_DECREF(update);
DISPATCH();
}
- case TARGET(BUILD_MAP_UNPACK_WITH_CALL): {
- Py_ssize_t i;
- PyObject *sum = PyDict_New();
- if (sum == NULL)
+ case TARGET(DICT_MERGE): {
+ PyObject *update = POP();
+ PyObject *dict = PEEK(oparg);
+
+ if (_PyDict_MergeEx(dict, update, 2) < 0) {
+ format_kwargs_error(tstate, PEEK(2 + oparg), update);
+ Py_DECREF(update);
goto error;
-
- for (i = oparg; i > 0; i--) {
- PyObject *arg = PEEK(i);
- if (_PyDict_MergeEx(sum, arg, 2) < 0) {
- Py_DECREF(sum);
- format_kwargs_error(tstate, PEEK(2 + oparg), arg);
- goto error;
- }
}
-
- while (oparg--)
- Py_DECREF(POP());
- PUSH(sum);
+ Py_DECREF(update);
PREDICT(CALL_FUNCTION_EX);
DISPATCH();
}
@@ -2896,12 +2855,13 @@ main_loop:
}
case TARGET(COMPARE_OP): {
+ assert(oparg <= Py_GE);
PyObject *right = POP();
PyObject *left = TOP();
- PyObject *res = cmp_outcome(tstate, oparg, left, right);
+ PyObject *res = PyObject_RichCompare(left, right, oparg);
+ SET_TOP(res);
Py_DECREF(left);
Py_DECREF(right);
- SET_TOP(res);
if (res == NULL)
goto error;
PREDICT(POP_JUMP_IF_FALSE);
@@ -2909,6 +2869,81 @@ main_loop:
DISPATCH();
}
+ case TARGET(IS_OP): {
+ PyObject *right = POP();
+ PyObject *left = TOP();
+ int res = (left == right)^oparg;
+ PyObject *b = res ? Py_True : Py_False;
+ Py_INCREF(b);
+ SET_TOP(b);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ PREDICT(POP_JUMP_IF_FALSE);
+ PREDICT(POP_JUMP_IF_TRUE);
+ FAST_DISPATCH();
+ }
+
+ case TARGET(CONTAINS_OP): {
+ PyObject *right = POP();
+ PyObject *left = POP();
+ int res = PySequence_Contains(right, left);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res < 0) {
+ goto error;
+ }
+ PyObject *b = (res^oparg) ? Py_True : Py_False;
+ Py_INCREF(b);
+ PUSH(b);
+ PREDICT(POP_JUMP_IF_FALSE);
+ PREDICT(POP_JUMP_IF_TRUE);
+ FAST_DISPATCH();
+ }
+
+#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
+ "BaseException is not allowed"
+
+ case TARGET(JUMP_IF_NOT_EXC_MATCH): {
+ PyObject *right = POP();
+ PyObject *left = POP();
+ if (PyTuple_Check(right)) {
+ Py_ssize_t i, length;
+ length = PyTuple_GET_SIZE(right);
+ for (i = 0; i < length; i++) {
+ PyObject *exc = PyTuple_GET_ITEM(right, i);
+ if (!PyExceptionClass_Check(exc)) {
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ CANNOT_CATCH_MSG);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ goto error;
+ }
+ }
+ }
+ else {
+ if (!PyExceptionClass_Check(right)) {
+ _PyErr_SetString(tstate, PyExc_TypeError,
+ CANNOT_CATCH_MSG);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ goto error;
+ }
+ }
+ int res = PyErr_GivenExceptionMatches(left, right);
+ Py_DECREF(left);
+ Py_DECREF(right);
+ if (res > 0) {
+ /* Exception matches -- Do nothing */;
+ }
+ else if (res == 0) {
+ JUMPTO(oparg);
+ }
+ else {
+ goto error;
+ }
+ DISPATCH();
+ }
+
case TARGET(IMPORT_NAME): {
PyObject *name = GETITEM(names, oparg);
PyObject *fromlist = POP();
@@ -3123,7 +3158,7 @@ main_loop:
PREDICTED(FOR_ITER);
/* before: [iter]; after: [iter, iter()] *or* [] */
PyObject *iter = TOP();
- PyObject *next = (*iter->ob_type->tp_iternext)(iter);
+ PyObject *next = (*Py_TYPE(iter)->tp_iternext)(iter);
if (next != NULL) {
PUSH(next);
PREDICT(STORE_FAST);
@@ -3154,20 +3189,21 @@ main_loop:
}
case TARGET(BEFORE_ASYNC_WITH): {
- _Py_IDENTIFIER(__aexit__);
_Py_IDENTIFIER(__aenter__);
-
+ _Py_IDENTIFIER(__aexit__);
PyObject *mgr = TOP();
- PyObject *exit = special_lookup(tstate, mgr, &PyId___aexit__),
- *enter;
+ PyObject *enter = special_lookup(tstate, mgr, &PyId___aenter__);
PyObject *res;
- if (exit == NULL)
+ if (enter == NULL) {
goto error;
+ }
+ PyObject *exit = special_lookup(tstate, mgr, &PyId___aexit__);
+ if (exit == NULL) {
+ Py_DECREF(enter);
+ goto error;
+ }
SET_TOP(exit);
- enter = special_lookup(tstate, mgr, &PyId___aenter__);
Py_DECREF(mgr);
- if (enter == NULL)
- goto error;
res = _PyObject_CallNoArg(enter);
Py_DECREF(enter);
if (res == NULL)
@@ -3188,8 +3224,8 @@ main_loop:
}
case TARGET(SETUP_WITH): {
- _Py_IDENTIFIER(__exit__);
_Py_IDENTIFIER(__enter__);
+ _Py_IDENTIFIER(__exit__);
PyObject *mgr = TOP();
PyObject *enter = special_lookup(tstate, mgr, &PyId___enter__);
PyObject *res;
@@ -3235,7 +3271,7 @@ main_loop:
assert(!PyLong_Check(exc));
exit_func = PEEK(7);
PyObject *stack[4] = {NULL, exc, val, tb};
- res = _PyObject_Vectorcall(exit_func, stack + 1,
+ res = PyObject_Vectorcall(exit_func, stack + 1,
3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
if (res == NULL)
goto error;
@@ -3611,8 +3647,14 @@ exception_unwind:
PUSH(exc);
JUMPTO(handler);
if (_Py_TracingPossible(ceval)) {
- /* Make sure that we trace line after exception */
- instr_prev = INT_MAX;
+ int needs_new_execution_window = (f->f_lasti < instr_lb || f->f_lasti >= instr_ub);
+ int needs_line_update = (f->f_lasti == instr_lb || f->f_lasti < instr_prev);
+ /* Make sure that we trace line after exception if we are in a new execution
+ * window or we don't need a line update and we are not in the first instruction
+ * of the line. */
+ if (needs_new_execution_window || (!needs_line_update && instr_lb > 0)) {
+ instr_prev = INT_MAX;
+ }
}
/* Resume normal execution */
goto main_loop;
@@ -3626,15 +3668,13 @@ exception_unwind:
assert(retval == NULL);
assert(_PyErr_Occurred(tstate));
-exit_returning:
-
/* Pop remaining stack entries. */
while (!EMPTY()) {
PyObject *o = POP();
Py_XDECREF(o);
}
-exit_yielding:
+exiting:
if (tstate->use_tracing) {
if (tstate->c_tracefunc) {
if (call_trace_protected(tstate->c_tracefunc, tstate->c_traceobj,
@@ -4295,7 +4335,7 @@ do_raise(PyThreadState *tstate, PyObject *exc, PyObject *cause)
}
_PyErr_SetObject(tstate, type, value);
- /* PyErr_SetObject incref's its arguments */
+ /* _PyErr_SetObject incref's its arguments */
Py_DECREF(value);
Py_DECREF(type);
return 0;
@@ -4329,11 +4369,11 @@ unpack_iterable(PyThreadState *tstate, PyObject *v,
it = PyObject_GetIter(v);
if (it == NULL) {
if (_PyErr_ExceptionMatches(tstate, PyExc_TypeError) &&
- v->ob_type->tp_iter == NULL && !PySequence_Check(v))
+ Py_TYPE(v)->tp_iter == NULL && !PySequence_Check(v))
{
_PyErr_Format(tstate, PyExc_TypeError,
"cannot unpack non-iterable %.200s object",
- v->ob_type->tp_name);
+ Py_TYPE(v)->tp_name);
}
return 0;
}
@@ -4396,7 +4436,7 @@ unpack_iterable(PyThreadState *tstate, PyObject *v,
*--sp = PyList_GET_ITEM(l, ll - j);
}
/* Resize the list. */
- Py_SIZE(l) = ll - argcntafter;
+ Py_SET_SIZE(l, ll - argcntafter);
Py_DECREF(it);
return 1;
@@ -4750,7 +4790,7 @@ PyEval_GetFuncName(PyObject *func)
else if (PyCFunction_Check(func))
return ((PyCFunctionObject*)func)->m_ml->ml_name;
else
- return func->ob_type->tp_name;
+ return Py_TYPE(func)->tp_name;
}
const char *
@@ -4806,7 +4846,7 @@ trace_call_function(PyThreadState *tstate,
{
PyObject *x;
if (PyCFunction_Check(func)) {
- C_TRACE(x, _PyObject_Vectorcall(func, args, nargs, kwnames));
+ C_TRACE(x, PyObject_Vectorcall(func, args, nargs, kwnames));
return x;
}
else if (Py_TYPE(func) == &PyMethodDescr_Type && nargs > 0) {
@@ -4822,13 +4862,13 @@ trace_call_function(PyThreadState *tstate,
if (func == NULL) {
return NULL;
}
- C_TRACE(x, _PyObject_Vectorcall(func,
+ C_TRACE(x, PyObject_Vectorcall(func,
args+1, nargs-1,
kwnames));
Py_DECREF(func);
return x;
}
- return _PyObject_Vectorcall(func, args, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+ return PyObject_Vectorcall(func, args, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
}
/* Issue #29227: Inline call_function() into _PyEval_EvalFrameDefault()
@@ -4847,7 +4887,7 @@ call_function(PyThreadState *tstate, PyObject ***pp_stack, Py_ssize_t oparg, PyO
x = trace_call_function(tstate, func, stack, nargs, kwnames);
}
else {
- x = _PyObject_Vectorcall(func, stack, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
+ x = PyObject_Vectorcall(func, stack, nargs | PY_VECTORCALL_ARGUMENTS_OFFSET, kwnames);
}
assert((x != NULL) ^ (_PyErr_Occurred(tstate) != NULL));
@@ -4946,62 +4986,6 @@ _PyEval_SliceIndexNotNone(PyObject *v, Py_ssize_t *pi)
return 1;
}
-
-#define CANNOT_CATCH_MSG "catching classes that do not inherit from "\
- "BaseException is not allowed"
-
-static PyObject *
-cmp_outcome(PyThreadState *tstate, int op, PyObject *v, PyObject *w)
-{
- int res = 0;
- switch (op) {
- case PyCmp_IS:
- res = (v == w);
- break;
- case PyCmp_IS_NOT:
- res = (v != w);
- break;
- case PyCmp_IN:
- res = PySequence_Contains(w, v);
- if (res < 0)
- return NULL;
- break;
- case PyCmp_NOT_IN:
- res = PySequence_Contains(w, v);
- if (res < 0)
- return NULL;
- res = !res;
- break;
- case PyCmp_EXC_MATCH:
- if (PyTuple_Check(w)) {
- Py_ssize_t i, length;
- length = PyTuple_Size(w);
- for (i = 0; i < length; i += 1) {
- PyObject *exc = PyTuple_GET_ITEM(w, i);
- if (!PyExceptionClass_Check(exc)) {
- _PyErr_SetString(tstate, PyExc_TypeError,
- CANNOT_CATCH_MSG);
- return NULL;
- }
- }
- }
- else {
- if (!PyExceptionClass_Check(w)) {
- _PyErr_SetString(tstate, PyExc_TypeError,
- CANNOT_CATCH_MSG);
- return NULL;
- }
- }
- res = PyErr_GivenExceptionMatches(v, w);
- break;
- default:
- return PyObject_RichCompare(v, w, op);
- }
- v = res ? Py_True : Py_False;
- Py_INCREF(v);
- return v;
-}
-
static PyObject *
import_name(PyThreadState *tstate, PyFrameObject *f,
PyObject *name, PyObject *fromlist, PyObject *level)
@@ -5049,7 +5033,6 @@ static PyObject *
import_from(PyThreadState *tstate, PyObject *v, PyObject *name)
{
PyObject *x;
- _Py_IDENTIFIER(__name__);
PyObject *fullmodname, *pkgname, *pkgpath, *pkgname_or_unknown, *errmsg;
if (_PyObject_LookupAttr(v, name, &x) != 0) {
@@ -5125,7 +5108,6 @@ import_all_from(PyThreadState *tstate, PyObject *locals, PyObject *v)
{
_Py_IDENTIFIER(__all__);
_Py_IDENTIFIER(__dict__);
- _Py_IDENTIFIER(__name__);
PyObject *all, *dict, *name, *value;
int skip_leading_underscores = 0;
int pos, err;
@@ -5215,11 +5197,11 @@ import_all_from(PyThreadState *tstate, PyObject *locals, PyObject *v)
static int
check_args_iterable(PyThreadState *tstate, PyObject *func, PyObject *args)
{
- if (args->ob_type->tp_iter == NULL && !PySequence_Check(args)) {
+ if (Py_TYPE(args)->tp_iter == NULL && !PySequence_Check(args)) {
/* check_args_iterable() may be called with a live exception:
* clear it to prevent calling _PyObject_FunctionStr() with an
* exception set. */
- PyErr_Clear();
+ _PyErr_Clear(tstate);
PyObject *funcstr = _PyObject_FunctionStr(func);
if (funcstr != NULL) {
_PyErr_Format(tstate, PyExc_TypeError,
@@ -5242,7 +5224,7 @@ format_kwargs_error(PyThreadState *tstate, PyObject *func, PyObject *kwargs)
* is not a mapping.
*/
if (_PyErr_ExceptionMatches(tstate, PyExc_AttributeError)) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
PyObject *funcstr = _PyObject_FunctionStr(func);
if (funcstr != NULL) {
_PyErr_Format(
@@ -5256,7 +5238,7 @@ format_kwargs_error(PyThreadState *tstate, PyObject *func, PyObject *kwargs)
PyObject *exc, *val, *tb;
_PyErr_Fetch(tstate, &exc, &val, &tb);
if (val && PyTuple_Check(val) && PyTuple_GET_SIZE(val) == 1) {
- PyErr_Clear();
+ _PyErr_Clear(tstate);
PyObject *funcstr = _PyObject_FunctionStr(func);
if (funcstr != NULL) {
PyObject *key = PyTuple_GET_ITEM(val, 0);
diff --git a/Python/clinic/sysmodule.c.h b/Python/clinic/sysmodule.c.h
index daca0e64110..4615ebaab5d 100644
--- a/Python/clinic/sysmodule.c.h
+++ b/Python/clinic/sysmodule.c.h
@@ -758,27 +758,6 @@ exit:
return return_value;
}
-#if defined(COUNT_ALLOCS)
-
-PyDoc_STRVAR(sys_getcounts__doc__,
-"getcounts($module, /)\n"
-"--\n"
-"\n");
-
-#define SYS_GETCOUNTS_METHODDEF \
- {"getcounts", (PyCFunction)sys_getcounts, METH_NOARGS, sys_getcounts__doc__},
-
-static PyObject *
-sys_getcounts_impl(PyObject *module);
-
-static PyObject *
-sys_getcounts(PyObject *module, PyObject *Py_UNUSED(ignored))
-{
- return sys_getcounts_impl(module);
-}
-
-#endif /* defined(COUNT_ALLOCS) */
-
PyDoc_STRVAR(sys__getframe__doc__,
"_getframe($module, depth=0, /)\n"
"--\n"
@@ -988,11 +967,7 @@ sys_getandroidapilevel(PyObject *module, PyObject *Py_UNUSED(ignored))
#define SYS_GETTOTALREFCOUNT_METHODDEF
#endif /* !defined(SYS_GETTOTALREFCOUNT_METHODDEF) */
-#ifndef SYS_GETCOUNTS_METHODDEF
- #define SYS_GETCOUNTS_METHODDEF
-#endif /* !defined(SYS_GETCOUNTS_METHODDEF) */
-
#ifndef SYS_GETANDROIDAPILEVEL_METHODDEF
#define SYS_GETANDROIDAPILEVEL_METHODDEF
#endif /* !defined(SYS_GETANDROIDAPILEVEL_METHODDEF) */
-/*[clinic end generated code: output=decd687b7631de4b input=a9049054013a1b77]*/
+/*[clinic end generated code: output=39eb34a01fb9a919 input=a9049054013a1b77]*/
diff --git a/Python/codecs.c b/Python/codecs.c
index 08e9b916f20..e5bcdb09fc5 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -147,7 +147,7 @@ PyObject *_PyCodec_Lookup(const char *encoding)
func = PyList_GetItem(interp->codec_search_path, i);
if (func == NULL)
goto onError;
- result = _PyObject_CallOneArg(func, v);
+ result = PyObject_CallOneArg(func, v);
if (result == NULL)
goto onError;
if (result == Py_None) {
@@ -317,7 +317,7 @@ PyObject *codec_getstreamcodec(const char *encoding,
if (errors != NULL)
streamcodec = PyObject_CallFunction(codeccls, "Os", stream, errors);
else
- streamcodec = _PyObject_CallOneArg(codeccls, stream);
+ streamcodec = PyObject_CallOneArg(codeccls, stream);
Py_DECREF(codecs);
return streamcodec;
}
@@ -658,7 +658,7 @@ static void wrong_exception_type(PyObject *exc)
{
PyErr_Format(PyExc_TypeError,
"don't know how to handle %.200s in error callback",
- exc->ob_type->tp_name);
+ Py_TYPE(exc)->tp_name);
}
PyObject *PyCodec_StrictErrors(PyObject *exc)
@@ -1407,7 +1407,7 @@ static PyObject *surrogateescape_errors(PyObject *self, PyObject *exc)
static int _PyCodecRegistry_Init(void)
{
static struct {
- char *name;
+ const char *name;
PyMethodDef def;
} methods[] =
{
@@ -1494,32 +1494,37 @@ static int _PyCodecRegistry_Init(void)
PyInterpreterState *interp = _PyInterpreterState_Get();
PyObject *mod;
- unsigned i;
if (interp->codec_search_path != NULL)
return 0;
interp->codec_search_path = PyList_New(0);
- interp->codec_search_cache = PyDict_New();
- interp->codec_error_registry = PyDict_New();
-
- if (interp->codec_error_registry) {
- for (i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
- PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
- int res;
- if (!func)
- Py_FatalError("can't initialize codec error registry");
- res = PyCodec_RegisterError(methods[i].name, func);
- Py_DECREF(func);
- if (res)
- Py_FatalError("can't initialize codec error registry");
- }
+ if (interp->codec_search_path == NULL) {
+ return -1;
}
- if (interp->codec_search_path == NULL ||
- interp->codec_search_cache == NULL ||
- interp->codec_error_registry == NULL)
- Py_FatalError("can't initialize codec registry");
+ interp->codec_search_cache = PyDict_New();
+ if (interp->codec_search_cache == NULL) {
+ return -1;
+ }
+
+ interp->codec_error_registry = PyDict_New();
+ if (interp->codec_error_registry == NULL) {
+ return -1;
+ }
+
+ for (size_t i = 0; i < Py_ARRAY_LENGTH(methods); ++i) {
+ PyObject *func = PyCFunction_NewEx(&methods[i].def, NULL, NULL);
+ if (!func) {
+ return -1;
+ }
+
+ int res = PyCodec_RegisterError(methods[i].name, func);
+ Py_DECREF(func);
+ if (res) {
+ return -1;
+ }
+ }
mod = PyImport_ImportModuleNoBlock("encodings");
if (mod == NULL) {
diff --git a/Python/compile.c b/Python/compile.c
index 98a4afa168c..bf8c8109d07 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -23,8 +23,8 @@
#include "Python.h"
-#include "Python-ast.h"
#include "pycore_pystate.h" /* _PyInterpreterState_GET_UNSAFE() */
+#include "Python-ast.h"
#include "ast.h"
#include "code.h"
#include "symtable.h"
@@ -212,11 +212,13 @@ static int compiler_set_qualname(struct compiler *);
static int compiler_sync_comprehension_generator(
struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type);
static int compiler_async_comprehension_generator(
struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type);
static PyCodeObject *assemble(struct compiler *, int addNone);
@@ -1007,13 +1009,6 @@ stack_effect(int opcode, int oparg, int jump)
case BUILD_SET:
case BUILD_STRING:
return 1-oparg;
- case BUILD_LIST_UNPACK:
- case BUILD_TUPLE_UNPACK:
- case BUILD_TUPLE_UNPACK_WITH_CALL:
- case BUILD_SET_UNPACK:
- case BUILD_MAP_UNPACK:
- case BUILD_MAP_UNPACK_WITH_CALL:
- return 1 - oparg;
case BUILD_MAP:
return 1 - 2*oparg;
case BUILD_CONST_KEY_MAP:
@@ -1021,7 +1016,11 @@ stack_effect(int opcode, int oparg, int jump)
case LOAD_ATTR:
return 0;
case COMPARE_OP:
+ case IS_OP:
+ case CONTAINS_OP:
return -1;
+ case JUMP_IF_NOT_EXC_MATCH:
+ return -2;
case IMPORT_NAME:
return -1;
case IMPORT_FROM:
@@ -1121,6 +1120,13 @@ stack_effect(int opcode, int oparg, int jump)
return 1;
case LOAD_ASSERTION_ERROR:
return 1;
+ case LIST_TO_TUPLE:
+ return 0;
+ case LIST_EXTEND:
+ case SET_UPDATE:
+ case DICT_MERGE:
+ case DICT_UPDATE:
+ return -1;
default:
return PY_INVALID_STACK_EFFECT;
}
@@ -1502,6 +1508,12 @@ compiler_addop_j(struct compiler *c, int opcode, basicblock *b, int absolute)
return 0; \
}
+
+#define ADDOP_COMPARE(C, CMP) { \
+ if (!compiler_addcompare((C), (cmpop_ty)(CMP))) \
+ return 0; \
+}
+
/* VISIT and VISIT_SEQ takes an ASDL type as their second argument. They use
the ASDL name to synthesize the name of the C type and the visit function.
*/
@@ -1686,12 +1698,16 @@ compiler_unwind_fblock(struct compiler *c, struct fblockinfo *info,
return 0;
}
}
+ /* Emit the finally block, restoring the line number when done */
+ int saved_lineno = c->u->u_lineno;
VISIT_SEQ(c, stmt, info->fb_datum);
+ c->u->u_lineno = saved_lineno;
+ c->u->u_lineno_set = 0;
if (preserve_tos) {
compiler_pop_fblock(c, POP_VALUE, NULL);
}
return 1;
-
+
case FINALLY_END:
if (preserve_tos) {
ADDOP(c, ROT_FOUR);
@@ -2429,35 +2445,49 @@ check_compare(struct compiler *c, expr_ty e)
return 1;
}
-static int
-cmpop(cmpop_ty op)
+static int compiler_addcompare(struct compiler *c, cmpop_ty op)
{
+ int cmp;
switch (op) {
case Eq:
- return PyCmp_EQ;
+ cmp = Py_EQ;
+ break;
case NotEq:
- return PyCmp_NE;
+ cmp = Py_NE;
+ break;
case Lt:
- return PyCmp_LT;
+ cmp = Py_LT;
+ break;
case LtE:
- return PyCmp_LE;
+ cmp = Py_LE;
+ break;
case Gt:
- return PyCmp_GT;
+ cmp = Py_GT;
+ break;
case GtE:
- return PyCmp_GE;
+ cmp = Py_GE;
+ break;
case Is:
- return PyCmp_IS;
+ ADDOP_I(c, IS_OP, 0);
+ return 1;
case IsNot:
- return PyCmp_IS_NOT;
+ ADDOP_I(c, IS_OP, 1);
+ return 1;
case In:
- return PyCmp_IN;
+ ADDOP_I(c, CONTAINS_OP, 0);
+ return 1;
case NotIn:
- return PyCmp_NOT_IN;
+ ADDOP_I(c, CONTAINS_OP, 1);
+ return 1;
default:
- return PyCmp_BAD;
+ Py_UNREACHABLE();
}
+ ADDOP_I(c, COMPARE_OP, cmp);
+ return 1;
}
+
+
static int
compiler_jump_if(struct compiler *c, expr_ty e, basicblock *next, int cond)
{
@@ -2522,14 +2552,12 @@ compiler_jump_if(struct compiler *c, expr_ty e, basicblock *next, int cond)
(expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
ADDOP(c, DUP_TOP);
ADDOP(c, ROT_THREE);
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, i))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
ADDOP_JABS(c, POP_JUMP_IF_FALSE, cleanup);
NEXT_BLOCK(c);
}
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
ADDOP_JABS(c, cond ? POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE, next);
basicblock *end = compiler_new_block(c);
if (end == NULL)
@@ -2972,8 +3000,7 @@ compiler_try_finally(struct compiler *c, stmt_ty s)
[tb, val, exc] L1: DUP )
[tb, val, exc, exc] )
- [tb, val, exc, exc, E1] COMPARE_OP EXC_MATCH ) only if E1
- [tb, val, exc, 1-or-0] POP_JUMP_IF_FALSE L2 )
+ [tb, val, exc, exc, E1] JUMP_IF_NOT_EXC_MATCH L2 ) only if E1
[tb, val, exc] POP
[tb, val] (or POP if no V1)
[tb] POP
@@ -3025,8 +3052,7 @@ compiler_try_except(struct compiler *c, stmt_ty s)
if (handler->v.ExceptHandler.type) {
ADDOP(c, DUP_TOP);
VISIT(c, expr, handler->v.ExceptHandler.type);
- ADDOP_I(c, COMPARE_OP, PyCmp_EXC_MATCH);
- ADDOP_JABS(c, POP_JUMP_IF_FALSE, except);
+ ADDOP_JABS(c, JUMP_IF_NOT_EXC_MATCH, except);
}
ADDOP(c, POP_TOP);
if (handler->v.ExceptHandler.name) {
@@ -3651,11 +3677,11 @@ compiler_boolop(struct compiler *c, expr_ty e)
}
static int
-starunpack_helper(struct compiler *c, asdl_seq *elts,
- int single_op, int inner_op, int outer_op)
+starunpack_helper(struct compiler *c, asdl_seq *elts, int pushed,
+ int build, int add, int extend, int tuple)
{
Py_ssize_t n = asdl_seq_LEN(elts);
- Py_ssize_t i, nsubitems = 0, nseen = 0;
+ Py_ssize_t i, seen_star = 0;
if (n > 2 && are_all_items_const(elts, 0, n)) {
PyObject *folded = PyTuple_New(n);
if (folded == NULL) {
@@ -3667,41 +3693,63 @@ starunpack_helper(struct compiler *c, asdl_seq *elts,
Py_INCREF(val);
PyTuple_SET_ITEM(folded, i, val);
}
- if (outer_op == BUILD_SET_UNPACK) {
- Py_SETREF(folded, PyFrozenSet_New(folded));
- if (folded == NULL) {
- return 0;
+ if (tuple) {
+ ADDOP_LOAD_CONST_NEW(c, folded);
+ } else {
+ if (add == SET_ADD) {
+ Py_SETREF(folded, PyFrozenSet_New(folded));
+ if (folded == NULL) {
+ return 0;
+ }
}
+ ADDOP_I(c, build, pushed);
+ ADDOP_LOAD_CONST_NEW(c, folded);
+ ADDOP_I(c, extend, 1);
}
- ADDOP_LOAD_CONST_NEW(c, folded);
- ADDOP_I(c, outer_op, 1);
return 1;
}
+
for (i = 0; i < n; i++) {
expr_ty elt = asdl_seq_GET(elts, i);
if (elt->kind == Starred_kind) {
- if (nseen) {
- ADDOP_I(c, inner_op, nseen);
- nseen = 0;
- nsubitems++;
+ seen_star = 1;
+ }
+ }
+ if (seen_star) {
+ seen_star = 0;
+ for (i = 0; i < n; i++) {
+ expr_ty elt = asdl_seq_GET(elts, i);
+ if (elt->kind == Starred_kind) {
+ if (seen_star == 0) {
+ ADDOP_I(c, build, i+pushed);
+ seen_star = 1;
+ }
+ VISIT(c, expr, elt->v.Starred.value);
+ ADDOP_I(c, extend, 1);
+ }
+ else {
+ VISIT(c, expr, elt);
+ if (seen_star) {
+ ADDOP_I(c, add, 1);
+ }
}
- VISIT(c, expr, elt->v.Starred.value);
- nsubitems++;
}
- else {
+ assert(seen_star);
+ if (tuple) {
+ ADDOP(c, LIST_TO_TUPLE);
+ }
+ }
+ else {
+ for (i = 0; i < n; i++) {
+ expr_ty elt = asdl_seq_GET(elts, i);
VISIT(c, expr, elt);
- nseen++;
+ }
+ if (tuple) {
+ ADDOP_I(c, BUILD_TUPLE, n+pushed);
+ } else {
+ ADDOP_I(c, build, n+pushed);
}
}
- if (nsubitems) {
- if (nseen) {
- ADDOP_I(c, inner_op, nseen);
- nsubitems++;
- }
- ADDOP_I(c, outer_op, nsubitems);
- }
- else
- ADDOP_I(c, single_op, nseen);
return 1;
}
@@ -3743,8 +3791,8 @@ compiler_list(struct compiler *c, expr_ty e)
return assignment_helper(c, elts);
}
else if (e->v.List.ctx == Load) {
- return starunpack_helper(c, elts,
- BUILD_LIST, BUILD_TUPLE, BUILD_LIST_UNPACK);
+ return starunpack_helper(c, elts, 0, BUILD_LIST,
+ LIST_APPEND, LIST_EXTEND, 0);
}
else
VISIT_SEQ(c, expr, elts);
@@ -3759,8 +3807,8 @@ compiler_tuple(struct compiler *c, expr_ty e)
return assignment_helper(c, elts);
}
else if (e->v.Tuple.ctx == Load) {
- return starunpack_helper(c, elts,
- BUILD_TUPLE, BUILD_TUPLE, BUILD_TUPLE_UNPACK);
+ return starunpack_helper(c, elts, 0, BUILD_LIST,
+ LIST_APPEND, LIST_EXTEND, 1);
}
else
VISIT_SEQ(c, expr, elts);
@@ -3770,8 +3818,8 @@ compiler_tuple(struct compiler *c, expr_ty e)
static int
compiler_set(struct compiler *c, expr_ty e)
{
- return starunpack_helper(c, e->v.Set.elts, BUILD_SET,
- BUILD_SET, BUILD_SET_UNPACK);
+ return starunpack_helper(c, e->v.Set.elts, 0, BUILD_SET,
+ SET_ADD, SET_UPDATE, 0);
}
static int
@@ -3821,37 +3869,58 @@ static int
compiler_dict(struct compiler *c, expr_ty e)
{
Py_ssize_t i, n, elements;
- int containers;
+ int have_dict;
int is_unpacking = 0;
n = asdl_seq_LEN(e->v.Dict.values);
- containers = 0;
+ have_dict = 0;
elements = 0;
for (i = 0; i < n; i++) {
is_unpacking = (expr_ty)asdl_seq_GET(e->v.Dict.keys, i) == NULL;
- if (elements == 0xFFFF || (elements && is_unpacking)) {
- if (!compiler_subdict(c, e, i - elements, i))
- return 0;
- containers++;
- elements = 0;
- }
if (is_unpacking) {
+ if (elements) {
+ if (!compiler_subdict(c, e, i - elements, i)) {
+ return 0;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_UPDATE, 1);
+ }
+ have_dict = 1;
+ elements = 0;
+ }
+ if (have_dict == 0) {
+ ADDOP_I(c, BUILD_MAP, 0);
+ have_dict = 1;
+ }
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Dict.values, i));
- containers++;
+ ADDOP_I(c, DICT_UPDATE, 1);
}
else {
- elements++;
+ if (elements == 0xFFFF) {
+ if (!compiler_subdict(c, e, i - elements, i)) {
+ return 0;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_UPDATE, 1);
+ }
+ have_dict = 1;
+ elements = 0;
+ }
+ else {
+ elements++;
+ }
}
}
- if (elements || containers == 0) {
- if (!compiler_subdict(c, e, n - elements, n))
+ if (elements) {
+ if (!compiler_subdict(c, e, n - elements, n)) {
return 0;
- containers++;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_UPDATE, 1);
+ }
+ have_dict = 1;
}
- /* If there is more than one dict, they need to be merged into a new
- * dict. If there is one dict and it's an unpacking, then it needs
- * to be copied into a new dict." */
- if (containers > 1 || is_unpacking) {
- ADDOP_I(c, BUILD_MAP_UNPACK, containers);
+ if (!have_dict) {
+ ADDOP_I(c, BUILD_MAP, 0);
}
return 1;
}
@@ -3869,8 +3938,7 @@ compiler_compare(struct compiler *c, expr_ty e)
n = asdl_seq_LEN(e->v.Compare.ops) - 1;
if (n == 0) {
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, 0));
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, 0))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, 0));
}
else {
basicblock *cleanup = compiler_new_block(c);
@@ -3881,14 +3949,12 @@ compiler_compare(struct compiler *c, expr_ty e)
(expr_ty)asdl_seq_GET(e->v.Compare.comparators, i));
ADDOP(c, DUP_TOP);
ADDOP(c, ROT_THREE);
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, i))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, i));
ADDOP_JABS(c, JUMP_IF_FALSE_OR_POP, cleanup);
NEXT_BLOCK(c);
}
VISIT(c, expr, (expr_ty)asdl_seq_GET(e->v.Compare.comparators, n));
- ADDOP_I(c, COMPARE_OP,
- cmpop((cmpop_ty)(asdl_seq_GET(e->v.Compare.ops, n))));
+ ADDOP_COMPARE(c, asdl_seq_GET(e->v.Compare.ops, n));
basicblock *end = compiler_new_block(c);
if (end == NULL)
return 0;
@@ -3924,7 +3990,7 @@ infer_type(expr_ty e)
case FormattedValue_kind:
return &PyUnicode_Type;
case Constant_kind:
- return e->v.Constant.value->ob_type;
+ return Py_TYPE(e->v.Constant.value);
default:
return NULL;
}
@@ -4163,89 +4229,30 @@ compiler_call_helper(struct compiler *c,
asdl_seq *keywords)
{
Py_ssize_t i, nseen, nelts, nkwelts;
- int mustdictunpack = 0;
-
- /* the number of tuples and dictionaries on the stack */
- Py_ssize_t nsubargs = 0, nsubkwargs = 0;
nelts = asdl_seq_LEN(args);
nkwelts = asdl_seq_LEN(keywords);
- for (i = 0; i < nkwelts; i++) {
- keyword_ty kw = asdl_seq_GET(keywords, i);
- if (kw->arg == NULL) {
- mustdictunpack = 1;
- break;
- }
- }
-
- nseen = n; /* the number of positional arguments on the stack */
for (i = 0; i < nelts; i++) {
expr_ty elt = asdl_seq_GET(args, i);
if (elt->kind == Starred_kind) {
- /* A star-arg. If we've seen positional arguments,
- pack the positional arguments into a tuple. */
- if (nseen) {
- ADDOP_I(c, BUILD_TUPLE, nseen);
- nseen = 0;
- nsubargs++;
- }
- VISIT(c, expr, elt->v.Starred.value);
- nsubargs++;
+ goto ex_call;
}
- else {
- VISIT(c, expr, elt);
- nseen++;
+ }
+ for (i = 0; i < nkwelts; i++) {
+ keyword_ty kw = asdl_seq_GET(keywords, i);
+ if (kw->arg == NULL) {
+ goto ex_call;
}
}
- /* Same dance again for keyword arguments */
- if (nsubargs || mustdictunpack) {
- if (nseen) {
- /* Pack up any trailing positional arguments. */
- ADDOP_I(c, BUILD_TUPLE, nseen);
- nsubargs++;
- }
- if (nsubargs > 1) {
- /* If we ended up with more than one stararg, we need
- to concatenate them into a single sequence. */
- ADDOP_I(c, BUILD_TUPLE_UNPACK_WITH_CALL, nsubargs);
- }
- else if (nsubargs == 0) {
- ADDOP_I(c, BUILD_TUPLE, 0);
- }
- nseen = 0; /* the number of keyword arguments on the stack following */
- for (i = 0; i < nkwelts; i++) {
- keyword_ty kw = asdl_seq_GET(keywords, i);
- if (kw->arg == NULL) {
- /* A keyword argument unpacking. */
- if (nseen) {
- if (!compiler_subkwargs(c, keywords, i - nseen, i))
- return 0;
- nsubkwargs++;
- nseen = 0;
- }
- VISIT(c, expr, kw->value);
- nsubkwargs++;
- }
- else {
- nseen++;
- }
- }
- if (nseen) {
- /* Pack up any trailing keyword arguments. */
- if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts))
- return 0;
- nsubkwargs++;
- }
- if (nsubkwargs > 1) {
- /* Pack it all up */
- ADDOP_I(c, BUILD_MAP_UNPACK_WITH_CALL, nsubkwargs);
- }
- ADDOP_I(c, CALL_FUNCTION_EX, nsubkwargs > 0);
- return 1;
+ /* No * or ** args, so can use faster calling sequence */
+ for (i = 0; i < nelts; i++) {
+ expr_ty elt = asdl_seq_GET(args, i);
+ assert(elt->kind != Starred_kind);
+ VISIT(c, expr, elt);
}
- else if (nkwelts) {
+ if (nkwelts) {
PyObject *names;
VISIT_SEQ(c, keyword, keywords);
names = PyTuple_New(nkwelts);
@@ -4265,6 +4272,59 @@ compiler_call_helper(struct compiler *c,
ADDOP_I(c, CALL_FUNCTION, n + nelts);
return 1;
}
+
+ex_call:
+
+ /* Do positional arguments. */
+ if (n ==0 && nelts == 1 && ((expr_ty)asdl_seq_GET(args, 0))->kind == Starred_kind) {
+ VISIT(c, expr, ((expr_ty)asdl_seq_GET(args, 0))->v.Starred.value);
+ }
+ else if (starunpack_helper(c, args, n, BUILD_LIST,
+ LIST_APPEND, LIST_EXTEND, 1) == 0) {
+ return 0;
+ }
+ /* Then keyword arguments */
+ if (nkwelts) {
+ /* Has a new dict been pushed */
+ int have_dict = 0;
+
+ nseen = 0; /* the number of keyword arguments on the stack following */
+ for (i = 0; i < nkwelts; i++) {
+ keyword_ty kw = asdl_seq_GET(keywords, i);
+ if (kw->arg == NULL) {
+ /* A keyword argument unpacking. */
+ if (nseen) {
+ if (!compiler_subkwargs(c, keywords, i - nseen, i)) {
+ return 0;
+ }
+ have_dict = 1;
+ nseen = 0;
+ }
+ if (!have_dict) {
+ ADDOP_I(c, BUILD_MAP, 0);
+ have_dict = 1;
+ }
+ VISIT(c, expr, kw->value);
+ ADDOP_I(c, DICT_MERGE, 1);
+ }
+ else {
+ nseen++;
+ }
+ }
+ if (nseen) {
+ /* Pack up any trailing keyword arguments. */
+ if (!compiler_subkwargs(c, keywords, nkwelts - nseen, nkwelts)) {
+ return 0;
+ }
+ if (have_dict) {
+ ADDOP_I(c, DICT_MERGE, 1);
+ }
+ have_dict = 1;
+ }
+ assert(have_dict);
+ }
+ ADDOP_I(c, CALL_FUNCTION_EX, nkwelts > 0);
+ return 1;
}
@@ -4285,22 +4345,24 @@ compiler_call_helper(struct compiler *c,
static int
compiler_comprehension_generator(struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type)
{
comprehension_ty gen;
gen = (comprehension_ty)asdl_seq_GET(generators, gen_index);
if (gen->is_async) {
return compiler_async_comprehension_generator(
- c, generators, gen_index, elt, val, type);
+ c, generators, gen_index, depth, elt, val, type);
} else {
return compiler_sync_comprehension_generator(
- c, generators, gen_index, elt, val, type);
+ c, generators, gen_index, depth, elt, val, type);
}
}
static int
compiler_sync_comprehension_generator(struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type)
{
/* generate code for the iterator, then each of the ifs,
@@ -4328,12 +4390,38 @@ compiler_sync_comprehension_generator(struct compiler *c,
}
else {
/* Sub-iter - calculate on the fly */
- VISIT(c, expr, gen->iter);
- ADDOP(c, GET_ITER);
+ /* Fast path for the temporary variable assignment idiom:
+ for y in [f(x)]
+ */
+ asdl_seq *elts;
+ switch (gen->iter->kind) {
+ case List_kind:
+ elts = gen->iter->v.List.elts;
+ break;
+ case Tuple_kind:
+ elts = gen->iter->v.Tuple.elts;
+ break;
+ default:
+ elts = NULL;
+ }
+ if (asdl_seq_LEN(elts) == 1) {
+ expr_ty elt = asdl_seq_GET(elts, 0);
+ if (elt->kind != Starred_kind) {
+ VISIT(c, expr, elt);
+ start = NULL;
+ }
+ }
+ if (start) {
+ VISIT(c, expr, gen->iter);
+ ADDOP(c, GET_ITER);
+ }
+ }
+ if (start) {
+ depth++;
+ compiler_use_next_block(c, start);
+ ADDOP_JREL(c, FOR_ITER, anchor);
+ NEXT_BLOCK(c);
}
- compiler_use_next_block(c, start);
- ADDOP_JREL(c, FOR_ITER, anchor);
- NEXT_BLOCK(c);
VISIT(c, expr, gen->target);
/* XXX this needs to be cleaned up...a lot! */
@@ -4347,7 +4435,7 @@ compiler_sync_comprehension_generator(struct compiler *c,
if (++gen_index < asdl_seq_LEN(generators))
if (!compiler_comprehension_generator(c,
- generators, gen_index,
+ generators, gen_index, depth,
elt, val, type))
return 0;
@@ -4362,18 +4450,18 @@ compiler_sync_comprehension_generator(struct compiler *c,
break;
case COMP_LISTCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, LIST_APPEND, gen_index + 1);
+ ADDOP_I(c, LIST_APPEND, depth + 1);
break;
case COMP_SETCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, SET_ADD, gen_index + 1);
+ ADDOP_I(c, SET_ADD, depth + 1);
break;
case COMP_DICTCOMP:
/* With '{k: v}', k is evaluated before v, so we do
the same. */
VISIT(c, expr, elt);
VISIT(c, expr, val);
- ADDOP_I(c, MAP_ADD, gen_index + 1);
+ ADDOP_I(c, MAP_ADD, depth + 1);
break;
default:
return 0;
@@ -4382,8 +4470,10 @@ compiler_sync_comprehension_generator(struct compiler *c,
compiler_use_next_block(c, skip);
}
compiler_use_next_block(c, if_cleanup);
- ADDOP_JABS(c, JUMP_ABSOLUTE, start);
- compiler_use_next_block(c, anchor);
+ if (start) {
+ ADDOP_JABS(c, JUMP_ABSOLUTE, start);
+ compiler_use_next_block(c, anchor);
+ }
return 1;
}
@@ -4391,6 +4481,7 @@ compiler_sync_comprehension_generator(struct compiler *c,
static int
compiler_async_comprehension_generator(struct compiler *c,
asdl_seq *generators, int gen_index,
+ int depth,
expr_ty elt, expr_ty val, int type)
{
comprehension_ty gen;
@@ -4434,9 +4525,10 @@ compiler_async_comprehension_generator(struct compiler *c,
NEXT_BLOCK(c);
}
+ depth++;
if (++gen_index < asdl_seq_LEN(generators))
if (!compiler_comprehension_generator(c,
- generators, gen_index,
+ generators, gen_index, depth,
elt, val, type))
return 0;
@@ -4451,18 +4543,18 @@ compiler_async_comprehension_generator(struct compiler *c,
break;
case COMP_LISTCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, LIST_APPEND, gen_index + 1);
+ ADDOP_I(c, LIST_APPEND, depth + 1);
break;
case COMP_SETCOMP:
VISIT(c, expr, elt);
- ADDOP_I(c, SET_ADD, gen_index + 1);
+ ADDOP_I(c, SET_ADD, depth + 1);
break;
case COMP_DICTCOMP:
/* With '{k: v}', k is evaluated before v, so we do
the same. */
VISIT(c, expr, elt);
VISIT(c, expr, val);
- ADDOP_I(c, MAP_ADD, gen_index + 1);
+ ADDOP_I(c, MAP_ADD, depth + 1);
break;
default:
return 0;
@@ -4525,7 +4617,7 @@ compiler_comprehension(struct compiler *c, expr_ty e, int type,
ADDOP_I(c, op, 0);
}
- if (!compiler_comprehension_generator(c, generators, 0, elt,
+ if (!compiler_comprehension_generator(c, generators, 0, 0, elt,
val, type))
goto error_in_scope;
@@ -4839,9 +4931,9 @@ compiler_with(struct compiler *c, stmt_ty s, int pos)
ADDOP(c, POP_BLOCK);
compiler_pop_fblock(c, WITH, block);
-
+
/* End of body; start the cleanup. */
-
+
/* For successful outcome:
* call __exit__(None, None, None)
*/
@@ -5963,7 +6055,7 @@ makecode(struct compiler *c, struct assembler *a)
goto error;
}
co = PyCode_NewWithPosOnlyArgs(posonlyargcount+posorkeywordargcount,
- posonlyargcount, kwonlyargcount, nlocals_int,
+ posonlyargcount, kwonlyargcount, nlocals_int,
maxdepth, flags, bytecode, consts, names,
varnames, freevars, cellvars, c->c_filename,
c->u->u_name, c->u->u_firstlineno, a->a_lnotab);
diff --git a/Python/dtoa.c b/Python/dtoa.c
index b7bb7acfb6c..822adc61296 100644
--- a/Python/dtoa.c
+++ b/Python/dtoa.c
@@ -115,6 +115,7 @@
/* Linking of Python's #defines to Gay's #defines starts here. */
#include "Python.h"
+#include "pycore_dtoa.h"
/* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile
the following code */
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index 6deba1134e2..2bf3384b9eb 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -12,12 +12,6 @@
#include "patchlevel.h"
#include
-// "activation context" magic - see dl_nt.c...
-#if HAVE_SXS
-extern ULONG_PTR _Py_ActivateActCtx();
-void _Py_DeactivateActCtx(ULONG_PTR cookie);
-#endif
-
#ifdef _DEBUG
#define PYD_DEBUG_SUFFIX "_d"
#else
@@ -187,16 +181,10 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
{
HINSTANCE hDLL = NULL;
unsigned int old_mode;
-#if HAVE_SXS
- ULONG_PTR cookie = 0;
-#endif
/* Don't display a message box when Python can't load a DLL */
old_mode = SetErrorMode(SEM_FAILCRITICALERRORS);
-#if HAVE_SXS
- cookie = _Py_ActivateActCtx();
-#endif
/* bpo-36085: We use LoadLibraryEx with restricted search paths
to avoid DLL preloading attacks and enable use of the
AddDllDirectory function. We add SEARCH_DLL_LOAD_DIR to
@@ -206,9 +194,6 @@ dl_funcptr _PyImport_FindSharedFuncptrWindows(const char *prefix,
LOAD_LIBRARY_SEARCH_DEFAULT_DIRS |
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
Py_END_ALLOW_THREADS
-#if HAVE_SXS
- _Py_DeactivateActCtx(cookie);
-#endif
/* restore old error mode settings */
SetErrorMode(old_mode);
diff --git a/Python/errors.c b/Python/errors.c
index 3b9f0dd3737..c008ed288d2 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -24,11 +24,11 @@ extern char *strerror(int);
extern "C" {
#endif
+_Py_IDENTIFIER(__module__);
_Py_IDENTIFIER(builtins);
_Py_IDENTIFIER(stderr);
_Py_IDENTIFIER(flush);
-
/* Forward declarations */
static PyObject *
_PyErr_FormatV(PyThreadState *tstate, PyObject *exception,
@@ -95,7 +95,7 @@ _PyErr_CreateException(PyObject *exception_type, PyObject *value)
exc = PyObject_Call(exception_type, value, NULL);
}
else {
- exc = _PyObject_CallOneArg(exception_type, value);
+ exc = PyObject_CallOneArg(exception_type, value);
}
if (exc != NULL && !PyExceptionInstance_Check(exc)) {
@@ -445,21 +445,27 @@ PyErr_Clear(void)
void
-PyErr_GetExcInfo(PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
+_PyErr_GetExcInfo(PyThreadState *tstate,
+ PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
{
- PyThreadState *tstate = _PyThreadState_GET();
-
_PyErr_StackItem *exc_info = _PyErr_GetTopmostException(tstate);
*p_type = exc_info->exc_type;
*p_value = exc_info->exc_value;
*p_traceback = exc_info->exc_traceback;
-
Py_XINCREF(*p_type);
Py_XINCREF(*p_value);
Py_XINCREF(*p_traceback);
}
+
+void
+PyErr_GetExcInfo(PyObject **p_type, PyObject **p_value, PyObject **p_traceback)
+{
+ PyThreadState *tstate = _PyThreadState_GET();
+ _PyErr_GetExcInfo(tstate, p_type, p_value, p_traceback);
+}
+
void
PyErr_SetExcInfo(PyObject *p_type, PyObject *p_value, PyObject *p_traceback)
{
@@ -620,7 +626,7 @@ PyErr_SetFromErrnoWithFilenameObjects(PyObject *exc, PyObject *filenameObject, P
#ifndef MS_WINDOWS
if (i != 0) {
- char *s = strerror(i);
+ const char *s = strerror(i);
message = PyUnicode_DecodeLocale(s, "surrogateescape");
}
else {
@@ -913,7 +919,7 @@ PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg,
goto done;
}
- error = _PyObject_FastCallDict(exception, &msg, 1, kwargs);
+ error = PyObject_VectorcallDict(exception, &msg, 1, kwargs);
if (error != NULL) {
_PyErr_SetObject(tstate, (PyObject *)Py_TYPE(error), error);
Py_DECREF(error);
@@ -1015,7 +1021,6 @@ PyObject *
PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
{
PyThreadState *tstate = _PyThreadState_GET();
- _Py_IDENTIFIER(__module__);
PyObject *modulename = NULL;
PyObject *classname = NULL;
PyObject *mydict = NULL;
@@ -1241,7 +1246,6 @@ write_unraisable_exc_file(PyThreadState *tstate, PyObject *exc_type,
}
}
- _Py_IDENTIFIER(__module__);
PyObject *moduleName = _PyObject_GetAttrId(exc_type, &PyId___module__);
if (moduleName == NULL || !PyUnicode_Check(moduleName)) {
Py_XDECREF(moduleName);
@@ -1430,7 +1434,7 @@ _PyErr_WriteUnraisableMsg(const char *err_msg_str, PyObject *obj)
goto default_hook;
}
- PyObject *res = _PyObject_CallOneArg(hook, hook_args);
+ PyObject *res = PyObject_CallOneArg(hook, hook_args);
Py_DECREF(hook_args);
if (res != NULL) {
Py_DECREF(res);
diff --git a/Python/formatter_unicode.c b/Python/formatter_unicode.c
index 7c4ecf0b3e2..41a2478e0a8 100644
--- a/Python/formatter_unicode.c
+++ b/Python/formatter_unicode.c
@@ -1447,7 +1447,7 @@ _PyUnicode_FormatAdvancedWriter(_PyUnicodeWriter *writer,
return format_string_internal(obj, &format, writer);
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
return -1;
}
}
@@ -1505,7 +1505,7 @@ _PyLong_FormatAdvancedWriter(_PyUnicodeWriter *writer,
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
goto done;
}
@@ -1549,7 +1549,7 @@ _PyFloat_FormatAdvancedWriter(_PyUnicodeWriter *writer,
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
return -1;
}
}
@@ -1587,7 +1587,7 @@ _PyComplex_FormatAdvancedWriter(_PyUnicodeWriter *writer,
default:
/* unknown */
- unknown_presentation_type(format.type, obj->ob_type->tp_name);
+ unknown_presentation_type(format.type, Py_TYPE(obj)->tp_name);
return -1;
}
}
diff --git a/Python/getargs.c b/Python/getargs.c
index d5caf47a028..d644aea5207 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -531,7 +531,7 @@ converttuple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
toplevel ? "expected %d arguments, not %.50s" :
"must be %d-item sequence, not %.50s",
n,
- arg == Py_None ? "None" : arg->ob_type->tp_name);
+ arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
return msgbuf;
}
@@ -621,7 +621,7 @@ _PyArg_BadArgument(const char *fname, const char *displayname,
PyErr_Format(PyExc_TypeError,
"%.200s() %.200s must be %.50s, not %.50s",
fname, displayname, expected,
- arg == Py_None ? "None" : arg->ob_type->tp_name);
+ arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
}
static const char *
@@ -636,7 +636,7 @@ converterr(const char *expected, PyObject *arg, char *msgbuf, size_t bufsize)
else {
PyOS_snprintf(msgbuf, bufsize,
"must be %.50s, not %.50s", expected,
- arg == Py_None ? "None" : arg->ob_type->tp_name);
+ arg == Py_None ? "None" : Py_TYPE(arg)->tp_name);
}
return msgbuf;
}
@@ -1331,7 +1331,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
type = va_arg(*p_va, PyTypeObject*);
p = va_arg(*p_va, PyObject **);
format++;
- if (PyType_IsSubtype(arg->ob_type, type))
+ if (PyType_IsSubtype(Py_TYPE(arg), type))
*p = arg;
else
return converterr(type->tp_name, arg, msgbuf, bufsize);
diff --git a/Python/getcopyright.c b/Python/getcopyright.c
index 27a1731f46d..299ccc08c44 100644
--- a/Python/getcopyright.c
+++ b/Python/getcopyright.c
@@ -4,7 +4,7 @@
static const char cprt[] =
"\
-Copyright (c) 2001-2019 Python Software Foundation.\n\
+Copyright (c) 2001-2020 Python Software Foundation.\n\
All Rights Reserved.\n\
\n\
Copyright (c) 2000 BeOpen.com.\n\
diff --git a/Python/hamt.c b/Python/hamt.c
index ea659c800fc..a0fee4c7a63 100644
--- a/Python/hamt.c
+++ b/Python/hamt.c
@@ -551,7 +551,7 @@ hamt_node_bitmap_new(Py_ssize_t size)
return NULL;
}
- Py_SIZE(node) = size;
+ Py_SET_SIZE(node, size);
for (i = 0; i < size; i++) {
node->b_array[i] = NULL;
@@ -1288,7 +1288,7 @@ hamt_node_collision_new(int32_t hash, Py_ssize_t size)
node->c_array[i] = NULL;
}
- Py_SIZE(node) = size;
+ Py_SET_SIZE(node, size);
node->c_hash = hash;
_PyObject_GC_TRACK(node);
@@ -1864,7 +1864,7 @@ hamt_node_array_without(PyHamtNode_Array *self,
continue;
}
- bitmap |= 1 << i;
+ bitmap |= 1U << i;
if (IS_BITMAP_NODE(node)) {
PyHamtNode_Bitmap *child = (PyHamtNode_Bitmap *)node;
diff --git a/Python/import.c b/Python/import.c
index 045b6d0a9bf..392d711299e 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -39,6 +39,9 @@ extern struct _inittab _PyImport_Inittab[];
struct _inittab *PyImport_Inittab = _PyImport_Inittab;
static struct _inittab *inittab_copy = NULL;
+_Py_IDENTIFIER(__path__);
+_Py_IDENTIFIER(__spec__);
+
/*[clinic input]
module _imp
[clinic start generated code]*/
@@ -383,7 +386,6 @@ import_ensure_initialized(PyThreadState *tstate, PyObject *mod, PyObject *name)
PyInterpreterState *interp = tstate->interp;
PyObject *spec;
- _Py_IDENTIFIER(__spec__);
_Py_IDENTIFIER(_lock_unlock_module);
/* Optimization: only call _bootstrap._lock_unlock_module() if
@@ -566,8 +568,6 @@ _PyImport_Cleanup(PyThreadState *tstate)
_PyErr_Clear(tstate);
}
Py_XDECREF(dict);
- /* Clear module dict copies stored in the interpreter state */
- _PyInterpreterState_ClearModules(interp);
/* Collect references */
_PyGC_CollectNoFail();
/* Dump GC stats before it's too late, since it uses the warnings
@@ -619,6 +619,9 @@ _PyImport_Cleanup(PyThreadState *tstate)
}
_PyModule_ClearDict(interp->builtins);
+ /* Clear module dict copies stored in the interpreter state */
+ _PyInterpreterState_ClearModules(interp);
+
/* Clear and delete the modules directory. Actual modules will
still be there only if imported during the execution of some
destructor. */
@@ -1203,7 +1206,7 @@ get_path_importer(PyThreadState *tstate, PyObject *path_importer_cache,
PyObject *hook = PyList_GetItem(path_hooks, j);
if (hook == NULL)
return NULL;
- importer = _PyObject_CallOneArg(hook, p);
+ importer = PyObject_CallOneArg(hook, p);
if (importer != NULL)
break;
@@ -1566,9 +1569,7 @@ done:
static PyObject *
resolve_name(PyThreadState *tstate, PyObject *name, PyObject *globals, int level)
{
- _Py_IDENTIFIER(__spec__);
_Py_IDENTIFIER(__package__);
- _Py_IDENTIFIER(__path__);
_Py_IDENTIFIER(__name__);
_Py_IDENTIFIER(parent);
PyObject *abs_name;
@@ -1762,14 +1763,14 @@ import_find_and_load(PyThreadState *tstate, PyObject *abs_name)
}
if (PyDTrace_IMPORT_FIND_LOAD_START_ENABLED())
- PyDTrace_IMPORT_FIND_LOAD_START(PyUnicode_AsUTF8(abs_name));
+ PyDTrace_IMPORT_FIND_LOAD_START((char *)PyUnicode_AsUTF8(abs_name));
mod = _PyObject_CallMethodIdObjArgs(interp->importlib,
&PyId__find_and_load, abs_name,
interp->import_func, NULL);
if (PyDTrace_IMPORT_FIND_LOAD_DONE_ENABLED())
- PyDTrace_IMPORT_FIND_LOAD_DONE(PyUnicode_AsUTF8(abs_name),
+ PyDTrace_IMPORT_FIND_LOAD_DONE((char *)PyUnicode_AsUTF8(abs_name),
mod != NULL);
if (import_time) {
@@ -1930,7 +1931,6 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
}
}
else {
- _Py_IDENTIFIER(__path__);
PyObject *path;
if (_PyObject_LookupAttrId(mod, &PyId___path__, &path) < 0) {
goto error;
diff --git a/Python/importlib.h b/Python/importlib.h
index d837bdd9d4c..7f999704f31 100644
--- a/Python/importlib.h
+++ b/Python/importlib.h
@@ -121,7 +121,7 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,
67,0,0,0,115,60,0,0,0,116,0,160,1,161,0,125,
1,124,0,106,2,125,2,116,3,160,4,124,2,161,1,125,
- 3,124,3,100,0,107,8,114,36,100,1,83,0,124,3,106,
+ 3,124,3,100,0,117,0,114,36,100,1,83,0,124,3,106,
2,125,2,124,2,124,1,107,2,114,14,100,2,83,0,113,
14,100,0,83,0,41,3,78,70,84,41,5,114,23,0,0,
0,218,9,103,101,116,95,105,100,101,110,116,114,26,0,0,
@@ -168,1637 +168,1642 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
117,105,114,101,114,28,0,0,0,218,7,114,101,108,101,97,
115,101,169,2,114,30,0,0,0,114,35,0,0,0,114,10,
0,0,0,114,10,0,0,0,114,11,0,0,0,114,38,0,
- 0,0,78,0,0,0,115,38,0,0,0,0,6,8,1,8,
- 1,2,2,8,1,20,1,6,1,14,1,14,9,6,247,2,
- 9,2,248,8,1,12,1,12,1,44,2,10,1,14,2,8,
- 0,122,19,95,77,111,100,117,108,101,76,111,99,107,46,97,
- 99,113,117,105,114,101,99,1,0,0,0,0,0,0,0,0,
- 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
- 142,0,0,0,116,0,160,1,161,0,125,1,124,0,106,2,
- 143,108,1,0,124,0,106,3,124,1,107,3,114,34,116,4,
- 100,1,131,1,130,1,124,0,106,5,100,2,107,4,115,48,
- 74,0,130,1,124,0,4,0,106,5,100,3,56,0,2,0,
- 95,5,124,0,106,5,100,2,107,2,114,108,100,0,124,0,
- 95,3,124,0,106,6,114,108,124,0,4,0,106,6,100,3,
- 56,0,2,0,95,6,124,0,106,7,160,8,161,0,1,0,
- 87,0,100,0,4,0,4,0,131,3,1,0,110,16,49,0,
- 115,128,48,0,1,0,1,0,1,0,89,0,1,0,100,0,
- 83,0,41,4,78,250,31,99,97,110,110,111,116,32,114,101,
- 108,101,97,115,101,32,117,110,45,97,99,113,117,105,114,101,
- 100,32,108,111,99,107,114,22,0,0,0,114,37,0,0,0,
- 41,9,114,23,0,0,0,114,32,0,0,0,114,24,0,0,
- 0,114,26,0,0,0,218,12,82,117,110,116,105,109,101,69,
- 114,114,111,114,114,27,0,0,0,114,28,0,0,0,114,25,
- 0,0,0,114,39,0,0,0,114,40,0,0,0,114,10,0,
- 0,0,114,10,0,0,0,114,11,0,0,0,114,39,0,0,
- 0,103,0,0,0,115,22,0,0,0,0,1,8,1,8,1,
- 10,1,8,1,14,1,14,1,10,1,6,1,6,1,14,1,
- 122,19,95,77,111,100,117,108,101,76,111,99,107,46,114,101,
- 108,101,97,115,101,99,1,0,0,0,0,0,0,0,0,0,
- 0,0,1,0,0,0,5,0,0,0,67,0,0,0,115,18,
- 0,0,0,100,1,160,0,124,0,106,1,116,2,124,0,131,
- 1,161,2,83,0,41,2,78,122,23,95,77,111,100,117,108,
- 101,76,111,99,107,40,123,33,114,125,41,32,97,116,32,123,
- 125,169,3,218,6,102,111,114,109,97,116,114,17,0,0,0,
- 218,2,105,100,169,1,114,30,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,218,8,95,95,114,101,
- 112,114,95,95,116,0,0,0,115,2,0,0,0,0,1,122,
- 20,95,77,111,100,117,108,101,76,111,99,107,46,95,95,114,
- 101,112,114,95,95,78,41,9,114,1,0,0,0,114,0,0,
- 0,0,114,2,0,0,0,114,3,0,0,0,114,31,0,0,
- 0,114,36,0,0,0,114,38,0,0,0,114,39,0,0,0,
- 114,47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,20,0,0,0,52,0,
- 0,0,115,12,0,0,0,8,1,4,5,8,8,8,12,8,
- 25,8,13,114,20,0,0,0,99,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,2,0,0,0,64,0,0,
- 0,115,48,0,0,0,101,0,90,1,100,0,90,2,100,1,
- 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,
- 90,5,100,6,100,7,132,0,90,6,100,8,100,9,132,0,
- 90,7,100,10,83,0,41,11,218,16,95,68,117,109,109,121,
- 77,111,100,117,108,101,76,111,99,107,122,86,65,32,115,105,
- 109,112,108,101,32,95,77,111,100,117,108,101,76,111,99,107,
- 32,101,113,117,105,118,97,108,101,110,116,32,102,111,114,32,
- 80,121,116,104,111,110,32,98,117,105,108,100,115,32,119,105,
- 116,104,111,117,116,10,32,32,32,32,109,117,108,116,105,45,
- 116,104,114,101,97,100,105,110,103,32,115,117,112,112,111,114,
- 116,46,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,
- 124,1,124,0,95,0,100,1,124,0,95,1,100,0,83,0,
- 114,21,0,0,0,41,2,114,17,0,0,0,114,27,0,0,
- 0,114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,
- 114,11,0,0,0,114,31,0,0,0,124,0,0,0,115,4,
- 0,0,0,0,1,6,1,122,25,95,68,117,109,109,121,77,
- 111,100,117,108,101,76,111,99,107,46,95,95,105,110,105,116,
- 95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,
- 0,0,0,3,0,0,0,67,0,0,0,115,18,0,0,0,
- 124,0,4,0,106,0,100,1,55,0,2,0,95,0,100,2,
- 83,0,41,3,78,114,37,0,0,0,84,41,1,114,27,0,
- 0,0,114,46,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,114,38,0,0,0,128,0,0,0,115,
- 4,0,0,0,0,1,14,1,122,24,95,68,117,109,109,121,
- 77,111,100,117,108,101,76,111,99,107,46,97,99,113,117,105,
- 114,101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,
- 0,0,0,3,0,0,0,67,0,0,0,115,36,0,0,0,
- 124,0,106,0,100,1,107,2,114,18,116,1,100,2,131,1,
- 130,1,124,0,4,0,106,0,100,3,56,0,2,0,95,0,
- 100,0,83,0,41,4,78,114,22,0,0,0,114,41,0,0,
- 0,114,37,0,0,0,41,2,114,27,0,0,0,114,42,0,
- 0,0,114,46,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,114,39,0,0,0,132,0,0,0,115,
- 6,0,0,0,0,1,10,1,8,1,122,24,95,68,117,109,
- 109,121,77,111,100,117,108,101,76,111,99,107,46,114,101,108,
- 101,97,115,101,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,1,0,0,0,5,0,0,0,67,0,0,0,115,18,0,
- 0,0,100,1,160,0,124,0,106,1,116,2,124,0,131,1,
- 161,2,83,0,41,2,78,122,28,95,68,117,109,109,121,77,
- 111,100,117,108,101,76,111,99,107,40,123,33,114,125,41,32,
- 97,116,32,123,125,114,43,0,0,0,114,46,0,0,0,114,
- 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,47,
- 0,0,0,137,0,0,0,115,2,0,0,0,0,1,122,25,
- 95,68,117,109,109,121,77,111,100,117,108,101,76,111,99,107,
- 46,95,95,114,101,112,114,95,95,78,41,8,114,1,0,0,
- 0,114,0,0,0,0,114,2,0,0,0,114,3,0,0,0,
- 114,31,0,0,0,114,38,0,0,0,114,39,0,0,0,114,
- 47,0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,114,48,0,0,0,120,0,0,
- 0,115,10,0,0,0,8,1,4,3,8,4,8,4,8,5,
- 114,48,0,0,0,99,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,36,
- 0,0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,
- 0,90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,
- 0,90,5,100,7,83,0,41,8,218,18,95,77,111,100,117,
- 108,101,76,111,99,107,77,97,110,97,103,101,114,99,2,0,
- 0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,0,
- 0,0,67,0,0,0,115,16,0,0,0,124,1,124,0,95,
- 0,100,0,124,0,95,1,100,0,83,0,114,13,0,0,0,
- 41,2,218,5,95,110,97,109,101,218,5,95,108,111,99,107,
- 114,29,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 11,0,0,0,114,31,0,0,0,143,0,0,0,115,4,0,
- 0,0,0,1,6,1,122,27,95,77,111,100,117,108,101,76,
- 111,99,107,77,97,110,97,103,101,114,46,95,95,105,110,105,
- 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 1,0,0,0,2,0,0,0,67,0,0,0,115,26,0,0,
- 0,116,0,124,0,106,1,131,1,124,0,95,2,124,0,106,
- 2,160,3,161,0,1,0,100,0,83,0,114,13,0,0,0,
- 41,4,218,16,95,103,101,116,95,109,111,100,117,108,101,95,
- 108,111,99,107,114,50,0,0,0,114,51,0,0,0,114,38,
- 0,0,0,114,46,0,0,0,114,10,0,0,0,114,10,0,
- 0,0,114,11,0,0,0,218,9,95,95,101,110,116,101,114,
- 95,95,147,0,0,0,115,4,0,0,0,0,1,12,1,122,
- 28,95,77,111,100,117,108,101,76,111,99,107,77,97,110,97,
- 103,101,114,46,95,95,101,110,116,101,114,95,95,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,3,0,0,0,2,0,
- 0,0,79,0,0,0,115,14,0,0,0,124,0,106,0,160,
- 1,161,0,1,0,100,0,83,0,114,13,0,0,0,41,2,
- 114,51,0,0,0,114,39,0,0,0,41,3,114,30,0,0,
- 0,218,4,97,114,103,115,90,6,107,119,97,114,103,115,114,
- 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,8,
- 95,95,101,120,105,116,95,95,151,0,0,0,115,2,0,0,
- 0,0,1,122,27,95,77,111,100,117,108,101,76,111,99,107,
- 77,97,110,97,103,101,114,46,95,95,101,120,105,116,95,95,
- 78,41,6,114,1,0,0,0,114,0,0,0,0,114,2,0,
- 0,0,114,31,0,0,0,114,53,0,0,0,114,55,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,
- 114,11,0,0,0,114,49,0,0,0,141,0,0,0,115,6,
- 0,0,0,8,2,8,4,8,4,114,49,0,0,0,99,1,
- 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,
- 0,0,0,67,0,0,0,115,138,0,0,0,116,0,160,1,
- 161,0,1,0,122,114,122,14,116,2,124,0,25,0,131,0,
- 125,1,87,0,110,24,4,0,116,3,107,10,114,48,1,0,
- 1,0,1,0,100,1,125,1,89,0,110,2,48,0,124,1,
- 100,1,107,8,114,112,116,4,100,1,107,8,114,76,116,5,
- 124,0,131,1,125,1,110,8,116,6,124,0,131,1,125,1,
- 124,0,102,1,100,2,100,3,132,1,125,2,116,7,160,8,
- 124,1,124,2,161,2,116,2,124,0,60,0,87,0,116,0,
- 160,9,161,0,1,0,110,10,116,0,160,9,161,0,1,0,
- 48,0,124,1,83,0,41,4,122,139,71,101,116,32,111,114,
- 32,99,114,101,97,116,101,32,116,104,101,32,109,111,100,117,
- 108,101,32,108,111,99,107,32,102,111,114,32,97,32,103,105,
- 118,101,110,32,109,111,100,117,108,101,32,110,97,109,101,46,
- 10,10,32,32,32,32,65,99,113,117,105,114,101,47,114,101,
- 108,101,97,115,101,32,105,110,116,101,114,110,97,108,108,121,
- 32,116,104,101,32,103,108,111,98,97,108,32,105,109,112,111,
- 114,116,32,108,111,99,107,32,116,111,32,112,114,111,116,101,
- 99,116,10,32,32,32,32,95,109,111,100,117,108,101,95,108,
- 111,99,107,115,46,78,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,2,0,0,0,8,0,0,0,83,0,0,0,115,
- 56,0,0,0,116,0,160,1,161,0,1,0,122,32,116,2,
- 160,3,124,1,161,1,124,0,107,8,114,30,116,2,124,1,
- 61,0,87,0,116,0,160,4,161,0,1,0,110,10,116,0,
- 160,4,161,0,1,0,48,0,100,0,83,0,114,13,0,0,
- 0,41,5,218,4,95,105,109,112,218,12,97,99,113,117,105,
- 114,101,95,108,111,99,107,218,13,95,109,111,100,117,108,101,
- 95,108,111,99,107,115,114,34,0,0,0,218,12,114,101,108,
- 101,97,115,101,95,108,111,99,107,41,2,218,3,114,101,102,
- 114,17,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 11,0,0,0,218,2,99,98,176,0,0,0,115,12,0,0,
- 0,0,1,8,1,2,4,14,1,8,2,10,0,122,28,95,
- 103,101,116,95,109,111,100,117,108,101,95,108,111,99,107,46,
- 60,108,111,99,97,108,115,62,46,99,98,41,10,114,56,0,
- 0,0,114,57,0,0,0,114,58,0,0,0,218,8,75,101,
- 121,69,114,114,111,114,114,23,0,0,0,114,48,0,0,0,
- 114,20,0,0,0,218,8,95,119,101,97,107,114,101,102,114,
- 60,0,0,0,114,59,0,0,0,41,3,114,17,0,0,0,
- 114,24,0,0,0,114,61,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,52,0,0,0,157,0,
- 0,0,115,30,0,0,0,0,6,8,1,2,1,2,1,14,
- 1,14,1,10,2,8,1,8,1,10,2,8,2,12,11,18,
- 2,10,0,10,2,114,52,0,0,0,99,1,0,0,0,0,
- 0,0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,
- 0,0,0,115,54,0,0,0,116,0,124,0,131,1,125,1,
- 122,12,124,1,160,1,161,0,1,0,87,0,110,20,4,0,
- 116,2,107,10,114,40,1,0,1,0,1,0,89,0,110,10,
- 48,0,124,1,160,3,161,0,1,0,100,1,83,0,41,2,
- 122,189,65,99,113,117,105,114,101,115,32,116,104,101,110,32,
- 114,101,108,101,97,115,101,115,32,116,104,101,32,109,111,100,
- 117,108,101,32,108,111,99,107,32,102,111,114,32,97,32,103,
- 105,118,101,110,32,109,111,100,117,108,101,32,110,97,109,101,
- 46,10,10,32,32,32,32,84,104,105,115,32,105,115,32,117,
- 115,101,100,32,116,111,32,101,110,115,117,114,101,32,97,32,
- 109,111,100,117,108,101,32,105,115,32,99,111,109,112,108,101,
- 116,101,108,121,32,105,110,105,116,105,97,108,105,122,101,100,
- 44,32,105,110,32,116,104,101,10,32,32,32,32,101,118,101,
- 110,116,32,105,116,32,105,115,32,98,101,105,110,103,32,105,
- 109,112,111,114,116,101,100,32,98,121,32,97,110,111,116,104,
- 101,114,32,116,104,114,101,97,100,46,10,32,32,32,32,78,
- 41,4,114,52,0,0,0,114,38,0,0,0,114,19,0,0,
- 0,114,39,0,0,0,41,2,114,17,0,0,0,114,24,0,
- 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
- 0,218,19,95,108,111,99,107,95,117,110,108,111,99,107,95,
- 109,111,100,117,108,101,194,0,0,0,115,12,0,0,0,0,
- 6,8,1,2,1,12,1,14,3,6,2,114,64,0,0,0,
- 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
- 0,3,0,0,0,79,0,0,0,115,10,0,0,0,124,0,
- 124,1,124,2,142,1,83,0,41,1,97,46,1,0,0,114,
- 101,109,111,118,101,95,105,109,112,111,114,116,108,105,98,95,
- 102,114,97,109,101,115,32,105,110,32,105,109,112,111,114,116,
- 46,99,32,119,105,108,108,32,97,108,119,97,121,115,32,114,
- 101,109,111,118,101,32,115,101,113,117,101,110,99,101,115,10,
- 32,32,32,32,111,102,32,105,109,112,111,114,116,108,105,98,
- 32,102,114,97,109,101,115,32,116,104,97,116,32,101,110,100,
- 32,119,105,116,104,32,97,32,99,97,108,108,32,116,111,32,
- 116,104,105,115,32,102,117,110,99,116,105,111,110,10,10,32,
- 32,32,32,85,115,101,32,105,116,32,105,110,115,116,101,97,
- 100,32,111,102,32,97,32,110,111,114,109,97,108,32,99,97,
- 108,108,32,105,110,32,112,108,97,99,101,115,32,119,104,101,
- 114,101,32,105,110,99,108,117,100,105,110,103,32,116,104,101,
- 32,105,109,112,111,114,116,108,105,98,10,32,32,32,32,102,
- 114,97,109,101,115,32,105,110,116,114,111,100,117,99,101,115,
- 32,117,110,119,97,110,116,101,100,32,110,111,105,115,101,32,
- 105,110,116,111,32,116,104,101,32,116,114,97,99,101,98,97,
- 99,107,32,40,101,46,103,46,32,119,104,101,110,32,101,120,
- 101,99,117,116,105,110,103,10,32,32,32,32,109,111,100,117,
- 108,101,32,99,111,100,101,41,10,32,32,32,32,114,10,0,
- 0,0,41,3,218,1,102,114,54,0,0,0,90,4,107,119,
- 100,115,114,10,0,0,0,114,10,0,0,0,114,11,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,211,0,0,0,
- 115,2,0,0,0,0,8,114,66,0,0,0,114,37,0,0,
- 0,41,1,218,9,118,101,114,98,111,115,105,116,121,99,1,
- 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,4,
- 0,0,0,71,0,0,0,115,54,0,0,0,116,0,106,1,
- 106,2,124,1,107,5,114,50,124,0,160,3,100,1,161,1,
- 115,30,100,2,124,0,23,0,125,0,116,4,124,0,106,5,
- 124,2,142,0,116,0,106,6,100,3,141,2,1,0,100,4,
- 83,0,41,5,122,61,80,114,105,110,116,32,116,104,101,32,
- 109,101,115,115,97,103,101,32,116,111,32,115,116,100,101,114,
- 114,32,105,102,32,45,118,47,80,89,84,72,79,78,86,69,
- 82,66,79,83,69,32,105,115,32,116,117,114,110,101,100,32,
- 111,110,46,41,2,250,1,35,122,7,105,109,112,111,114,116,
- 32,122,2,35,32,41,1,90,4,102,105,108,101,78,41,7,
- 114,15,0,0,0,218,5,102,108,97,103,115,218,7,118,101,
- 114,98,111,115,101,218,10,115,116,97,114,116,115,119,105,116,
- 104,218,5,112,114,105,110,116,114,44,0,0,0,218,6,115,
- 116,100,101,114,114,41,3,218,7,109,101,115,115,97,103,101,
- 114,67,0,0,0,114,54,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,218,16,95,118,101,114,98,
- 111,115,101,95,109,101,115,115,97,103,101,222,0,0,0,115,
- 8,0,0,0,0,2,12,1,10,1,8,1,114,75,0,0,
- 0,99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,
- 0,0,3,0,0,0,3,0,0,0,115,26,0,0,0,135,
- 0,102,1,100,1,100,2,132,8,125,1,116,0,124,1,136,
- 0,131,2,1,0,124,1,83,0,41,3,122,49,68,101,99,
- 111,114,97,116,111,114,32,116,111,32,118,101,114,105,102,121,
- 32,116,104,101,32,110,97,109,101,100,32,109,111,100,117,108,
- 101,32,105,115,32,98,117,105,108,116,45,105,110,46,99,2,
- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,4,
- 0,0,0,19,0,0,0,115,38,0,0,0,124,1,116,0,
- 106,1,107,7,114,28,116,2,100,1,160,3,124,1,161,1,
- 124,1,100,2,141,2,130,1,136,0,124,0,124,1,131,2,
- 83,0,41,3,78,250,29,123,33,114,125,32,105,115,32,110,
- 111,116,32,97,32,98,117,105,108,116,45,105,110,32,109,111,
- 100,117,108,101,114,16,0,0,0,41,4,114,15,0,0,0,
- 218,20,98,117,105,108,116,105,110,95,109,111,100,117,108,101,
- 95,110,97,109,101,115,218,11,73,109,112,111,114,116,69,114,
- 114,111,114,114,44,0,0,0,169,2,114,30,0,0,0,218,
- 8,102,117,108,108,110,97,109,101,169,1,218,3,102,120,110,
- 114,10,0,0,0,114,11,0,0,0,218,25,95,114,101,113,
- 117,105,114,101,115,95,98,117,105,108,116,105,110,95,119,114,
- 97,112,112,101,114,232,0,0,0,115,10,0,0,0,0,1,
- 10,1,10,1,2,255,6,2,122,52,95,114,101,113,117,105,
- 114,101,115,95,98,117,105,108,116,105,110,46,60,108,111,99,
- 97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,98,
- 117,105,108,116,105,110,95,119,114,97,112,112,101,114,169,1,
- 114,12,0,0,0,41,2,114,82,0,0,0,114,83,0,0,
- 0,114,10,0,0,0,114,81,0,0,0,114,11,0,0,0,
- 218,17,95,114,101,113,117,105,114,101,115,95,98,117,105,108,
- 116,105,110,230,0,0,0,115,6,0,0,0,0,2,12,5,
- 10,1,114,85,0,0,0,99,1,0,0,0,0,0,0,0,
- 0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,
- 115,26,0,0,0,135,0,102,1,100,1,100,2,132,8,125,
- 1,116,0,124,1,136,0,131,2,1,0,124,1,83,0,41,
- 3,122,47,68,101,99,111,114,97,116,111,114,32,116,111,32,
- 118,101,114,105,102,121,32,116,104,101,32,110,97,109,101,100,
- 32,109,111,100,117,108,101,32,105,115,32,102,114,111,122,101,
- 110,46,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,4,0,0,0,19,0,0,0,115,38,0,0,0,
- 116,0,160,1,124,1,161,1,115,28,116,2,100,1,160,3,
- 124,1,161,1,124,1,100,2,141,2,130,1,136,0,124,0,
- 124,1,131,2,83,0,169,3,78,122,27,123,33,114,125,32,
- 105,115,32,110,111,116,32,97,32,102,114,111,122,101,110,32,
- 109,111,100,117,108,101,114,16,0,0,0,41,4,114,56,0,
- 0,0,218,9,105,115,95,102,114,111,122,101,110,114,78,0,
- 0,0,114,44,0,0,0,114,79,0,0,0,114,81,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,218,24,95,114,101,
- 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114,
- 97,112,112,101,114,243,0,0,0,115,10,0,0,0,0,1,
- 10,1,10,1,2,255,6,2,122,50,95,114,101,113,117,105,
- 114,101,115,95,102,114,111,122,101,110,46,60,108,111,99,97,
- 108,115,62,46,95,114,101,113,117,105,114,101,115,95,102,114,
- 111,122,101,110,95,119,114,97,112,112,101,114,114,84,0,0,
- 0,41,2,114,82,0,0,0,114,88,0,0,0,114,10,0,
- 0,0,114,81,0,0,0,114,11,0,0,0,218,16,95,114,
- 101,113,117,105,114,101,115,95,102,114,111,122,101,110,241,0,
- 0,0,115,6,0,0,0,0,2,12,5,10,1,114,89,0,
- 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,
- 0,0,0,3,0,0,0,67,0,0,0,115,62,0,0,0,
- 116,0,124,1,124,0,131,2,125,2,124,1,116,1,106,2,
- 107,6,114,50,116,1,106,2,124,1,25,0,125,3,116,3,
- 124,2,124,3,131,2,1,0,116,1,106,2,124,1,25,0,
- 83,0,116,4,124,2,131,1,83,0,100,1,83,0,41,2,
- 122,128,76,111,97,100,32,116,104,101,32,115,112,101,99,105,
- 102,105,101,100,32,109,111,100,117,108,101,32,105,110,116,111,
- 32,115,121,115,46,109,111,100,117,108,101,115,32,97,110,100,
- 32,114,101,116,117,114,110,32,105,116,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,46,32,32,85,115,101,
- 32,108,111,97,100,101,114,46,101,120,101,99,95,109,111,100,
- 117,108,101,32,105,110,115,116,101,97,100,46,10,10,32,32,
- 32,32,78,41,5,218,16,115,112,101,99,95,102,114,111,109,
- 95,108,111,97,100,101,114,114,15,0,0,0,218,7,109,111,
- 100,117,108,101,115,218,5,95,101,120,101,99,218,5,95,108,
- 111,97,100,41,4,114,30,0,0,0,114,80,0,0,0,218,
- 4,115,112,101,99,218,6,109,111,100,117,108,101,114,10,0,
- 0,0,114,10,0,0,0,114,11,0,0,0,218,17,95,108,
- 111,97,100,95,109,111,100,117,108,101,95,115,104,105,109,253,
- 0,0,0,115,12,0,0,0,0,6,10,1,10,1,10,1,
- 10,1,10,2,114,96,0,0,0,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,5,0,0,0,8,0,0,0,67,0,
- 0,0,115,226,0,0,0,116,0,124,0,100,1,100,0,131,
- 3,125,1,116,1,124,1,100,2,131,2,114,56,122,12,124,
- 1,160,2,124,0,161,1,87,0,83,0,4,0,116,3,107,
- 10,114,54,1,0,1,0,1,0,89,0,110,2,48,0,122,
- 10,124,0,106,4,125,2,87,0,110,20,4,0,116,5,107,
- 10,114,86,1,0,1,0,1,0,89,0,110,18,48,0,124,
- 2,100,0,107,9,114,104,116,6,124,2,131,1,83,0,122,
- 10,124,0,106,7,125,3,87,0,110,24,4,0,116,5,107,
- 10,114,138,1,0,1,0,1,0,100,3,125,3,89,0,110,
- 2,48,0,122,10,124,0,106,8,125,4,87,0,110,58,4,
- 0,116,5,107,10,114,208,1,0,1,0,1,0,124,1,100,
- 0,107,8,114,188,100,4,160,9,124,3,161,1,6,0,89,
- 0,83,0,100,5,160,9,124,3,124,1,161,2,6,0,89,
- 0,83,0,89,0,110,14,48,0,100,6,160,9,124,3,124,
- 4,161,2,83,0,100,0,83,0,41,7,78,218,10,95,95,
- 108,111,97,100,101,114,95,95,218,11,109,111,100,117,108,101,
- 95,114,101,112,114,250,1,63,250,13,60,109,111,100,117,108,
- 101,32,123,33,114,125,62,250,20,60,109,111,100,117,108,101,
- 32,123,33,114,125,32,40,123,33,114,125,41,62,250,23,60,
- 109,111,100,117,108,101,32,123,33,114,125,32,102,114,111,109,
- 32,123,33,114,125,62,41,10,114,6,0,0,0,114,4,0,
- 0,0,114,98,0,0,0,218,9,69,120,99,101,112,116,105,
- 111,110,218,8,95,95,115,112,101,99,95,95,218,14,65,116,
- 116,114,105,98,117,116,101,69,114,114,111,114,218,22,95,109,
- 111,100,117,108,101,95,114,101,112,114,95,102,114,111,109,95,
- 115,112,101,99,114,1,0,0,0,218,8,95,95,102,105,108,
- 101,95,95,114,44,0,0,0,41,5,114,95,0,0,0,218,
- 6,108,111,97,100,101,114,114,94,0,0,0,114,17,0,0,
- 0,218,8,102,105,108,101,110,97,109,101,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,218,12,95,109,111,100,
- 117,108,101,95,114,101,112,114,13,1,0,0,115,46,0,0,
- 0,0,2,12,1,10,4,2,1,12,1,14,1,6,1,2,
- 1,10,1,14,1,6,2,8,1,8,4,2,1,10,1,14,
- 1,10,1,2,1,10,1,14,1,8,1,14,2,22,2,114,
- 110,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,114,0,
- 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,
- 100,2,100,2,100,3,156,3,100,4,100,5,132,2,90,4,
- 100,6,100,7,132,0,90,5,100,8,100,9,132,0,90,6,
- 101,7,100,10,100,11,132,0,131,1,90,8,101,8,106,9,
- 100,12,100,11,132,0,131,1,90,8,101,7,100,13,100,14,
- 132,0,131,1,90,10,101,7,100,15,100,16,132,0,131,1,
- 90,11,101,11,106,9,100,17,100,16,132,0,131,1,90,11,
- 100,2,83,0,41,18,218,10,77,111,100,117,108,101,83,112,
- 101,99,97,208,5,0,0,84,104,101,32,115,112,101,99,105,
- 102,105,99,97,116,105,111,110,32,102,111,114,32,97,32,109,
- 111,100,117,108,101,44,32,117,115,101,100,32,102,111,114,32,
- 108,111,97,100,105,110,103,46,10,10,32,32,32,32,65,32,
- 109,111,100,117,108,101,39,115,32,115,112,101,99,32,105,115,
- 32,116,104,101,32,115,111,117,114,99,101,32,102,111,114,32,
- 105,110,102,111,114,109,97,116,105,111,110,32,97,98,111,117,
- 116,32,116,104,101,32,109,111,100,117,108,101,46,32,32,70,
- 111,114,10,32,32,32,32,100,97,116,97,32,97,115,115,111,
- 99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,
- 109,111,100,117,108,101,44,32,105,110,99,108,117,100,105,110,
- 103,32,115,111,117,114,99,101,44,32,117,115,101,32,116,104,
- 101,32,115,112,101,99,39,115,10,32,32,32,32,108,111,97,
- 100,101,114,46,10,10,32,32,32,32,96,110,97,109,101,96,
- 32,105,115,32,116,104,101,32,97,98,115,111,108,117,116,101,
- 32,110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,
- 117,108,101,46,32,32,96,108,111,97,100,101,114,96,32,105,
- 115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,
- 32,116,111,32,117,115,101,32,119,104,101,110,32,108,111,97,
- 100,105,110,103,32,116,104,101,32,109,111,100,117,108,101,46,
- 32,32,96,112,97,114,101,110,116,96,32,105,115,32,116,104,
- 101,32,110,97,109,101,32,111,102,32,116,104,101,10,32,32,
- 32,32,112,97,99,107,97,103,101,32,116,104,101,32,109,111,
- 100,117,108,101,32,105,115,32,105,110,46,32,32,84,104,101,
- 32,112,97,114,101,110,116,32,105,115,32,100,101,114,105,118,
- 101,100,32,102,114,111,109,32,116,104,101,32,110,97,109,101,
- 46,10,10,32,32,32,32,96,105,115,95,112,97,99,107,97,
- 103,101,96,32,100,101,116,101,114,109,105,110,101,115,32,105,
- 102,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,
- 99,111,110,115,105,100,101,114,101,100,32,97,32,112,97,99,
- 107,97,103,101,32,111,114,10,32,32,32,32,110,111,116,46,
- 32,32,79,110,32,109,111,100,117,108,101,115,32,116,104,105,
- 115,32,105,115,32,114,101,102,108,101,99,116,101,100,32,98,
- 121,32,116,104,101,32,96,95,95,112,97,116,104,95,95,96,
- 32,97,116,116,114,105,98,117,116,101,46,10,10,32,32,32,
- 32,96,111,114,105,103,105,110,96,32,105,115,32,116,104,101,
- 32,115,112,101,99,105,102,105,99,32,108,111,99,97,116,105,
- 111,110,32,117,115,101,100,32,98,121,32,116,104,101,32,108,
- 111,97,100,101,114,32,102,114,111,109,32,119,104,105,99,104,
- 32,116,111,10,32,32,32,32,108,111,97,100,32,116,104,101,
- 32,109,111,100,117,108,101,44,32,105,102,32,116,104,97,116,
- 32,105,110,102,111,114,109,97,116,105,111,110,32,105,115,32,
- 97,118,97,105,108,97,98,108,101,46,32,32,87,104,101,110,
- 32,102,105,108,101,110,97,109,101,32,105,115,10,32,32,32,
- 32,115,101,116,44,32,111,114,105,103,105,110,32,119,105,108,
- 108,32,109,97,116,99,104,46,10,10,32,32,32,32,96,104,
- 97,115,95,108,111,99,97,116,105,111,110,96,32,105,110,100,
- 105,99,97,116,101,115,32,116,104,97,116,32,97,32,115,112,
- 101,99,39,115,32,34,111,114,105,103,105,110,34,32,114,101,
- 102,108,101,99,116,115,32,97,32,108,111,99,97,116,105,111,
- 110,46,10,32,32,32,32,87,104,101,110,32,116,104,105,115,
- 32,105,115,32,84,114,117,101,44,32,96,95,95,102,105,108,
- 101,95,95,96,32,97,116,116,114,105,98,117,116,101,32,111,
- 102,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,
- 115,101,116,46,10,10,32,32,32,32,96,99,97,99,104,101,
- 100,96,32,105,115,32,116,104,101,32,108,111,99,97,116,105,
- 111,110,32,111,102,32,116,104,101,32,99,97,99,104,101,100,
- 32,98,121,116,101,99,111,100,101,32,102,105,108,101,44,32,
- 105,102,32,97,110,121,46,32,32,73,116,10,32,32,32,32,
- 99,111,114,114,101,115,112,111,110,100,115,32,116,111,32,116,
- 104,101,32,96,95,95,99,97,99,104,101,100,95,95,96,32,
- 97,116,116,114,105,98,117,116,101,46,10,10,32,32,32,32,
- 96,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,96,32,105,115,32,
- 116,104,101,32,115,101,113,117,101,110,99,101,32,111,102,32,
- 112,97,116,104,32,101,110,116,114,105,101,115,32,116,111,10,
- 32,32,32,32,115,101,97,114,99,104,32,119,104,101,110,32,
- 105,109,112,111,114,116,105,110,103,32,115,117,98,109,111,100,
- 117,108,101,115,46,32,32,73,102,32,115,101,116,44,32,105,
- 115,95,112,97,99,107,97,103,101,32,115,104,111,117,108,100,
- 32,98,101,10,32,32,32,32,84,114,117,101,45,45,97,110,
- 100,32,70,97,108,115,101,32,111,116,104,101,114,119,105,115,
- 101,46,10,10,32,32,32,32,80,97,99,107,97,103,101,115,
- 32,97,114,101,32,115,105,109,112,108,121,32,109,111,100,117,
- 108,101,115,32,116,104,97,116,32,40,109,97,121,41,32,104,
- 97,118,101,32,115,117,98,109,111,100,117,108,101,115,46,32,
- 32,73,102,32,97,32,115,112,101,99,10,32,32,32,32,104,
- 97,115,32,97,32,110,111,110,45,78,111,110,101,32,118,97,
- 108,117,101,32,105,110,32,96,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,96,44,32,116,104,101,32,105,109,112,111,114,116,10,
- 32,32,32,32,115,121,115,116,101,109,32,119,105,108,108,32,
- 99,111,110,115,105,100,101,114,32,109,111,100,117,108,101,115,
- 32,108,111,97,100,101,100,32,102,114,111,109,32,116,104,101,
- 32,115,112,101,99,32,97,115,32,112,97,99,107,97,103,101,
- 115,46,10,10,32,32,32,32,79,110,108,121,32,102,105,110,
- 100,101,114,115,32,40,115,101,101,32,105,109,112,111,114,116,
- 108,105,98,46,97,98,99,46,77,101,116,97,80,97,116,104,
- 70,105,110,100,101,114,32,97,110,100,10,32,32,32,32,105,
- 109,112,111,114,116,108,105,98,46,97,98,99,46,80,97,116,
- 104,69,110,116,114,121,70,105,110,100,101,114,41,32,115,104,
- 111,117,108,100,32,109,111,100,105,102,121,32,77,111,100,117,
- 108,101,83,112,101,99,32,105,110,115,116,97,110,99,101,115,
- 46,10,10,32,32,32,32,78,41,3,218,6,111,114,105,103,
- 105,110,218,12,108,111,97,100,101,114,95,115,116,97,116,101,
- 218,10,105,115,95,112,97,99,107,97,103,101,99,3,0,0,
- 0,0,0,0,0,3,0,0,0,6,0,0,0,2,0,0,
- 0,67,0,0,0,115,54,0,0,0,124,1,124,0,95,0,
- 124,2,124,0,95,1,124,3,124,0,95,2,124,4,124,0,
- 95,3,124,5,114,32,103,0,110,2,100,0,124,0,95,4,
- 100,1,124,0,95,5,100,0,124,0,95,6,100,0,83,0,
- 41,2,78,70,41,7,114,17,0,0,0,114,108,0,0,0,
- 114,112,0,0,0,114,113,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,218,13,95,115,101,116,95,102,105,108,
- 101,97,116,116,114,218,7,95,99,97,99,104,101,100,41,6,
- 114,30,0,0,0,114,17,0,0,0,114,108,0,0,0,114,
- 112,0,0,0,114,113,0,0,0,114,114,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,31,0,
- 0,0,86,1,0,0,115,14,0,0,0,0,2,6,1,6,
- 1,6,1,6,1,14,3,6,1,122,19,77,111,100,117,108,
- 101,83,112,101,99,46,95,95,105,110,105,116,95,95,99,1,
- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,6,
- 0,0,0,67,0,0,0,115,102,0,0,0,100,1,160,0,
- 124,0,106,1,161,1,100,2,160,0,124,0,106,2,161,1,
- 103,2,125,1,124,0,106,3,100,0,107,9,114,52,124,1,
- 160,4,100,3,160,0,124,0,106,3,161,1,161,1,1,0,
- 124,0,106,5,100,0,107,9,114,80,124,1,160,4,100,4,
- 160,0,124,0,106,5,161,1,161,1,1,0,100,5,160,0,
- 124,0,106,6,106,7,100,6,160,8,124,1,161,1,161,2,
- 83,0,41,7,78,122,9,110,97,109,101,61,123,33,114,125,
- 122,11,108,111,97,100,101,114,61,123,33,114,125,122,11,111,
- 114,105,103,105,110,61,123,33,114,125,122,29,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,61,123,125,122,6,123,125,40,123,125,
- 41,122,2,44,32,41,9,114,44,0,0,0,114,17,0,0,
- 0,114,108,0,0,0,114,112,0,0,0,218,6,97,112,112,
- 101,110,100,114,115,0,0,0,218,9,95,95,99,108,97,115,
- 115,95,95,114,1,0,0,0,218,4,106,111,105,110,41,2,
- 114,30,0,0,0,114,54,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,47,0,0,0,98,1,
- 0,0,115,20,0,0,0,0,1,10,1,10,255,4,2,10,
- 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,108,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,4,0,
- 116,6,107,10,114,102,1,0,1,0,1,0,116,7,6,0,
- 89,0,83,0,48,0,100,0,83,0,114,13,0,0,0,41,
- 8,114,115,0,0,0,114,17,0,0,0,114,108,0,0,0,
- 114,112,0,0,0,218,6,99,97,99,104,101,100,218,12,104,
- 97,115,95,108,111,99,97,116,105,111,110,114,105,0,0,0,
- 218,14,78,111,116,73,109,112,108,101,109,101,110,116,101,100,
- 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,117,0,0,0,114,112,0,0,0,114,116,
- 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,46,0,0,0,114,
- 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,121,
- 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,117,0,0,0,41,
- 2,114,30,0,0,0,114,121,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,114,121,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,115,0,0,0,
- 114,17,0,0,0,218,10,114,112,97,114,116,105,116,105,111,
- 110,114,46,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,116,0,0,0,114,
- 46,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
- 0,0,0,114,122,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,116,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,122,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,47,0,0,0,114,124,0,0,0,218,8,112,114,
- 111,112,101,114,116,121,114,121,0,0,0,218,6,115,101,116,
- 116,101,114,114,129,0,0,0,114,122,0,0,0,114,10,0,
- 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
- 0,114,111,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,
- 111,0,0,0,169,2,114,112,0,0,0,114,114,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,
- 48,0,110,4,100,6,125,3,116,6,124,0,124,1,124,2,
- 124,3,100,7,141,4,83,0,41,8,122,53,82,101,116,117,
- 114,110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,
- 32,98,97,115,101,100,32,111,110,32,118,97,114,105,111,117,
- 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,108,0,0,0,41,2,114,108,0,0,0,114,115,
- 0,0,0,114,114,0,0,0,70,114,134,0,0,0,41,7,
- 114,4,0,0,0,114,125,0,0,0,114,126,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,114,0,0,0,114,78,0,
- 0,0,114,111,0,0,0,41,6,114,17,0,0,0,114,108,
- 0,0,0,114,112,0,0,0,114,114,0,0,0,114,135,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,90,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,90,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,48,0,124,3,
- 100,0,107,9,114,44,124,3,83,0,124,0,106,2,125,4,
- 124,1,100,0,107,8,114,90,122,10,124,0,106,3,125,1,
- 87,0,110,20,4,0,116,1,107,10,114,88,1,0,1,0,
- 1,0,89,0,110,2,48,0,122,10,124,0,106,4,125,5,
- 87,0,110,24,4,0,116,1,107,10,114,124,1,0,1,0,
- 1,0,100,0,125,5,89,0,110,2,48,0,124,2,100,0,
- 107,8,114,184,124,5,100,0,107,8,114,180,122,10,124,1,
- 106,5,125,2,87,0,113,184,4,0,116,1,107,10,114,176,
- 1,0,1,0,1,0,100,0,125,2,89,0,113,184,48,0,
- 110,4,124,5,125,2,122,10,124,0,106,6,125,6,87,0,
- 110,24,4,0,116,1,107,10,114,218,1,0,1,0,1,0,
- 100,0,125,6,89,0,110,2,48,0,122,14,116,7,124,0,
- 106,8,131,1,125,7,87,0,110,26,4,0,116,1,107,10,
- 144,1,114,4,1,0,1,0,1,0,100,0,125,7,89,0,
- 110,2,48,0,116,9,124,4,124,1,124,2,100,1,141,3,
- 125,3,124,5,100,0,107,8,144,1,114,34,100,2,110,2,
- 100,3,124,3,95,10,124,6,124,3,95,11,124,7,124,3,
- 95,12,124,3,83,0,41,4,78,169,1,114,112,0,0,0,
- 70,84,41,13,114,104,0,0,0,114,105,0,0,0,114,1,
- 0,0,0,114,97,0,0,0,114,107,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,111,0,0,0,114,116,0,0,0,114,121,0,0,
- 0,114,115,0,0,0,41,8,114,95,0,0,0,114,108,0,
- 0,0,114,112,0,0,0,114,94,0,0,0,114,17,0,0,
- 0,90,8,108,111,99,97,116,105,111,110,114,121,0,0,0,
- 114,115,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,141,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,48,0,124,2,
- 115,74,116,0,124,1,100,2,100,0,131,3,100,0,107,8,
- 114,178,124,0,106,4,125,3,124,3,100,0,107,8,114,146,
- 124,0,106,5,100,0,107,9,114,146,116,6,100,0,107,8,
- 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,48,0,124,2,115,198,116,0,
- 124,1,100,3,100,0,131,3,100,0,107,8,114,232,122,12,
- 124,0,106,13,124,1,95,14,87,0,110,20,4,0,116,3,
- 107,10,114,230,1,0,1,0,1,0,89,0,110,2,48,0,
- 122,10,124,0,124,1,95,15,87,0,110,22,4,0,116,3,
- 107,10,144,1,114,8,1,0,1,0,1,0,89,0,110,2,
- 48,0,124,2,144,1,115,34,116,0,124,1,100,4,100,0,
- 131,3,100,0,107,8,144,1,114,82,124,0,106,5,100,0,
- 107,9,144,1,114,82,122,12,124,0,106,5,124,1,95,16,
- 87,0,110,22,4,0,116,3,107,10,144,1,114,80,1,0,
- 1,0,1,0,89,0,110,2,48,0,124,0,106,17,144,1,
- 114,222,124,2,144,1,115,114,116,0,124,1,100,5,100,0,
- 131,3,100,0,107,8,144,1,114,150,122,12,124,0,106,18,
- 124,1,95,11,87,0,110,22,4,0,116,3,107,10,144,1,
- 114,148,1,0,1,0,1,0,89,0,110,2,48,0,124,2,
- 144,1,115,174,116,0,124,1,100,6,100,0,131,3,100,0,
- 107,8,144,1,114,222,124,0,106,19,100,0,107,9,144,1,
- 114,222,122,12,124,0,106,19,124,1,95,20,87,0,110,22,
- 4,0,116,3,107,10,144,1,114,220,1,0,1,0,1,0,
- 89,0,110,2,48,0,124,1,83,0,41,7,78,114,1,0,
- 0,0,114,97,0,0,0,218,11,95,95,112,97,99,107,97,
- 103,101,95,95,114,140,0,0,0,114,107,0,0,0,114,138,
- 0,0,0,41,21,114,6,0,0,0,114,17,0,0,0,114,
- 1,0,0,0,114,105,0,0,0,114,108,0,0,0,114,115,
- 0,0,0,114,125,0,0,0,114,126,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,
- 107,0,0,0,114,97,0,0,0,114,129,0,0,0,114,144,
- 0,0,0,114,104,0,0,0,114,140,0,0,0,114,122,0,
- 0,0,114,112,0,0,0,114,121,0,0,0,114,138,0,0,
- 0,41,5,114,94,0,0,0,114,95,0,0,0,114,143,0,
- 0,0,114,108,0,0,0,114,145,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,147,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,108,0,0,0,114,148,0,0,0,114,78,
- 0,0,0,114,18,0,0,0,114,17,0,0,0,114,147,0,
- 0,0,169,2,114,94,0,0,0,114,95,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,218,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,151,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,99,0,0,0,114,100,0,0,0,114,101,0,0,
- 0,114,102,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,112,0,0,0,114,108,0,0,0,114,44,0,0,0,
- 114,122,0,0,0,41,2,114,94,0,0,0,114,17,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,106,0,0,0,54,2,0,0,115,16,0,0,0,0,3,
- 20,1,10,1,10,1,10,2,16,2,6,1,14,2,114,106,
- 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,
- 4,0,0,0,10,0,0,0,67,0,0,0,115,250,0,0,
- 0,124,0,106,0,125,2,116,1,124,2,131,1,143,216,1,
- 0,116,2,106,3,160,4,124,2,161,1,124,1,107,9,114,
- 54,100,1,160,5,124,2,161,1,125,3,116,6,124,3,124,
- 2,100,2,141,2,130,1,122,132,124,0,106,7,100,3,107,
- 8,114,106,124,0,106,8,100,3,107,8,114,90,116,6,100,
- 4,124,0,106,0,100,2,141,2,130,1,116,9,124,0,124,
- 1,100,5,100,6,141,3,1,0,110,52,116,9,124,0,124,
- 1,100,5,100,6,141,3,1,0,116,10,124,0,106,7,100,
- 7,131,2,115,146,124,0,106,7,160,11,124,2,161,1,1,
- 0,110,12,124,0,106,7,160,12,124,1,161,1,1,0,87,
- 0,116,2,106,3,160,13,124,0,106,0,161,1,125,1,124,
- 1,116,2,106,3,124,0,106,0,60,0,110,28,116,2,106,
- 3,160,13,124,0,106,0,161,1,125,1,124,1,116,2,106,
- 3,124,0,106,0,60,0,48,0,87,0,100,3,4,0,4,
- 0,131,3,1,0,110,16,49,0,115,236,48,0,1,0,1,
- 0,1,0,89,0,1,0,124,1,83,0,41,8,122,70,69,
- 120,101,99,117,116,101,32,116,104,101,32,115,112,101,99,39,
- 115,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,
- 108,101,32,105,110,32,97,110,32,101,120,105,115,116,105,110,
- 103,32,109,111,100,117,108,101,39,115,32,110,97,109,101,115,
- 112,97,99,101,46,122,30,109,111,100,117,108,101,32,123,33,
- 114,125,32,110,111,116,32,105,110,32,115,121,115,46,109,111,
- 100,117,108,101,115,114,16,0,0,0,78,250,14,109,105,115,
- 115,105,110,103,32,108,111,97,100,101,114,84,114,142,0,0,
- 0,114,149,0,0,0,41,14,114,17,0,0,0,114,49,0,
- 0,0,114,15,0,0,0,114,91,0,0,0,114,34,0,0,
- 0,114,44,0,0,0,114,78,0,0,0,114,108,0,0,0,
- 114,115,0,0,0,114,147,0,0,0,114,4,0,0,0,218,
- 11,108,111,97,100,95,109,111,100,117,108,101,114,149,0,0,
- 0,218,3,112,111,112,41,4,114,94,0,0,0,114,95,0,
- 0,0,114,17,0,0,0,218,3,109,115,103,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,114,92,0,0,0,
- 71,2,0,0,115,38,0,0,0,0,2,6,1,10,1,16,
- 1,10,1,12,1,2,1,10,1,10,1,14,2,16,2,14,
- 1,12,4,14,2,14,4,14,1,14,255,14,1,44,1,114,
- 92,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,2,0,0,0,8,0,0,0,67,0,0,0,115,26,1,
- 0,0,122,18,124,0,106,0,160,1,124,0,106,2,161,1,
- 1,0,87,0,110,52,1,0,1,0,1,0,124,0,106,2,
- 116,3,106,4,107,6,114,64,116,3,106,4,160,5,124,0,
- 106,2,161,1,125,1,124,1,116,3,106,4,124,0,106,2,
- 60,0,130,0,89,0,110,2,48,0,116,3,106,4,160,5,
- 124,0,106,2,161,1,125,1,124,1,116,3,106,4,124,0,
- 106,2,60,0,116,6,124,1,100,1,100,0,131,3,100,0,
- 107,8,114,148,122,12,124,0,106,0,124,1,95,7,87,0,
- 110,20,4,0,116,8,107,10,114,146,1,0,1,0,1,0,
- 89,0,110,2,48,0,116,6,124,1,100,2,100,0,131,3,
- 100,0,107,8,114,226,122,40,124,1,106,9,124,1,95,10,
- 116,11,124,1,100,3,131,2,115,202,124,0,106,2,160,12,
- 100,4,161,1,100,5,25,0,124,1,95,10,87,0,110,20,
- 4,0,116,8,107,10,114,224,1,0,1,0,1,0,89,0,
- 110,2,48,0,116,6,124,1,100,6,100,0,131,3,100,0,
- 107,8,144,1,114,22,122,10,124,0,124,1,95,13,87,0,
- 110,22,4,0,116,8,107,10,144,1,114,20,1,0,1,0,
- 1,0,89,0,110,2,48,0,124,1,83,0,41,7,78,114,
- 97,0,0,0,114,144,0,0,0,114,140,0,0,0,114,127,
- 0,0,0,114,22,0,0,0,114,104,0,0,0,41,14,114,
- 108,0,0,0,114,154,0,0,0,114,17,0,0,0,114,15,
- 0,0,0,114,91,0,0,0,114,155,0,0,0,114,6,0,
- 0,0,114,97,0,0,0,114,105,0,0,0,114,1,0,0,
- 0,114,144,0,0,0,114,4,0,0,0,114,128,0,0,0,
- 114,104,0,0,0,114,150,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,218,25,95,108,111,97,100,
- 95,98,97,99,107,119,97,114,100,95,99,111,109,112,97,116,
- 105,98,108,101,101,2,0,0,115,54,0,0,0,0,4,2,
- 1,18,1,6,1,12,1,14,1,12,1,8,3,14,1,12,
- 1,16,1,2,1,12,1,14,1,6,1,16,1,2,4,8,
- 1,10,1,22,1,14,1,6,1,18,1,2,1,10,1,16,
- 1,6,1,114,157,0,0,0,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0,
- 0,115,226,0,0,0,124,0,106,0,100,0,107,9,114,30,
- 116,1,124,0,106,0,100,1,131,2,115,30,116,2,124,0,
- 131,1,83,0,116,3,124,0,131,1,125,1,100,2,124,0,
- 95,4,122,168,124,1,116,5,106,6,124,0,106,7,60,0,
- 122,52,124,0,106,0,100,0,107,8,114,96,124,0,106,8,
- 100,0,107,8,114,108,116,9,100,3,124,0,106,7,100,4,
- 141,2,130,1,110,12,124,0,106,0,160,10,124,1,161,1,
- 1,0,87,0,110,50,1,0,1,0,1,0,122,14,116,5,
- 106,6,124,0,106,7,61,0,87,0,110,20,4,0,116,11,
- 107,10,114,152,1,0,1,0,1,0,89,0,110,2,48,0,
- 130,0,89,0,110,2,48,0,116,5,106,6,160,12,124,0,
- 106,7,161,1,125,1,124,1,116,5,106,6,124,0,106,7,
- 60,0,116,13,100,5,124,0,106,7,124,0,106,0,131,3,
- 1,0,87,0,100,6,124,0,95,4,110,8,100,6,124,0,
- 95,4,48,0,124,1,83,0,41,7,78,114,149,0,0,0,
- 84,114,153,0,0,0,114,16,0,0,0,122,18,105,109,112,
- 111,114,116,32,123,33,114,125,32,35,32,123,33,114,125,70,
- 41,14,114,108,0,0,0,114,4,0,0,0,114,157,0,0,
- 0,114,151,0,0,0,90,13,95,105,110,105,116,105,97,108,
- 105,122,105,110,103,114,15,0,0,0,114,91,0,0,0,114,
- 17,0,0,0,114,115,0,0,0,114,78,0,0,0,114,149,
- 0,0,0,114,62,0,0,0,114,155,0,0,0,114,75,0,
- 0,0,114,150,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,218,14,95,108,111,97,100,95,117,110,
- 108,111,99,107,101,100,138,2,0,0,115,48,0,0,0,0,
- 2,10,2,12,1,8,2,8,5,6,1,2,1,12,1,2,
- 1,10,1,10,1,16,3,16,1,6,1,2,1,14,1,14,
- 1,6,1,8,5,14,1,12,1,18,2,8,0,8,2,114,
- 158,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,1,0,0,0,8,0,0,0,67,0,0,0,115,54,0,
- 0,0,116,0,124,0,106,1,131,1,143,24,1,0,116,2,
- 124,0,131,1,87,0,2,0,100,1,4,0,4,0,131,3,
- 1,0,83,0,49,0,115,40,48,0,1,0,1,0,1,0,
- 89,0,1,0,100,1,83,0,41,2,122,191,82,101,116,117,
- 114,110,32,97,32,110,101,119,32,109,111,100,117,108,101,32,
- 111,98,106,101,99,116,44,32,108,111,97,100,101,100,32,98,
- 121,32,116,104,101,32,115,112,101,99,39,115,32,108,111,97,
- 100,101,114,46,10,10,32,32,32,32,84,104,101,32,109,111,
- 100,117,108,101,32,105,115,32,110,111,116,32,97,100,100,101,
- 100,32,116,111,32,105,116,115,32,112,97,114,101,110,116,46,
- 10,10,32,32,32,32,73,102,32,97,32,109,111,100,117,108,
- 101,32,105,115,32,97,108,114,101,97,100,121,32,105,110,32,
- 115,121,115,46,109,111,100,117,108,101,115,44,32,116,104,97,
- 116,32,101,120,105,115,116,105,110,103,32,109,111,100,117,108,
- 101,32,103,101,116,115,10,32,32,32,32,99,108,111,98,98,
- 101,114,101,100,46,10,10,32,32,32,32,78,41,3,114,49,
- 0,0,0,114,17,0,0,0,114,158,0,0,0,41,1,114,
- 94,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
- 0,0,0,114,93,0,0,0,180,2,0,0,115,4,0,0,
- 0,0,9,12,1,114,93,0,0,0,99,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,
- 0,0,0,115,140,0,0,0,101,0,90,1,100,0,90,2,
- 100,1,90,3,100,2,90,4,101,5,100,3,100,4,132,0,
- 131,1,90,6,101,7,100,20,100,6,100,7,132,1,131,1,
- 90,8,101,7,100,21,100,8,100,9,132,1,131,1,90,9,
- 101,7,100,10,100,11,132,0,131,1,90,10,101,7,100,12,
- 100,13,132,0,131,1,90,11,101,7,101,12,100,14,100,15,
- 132,0,131,1,131,1,90,13,101,7,101,12,100,16,100,17,
- 132,0,131,1,131,1,90,14,101,7,101,12,100,18,100,19,
- 132,0,131,1,131,1,90,15,101,7,101,16,131,1,90,17,
- 100,5,83,0,41,22,218,15,66,117,105,108,116,105,110,73,
- 109,112,111,114,116,101,114,122,144,77,101,116,97,32,112,97,
- 116,104,32,105,109,112,111,114,116,32,102,111,114,32,98,117,
- 105,108,116,45,105,110,32,109,111,100,117,108,101,115,46,10,
- 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115,
- 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115,
- 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104,
- 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101,
- 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115,
- 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97,
- 115,115,46,10,10,32,32,32,32,122,8,98,117,105,108,116,
- 45,105,110,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 1,0,0,0,5,0,0,0,67,0,0,0,115,22,0,0,
- 0,100,1,124,0,106,0,155,2,100,2,116,1,106,2,155,
- 0,100,3,157,5,83,0,41,4,250,115,82,101,116,117,114,
- 110,32,114,101,112,114,32,102,111,114,32,116,104,101,32,109,
- 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32,
- 84,104,101,32,109,101,116,104,111,100,32,105,115,32,100,101,
- 112,114,101,99,97,116,101,100,46,32,32,84,104,101,32,105,
- 109,112,111,114,116,32,109,97,99,104,105,110,101,114,121,32,
- 100,111,101,115,32,116,104,101,32,106,111,98,32,105,116,115,
- 101,108,102,46,10,10,32,32,32,32,32,32,32,32,122,8,
- 60,109,111,100,117,108,101,32,122,2,32,40,122,2,41,62,
- 41,3,114,1,0,0,0,114,159,0,0,0,114,137,0,0,
- 0,41,1,114,95,0,0,0,114,10,0,0,0,114,10,0,
- 0,0,114,11,0,0,0,114,98,0,0,0,206,2,0,0,
- 115,2,0,0,0,0,7,122,27,66,117,105,108,116,105,110,
- 73,109,112,111,114,116,101,114,46,109,111,100,117,108,101,95,
- 114,101,112,114,78,99,4,0,0,0,0,0,0,0,0,0,
- 0,0,4,0,0,0,5,0,0,0,67,0,0,0,115,46,
- 0,0,0,124,2,100,0,107,9,114,12,100,0,83,0,116,
- 0,160,1,124,1,161,1,114,38,116,2,124,1,124,0,124,
- 0,106,3,100,1,141,3,83,0,100,0,83,0,100,0,83,
- 0,169,2,78,114,136,0,0,0,41,4,114,56,0,0,0,
- 90,10,105,115,95,98,117,105,108,116,105,110,114,90,0,0,
- 0,114,137,0,0,0,169,4,218,3,99,108,115,114,80,0,
- 0,0,218,4,112,97,116,104,218,6,116,97,114,103,101,116,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
- 9,102,105,110,100,95,115,112,101,99,215,2,0,0,115,10,
- 0,0,0,0,2,8,1,4,1,10,1,16,2,122,25,66,
- 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,
- 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,
- 0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,0,
- 0,115,30,0,0,0,124,0,160,0,124,1,124,2,161,2,
- 125,3,124,3,100,1,107,9,114,26,124,3,106,1,83,0,
- 100,1,83,0,41,2,122,175,70,105,110,100,32,116,104,101,
- 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,
- 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,112,
- 97,116,104,39,32,105,115,32,101,118,101,114,32,115,112,101,
- 99,105,102,105,101,100,32,116,104,101,110,32,116,104,101,32,
- 115,101,97,114,99,104,32,105,115,32,99,111,110,115,105,100,
- 101,114,101,100,32,97,32,102,97,105,108,117,114,101,46,10,
- 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,
- 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,
- 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,
- 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,
- 32,32,32,32,32,32,32,78,41,2,114,166,0,0,0,114,
- 108,0,0,0,41,4,114,163,0,0,0,114,80,0,0,0,
- 114,164,0,0,0,114,94,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,218,11,102,105,110,100,95,
- 109,111,100,117,108,101,224,2,0,0,115,4,0,0,0,0,
- 9,12,1,122,27,66,117,105,108,116,105,110,73,109,112,111,
- 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101,
+ 0,0,78,0,0,0,115,36,0,0,0,0,6,8,1,8,
+ 1,2,2,8,1,20,1,6,1,14,1,14,9,6,247,4,
+ 1,8,1,12,1,12,1,44,2,10,1,14,2,8,0,122,
+ 19,95,77,111,100,117,108,101,76,111,99,107,46,97,99,113,
+ 117,105,114,101,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,2,0,0,0,8,0,0,0,67,0,0,0,115,142,0,
+ 0,0,116,0,160,1,161,0,125,1,124,0,106,2,143,108,
+ 1,0,124,0,106,3,124,1,107,3,114,34,116,4,100,1,
+ 131,1,130,1,124,0,106,5,100,2,107,4,115,48,74,0,
+ 130,1,124,0,4,0,106,5,100,3,56,0,2,0,95,5,
+ 124,0,106,5,100,2,107,2,114,108,100,0,124,0,95,3,
+ 124,0,106,6,114,108,124,0,4,0,106,6,100,3,56,0,
+ 2,0,95,6,124,0,106,7,160,8,161,0,1,0,87,0,
+ 100,0,4,0,4,0,131,3,1,0,110,16,49,0,115,128,
+ 48,0,1,0,1,0,1,0,89,0,1,0,100,0,83,0,
+ 41,4,78,250,31,99,97,110,110,111,116,32,114,101,108,101,
+ 97,115,101,32,117,110,45,97,99,113,117,105,114,101,100,32,
+ 108,111,99,107,114,22,0,0,0,114,37,0,0,0,41,9,
+ 114,23,0,0,0,114,32,0,0,0,114,24,0,0,0,114,
+ 26,0,0,0,218,12,82,117,110,116,105,109,101,69,114,114,
+ 111,114,114,27,0,0,0,114,28,0,0,0,114,25,0,0,
+ 0,114,39,0,0,0,114,40,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,114,39,0,0,0,103,
+ 0,0,0,115,22,0,0,0,0,1,8,1,8,1,10,1,
+ 8,1,14,1,14,1,10,1,6,1,6,1,14,1,122,19,
+ 95,77,111,100,117,108,101,76,111,99,107,46,114,101,108,101,
+ 97,115,101,99,1,0,0,0,0,0,0,0,0,0,0,0,
+ 1,0,0,0,5,0,0,0,67,0,0,0,115,18,0,0,
+ 0,100,1,160,0,124,0,106,1,116,2,124,0,131,1,161,
+ 2,83,0,41,2,78,122,23,95,77,111,100,117,108,101,76,
+ 111,99,107,40,123,33,114,125,41,32,97,116,32,123,125,169,
+ 3,218,6,102,111,114,109,97,116,114,17,0,0,0,218,2,
+ 105,100,169,1,114,30,0,0,0,114,10,0,0,0,114,10,
+ 0,0,0,114,11,0,0,0,218,8,95,95,114,101,112,114,
+ 95,95,116,0,0,0,115,2,0,0,0,0,1,122,20,95,
+ 77,111,100,117,108,101,76,111,99,107,46,95,95,114,101,112,
+ 114,95,95,78,41,9,114,1,0,0,0,114,0,0,0,0,
+ 114,2,0,0,0,114,3,0,0,0,114,31,0,0,0,114,
+ 36,0,0,0,114,38,0,0,0,114,39,0,0,0,114,47,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,20,0,0,0,52,0,0,0,
+ 115,12,0,0,0,8,1,4,5,8,8,8,12,8,25,8,
+ 13,114,20,0,0,0,99,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,
+ 48,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,
+ 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,
+ 100,6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,
+ 100,10,83,0,41,11,218,16,95,68,117,109,109,121,77,111,
+ 100,117,108,101,76,111,99,107,122,86,65,32,115,105,109,112,
+ 108,101,32,95,77,111,100,117,108,101,76,111,99,107,32,101,
+ 113,117,105,118,97,108,101,110,116,32,102,111,114,32,80,121,
+ 116,104,111,110,32,98,117,105,108,100,115,32,119,105,116,104,
+ 111,117,116,10,32,32,32,32,109,117,108,116,105,45,116,104,
+ 114,101,97,100,105,110,103,32,115,117,112,112,111,114,116,46,
99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
- 0,4,0,0,0,67,0,0,0,115,46,0,0,0,124,1,
- 106,0,116,1,106,2,107,7,114,34,116,3,100,1,160,4,
- 124,1,106,0,161,1,124,1,106,0,100,2,141,2,130,1,
- 116,5,116,6,106,7,124,1,131,2,83,0,41,3,122,24,
- 67,114,101,97,116,101,32,97,32,98,117,105,108,116,45,105,
- 110,32,109,111,100,117,108,101,114,76,0,0,0,114,16,0,
- 0,0,41,8,114,17,0,0,0,114,15,0,0,0,114,77,
- 0,0,0,114,78,0,0,0,114,44,0,0,0,114,66,0,
- 0,0,114,56,0,0,0,90,14,99,114,101,97,116,101,95,
- 98,117,105,108,116,105,110,41,2,114,30,0,0,0,114,94,
- 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,114,148,0,0,0,236,2,0,0,115,10,0,0,0,
- 0,3,12,1,12,1,4,255,6,2,122,29,66,117,105,108,
- 116,105,110,73,109,112,111,114,116,101,114,46,99,114,101,97,
- 116,101,95,109,111,100,117,108,101,99,2,0,0,0,0,0,
- 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,
- 0,0,115,16,0,0,0,116,0,116,1,106,2,124,1,131,
- 2,1,0,100,1,83,0,41,2,122,22,69,120,101,99,32,
- 97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,
- 101,78,41,3,114,66,0,0,0,114,56,0,0,0,90,12,
- 101,120,101,99,95,98,117,105,108,116,105,110,41,2,114,30,
- 0,0,0,114,95,0,0,0,114,10,0,0,0,114,10,0,
- 0,0,114,11,0,0,0,114,149,0,0,0,244,2,0,0,
- 115,2,0,0,0,0,3,122,27,66,117,105,108,116,105,110,
- 73,109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,
- 100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,
- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
- 0,0,100,1,83,0,41,2,122,57,82,101,116,117,114,110,
- 32,78,111,110,101,32,97,115,32,98,117,105,108,116,45,105,
- 110,32,109,111,100,117,108,101,115,32,100,111,32,110,111,116,
- 32,104,97,118,101,32,99,111,100,101,32,111,98,106,101,99,
- 116,115,46,78,114,10,0,0,0,169,2,114,163,0,0,0,
- 114,80,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 11,0,0,0,218,8,103,101,116,95,99,111,100,101,249,2,
- 0,0,115,2,0,0,0,0,4,122,24,66,117,105,108,116,
- 105,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99,
- 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0,
- 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,
- 0,100,1,83,0,41,2,122,56,82,101,116,117,114,110,32,
- 78,111,110,101,32,97,115,32,98,117,105,108,116,45,105,110,
- 32,109,111,100,117,108,101,115,32,100,111,32,110,111,116,32,
- 104,97,118,101,32,115,111,117,114,99,101,32,99,111,100,101,
- 46,78,114,10,0,0,0,114,168,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,218,10,103,101,116,
- 95,115,111,117,114,99,101,255,2,0,0,115,2,0,0,0,
- 0,4,122,26,66,117,105,108,116,105,110,73,109,112,111,114,
- 116,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,
- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,
- 0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,
- 41,2,122,52,82,101,116,117,114,110,32,70,97,108,115,101,
- 32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,
- 117,108,101,115,32,97,114,101,32,110,101,118,101,114,32,112,
- 97,99,107,97,103,101,115,46,70,114,10,0,0,0,114,168,
- 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,114,114,0,0,0,5,3,0,0,115,2,0,0,0,
- 0,4,122,26,66,117,105,108,116,105,110,73,109,112,111,114,
- 116,101,114,46,105,115,95,112,97,99,107,97,103,101,41,2,
- 78,78,41,1,78,41,18,114,1,0,0,0,114,0,0,0,
- 0,114,2,0,0,0,114,3,0,0,0,114,137,0,0,0,
- 218,12,115,116,97,116,105,99,109,101,116,104,111,100,114,98,
- 0,0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,
- 114,166,0,0,0,114,167,0,0,0,114,148,0,0,0,114,
- 149,0,0,0,114,85,0,0,0,114,169,0,0,0,114,170,
- 0,0,0,114,114,0,0,0,114,96,0,0,0,114,154,0,
+ 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,
+ 124,0,95,0,100,1,124,0,95,1,100,0,83,0,114,21,
+ 0,0,0,41,2,114,17,0,0,0,114,27,0,0,0,114,
+ 29,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,114,31,0,0,0,124,0,0,0,115,4,0,0,
+ 0,0,1,6,1,122,25,95,68,117,109,109,121,77,111,100,
+ 117,108,101,76,111,99,107,46,95,95,105,110,105,116,95,95,
+ 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+ 0,3,0,0,0,67,0,0,0,115,18,0,0,0,124,0,
+ 4,0,106,0,100,1,55,0,2,0,95,0,100,2,83,0,
+ 41,3,78,114,37,0,0,0,84,41,1,114,27,0,0,0,
+ 114,46,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 11,0,0,0,114,38,0,0,0,128,0,0,0,115,4,0,
+ 0,0,0,1,14,1,122,24,95,68,117,109,109,121,77,111,
+ 100,117,108,101,76,111,99,107,46,97,99,113,117,105,114,101,
+ 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+ 0,3,0,0,0,67,0,0,0,115,36,0,0,0,124,0,
+ 106,0,100,1,107,2,114,18,116,1,100,2,131,1,130,1,
+ 124,0,4,0,106,0,100,3,56,0,2,0,95,0,100,0,
+ 83,0,41,4,78,114,22,0,0,0,114,41,0,0,0,114,
+ 37,0,0,0,41,2,114,27,0,0,0,114,42,0,0,0,
+ 114,46,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 11,0,0,0,114,39,0,0,0,132,0,0,0,115,6,0,
+ 0,0,0,1,10,1,8,1,122,24,95,68,117,109,109,121,
+ 77,111,100,117,108,101,76,111,99,107,46,114,101,108,101,97,
+ 115,101,99,1,0,0,0,0,0,0,0,0,0,0,0,1,
+ 0,0,0,5,0,0,0,67,0,0,0,115,18,0,0,0,
+ 100,1,160,0,124,0,106,1,116,2,124,0,131,1,161,2,
+ 83,0,41,2,78,122,28,95,68,117,109,109,121,77,111,100,
+ 117,108,101,76,111,99,107,40,123,33,114,125,41,32,97,116,
+ 32,123,125,114,43,0,0,0,114,46,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,47,0,0,
+ 0,137,0,0,0,115,2,0,0,0,0,1,122,25,95,68,
+ 117,109,109,121,77,111,100,117,108,101,76,111,99,107,46,95,
+ 95,114,101,112,114,95,95,78,41,8,114,1,0,0,0,114,
+ 0,0,0,0,114,2,0,0,0,114,3,0,0,0,114,31,
+ 0,0,0,114,38,0,0,0,114,39,0,0,0,114,47,0,
0,0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,114,159,0,0,0,195,2,0,0,115,
- 44,0,0,0,8,2,4,7,4,2,2,1,10,8,2,1,
- 12,8,2,1,12,11,2,1,10,7,2,1,10,4,2,1,
- 2,1,12,4,2,1,2,1,12,4,2,1,2,1,12,4,
- 114,159,0,0,0,99,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,144,
- 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,
- 2,90,4,101,5,100,3,100,4,132,0,131,1,90,6,101,
- 7,100,22,100,6,100,7,132,1,131,1,90,8,101,7,100,
- 23,100,8,100,9,132,1,131,1,90,9,101,7,100,10,100,
- 11,132,0,131,1,90,10,101,5,100,12,100,13,132,0,131,
- 1,90,11,101,7,100,14,100,15,132,0,131,1,90,12,101,
- 7,101,13,100,16,100,17,132,0,131,1,131,1,90,14,101,
- 7,101,13,100,18,100,19,132,0,131,1,131,1,90,15,101,
- 7,101,13,100,20,100,21,132,0,131,1,131,1,90,16,100,
- 5,83,0,41,24,218,14,70,114,111,122,101,110,73,109,112,
- 111,114,116,101,114,122,142,77,101,116,97,32,112,97,116,104,
- 32,105,109,112,111,114,116,32,102,111,114,32,102,114,111,122,
- 101,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,
+ 0,114,11,0,0,0,114,48,0,0,0,120,0,0,0,115,
+ 10,0,0,0,8,1,4,3,8,4,8,4,8,5,114,48,
+ 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,2,0,0,0,64,0,0,0,115,36,0,0,
+ 0,101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,
+ 3,100,3,100,4,132,0,90,4,100,5,100,6,132,0,90,
+ 5,100,7,83,0,41,8,218,18,95,77,111,100,117,108,101,
+ 76,111,99,107,77,97,110,97,103,101,114,99,2,0,0,0,
+ 0,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,
+ 67,0,0,0,115,16,0,0,0,124,1,124,0,95,0,100,
+ 0,124,0,95,1,100,0,83,0,114,13,0,0,0,41,2,
+ 218,5,95,110,97,109,101,218,5,95,108,111,99,107,114,29,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
+ 0,0,114,31,0,0,0,143,0,0,0,115,4,0,0,0,
+ 0,1,6,1,122,27,95,77,111,100,117,108,101,76,111,99,
+ 107,77,97,110,97,103,101,114,46,95,95,105,110,105,116,95,
+ 95,99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,
+ 0,0,2,0,0,0,67,0,0,0,115,26,0,0,0,116,
+ 0,124,0,106,1,131,1,124,0,95,2,124,0,106,2,160,
+ 3,161,0,1,0,100,0,83,0,114,13,0,0,0,41,4,
+ 218,16,95,103,101,116,95,109,111,100,117,108,101,95,108,111,
+ 99,107,114,50,0,0,0,114,51,0,0,0,114,38,0,0,
+ 0,114,46,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,218,9,95,95,101,110,116,101,114,95,95,
+ 147,0,0,0,115,4,0,0,0,0,1,12,1,122,28,95,
+ 77,111,100,117,108,101,76,111,99,107,77,97,110,97,103,101,
+ 114,46,95,95,101,110,116,101,114,95,95,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,
+ 79,0,0,0,115,14,0,0,0,124,0,106,0,160,1,161,
+ 0,1,0,100,0,83,0,114,13,0,0,0,41,2,114,51,
+ 0,0,0,114,39,0,0,0,41,3,114,30,0,0,0,218,
+ 4,97,114,103,115,90,6,107,119,97,114,103,115,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,218,8,95,95,
+ 101,120,105,116,95,95,151,0,0,0,115,2,0,0,0,0,
+ 1,122,27,95,77,111,100,117,108,101,76,111,99,107,77,97,
+ 110,97,103,101,114,46,95,95,101,120,105,116,95,95,78,41,
+ 6,114,1,0,0,0,114,0,0,0,0,114,2,0,0,0,
+ 114,31,0,0,0,114,53,0,0,0,114,55,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,114,49,0,0,0,141,0,0,0,115,6,0,0,
+ 0,8,2,8,4,8,4,114,49,0,0,0,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,
+ 0,67,0,0,0,115,136,0,0,0,116,0,160,1,161,0,
+ 1,0,122,112,122,14,116,2,124,0,25,0,131,0,125,1,
+ 87,0,110,22,4,0,116,3,121,46,1,0,1,0,1,0,
+ 100,1,125,1,89,0,110,2,48,0,124,1,100,1,117,0,
+ 114,110,116,4,100,1,117,0,114,74,116,5,124,0,131,1,
+ 125,1,110,8,116,6,124,0,131,1,125,1,124,0,102,1,
+ 100,2,100,3,132,1,125,2,116,7,160,8,124,1,124,2,
+ 161,2,116,2,124,0,60,0,87,0,116,0,160,9,161,0,
+ 1,0,110,10,116,0,160,9,161,0,1,0,48,0,124,1,
+ 83,0,41,4,122,139,71,101,116,32,111,114,32,99,114,101,
+ 97,116,101,32,116,104,101,32,109,111,100,117,108,101,32,108,
+ 111,99,107,32,102,111,114,32,97,32,103,105,118,101,110,32,
+ 109,111,100,117,108,101,32,110,97,109,101,46,10,10,32,32,
+ 32,32,65,99,113,117,105,114,101,47,114,101,108,101,97,115,
+ 101,32,105,110,116,101,114,110,97,108,108,121,32,116,104,101,
+ 32,103,108,111,98,97,108,32,105,109,112,111,114,116,32,108,
+ 111,99,107,32,116,111,32,112,114,111,116,101,99,116,10,32,
+ 32,32,32,95,109,111,100,117,108,101,95,108,111,99,107,115,
+ 46,78,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
+ 0,0,0,8,0,0,0,83,0,0,0,115,56,0,0,0,
+ 116,0,160,1,161,0,1,0,122,32,116,2,160,3,124,1,
+ 161,1,124,0,117,0,114,30,116,2,124,1,61,0,87,0,
+ 116,0,160,4,161,0,1,0,110,10,116,0,160,4,161,0,
+ 1,0,48,0,100,0,83,0,114,13,0,0,0,41,5,218,
+ 4,95,105,109,112,218,12,97,99,113,117,105,114,101,95,108,
+ 111,99,107,218,13,95,109,111,100,117,108,101,95,108,111,99,
+ 107,115,114,34,0,0,0,218,12,114,101,108,101,97,115,101,
+ 95,108,111,99,107,41,2,218,3,114,101,102,114,17,0,0,
+ 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
+ 218,2,99,98,176,0,0,0,115,12,0,0,0,0,1,8,
+ 1,2,4,14,1,8,2,10,0,122,28,95,103,101,116,95,
+ 109,111,100,117,108,101,95,108,111,99,107,46,60,108,111,99,
+ 97,108,115,62,46,99,98,41,10,114,56,0,0,0,114,57,
+ 0,0,0,114,58,0,0,0,218,8,75,101,121,69,114,114,
+ 111,114,114,23,0,0,0,114,48,0,0,0,114,20,0,0,
+ 0,218,8,95,119,101,97,107,114,101,102,114,60,0,0,0,
+ 114,59,0,0,0,41,3,114,17,0,0,0,114,24,0,0,
+ 0,114,61,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,52,0,0,0,157,0,0,0,115,30,
+ 0,0,0,0,6,8,1,2,1,2,1,14,1,12,1,10,
+ 2,8,1,8,1,10,2,8,2,12,11,18,2,10,0,10,
+ 2,114,52,0,0,0,99,1,0,0,0,0,0,0,0,0,
+ 0,0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,
+ 52,0,0,0,116,0,124,0,131,1,125,1,122,12,124,1,
+ 160,1,161,0,1,0,87,0,110,18,4,0,116,2,121,38,
+ 1,0,1,0,1,0,89,0,110,10,48,0,124,1,160,3,
+ 161,0,1,0,100,1,83,0,41,2,122,189,65,99,113,117,
+ 105,114,101,115,32,116,104,101,110,32,114,101,108,101,97,115,
+ 101,115,32,116,104,101,32,109,111,100,117,108,101,32,108,111,
+ 99,107,32,102,111,114,32,97,32,103,105,118,101,110,32,109,
+ 111,100,117,108,101,32,110,97,109,101,46,10,10,32,32,32,
+ 32,84,104,105,115,32,105,115,32,117,115,101,100,32,116,111,
+ 32,101,110,115,117,114,101,32,97,32,109,111,100,117,108,101,
+ 32,105,115,32,99,111,109,112,108,101,116,101,108,121,32,105,
+ 110,105,116,105,97,108,105,122,101,100,44,32,105,110,32,116,
+ 104,101,10,32,32,32,32,101,118,101,110,116,32,105,116,32,
+ 105,115,32,98,101,105,110,103,32,105,109,112,111,114,116,101,
+ 100,32,98,121,32,97,110,111,116,104,101,114,32,116,104,114,
+ 101,97,100,46,10,32,32,32,32,78,41,4,114,52,0,0,
+ 0,114,38,0,0,0,114,19,0,0,0,114,39,0,0,0,
+ 41,2,114,17,0,0,0,114,24,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,218,19,95,108,111,
+ 99,107,95,117,110,108,111,99,107,95,109,111,100,117,108,101,
+ 194,0,0,0,115,12,0,0,0,0,6,8,1,2,1,12,
+ 1,12,3,6,2,114,64,0,0,0,99,1,0,0,0,0,
+ 0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,79,
+ 0,0,0,115,14,0,0,0,124,0,124,1,105,0,124,2,
+ 164,1,142,1,83,0,41,1,97,46,1,0,0,114,101,109,
+ 111,118,101,95,105,109,112,111,114,116,108,105,98,95,102,114,
+ 97,109,101,115,32,105,110,32,105,109,112,111,114,116,46,99,
+ 32,119,105,108,108,32,97,108,119,97,121,115,32,114,101,109,
+ 111,118,101,32,115,101,113,117,101,110,99,101,115,10,32,32,
+ 32,32,111,102,32,105,109,112,111,114,116,108,105,98,32,102,
+ 114,97,109,101,115,32,116,104,97,116,32,101,110,100,32,119,
+ 105,116,104,32,97,32,99,97,108,108,32,116,111,32,116,104,
+ 105,115,32,102,117,110,99,116,105,111,110,10,10,32,32,32,
+ 32,85,115,101,32,105,116,32,105,110,115,116,101,97,100,32,
+ 111,102,32,97,32,110,111,114,109,97,108,32,99,97,108,108,
+ 32,105,110,32,112,108,97,99,101,115,32,119,104,101,114,101,
+ 32,105,110,99,108,117,100,105,110,103,32,116,104,101,32,105,
+ 109,112,111,114,116,108,105,98,10,32,32,32,32,102,114,97,
+ 109,101,115,32,105,110,116,114,111,100,117,99,101,115,32,117,
+ 110,119,97,110,116,101,100,32,110,111,105,115,101,32,105,110,
+ 116,111,32,116,104,101,32,116,114,97,99,101,98,97,99,107,
+ 32,40,101,46,103,46,32,119,104,101,110,32,101,120,101,99,
+ 117,116,105,110,103,10,32,32,32,32,109,111,100,117,108,101,
+ 32,99,111,100,101,41,10,32,32,32,32,114,10,0,0,0,
+ 41,3,218,1,102,114,54,0,0,0,90,4,107,119,100,115,
+ 114,10,0,0,0,114,10,0,0,0,114,11,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,211,0,0,0,115,2,
+ 0,0,0,0,8,114,66,0,0,0,114,37,0,0,0,41,
+ 1,218,9,118,101,114,98,111,115,105,116,121,99,1,0,0,
+ 0,0,0,0,0,1,0,0,0,3,0,0,0,4,0,0,
+ 0,71,0,0,0,115,54,0,0,0,116,0,106,1,106,2,
+ 124,1,107,5,114,50,124,0,160,3,100,1,161,1,115,30,
+ 100,2,124,0,23,0,125,0,116,4,124,0,106,5,124,2,
+ 142,0,116,0,106,6,100,3,141,2,1,0,100,4,83,0,
+ 41,5,122,61,80,114,105,110,116,32,116,104,101,32,109,101,
+ 115,115,97,103,101,32,116,111,32,115,116,100,101,114,114,32,
+ 105,102,32,45,118,47,80,89,84,72,79,78,86,69,82,66,
+ 79,83,69,32,105,115,32,116,117,114,110,101,100,32,111,110,
+ 46,41,2,250,1,35,122,7,105,109,112,111,114,116,32,122,
+ 2,35,32,41,1,90,4,102,105,108,101,78,41,7,114,15,
+ 0,0,0,218,5,102,108,97,103,115,218,7,118,101,114,98,
+ 111,115,101,218,10,115,116,97,114,116,115,119,105,116,104,218,
+ 5,112,114,105,110,116,114,44,0,0,0,218,6,115,116,100,
+ 101,114,114,41,3,218,7,109,101,115,115,97,103,101,114,67,
+ 0,0,0,114,54,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,218,16,95,118,101,114,98,111,115,
+ 101,95,109,101,115,115,97,103,101,222,0,0,0,115,8,0,
+ 0,0,0,2,12,1,10,1,8,1,114,75,0,0,0,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
+ 3,0,0,0,3,0,0,0,115,26,0,0,0,135,0,102,
+ 1,100,1,100,2,132,8,125,1,116,0,124,1,136,0,131,
+ 2,1,0,124,1,83,0,41,3,122,49,68,101,99,111,114,
+ 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116,
+ 104,101,32,110,97,109,101,100,32,109,111,100,117,108,101,32,
+ 105,115,32,98,117,105,108,116,45,105,110,46,99,2,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
+ 0,19,0,0,0,115,38,0,0,0,124,1,116,0,106,1,
+ 118,1,114,28,116,2,100,1,160,3,124,1,161,1,124,1,
+ 100,2,141,2,130,1,136,0,124,0,124,1,131,2,83,0,
+ 41,3,78,250,29,123,33,114,125,32,105,115,32,110,111,116,
+ 32,97,32,98,117,105,108,116,45,105,110,32,109,111,100,117,
+ 108,101,114,16,0,0,0,41,4,114,15,0,0,0,218,20,
+ 98,117,105,108,116,105,110,95,109,111,100,117,108,101,95,110,
+ 97,109,101,115,218,11,73,109,112,111,114,116,69,114,114,111,
+ 114,114,44,0,0,0,169,2,114,30,0,0,0,218,8,102,
+ 117,108,108,110,97,109,101,169,1,218,3,102,120,110,114,10,
+ 0,0,0,114,11,0,0,0,218,25,95,114,101,113,117,105,
+ 114,101,115,95,98,117,105,108,116,105,110,95,119,114,97,112,
+ 112,101,114,232,0,0,0,115,10,0,0,0,0,1,10,1,
+ 10,1,2,255,6,2,122,52,95,114,101,113,117,105,114,101,
+ 115,95,98,117,105,108,116,105,110,46,60,108,111,99,97,108,
+ 115,62,46,95,114,101,113,117,105,114,101,115,95,98,117,105,
+ 108,116,105,110,95,119,114,97,112,112,101,114,169,1,114,12,
+ 0,0,0,41,2,114,82,0,0,0,114,83,0,0,0,114,
+ 10,0,0,0,114,81,0,0,0,114,11,0,0,0,218,17,
+ 95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,105,
+ 110,230,0,0,0,115,6,0,0,0,0,2,12,5,10,1,
+ 114,85,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,26,
+ 0,0,0,135,0,102,1,100,1,100,2,132,8,125,1,116,
+ 0,124,1,136,0,131,2,1,0,124,1,83,0,41,3,122,
+ 47,68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,
+ 114,105,102,121,32,116,104,101,32,110,97,109,101,100,32,109,
+ 111,100,117,108,101,32,105,115,32,102,114,111,122,101,110,46,
+ 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+ 0,4,0,0,0,19,0,0,0,115,38,0,0,0,116,0,
+ 160,1,124,1,161,1,115,28,116,2,100,1,160,3,124,1,
+ 161,1,124,1,100,2,141,2,130,1,136,0,124,0,124,1,
+ 131,2,83,0,169,3,78,122,27,123,33,114,125,32,105,115,
+ 32,110,111,116,32,97,32,102,114,111,122,101,110,32,109,111,
+ 100,117,108,101,114,16,0,0,0,41,4,114,56,0,0,0,
+ 218,9,105,115,95,102,114,111,122,101,110,114,78,0,0,0,
+ 114,44,0,0,0,114,79,0,0,0,114,81,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,218,24,95,114,101,113,117,
+ 105,114,101,115,95,102,114,111,122,101,110,95,119,114,97,112,
+ 112,101,114,243,0,0,0,115,10,0,0,0,0,1,10,1,
+ 10,1,2,255,6,2,122,50,95,114,101,113,117,105,114,101,
+ 115,95,102,114,111,122,101,110,46,60,108,111,99,97,108,115,
+ 62,46,95,114,101,113,117,105,114,101,115,95,102,114,111,122,
+ 101,110,95,119,114,97,112,112,101,114,114,84,0,0,0,41,
+ 2,114,82,0,0,0,114,88,0,0,0,114,10,0,0,0,
+ 114,81,0,0,0,114,11,0,0,0,218,16,95,114,101,113,
+ 117,105,114,101,115,95,102,114,111,122,101,110,241,0,0,0,
+ 115,6,0,0,0,0,2,12,5,10,1,114,89,0,0,0,
+ 99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
+ 0,3,0,0,0,67,0,0,0,115,62,0,0,0,116,0,
+ 124,1,124,0,131,2,125,2,124,1,116,1,106,2,118,0,
+ 114,50,116,1,106,2,124,1,25,0,125,3,116,3,124,2,
+ 124,3,131,2,1,0,116,1,106,2,124,1,25,0,83,0,
+ 116,4,124,2,131,1,83,0,100,1,83,0,41,2,122,128,
+ 76,111,97,100,32,116,104,101,32,115,112,101,99,105,102,105,
+ 101,100,32,109,111,100,117,108,101,32,105,110,116,111,32,115,
+ 121,115,46,109,111,100,117,108,101,115,32,97,110,100,32,114,
+ 101,116,117,114,110,32,105,116,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,46,32,32,85,115,101,32,108,
+ 111,97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,
+ 101,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,
+ 78,41,5,218,16,115,112,101,99,95,102,114,111,109,95,108,
+ 111,97,100,101,114,114,15,0,0,0,218,7,109,111,100,117,
+ 108,101,115,218,5,95,101,120,101,99,218,5,95,108,111,97,
+ 100,41,4,114,30,0,0,0,114,80,0,0,0,218,4,115,
+ 112,101,99,218,6,109,111,100,117,108,101,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,218,17,95,108,111,97,
+ 100,95,109,111,100,117,108,101,95,115,104,105,109,253,0,0,
+ 0,115,12,0,0,0,0,6,10,1,10,1,10,1,10,1,
+ 10,2,114,96,0,0,0,99,1,0,0,0,0,0,0,0,
+ 0,0,0,0,5,0,0,0,8,0,0,0,67,0,0,0,
+ 115,218,0,0,0,116,0,124,0,100,1,100,0,131,3,125,
+ 1,116,1,124,1,100,2,131,2,114,54,122,12,124,1,160,
+ 2,124,0,161,1,87,0,83,0,4,0,116,3,121,52,1,
+ 0,1,0,1,0,89,0,110,2,48,0,122,10,124,0,106,
+ 4,125,2,87,0,110,18,4,0,116,5,121,82,1,0,1,
+ 0,1,0,89,0,110,18,48,0,124,2,100,0,117,1,114,
+ 100,116,6,124,2,131,1,83,0,122,10,124,0,106,7,125,
+ 3,87,0,110,22,4,0,116,5,121,132,1,0,1,0,1,
+ 0,100,3,125,3,89,0,110,2,48,0,122,10,124,0,106,
+ 8,125,4,87,0,110,56,4,0,116,5,121,200,1,0,1,
+ 0,1,0,124,1,100,0,117,0,114,180,100,4,160,9,124,
+ 3,161,1,6,0,89,0,83,0,100,5,160,9,124,3,124,
+ 1,161,2,6,0,89,0,83,0,89,0,110,14,48,0,100,
+ 6,160,9,124,3,124,4,161,2,83,0,100,0,83,0,41,
+ 7,78,218,10,95,95,108,111,97,100,101,114,95,95,218,11,
+ 109,111,100,117,108,101,95,114,101,112,114,250,1,63,250,13,
+ 60,109,111,100,117,108,101,32,123,33,114,125,62,250,20,60,
+ 109,111,100,117,108,101,32,123,33,114,125,32,40,123,33,114,
+ 125,41,62,250,23,60,109,111,100,117,108,101,32,123,33,114,
+ 125,32,102,114,111,109,32,123,33,114,125,62,41,10,114,6,
+ 0,0,0,114,4,0,0,0,114,98,0,0,0,218,9,69,
+ 120,99,101,112,116,105,111,110,218,8,95,95,115,112,101,99,
+ 95,95,218,14,65,116,116,114,105,98,117,116,101,69,114,114,
+ 111,114,218,22,95,109,111,100,117,108,101,95,114,101,112,114,
+ 95,102,114,111,109,95,115,112,101,99,114,1,0,0,0,218,
+ 8,95,95,102,105,108,101,95,95,114,44,0,0,0,41,5,
+ 114,95,0,0,0,218,6,108,111,97,100,101,114,114,94,0,
+ 0,0,114,17,0,0,0,218,8,102,105,108,101,110,97,109,
+ 101,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
+ 218,12,95,109,111,100,117,108,101,95,114,101,112,114,13,1,
+ 0,0,115,46,0,0,0,0,2,12,1,10,4,2,1,12,
+ 1,12,1,6,1,2,1,10,1,12,1,6,2,8,1,8,
+ 4,2,1,10,1,12,1,10,1,2,1,10,1,12,1,8,
+ 1,14,2,22,2,114,110,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,114,0,0,0,101,0,90,1,100,0,90,2,
+ 100,1,90,3,100,2,100,2,100,2,100,3,156,3,100,4,
+ 100,5,132,2,90,4,100,6,100,7,132,0,90,5,100,8,
+ 100,9,132,0,90,6,101,7,100,10,100,11,132,0,131,1,
+ 90,8,101,8,106,9,100,12,100,11,132,0,131,1,90,8,
+ 101,7,100,13,100,14,132,0,131,1,90,10,101,7,100,15,
+ 100,16,132,0,131,1,90,11,101,11,106,9,100,17,100,16,
+ 132,0,131,1,90,11,100,2,83,0,41,18,218,10,77,111,
+ 100,117,108,101,83,112,101,99,97,208,5,0,0,84,104,101,
+ 32,115,112,101,99,105,102,105,99,97,116,105,111,110,32,102,
+ 111,114,32,97,32,109,111,100,117,108,101,44,32,117,115,101,
+ 100,32,102,111,114,32,108,111,97,100,105,110,103,46,10,10,
+ 32,32,32,32,65,32,109,111,100,117,108,101,39,115,32,115,
+ 112,101,99,32,105,115,32,116,104,101,32,115,111,117,114,99,
+ 101,32,102,111,114,32,105,110,102,111,114,109,97,116,105,111,
+ 110,32,97,98,111,117,116,32,116,104,101,32,109,111,100,117,
+ 108,101,46,32,32,70,111,114,10,32,32,32,32,100,97,116,
+ 97,32,97,115,115,111,99,105,97,116,101,100,32,119,105,116,
+ 104,32,116,104,101,32,109,111,100,117,108,101,44,32,105,110,
+ 99,108,117,100,105,110,103,32,115,111,117,114,99,101,44,32,
+ 117,115,101,32,116,104,101,32,115,112,101,99,39,115,10,32,
+ 32,32,32,108,111,97,100,101,114,46,10,10,32,32,32,32,
+ 96,110,97,109,101,96,32,105,115,32,116,104,101,32,97,98,
+ 115,111,108,117,116,101,32,110,97,109,101,32,111,102,32,116,
+ 104,101,32,109,111,100,117,108,101,46,32,32,96,108,111,97,
+ 100,101,114,96,32,105,115,32,116,104,101,32,108,111,97,100,
+ 101,114,10,32,32,32,32,116,111,32,117,115,101,32,119,104,
+ 101,110,32,108,111,97,100,105,110,103,32,116,104,101,32,109,
+ 111,100,117,108,101,46,32,32,96,112,97,114,101,110,116,96,
+ 32,105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,
+ 116,104,101,10,32,32,32,32,112,97,99,107,97,103,101,32,
+ 116,104,101,32,109,111,100,117,108,101,32,105,115,32,105,110,
+ 46,32,32,84,104,101,32,112,97,114,101,110,116,32,105,115,
+ 32,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,
+ 101,32,110,97,109,101,46,10,10,32,32,32,32,96,105,115,
+ 95,112,97,99,107,97,103,101,96,32,100,101,116,101,114,109,
+ 105,110,101,115,32,105,102,32,116,104,101,32,109,111,100,117,
+ 108,101,32,105,115,32,99,111,110,115,105,100,101,114,101,100,
+ 32,97,32,112,97,99,107,97,103,101,32,111,114,10,32,32,
+ 32,32,110,111,116,46,32,32,79,110,32,109,111,100,117,108,
+ 101,115,32,116,104,105,115,32,105,115,32,114,101,102,108,101,
+ 99,116,101,100,32,98,121,32,116,104,101,32,96,95,95,112,
+ 97,116,104,95,95,96,32,97,116,116,114,105,98,117,116,101,
+ 46,10,10,32,32,32,32,96,111,114,105,103,105,110,96,32,
+ 105,115,32,116,104,101,32,115,112,101,99,105,102,105,99,32,
+ 108,111,99,97,116,105,111,110,32,117,115,101,100,32,98,121,
+ 32,116,104,101,32,108,111,97,100,101,114,32,102,114,111,109,
+ 32,119,104,105,99,104,32,116,111,10,32,32,32,32,108,111,
+ 97,100,32,116,104,101,32,109,111,100,117,108,101,44,32,105,
+ 102,32,116,104,97,116,32,105,110,102,111,114,109,97,116,105,
+ 111,110,32,105,115,32,97,118,97,105,108,97,98,108,101,46,
+ 32,32,87,104,101,110,32,102,105,108,101,110,97,109,101,32,
+ 105,115,10,32,32,32,32,115,101,116,44,32,111,114,105,103,
+ 105,110,32,119,105,108,108,32,109,97,116,99,104,46,10,10,
+ 32,32,32,32,96,104,97,115,95,108,111,99,97,116,105,111,
+ 110,96,32,105,110,100,105,99,97,116,101,115,32,116,104,97,
+ 116,32,97,32,115,112,101,99,39,115,32,34,111,114,105,103,
+ 105,110,34,32,114,101,102,108,101,99,116,115,32,97,32,108,
+ 111,99,97,116,105,111,110,46,10,32,32,32,32,87,104,101,
+ 110,32,116,104,105,115,32,105,115,32,84,114,117,101,44,32,
+ 96,95,95,102,105,108,101,95,95,96,32,97,116,116,114,105,
+ 98,117,116,101,32,111,102,32,116,104,101,32,109,111,100,117,
+ 108,101,32,105,115,32,115,101,116,46,10,10,32,32,32,32,
+ 96,99,97,99,104,101,100,96,32,105,115,32,116,104,101,32,
+ 108,111,99,97,116,105,111,110,32,111,102,32,116,104,101,32,
+ 99,97,99,104,101,100,32,98,121,116,101,99,111,100,101,32,
+ 102,105,108,101,44,32,105,102,32,97,110,121,46,32,32,73,
+ 116,10,32,32,32,32,99,111,114,114,101,115,112,111,110,100,
+ 115,32,116,111,32,116,104,101,32,96,95,95,99,97,99,104,
+ 101,100,95,95,96,32,97,116,116,114,105,98,117,116,101,46,
+ 10,10,32,32,32,32,96,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,96,32,105,115,32,116,104,101,32,115,101,113,117,101,110,
+ 99,101,32,111,102,32,112,97,116,104,32,101,110,116,114,105,
+ 101,115,32,116,111,10,32,32,32,32,115,101,97,114,99,104,
+ 32,119,104,101,110,32,105,109,112,111,114,116,105,110,103,32,
+ 115,117,98,109,111,100,117,108,101,115,46,32,32,73,102,32,
+ 115,101,116,44,32,105,115,95,112,97,99,107,97,103,101,32,
+ 115,104,111,117,108,100,32,98,101,10,32,32,32,32,84,114,
+ 117,101,45,45,97,110,100,32,70,97,108,115,101,32,111,116,
+ 104,101,114,119,105,115,101,46,10,10,32,32,32,32,80,97,
+ 99,107,97,103,101,115,32,97,114,101,32,115,105,109,112,108,
+ 121,32,109,111,100,117,108,101,115,32,116,104,97,116,32,40,
+ 109,97,121,41,32,104,97,118,101,32,115,117,98,109,111,100,
+ 117,108,101,115,46,32,32,73,102,32,97,32,115,112,101,99,
+ 10,32,32,32,32,104,97,115,32,97,32,110,111,110,45,78,
+ 111,110,101,32,118,97,108,117,101,32,105,110,32,96,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,96,44,32,116,104,101,32,105,
+ 109,112,111,114,116,10,32,32,32,32,115,121,115,116,101,109,
+ 32,119,105,108,108,32,99,111,110,115,105,100,101,114,32,109,
+ 111,100,117,108,101,115,32,108,111,97,100,101,100,32,102,114,
+ 111,109,32,116,104,101,32,115,112,101,99,32,97,115,32,112,
+ 97,99,107,97,103,101,115,46,10,10,32,32,32,32,79,110,
+ 108,121,32,102,105,110,100,101,114,115,32,40,115,101,101,32,
+ 105,109,112,111,114,116,108,105,98,46,97,98,99,46,77,101,
+ 116,97,80,97,116,104,70,105,110,100,101,114,32,97,110,100,
+ 10,32,32,32,32,105,109,112,111,114,116,108,105,98,46,97,
+ 98,99,46,80,97,116,104,69,110,116,114,121,70,105,110,100,
+ 101,114,41,32,115,104,111,117,108,100,32,109,111,100,105,102,
+ 121,32,77,111,100,117,108,101,83,112,101,99,32,105,110,115,
+ 116,97,110,99,101,115,46,10,10,32,32,32,32,78,41,3,
+ 218,6,111,114,105,103,105,110,218,12,108,111,97,100,101,114,
+ 95,115,116,97,116,101,218,10,105,115,95,112,97,99,107,97,
+ 103,101,99,3,0,0,0,0,0,0,0,3,0,0,0,6,
+ 0,0,0,2,0,0,0,67,0,0,0,115,54,0,0,0,
+ 124,1,124,0,95,0,124,2,124,0,95,1,124,3,124,0,
+ 95,2,124,4,124,0,95,3,124,5,114,32,103,0,110,2,
+ 100,0,124,0,95,4,100,1,124,0,95,5,100,0,124,0,
+ 95,6,100,0,83,0,41,2,78,70,41,7,114,17,0,0,
+ 0,114,108,0,0,0,114,112,0,0,0,114,113,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,218,13,95,115,
+ 101,116,95,102,105,108,101,97,116,116,114,218,7,95,99,97,
+ 99,104,101,100,41,6,114,30,0,0,0,114,17,0,0,0,
+ 114,108,0,0,0,114,112,0,0,0,114,113,0,0,0,114,
+ 114,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,114,31,0,0,0,86,1,0,0,115,14,0,0,
+ 0,0,2,6,1,6,1,6,1,6,1,14,3,6,1,122,
+ 19,77,111,100,117,108,101,83,112,101,99,46,95,95,105,110,
+ 105,116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,2,0,0,0,6,0,0,0,67,0,0,0,115,102,0,
+ 0,0,100,1,160,0,124,0,106,1,161,1,100,2,160,0,
+ 124,0,106,2,161,1,103,2,125,1,124,0,106,3,100,0,
+ 117,1,114,52,124,1,160,4,100,3,160,0,124,0,106,3,
+ 161,1,161,1,1,0,124,0,106,5,100,0,117,1,114,80,
+ 124,1,160,4,100,4,160,0,124,0,106,5,161,1,161,1,
+ 1,0,100,5,160,0,124,0,106,6,106,7,100,6,160,8,
+ 124,1,161,1,161,2,83,0,41,7,78,122,9,110,97,109,
+ 101,61,123,33,114,125,122,11,108,111,97,100,101,114,61,123,
+ 33,114,125,122,11,111,114,105,103,105,110,61,123,33,114,125,
+ 122,29,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,61,123,125,122,
+ 6,123,125,40,123,125,41,122,2,44,32,41,9,114,44,0,
+ 0,0,114,17,0,0,0,114,108,0,0,0,114,112,0,0,
+ 0,218,6,97,112,112,101,110,100,114,115,0,0,0,218,9,
+ 95,95,99,108,97,115,115,95,95,114,1,0,0,0,218,4,
+ 106,111,105,110,41,2,114,30,0,0,0,114,54,0,0,0,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+ 47,0,0,0,98,1,0,0,115,20,0,0,0,0,1,10,
+ 1,10,255,4,2,10,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,
+ 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,4,0,116,6,121,100,1,0,1,0,1,0,
+ 116,7,6,0,89,0,83,0,48,0,100,0,83,0,114,13,
+ 0,0,0,41,8,114,115,0,0,0,114,17,0,0,0,114,
+ 108,0,0,0,114,112,0,0,0,218,6,99,97,99,104,101,
+ 100,218,12,104,97,115,95,108,111,99,97,116,105,111,110,114,
+ 105,0,0,0,218,14,78,111,116,73,109,112,108,101,109,101,
+ 110,116,101,100,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,12,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,117,0,114,
+ 52,124,0,106,1,100,0,117,1,114,52,124,0,106,2,114,
+ 52,116,3,100,0,117,0,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,117,0,0,0,114,112,0,
+ 0,0,114,116,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,46,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
+ 0,0,114,121,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,117,
+ 0,0,0,41,2,114,30,0,0,0,114,121,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,121,
+ 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,117,0,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,
+ 115,0,0,0,114,17,0,0,0,218,10,114,112,97,114,116,
+ 105,116,105,111,110,114,46,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,116,
+ 0,0,0,114,46,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,122,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,116,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,122,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,47,0,0,0,114,124,0,0,0,
+ 218,8,112,114,111,112,101,114,116,121,114,121,0,0,0,218,
+ 6,115,101,116,116,101,114,114,129,0,0,0,114,122,0,0,
+ 0,114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,111,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,111,0,0,0,169,2,114,112,0,0,0,114,
+ 114,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,152,0,
+ 0,0,116,0,124,1,100,1,131,2,114,74,116,1,100,2,
+ 117,0,114,22,116,2,130,1,116,1,106,3,125,4,124,3,
+ 100,2,117,0,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,
+ 117,0,114,136,116,0,124,1,100,5,131,2,114,132,122,14,
+ 124,1,160,4,124,0,161,1,125,3,87,0,113,136,4,0,
+ 116,5,121,128,1,0,1,0,1,0,100,2,125,3,89,0,
+ 113,136,48,0,110,4,100,6,125,3,116,6,124,0,124,1,
+ 124,2,124,3,100,7,141,4,83,0,41,8,122,53,82,101,
+ 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112,
+ 101,99,32,98,97,115,101,100,32,111,110,32,118,97,114,105,
+ 111,117,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,108,0,0,0,41,2,114,108,0,0,0,
+ 114,115,0,0,0,114,114,0,0,0,70,114,134,0,0,0,
+ 41,7,114,4,0,0,0,114,125,0,0,0,114,126,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,114,0,0,0,114,
+ 78,0,0,0,114,111,0,0,0,41,6,114,17,0,0,0,
+ 114,108,0,0,0,114,112,0,0,0,114,114,0,0,0,114,
+ 135,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,90,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,12,1,12,3,4,2,114,90,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,42,1,0,0,
+ 122,10,124,0,106,0,125,3,87,0,110,18,4,0,116,1,
+ 121,28,1,0,1,0,1,0,89,0,110,14,48,0,124,3,
+ 100,0,117,1,114,42,124,3,83,0,124,0,106,2,125,4,
+ 124,1,100,0,117,0,114,86,122,10,124,0,106,3,125,1,
+ 87,0,110,18,4,0,116,1,121,84,1,0,1,0,1,0,
+ 89,0,110,2,48,0,122,10,124,0,106,4,125,5,87,0,
+ 110,22,4,0,116,1,121,118,1,0,1,0,1,0,100,0,
+ 125,5,89,0,110,2,48,0,124,2,100,0,117,0,114,176,
+ 124,5,100,0,117,0,114,172,122,10,124,1,106,5,125,2,
+ 87,0,113,176,4,0,116,1,121,168,1,0,1,0,1,0,
+ 100,0,125,2,89,0,113,176,48,0,110,4,124,5,125,2,
+ 122,10,124,0,106,6,125,6,87,0,110,22,4,0,116,1,
+ 121,208,1,0,1,0,1,0,100,0,125,6,89,0,110,2,
+ 48,0,122,14,116,7,124,0,106,8,131,1,125,7,87,0,
+ 110,22,4,0,116,1,121,246,1,0,1,0,1,0,100,0,
+ 125,7,89,0,110,2,48,0,116,9,124,4,124,1,124,2,
+ 100,1,141,3,125,3,124,5,100,0,117,0,144,1,114,20,
+ 100,2,110,2,100,3,124,3,95,10,124,6,124,3,95,11,
+ 124,7,124,3,95,12,124,3,83,0,41,4,78,169,1,114,
+ 112,0,0,0,70,84,41,13,114,104,0,0,0,114,105,0,
+ 0,0,114,1,0,0,0,114,97,0,0,0,114,107,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,111,0,0,0,114,116,0,0,0,
+ 114,121,0,0,0,114,115,0,0,0,41,8,114,95,0,0,
+ 0,114,108,0,0,0,114,112,0,0,0,114,94,0,0,0,
+ 114,17,0,0,0,90,8,108,111,99,97,116,105,111,110,114,
+ 121,0,0,0,114,115,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,12,1,6,2,8,1,
+ 4,2,6,1,8,1,2,1,10,1,12,2,6,1,2,1,
+ 10,1,12,1,10,1,8,1,8,1,2,1,10,1,12,1,
+ 12,2,4,1,2,1,10,1,12,1,10,1,2,1,14,1,
+ 12,1,10,2,14,1,20,1,6,1,6,1,114,141,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,210,1,0,0,124,2,115,20,
+ 116,0,124,1,100,1,100,0,131,3,100,0,117,0,114,52,
+ 122,12,124,0,106,1,124,1,95,2,87,0,110,18,4,0,
+ 116,3,121,50,1,0,1,0,1,0,89,0,110,2,48,0,
+ 124,2,115,72,116,0,124,1,100,2,100,0,131,3,100,0,
+ 117,0,114,174,124,0,106,4,125,3,124,3,100,0,117,0,
+ 114,144,124,0,106,5,100,0,117,1,114,144,116,6,100,0,
+ 117,0,114,108,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,18,4,0,116,3,121,172,1,0,
+ 1,0,1,0,89,0,110,2,48,0,124,2,115,194,116,0,
+ 124,1,100,3,100,0,131,3,100,0,117,0,114,226,122,12,
+ 124,0,106,13,124,1,95,14,87,0,110,18,4,0,116,3,
+ 121,224,1,0,1,0,1,0,89,0,110,2,48,0,122,10,
+ 124,0,124,1,95,15,87,0,110,18,4,0,116,3,121,254,
+ 1,0,1,0,1,0,89,0,110,2,48,0,124,2,144,1,
+ 115,24,116,0,124,1,100,4,100,0,131,3,100,0,117,0,
+ 144,1,114,70,124,0,106,5,100,0,117,1,144,1,114,70,
+ 122,12,124,0,106,5,124,1,95,16,87,0,110,20,4,0,
+ 116,3,144,1,121,68,1,0,1,0,1,0,89,0,110,2,
+ 48,0,124,0,106,17,144,1,114,206,124,2,144,1,115,102,
+ 116,0,124,1,100,5,100,0,131,3,100,0,117,0,144,1,
+ 114,136,122,12,124,0,106,18,124,1,95,11,87,0,110,20,
+ 4,0,116,3,144,1,121,134,1,0,1,0,1,0,89,0,
+ 110,2,48,0,124,2,144,1,115,160,116,0,124,1,100,6,
+ 100,0,131,3,100,0,117,0,144,1,114,206,124,0,106,19,
+ 100,0,117,1,144,1,114,206,122,12,124,0,106,19,124,1,
+ 95,20,87,0,110,20,4,0,116,3,144,1,121,204,1,0,
+ 1,0,1,0,89,0,110,2,48,0,124,1,83,0,41,7,
+ 78,114,1,0,0,0,114,97,0,0,0,218,11,95,95,112,
+ 97,99,107,97,103,101,95,95,114,140,0,0,0,114,107,0,
+ 0,0,114,138,0,0,0,41,21,114,6,0,0,0,114,17,
+ 0,0,0,114,1,0,0,0,114,105,0,0,0,114,108,0,
+ 0,0,114,115,0,0,0,114,125,0,0,0,114,126,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,107,0,0,0,114,97,0,0,0,114,129,0,
+ 0,0,114,144,0,0,0,114,104,0,0,0,114,140,0,0,
+ 0,114,122,0,0,0,114,112,0,0,0,114,121,0,0,0,
+ 114,138,0,0,0,41,5,114,94,0,0,0,114,95,0,0,
+ 0,114,143,0,0,0,114,108,0,0,0,114,145,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,12,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,12,1,6,2,20,1,2,1,12,1,12,1,6,2,
+ 2,1,10,1,12,1,6,2,24,1,12,1,2,1,12,1,
+ 14,1,6,2,8,1,24,1,2,1,12,1,14,1,6,2,
+ 24,1,12,1,2,1,12,1,14,1,6,1,114,147,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,117,0,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,108,0,0,0,114,148,0,
+ 0,0,114,78,0,0,0,114,18,0,0,0,114,17,0,0,
+ 0,114,147,0,0,0,169,2,114,94,0,0,0,114,95,0,
+ 0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
+ 0,218,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,151,
+ 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,117,0,114,14,100,2,110,4,124,
+ 0,106,0,125,1,124,0,106,1,100,1,117,0,114,66,124,
+ 0,106,2,100,1,117,0,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,99,0,0,0,114,100,0,0,0,
+ 114,101,0,0,0,114,102,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,112,0,0,0,114,108,0,0,0,114,
+ 44,0,0,0,114,122,0,0,0,41,2,114,94,0,0,0,
+ 114,17,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 11,0,0,0,114,106,0,0,0,54,2,0,0,115,16,0,
+ 0,0,0,3,20,1,10,1,10,1,10,2,16,2,6,1,
+ 14,2,114,106,0,0,0,99,2,0,0,0,0,0,0,0,
+ 0,0,0,0,4,0,0,0,10,0,0,0,67,0,0,0,
+ 115,250,0,0,0,124,0,106,0,125,2,116,1,124,2,131,
+ 1,143,216,1,0,116,2,106,3,160,4,124,2,161,1,124,
+ 1,117,1,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,132,124,0,106,
+ 7,100,3,117,0,114,106,124,0,106,8,100,3,117,0,114,
+ 90,116,6,100,4,124,0,106,0,100,2,141,2,130,1,116,
+ 9,124,0,124,1,100,5,100,6,141,3,1,0,110,52,116,
+ 9,124,0,124,1,100,5,100,6,141,3,1,0,116,10,124,
+ 0,106,7,100,7,131,2,115,146,124,0,106,7,160,11,124,
+ 2,161,1,1,0,110,12,124,0,106,7,160,12,124,1,161,
+ 1,1,0,87,0,116,2,106,3,160,13,124,0,106,0,161,
+ 1,125,1,124,1,116,2,106,3,124,0,106,0,60,0,110,
+ 28,116,2,106,3,160,13,124,0,106,0,161,1,125,1,124,
+ 1,116,2,106,3,124,0,106,0,60,0,48,0,87,0,100,
+ 3,4,0,4,0,131,3,1,0,110,16,49,0,115,236,48,
+ 0,1,0,1,0,1,0,89,0,1,0,124,1,83,0,41,
+ 8,122,70,69,120,101,99,117,116,101,32,116,104,101,32,115,
+ 112,101,99,39,115,32,115,112,101,99,105,102,105,101,100,32,
+ 109,111,100,117,108,101,32,105,110,32,97,110,32,101,120,105,
+ 115,116,105,110,103,32,109,111,100,117,108,101,39,115,32,110,
+ 97,109,101,115,112,97,99,101,46,122,30,109,111,100,117,108,
+ 101,32,123,33,114,125,32,110,111,116,32,105,110,32,115,121,
+ 115,46,109,111,100,117,108,101,115,114,16,0,0,0,78,250,
+ 14,109,105,115,115,105,110,103,32,108,111,97,100,101,114,84,
+ 114,142,0,0,0,114,149,0,0,0,41,14,114,17,0,0,
+ 0,114,49,0,0,0,114,15,0,0,0,114,91,0,0,0,
+ 114,34,0,0,0,114,44,0,0,0,114,78,0,0,0,114,
+ 108,0,0,0,114,115,0,0,0,114,147,0,0,0,114,4,
+ 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101,
+ 114,149,0,0,0,218,3,112,111,112,41,4,114,94,0,0,
+ 0,114,95,0,0,0,114,17,0,0,0,218,3,109,115,103,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+ 92,0,0,0,71,2,0,0,115,38,0,0,0,0,2,6,
+ 1,10,1,16,1,10,1,12,1,2,1,10,1,10,1,14,
+ 2,16,2,14,1,12,4,14,2,14,4,14,1,14,255,14,
+ 1,44,1,114,92,0,0,0,99,1,0,0,0,0,0,0,
+ 0,0,0,0,0,2,0,0,0,8,0,0,0,67,0,0,
+ 0,115,20,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,118,0,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,48,0,116,3,
+ 106,4,160,5,124,0,106,2,161,1,125,1,124,1,116,3,
+ 106,4,124,0,106,2,60,0,116,6,124,1,100,1,100,0,
+ 131,3,100,0,117,0,114,146,122,12,124,0,106,0,124,1,
+ 95,7,87,0,110,18,4,0,116,8,121,144,1,0,1,0,
+ 1,0,89,0,110,2,48,0,116,6,124,1,100,2,100,0,
+ 131,3,100,0,117,0,114,222,122,40,124,1,106,9,124,1,
+ 95,10,116,11,124,1,100,3,131,2,115,200,124,0,106,2,
+ 160,12,100,4,161,1,100,5,25,0,124,1,95,10,87,0,
+ 110,18,4,0,116,8,121,220,1,0,1,0,1,0,89,0,
+ 110,2,48,0,116,6,124,1,100,6,100,0,131,3,100,0,
+ 117,0,144,1,114,16,122,10,124,0,124,1,95,13,87,0,
+ 110,20,4,0,116,8,144,1,121,14,1,0,1,0,1,0,
+ 89,0,110,2,48,0,124,1,83,0,41,7,78,114,97,0,
+ 0,0,114,144,0,0,0,114,140,0,0,0,114,127,0,0,
+ 0,114,22,0,0,0,114,104,0,0,0,41,14,114,108,0,
+ 0,0,114,154,0,0,0,114,17,0,0,0,114,15,0,0,
+ 0,114,91,0,0,0,114,155,0,0,0,114,6,0,0,0,
+ 114,97,0,0,0,114,105,0,0,0,114,1,0,0,0,114,
+ 144,0,0,0,114,4,0,0,0,114,128,0,0,0,114,104,
+ 0,0,0,114,150,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,218,25,95,108,111,97,100,95,98,
+ 97,99,107,119,97,114,100,95,99,111,109,112,97,116,105,98,
+ 108,101,101,2,0,0,115,54,0,0,0,0,4,2,1,18,
+ 1,6,1,12,1,14,1,12,1,8,3,14,1,12,1,16,
+ 1,2,1,12,1,12,1,6,1,16,1,2,4,8,1,10,
+ 1,22,1,12,1,6,1,18,1,2,1,10,1,14,1,6,
+ 1,114,157,0,0,0,99,1,0,0,0,0,0,0,0,0,
+ 0,0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,
+ 224,0,0,0,124,0,106,0,100,0,117,1,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,166,124,1,116,5,106,6,124,0,106,7,60,0,122,52,
+ 124,0,106,0,100,0,117,0,114,96,124,0,106,8,100,0,
+ 117,0,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,48,1,0,1,0,1,0,122,14,116,5,106,6,
+ 124,0,106,7,61,0,87,0,110,18,4,0,116,11,121,150,
+ 1,0,1,0,1,0,89,0,110,2,48,0,130,0,89,0,
+ 110,2,48,0,116,5,106,6,160,12,124,0,106,7,161,1,
+ 125,1,124,1,116,5,106,6,124,0,106,7,60,0,116,13,
+ 100,5,124,0,106,7,124,0,106,0,131,3,1,0,87,0,
+ 100,6,124,0,95,4,110,8,100,6,124,0,95,4,48,0,
+ 124,1,83,0,41,7,78,114,149,0,0,0,84,114,153,0,
+ 0,0,114,16,0,0,0,122,18,105,109,112,111,114,116,32,
+ 123,33,114,125,32,35,32,123,33,114,125,70,41,14,114,108,
+ 0,0,0,114,4,0,0,0,114,157,0,0,0,114,151,0,
+ 0,0,90,13,95,105,110,105,116,105,97,108,105,122,105,110,
+ 103,114,15,0,0,0,114,91,0,0,0,114,17,0,0,0,
+ 114,115,0,0,0,114,78,0,0,0,114,149,0,0,0,114,
+ 62,0,0,0,114,155,0,0,0,114,75,0,0,0,114,150,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
+ 0,0,218,14,95,108,111,97,100,95,117,110,108,111,99,107,
+ 101,100,138,2,0,0,115,48,0,0,0,0,2,10,2,12,
+ 1,8,2,8,5,6,1,2,1,12,1,2,1,10,1,10,
+ 1,16,3,16,1,6,1,2,1,14,1,12,1,6,1,8,
+ 5,14,1,12,1,18,2,8,0,8,2,114,158,0,0,0,
+ 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
+ 0,8,0,0,0,67,0,0,0,115,54,0,0,0,116,0,
+ 124,0,106,1,131,1,143,24,1,0,116,2,124,0,131,1,
+ 87,0,2,0,100,1,4,0,4,0,131,3,1,0,83,0,
+ 49,0,115,40,48,0,1,0,1,0,1,0,89,0,1,0,
+ 100,1,83,0,41,2,122,191,82,101,116,117,114,110,32,97,
+ 32,110,101,119,32,109,111,100,117,108,101,32,111,98,106,101,
+ 99,116,44,32,108,111,97,100,101,100,32,98,121,32,116,104,
+ 101,32,115,112,101,99,39,115,32,108,111,97,100,101,114,46,
+ 10,10,32,32,32,32,84,104,101,32,109,111,100,117,108,101,
+ 32,105,115,32,110,111,116,32,97,100,100,101,100,32,116,111,
+ 32,105,116,115,32,112,97,114,101,110,116,46,10,10,32,32,
+ 32,32,73,102,32,97,32,109,111,100,117,108,101,32,105,115,
+ 32,97,108,114,101,97,100,121,32,105,110,32,115,121,115,46,
+ 109,111,100,117,108,101,115,44,32,116,104,97,116,32,101,120,
+ 105,115,116,105,110,103,32,109,111,100,117,108,101,32,103,101,
+ 116,115,10,32,32,32,32,99,108,111,98,98,101,114,101,100,
+ 46,10,10,32,32,32,32,78,41,3,114,49,0,0,0,114,
+ 17,0,0,0,114,158,0,0,0,41,1,114,94,0,0,0,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
+ 93,0,0,0,180,2,0,0,115,4,0,0,0,0,9,12,
+ 1,114,93,0,0,0,99,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,
+ 140,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,
+ 100,2,90,4,101,5,100,3,100,4,132,0,131,1,90,6,
+ 101,7,100,20,100,6,100,7,132,1,131,1,90,8,101,7,
+ 100,21,100,8,100,9,132,1,131,1,90,9,101,7,100,10,
+ 100,11,132,0,131,1,90,10,101,7,100,12,100,13,132,0,
+ 131,1,90,11,101,7,101,12,100,14,100,15,132,0,131,1,
+ 131,1,90,13,101,7,101,12,100,16,100,17,132,0,131,1,
+ 131,1,90,14,101,7,101,12,100,18,100,19,132,0,131,1,
+ 131,1,90,15,101,7,101,16,131,1,90,17,100,5,83,0,
+ 41,22,218,15,66,117,105,108,116,105,110,73,109,112,111,114,
+ 116,101,114,122,144,77,101,116,97,32,112,97,116,104,32,105,
+ 109,112,111,114,116,32,102,111,114,32,98,117,105,108,116,45,
+ 105,110,32,109,111,100,117,108,101,115,46,10,10,32,32,32,
32,65,108,108,32,109,101,116,104,111,100,115,32,97,114,101,
32,101,105,116,104,101,114,32,99,108,97,115,115,32,111,114,
32,115,116,97,116,105,99,32,109,101,116,104,111,100,115,32,
116,111,32,97,118,111,105,100,32,116,104,101,32,110,101,101,
100,32,116,111,10,32,32,32,32,105,110,115,116,97,110,116,
105,97,116,101,32,116,104,101,32,99,108,97,115,115,46,10,
- 10,32,32,32,32,90,6,102,114,111,122,101,110,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,1,0,0,0,4,0,
- 0,0,67,0,0,0,115,16,0,0,0,100,1,160,0,124,
- 0,106,1,116,2,106,3,161,2,83,0,41,2,114,160,0,
- 0,0,114,152,0,0,0,41,4,114,44,0,0,0,114,1,
- 0,0,0,114,173,0,0,0,114,137,0,0,0,41,1,218,
- 1,109,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
- 0,114,98,0,0,0,25,3,0,0,115,2,0,0,0,0,
- 7,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,
- 114,46,109,111,100,117,108,101,95,114,101,112,114,78,99,4,
- 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,5,
- 0,0,0,67,0,0,0,115,34,0,0,0,116,0,160,1,
- 124,1,161,1,114,26,116,2,124,1,124,0,124,0,106,3,
- 100,1,141,3,83,0,100,0,83,0,100,0,83,0,114,161,
- 0,0,0,41,4,114,56,0,0,0,114,87,0,0,0,114,
- 90,0,0,0,114,137,0,0,0,114,162,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,166,0,
- 0,0,34,3,0,0,115,6,0,0,0,0,2,10,1,16,
- 2,122,24,70,114,111,122,101,110,73,109,112,111,114,116,101,
- 114,46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,
- 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
- 67,0,0,0,115,18,0,0,0,116,0,160,1,124,1,161,
- 1,114,14,124,0,83,0,100,1,83,0,41,2,122,93,70,
- 105,110,100,32,97,32,102,114,111,122,101,110,32,109,111,100,
- 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,
- 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,
- 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105,
- 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97,
- 100,46,10,10,32,32,32,32,32,32,32,32,78,41,2,114,
- 56,0,0,0,114,87,0,0,0,41,3,114,163,0,0,0,
- 114,80,0,0,0,114,164,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,167,0,0,0,41,3,
- 0,0,115,2,0,0,0,0,7,122,26,70,114,111,122,101,
- 110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,109,
+ 10,32,32,32,32,122,8,98,117,105,108,116,45,105,110,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
+ 5,0,0,0,67,0,0,0,115,22,0,0,0,100,1,124,
+ 0,106,0,155,2,100,2,116,1,106,2,155,0,100,3,157,
+ 5,83,0,41,4,250,115,82,101,116,117,114,110,32,114,101,
+ 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,
+ 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,
+ 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,
+ 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114,
+ 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115,
+ 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46,
+ 10,10,32,32,32,32,32,32,32,32,122,8,60,109,111,100,
+ 117,108,101,32,122,2,32,40,122,2,41,62,41,3,114,1,
+ 0,0,0,114,159,0,0,0,114,137,0,0,0,41,1,114,
+ 95,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,114,98,0,0,0,206,2,0,0,115,2,0,0,
+ 0,0,7,122,27,66,117,105,108,116,105,110,73,109,112,111,
+ 114,116,101,114,46,109,111,100,117,108,101,95,114,101,112,114,
+ 78,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,
+ 0,0,5,0,0,0,67,0,0,0,115,46,0,0,0,124,
+ 2,100,0,117,1,114,12,100,0,83,0,116,0,160,1,124,
+ 1,161,1,114,38,116,2,124,1,124,0,124,0,106,3,100,
+ 1,141,3,83,0,100,0,83,0,100,0,83,0,169,2,78,
+ 114,136,0,0,0,41,4,114,56,0,0,0,90,10,105,115,
+ 95,98,117,105,108,116,105,110,114,90,0,0,0,114,137,0,
+ 0,0,169,4,218,3,99,108,115,114,80,0,0,0,218,4,
+ 112,97,116,104,218,6,116,97,114,103,101,116,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,218,9,102,105,110,
+ 100,95,115,112,101,99,215,2,0,0,115,10,0,0,0,0,
+ 2,8,1,4,1,10,1,16,2,122,25,66,117,105,108,116,
+ 105,110,73,109,112,111,114,116,101,114,46,102,105,110,100,95,
+ 115,112,101,99,99,3,0,0,0,0,0,0,0,0,0,0,
+ 0,4,0,0,0,4,0,0,0,67,0,0,0,115,30,0,
+ 0,0,124,0,160,0,124,1,124,2,161,2,125,3,124,3,
+ 100,1,117,1,114,26,124,3,106,1,83,0,100,1,83,0,
+ 41,2,122,175,70,105,110,100,32,116,104,101,32,98,117,105,
+ 108,116,45,105,110,32,109,111,100,117,108,101,46,10,10,32,
+ 32,32,32,32,32,32,32,73,102,32,39,112,97,116,104,39,
+ 32,105,115,32,101,118,101,114,32,115,112,101,99,105,102,105,
+ 101,100,32,116,104,101,110,32,116,104,101,32,115,101,97,114,
+ 99,104,32,105,115,32,99,111,110,115,105,100,101,114,101,100,
+ 32,97,32,102,97,105,108,117,114,101,46,10,10,32,32,32,
+ 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,
+ 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,
+ 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41,
+ 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,
+ 32,32,32,78,41,2,114,166,0,0,0,114,108,0,0,0,
+ 41,4,114,163,0,0,0,114,80,0,0,0,114,164,0,0,
+ 0,114,94,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,218,11,102,105,110,100,95,109,111,100,117,
+ 108,101,224,2,0,0,115,4,0,0,0,0,9,12,1,122,
+ 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,
+ 46,102,105,110,100,95,109,111,100,117,108,101,99,2,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
+ 0,67,0,0,0,115,46,0,0,0,124,1,106,0,116,1,
+ 106,2,118,1,114,34,116,3,100,1,160,4,124,1,106,0,
+ 161,1,124,1,106,0,100,2,141,2,130,1,116,5,116,6,
+ 106,7,124,1,131,2,83,0,41,3,122,24,67,114,101,97,
+ 116,101,32,97,32,98,117,105,108,116,45,105,110,32,109,111,
+ 100,117,108,101,114,76,0,0,0,114,16,0,0,0,41,8,
+ 114,17,0,0,0,114,15,0,0,0,114,77,0,0,0,114,
+ 78,0,0,0,114,44,0,0,0,114,66,0,0,0,114,56,
+ 0,0,0,90,14,99,114,101,97,116,101,95,98,117,105,108,
+ 116,105,110,41,2,114,30,0,0,0,114,94,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,148,
+ 0,0,0,236,2,0,0,115,10,0,0,0,0,3,12,1,
+ 12,1,4,255,6,2,122,29,66,117,105,108,116,105,110,73,
+ 109,112,111,114,116,101,114,46,99,114,101,97,116,101,95,109,
111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,
- 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,
- 0,0,0,100,1,83,0,41,2,122,42,85,115,101,32,100,
- 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115,
- 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97,
- 116,105,111,110,46,78,114,10,0,0,0,41,2,114,163,0,
- 0,0,114,94,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,114,148,0,0,0,50,3,0,0,115,
- 2,0,0,0,0,2,122,28,70,114,111,122,101,110,73,109,
- 112,111,114,116,101,114,46,99,114,101,97,116,101,95,109,111,
- 100,117,108,101,99,1,0,0,0,0,0,0,0,0,0,0,
- 0,3,0,0,0,4,0,0,0,67,0,0,0,115,64,0,
- 0,0,124,0,106,0,106,1,125,1,116,2,160,3,124,1,
- 161,1,115,36,116,4,100,1,160,5,124,1,161,1,124,1,
- 100,2,141,2,130,1,116,6,116,2,106,7,124,1,131,2,
- 125,2,116,8,124,2,124,0,106,9,131,2,1,0,100,0,
- 83,0,114,86,0,0,0,41,10,114,104,0,0,0,114,17,
- 0,0,0,114,56,0,0,0,114,87,0,0,0,114,78,0,
- 0,0,114,44,0,0,0,114,66,0,0,0,218,17,103,101,
- 116,95,102,114,111,122,101,110,95,111,98,106,101,99,116,218,
- 4,101,120,101,99,114,7,0,0,0,41,3,114,95,0,0,
- 0,114,17,0,0,0,218,4,99,111,100,101,114,10,0,0,
- 0,114,10,0,0,0,114,11,0,0,0,114,149,0,0,0,
- 54,3,0,0,115,14,0,0,0,0,2,8,1,10,1,10,
- 1,2,255,6,2,12,1,122,26,70,114,111,122,101,110,73,
- 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100,
- 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,
- 2,0,0,0,3,0,0,0,67,0,0,0,115,10,0,0,
- 0,116,0,124,0,124,1,131,2,83,0,41,1,122,95,76,
- 111,97,100,32,97,32,102,114,111,122,101,110,32,109,111,100,
- 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,
- 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,
- 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,
- 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,
- 101,97,100,46,10,10,32,32,32,32,32,32,32,32,41,1,
- 114,96,0,0,0,114,168,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,154,0,0,0,63,3,
- 0,0,115,2,0,0,0,0,7,122,26,70,114,111,122,101,
- 110,73,109,112,111,114,116,101,114,46,108,111,97,100,95,109,
- 111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,
- 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,10,
- 0,0,0,116,0,160,1,124,1,161,1,83,0,41,1,122,
- 45,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101,
- 32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32,
- 102,114,111,122,101,110,32,109,111,100,117,108,101,46,41,2,
- 114,56,0,0,0,114,175,0,0,0,114,168,0,0,0,114,
- 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,169,
- 0,0,0,72,3,0,0,115,2,0,0,0,0,4,122,23,
- 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,103,
- 101,116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,
- 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,
- 115,4,0,0,0,100,1,83,0,41,2,122,54,82,101,116,
- 117,114,110,32,78,111,110,101,32,97,115,32,102,114,111,122,
- 101,110,32,109,111,100,117,108,101,115,32,100,111,32,110,111,
- 116,32,104,97,118,101,32,115,111,117,114,99,101,32,99,111,
- 100,101,46,78,114,10,0,0,0,114,168,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,170,0,
- 0,0,78,3,0,0,115,2,0,0,0,0,4,122,25,70,
- 114,111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,
- 116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,
- 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,
- 0,115,10,0,0,0,116,0,160,1,124,1,161,1,83,0,
- 41,1,122,46,82,101,116,117,114,110,32,84,114,117,101,32,
- 105,102,32,116,104,101,32,102,114,111,122,101,110,32,109,111,
- 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,
- 101,46,41,2,114,56,0,0,0,90,17,105,115,95,102,114,
- 111,122,101,110,95,112,97,99,107,97,103,101,114,168,0,0,
+ 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,16,
+ 0,0,0,116,0,116,1,106,2,124,1,131,2,1,0,100,
+ 1,83,0,41,2,122,22,69,120,101,99,32,97,32,98,117,
+ 105,108,116,45,105,110,32,109,111,100,117,108,101,78,41,3,
+ 114,66,0,0,0,114,56,0,0,0,90,12,101,120,101,99,
+ 95,98,117,105,108,116,105,110,41,2,114,30,0,0,0,114,
+ 95,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
+ 0,0,0,114,149,0,0,0,244,2,0,0,115,2,0,0,
+ 0,0,3,122,27,66,117,105,108,116,105,110,73,109,112,111,
+ 114,116,101,114,46,101,120,101,99,95,109,111,100,117,108,101,
+ 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+ 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,
+ 83,0,41,2,122,57,82,101,116,117,114,110,32,78,111,110,
+ 101,32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,
+ 100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,
+ 101,32,99,111,100,101,32,111,98,106,101,99,116,115,46,78,
+ 114,10,0,0,0,169,2,114,163,0,0,0,114,80,0,0,
0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,114,0,0,0,84,3,0,0,115,2,0,0,0,0,4,
- 122,25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,
- 46,105,115,95,112,97,99,107,97,103,101,41,2,78,78,41,
- 1,78,41,17,114,1,0,0,0,114,0,0,0,0,114,2,
- 0,0,0,114,3,0,0,0,114,137,0,0,0,114,171,0,
- 0,0,114,98,0,0,0,114,172,0,0,0,114,166,0,0,
+ 218,8,103,101,116,95,99,111,100,101,249,2,0,0,115,2,
+ 0,0,0,0,4,122,24,66,117,105,108,116,105,110,73,109,
+ 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99,
+ 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
+ 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83,
+ 0,41,2,122,56,82,101,116,117,114,110,32,78,111,110,101,
+ 32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100,
+ 117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,101,
+ 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,10,
+ 0,0,0,114,168,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,218,10,103,101,116,95,115,111,117,
+ 114,99,101,255,2,0,0,115,2,0,0,0,0,4,122,26,
+ 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,
+ 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,
+ 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
+ 0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,52,
+ 82,101,116,117,114,110,32,70,97,108,115,101,32,97,115,32,
+ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,
+ 32,97,114,101,32,110,101,118,101,114,32,112,97,99,107,97,
+ 103,101,115,46,70,114,10,0,0,0,114,168,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,114,
+ 0,0,0,5,3,0,0,115,2,0,0,0,0,4,122,26,
+ 66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,
+ 105,115,95,112,97,99,107,97,103,101,41,2,78,78,41,1,
+ 78,41,18,114,1,0,0,0,114,0,0,0,0,114,2,0,
+ 0,0,114,3,0,0,0,114,137,0,0,0,218,12,115,116,
+ 97,116,105,99,109,101,116,104,111,100,114,98,0,0,0,218,
+ 11,99,108,97,115,115,109,101,116,104,111,100,114,166,0,0,
0,114,167,0,0,0,114,148,0,0,0,114,149,0,0,0,
- 114,154,0,0,0,114,89,0,0,0,114,169,0,0,0,114,
- 170,0,0,0,114,114,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,173,0,
- 0,0,14,3,0,0,115,46,0,0,0,8,2,4,7,4,
- 2,2,1,10,8,2,1,12,6,2,1,12,8,2,1,10,
- 3,2,1,10,8,2,1,10,8,2,1,2,1,12,4,2,
- 1,2,1,12,4,2,1,2,1,114,173,0,0,0,99,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,64,0,0,0,115,32,0,0,0,101,0,90,1,
- 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,
- 100,4,100,5,132,0,90,5,100,6,83,0,41,7,218,18,
- 95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,
- 120,116,122,36,67,111,110,116,101,120,116,32,109,97,110,97,
- 103,101,114,32,102,111,114,32,116,104,101,32,105,109,112,111,
- 114,116,32,108,111,99,107,46,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,
- 0,115,12,0,0,0,116,0,160,1,161,0,1,0,100,1,
- 83,0,41,2,122,24,65,99,113,117,105,114,101,32,116,104,
- 101,32,105,109,112,111,114,116,32,108,111,99,107,46,78,41,
- 2,114,56,0,0,0,114,57,0,0,0,114,46,0,0,0,
- 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,
- 53,0,0,0,97,3,0,0,115,2,0,0,0,0,2,122,
- 28,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,
- 101,120,116,46,95,95,101,110,116,101,114,95,95,99,4,0,
- 0,0,0,0,0,0,0,0,0,0,4,0,0,0,2,0,
- 0,0,67,0,0,0,115,12,0,0,0,116,0,160,1,161,
- 0,1,0,100,1,83,0,41,2,122,60,82,101,108,101,97,
- 115,101,32,116,104,101,32,105,109,112,111,114,116,32,108,111,
- 99,107,32,114,101,103,97,114,100,108,101,115,115,32,111,102,
- 32,97,110,121,32,114,97,105,115,101,100,32,101,120,99,101,
- 112,116,105,111,110,115,46,78,41,2,114,56,0,0,0,114,
- 59,0,0,0,41,4,114,30,0,0,0,218,8,101,120,99,
- 95,116,121,112,101,218,9,101,120,99,95,118,97,108,117,101,
- 218,13,101,120,99,95,116,114,97,99,101,98,97,99,107,114,
- 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,55,
- 0,0,0,101,3,0,0,115,2,0,0,0,0,2,122,27,
- 95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,
- 120,116,46,95,95,101,120,105,116,95,95,78,41,6,114,1,
- 0,0,0,114,0,0,0,0,114,2,0,0,0,114,3,0,
- 0,0,114,53,0,0,0,114,55,0,0,0,114,10,0,0,
- 0,114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,
- 114,178,0,0,0,93,3,0,0,115,6,0,0,0,8,2,
- 4,2,8,4,114,178,0,0,0,99,3,0,0,0,0,0,
- 0,0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,
- 0,0,115,64,0,0,0,124,1,160,0,100,1,124,2,100,
- 2,24,0,161,2,125,3,116,1,124,3,131,1,124,2,107,
- 0,114,36,116,2,100,3,131,1,130,1,124,3,100,4,25,
- 0,125,4,124,0,114,60,100,5,160,3,124,4,124,0,161,
- 2,83,0,124,4,83,0,41,6,122,50,82,101,115,111,108,
- 118,101,32,97,32,114,101,108,97,116,105,118,101,32,109,111,
- 100,117,108,101,32,110,97,109,101,32,116,111,32,97,110,32,
- 97,98,115,111,108,117,116,101,32,111,110,101,46,114,127,0,
- 0,0,114,37,0,0,0,122,50,97,116,116,101,109,112,116,
- 101,100,32,114,101,108,97,116,105,118,101,32,105,109,112,111,
- 114,116,32,98,101,121,111,110,100,32,116,111,112,45,108,101,
- 118,101,108,32,112,97,99,107,97,103,101,114,22,0,0,0,
- 250,5,123,125,46,123,125,41,4,218,6,114,115,112,108,105,
- 116,218,3,108,101,110,114,78,0,0,0,114,44,0,0,0,
- 41,5,114,17,0,0,0,218,7,112,97,99,107,97,103,101,
- 218,5,108,101,118,101,108,90,4,98,105,116,115,90,4,98,
- 97,115,101,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,218,13,95,114,101,115,111,108,118,101,95,110,97,109,
- 101,106,3,0,0,115,10,0,0,0,0,2,16,1,12,1,
- 8,1,8,1,114,187,0,0,0,99,3,0,0,0,0,0,
- 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0,
- 0,0,115,34,0,0,0,124,0,160,0,124,1,124,2,161,
- 2,125,3,124,3,100,0,107,8,114,24,100,0,83,0,116,
- 1,124,1,124,3,131,2,83,0,114,13,0,0,0,41,2,
- 114,167,0,0,0,114,90,0,0,0,41,4,218,6,102,105,
- 110,100,101,114,114,17,0,0,0,114,164,0,0,0,114,108,
+ 114,85,0,0,0,114,169,0,0,0,114,170,0,0,0,114,
+ 114,0,0,0,114,96,0,0,0,114,154,0,0,0,114,10,
0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
- 0,0,218,17,95,102,105,110,100,95,115,112,101,99,95,108,
- 101,103,97,99,121,115,3,0,0,115,8,0,0,0,0,3,
- 12,1,8,1,4,1,114,189,0,0,0,99,3,0,0,0,
- 0,0,0,0,0,0,0,0,10,0,0,0,10,0,0,0,
- 67,0,0,0,115,36,1,0,0,116,0,106,1,125,3,124,
- 3,100,1,107,8,114,22,116,2,100,2,131,1,130,1,124,
- 3,115,38,116,3,160,4,100,3,116,5,161,2,1,0,124,
- 0,116,0,106,6,107,6,125,4,124,3,68,0,93,234,125,
- 5,116,7,131,0,143,96,1,0,122,10,124,5,106,8,125,
- 6,87,0,110,56,4,0,116,9,107,10,114,130,1,0,1,
- 0,1,0,116,10,124,5,124,0,124,1,131,3,125,7,124,
- 7,100,1,107,8,114,126,89,0,87,0,100,1,4,0,4,
- 0,131,3,1,0,113,52,89,0,110,14,48,0,124,6,124,
- 0,124,1,124,2,131,3,125,7,87,0,100,1,4,0,4,
- 0,131,3,1,0,110,16,49,0,115,164,48,0,1,0,1,
- 0,1,0,89,0,1,0,124,7,100,1,107,9,114,52,124,
- 4,144,1,115,22,124,0,116,0,106,6,107,6,144,1,114,
- 22,116,0,106,6,124,0,25,0,125,8,122,10,124,8,106,
- 11,125,9,87,0,110,28,4,0,116,9,107,10,114,248,1,
- 0,1,0,1,0,124,7,6,0,89,0,2,0,1,0,83,
- 0,48,0,124,9,100,1,107,8,144,1,114,12,124,7,2,
- 0,1,0,83,0,124,9,2,0,1,0,83,0,113,52,124,
- 7,2,0,1,0,83,0,113,52,100,1,83,0,41,4,122,
- 21,70,105,110,100,32,97,32,109,111,100,117,108,101,39,115,
- 32,115,112,101,99,46,78,122,53,115,121,115,46,109,101,116,
- 97,95,112,97,116,104,32,105,115,32,78,111,110,101,44,32,
- 80,121,116,104,111,110,32,105,115,32,108,105,107,101,108,121,
- 32,115,104,117,116,116,105,110,103,32,100,111,119,110,122,22,
- 115,121,115,46,109,101,116,97,95,112,97,116,104,32,105,115,
- 32,101,109,112,116,121,41,12,114,15,0,0,0,218,9,109,
- 101,116,97,95,112,97,116,104,114,78,0,0,0,218,9,95,
- 119,97,114,110,105,110,103,115,218,4,119,97,114,110,218,13,
- 73,109,112,111,114,116,87,97,114,110,105,110,103,114,91,0,
- 0,0,114,178,0,0,0,114,166,0,0,0,114,105,0,0,
- 0,114,189,0,0,0,114,104,0,0,0,41,10,114,17,0,
- 0,0,114,164,0,0,0,114,165,0,0,0,114,190,0,0,
- 0,90,9,105,115,95,114,101,108,111,97,100,114,188,0,0,
- 0,114,166,0,0,0,114,94,0,0,0,114,95,0,0,0,
- 114,104,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
- 11,0,0,0,218,10,95,102,105,110,100,95,115,112,101,99,
- 124,3,0,0,115,54,0,0,0,0,2,6,1,8,2,8,
- 3,4,1,12,5,10,1,8,1,8,1,2,1,10,1,14,
- 1,12,1,8,1,22,2,42,1,8,2,18,1,10,1,2,
- 1,10,1,14,4,14,2,10,1,8,2,10,2,10,2,114,
- 194,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
- 0,3,0,0,0,5,0,0,0,67,0,0,0,115,108,0,
- 0,0,116,0,124,0,116,1,131,2,115,28,116,2,100,1,
- 160,3,116,4,124,0,131,1,161,1,131,1,130,1,124,2,
- 100,2,107,0,114,44,116,5,100,3,131,1,130,1,124,2,
- 100,2,107,4,114,84,116,0,124,1,116,1,131,2,115,72,
- 116,2,100,4,131,1,130,1,110,12,124,1,115,84,116,6,
- 100,5,131,1,130,1,124,0,115,104,124,2,100,2,107,2,
- 114,104,116,5,100,6,131,1,130,1,100,7,83,0,41,8,
- 122,28,86,101,114,105,102,121,32,97,114,103,117,109,101,110,
- 116,115,32,97,114,101,32,34,115,97,110,101,34,46,122,31,
- 109,111,100,117,108,101,32,110,97,109,101,32,109,117,115,116,
- 32,98,101,32,115,116,114,44,32,110,111,116,32,123,125,114,
- 22,0,0,0,122,18,108,101,118,101,108,32,109,117,115,116,
- 32,98,101,32,62,61,32,48,122,31,95,95,112,97,99,107,
- 97,103,101,95,95,32,110,111,116,32,115,101,116,32,116,111,
- 32,97,32,115,116,114,105,110,103,122,54,97,116,116,101,109,
- 112,116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,
- 112,111,114,116,32,119,105,116,104,32,110,111,32,107,110,111,
- 119,110,32,112,97,114,101,110,116,32,112,97,99,107,97,103,
- 101,122,17,69,109,112,116,121,32,109,111,100,117,108,101,32,
- 110,97,109,101,78,41,7,218,10,105,115,105,110,115,116,97,
- 110,99,101,218,3,115,116,114,218,9,84,121,112,101,69,114,
- 114,111,114,114,44,0,0,0,114,14,0,0,0,218,10,86,
- 97,108,117,101,69,114,114,111,114,114,78,0,0,0,169,3,
- 114,17,0,0,0,114,185,0,0,0,114,186,0,0,0,114,
+ 0,0,114,159,0,0,0,195,2,0,0,115,44,0,0,0,
+ 8,2,4,7,4,2,2,1,10,8,2,1,12,8,2,1,
+ 12,11,2,1,10,7,2,1,10,4,2,1,2,1,12,4,
+ 2,1,2,1,12,4,2,1,2,1,12,4,114,159,0,0,
+ 0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,4,0,0,0,64,0,0,0,115,144,0,0,0,101,
+ 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,101,
+ 5,100,3,100,4,132,0,131,1,90,6,101,7,100,22,100,
+ 6,100,7,132,1,131,1,90,8,101,7,100,23,100,8,100,
+ 9,132,1,131,1,90,9,101,7,100,10,100,11,132,0,131,
+ 1,90,10,101,5,100,12,100,13,132,0,131,1,90,11,101,
+ 7,100,14,100,15,132,0,131,1,90,12,101,7,101,13,100,
+ 16,100,17,132,0,131,1,131,1,90,14,101,7,101,13,100,
+ 18,100,19,132,0,131,1,131,1,90,15,101,7,101,13,100,
+ 20,100,21,132,0,131,1,131,1,90,16,100,5,83,0,41,
+ 24,218,14,70,114,111,122,101,110,73,109,112,111,114,116,101,
+ 114,122,142,77,101,116,97,32,112,97,116,104,32,105,109,112,
+ 111,114,116,32,102,111,114,32,102,114,111,122,101,110,32,109,
+ 111,100,117,108,101,115,46,10,10,32,32,32,32,65,108,108,
+ 32,109,101,116,104,111,100,115,32,97,114,101,32,101,105,116,
+ 104,101,114,32,99,108,97,115,115,32,111,114,32,115,116,97,
+ 116,105,99,32,109,101,116,104,111,100,115,32,116,111,32,97,
+ 118,111,105,100,32,116,104,101,32,110,101,101,100,32,116,111,
+ 10,32,32,32,32,105,110,115,116,97,110,116,105,97,116,101,
+ 32,116,104,101,32,99,108,97,115,115,46,10,10,32,32,32,
+ 32,90,6,102,114,111,122,101,110,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,
+ 0,0,115,16,0,0,0,100,1,160,0,124,0,106,1,116,
+ 2,106,3,161,2,83,0,41,2,114,160,0,0,0,114,152,
+ 0,0,0,41,4,114,44,0,0,0,114,1,0,0,0,114,
+ 173,0,0,0,114,137,0,0,0,41,1,218,1,109,114,10,
+ 0,0,0,114,10,0,0,0,114,11,0,0,0,114,98,0,
+ 0,0,25,3,0,0,115,2,0,0,0,0,7,122,26,70,
+ 114,111,122,101,110,73,109,112,111,114,116,101,114,46,109,111,
+ 100,117,108,101,95,114,101,112,114,78,99,4,0,0,0,0,
+ 0,0,0,0,0,0,0,4,0,0,0,5,0,0,0,67,
+ 0,0,0,115,34,0,0,0,116,0,160,1,124,1,161,1,
+ 114,26,116,2,124,1,124,0,124,0,106,3,100,1,141,3,
+ 83,0,100,0,83,0,100,0,83,0,114,161,0,0,0,41,
+ 4,114,56,0,0,0,114,87,0,0,0,114,90,0,0,0,
+ 114,137,0,0,0,114,162,0,0,0,114,10,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,114,166,0,0,0,34,3,
+ 0,0,115,6,0,0,0,0,2,10,1,16,2,122,24,70,
+ 114,111,122,101,110,73,109,112,111,114,116,101,114,46,102,105,
+ 110,100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,
+ 0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,
+ 115,18,0,0,0,116,0,160,1,124,1,161,1,114,14,124,
+ 0,83,0,100,1,83,0,41,2,122,93,70,105,110,100,32,
+ 97,32,102,114,111,122,101,110,32,109,111,100,117,108,101,46,
+ 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,
+ 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,
+ 116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,
+ 112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,
+ 32,32,32,32,32,32,32,32,78,41,2,114,56,0,0,0,
+ 114,87,0,0,0,41,3,114,163,0,0,0,114,80,0,0,
+ 0,114,164,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,167,0,0,0,41,3,0,0,115,2,
+ 0,0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,
+ 111,114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,
+ 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
+ 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
+ 1,83,0,41,2,122,42,85,115,101,32,100,101,102,97,117,
+ 108,116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,
+ 32,109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,
+ 46,78,114,10,0,0,0,41,2,114,163,0,0,0,114,94,
+ 0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
+ 0,0,114,148,0,0,0,50,3,0,0,115,2,0,0,0,
+ 0,2,122,28,70,114,111,122,101,110,73,109,112,111,114,116,
+ 101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,
+ 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
+ 0,4,0,0,0,67,0,0,0,115,64,0,0,0,124,0,
+ 106,0,106,1,125,1,116,2,160,3,124,1,161,1,115,36,
+ 116,4,100,1,160,5,124,1,161,1,124,1,100,2,141,2,
+ 130,1,116,6,116,2,106,7,124,1,131,2,125,2,116,8,
+ 124,2,124,0,106,9,131,2,1,0,100,0,83,0,114,86,
+ 0,0,0,41,10,114,104,0,0,0,114,17,0,0,0,114,
+ 56,0,0,0,114,87,0,0,0,114,78,0,0,0,114,44,
+ 0,0,0,114,66,0,0,0,218,17,103,101,116,95,102,114,
+ 111,122,101,110,95,111,98,106,101,99,116,218,4,101,120,101,
+ 99,114,7,0,0,0,41,3,114,95,0,0,0,114,17,0,
+ 0,0,218,4,99,111,100,101,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,114,149,0,0,0,54,3,0,0,
+ 115,14,0,0,0,0,2,8,1,10,1,10,1,2,255,6,
+ 2,12,1,122,26,70,114,111,122,101,110,73,109,112,111,114,
+ 116,101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,
+ 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
+ 3,0,0,0,67,0,0,0,115,10,0,0,0,116,0,124,
+ 0,124,1,131,2,83,0,41,1,122,95,76,111,97,100,32,
+ 97,32,102,114,111,122,101,110,32,109,111,100,117,108,101,46,
+ 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,
+ 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,
+ 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,
+ 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,
+ 10,10,32,32,32,32,32,32,32,32,41,1,114,96,0,0,
+ 0,114,168,0,0,0,114,10,0,0,0,114,10,0,0,0,
+ 114,11,0,0,0,114,154,0,0,0,63,3,0,0,115,2,
+ 0,0,0,0,7,122,26,70,114,111,122,101,110,73,109,112,
+ 111,114,116,101,114,46,108,111,97,100,95,109,111,100,117,108,
+ 101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
+ 0,0,3,0,0,0,67,0,0,0,115,10,0,0,0,116,
+ 0,160,1,124,1,161,1,83,0,41,1,122,45,82,101,116,
+ 117,114,110,32,116,104,101,32,99,111,100,101,32,111,98,106,
+ 101,99,116,32,102,111,114,32,116,104,101,32,102,114,111,122,
+ 101,110,32,109,111,100,117,108,101,46,41,2,114,56,0,0,
+ 0,114,175,0,0,0,114,168,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,114,169,0,0,0,72,
+ 3,0,0,115,2,0,0,0,0,4,122,23,70,114,111,122,
+ 101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,99,
+ 111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,0,
+ 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,
+ 0,100,1,83,0,41,2,122,54,82,101,116,117,114,110,32,
+ 78,111,110,101,32,97,115,32,102,114,111,122,101,110,32,109,
+ 111,100,117,108,101,115,32,100,111,32,110,111,116,32,104,97,
+ 118,101,32,115,111,117,114,99,101,32,99,111,100,101,46,78,
+ 114,10,0,0,0,114,168,0,0,0,114,10,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,114,170,0,0,0,78,3,
+ 0,0,115,2,0,0,0,0,4,122,25,70,114,111,122,101,
+ 110,73,109,112,111,114,116,101,114,46,103,101,116,95,115,111,
+ 117,114,99,101,99,2,0,0,0,0,0,0,0,0,0,0,
+ 0,2,0,0,0,3,0,0,0,67,0,0,0,115,10,0,
+ 0,0,116,0,160,1,124,1,161,1,83,0,41,1,122,46,
+ 82,101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,
+ 104,101,32,102,114,111,122,101,110,32,109,111,100,117,108,101,
+ 32,105,115,32,97,32,112,97,99,107,97,103,101,46,41,2,
+ 114,56,0,0,0,90,17,105,115,95,102,114,111,122,101,110,
+ 95,112,97,99,107,97,103,101,114,168,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,114,0,0,
+ 0,84,3,0,0,115,2,0,0,0,0,4,122,25,70,114,
+ 111,122,101,110,73,109,112,111,114,116,101,114,46,105,115,95,
+ 112,97,99,107,97,103,101,41,2,78,78,41,1,78,41,17,
+ 114,1,0,0,0,114,0,0,0,0,114,2,0,0,0,114,
+ 3,0,0,0,114,137,0,0,0,114,171,0,0,0,114,98,
+ 0,0,0,114,172,0,0,0,114,166,0,0,0,114,167,0,
+ 0,0,114,148,0,0,0,114,149,0,0,0,114,154,0,0,
+ 0,114,89,0,0,0,114,169,0,0,0,114,170,0,0,0,
+ 114,114,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 10,0,0,0,114,11,0,0,0,114,173,0,0,0,14,3,
+ 0,0,115,46,0,0,0,8,2,4,7,4,2,2,1,10,
+ 8,2,1,12,6,2,1,12,8,2,1,10,3,2,1,10,
+ 8,2,1,10,8,2,1,2,1,12,4,2,1,2,1,12,
+ 4,2,1,2,1,114,173,0,0,0,99,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,
+ 0,0,0,115,32,0,0,0,101,0,90,1,100,0,90,2,
+ 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,
+ 132,0,90,5,100,6,83,0,41,7,218,18,95,73,109,112,
+ 111,114,116,76,111,99,107,67,111,110,116,101,120,116,122,36,
+ 67,111,110,116,101,120,116,32,109,97,110,97,103,101,114,32,
+ 102,111,114,32,116,104,101,32,105,109,112,111,114,116,32,108,
+ 111,99,107,46,99,1,0,0,0,0,0,0,0,0,0,0,
+ 0,1,0,0,0,2,0,0,0,67,0,0,0,115,12,0,
+ 0,0,116,0,160,1,161,0,1,0,100,1,83,0,41,2,
+ 122,24,65,99,113,117,105,114,101,32,116,104,101,32,105,109,
+ 112,111,114,116,32,108,111,99,107,46,78,41,2,114,56,0,
+ 0,0,114,57,0,0,0,114,46,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,114,53,0,0,0,
+ 97,3,0,0,115,2,0,0,0,0,2,122,28,95,73,109,
+ 112,111,114,116,76,111,99,107,67,111,110,116,101,120,116,46,
+ 95,95,101,110,116,101,114,95,95,99,4,0,0,0,0,0,
+ 0,0,0,0,0,0,4,0,0,0,2,0,0,0,67,0,
+ 0,0,115,12,0,0,0,116,0,160,1,161,0,1,0,100,
+ 1,83,0,41,2,122,60,82,101,108,101,97,115,101,32,116,
+ 104,101,32,105,109,112,111,114,116,32,108,111,99,107,32,114,
+ 101,103,97,114,100,108,101,115,115,32,111,102,32,97,110,121,
+ 32,114,97,105,115,101,100,32,101,120,99,101,112,116,105,111,
+ 110,115,46,78,41,2,114,56,0,0,0,114,59,0,0,0,
+ 41,4,114,30,0,0,0,218,8,101,120,99,95,116,121,112,
+ 101,218,9,101,120,99,95,118,97,108,117,101,218,13,101,120,
+ 99,95,116,114,97,99,101,98,97,99,107,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,114,55,0,0,0,101,
+ 3,0,0,115,2,0,0,0,0,2,122,27,95,73,109,112,
+ 111,114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,
+ 95,101,120,105,116,95,95,78,41,6,114,1,0,0,0,114,
+ 0,0,0,0,114,2,0,0,0,114,3,0,0,0,114,53,
+ 0,0,0,114,55,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,178,0,0,
+ 0,93,3,0,0,115,6,0,0,0,8,2,4,2,8,4,
+ 114,178,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
+ 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,64,
+ 0,0,0,124,1,160,0,100,1,124,2,100,2,24,0,161,
+ 2,125,3,116,1,124,3,131,1,124,2,107,0,114,36,116,
+ 2,100,3,131,1,130,1,124,3,100,4,25,0,125,4,124,
+ 0,114,60,100,5,160,3,124,4,124,0,161,2,83,0,124,
+ 4,83,0,41,6,122,50,82,101,115,111,108,118,101,32,97,
+ 32,114,101,108,97,116,105,118,101,32,109,111,100,117,108,101,
+ 32,110,97,109,101,32,116,111,32,97,110,32,97,98,115,111,
+ 108,117,116,101,32,111,110,101,46,114,127,0,0,0,114,37,
+ 0,0,0,122,50,97,116,116,101,109,112,116,101,100,32,114,
+ 101,108,97,116,105,118,101,32,105,109,112,111,114,116,32,98,
+ 101,121,111,110,100,32,116,111,112,45,108,101,118,101,108,32,
+ 112,97,99,107,97,103,101,114,22,0,0,0,250,5,123,125,
+ 46,123,125,41,4,218,6,114,115,112,108,105,116,218,3,108,
+ 101,110,114,78,0,0,0,114,44,0,0,0,41,5,114,17,
+ 0,0,0,218,7,112,97,99,107,97,103,101,218,5,108,101,
+ 118,101,108,90,4,98,105,116,115,90,4,98,97,115,101,114,
10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,13,
- 95,115,97,110,105,116,121,95,99,104,101,99,107,171,3,0,
- 0,115,22,0,0,0,0,2,10,1,18,1,8,1,8,1,
- 8,1,10,1,10,1,4,1,8,2,12,1,114,200,0,0,
- 0,122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,
- 101,100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,
- 0,0,0,0,0,0,8,0,0,0,8,0,0,0,67,0,
- 0,0,115,220,0,0,0,100,0,125,2,124,0,160,0,100,
- 1,161,1,100,2,25,0,125,3,124,3,114,134,124,3,116,
- 1,106,2,107,7,114,42,116,3,124,1,124,3,131,2,1,
- 0,124,0,116,1,106,2,107,6,114,62,116,1,106,2,124,
- 0,25,0,83,0,116,1,106,2,124,3,25,0,125,4,122,
- 10,124,4,106,4,125,2,87,0,110,50,4,0,116,5,107,
- 10,114,132,1,0,1,0,1,0,116,6,100,3,23,0,160,
- 7,124,0,124,3,161,2,125,5,116,8,124,5,124,0,100,
- 4,141,2,100,0,130,2,89,0,110,2,48,0,116,9,124,
- 0,124,2,131,2,125,6,124,6,100,0,107,8,114,172,116,
- 8,116,6,160,7,124,0,161,1,124,0,100,4,141,2,130,
- 1,110,8,116,10,124,6,131,1,125,7,124,3,114,216,116,
- 1,106,2,124,3,25,0,125,4,116,11,124,4,124,0,160,
- 0,100,1,161,1,100,5,25,0,124,7,131,3,1,0,124,
- 7,83,0,41,6,78,114,127,0,0,0,114,22,0,0,0,
- 122,23,59,32,123,33,114,125,32,105,115,32,110,111,116,32,
- 97,32,112,97,99,107,97,103,101,114,16,0,0,0,233,2,
- 0,0,0,41,12,114,128,0,0,0,114,15,0,0,0,114,
- 91,0,0,0,114,66,0,0,0,114,140,0,0,0,114,105,
- 0,0,0,218,8,95,69,82,82,95,77,83,71,114,44,0,
- 0,0,218,19,77,111,100,117,108,101,78,111,116,70,111,117,
- 110,100,69,114,114,111,114,114,194,0,0,0,114,158,0,0,
- 0,114,5,0,0,0,41,8,114,17,0,0,0,218,7,105,
- 109,112,111,114,116,95,114,164,0,0,0,114,129,0,0,0,
- 90,13,112,97,114,101,110,116,95,109,111,100,117,108,101,114,
- 156,0,0,0,114,94,0,0,0,114,95,0,0,0,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,218,23,95,
- 102,105,110,100,95,97,110,100,95,108,111,97,100,95,117,110,
- 108,111,99,107,101,100,190,3,0,0,115,42,0,0,0,0,
- 1,4,1,14,1,4,1,10,1,10,2,10,1,10,1,10,
- 1,2,1,10,1,14,1,16,1,20,1,10,1,8,1,20,
- 2,8,1,4,2,10,1,22,1,114,205,0,0,0,99,2,
- 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,8,
- 0,0,0,67,0,0,0,115,128,0,0,0,116,0,124,0,
- 131,1,143,62,1,0,116,1,106,2,160,3,124,0,116,4,
- 161,2,125,2,124,2,116,4,107,8,114,56,116,5,124,0,
- 124,1,131,2,87,0,2,0,100,1,4,0,4,0,131,3,
- 1,0,83,0,87,0,100,1,4,0,4,0,131,3,1,0,
- 110,16,49,0,115,76,48,0,1,0,1,0,1,0,89,0,
- 1,0,124,2,100,1,107,8,114,116,100,2,160,6,124,0,
- 161,1,125,3,116,7,124,3,124,0,100,3,141,2,130,1,
- 116,8,124,0,131,1,1,0,124,2,83,0,41,4,122,25,
- 70,105,110,100,32,97,110,100,32,108,111,97,100,32,116,104,
- 101,32,109,111,100,117,108,101,46,78,122,40,105,109,112,111,
- 114,116,32,111,102,32,123,125,32,104,97,108,116,101,100,59,
- 32,78,111,110,101,32,105,110,32,115,121,115,46,109,111,100,
- 117,108,101,115,114,16,0,0,0,41,9,114,49,0,0,0,
- 114,15,0,0,0,114,91,0,0,0,114,34,0,0,0,218,
- 14,95,78,69,69,68,83,95,76,79,65,68,73,78,71,114,
- 205,0,0,0,114,44,0,0,0,114,203,0,0,0,114,64,
- 0,0,0,41,4,114,17,0,0,0,114,204,0,0,0,114,
- 95,0,0,0,114,74,0,0,0,114,10,0,0,0,114,10,
- 0,0,0,114,11,0,0,0,218,14,95,102,105,110,100,95,
- 97,110,100,95,108,111,97,100,220,3,0,0,115,22,0,0,
- 0,0,2,10,1,14,1,8,1,54,2,8,1,4,1,2,
- 255,4,2,12,2,8,1,114,207,0,0,0,114,22,0,0,
- 0,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,
- 0,0,4,0,0,0,67,0,0,0,115,42,0,0,0,116,
- 0,124,0,124,1,124,2,131,3,1,0,124,2,100,1,107,
- 4,114,32,116,1,124,0,124,1,124,2,131,3,125,0,116,
- 2,124,0,116,3,131,2,83,0,41,2,97,50,1,0,0,
- 73,109,112,111,114,116,32,97,110,100,32,114,101,116,117,114,
- 110,32,116,104,101,32,109,111,100,117,108,101,32,98,97,115,
- 101,100,32,111,110,32,105,116,115,32,110,97,109,101,44,32,
- 116,104,101,32,112,97,99,107,97,103,101,32,116,104,101,32,
- 99,97,108,108,32,105,115,10,32,32,32,32,98,101,105,110,
- 103,32,109,97,100,101,32,102,114,111,109,44,32,97,110,100,
- 32,116,104,101,32,108,101,118,101,108,32,97,100,106,117,115,
- 116,109,101,110,116,46,10,10,32,32,32,32,84,104,105,115,
- 32,102,117,110,99,116,105,111,110,32,114,101,112,114,101,115,
- 101,110,116,115,32,116,104,101,32,103,114,101,97,116,101,115,
- 116,32,99,111,109,109,111,110,32,100,101,110,111,109,105,110,
- 97,116,111,114,32,111,102,32,102,117,110,99,116,105,111,110,
- 97,108,105,116,121,10,32,32,32,32,98,101,116,119,101,101,
- 110,32,105,109,112,111,114,116,95,109,111,100,117,108,101,32,
- 97,110,100,32,95,95,105,109,112,111,114,116,95,95,46,32,
- 84,104,105,115,32,105,110,99,108,117,100,101,115,32,115,101,
- 116,116,105,110,103,32,95,95,112,97,99,107,97,103,101,95,
- 95,32,105,102,10,32,32,32,32,116,104,101,32,108,111,97,
- 100,101,114,32,100,105,100,32,110,111,116,46,10,10,32,32,
- 32,32,114,22,0,0,0,41,4,114,200,0,0,0,114,187,
- 0,0,0,114,207,0,0,0,218,11,95,103,99,100,95,105,
- 109,112,111,114,116,114,199,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,114,208,0,0,0,236,3,
- 0,0,115,8,0,0,0,0,9,12,1,8,1,12,1,114,
- 208,0,0,0,169,1,218,9,114,101,99,117,114,115,105,118,
- 101,99,3,0,0,0,0,0,0,0,1,0,0,0,8,0,
- 0,0,11,0,0,0,67,0,0,0,115,234,0,0,0,124,
- 1,68,0,93,224,125,4,116,0,124,4,116,1,131,2,115,
- 66,124,3,114,34,124,0,106,2,100,1,23,0,125,5,110,
- 4,100,2,125,5,116,3,100,3,124,5,155,0,100,4,116,
- 4,124,4,131,1,106,2,155,0,157,4,131,1,130,1,113,
- 4,124,4,100,5,107,2,114,108,124,3,115,228,116,5,124,
- 0,100,6,131,2,114,228,116,6,124,0,124,0,106,7,124,
- 2,100,7,100,8,141,4,1,0,113,4,116,5,124,0,124,
- 4,131,2,115,4,100,9,160,8,124,0,106,2,124,4,161,
- 2,125,6,122,14,116,9,124,2,124,6,131,2,1,0,87,
- 0,113,4,4,0,116,10,107,10,114,226,1,0,125,7,1,
- 0,122,54,124,7,106,11,124,6,107,2,114,204,116,12,106,
- 13,160,14,124,6,116,15,161,2,100,10,107,9,114,204,87,
- 0,89,0,100,10,125,7,126,7,113,4,130,0,87,0,89,
- 0,100,10,125,7,126,7,113,4,100,10,125,7,126,7,48,
- 0,48,0,113,4,124,0,83,0,41,11,122,238,70,105,103,
- 117,114,101,32,111,117,116,32,119,104,97,116,32,95,95,105,
- 109,112,111,114,116,95,95,32,115,104,111,117,108,100,32,114,
- 101,116,117,114,110,46,10,10,32,32,32,32,84,104,101,32,
- 105,109,112,111,114,116,95,32,112,97,114,97,109,101,116,101,
- 114,32,105,115,32,97,32,99,97,108,108,97,98,108,101,32,
- 119,104,105,99,104,32,116,97,107,101,115,32,116,104,101,32,
- 110,97,109,101,32,111,102,32,109,111,100,117,108,101,32,116,
- 111,10,32,32,32,32,105,109,112,111,114,116,46,32,73,116,
- 32,105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,
- 100,101,99,111,117,112,108,101,32,116,104,101,32,102,117,110,
- 99,116,105,111,110,32,102,114,111,109,32,97,115,115,117,109,
- 105,110,103,32,105,109,112,111,114,116,108,105,98,39,115,10,
- 32,32,32,32,105,109,112,111,114,116,32,105,109,112,108,101,
- 109,101,110,116,97,116,105,111,110,32,105,115,32,100,101,115,
- 105,114,101,100,46,10,10,32,32,32,32,122,8,46,95,95,
- 97,108,108,95,95,122,13,96,96,102,114,111,109,32,108,105,
- 115,116,39,39,122,8,73,116,101,109,32,105,110,32,122,18,
- 32,109,117,115,116,32,98,101,32,115,116,114,44,32,110,111,
- 116,32,250,1,42,218,7,95,95,97,108,108,95,95,84,114,
- 209,0,0,0,114,182,0,0,0,78,41,16,114,195,0,0,
- 0,114,196,0,0,0,114,1,0,0,0,114,197,0,0,0,
- 114,14,0,0,0,114,4,0,0,0,218,16,95,104,97,110,
- 100,108,101,95,102,114,111,109,108,105,115,116,114,212,0,0,
- 0,114,44,0,0,0,114,66,0,0,0,114,203,0,0,0,
- 114,17,0,0,0,114,15,0,0,0,114,91,0,0,0,114,
- 34,0,0,0,114,206,0,0,0,41,8,114,95,0,0,0,
- 218,8,102,114,111,109,108,105,115,116,114,204,0,0,0,114,
- 210,0,0,0,218,1,120,90,5,119,104,101,114,101,90,9,
- 102,114,111,109,95,110,97,109,101,90,3,101,120,99,114,10,
- 0,0,0,114,10,0,0,0,114,11,0,0,0,114,213,0,
- 0,0,251,3,0,0,115,44,0,0,0,0,10,8,1,10,
- 1,4,1,12,2,4,1,28,2,8,1,14,1,10,1,2,
- 255,8,2,10,1,14,1,2,1,14,1,16,4,10,1,16,
- 255,2,2,12,1,26,1,114,213,0,0,0,99,1,0,0,
- 0,0,0,0,0,0,0,0,0,3,0,0,0,6,0,0,
- 0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,1,
- 161,1,125,1,124,0,160,0,100,2,161,1,125,2,124,1,
- 100,3,107,9,114,82,124,2,100,3,107,9,114,78,124,1,
- 124,2,106,1,107,3,114,78,116,2,106,3,100,4,124,1,
- 155,2,100,5,124,2,106,1,155,2,100,6,157,5,116,4,
- 100,7,100,8,141,3,1,0,124,1,83,0,124,2,100,3,
- 107,9,114,96,124,2,106,1,83,0,116,2,106,3,100,9,
- 116,4,100,7,100,8,141,3,1,0,124,0,100,10,25,0,
- 125,1,100,11,124,0,107,7,114,142,124,1,160,5,100,12,
- 161,1,100,13,25,0,125,1,124,1,83,0,41,14,122,167,
- 67,97,108,99,117,108,97,116,101,32,119,104,97,116,32,95,
- 95,112,97,99,107,97,103,101,95,95,32,115,104,111,117,108,
- 100,32,98,101,46,10,10,32,32,32,32,95,95,112,97,99,
- 107,97,103,101,95,95,32,105,115,32,110,111,116,32,103,117,
- 97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,
- 101,102,105,110,101,100,32,111,114,32,99,111,117,108,100,32,
- 98,101,32,115,101,116,32,116,111,32,78,111,110,101,10,32,
- 32,32,32,116,111,32,114,101,112,114,101,115,101,110,116,32,
- 116,104,97,116,32,105,116,115,32,112,114,111,112,101,114,32,
- 118,97,108,117,101,32,105,115,32,117,110,107,110,111,119,110,
- 46,10,10,32,32,32,32,114,144,0,0,0,114,104,0,0,
- 0,78,122,32,95,95,112,97,99,107,97,103,101,95,95,32,
- 33,61,32,95,95,115,112,101,99,95,95,46,112,97,114,101,
- 110,116,32,40,122,4,32,33,61,32,250,1,41,233,3,0,
- 0,0,41,1,90,10,115,116,97,99,107,108,101,118,101,108,
- 122,89,99,97,110,39,116,32,114,101,115,111,108,118,101,32,
- 112,97,99,107,97,103,101,32,102,114,111,109,32,95,95,115,
- 112,101,99,95,95,32,111,114,32,95,95,112,97,99,107,97,
- 103,101,95,95,44,32,102,97,108,108,105,110,103,32,98,97,
- 99,107,32,111,110,32,95,95,110,97,109,101,95,95,32,97,
- 110,100,32,95,95,112,97,116,104,95,95,114,1,0,0,0,
- 114,140,0,0,0,114,127,0,0,0,114,22,0,0,0,41,
- 6,114,34,0,0,0,114,129,0,0,0,114,191,0,0,0,
- 114,192,0,0,0,114,193,0,0,0,114,128,0,0,0,41,
- 3,218,7,103,108,111,98,97,108,115,114,185,0,0,0,114,
- 94,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
- 0,0,0,218,17,95,99,97,108,99,95,95,95,112,97,99,
- 107,97,103,101,95,95,32,4,0,0,115,38,0,0,0,0,
- 7,10,1,10,1,8,1,18,1,22,2,2,0,2,254,6,
- 3,4,1,8,1,6,2,6,2,2,0,2,254,6,3,8,
- 1,8,1,14,1,114,219,0,0,0,114,10,0,0,0,99,
- 5,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,
- 5,0,0,0,67,0,0,0,115,180,0,0,0,124,4,100,
- 1,107,2,114,18,116,0,124,0,131,1,125,5,110,36,124,
- 1,100,2,107,9,114,30,124,1,110,2,105,0,125,6,116,
- 1,124,6,131,1,125,7,116,0,124,0,124,7,124,4,131,
- 3,125,5,124,3,115,150,124,4,100,1,107,2,114,84,116,
- 0,124,0,160,2,100,3,161,1,100,1,25,0,131,1,83,
- 0,124,0,115,92,124,5,83,0,116,3,124,0,131,1,116,
- 3,124,0,160,2,100,3,161,1,100,1,25,0,131,1,24,
- 0,125,8,116,4,106,5,124,5,106,6,100,2,116,3,124,
- 5,106,6,131,1,124,8,24,0,133,2,25,0,25,0,83,
- 0,110,26,116,7,124,5,100,4,131,2,114,172,116,8,124,
- 5,124,3,116,0,131,3,83,0,124,5,83,0,100,2,83,
- 0,41,5,97,215,1,0,0,73,109,112,111,114,116,32,97,
- 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104,
- 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117,
- 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32,
- 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32,
- 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,114,
- 105,110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,
- 104,97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,
- 105,109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,
- 99,97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,
- 115,32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,
- 32,32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,
- 103,117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,
- 32,119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,
- 115,116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,
- 32,111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,
- 32,32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,
- 100,32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,
- 111,100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,
- 111,109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,
- 32,39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,
- 117,109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,
- 32,116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,
- 97,116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,
- 102,114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,
- 118,101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,
- 46,103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,
- 32,105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,
- 117,108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,
- 108,39,32,111,102,32,50,41,46,10,10,32,32,32,32,114,
- 22,0,0,0,78,114,127,0,0,0,114,140,0,0,0,41,
- 9,114,208,0,0,0,114,219,0,0,0,218,9,112,97,114,
- 116,105,116,105,111,110,114,184,0,0,0,114,15,0,0,0,
- 114,91,0,0,0,114,1,0,0,0,114,4,0,0,0,114,
- 213,0,0,0,41,9,114,17,0,0,0,114,218,0,0,0,
- 218,6,108,111,99,97,108,115,114,214,0,0,0,114,186,0,
- 0,0,114,95,0,0,0,90,8,103,108,111,98,97,108,115,
- 95,114,185,0,0,0,90,7,99,117,116,95,111,102,102,114,
- 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,10,
- 95,95,105,109,112,111,114,116,95,95,59,4,0,0,115,30,
- 0,0,0,0,11,8,1,10,2,16,1,8,1,12,1,4,
- 3,8,1,18,1,4,1,4,4,26,3,32,1,10,1,12,
- 2,114,222,0,0,0,99,1,0,0,0,0,0,0,0,0,
- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,
- 38,0,0,0,116,0,160,1,124,0,161,1,125,1,124,1,
- 100,0,107,8,114,30,116,2,100,1,124,0,23,0,131,1,
- 130,1,116,3,124,1,131,1,83,0,41,2,78,122,25,110,
- 111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,
- 101,32,110,97,109,101,100,32,41,4,114,159,0,0,0,114,
- 166,0,0,0,114,78,0,0,0,114,158,0,0,0,41,2,
- 114,17,0,0,0,114,94,0,0,0,114,10,0,0,0,114,
- 10,0,0,0,114,11,0,0,0,218,18,95,98,117,105,108,
- 116,105,110,95,102,114,111,109,95,110,97,109,101,96,4,0,
- 0,115,8,0,0,0,0,1,10,1,8,1,12,1,114,223,
- 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,
- 10,0,0,0,5,0,0,0,67,0,0,0,115,166,0,0,
- 0,124,1,97,0,124,0,97,1,116,2,116,1,131,1,125,
- 2,116,1,106,3,160,4,161,0,68,0,93,72,92,2,125,
- 3,125,4,116,5,124,4,124,2,131,2,114,26,124,3,116,
- 1,106,6,107,6,114,60,116,7,125,5,110,18,116,0,160,
- 8,124,3,161,1,114,26,116,9,125,5,110,2,113,26,116,
- 10,124,4,124,5,131,2,125,6,116,11,124,6,124,4,131,
- 2,1,0,113,26,116,1,106,3,116,12,25,0,125,7,100,
- 1,68,0,93,46,125,8,124,8,116,1,106,3,107,7,114,
- 138,116,13,124,8,131,1,125,9,110,10,116,1,106,3,124,
- 8,25,0,125,9,116,14,124,7,124,8,124,9,131,3,1,
- 0,113,114,100,2,83,0,41,3,122,250,83,101,116,117,112,
- 32,105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,
- 112,111,114,116,105,110,103,32,110,101,101,100,101,100,32,98,
- 117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,
- 97,110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,
- 101,109,10,32,32,32,32,105,110,116,111,32,116,104,101,32,
- 103,108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,
- 46,10,10,32,32,32,32,65,115,32,115,121,115,32,105,115,
- 32,110,101,101,100,101,100,32,102,111,114,32,115,121,115,46,
- 109,111,100,117,108,101,115,32,97,99,99,101,115,115,32,97,
- 110,100,32,95,105,109,112,32,105,115,32,110,101,101,100,101,
- 100,32,116,111,32,108,111,97,100,32,98,117,105,108,116,45,
- 105,110,10,32,32,32,32,109,111,100,117,108,101,115,44,32,
- 116,104,111,115,101,32,116,119,111,32,109,111,100,117,108,101,
- 115,32,109,117,115,116,32,98,101,32,101,120,112,108,105,99,
- 105,116,108,121,32,112,97,115,115,101,100,32,105,110,46,10,
- 10,32,32,32,32,41,3,114,23,0,0,0,114,191,0,0,
- 0,114,63,0,0,0,78,41,15,114,56,0,0,0,114,15,
- 0,0,0,114,14,0,0,0,114,91,0,0,0,218,5,105,
- 116,101,109,115,114,195,0,0,0,114,77,0,0,0,114,159,
- 0,0,0,114,87,0,0,0,114,173,0,0,0,114,141,0,
- 0,0,114,147,0,0,0,114,1,0,0,0,114,223,0,0,
- 0,114,5,0,0,0,41,10,218,10,115,121,115,95,109,111,
- 100,117,108,101,218,11,95,105,109,112,95,109,111,100,117,108,
- 101,90,11,109,111,100,117,108,101,95,116,121,112,101,114,17,
- 0,0,0,114,95,0,0,0,114,108,0,0,0,114,94,0,
- 0,0,90,11,115,101,108,102,95,109,111,100,117,108,101,90,
- 12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,98,
- 117,105,108,116,105,110,95,109,111,100,117,108,101,114,10,0,
- 0,0,114,10,0,0,0,114,11,0,0,0,218,6,95,115,
- 101,116,117,112,103,4,0,0,115,36,0,0,0,0,9,4,
- 1,4,3,8,1,18,1,10,1,10,1,6,1,10,1,6,
- 2,2,1,10,1,12,3,10,1,8,1,10,1,10,2,10,
- 1,114,227,0,0,0,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,
- 38,0,0,0,116,0,124,0,124,1,131,2,1,0,116,1,
- 106,2,160,3,116,4,161,1,1,0,116,1,106,2,160,3,
- 116,5,161,1,1,0,100,1,83,0,41,2,122,48,73,110,
- 115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,32,
- 102,111,114,32,98,117,105,108,116,105,110,32,97,110,100,32,
- 102,114,111,122,101,110,32,109,111,100,117,108,101,115,78,41,
- 6,114,227,0,0,0,114,15,0,0,0,114,190,0,0,0,
- 114,118,0,0,0,114,159,0,0,0,114,173,0,0,0,41,
- 2,114,225,0,0,0,114,226,0,0,0,114,10,0,0,0,
- 114,10,0,0,0,114,11,0,0,0,218,8,95,105,110,115,
- 116,97,108,108,138,4,0,0,115,6,0,0,0,0,2,10,
- 2,12,1,114,228,0,0,0,99,0,0,0,0,0,0,0,
- 0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,0,
- 0,115,32,0,0,0,100,1,100,2,108,0,125,0,124,0,
- 97,1,124,0,160,2,116,3,106,4,116,5,25,0,161,1,
- 1,0,100,2,83,0,41,3,122,57,73,110,115,116,97,108,
- 108,32,105,109,112,111,114,116,101,114,115,32,116,104,97,116,
- 32,114,101,113,117,105,114,101,32,101,120,116,101,114,110,97,
- 108,32,102,105,108,101,115,121,115,116,101,109,32,97,99,99,
- 101,115,115,114,22,0,0,0,78,41,6,218,26,95,102,114,
- 111,122,101,110,95,105,109,112,111,114,116,108,105,98,95,101,
- 120,116,101,114,110,97,108,114,125,0,0,0,114,228,0,0,
- 0,114,15,0,0,0,114,91,0,0,0,114,1,0,0,0,
- 41,1,114,229,0,0,0,114,10,0,0,0,114,10,0,0,
- 0,114,11,0,0,0,218,27,95,105,110,115,116,97,108,108,
- 95,101,120,116,101,114,110,97,108,95,105,109,112,111,114,116,
- 101,114,115,146,4,0,0,115,6,0,0,0,0,3,8,1,
- 4,1,114,230,0,0,0,41,2,78,78,41,1,78,41,2,
- 78,114,22,0,0,0,41,4,78,78,114,10,0,0,0,114,
- 22,0,0,0,41,50,114,3,0,0,0,114,125,0,0,0,
- 114,12,0,0,0,114,18,0,0,0,114,58,0,0,0,114,
- 33,0,0,0,114,42,0,0,0,114,19,0,0,0,114,20,
- 0,0,0,114,48,0,0,0,114,49,0,0,0,114,52,0,
- 0,0,114,64,0,0,0,114,66,0,0,0,114,75,0,0,
- 0,114,85,0,0,0,114,89,0,0,0,114,96,0,0,0,
- 114,110,0,0,0,114,111,0,0,0,114,90,0,0,0,114,
- 141,0,0,0,114,147,0,0,0,114,151,0,0,0,114,106,
- 0,0,0,114,92,0,0,0,114,157,0,0,0,114,158,0,
- 0,0,114,93,0,0,0,114,159,0,0,0,114,173,0,0,
- 0,114,178,0,0,0,114,187,0,0,0,114,189,0,0,0,
- 114,194,0,0,0,114,200,0,0,0,90,15,95,69,82,82,
- 95,77,83,71,95,80,82,69,70,73,88,114,202,0,0,0,
- 114,205,0,0,0,218,6,111,98,106,101,99,116,114,206,0,
- 0,0,114,207,0,0,0,114,208,0,0,0,114,213,0,0,
- 0,114,219,0,0,0,114,222,0,0,0,114,223,0,0,0,
- 114,227,0,0,0,114,228,0,0,0,114,230,0,0,0,114,
- 10,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
- 0,0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,
- 0,115,94,0,0,0,4,24,4,2,8,8,8,8,4,2,
- 4,3,16,4,14,68,14,21,14,16,8,37,8,17,8,11,
- 14,8,8,11,8,12,8,16,8,36,14,101,16,26,10,45,
- 14,72,8,17,8,17,8,30,8,37,8,42,8,15,14,75,
- 14,79,14,13,8,9,8,9,10,47,8,16,4,1,8,2,
- 8,27,6,3,8,16,10,15,14,37,8,27,10,37,8,7,
- 8,35,8,8,
+ 95,114,101,115,111,108,118,101,95,110,97,109,101,106,3,0,
+ 0,115,10,0,0,0,0,2,16,1,12,1,8,1,8,1,
+ 114,187,0,0,0,99,3,0,0,0,0,0,0,0,0,0,
+ 0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,34,
+ 0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,124,
+ 3,100,0,117,0,114,24,100,0,83,0,116,1,124,1,124,
+ 3,131,2,83,0,114,13,0,0,0,41,2,114,167,0,0,
+ 0,114,90,0,0,0,41,4,218,6,102,105,110,100,101,114,
+ 114,17,0,0,0,114,164,0,0,0,114,108,0,0,0,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,17,
+ 95,102,105,110,100,95,115,112,101,99,95,108,101,103,97,99,
+ 121,115,3,0,0,115,8,0,0,0,0,3,12,1,8,1,
+ 4,1,114,189,0,0,0,99,3,0,0,0,0,0,0,0,
+ 0,0,0,0,10,0,0,0,10,0,0,0,67,0,0,0,
+ 115,32,1,0,0,116,0,106,1,125,3,124,3,100,1,117,
+ 0,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,118,0,125,4,124,3,68,0,93,230,125,5,116,7,131,
+ 0,143,94,1,0,122,10,124,5,106,8,125,6,87,0,110,
+ 54,4,0,116,9,121,128,1,0,1,0,1,0,116,10,124,
+ 5,124,0,124,1,131,3,125,7,124,7,100,1,117,0,114,
+ 124,89,0,87,0,100,1,4,0,4,0,131,3,1,0,113,
+ 52,89,0,110,14,48,0,124,6,124,0,124,1,124,2,131,
+ 3,125,7,87,0,100,1,4,0,4,0,131,3,1,0,110,
+ 16,49,0,115,162,48,0,1,0,1,0,1,0,89,0,1,
+ 0,124,7,100,1,117,1,114,52,124,4,144,1,115,18,124,
+ 0,116,0,106,6,118,0,144,1,114,18,116,0,106,6,124,
+ 0,25,0,125,8,122,10,124,8,106,11,125,9,87,0,110,
+ 26,4,0,116,9,121,244,1,0,1,0,1,0,124,7,6,
+ 0,89,0,2,0,1,0,83,0,48,0,124,9,100,1,117,
+ 0,144,1,114,8,124,7,2,0,1,0,83,0,124,9,2,
+ 0,1,0,83,0,113,52,124,7,2,0,1,0,83,0,113,
+ 52,100,1,83,0,41,4,122,21,70,105,110,100,32,97,32,
+ 109,111,100,117,108,101,39,115,32,115,112,101,99,46,78,122,
+ 53,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105,
+ 115,32,78,111,110,101,44,32,80,121,116,104,111,110,32,105,
+ 115,32,108,105,107,101,108,121,32,115,104,117,116,116,105,110,
+ 103,32,100,111,119,110,122,22,115,121,115,46,109,101,116,97,
+ 95,112,97,116,104,32,105,115,32,101,109,112,116,121,41,12,
+ 114,15,0,0,0,218,9,109,101,116,97,95,112,97,116,104,
+ 114,78,0,0,0,218,9,95,119,97,114,110,105,110,103,115,
+ 218,4,119,97,114,110,218,13,73,109,112,111,114,116,87,97,
+ 114,110,105,110,103,114,91,0,0,0,114,178,0,0,0,114,
+ 166,0,0,0,114,105,0,0,0,114,189,0,0,0,114,104,
+ 0,0,0,41,10,114,17,0,0,0,114,164,0,0,0,114,
+ 165,0,0,0,114,190,0,0,0,90,9,105,115,95,114,101,
+ 108,111,97,100,114,188,0,0,0,114,166,0,0,0,114,94,
+ 0,0,0,114,95,0,0,0,114,104,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,218,10,95,102,
+ 105,110,100,95,115,112,101,99,124,3,0,0,115,54,0,0,
+ 0,0,2,6,1,8,2,8,3,4,1,12,5,10,1,8,
+ 1,8,1,2,1,10,1,12,1,12,1,8,1,22,2,42,
+ 1,8,2,18,1,10,1,2,1,10,1,12,4,14,2,10,
+ 1,8,2,10,2,10,2,114,194,0,0,0,99,3,0,0,
+ 0,0,0,0,0,0,0,0,0,3,0,0,0,5,0,0,
+ 0,67,0,0,0,115,108,0,0,0,116,0,124,0,116,1,
+ 131,2,115,28,116,2,100,1,160,3,116,4,124,0,131,1,
+ 161,1,131,1,130,1,124,2,100,2,107,0,114,44,116,5,
+ 100,3,131,1,130,1,124,2,100,2,107,4,114,84,116,0,
+ 124,1,116,1,131,2,115,72,116,2,100,4,131,1,130,1,
+ 110,12,124,1,115,84,116,6,100,5,131,1,130,1,124,0,
+ 115,104,124,2,100,2,107,2,114,104,116,5,100,6,131,1,
+ 130,1,100,7,83,0,41,8,122,28,86,101,114,105,102,121,
+ 32,97,114,103,117,109,101,110,116,115,32,97,114,101,32,34,
+ 115,97,110,101,34,46,122,31,109,111,100,117,108,101,32,110,
+ 97,109,101,32,109,117,115,116,32,98,101,32,115,116,114,44,
+ 32,110,111,116,32,123,125,114,22,0,0,0,122,18,108,101,
+ 118,101,108,32,109,117,115,116,32,98,101,32,62,61,32,48,
+ 122,31,95,95,112,97,99,107,97,103,101,95,95,32,110,111,
+ 116,32,115,101,116,32,116,111,32,97,32,115,116,114,105,110,
+ 103,122,54,97,116,116,101,109,112,116,101,100,32,114,101,108,
+ 97,116,105,118,101,32,105,109,112,111,114,116,32,119,105,116,
+ 104,32,110,111,32,107,110,111,119,110,32,112,97,114,101,110,
+ 116,32,112,97,99,107,97,103,101,122,17,69,109,112,116,121,
+ 32,109,111,100,117,108,101,32,110,97,109,101,78,41,7,218,
+ 10,105,115,105,110,115,116,97,110,99,101,218,3,115,116,114,
+ 218,9,84,121,112,101,69,114,114,111,114,114,44,0,0,0,
+ 114,14,0,0,0,218,10,86,97,108,117,101,69,114,114,111,
+ 114,114,78,0,0,0,169,3,114,17,0,0,0,114,185,0,
+ 0,0,114,186,0,0,0,114,10,0,0,0,114,10,0,0,
+ 0,114,11,0,0,0,218,13,95,115,97,110,105,116,121,95,
+ 99,104,101,99,107,171,3,0,0,115,22,0,0,0,0,2,
+ 10,1,18,1,8,1,8,1,8,1,10,1,10,1,4,1,
+ 8,2,12,1,114,200,0,0,0,122,16,78,111,32,109,111,
+ 100,117,108,101,32,110,97,109,101,100,32,122,4,123,33,114,
+ 125,99,2,0,0,0,0,0,0,0,0,0,0,0,9,0,
+ 0,0,8,0,0,0,67,0,0,0,115,22,1,0,0,100,
+ 0,125,2,124,0,160,0,100,1,161,1,100,2,25,0,125,
+ 3,124,3,114,132,124,3,116,1,106,2,118,1,114,42,116,
+ 3,124,1,124,3,131,2,1,0,124,0,116,1,106,2,118,
+ 0,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,48,4,0,116,5,121,130,1,0,1,0,1,0,116,
+ 6,100,3,23,0,160,7,124,0,124,3,161,2,125,5,116,
+ 8,124,5,124,0,100,4,141,2,100,0,130,2,89,0,110,
+ 2,48,0,116,9,124,0,124,2,131,2,125,6,124,6,100,
+ 0,117,0,114,170,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,144,1,114,18,116,1,106,2,124,3,25,0,125,
+ 4,124,0,160,0,100,1,161,1,100,5,25,0,125,8,122,
+ 16,116,11,124,4,124,8,124,7,131,3,1,0,87,0,110,
+ 48,4,0,116,5,144,1,121,16,1,0,1,0,1,0,100,
+ 6,124,3,155,2,100,7,124,8,155,2,157,4,125,5,116,
+ 12,160,13,124,5,116,14,161,2,1,0,89,0,110,2,48,
+ 0,124,7,83,0,41,8,78,114,127,0,0,0,114,22,0,
+ 0,0,122,23,59,32,123,33,114,125,32,105,115,32,110,111,
+ 116,32,97,32,112,97,99,107,97,103,101,114,16,0,0,0,
+ 233,2,0,0,0,122,27,67,97,110,110,111,116,32,115,101,
+ 116,32,97,110,32,97,116,116,114,105,98,117,116,101,32,111,
+ 110,32,122,18,32,102,111,114,32,99,104,105,108,100,32,109,
+ 111,100,117,108,101,32,41,15,114,128,0,0,0,114,15,0,
+ 0,0,114,91,0,0,0,114,66,0,0,0,114,140,0,0,
+ 0,114,105,0,0,0,218,8,95,69,82,82,95,77,83,71,
+ 114,44,0,0,0,218,19,77,111,100,117,108,101,78,111,116,
+ 70,111,117,110,100,69,114,114,111,114,114,194,0,0,0,114,
+ 158,0,0,0,114,5,0,0,0,114,191,0,0,0,114,192,
+ 0,0,0,114,193,0,0,0,41,9,114,17,0,0,0,218,
+ 7,105,109,112,111,114,116,95,114,164,0,0,0,114,129,0,
+ 0,0,90,13,112,97,114,101,110,116,95,109,111,100,117,108,
+ 101,114,156,0,0,0,114,94,0,0,0,114,95,0,0,0,
+ 90,5,99,104,105,108,100,114,10,0,0,0,114,10,0,0,
+ 0,114,11,0,0,0,218,23,95,102,105,110,100,95,97,110,
+ 100,95,108,111,97,100,95,117,110,108,111,99,107,101,100,190,
+ 3,0,0,115,52,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,12,1,
+ 16,1,20,1,10,1,8,1,20,2,8,1,6,2,10,1,
+ 14,1,2,1,16,1,14,1,16,1,18,1,114,205,0,0,
+ 0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0,
+ 0,0,8,0,0,0,67,0,0,0,115,128,0,0,0,116,
+ 0,124,0,131,1,143,62,1,0,116,1,106,2,160,3,124,
+ 0,116,4,161,2,125,2,124,2,116,4,117,0,114,56,116,
+ 5,124,0,124,1,131,2,87,0,2,0,100,1,4,0,4,
+ 0,131,3,1,0,83,0,87,0,100,1,4,0,4,0,131,
+ 3,1,0,110,16,49,0,115,76,48,0,1,0,1,0,1,
+ 0,89,0,1,0,124,2,100,1,117,0,114,116,100,2,160,
+ 6,124,0,161,1,125,3,116,7,124,3,124,0,100,3,141,
+ 2,130,1,116,8,124,0,131,1,1,0,124,2,83,0,41,
+ 4,122,25,70,105,110,100,32,97,110,100,32,108,111,97,100,
+ 32,116,104,101,32,109,111,100,117,108,101,46,78,122,40,105,
+ 109,112,111,114,116,32,111,102,32,123,125,32,104,97,108,116,
+ 101,100,59,32,78,111,110,101,32,105,110,32,115,121,115,46,
+ 109,111,100,117,108,101,115,114,16,0,0,0,41,9,114,49,
+ 0,0,0,114,15,0,0,0,114,91,0,0,0,114,34,0,
+ 0,0,218,14,95,78,69,69,68,83,95,76,79,65,68,73,
+ 78,71,114,205,0,0,0,114,44,0,0,0,114,203,0,0,
+ 0,114,64,0,0,0,41,4,114,17,0,0,0,114,204,0,
+ 0,0,114,95,0,0,0,114,74,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,218,14,95,102,105,
+ 110,100,95,97,110,100,95,108,111,97,100,225,3,0,0,115,
+ 22,0,0,0,0,2,10,1,14,1,8,1,54,2,8,1,
+ 4,1,2,255,4,2,12,2,8,1,114,207,0,0,0,114,
+ 22,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
+ 0,3,0,0,0,4,0,0,0,67,0,0,0,115,42,0,
+ 0,0,116,0,124,0,124,1,124,2,131,3,1,0,124,2,
+ 100,1,107,4,114,32,116,1,124,0,124,1,124,2,131,3,
+ 125,0,116,2,124,0,116,3,131,2,83,0,41,2,97,50,
+ 1,0,0,73,109,112,111,114,116,32,97,110,100,32,114,101,
+ 116,117,114,110,32,116,104,101,32,109,111,100,117,108,101,32,
+ 98,97,115,101,100,32,111,110,32,105,116,115,32,110,97,109,
+ 101,44,32,116,104,101,32,112,97,99,107,97,103,101,32,116,
+ 104,101,32,99,97,108,108,32,105,115,10,32,32,32,32,98,
+ 101,105,110,103,32,109,97,100,101,32,102,114,111,109,44,32,
+ 97,110,100,32,116,104,101,32,108,101,118,101,108,32,97,100,
+ 106,117,115,116,109,101,110,116,46,10,10,32,32,32,32,84,
+ 104,105,115,32,102,117,110,99,116,105,111,110,32,114,101,112,
+ 114,101,115,101,110,116,115,32,116,104,101,32,103,114,101,97,
+ 116,101,115,116,32,99,111,109,109,111,110,32,100,101,110,111,
+ 109,105,110,97,116,111,114,32,111,102,32,102,117,110,99,116,
+ 105,111,110,97,108,105,116,121,10,32,32,32,32,98,101,116,
+ 119,101,101,110,32,105,109,112,111,114,116,95,109,111,100,117,
+ 108,101,32,97,110,100,32,95,95,105,109,112,111,114,116,95,
+ 95,46,32,84,104,105,115,32,105,110,99,108,117,100,101,115,
+ 32,115,101,116,116,105,110,103,32,95,95,112,97,99,107,97,
+ 103,101,95,95,32,105,102,10,32,32,32,32,116,104,101,32,
+ 108,111,97,100,101,114,32,100,105,100,32,110,111,116,46,10,
+ 10,32,32,32,32,114,22,0,0,0,41,4,114,200,0,0,
+ 0,114,187,0,0,0,114,207,0,0,0,218,11,95,103,99,
+ 100,95,105,109,112,111,114,116,114,199,0,0,0,114,10,0,
+ 0,0,114,10,0,0,0,114,11,0,0,0,114,208,0,0,
+ 0,241,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,232,0,
+ 0,0,124,1,68,0,93,222,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,226,
+ 116,5,124,0,100,6,131,2,114,226,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,121,224,1,0,125,7,
+ 1,0,122,54,124,7,106,11,124,6,107,2,114,202,116,12,
+ 106,13,160,14,124,6,116,15,161,2,100,10,117,1,114,202,
+ 87,0,89,0,100,10,125,7,126,7,113,4,130,0,87,0,
+ 89,0,100,10,125,7,126,7,113,4,100,10,125,7,126,7,
+ 48,0,48,0,113,4,124,0,83,0,41,11,122,238,70,105,
+ 103,117,114,101,32,111,117,116,32,119,104,97,116,32,95,95,
+ 105,109,112,111,114,116,95,95,32,115,104,111,117,108,100,32,
+ 114,101,116,117,114,110,46,10,10,32,32,32,32,84,104,101,
+ 32,105,109,112,111,114,116,95,32,112,97,114,97,109,101,116,
+ 101,114,32,105,115,32,97,32,99,97,108,108,97,98,108,101,
+ 32,119,104,105,99,104,32,116,97,107,101,115,32,116,104,101,
+ 32,110,97,109,101,32,111,102,32,109,111,100,117,108,101,32,
+ 116,111,10,32,32,32,32,105,109,112,111,114,116,46,32,73,
+ 116,32,105,115,32,114,101,113,117,105,114,101,100,32,116,111,
+ 32,100,101,99,111,117,112,108,101,32,116,104,101,32,102,117,
+ 110,99,116,105,111,110,32,102,114,111,109,32,97,115,115,117,
+ 109,105,110,103,32,105,109,112,111,114,116,108,105,98,39,115,
+ 10,32,32,32,32,105,109,112,111,114,116,32,105,109,112,108,
+ 101,109,101,110,116,97,116,105,111,110,32,105,115,32,100,101,
+ 115,105,114,101,100,46,10,10,32,32,32,32,122,8,46,95,
+ 95,97,108,108,95,95,122,13,96,96,102,114,111,109,32,108,
+ 105,115,116,39,39,122,8,73,116,101,109,32,105,110,32,122,
+ 18,32,109,117,115,116,32,98,101,32,115,116,114,44,32,110,
+ 111,116,32,250,1,42,218,7,95,95,97,108,108,95,95,84,
+ 114,209,0,0,0,114,182,0,0,0,78,41,16,114,195,0,
+ 0,0,114,196,0,0,0,114,1,0,0,0,114,197,0,0,
+ 0,114,14,0,0,0,114,4,0,0,0,218,16,95,104,97,
+ 110,100,108,101,95,102,114,111,109,108,105,115,116,114,212,0,
+ 0,0,114,44,0,0,0,114,66,0,0,0,114,203,0,0,
+ 0,114,17,0,0,0,114,15,0,0,0,114,91,0,0,0,
+ 114,34,0,0,0,114,206,0,0,0,41,8,114,95,0,0,
+ 0,218,8,102,114,111,109,108,105,115,116,114,204,0,0,0,
+ 114,210,0,0,0,218,1,120,90,5,119,104,101,114,101,90,
+ 9,102,114,111,109,95,110,97,109,101,90,3,101,120,99,114,
+ 10,0,0,0,114,10,0,0,0,114,11,0,0,0,114,213,
+ 0,0,0,0,4,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,14,4,10,1,
+ 16,255,2,2,12,1,26,1,114,213,0,0,0,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,6,0,
+ 0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,
+ 1,161,1,125,1,124,0,160,0,100,2,161,1,125,2,124,
+ 1,100,3,117,1,114,82,124,2,100,3,117,1,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,117,1,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,118,1,114,142,124,1,160,5,100,
+ 12,161,1,100,13,25,0,125,1,124,1,83,0,41,14,122,
+ 167,67,97,108,99,117,108,97,116,101,32,119,104,97,116,32,
+ 95,95,112,97,99,107,97,103,101,95,95,32,115,104,111,117,
+ 108,100,32,98,101,46,10,10,32,32,32,32,95,95,112,97,
+ 99,107,97,103,101,95,95,32,105,115,32,110,111,116,32,103,
+ 117,97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,
+ 100,101,102,105,110,101,100,32,111,114,32,99,111,117,108,100,
+ 32,98,101,32,115,101,116,32,116,111,32,78,111,110,101,10,
+ 32,32,32,32,116,111,32,114,101,112,114,101,115,101,110,116,
+ 32,116,104,97,116,32,105,116,115,32,112,114,111,112,101,114,
+ 32,118,97,108,117,101,32,105,115,32,117,110,107,110,111,119,
+ 110,46,10,10,32,32,32,32,114,144,0,0,0,114,104,0,
+ 0,0,78,122,32,95,95,112,97,99,107,97,103,101,95,95,
+ 32,33,61,32,95,95,115,112,101,99,95,95,46,112,97,114,
+ 101,110,116,32,40,122,4,32,33,61,32,250,1,41,233,3,
+ 0,0,0,41,1,90,10,115,116,97,99,107,108,101,118,101,
+ 108,122,89,99,97,110,39,116,32,114,101,115,111,108,118,101,
+ 32,112,97,99,107,97,103,101,32,102,114,111,109,32,95,95,
+ 115,112,101,99,95,95,32,111,114,32,95,95,112,97,99,107,
+ 97,103,101,95,95,44,32,102,97,108,108,105,110,103,32,98,
+ 97,99,107,32,111,110,32,95,95,110,97,109,101,95,95,32,
+ 97,110,100,32,95,95,112,97,116,104,95,95,114,1,0,0,
+ 0,114,140,0,0,0,114,127,0,0,0,114,22,0,0,0,
+ 41,6,114,34,0,0,0,114,129,0,0,0,114,191,0,0,
+ 0,114,192,0,0,0,114,193,0,0,0,114,128,0,0,0,
+ 41,3,218,7,103,108,111,98,97,108,115,114,185,0,0,0,
+ 114,94,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 11,0,0,0,218,17,95,99,97,108,99,95,95,95,112,97,
+ 99,107,97,103,101,95,95,37,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,117,1,114,30,124,1,110,2,105,0,125,6,
+ 116,1,124,6,131,1,125,7,116,0,124,0,124,7,124,4,
+ 131,3,125,5,124,3,115,150,124,4,100,1,107,2,114,84,
+ 116,0,124,0,160,2,100,3,161,1,100,1,25,0,131,1,
+ 83,0,124,0,115,92,124,5,83,0,116,3,124,0,131,1,
+ 116,3,124,0,160,2,100,3,161,1,100,1,25,0,131,1,
+ 24,0,125,8,116,4,106,5,124,5,106,6,100,2,116,3,
+ 124,5,106,6,131,1,124,8,24,0,133,2,25,0,25,0,
+ 83,0,110,26,116,7,124,5,100,4,131,2,114,172,116,8,
+ 124,5,124,3,116,0,131,3,83,0,124,5,83,0,100,2,
+ 83,0,41,5,97,215,1,0,0,73,109,112,111,114,116,32,
+ 97,32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,
+ 104,101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,
+ 117,109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,
+ 32,105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,
+ 32,105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,
+ 114,105,110,103,32,102,114,111,109,10,32,32,32,32,116,111,
+ 32,104,97,110,100,108,101,32,114,101,108,97,116,105,118,101,
+ 32,105,109,112,111,114,116,115,46,32,84,104,101,32,39,108,
+ 111,99,97,108,115,39,32,97,114,103,117,109,101,110,116,32,
+ 105,115,32,105,103,110,111,114,101,100,46,32,84,104,101,10,
+ 32,32,32,32,39,102,114,111,109,108,105,115,116,39,32,97,
+ 114,103,117,109,101,110,116,32,115,112,101,99,105,102,105,101,
+ 115,32,119,104,97,116,32,115,104,111,117,108,100,32,101,120,
+ 105,115,116,32,97,115,32,97,116,116,114,105,98,117,116,101,
+ 115,32,111,110,32,116,104,101,32,109,111,100,117,108,101,10,
+ 32,32,32,32,98,101,105,110,103,32,105,109,112,111,114,116,
+ 101,100,32,40,101,46,103,46,32,96,96,102,114,111,109,32,
+ 109,111,100,117,108,101,32,105,109,112,111,114,116,32,60,102,
+ 114,111,109,108,105,115,116,62,96,96,41,46,32,32,84,104,
+ 101,32,39,108,101,118,101,108,39,10,32,32,32,32,97,114,
+ 103,117,109,101,110,116,32,114,101,112,114,101,115,101,110,116,
+ 115,32,116,104,101,32,112,97,99,107,97,103,101,32,108,111,
+ 99,97,116,105,111,110,32,116,111,32,105,109,112,111,114,116,
+ 32,102,114,111,109,32,105,110,32,97,32,114,101,108,97,116,
+ 105,118,101,10,32,32,32,32,105,109,112,111,114,116,32,40,
+ 101,46,103,46,32,96,96,102,114,111,109,32,46,46,112,107,
+ 103,32,105,109,112,111,114,116,32,109,111,100,96,96,32,119,
+ 111,117,108,100,32,104,97,118,101,32,97,32,39,108,101,118,
+ 101,108,39,32,111,102,32,50,41,46,10,10,32,32,32,32,
+ 114,22,0,0,0,78,114,127,0,0,0,114,140,0,0,0,
+ 41,9,114,208,0,0,0,114,219,0,0,0,218,9,112,97,
+ 114,116,105,116,105,111,110,114,184,0,0,0,114,15,0,0,
+ 0,114,91,0,0,0,114,1,0,0,0,114,4,0,0,0,
+ 114,213,0,0,0,41,9,114,17,0,0,0,114,218,0,0,
+ 0,218,6,108,111,99,97,108,115,114,214,0,0,0,114,186,
+ 0,0,0,114,95,0,0,0,90,8,103,108,111,98,97,108,
+ 115,95,114,185,0,0,0,90,7,99,117,116,95,111,102,102,
+ 114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
+ 10,95,95,105,109,112,111,114,116,95,95,64,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,117,0,114,30,116,2,100,1,124,0,23,0,131,
+ 1,130,1,116,3,124,1,131,1,83,0,41,2,78,122,25,
+ 110,111,32,98,117,105,108,116,45,105,110,32,109,111,100,117,
+ 108,101,32,110,97,109,101,100,32,41,4,114,159,0,0,0,
+ 114,166,0,0,0,114,78,0,0,0,114,158,0,0,0,41,
+ 2,114,17,0,0,0,114,94,0,0,0,114,10,0,0,0,
+ 114,10,0,0,0,114,11,0,0,0,218,18,95,98,117,105,
+ 108,116,105,110,95,102,114,111,109,95,110,97,109,101,101,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,118,0,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,118,1,
+ 114,138,116,13,124,8,131,1,125,9,110,10,116,1,106,3,
+ 124,8,25,0,125,9,116,14,124,7,124,8,124,9,131,3,
+ 1,0,113,114,100,2,83,0,41,3,122,250,83,101,116,117,
+ 112,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105,
+ 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,32,
+ 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115,
+ 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116,
+ 104,101,109,10,32,32,32,32,105,110,116,111,32,116,104,101,
+ 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99,
+ 101,46,10,10,32,32,32,32,65,115,32,115,121,115,32,105,
+ 115,32,110,101,101,100,101,100,32,102,111,114,32,115,121,115,
+ 46,109,111,100,117,108,101,115,32,97,99,99,101,115,115,32,
+ 97,110,100,32,95,105,109,112,32,105,115,32,110,101,101,100,
+ 101,100,32,116,111,32,108,111,97,100,32,98,117,105,108,116,
+ 45,105,110,10,32,32,32,32,109,111,100,117,108,101,115,44,
+ 32,116,104,111,115,101,32,116,119,111,32,109,111,100,117,108,
+ 101,115,32,109,117,115,116,32,98,101,32,101,120,112,108,105,
+ 99,105,116,108,121,32,112,97,115,115,101,100,32,105,110,46,
+ 10,10,32,32,32,32,41,3,114,23,0,0,0,114,191,0,
+ 0,0,114,63,0,0,0,78,41,15,114,56,0,0,0,114,
+ 15,0,0,0,114,14,0,0,0,114,91,0,0,0,218,5,
+ 105,116,101,109,115,114,195,0,0,0,114,77,0,0,0,114,
+ 159,0,0,0,114,87,0,0,0,114,173,0,0,0,114,141,
+ 0,0,0,114,147,0,0,0,114,1,0,0,0,114,223,0,
+ 0,0,114,5,0,0,0,41,10,218,10,115,121,115,95,109,
+ 111,100,117,108,101,218,11,95,105,109,112,95,109,111,100,117,
+ 108,101,90,11,109,111,100,117,108,101,95,116,121,112,101,114,
+ 17,0,0,0,114,95,0,0,0,114,108,0,0,0,114,94,
+ 0,0,0,90,11,115,101,108,102,95,109,111,100,117,108,101,
+ 90,12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,
+ 98,117,105,108,116,105,110,95,109,111,100,117,108,101,114,10,
+ 0,0,0,114,10,0,0,0,114,11,0,0,0,218,6,95,
+ 115,101,116,117,112,108,4,0,0,115,36,0,0,0,0,9,
+ 4,1,4,3,8,1,18,1,10,1,10,1,6,1,10,1,
+ 6,2,2,1,10,1,12,3,10,1,8,1,10,1,10,2,
+ 10,1,114,227,0,0,0,99,2,0,0,0,0,0,0,0,
+ 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,
+ 115,38,0,0,0,116,0,124,0,124,1,131,2,1,0,116,
+ 1,106,2,160,3,116,4,161,1,1,0,116,1,106,2,160,
+ 3,116,5,161,1,1,0,100,1,83,0,41,2,122,48,73,
+ 110,115,116,97,108,108,32,105,109,112,111,114,116,101,114,115,
+ 32,102,111,114,32,98,117,105,108,116,105,110,32,97,110,100,
+ 32,102,114,111,122,101,110,32,109,111,100,117,108,101,115,78,
+ 41,6,114,227,0,0,0,114,15,0,0,0,114,190,0,0,
+ 0,114,118,0,0,0,114,159,0,0,0,114,173,0,0,0,
+ 41,2,114,225,0,0,0,114,226,0,0,0,114,10,0,0,
+ 0,114,10,0,0,0,114,11,0,0,0,218,8,95,105,110,
+ 115,116,97,108,108,143,4,0,0,115,6,0,0,0,0,2,
+ 10,2,12,1,114,228,0,0,0,99,0,0,0,0,0,0,
+ 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0,
+ 0,0,115,32,0,0,0,100,1,100,2,108,0,125,0,124,
+ 0,97,1,124,0,160,2,116,3,106,4,116,5,25,0,161,
+ 1,1,0,100,2,83,0,41,3,122,57,73,110,115,116,97,
+ 108,108,32,105,109,112,111,114,116,101,114,115,32,116,104,97,
+ 116,32,114,101,113,117,105,114,101,32,101,120,116,101,114,110,
+ 97,108,32,102,105,108,101,115,121,115,116,101,109,32,97,99,
+ 99,101,115,115,114,22,0,0,0,78,41,6,218,26,95,102,
+ 114,111,122,101,110,95,105,109,112,111,114,116,108,105,98,95,
+ 101,120,116,101,114,110,97,108,114,125,0,0,0,114,228,0,
+ 0,0,114,15,0,0,0,114,91,0,0,0,114,1,0,0,
+ 0,41,1,114,229,0,0,0,114,10,0,0,0,114,10,0,
+ 0,0,114,11,0,0,0,218,27,95,105,110,115,116,97,108,
+ 108,95,101,120,116,101,114,110,97,108,95,105,109,112,111,114,
+ 116,101,114,115,151,4,0,0,115,6,0,0,0,0,3,8,
+ 1,4,1,114,230,0,0,0,41,2,78,78,41,1,78,41,
+ 2,78,114,22,0,0,0,41,4,78,78,114,10,0,0,0,
+ 114,22,0,0,0,41,50,114,3,0,0,0,114,125,0,0,
+ 0,114,12,0,0,0,114,18,0,0,0,114,58,0,0,0,
+ 114,33,0,0,0,114,42,0,0,0,114,19,0,0,0,114,
+ 20,0,0,0,114,48,0,0,0,114,49,0,0,0,114,52,
+ 0,0,0,114,64,0,0,0,114,66,0,0,0,114,75,0,
+ 0,0,114,85,0,0,0,114,89,0,0,0,114,96,0,0,
+ 0,114,110,0,0,0,114,111,0,0,0,114,90,0,0,0,
+ 114,141,0,0,0,114,147,0,0,0,114,151,0,0,0,114,
+ 106,0,0,0,114,92,0,0,0,114,157,0,0,0,114,158,
+ 0,0,0,114,93,0,0,0,114,159,0,0,0,114,173,0,
+ 0,0,114,178,0,0,0,114,187,0,0,0,114,189,0,0,
+ 0,114,194,0,0,0,114,200,0,0,0,90,15,95,69,82,
+ 82,95,77,83,71,95,80,82,69,70,73,88,114,202,0,0,
+ 0,114,205,0,0,0,218,6,111,98,106,101,99,116,114,206,
+ 0,0,0,114,207,0,0,0,114,208,0,0,0,114,213,0,
+ 0,0,114,219,0,0,0,114,222,0,0,0,114,223,0,0,
+ 0,114,227,0,0,0,114,228,0,0,0,114,230,0,0,0,
+ 114,10,0,0,0,114,10,0,0,0,114,10,0,0,0,114,
+ 11,0,0,0,218,8,60,109,111,100,117,108,101,62,1,0,
+ 0,0,115,94,0,0,0,4,24,4,2,8,8,8,8,4,
+ 2,4,3,16,4,14,68,14,21,14,16,8,37,8,17,8,
+ 11,14,8,8,11,8,12,8,16,8,36,14,101,16,26,10,
+ 45,14,72,8,17,8,17,8,30,8,37,8,42,8,15,14,
+ 75,14,79,14,13,8,9,8,9,10,47,8,16,4,1,8,
+ 2,8,32,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 8c1fa3cac8f..d67c2a8fee4 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -69,7 +69,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,
+ 0,115,10,0,0,0,136,0,116,0,106,1,118,0,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,
@@ -158,7 +158,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,
+ 0,131,1,68,0,93,42,125,4,124,4,116,1,118,0,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,
@@ -189,459 +189,459 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,48,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,48,
- 0,124,2,106,2,100,2,64,0,124,1,107,2,83,0,41,
- 3,122,49,84,101,115,116,32,119,104,101,116,104,101,114,32,
- 116,104,101,32,112,97,116,104,32,105,115,32,116,104,101,32,
- 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,48,0,0,
- 0,218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,
- 111,100,101,41,3,114,43,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,52,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,52,0,0,0,114,47,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,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,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,52,0,0,0,114,47,
- 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,55,
- 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,38,0,
- 0,0,233,3,0,0,0,41,3,114,10,0,0,0,114,30,
- 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,47,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,58,0,0,0,233,182,1,0,0,99,
- 3,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,
- 11,0,0,0,67,0,0,0,115,182,0,0,0,100,1,160,
- 0,124,0,116,1,124,0,131,1,161,2,125,3,116,2,160,
- 3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106,
- 6,66,0,124,2,100,2,64,0,161,3,125,4,122,70,116,
- 7,160,8,124,4,100,3,161,2,143,26,125,5,124,5,160,
- 9,124,1,161,1,1,0,87,0,100,4,4,0,4,0,131,
- 3,1,0,110,16,49,0,115,94,48,0,1,0,1,0,1,
- 0,89,0,1,0,116,2,160,10,124,3,124,0,161,2,1,
- 0,87,0,110,58,4,0,116,11,107,10,114,176,1,0,1,
- 0,1,0,122,14,116,2,160,12,124,3,161,1,1,0,87,
- 0,110,20,4,0,116,11,107,10,114,168,1,0,1,0,1,
- 0,89,0,110,2,48,0,130,0,89,0,110,2,48,0,100,
- 4,83,0,41,5,122,162,66,101,115,116,45,101,102,102,111,
- 114,116,32,102,117,110,99,116,105,111,110,32,116,111,32,119,
- 114,105,116,101,32,100,97,116,97,32,116,111,32,97,32,112,
- 97,116,104,32,97,116,111,109,105,99,97,108,108,121,46,10,
- 32,32,32,32,66,101,32,112,114,101,112,97,114,101,100,32,
- 116,111,32,104,97,110,100,108,101,32,97,32,70,105,108,101,
- 69,120,105,115,116,115,69,114,114,111,114,32,105,102,32,99,
- 111,110,99,117,114,114,101,110,116,32,119,114,105,116,105,110,
- 103,32,111,102,32,116,104,101,10,32,32,32,32,116,101,109,
- 112,111,114,97,114,121,32,102,105,108,101,32,105,115,32,97,
- 116,116,101,109,112,116,101,100,46,250,5,123,125,46,123,125,
- 114,59,0,0,0,90,2,119,98,78,41,13,218,6,102,111,
- 114,109,97,116,218,2,105,100,114,2,0,0,0,90,4,111,
- 112,101,110,90,6,79,95,69,88,67,76,90,7,79,95,67,
- 82,69,65,84,90,8,79,95,87,82,79,78,76,89,218,3,
- 95,105,111,218,6,70,105,108,101,73,79,218,5,119,114,105,
- 116,101,218,7,114,101,112,108,97,99,101,114,49,0,0,0,
- 90,6,117,110,108,105,110,107,41,6,114,43,0,0,0,114,
- 25,0,0,0,114,51,0,0,0,90,8,112,97,116,104,95,
- 116,109,112,90,2,102,100,218,4,102,105,108,101,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,218,13,95,119,
- 114,105,116,101,95,97,116,111,109,105,99,120,0,0,0,115,
- 30,0,0,0,0,5,16,1,6,1,16,0,6,255,4,2,
- 2,3,14,1,40,1,16,1,14,1,2,1,14,1,14,1,
- 6,1,114,68,0,0,0,105,94,13,0,0,114,27,0,0,
- 0,114,16,0,0,0,115,2,0,0,0,13,10,90,11,95,
- 95,112,121,99,97,99,104,101,95,95,122,4,111,112,116,45,
- 122,3,46,112,121,122,4,46,112,121,99,78,41,1,218,12,
- 111,112,116,105,109,105,122,97,116,105,111,110,99,2,0,0,
- 0,0,0,0,0,1,0,0,0,12,0,0,0,5,0,0,
- 0,67,0,0,0,115,88,1,0,0,124,1,100,1,107,9,
- 114,52,116,0,160,1,100,2,116,2,161,2,1,0,124,2,
- 100,1,107,9,114,40,100,3,125,3,116,3,124,3,131,1,
- 130,1,124,1,114,48,100,4,110,2,100,5,125,2,116,4,
- 160,5,124,0,161,1,125,0,116,6,124,0,131,1,92,2,
- 125,4,125,5,124,5,160,7,100,6,161,1,92,3,125,6,
- 125,7,125,8,116,8,106,9,106,10,125,9,124,9,100,1,
- 107,8,114,114,116,11,100,7,131,1,130,1,100,4,160,12,
- 124,6,114,126,124,6,110,2,124,8,124,7,124,9,103,3,
- 161,1,125,10,124,2,100,1,107,8,114,172,116,8,106,13,
- 106,14,100,8,107,2,114,164,100,4,125,2,110,8,116,8,
- 106,13,106,14,125,2,116,15,124,2,131,1,125,2,124,2,
- 100,4,107,3,114,224,124,2,160,16,161,0,115,210,116,17,
- 100,9,160,18,124,2,161,1,131,1,130,1,100,10,160,18,
- 124,10,116,19,124,2,161,3,125,10,124,10,116,20,100,8,
- 25,0,23,0,125,11,116,8,106,21,100,1,107,9,144,1,
- 114,76,116,22,124,4,131,1,144,1,115,16,116,23,116,4,
- 160,24,161,0,124,4,131,2,125,4,124,4,100,5,25,0,
- 100,11,107,2,144,1,114,56,124,4,100,8,25,0,116,25,
- 107,7,144,1,114,56,124,4,100,12,100,1,133,2,25,0,
- 125,4,116,23,116,8,106,21,124,4,160,26,116,25,161,1,
- 124,11,131,3,83,0,116,23,124,4,116,27,124,11,131,3,
- 83,0,41,13,97,254,2,0,0,71,105,118,101,110,32,116,
- 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121,
- 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104,
- 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112,
- 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104,
- 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32,
- 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115,
- 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114,
- 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32,
- 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32,
- 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32,
- 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105,
- 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100,
- 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105,
- 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101,
- 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101,
- 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105,
- 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10,
- 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101,
- 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109,
- 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32,
- 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103,
- 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10,
- 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109,
- 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100,
- 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32,
- 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108,
- 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32,
- 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32,
- 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101,
- 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32,
- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73,
- 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101,
- 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32,
- 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105,
- 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101,
- 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116,
- 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116,
- 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105,
- 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101,
- 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116,
- 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109,
- 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46,
- 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112,
- 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104,
- 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104,
- 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101,
- 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100,
- 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101,
- 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114,
- 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99,
- 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109,
- 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100,
- 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101,
- 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110,
- 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32,
- 78,111,110,101,114,39,0,0,0,114,38,0,0,0,218,1,
- 46,250,36,115,121,115,46,105,109,112,108,101,109,101,110,116,
+ 8,0,0,0,67,0,0,0,115,48,0,0,0,122,12,116,
+ 0,124,0,131,1,125,2,87,0,110,20,4,0,116,1,121,
+ 32,1,0,1,0,1,0,89,0,100,1,83,0,48,0,124,
+ 2,106,2,100,2,64,0,124,1,107,2,83,0,41,3,122,
+ 49,84,101,115,116,32,119,104,101,116,104,101,114,32,116,104,
+ 101,32,112,97,116,104,32,105,115,32,116,104,101,32,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,48,0,0,0,218,
+ 7,79,83,69,114,114,111,114,218,7,115,116,95,109,111,100,
+ 101,41,3,114,43,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,12,1,8,1,114,
+ 52,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,52,0,0,0,114,47,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,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,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,52,0,0,0,114,47,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,55,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,118,0,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,38,0,0,0,
+ 233,3,0,0,0,41,3,114,10,0,0,0,114,30,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,47,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,58,0,0,0,233,182,1,0,0,99,3,0,
+ 0,0,0,0,0,0,0,0,0,0,6,0,0,0,11,0,
+ 0,0,67,0,0,0,115,178,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,70,116,7,160,
+ 8,124,4,100,3,161,2,143,26,125,5,124,5,160,9,124,
+ 1,161,1,1,0,87,0,100,4,4,0,4,0,131,3,1,
+ 0,110,16,49,0,115,94,48,0,1,0,1,0,1,0,89,
+ 0,1,0,116,2,160,10,124,3,124,0,161,2,1,0,87,
+ 0,110,54,4,0,116,11,121,172,1,0,1,0,1,0,122,
+ 14,116,2,160,12,124,3,161,1,1,0,87,0,110,18,4,
+ 0,116,11,121,164,1,0,1,0,1,0,89,0,110,2,48,
+ 0,130,0,89,0,110,2,48,0,100,4,83,0,41,5,122,
+ 162,66,101,115,116,45,101,102,102,111,114,116,32,102,117,110,
+ 99,116,105,111,110,32,116,111,32,119,114,105,116,101,32,100,
+ 97,116,97,32,116,111,32,97,32,112,97,116,104,32,97,116,
+ 111,109,105,99,97,108,108,121,46,10,32,32,32,32,66,101,
+ 32,112,114,101,112,97,114,101,100,32,116,111,32,104,97,110,
+ 100,108,101,32,97,32,70,105,108,101,69,120,105,115,116,115,
+ 69,114,114,111,114,32,105,102,32,99,111,110,99,117,114,114,
+ 101,110,116,32,119,114,105,116,105,110,103,32,111,102,32,116,
+ 104,101,10,32,32,32,32,116,101,109,112,111,114,97,114,121,
+ 32,102,105,108,101,32,105,115,32,97,116,116,101,109,112,116,
+ 101,100,46,250,5,123,125,46,123,125,114,59,0,0,0,90,
+ 2,119,98,78,41,13,218,6,102,111,114,109,97,116,218,2,
+ 105,100,114,2,0,0,0,90,4,111,112,101,110,90,6,79,
+ 95,69,88,67,76,90,7,79,95,67,82,69,65,84,90,8,
+ 79,95,87,82,79,78,76,89,218,3,95,105,111,218,6,70,
+ 105,108,101,73,79,218,5,119,114,105,116,101,218,7,114,101,
+ 112,108,97,99,101,114,49,0,0,0,90,6,117,110,108,105,
+ 110,107,41,6,114,43,0,0,0,114,25,0,0,0,114,51,
+ 0,0,0,90,8,112,97,116,104,95,116,109,112,90,2,102,
+ 100,218,4,102,105,108,101,114,3,0,0,0,114,3,0,0,
+ 0,114,6,0,0,0,218,13,95,119,114,105,116,101,95,97,
+ 116,111,109,105,99,120,0,0,0,115,30,0,0,0,0,5,
+ 16,1,6,1,16,0,6,255,4,2,2,3,14,1,40,1,
+ 16,1,12,1,2,1,14,1,12,1,6,1,114,68,0,0,
+ 0,105,97,13,0,0,114,27,0,0,0,114,16,0,0,0,
+ 115,2,0,0,0,13,10,90,11,95,95,112,121,99,97,99,
+ 104,101,95,95,122,4,111,112,116,45,122,3,46,112,121,122,
+ 4,46,112,121,99,78,41,1,218,12,111,112,116,105,109,105,
+ 122,97,116,105,111,110,99,2,0,0,0,0,0,0,0,1,
+ 0,0,0,12,0,0,0,5,0,0,0,67,0,0,0,115,
+ 88,1,0,0,124,1,100,1,117,1,114,52,116,0,160,1,
+ 100,2,116,2,161,2,1,0,124,2,100,1,117,1,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,117,0,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,117,0,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,117,1,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,118,1,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,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,233,0,0,0,0,122,24,123,33,
- 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110,
- 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,250,
- 1,58,114,27,0,0,0,41,28,218,9,95,119,97,114,110,
- 105,110,103,115,218,4,119,97,114,110,218,18,68,101,112,114,
- 101,99,97,116,105,111,110,87,97,114,110,105,110,103,218,9,
- 84,121,112,101,69,114,114,111,114,114,2,0,0,0,218,6,
- 102,115,112,97,116,104,114,46,0,0,0,114,40,0,0,0,
- 114,8,0,0,0,218,14,105,109,112,108,101,109,101,110,116,
- 97,116,105,111,110,218,9,99,97,99,104,101,95,116,97,103,
- 218,19,78,111,116,73,109,112,108,101,109,101,110,116,101,100,
- 69,114,114,111,114,114,35,0,0,0,218,5,102,108,97,103,
- 115,218,8,111,112,116,105,109,105,122,101,218,3,115,116,114,
- 218,7,105,115,97,108,110,117,109,218,10,86,97,108,117,101,
- 69,114,114,111,114,114,61,0,0,0,218,4,95,79,80,84,
- 218,17,66,89,84,69,67,79,68,69,95,83,85,70,70,73,
- 88,69,83,218,14,112,121,99,97,99,104,101,95,112,114,101,
- 102,105,120,114,58,0,0,0,114,37,0,0,0,114,54,0,
- 0,0,114,30,0,0,0,218,6,108,115,116,114,105,112,218,
- 8,95,80,89,67,65,67,72,69,41,12,114,43,0,0,0,
- 90,14,100,101,98,117,103,95,111,118,101,114,114,105,100,101,
- 114,69,0,0,0,218,7,109,101,115,115,97,103,101,218,4,
- 104,101,97,100,114,45,0,0,0,90,4,98,97,115,101,218,
- 3,115,101,112,218,4,114,101,115,116,90,3,116,97,103,90,
- 15,97,108,109,111,115,116,95,102,105,108,101,110,97,109,101,
- 218,8,102,105,108,101,110,97,109,101,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,17,99,97,99,104,101,
- 95,102,114,111,109,95,115,111,117,114,99,101,41,1,0,0,
- 115,72,0,0,0,0,18,8,1,6,1,2,255,4,2,8,
- 1,4,1,8,1,12,1,10,1,12,1,16,1,8,1,8,
- 1,8,1,24,1,8,1,12,1,6,2,8,1,8,1,8,
- 1,8,1,14,1,14,1,12,1,12,9,10,1,14,5,28,
- 1,12,4,2,1,4,1,8,1,2,253,4,5,114,97,0,
- 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,10,
- 0,0,0,5,0,0,0,67,0,0,0,115,46,1,0,0,
- 116,0,106,1,106,2,100,1,107,8,114,20,116,3,100,2,
- 131,1,130,1,116,4,160,5,124,0,161,1,125,0,116,6,
- 124,0,131,1,92,2,125,1,125,2,100,3,125,3,116,0,
- 106,7,100,1,107,9,114,102,116,0,106,7,160,8,116,9,
- 161,1,125,4,124,1,160,10,124,4,116,11,23,0,161,1,
- 114,102,124,1,116,12,124,4,131,1,100,1,133,2,25,0,
- 125,1,100,4,125,3,124,3,115,144,116,6,124,1,131,1,
- 92,2,125,1,125,5,124,5,116,13,107,3,114,144,116,14,
- 116,13,155,0,100,5,124,0,155,2,157,3,131,1,130,1,
- 124,2,160,15,100,6,161,1,125,6,124,6,100,7,107,7,
- 114,178,116,14,100,8,124,2,155,2,157,2,131,1,130,1,
- 110,92,124,6,100,9,107,2,144,1,114,14,124,2,160,16,
- 100,6,100,10,161,2,100,11,25,0,125,7,124,7,160,10,
- 116,17,161,1,115,228,116,14,100,12,116,17,155,2,157,2,
- 131,1,130,1,124,7,116,12,116,17,131,1,100,1,133,2,
- 25,0,125,8,124,8,160,18,161,0,144,1,115,14,116,14,
- 100,13,124,7,155,2,100,14,157,3,131,1,130,1,124,2,
- 160,19,100,6,161,1,100,15,25,0,125,9,116,20,124,1,
- 124,9,116,21,100,15,25,0,23,0,131,2,83,0,41,16,
- 97,110,1,0,0,71,105,118,101,110,32,116,104,101,32,112,
- 97,116,104,32,116,111,32,97,32,46,112,121,99,46,32,102,
- 105,108,101,44,32,114,101,116,117,114,110,32,116,104,101,32,
- 112,97,116,104,32,116,111,32,105,116,115,32,46,112,121,32,
- 102,105,108,101,46,10,10,32,32,32,32,84,104,101,32,46,
- 112,121,99,32,102,105,108,101,32,100,111,101,115,32,110,111,
- 116,32,110,101,101,100,32,116,111,32,101,120,105,115,116,59,
- 32,116,104,105,115,32,115,105,109,112,108,121,32,114,101,116,
- 117,114,110,115,32,116,104,101,32,112,97,116,104,32,116,111,
- 10,32,32,32,32,116,104,101,32,46,112,121,32,102,105,108,
- 101,32,99,97,108,99,117,108,97,116,101,100,32,116,111,32,
- 99,111,114,114,101,115,112,111,110,100,32,116,111,32,116,104,
- 101,32,46,112,121,99,32,102,105,108,101,46,32,32,73,102,
- 32,112,97,116,104,32,100,111,101,115,10,32,32,32,32,110,
- 111,116,32,99,111,110,102,111,114,109,32,116,111,32,80,69,
- 80,32,51,49,52,55,47,52,56,56,32,102,111,114,109,97,
- 116,44,32,86,97,108,117,101,69,114,114,111,114,32,119,105,
- 108,108,32,98,101,32,114,97,105,115,101,100,46,32,73,102,
- 10,32,32,32,32,115,121,115,46,105,109,112,108,101,109,101,
- 110,116,97,116,105,111,110,46,99,97,99,104,101,95,116,97,
- 103,32,105,115,32,78,111,110,101,32,116,104,101,110,32,78,
- 111,116,73,109,112,108,101,109,101,110,116,101,100,69,114,114,
- 111,114,32,105,115,32,114,97,105,115,101,100,46,10,10,32,
- 32,32,32,78,114,71,0,0,0,70,84,122,31,32,110,111,
- 116,32,98,111,116,116,111,109,45,108,101,118,101,108,32,100,
- 105,114,101,99,116,111,114,121,32,105,110,32,114,70,0,0,
- 0,62,2,0,0,0,114,27,0,0,0,114,56,0,0,0,
- 122,29,101,120,112,101,99,116,101,100,32,111,110,108,121,32,
- 50,32,111,114,32,51,32,100,111,116,115,32,105,110,32,114,
- 56,0,0,0,114,27,0,0,0,233,254,255,255,255,122,53,
- 111,112,116,105,109,105,122,97,116,105,111,110,32,112,111,114,
- 116,105,111,110,32,111,102,32,102,105,108,101,110,97,109,101,
- 32,100,111,101,115,32,110,111,116,32,115,116,97,114,116,32,
- 119,105,116,104,32,122,19,111,112,116,105,109,105,122,97,116,
- 105,111,110,32,108,101,118,101,108,32,122,29,32,105,115,32,
- 110,111,116,32,97,110,32,97,108,112,104,97,110,117,109,101,
- 114,105,99,32,118,97,108,117,101,114,72,0,0,0,41,22,
- 114,8,0,0,0,114,79,0,0,0,114,80,0,0,0,114,
- 81,0,0,0,114,2,0,0,0,114,78,0,0,0,114,46,
- 0,0,0,114,89,0,0,0,114,29,0,0,0,114,30,0,
- 0,0,114,10,0,0,0,114,34,0,0,0,114,22,0,0,
- 0,114,91,0,0,0,114,86,0,0,0,218,5,99,111,117,
- 110,116,114,42,0,0,0,114,87,0,0,0,114,85,0,0,
- 0,218,9,112,97,114,116,105,116,105,111,110,114,37,0,0,
- 0,218,15,83,79,85,82,67,69,95,83,85,70,70,73,88,
- 69,83,41,10,114,43,0,0,0,114,93,0,0,0,90,16,
- 112,121,99,97,99,104,101,95,102,105,108,101,110,97,109,101,
- 90,23,102,111,117,110,100,95,105,110,95,112,121,99,97,99,
- 104,101,95,112,114,101,102,105,120,90,13,115,116,114,105,112,
- 112,101,100,95,112,97,116,104,90,7,112,121,99,97,99,104,
- 101,90,9,100,111,116,95,99,111,117,110,116,114,69,0,0,
- 0,90,9,111,112,116,95,108,101,118,101,108,90,13,98,97,
- 115,101,95,102,105,108,101,110,97,109,101,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,17,115,111,117,114,
- 99,101,95,102,114,111,109,95,99,97,99,104,101,112,1,0,
- 0,115,52,0,0,0,0,9,12,1,8,1,10,1,12,1,
- 4,1,10,1,12,1,14,1,16,1,4,1,4,1,12,1,
- 8,1,18,2,10,1,8,1,16,1,10,1,16,1,10,1,
- 14,2,16,1,10,1,16,2,14,1,114,102,0,0,0,99,
- 1,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,
- 9,0,0,0,67,0,0,0,115,126,0,0,0,116,0,124,
- 0,131,1,100,1,107,2,114,16,100,2,83,0,124,0,160,
- 1,100,3,161,1,92,3,125,1,125,2,125,3,124,1,114,
- 56,124,3,160,2,161,0,100,4,100,5,133,2,25,0,100,
- 6,107,3,114,60,124,0,83,0,122,12,116,3,124,0,131,
- 1,125,4,87,0,110,36,4,0,116,4,116,5,102,2,107,
- 10,114,108,1,0,1,0,1,0,124,0,100,2,100,5,133,
- 2,25,0,125,4,89,0,110,2,48,0,116,6,124,4,131,
- 1,114,122,124,4,83,0,124,0,83,0,41,7,122,188,67,
- 111,110,118,101,114,116,32,97,32,98,121,116,101,99,111,100,
- 101,32,102,105,108,101,32,112,97,116,104,32,116,111,32,97,
- 32,115,111,117,114,99,101,32,112,97,116,104,32,40,105,102,
- 32,112,111,115,115,105,98,108,101,41,46,10,10,32,32,32,
- 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,101,
- 120,105,115,116,115,32,112,117,114,101,108,121,32,102,111,114,
- 32,98,97,99,107,119,97,114,100,115,45,99,111,109,112,97,
- 116,105,98,105,108,105,116,121,32,102,111,114,10,32,32,32,
- 32,80,121,73,109,112,111,114,116,95,69,120,101,99,67,111,
- 100,101,77,111,100,117,108,101,87,105,116,104,70,105,108,101,
- 110,97,109,101,115,40,41,32,105,110,32,116,104,101,32,67,
- 32,65,80,73,46,10,10,32,32,32,32,114,72,0,0,0,
- 78,114,70,0,0,0,233,253,255,255,255,233,255,255,255,255,
- 90,2,112,121,41,7,114,22,0,0,0,114,40,0,0,0,
- 218,5,108,111,119,101,114,114,102,0,0,0,114,81,0,0,
- 0,114,86,0,0,0,114,53,0,0,0,41,5,218,13,98,
- 121,116,101,99,111,100,101,95,112,97,116,104,114,95,0,0,
- 0,114,44,0,0,0,90,9,101,120,116,101,110,115,105,111,
- 110,218,11,115,111,117,114,99,101,95,112,97,116,104,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,218,15,95,
- 103,101,116,95,115,111,117,114,99,101,102,105,108,101,152,1,
- 0,0,115,20,0,0,0,0,7,12,1,4,1,16,1,24,
- 1,4,1,2,1,12,1,18,1,18,1,114,108,0,0,0,
- 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
- 0,8,0,0,0,67,0,0,0,115,74,0,0,0,124,0,
- 160,0,116,1,116,2,131,1,161,1,114,48,122,10,116,3,
- 124,0,131,1,87,0,83,0,4,0,116,4,107,10,114,44,
- 1,0,1,0,1,0,89,0,113,70,48,0,110,22,124,0,
- 160,0,116,1,116,5,131,1,161,1,114,66,124,0,83,0,
- 100,0,83,0,100,0,83,0,169,1,78,41,6,218,8,101,
- 110,100,115,119,105,116,104,218,5,116,117,112,108,101,114,101,
- 0,0,0,114,97,0,0,0,114,81,0,0,0,114,88,0,
- 0,0,41,1,114,96,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,11,95,103,101,116,95,99,
- 97,99,104,101,100,171,1,0,0,115,16,0,0,0,0,1,
- 14,1,2,1,10,1,14,1,8,1,14,1,4,2,114,112,
- 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 2,0,0,0,8,0,0,0,67,0,0,0,115,52,0,0,
- 0,122,14,116,0,124,0,131,1,106,1,125,1,87,0,110,
- 24,4,0,116,2,107,10,114,38,1,0,1,0,1,0,100,
- 1,125,1,89,0,110,2,48,0,124,1,100,2,79,0,125,
- 1,124,1,83,0,41,3,122,51,67,97,108,99,117,108,97,
- 116,101,32,116,104,101,32,109,111,100,101,32,112,101,114,109,
- 105,115,115,105,111,110,115,32,102,111,114,32,97,32,98,121,
- 116,101,99,111,100,101,32,102,105,108,101,46,114,59,0,0,
- 0,233,128,0,0,0,41,3,114,48,0,0,0,114,50,0,
- 0,0,114,49,0,0,0,41,2,114,43,0,0,0,114,51,
+ 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116,
+ 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,
+ 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32,
+ 32,78,122,70,116,104,101,32,100,101,98,117,103,95,111,118,
+ 101,114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,
+ 32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32,
+ 117,115,101,32,39,111,112,116,105,109,105,122,97,116,105,111,
+ 110,39,32,105,110,115,116,101,97,100,122,50,100,101,98,117,
+ 103,95,111,118,101,114,114,105,100,101,32,111,114,32,111,112,
+ 116,105,109,105,122,97,116,105,111,110,32,109,117,115,116,32,
+ 98,101,32,115,101,116,32,116,111,32,78,111,110,101,114,39,
+ 0,0,0,114,38,0,0,0,218,1,46,250,36,115,121,115,
+ 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46,
+ 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110,
+ 101,233,0,0,0,0,122,24,123,33,114,125,32,105,115,32,
+ 110,111,116,32,97,108,112,104,97,110,117,109,101,114,105,99,
+ 122,7,123,125,46,123,125,123,125,250,1,58,114,27,0,0,
+ 0,41,28,218,9,95,119,97,114,110,105,110,103,115,218,4,
+ 119,97,114,110,218,18,68,101,112,114,101,99,97,116,105,111,
+ 110,87,97,114,110,105,110,103,218,9,84,121,112,101,69,114,
+ 114,111,114,114,2,0,0,0,218,6,102,115,112,97,116,104,
+ 114,46,0,0,0,114,40,0,0,0,114,8,0,0,0,218,
+ 14,105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,
+ 9,99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,
+ 109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,
+ 35,0,0,0,218,5,102,108,97,103,115,218,8,111,112,116,
+ 105,109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,
+ 110,117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,
+ 61,0,0,0,218,4,95,79,80,84,218,17,66,89,84,69,
+ 67,79,68,69,95,83,85,70,70,73,88,69,83,218,14,112,
+ 121,99,97,99,104,101,95,112,114,101,102,105,120,114,58,0,
+ 0,0,114,37,0,0,0,114,54,0,0,0,114,30,0,0,
+ 0,218,6,108,115,116,114,105,112,218,8,95,80,89,67,65,
+ 67,72,69,41,12,114,43,0,0,0,90,14,100,101,98,117,
+ 103,95,111,118,101,114,114,105,100,101,114,69,0,0,0,218,
+ 7,109,101,115,115,97,103,101,218,4,104,101,97,100,114,45,
+ 0,0,0,90,4,98,97,115,101,218,3,115,101,112,218,4,
+ 114,101,115,116,90,3,116,97,103,90,15,97,108,109,111,115,
+ 116,95,102,105,108,101,110,97,109,101,218,8,102,105,108,101,
+ 110,97,109,101,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,218,17,99,97,99,104,101,95,102,114,111,109,95,
+ 115,111,117,114,99,101,45,1,0,0,115,72,0,0,0,0,
+ 18,8,1,6,1,2,255,4,2,8,1,4,1,8,1,12,
+ 1,10,1,12,1,16,1,8,1,8,1,8,1,24,1,8,
+ 1,12,1,6,2,8,1,8,1,8,1,8,1,14,1,14,
+ 1,12,1,12,9,10,1,14,5,28,1,12,4,2,1,4,
+ 1,8,1,2,253,4,5,114,97,0,0,0,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,10,0,0,0,5,0,0,
+ 0,67,0,0,0,115,46,1,0,0,116,0,106,1,106,2,
+ 100,1,117,0,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,117,1,
+ 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,118,1,114,178,116,14,100,8,
+ 124,2,155,2,157,2,131,1,130,1,110,92,124,6,100,9,
+ 107,2,144,1,114,14,124,2,160,16,100,6,100,10,161,2,
+ 100,11,25,0,125,7,124,7,160,10,116,17,161,1,115,228,
+ 116,14,100,12,116,17,155,2,157,2,131,1,130,1,124,7,
+ 116,12,116,17,131,1,100,1,133,2,25,0,125,8,124,8,
+ 160,18,161,0,144,1,115,14,116,14,100,13,124,7,155,2,
+ 100,14,157,3,131,1,130,1,124,2,160,19,100,6,161,1,
+ 100,15,25,0,125,9,116,20,124,1,124,9,116,21,100,15,
+ 25,0,23,0,131,2,83,0,41,16,97,110,1,0,0,71,
+ 105,118,101,110,32,116,104,101,32,112,97,116,104,32,116,111,
+ 32,97,32,46,112,121,99,46,32,102,105,108,101,44,32,114,
+ 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,
+ 111,32,105,116,115,32,46,112,121,32,102,105,108,101,46,10,
+ 10,32,32,32,32,84,104,101,32,46,112,121,99,32,102,105,
+ 108,101,32,100,111,101,115,32,110,111,116,32,110,101,101,100,
+ 32,116,111,32,101,120,105,115,116,59,32,116,104,105,115,32,
+ 115,105,109,112,108,121,32,114,101,116,117,114,110,115,32,116,
+ 104,101,32,112,97,116,104,32,116,111,10,32,32,32,32,116,
+ 104,101,32,46,112,121,32,102,105,108,101,32,99,97,108,99,
+ 117,108,97,116,101,100,32,116,111,32,99,111,114,114,101,115,
+ 112,111,110,100,32,116,111,32,116,104,101,32,46,112,121,99,
+ 32,102,105,108,101,46,32,32,73,102,32,112,97,116,104,32,
+ 100,111,101,115,10,32,32,32,32,110,111,116,32,99,111,110,
+ 102,111,114,109,32,116,111,32,80,69,80,32,51,49,52,55,
+ 47,52,56,56,32,102,111,114,109,97,116,44,32,86,97,108,
+ 117,101,69,114,114,111,114,32,119,105,108,108,32,98,101,32,
+ 114,97,105,115,101,100,46,32,73,102,10,32,32,32,32,115,
+ 121,115,46,105,109,112,108,101,109,101,110,116,97,116,105,111,
+ 110,46,99,97,99,104,101,95,116,97,103,32,105,115,32,78,
+ 111,110,101,32,116,104,101,110,32,78,111,116,73,109,112,108,
+ 101,109,101,110,116,101,100,69,114,114,111,114,32,105,115,32,
+ 114,97,105,115,101,100,46,10,10,32,32,32,32,78,114,71,
+ 0,0,0,70,84,122,31,32,110,111,116,32,98,111,116,116,
+ 111,109,45,108,101,118,101,108,32,100,105,114,101,99,116,111,
+ 114,121,32,105,110,32,114,70,0,0,0,62,2,0,0,0,
+ 114,27,0,0,0,114,56,0,0,0,122,29,101,120,112,101,
+ 99,116,101,100,32,111,110,108,121,32,50,32,111,114,32,51,
+ 32,100,111,116,115,32,105,110,32,114,56,0,0,0,114,27,
+ 0,0,0,233,254,255,255,255,122,53,111,112,116,105,109,105,
+ 122,97,116,105,111,110,32,112,111,114,116,105,111,110,32,111,
+ 102,32,102,105,108,101,110,97,109,101,32,100,111,101,115,32,
+ 110,111,116,32,115,116,97,114,116,32,119,105,116,104,32,122,
+ 19,111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,
+ 118,101,108,32,122,29,32,105,115,32,110,111,116,32,97,110,
+ 32,97,108,112,104,97,110,117,109,101,114,105,99,32,118,97,
+ 108,117,101,114,72,0,0,0,41,22,114,8,0,0,0,114,
+ 79,0,0,0,114,80,0,0,0,114,81,0,0,0,114,2,
+ 0,0,0,114,78,0,0,0,114,46,0,0,0,114,89,0,
+ 0,0,114,29,0,0,0,114,30,0,0,0,114,10,0,0,
+ 0,114,34,0,0,0,114,22,0,0,0,114,91,0,0,0,
+ 114,86,0,0,0,218,5,99,111,117,110,116,114,42,0,0,
+ 0,114,87,0,0,0,114,85,0,0,0,218,9,112,97,114,
+ 116,105,116,105,111,110,114,37,0,0,0,218,15,83,79,85,
+ 82,67,69,95,83,85,70,70,73,88,69,83,41,10,114,43,
+ 0,0,0,114,93,0,0,0,90,16,112,121,99,97,99,104,
+ 101,95,102,105,108,101,110,97,109,101,90,23,102,111,117,110,
+ 100,95,105,110,95,112,121,99,97,99,104,101,95,112,114,101,
+ 102,105,120,90,13,115,116,114,105,112,112,101,100,95,112,97,
+ 116,104,90,7,112,121,99,97,99,104,101,90,9,100,111,116,
+ 95,99,111,117,110,116,114,69,0,0,0,90,9,111,112,116,
+ 95,108,101,118,101,108,90,13,98,97,115,101,95,102,105,108,
+ 101,110,97,109,101,114,3,0,0,0,114,3,0,0,0,114,
+ 6,0,0,0,218,17,115,111,117,114,99,101,95,102,114,111,
+ 109,95,99,97,99,104,101,116,1,0,0,115,52,0,0,0,
+ 0,9,12,1,8,1,10,1,12,1,4,1,10,1,12,1,
+ 14,1,16,1,4,1,4,1,12,1,8,1,18,2,10,1,
+ 8,1,16,1,10,1,16,1,10,1,14,2,16,1,10,1,
+ 16,2,14,1,114,102,0,0,0,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,5,0,0,0,9,0,0,0,67,0,
+ 0,0,115,124,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,
+ 34,4,0,116,4,116,5,102,2,121,106,1,0,1,0,1,
+ 0,124,0,100,2,100,5,133,2,25,0,125,4,89,0,110,
+ 2,48,0,116,6,124,4,131,1,114,120,124,4,83,0,124,
+ 0,83,0,41,7,122,188,67,111,110,118,101,114,116,32,97,
+ 32,98,121,116,101,99,111,100,101,32,102,105,108,101,32,112,
+ 97,116,104,32,116,111,32,97,32,115,111,117,114,99,101,32,
+ 112,97,116,104,32,40,105,102,32,112,111,115,115,105,98,108,
+ 101,41,46,10,10,32,32,32,32,84,104,105,115,32,102,117,
+ 110,99,116,105,111,110,32,101,120,105,115,116,115,32,112,117,
+ 114,101,108,121,32,102,111,114,32,98,97,99,107,119,97,114,
+ 100,115,45,99,111,109,112,97,116,105,98,105,108,105,116,121,
+ 32,102,111,114,10,32,32,32,32,80,121,73,109,112,111,114,
+ 116,95,69,120,101,99,67,111,100,101,77,111,100,117,108,101,
+ 87,105,116,104,70,105,108,101,110,97,109,101,115,40,41,32,
+ 105,110,32,116,104,101,32,67,32,65,80,73,46,10,10,32,
+ 32,32,32,114,72,0,0,0,78,114,70,0,0,0,233,253,
+ 255,255,255,233,255,255,255,255,90,2,112,121,41,7,114,22,
+ 0,0,0,114,40,0,0,0,218,5,108,111,119,101,114,114,
+ 102,0,0,0,114,81,0,0,0,114,86,0,0,0,114,53,
+ 0,0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,
+ 112,97,116,104,114,95,0,0,0,114,44,0,0,0,90,9,
+ 101,120,116,101,110,115,105,111,110,218,11,115,111,117,114,99,
+ 101,95,112,97,116,104,114,3,0,0,0,114,3,0,0,0,
+ 114,6,0,0,0,218,15,95,103,101,116,95,115,111,117,114,
+ 99,101,102,105,108,101,156,1,0,0,115,20,0,0,0,0,
+ 7,12,1,4,1,16,1,24,1,4,1,2,1,12,1,16,
+ 1,18,1,114,108,0,0,0,99,1,0,0,0,0,0,0,
+ 0,0,0,0,0,1,0,0,0,8,0,0,0,67,0,0,
+ 0,115,72,0,0,0,124,0,160,0,116,1,116,2,131,1,
+ 161,1,114,46,122,10,116,3,124,0,131,1,87,0,83,0,
+ 4,0,116,4,121,42,1,0,1,0,1,0,89,0,113,68,
+ 48,0,110,22,124,0,160,0,116,1,116,5,131,1,161,1,
+ 114,64,124,0,83,0,100,0,83,0,100,0,83,0,169,1,
+ 78,41,6,218,8,101,110,100,115,119,105,116,104,218,5,116,
+ 117,112,108,101,114,101,0,0,0,114,97,0,0,0,114,81,
+ 0,0,0,114,88,0,0,0,41,1,114,96,0,0,0,114,
+ 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,
+ 95,103,101,116,95,99,97,99,104,101,100,175,1,0,0,115,
+ 16,0,0,0,0,1,14,1,2,1,10,1,12,1,8,1,
+ 14,1,4,2,114,112,0,0,0,99,1,0,0,0,0,0,
+ 0,0,0,0,0,0,2,0,0,0,8,0,0,0,67,0,
+ 0,0,115,50,0,0,0,122,14,116,0,124,0,131,1,106,
+ 1,125,1,87,0,110,22,4,0,116,2,121,36,1,0,1,
+ 0,1,0,100,1,125,1,89,0,110,2,48,0,124,1,100,
+ 2,79,0,125,1,124,1,83,0,41,3,122,51,67,97,108,
+ 99,117,108,97,116,101,32,116,104,101,32,109,111,100,101,32,
+ 112,101,114,109,105,115,115,105,111,110,115,32,102,111,114,32,
+ 97,32,98,121,116,101,99,111,100,101,32,102,105,108,101,46,
+ 114,59,0,0,0,233,128,0,0,0,41,3,114,48,0,0,
+ 0,114,50,0,0,0,114,49,0,0,0,41,2,114,43,0,
+ 0,0,114,51,0,0,0,114,3,0,0,0,114,3,0,0,
+ 0,114,6,0,0,0,218,10,95,99,97,108,99,95,109,111,
+ 100,101,187,1,0,0,115,12,0,0,0,0,2,2,1,14,
+ 1,12,1,10,3,8,1,114,114,0,0,0,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0,
+ 0,3,0,0,0,115,66,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,26,4,0,116,2,121,50,1,0,1,0,1,0,
+ 100,4,100,5,132,0,125,2,89,0,110,2,48,0,124,2,
+ 124,1,136,0,131,2,1,0,124,1,83,0,41,7,122,252,
+ 68,101,99,111,114,97,116,111,114,32,116,111,32,118,101,114,
+ 105,102,121,32,116,104,97,116,32,116,104,101,32,109,111,100,
+ 117,108,101,32,98,101,105,110,103,32,114,101,113,117,101,115,
+ 116,101,100,32,109,97,116,99,104,101,115,32,116,104,101,32,
+ 111,110,101,32,116,104,101,10,32,32,32,32,108,111,97,100,
+ 101,114,32,99,97,110,32,104,97,110,100,108,101,46,10,10,
+ 32,32,32,32,84,104,101,32,102,105,114,115,116,32,97,114,
+ 103,117,109,101,110,116,32,40,115,101,108,102,41,32,109,117,
+ 115,116,32,100,101,102,105,110,101,32,95,110,97,109,101,32,
+ 119,104,105,99,104,32,116,104,101,32,115,101,99,111,110,100,
+ 32,97,114,103,117,109,101,110,116,32,105,115,10,32,32,32,
+ 32,99,111,109,112,97,114,101,100,32,97,103,97,105,110,115,
+ 116,46,32,73,102,32,116,104,101,32,99,111,109,112,97,114,
+ 105,115,111,110,32,102,97,105,108,115,32,116,104,101,110,32,
+ 73,109,112,111,114,116,69,114,114,111,114,32,105,115,32,114,
+ 97,105,115,101,100,46,10,10,32,32,32,32,78,99,2,0,
+ 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,
+ 0,0,31,0,0,0,115,72,0,0,0,124,1,100,0,117,
+ 0,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,103,2,124,2,162,1,82,0,105,0,124,3,164,1,142,
+ 1,83,0,41,3,78,122,30,108,111,97,100,101,114,32,102,
+ 111,114,32,37,115,32,99,97,110,110,111,116,32,104,97,110,
+ 100,108,101,32,37,115,169,1,218,4,110,97,109,101,41,2,
+ 114,116,0,0,0,218,11,73,109,112,111,114,116,69,114,114,
+ 111,114,41,4,218,4,115,101,108,102,114,116,0,0,0,218,
+ 4,97,114,103,115,218,6,107,119,97,114,103,115,169,1,218,
+ 6,109,101,116,104,111,100,114,3,0,0,0,114,6,0,0,
+ 0,218,19,95,99,104,101,99,107,95,110,97,109,101,95,119,
+ 114,97,112,112,101,114,207,1,0,0,115,18,0,0,0,0,
+ 1,8,1,8,1,10,1,4,1,8,255,2,1,2,255,6,
+ 2,122,40,95,99,104,101,99,107,95,110,97,109,101,46,60,
+ 108,111,99,97,108,115,62,46,95,99,104,101,99,107,95,110,
+ 97,109,101,95,119,114,97,112,112,101,114,99,2,0,0,0,
+ 0,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0,
+ 83,0,0,0,115,56,0,0,0,100,1,68,0,93,32,125,
+ 2,116,0,124,1,124,2,131,2,114,4,116,1,124,0,124,
+ 2,116,2,124,1,124,2,131,2,131,3,1,0,113,4,124,
+ 0,106,3,160,4,124,1,106,3,161,1,1,0,100,0,83,
+ 0,41,2,78,41,4,218,10,95,95,109,111,100,117,108,101,
+ 95,95,218,8,95,95,110,97,109,101,95,95,218,12,95,95,
+ 113,117,97,108,110,97,109,101,95,95,218,7,95,95,100,111,
+ 99,95,95,41,5,218,7,104,97,115,97,116,116,114,218,7,
+ 115,101,116,97,116,116,114,218,7,103,101,116,97,116,116,114,
+ 218,8,95,95,100,105,99,116,95,95,218,6,117,112,100,97,
+ 116,101,41,3,90,3,110,101,119,90,3,111,108,100,114,66,
0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,218,10,95,99,97,108,99,95,109,111,100,101,183,1,
- 0,0,115,12,0,0,0,0,2,2,1,14,1,14,1,10,
- 3,8,1,114,114,0,0,0,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,3,0,0,0,8,0,0,0,3,0,0,
- 0,115,68,0,0,0,100,6,135,0,102,1,100,2,100,3,
- 132,9,125,1,122,10,116,0,106,1,125,2,87,0,110,28,
- 4,0,116,2,107,10,114,52,1,0,1,0,1,0,100,4,
- 100,5,132,0,125,2,89,0,110,2,48,0,124,2,124,1,
- 136,0,131,2,1,0,124,1,83,0,41,7,122,252,68,101,
- 99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,102,
- 121,32,116,104,97,116,32,116,104,101,32,109,111,100,117,108,
- 101,32,98,101,105,110,103,32,114,101,113,117,101,115,116,101,
- 100,32,109,97,116,99,104,101,115,32,116,104,101,32,111,110,
- 101,32,116,104,101,10,32,32,32,32,108,111,97,100,101,114,
- 32,99,97,110,32,104,97,110,100,108,101,46,10,10,32,32,
- 32,32,84,104,101,32,102,105,114,115,116,32,97,114,103,117,
- 109,101,110,116,32,40,115,101,108,102,41,32,109,117,115,116,
- 32,100,101,102,105,110,101,32,95,110,97,109,101,32,119,104,
- 105,99,104,32,116,104,101,32,115,101,99,111,110,100,32,97,
- 114,103,117,109,101,110,116,32,105,115,10,32,32,32,32,99,
- 111,109,112,97,114,101,100,32,97,103,97,105,110,115,116,46,
- 32,73,102,32,116,104,101,32,99,111,109,112,97,114,105,115,
- 111,110,32,102,97,105,108,115,32,116,104,101,110,32,73,109,
- 112,111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,
- 115,101,100,46,10,10,32,32,32,32,78,99,2,0,0,0,
- 0,0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,
- 31,0,0,0,115,66,0,0,0,124,1,100,0,107,8,114,
- 16,124,0,106,0,125,1,110,32,124,0,106,0,124,1,107,
- 3,114,48,116,1,100,1,124,0,106,0,124,1,102,2,22,
- 0,124,1,100,2,141,2,130,1,136,0,124,0,124,1,102,
- 2,124,2,158,2,124,3,142,1,83,0,41,3,78,122,30,
- 108,111,97,100,101,114,32,102,111,114,32,37,115,32,99,97,
- 110,110,111,116,32,104,97,110,100,108,101,32,37,115,169,1,
- 218,4,110,97,109,101,41,2,114,116,0,0,0,218,11,73,
- 109,112,111,114,116,69,114,114,111,114,41,4,218,4,115,101,
- 108,102,114,116,0,0,0,218,4,97,114,103,115,218,6,107,
- 119,97,114,103,115,169,1,218,6,109,101,116,104,111,100,114,
- 3,0,0,0,114,6,0,0,0,218,19,95,99,104,101,99,
- 107,95,110,97,109,101,95,119,114,97,112,112,101,114,203,1,
- 0,0,115,18,0,0,0,0,1,8,1,8,1,10,1,4,
- 1,8,255,2,1,2,255,6,2,122,40,95,99,104,101,99,
- 107,95,110,97,109,101,46,60,108,111,99,97,108,115,62,46,
- 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112,
- 112,101,114,99,2,0,0,0,0,0,0,0,0,0,0,0,
- 3,0,0,0,7,0,0,0,83,0,0,0,115,56,0,0,
- 0,100,1,68,0,93,32,125,2,116,0,124,1,124,2,131,
- 2,114,4,116,1,124,0,124,2,116,2,124,1,124,2,131,
- 2,131,3,1,0,113,4,124,0,106,3,160,4,124,1,106,
- 3,161,1,1,0,100,0,83,0,41,2,78,41,4,218,10,
- 95,95,109,111,100,117,108,101,95,95,218,8,95,95,110,97,
- 109,101,95,95,218,12,95,95,113,117,97,108,110,97,109,101,
- 95,95,218,7,95,95,100,111,99,95,95,41,5,218,7,104,
- 97,115,97,116,116,114,218,7,115,101,116,97,116,116,114,218,
- 7,103,101,116,97,116,116,114,218,8,95,95,100,105,99,116,
- 95,95,218,6,117,112,100,97,116,101,41,3,90,3,110,101,
- 119,90,3,111,108,100,114,66,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,5,95,119,114,97,
- 112,214,1,0,0,115,8,0,0,0,0,1,8,1,10,1,
- 20,1,122,26,95,99,104,101,99,107,95,110,97,109,101,46,
- 60,108,111,99,97,108,115,62,46,95,119,114,97,112,41,1,
- 78,41,3,218,10,95,98,111,111,116,115,116,114,97,112,114,
- 133,0,0,0,218,9,78,97,109,101,69,114,114,111,114,41,
- 3,114,122,0,0,0,114,123,0,0,0,114,133,0,0,0,
- 114,3,0,0,0,114,121,0,0,0,114,6,0,0,0,218,
- 11,95,99,104,101,99,107,95,110,97,109,101,195,1,0,0,
- 115,14,0,0,0,0,8,14,7,2,1,10,1,14,2,14,
- 5,10,1,114,136,0,0,0,99,2,0,0,0,0,0,0,
- 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0,
- 0,115,60,0,0,0,124,0,160,0,124,1,161,1,92,2,
- 125,2,125,3,124,2,100,1,107,8,114,56,116,1,124,3,
- 131,1,114,56,100,2,125,4,116,2,160,3,124,4,160,4,
- 124,3,100,3,25,0,161,1,116,5,161,2,1,0,124,2,
- 83,0,41,4,122,155,84,114,121,32,116,111,32,102,105,110,
- 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116,
- 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,
- 117,108,101,32,98,121,32,100,101,108,101,103,97,116,105,110,
- 103,32,116,111,10,32,32,32,32,115,101,108,102,46,102,105,
- 110,100,95,108,111,97,100,101,114,40,41,46,10,10,32,32,
- 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,
- 32,100,101,112,114,101,99,97,116,101,100,32,105,110,32,102,
- 97,118,111,114,32,111,102,32,102,105,110,100,101,114,46,102,
- 105,110,100,95,115,112,101,99,40,41,46,10,10,32,32,32,
- 32,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110,
- 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32,
- 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95,
- 114,72,0,0,0,41,6,218,11,102,105,110,100,95,108,111,
- 97,100,101,114,114,22,0,0,0,114,74,0,0,0,114,75,
- 0,0,0,114,61,0,0,0,218,13,73,109,112,111,114,116,
- 87,97,114,110,105,110,103,41,5,114,118,0,0,0,218,8,
- 102,117,108,108,110,97,109,101,218,6,108,111,97,100,101,114,
- 218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,17,
- 95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105,
- 109,223,1,0,0,115,10,0,0,0,0,10,14,1,16,1,
- 4,1,22,1,114,143,0,0,0,99,3,0,0,0,0,0,
- 0,0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,
- 0,0,115,158,0,0,0,124,0,100,1,100,2,133,2,25,
- 0,125,3,124,3,116,0,107,3,114,60,100,3,124,1,155,
- 2,100,4,124,3,155,2,157,4,125,4,116,1,160,2,100,
- 5,124,4,161,2,1,0,116,3,124,4,102,1,124,2,142,
- 1,130,1,116,4,124,0,131,1,100,6,107,0,114,102,100,
- 7,124,1,155,2,157,2,125,4,116,1,160,2,100,5,124,
- 4,161,2,1,0,116,5,124,4,131,1,130,1,116,6,124,
- 0,100,2,100,8,133,2,25,0,131,1,125,5,124,5,100,
- 9,64,0,114,154,100,10,124,5,155,2,100,11,124,1,155,
- 2,157,4,125,4,116,3,124,4,102,1,124,2,142,1,130,
+ 0,0,218,5,95,119,114,97,112,218,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,199,1,0,0,115,14,0,0,0,0,8,14,
+ 7,2,1,10,1,12,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,
+ 117,0,114,56,116,1,124,3,131,1,114,56,100,2,125,4,
+ 116,2,160,3,124,4,160,4,124,3,100,3,25,0,161,1,
+ 116,5,161,2,1,0,124,2,83,0,41,4,122,155,84,114,
+ 121,32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,
+ 101,114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,
+ 102,105,101,100,32,109,111,100,117,108,101,32,98,121,32,100,
+ 101,108,101,103,97,116,105,110,103,32,116,111,10,32,32,32,
+ 32,115,101,108,102,46,102,105,110,100,95,108,111,97,100,101,
+ 114,40,41,46,10,10,32,32,32,32,84,104,105,115,32,109,
+ 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,
+ 116,101,100,32,105,110,32,102,97,118,111,114,32,111,102,32,
+ 102,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,
+ 40,41,46,10,10,32,32,32,32,78,122,44,78,111,116,32,
+ 105,109,112,111,114,116,105,110,103,32,100,105,114,101,99,116,
+ 111,114,121,32,123,125,58,32,109,105,115,115,105,110,103,32,
+ 95,95,105,110,105,116,95,95,114,72,0,0,0,41,6,218,
+ 11,102,105,110,100,95,108,111,97,100,101,114,114,22,0,0,
+ 0,114,74,0,0,0,114,75,0,0,0,114,61,0,0,0,
+ 218,13,73,109,112,111,114,116,87,97,114,110,105,110,103,41,
+ 5,114,118,0,0,0,218,8,102,117,108,108,110,97,109,101,
+ 218,6,108,111,97,100,101,114,218,8,112,111,114,116,105,111,
+ 110,115,218,3,109,115,103,114,3,0,0,0,114,3,0,0,
+ 0,114,6,0,0,0,218,17,95,102,105,110,100,95,109,111,
+ 100,117,108,101,95,115,104,105,109,227,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,166,0,0,0,124,
+ 0,100,1,100,2,133,2,25,0,125,3,124,3,116,0,107,
+ 3,114,64,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,105,0,124,2,164,1,142,1,130,1,116,
+ 4,124,0,131,1,100,6,107,0,114,106,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,
+ 162,100,10,124,5,155,2,100,11,124,1,155,2,157,4,125,
+ 4,116,3,124,4,102,1,105,0,124,2,164,1,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,
@@ -695,565 +695,565 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
11,101,120,99,95,100,101,116,97,105,108,115,90,5,109,97,
103,105,99,114,92,0,0,0,114,82,0,0,0,114,3,0,
0,0,114,3,0,0,0,114,6,0,0,0,218,13,95,99,
- 108,97,115,115,105,102,121,95,112,121,99,240,1,0,0,115,
- 28,0,0,0,0,16,12,1,8,1,16,1,12,1,12,1,
- 12,1,10,1,12,1,8,1,16,2,8,1,16,1,12,1,
+ 108,97,115,115,105,102,121,95,112,121,99,244,1,0,0,115,
+ 28,0,0,0,0,16,12,1,8,1,16,1,12,1,16,1,
+ 12,1,10,1,12,1,8,1,16,2,8,1,16,1,16,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,6,0,0,0,4,0,0,0,67,0,0,0,115,120,
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,
+ 1,124,1,100,3,64,0,107,3,114,62,100,4,124,3,155,
2,157,2,125,5,116,1,160,2,100,5,124,5,161,2,1,
- 0,116,3,124,5,102,1,124,4,142,1,130,1,124,2,100,
- 6,107,9,114,108,116,0,124,0,100,2,100,7,133,2,25,
- 0,131,1,124,2,100,3,64,0,107,3,114,108,116,3,100,
- 4,124,3,155,2,157,2,102,1,124,4,142,1,130,1,100,
- 6,83,0,41,8,97,7,2,0,0,86,97,108,105,100,97,
- 116,101,32,97,32,112,121,99,32,97,103,97,105,110,115,116,
- 32,116,104,101,32,115,111,117,114,99,101,32,108,97,115,116,
- 45,109,111,100,105,102,105,101,100,32,116,105,109,101,46,10,
- 10,32,32,32,32,42,100,97,116,97,42,32,105,115,32,116,
- 104,101,32,99,111,110,116,101,110,116,115,32,111,102,32,116,
- 104,101,32,112,121,99,32,102,105,108,101,46,32,40,79,110,
- 108,121,32,116,104,101,32,102,105,114,115,116,32,49,54,32,
- 98,121,116,101,115,32,97,114,101,10,32,32,32,32,114,101,
- 113,117,105,114,101,100,46,41,10,10,32,32,32,32,42,115,
- 111,117,114,99,101,95,109,116,105,109,101,42,32,105,115,32,
- 116,104,101,32,108,97,115,116,32,109,111,100,105,102,105,101,
- 100,32,116,105,109,101,115,116,97,109,112,32,111,102,32,116,
- 104,101,32,115,111,117,114,99,101,32,102,105,108,101,46,10,
- 10,32,32,32,32,42,115,111,117,114,99,101,95,115,105,122,
- 101,42,32,105,115,32,78,111,110,101,32,111,114,32,116,104,
- 101,32,115,105,122,101,32,111,102,32,116,104,101,32,115,111,
- 117,114,99,101,32,102,105,108,101,32,105,110,32,98,121,116,
- 101,115,46,10,10,32,32,32,32,42,110,97,109,101,42,32,
- 105,115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,
- 104,101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,
- 105,109,112,111,114,116,101,100,46,32,73,116,32,105,115,32,
- 117,115,101,100,32,102,111,114,32,108,111,103,103,105,110,103,
- 46,10,10,32,32,32,32,42,101,120,99,95,100,101,116,97,
- 105,108,115,42,32,105,115,32,97,32,100,105,99,116,105,111,
- 110,97,114,121,32,112,97,115,115,101,100,32,116,111,32,73,
- 109,112,111,114,116,69,114,114,111,114,32,105,102,32,105,116,
- 32,114,97,105,115,101,100,32,102,111,114,10,32,32,32,32,
- 105,109,112,114,111,118,101,100,32,100,101,98,117,103,103,105,
- 110,103,46,10,10,32,32,32,32,65,110,32,73,109,112,111,
- 114,116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,
- 100,32,105,102,32,116,104,101,32,98,121,116,101,99,111,100,
- 101,32,105,115,32,115,116,97,108,101,46,10,10,32,32,32,
- 32,114,146,0,0,0,233,12,0,0,0,114,14,0,0,0,
- 122,22,98,121,116,101,99,111,100,101,32,105,115,32,115,116,
- 97,108,101,32,102,111,114,32,114,144,0,0,0,78,114,145,
- 0,0,0,41,4,114,26,0,0,0,114,134,0,0,0,114,
- 149,0,0,0,114,117,0,0,0,41,6,114,25,0,0,0,
- 218,12,115,111,117,114,99,101,95,109,116,105,109,101,218,11,
- 115,111,117,114,99,101,95,115,105,122,101,114,116,0,0,0,
- 114,151,0,0,0,114,92,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,23,95,118,97,108,105,
- 100,97,116,101,95,116,105,109,101,115,116,97,109,112,95,112,
- 121,99,17,2,0,0,115,16,0,0,0,0,19,24,1,10,
- 1,12,1,12,1,8,1,22,255,2,2,114,156,0,0,0,
- 99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
- 0,3,0,0,0,67,0,0,0,115,38,0,0,0,124,0,
- 100,1,100,2,133,2,25,0,124,1,107,3,114,34,116,0,
- 100,3,124,2,155,2,157,2,102,1,124,3,142,1,130,1,
- 100,4,83,0,41,5,97,243,1,0,0,86,97,108,105,100,
- 97,116,101,32,97,32,104,97,115,104,45,98,97,115,101,100,
- 32,112,121,99,32,98,121,32,99,104,101,99,107,105,110,103,
- 32,116,104,101,32,114,101,97,108,32,115,111,117,114,99,101,
- 32,104,97,115,104,32,97,103,97,105,110,115,116,32,116,104,
- 101,32,111,110,101,32,105,110,10,32,32,32,32,116,104,101,
- 32,112,121,99,32,104,101,97,100,101,114,46,10,10,32,32,
- 32,32,42,100,97,116,97,42,32,105,115,32,116,104,101,32,
- 99,111,110,116,101,110,116,115,32,111,102,32,116,104,101,32,
- 112,121,99,32,102,105,108,101,46,32,40,79,110,108,121,32,
- 116,104,101,32,102,105,114,115,116,32,49,54,32,98,121,116,
- 101,115,32,97,114,101,10,32,32,32,32,114,101,113,117,105,
- 114,101,100,46,41,10,10,32,32,32,32,42,115,111,117,114,
- 99,101,95,104,97,115,104,42,32,105,115,32,116,104,101,32,
- 105,109,112,111,114,116,108,105,98,46,117,116,105,108,46,115,
- 111,117,114,99,101,95,104,97,115,104,40,41,32,111,102,32,
- 116,104,101,32,115,111,117,114,99,101,32,102,105,108,101,46,
- 10,10,32,32,32,32,42,110,97,109,101,42,32,105,115,32,
- 116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,
- 109,111,100,117,108,101,32,98,101,105,110,103,32,105,109,112,
- 111,114,116,101,100,46,32,73,116,32,105,115,32,117,115,101,
- 100,32,102,111,114,32,108,111,103,103,105,110,103,46,10,10,
- 32,32,32,32,42,101,120,99,95,100,101,116,97,105,108,115,
- 42,32,105,115,32,97,32,100,105,99,116,105,111,110,97,114,
- 121,32,112,97,115,115,101,100,32,116,111,32,73,109,112,111,
- 114,116,69,114,114,111,114,32,105,102,32,105,116,32,114,97,
- 105,115,101,100,32,102,111,114,10,32,32,32,32,105,109,112,
- 114,111,118,101,100,32,100,101,98,117,103,103,105,110,103,46,
- 10,10,32,32,32,32,65,110,32,73,109,112,111,114,116,69,
- 114,114,111,114,32,105,115,32,114,97,105,115,101,100,32,105,
- 102,32,116,104,101,32,98,121,116,101,99,111,100,101,32,105,
- 115,32,115,116,97,108,101,46,10,10,32,32,32,32,114,146,
- 0,0,0,114,145,0,0,0,122,46,104,97,115,104,32,105,
- 110,32,98,121,116,101,99,111,100,101,32,100,111,101,115,110,
- 39,116,32,109,97,116,99,104,32,104,97,115,104,32,111,102,
- 32,115,111,117,114,99,101,32,78,41,1,114,117,0,0,0,
- 41,4,114,25,0,0,0,218,11,115,111,117,114,99,101,95,
- 104,97,115,104,114,116,0,0,0,114,151,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,218,18,95,
- 118,97,108,105,100,97,116,101,95,104,97,115,104,95,112,121,
- 99,45,2,0,0,115,12,0,0,0,0,17,16,1,2,1,
- 8,255,2,2,2,254,114,158,0,0,0,99,4,0,0,0,
- 0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
- 67,0,0,0,115,80,0,0,0,116,0,160,1,124,0,161,
- 1,125,4,116,2,124,4,116,3,131,2,114,56,116,4,160,
- 5,100,1,124,2,161,2,1,0,124,3,100,2,107,9,114,
- 52,116,6,160,7,124,4,124,3,161,2,1,0,124,4,83,
- 0,116,8,100,3,160,9,124,2,161,1,124,1,124,2,100,
- 4,141,3,130,1,100,2,83,0,41,5,122,35,67,111,109,
- 112,105,108,101,32,98,121,116,101,99,111,100,101,32,97,115,
- 32,102,111,117,110,100,32,105,110,32,97,32,112,121,99,46,
- 122,21,99,111,100,101,32,111,98,106,101,99,116,32,102,114,
- 111,109,32,123,33,114,125,78,122,23,78,111,110,45,99,111,
- 100,101,32,111,98,106,101,99,116,32,105,110,32,123,33,114,
- 125,169,2,114,116,0,0,0,114,43,0,0,0,41,10,218,
- 7,109,97,114,115,104,97,108,90,5,108,111,97,100,115,218,
- 10,105,115,105,110,115,116,97,110,99,101,218,10,95,99,111,
- 100,101,95,116,121,112,101,114,134,0,0,0,114,149,0,0,
- 0,218,4,95,105,109,112,90,16,95,102,105,120,95,99,111,
- 95,102,105,108,101,110,97,109,101,114,117,0,0,0,114,61,
- 0,0,0,41,5,114,25,0,0,0,114,116,0,0,0,114,
- 106,0,0,0,114,107,0,0,0,218,4,99,111,100,101,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,17,
- 95,99,111,109,112,105,108,101,95,98,121,116,101,99,111,100,
- 101,69,2,0,0,115,20,0,0,0,0,2,10,1,10,1,
- 12,1,8,1,12,1,4,2,10,1,2,0,2,255,114,165,
- 0,0,0,114,72,0,0,0,99,3,0,0,0,0,0,0,
- 0,0,0,0,0,4,0,0,0,5,0,0,0,67,0,0,
- 0,115,70,0,0,0,116,0,116,1,131,1,125,3,124,3,
- 160,2,116,3,100,1,131,1,161,1,1,0,124,3,160,2,
- 116,3,124,1,131,1,161,1,1,0,124,3,160,2,116,3,
- 124,2,131,1,161,1,1,0,124,3,160,2,116,4,160,5,
- 124,0,161,1,161,1,1,0,124,3,83,0,41,2,122,43,
- 80,114,111,100,117,99,101,32,116,104,101,32,100,97,116,97,
- 32,102,111,114,32,97,32,116,105,109,101,115,116,97,109,112,
- 45,98,97,115,101,100,32,112,121,99,46,114,72,0,0,0,
- 41,6,218,9,98,121,116,101,97,114,114,97,121,114,148,0,
- 0,0,218,6,101,120,116,101,110,100,114,20,0,0,0,114,
- 160,0,0,0,218,5,100,117,109,112,115,41,4,114,164,0,
- 0,0,218,5,109,116,105,109,101,114,155,0,0,0,114,25,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,218,22,95,99,111,100,101,95,116,111,95,116,105,109,
- 101,115,116,97,109,112,95,112,121,99,82,2,0,0,115,12,
- 0,0,0,0,2,8,1,14,1,14,1,14,1,16,1,114,
- 170,0,0,0,84,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,80,
- 0,0,0,116,0,116,1,131,1,125,3,100,1,124,2,100,
- 1,62,0,66,0,125,4,124,3,160,2,116,3,124,4,131,
- 1,161,1,1,0,116,4,124,1,131,1,100,2,107,2,115,
- 50,74,0,130,1,124,3,160,2,124,1,161,1,1,0,124,
- 3,160,2,116,5,160,6,124,0,161,1,161,1,1,0,124,
- 3,83,0,41,3,122,38,80,114,111,100,117,99,101,32,116,
- 104,101,32,100,97,116,97,32,102,111,114,32,97,32,104,97,
- 115,104,45,98,97,115,101,100,32,112,121,99,46,114,38,0,
- 0,0,114,146,0,0,0,41,7,114,166,0,0,0,114,148,
- 0,0,0,114,167,0,0,0,114,20,0,0,0,114,22,0,
- 0,0,114,160,0,0,0,114,168,0,0,0,41,5,114,164,
- 0,0,0,114,157,0,0,0,90,7,99,104,101,99,107,101,
- 100,114,25,0,0,0,114,82,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,100,
- 101,95,116,111,95,104,97,115,104,95,112,121,99,92,2,0,
- 0,115,14,0,0,0,0,2,8,1,12,1,14,1,16,1,
- 10,1,16,1,114,171,0,0,0,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,
- 0,0,115,62,0,0,0,100,1,100,2,108,0,125,1,116,
- 1,160,2,124,0,161,1,106,3,125,2,124,1,160,4,124,
- 2,161,1,125,3,116,1,160,5,100,2,100,3,161,2,125,
- 4,124,4,160,6,124,0,160,6,124,3,100,1,25,0,161,
- 1,161,1,83,0,41,4,122,121,68,101,99,111,100,101,32,
- 98,121,116,101,115,32,114,101,112,114,101,115,101,110,116,105,
- 110,103,32,115,111,117,114,99,101,32,99,111,100,101,32,97,
- 110,100,32,114,101,116,117,114,110,32,116,104,101,32,115,116,
- 114,105,110,103,46,10,10,32,32,32,32,85,110,105,118,101,
- 114,115,97,108,32,110,101,119,108,105,110,101,32,115,117,112,
- 112,111,114,116,32,105,115,32,117,115,101,100,32,105,110,32,
- 116,104,101,32,100,101,99,111,100,105,110,103,46,10,32,32,
- 32,32,114,72,0,0,0,78,84,41,7,218,8,116,111,107,
- 101,110,105,122,101,114,63,0,0,0,90,7,66,121,116,101,
- 115,73,79,90,8,114,101,97,100,108,105,110,101,90,15,100,
- 101,116,101,99,116,95,101,110,99,111,100,105,110,103,90,25,
- 73,110,99,114,101,109,101,110,116,97,108,78,101,119,108,105,
- 110,101,68,101,99,111,100,101,114,218,6,100,101,99,111,100,
- 101,41,5,218,12,115,111,117,114,99,101,95,98,121,116,101,
- 115,114,172,0,0,0,90,21,115,111,117,114,99,101,95,98,
- 121,116,101,115,95,114,101,97,100,108,105,110,101,218,8,101,
- 110,99,111,100,105,110,103,90,15,110,101,119,108,105,110,101,
- 95,100,101,99,111,100,101,114,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,218,13,100,101,99,111,100,101,95,
- 115,111,117,114,99,101,103,2,0,0,115,10,0,0,0,0,
- 5,8,1,12,1,10,1,12,1,114,176,0,0,0,169,2,
- 114,140,0,0,0,218,26,115,117,98,109,111,100,117,108,101,
- 95,115,101,97,114,99,104,95,108,111,99,97,116,105,111,110,
- 115,99,2,0,0,0,0,0,0,0,2,0,0,0,9,0,
- 0,0,8,0,0,0,67,0,0,0,115,16,1,0,0,124,
- 1,100,1,107,8,114,60,100,2,125,1,116,0,124,2,100,
- 3,131,2,114,70,122,14,124,2,160,1,124,0,161,1,125,
- 1,87,0,113,70,4,0,116,2,107,10,114,56,1,0,1,
- 0,1,0,89,0,113,70,48,0,110,10,116,3,160,4,124,
- 1,161,1,125,1,116,5,106,6,124,0,124,2,124,1,100,
- 4,141,3,125,4,100,5,124,4,95,7,124,2,100,1,107,
- 8,114,154,116,8,131,0,68,0,93,42,92,2,125,5,125,
- 6,124,1,160,9,116,10,124,6,131,1,161,1,114,106,124,
- 5,124,0,124,1,131,2,125,2,124,2,124,4,95,11,1,
- 0,113,154,113,106,100,1,83,0,124,3,116,12,107,8,114,
- 220,116,0,124,2,100,6,131,2,114,226,122,14,124,2,160,
- 13,124,0,161,1,125,7,87,0,110,20,4,0,116,2,107,
- 10,114,206,1,0,1,0,1,0,89,0,113,226,48,0,124,
- 7,114,226,103,0,124,4,95,14,110,6,124,3,124,4,95,
- 14,124,4,106,14,103,0,107,2,144,1,114,12,124,1,144,
- 1,114,12,116,15,124,1,131,1,100,7,25,0,125,8,124,
- 4,106,14,160,16,124,8,161,1,1,0,124,4,83,0,41,
- 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109,
- 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100,
- 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116,
- 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100,
- 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109,
- 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,
- 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109,
- 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99,
- 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116,
- 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97,
- 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112,
- 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105,
- 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116,
- 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32,
- 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32,
- 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46,
- 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114,
- 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101,
- 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95,
- 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32,
- 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218,
- 12,103,101,116,95,102,105,108,101,110,97,109,101,169,1,218,
- 6,111,114,105,103,105,110,84,218,10,105,115,95,112,97,99,
- 107,97,103,101,114,72,0,0,0,41,17,114,128,0,0,0,
- 114,179,0,0,0,114,117,0,0,0,114,2,0,0,0,114,
- 78,0,0,0,114,134,0,0,0,218,10,77,111,100,117,108,
- 101,83,112,101,99,90,13,95,115,101,116,95,102,105,108,101,
- 97,116,116,114,218,27,95,103,101,116,95,115,117,112,112,111,
- 114,116,101,100,95,102,105,108,101,95,108,111,97,100,101,114,
- 115,114,110,0,0,0,114,111,0,0,0,114,140,0,0,0,
- 218,9,95,80,79,80,85,76,65,84,69,114,182,0,0,0,
- 114,178,0,0,0,114,46,0,0,0,218,6,97,112,112,101,
- 110,100,41,9,114,116,0,0,0,90,8,108,111,99,97,116,
- 105,111,110,114,140,0,0,0,114,178,0,0,0,218,4,115,
- 112,101,99,218,12,108,111,97,100,101,114,95,99,108,97,115,
- 115,218,8,115,117,102,102,105,120,101,115,114,182,0,0,0,
- 90,7,100,105,114,110,97,109,101,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,23,115,112,101,99,95,102,
- 114,111,109,95,102,105,108,101,95,108,111,99,97,116,105,111,
- 110,120,2,0,0,115,62,0,0,0,0,12,8,4,4,1,
- 10,2,2,1,14,1,14,1,8,2,10,8,16,1,6,3,
- 8,1,14,1,14,1,10,1,6,1,6,2,4,3,8,2,
- 10,1,2,1,14,1,14,1,6,2,4,1,8,2,6,1,
- 12,1,6,1,12,1,12,2,114,190,0,0,0,99,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,
- 0,0,64,0,0,0,115,80,0,0,0,101,0,90,1,100,
- 0,90,2,100,1,90,3,100,2,90,4,100,3,90,5,100,
- 4,90,6,101,7,100,5,100,6,132,0,131,1,90,8,101,
- 7,100,7,100,8,132,0,131,1,90,9,101,7,100,14,100,
- 10,100,11,132,1,131,1,90,10,101,7,100,15,100,12,100,
- 13,132,1,131,1,90,11,100,9,83,0,41,16,218,21,87,
- 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,
- 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32,
- 102,105,110,100,101,114,32,102,111,114,32,109,111,100,117,108,
- 101,115,32,100,101,99,108,97,114,101,100,32,105,110,32,116,
- 104,101,32,87,105,110,100,111,119,115,32,114,101,103,105,115,
- 116,114,121,46,122,59,83,111,102,116,119,97,114,101,92,80,
- 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101,
- 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77,
- 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101,
- 125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,104,
- 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115,
- 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117,
- 108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,68,
- 101,98,117,103,70,99,2,0,0,0,0,0,0,0,0,0,
- 0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,56,
- 0,0,0,122,16,116,0,160,1,116,0,106,2,124,1,161,
- 2,87,0,83,0,4,0,116,3,107,10,114,50,1,0,1,
- 0,1,0,116,0,160,1,116,0,106,4,124,1,161,2,6,
- 0,89,0,83,0,48,0,100,0,83,0,114,109,0,0,0,
- 41,5,218,7,95,119,105,110,114,101,103,90,7,79,112,101,
- 110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,69,
- 78,84,95,85,83,69,82,114,49,0,0,0,90,18,72,75,
- 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69,
- 41,2,218,3,99,108,115,114,5,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,218,14,95,111,112,
- 101,110,95,114,101,103,105,115,116,114,121,200,2,0,0,115,
- 8,0,0,0,0,2,2,1,16,1,14,1,122,36,87,105,
- 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,
- 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116,
- 114,121,99,2,0,0,0,0,0,0,0,0,0,0,0,6,
- 0,0,0,8,0,0,0,67,0,0,0,115,134,0,0,0,
- 124,0,106,0,114,14,124,0,106,1,125,2,110,6,124,0,
- 106,2,125,2,124,2,106,3,124,1,100,1,116,4,106,5,
- 100,0,100,2,133,2,25,0,22,0,100,3,141,2,125,3,
- 122,58,124,0,160,6,124,3,161,1,143,28,125,4,116,7,
- 160,8,124,4,100,4,161,2,125,5,87,0,100,0,4,0,
- 4,0,131,3,1,0,110,16,49,0,115,94,48,0,1,0,
- 1,0,1,0,89,0,1,0,87,0,110,22,4,0,116,9,
- 107,10,114,128,1,0,1,0,1,0,89,0,100,0,83,0,
- 48,0,124,5,83,0,41,5,78,122,5,37,100,46,37,100,
- 114,27,0,0,0,41,2,114,139,0,0,0,90,11,115,121,
- 115,95,118,101,114,115,105,111,110,114,39,0,0,0,41,10,
- 218,11,68,69,66,85,71,95,66,85,73,76,68,218,18,82,
- 69,71,73,83,84,82,89,95,75,69,89,95,68,69,66,85,
- 71,218,12,82,69,71,73,83,84,82,89,95,75,69,89,114,
- 61,0,0,0,114,8,0,0,0,218,12,118,101,114,115,105,
- 111,110,95,105,110,102,111,114,194,0,0,0,114,192,0,0,
- 0,90,10,81,117,101,114,121,86,97,108,117,101,114,49,0,
- 0,0,41,6,114,193,0,0,0,114,139,0,0,0,90,12,
- 114,101,103,105,115,116,114,121,95,107,101,121,114,5,0,0,
- 0,90,4,104,107,101,121,218,8,102,105,108,101,112,97,116,
- 104,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,16,95,115,101,97,114,99,104,95,114,101,103,105,115,116,
- 114,121,207,2,0,0,115,24,0,0,0,0,2,6,1,8,
- 2,6,1,6,1,16,255,6,2,2,1,12,1,46,1,14,
- 1,8,1,122,38,87,105,110,100,111,119,115,82,101,103,105,
- 115,116,114,121,70,105,110,100,101,114,46,95,115,101,97,114,
- 99,104,95,114,101,103,105,115,116,114,121,78,99,4,0,0,
- 0,0,0,0,0,0,0,0,0,8,0,0,0,8,0,0,
- 0,67,0,0,0,115,122,0,0,0,124,0,160,0,124,1,
- 161,1,125,4,124,4,100,0,107,8,114,22,100,0,83,0,
- 122,12,116,1,124,4,131,1,1,0,87,0,110,22,4,0,
- 116,2,107,10,114,56,1,0,1,0,1,0,89,0,100,0,
- 83,0,48,0,116,3,131,0,68,0,93,52,92,2,125,5,
- 125,6,124,4,160,4,116,5,124,6,131,1,161,1,114,64,
- 116,6,106,7,124,1,124,5,124,1,124,4,131,2,124,4,
- 100,1,141,3,125,7,124,7,2,0,1,0,83,0,113,64,
- 100,0,83,0,41,2,78,114,180,0,0,0,41,8,114,200,
- 0,0,0,114,48,0,0,0,114,49,0,0,0,114,184,0,
- 0,0,114,110,0,0,0,114,111,0,0,0,114,134,0,0,
- 0,218,16,115,112,101,99,95,102,114,111,109,95,108,111,97,
- 100,101,114,41,8,114,193,0,0,0,114,139,0,0,0,114,
- 43,0,0,0,218,6,116,97,114,103,101,116,114,199,0,0,
- 0,114,140,0,0,0,114,189,0,0,0,114,187,0,0,0,
+ 0,116,3,124,5,102,1,105,0,124,4,164,1,142,1,130,
+ 1,124,2,100,6,117,1,114,116,116,0,124,0,100,2,100,
+ 7,133,2,25,0,131,1,124,2,100,3,64,0,107,3,114,
+ 116,116,3,100,4,124,3,155,2,157,2,102,1,105,0,124,
+ 4,164,1,142,1,130,1,100,6,83,0,41,8,97,7,2,
+ 0,0,86,97,108,105,100,97,116,101,32,97,32,112,121,99,
+ 32,97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,
+ 114,99,101,32,108,97,115,116,45,109,111,100,105,102,105,101,
+ 100,32,116,105,109,101,46,10,10,32,32,32,32,42,100,97,
+ 116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,
+ 110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,
+ 105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,
+ 105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,
+ 101,10,32,32,32,32,114,101,113,117,105,114,101,100,46,41,
+ 10,10,32,32,32,32,42,115,111,117,114,99,101,95,109,116,
+ 105,109,101,42,32,105,115,32,116,104,101,32,108,97,115,116,
+ 32,109,111,100,105,102,105,101,100,32,116,105,109,101,115,116,
+ 97,109,112,32,111,102,32,116,104,101,32,115,111,117,114,99,
+ 101,32,102,105,108,101,46,10,10,32,32,32,32,42,115,111,
+ 117,114,99,101,95,115,105,122,101,42,32,105,115,32,78,111,
+ 110,101,32,111,114,32,116,104,101,32,115,105,122,101,32,111,
+ 102,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,
+ 101,32,105,110,32,98,121,116,101,115,46,10,10,32,32,32,
+ 32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,110,
+ 97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,
+ 101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100,
+ 46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,114,
+ 32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,42,
+ 101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,32,
+ 97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,115,
+ 115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,114,
+ 111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,32,
+ 102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,100,
+ 32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,32,
+ 32,65,110,32,73,109,112,111,114,116,69,114,114,111,114,32,
+ 105,115,32,114,97,105,115,101,100,32,105,102,32,116,104,101,
+ 32,98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,
+ 108,101,46,10,10,32,32,32,32,114,146,0,0,0,233,12,
+ 0,0,0,114,14,0,0,0,122,22,98,121,116,101,99,111,
+ 100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32,
+ 114,144,0,0,0,78,114,145,0,0,0,41,4,114,26,0,
+ 0,0,114,134,0,0,0,114,149,0,0,0,114,117,0,0,
+ 0,41,6,114,25,0,0,0,218,12,115,111,117,114,99,101,
+ 95,109,116,105,109,101,218,11,115,111,117,114,99,101,95,115,
+ 105,122,101,114,116,0,0,0,114,151,0,0,0,114,92,0,
+ 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,218,23,95,118,97,108,105,100,97,116,101,95,116,105,109,
+ 101,115,116,97,109,112,95,112,121,99,21,2,0,0,115,16,
+ 0,0,0,0,19,24,1,10,1,12,1,16,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,4,0,0,0,67,0,0,
+ 0,115,42,0,0,0,124,0,100,1,100,2,133,2,25,0,
+ 124,1,107,3,114,38,116,0,100,3,124,2,155,2,157,2,
+ 102,1,105,0,124,3,164,1,142,1,130,1,100,4,83,0,
+ 41,5,97,243,1,0,0,86,97,108,105,100,97,116,101,32,
+ 97,32,104,97,115,104,45,98,97,115,101,100,32,112,121,99,
+ 32,98,121,32,99,104,101,99,107,105,110,103,32,116,104,101,
+ 32,114,101,97,108,32,115,111,117,114,99,101,32,104,97,115,
+ 104,32,97,103,97,105,110,115,116,32,116,104,101,32,111,110,
+ 101,32,105,110,10,32,32,32,32,116,104,101,32,112,121,99,
+ 32,104,101,97,100,101,114,46,10,10,32,32,32,32,42,100,
+ 97,116,97,42,32,105,115,32,116,104,101,32,99,111,110,116,
+ 101,110,116,115,32,111,102,32,116,104,101,32,112,121,99,32,
+ 102,105,108,101,46,32,40,79,110,108,121,32,116,104,101,32,
+ 102,105,114,115,116,32,49,54,32,98,121,116,101,115,32,97,
+ 114,101,10,32,32,32,32,114,101,113,117,105,114,101,100,46,
+ 41,10,10,32,32,32,32,42,115,111,117,114,99,101,95,104,
+ 97,115,104,42,32,105,115,32,116,104,101,32,105,109,112,111,
+ 114,116,108,105,98,46,117,116,105,108,46,115,111,117,114,99,
+ 101,95,104,97,115,104,40,41,32,111,102,32,116,104,101,32,
+ 115,111,117,114,99,101,32,102,105,108,101,46,10,10,32,32,
+ 32,32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,
+ 110,97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,
+ 108,101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,
+ 100,46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,
+ 114,32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,
+ 42,101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,
+ 32,97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,
+ 115,115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,
+ 114,111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,
+ 32,102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,
+ 100,32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,
+ 32,32,65,110,32,73,109,112,111,114,116,69,114,114,111,114,
+ 32,105,115,32,114,97,105,115,101,100,32,105,102,32,116,104,
+ 101,32,98,121,116,101,99,111,100,101,32,105,115,32,115,116,
+ 97,108,101,46,10,10,32,32,32,32,114,146,0,0,0,114,
+ 145,0,0,0,122,46,104,97,115,104,32,105,110,32,98,121,
+ 116,101,99,111,100,101,32,100,111,101,115,110,39,116,32,109,
+ 97,116,99,104,32,104,97,115,104,32,111,102,32,115,111,117,
+ 114,99,101,32,78,41,1,114,117,0,0,0,41,4,114,25,
+ 0,0,0,218,11,115,111,117,114,99,101,95,104,97,115,104,
+ 114,116,0,0,0,114,151,0,0,0,114,3,0,0,0,114,
+ 3,0,0,0,114,6,0,0,0,218,18,95,118,97,108,105,
+ 100,97,116,101,95,104,97,115,104,95,112,121,99,49,2,0,
+ 0,115,12,0,0,0,0,17,16,1,2,1,8,255,4,2,
+ 2,254,114,158,0,0,0,99,4,0,0,0,0,0,0,0,
+ 0,0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,
+ 115,80,0,0,0,116,0,160,1,124,0,161,1,125,4,116,
+ 2,124,4,116,3,131,2,114,56,116,4,160,5,100,1,124,
+ 2,161,2,1,0,124,3,100,2,117,1,114,52,116,6,160,
+ 7,124,4,124,3,161,2,1,0,124,4,83,0,116,8,100,
+ 3,160,9,124,2,161,1,124,1,124,2,100,4,141,3,130,
+ 1,100,2,83,0,41,5,122,35,67,111,109,112,105,108,101,
+ 32,98,121,116,101,99,111,100,101,32,97,115,32,102,111,117,
+ 110,100,32,105,110,32,97,32,112,121,99,46,122,21,99,111,
+ 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123,
+ 33,114,125,78,122,23,78,111,110,45,99,111,100,101,32,111,
+ 98,106,101,99,116,32,105,110,32,123,33,114,125,169,2,114,
+ 116,0,0,0,114,43,0,0,0,41,10,218,7,109,97,114,
+ 115,104,97,108,90,5,108,111,97,100,115,218,10,105,115,105,
+ 110,115,116,97,110,99,101,218,10,95,99,111,100,101,95,116,
+ 121,112,101,114,134,0,0,0,114,149,0,0,0,218,4,95,
+ 105,109,112,90,16,95,102,105,120,95,99,111,95,102,105,108,
+ 101,110,97,109,101,114,117,0,0,0,114,61,0,0,0,41,
+ 5,114,25,0,0,0,114,116,0,0,0,114,106,0,0,0,
+ 114,107,0,0,0,218,4,99,111,100,101,114,3,0,0,0,
+ 114,3,0,0,0,114,6,0,0,0,218,17,95,99,111,109,
+ 112,105,108,101,95,98,121,116,101,99,111,100,101,73,2,0,
+ 0,115,20,0,0,0,0,2,10,1,10,1,12,1,8,1,
+ 12,1,4,2,10,1,2,0,2,255,114,165,0,0,0,114,
+ 72,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
+ 0,4,0,0,0,5,0,0,0,67,0,0,0,115,70,0,
+ 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3,
+ 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1,
+ 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1,
+ 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1,
+ 161,1,1,0,124,3,83,0,41,2,122,43,80,114,111,100,
+ 117,99,101,32,116,104,101,32,100,97,116,97,32,102,111,114,
+ 32,97,32,116,105,109,101,115,116,97,109,112,45,98,97,115,
+ 101,100,32,112,121,99,46,114,72,0,0,0,41,6,218,9,
+ 98,121,116,101,97,114,114,97,121,114,148,0,0,0,218,6,
+ 101,120,116,101,110,100,114,20,0,0,0,114,160,0,0,0,
+ 218,5,100,117,109,112,115,41,4,114,164,0,0,0,218,5,
+ 109,116,105,109,101,114,155,0,0,0,114,25,0,0,0,114,
+ 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,22,
+ 95,99,111,100,101,95,116,111,95,116,105,109,101,115,116,97,
+ 109,112,95,112,121,99,86,2,0,0,115,12,0,0,0,0,
+ 2,8,1,14,1,14,1,14,1,16,1,114,170,0,0,0,
+ 84,99,3,0,0,0,0,0,0,0,0,0,0,0,5,0,
+ 0,0,5,0,0,0,67,0,0,0,115,80,0,0,0,116,
+ 0,116,1,131,1,125,3,100,1,124,2,100,1,62,0,66,
+ 0,125,4,124,3,160,2,116,3,124,4,131,1,161,1,1,
+ 0,116,4,124,1,131,1,100,2,107,2,115,50,74,0,130,
+ 1,124,3,160,2,124,1,161,1,1,0,124,3,160,2,116,
+ 5,160,6,124,0,161,1,161,1,1,0,124,3,83,0,41,
+ 3,122,38,80,114,111,100,117,99,101,32,116,104,101,32,100,
+ 97,116,97,32,102,111,114,32,97,32,104,97,115,104,45,98,
+ 97,115,101,100,32,112,121,99,46,114,38,0,0,0,114,146,
+ 0,0,0,41,7,114,166,0,0,0,114,148,0,0,0,114,
+ 167,0,0,0,114,20,0,0,0,114,22,0,0,0,114,160,
+ 0,0,0,114,168,0,0,0,41,5,114,164,0,0,0,114,
+ 157,0,0,0,90,7,99,104,101,99,107,101,100,114,25,0,
+ 0,0,114,82,0,0,0,114,3,0,0,0,114,3,0,0,
+ 0,114,6,0,0,0,218,17,95,99,111,100,101,95,116,111,
+ 95,104,97,115,104,95,112,121,99,96,2,0,0,115,14,0,
+ 0,0,0,2,8,1,12,1,14,1,16,1,10,1,16,1,
+ 114,171,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
+ 0,0,5,0,0,0,6,0,0,0,67,0,0,0,115,62,
+ 0,0,0,100,1,100,2,108,0,125,1,116,1,160,2,124,
+ 0,161,1,106,3,125,2,124,1,160,4,124,2,161,1,125,
+ 3,116,1,160,5,100,2,100,3,161,2,125,4,124,4,160,
+ 6,124,0,160,6,124,3,100,1,25,0,161,1,161,1,83,
+ 0,41,4,122,121,68,101,99,111,100,101,32,98,121,116,101,
+ 115,32,114,101,112,114,101,115,101,110,116,105,110,103,32,115,
+ 111,117,114,99,101,32,99,111,100,101,32,97,110,100,32,114,
+ 101,116,117,114,110,32,116,104,101,32,115,116,114,105,110,103,
+ 46,10,10,32,32,32,32,85,110,105,118,101,114,115,97,108,
+ 32,110,101,119,108,105,110,101,32,115,117,112,112,111,114,116,
+ 32,105,115,32,117,115,101,100,32,105,110,32,116,104,101,32,
+ 100,101,99,111,100,105,110,103,46,10,32,32,32,32,114,72,
+ 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122,
+ 101,114,63,0,0,0,90,7,66,121,116,101,115,73,79,90,
+ 8,114,101,97,100,108,105,110,101,90,15,100,101,116,101,99,
+ 116,95,101,110,99,111,100,105,110,103,90,25,73,110,99,114,
+ 101,109,101,110,116,97,108,78,101,119,108,105,110,101,68,101,
+ 99,111,100,101,114,218,6,100,101,99,111,100,101,41,5,218,
+ 12,115,111,117,114,99,101,95,98,121,116,101,115,114,172,0,
+ 0,0,90,21,115,111,117,114,99,101,95,98,121,116,101,115,
+ 95,114,101,97,100,108,105,110,101,218,8,101,110,99,111,100,
+ 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99,
+ 111,100,101,114,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114,
+ 99,101,107,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,12,1,0,0,124,1,100,1,117,
+ 0,114,58,100,2,125,1,116,0,124,2,100,3,131,2,114,
+ 68,122,14,124,2,160,1,124,0,161,1,125,1,87,0,113,
+ 68,4,0,116,2,121,54,1,0,1,0,1,0,89,0,113,
+ 68,48,0,110,10,116,3,160,4,124,1,161,1,125,1,116,
+ 5,106,6,124,0,124,2,124,1,100,4,141,3,125,4,100,
+ 5,124,4,95,7,124,2,100,1,117,0,114,152,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,104,124,5,124,0,124,1,131,
+ 2,125,2,124,2,124,4,95,11,1,0,113,152,113,104,100,
+ 1,83,0,124,3,116,12,117,0,114,216,116,0,124,2,100,
+ 6,131,2,114,222,122,14,124,2,160,13,124,0,161,1,125,
+ 7,87,0,110,18,4,0,116,2,121,202,1,0,1,0,1,
+ 0,89,0,113,222,48,0,124,7,114,222,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,8,124,1,144,1,114,8,116,15,124,1,131,
+ 1,100,7,25,0,125,8,124,4,106,14,160,16,124,8,161,
+ 1,1,0,124,4,83,0,41,8,97,61,1,0,0,82,101,
+ 116,117,114,110,32,97,32,109,111,100,117,108,101,32,115,112,
+ 101,99,32,98,97,115,101,100,32,111,110,32,97,32,102,105,
+ 108,101,32,108,111,99,97,116,105,111,110,46,10,10,32,32,
+ 32,32,84,111,32,105,110,100,105,99,97,116,101,32,116,104,
+ 97,116,32,116,104,101,32,109,111,100,117,108,101,32,105,115,
+ 32,97,32,112,97,99,107,97,103,101,44,32,115,101,116,10,
+ 32,32,32,32,115,117,98,109,111,100,117,108,101,95,115,101,
+ 97,114,99,104,95,108,111,99,97,116,105,111,110,115,32,116,
+ 111,32,97,32,108,105,115,116,32,111,102,32,100,105,114,101,
+ 99,116,111,114,121,32,112,97,116,104,115,46,32,32,65,110,
+ 10,32,32,32,32,101,109,112,116,121,32,108,105,115,116,32,
+ 105,115,32,115,117,102,102,105,99,105,101,110,116,44,32,116,
+ 104,111,117,103,104,32,105,116,115,32,110,111,116,32,111,116,
+ 104,101,114,119,105,115,101,32,117,115,101,102,117,108,32,116,
+ 111,32,116,104,101,10,32,32,32,32,105,109,112,111,114,116,
+ 32,115,121,115,116,101,109,46,10,10,32,32,32,32,84,104,
+ 101,32,108,111,97,100,101,114,32,109,117,115,116,32,116,97,
+ 107,101,32,97,32,115,112,101,99,32,97,115,32,105,116,115,
+ 32,111,110,108,121,32,95,95,105,110,105,116,95,95,40,41,
+ 32,97,114,103,46,10,10,32,32,32,32,78,122,9,60,117,
+ 110,107,110,111,119,110,62,218,12,103,101,116,95,102,105,108,
+ 101,110,97,109,101,169,1,218,6,111,114,105,103,105,110,84,
+ 218,10,105,115,95,112,97,99,107,97,103,101,114,72,0,0,
+ 0,41,17,114,128,0,0,0,114,179,0,0,0,114,117,0,
+ 0,0,114,2,0,0,0,114,78,0,0,0,114,134,0,0,
+ 0,218,10,77,111,100,117,108,101,83,112,101,99,90,13,95,
+ 115,101,116,95,102,105,108,101,97,116,116,114,218,27,95,103,
+ 101,116,95,115,117,112,112,111,114,116,101,100,95,102,105,108,
+ 101,95,108,111,97,100,101,114,115,114,110,0,0,0,114,111,
+ 0,0,0,114,140,0,0,0,218,9,95,80,79,80,85,76,
+ 65,84,69,114,182,0,0,0,114,178,0,0,0,114,46,0,
+ 0,0,218,6,97,112,112,101,110,100,41,9,114,116,0,0,
+ 0,90,8,108,111,99,97,116,105,111,110,114,140,0,0,0,
+ 114,178,0,0,0,218,4,115,112,101,99,218,12,108,111,97,
+ 100,101,114,95,99,108,97,115,115,218,8,115,117,102,102,105,
+ 120,101,115,114,182,0,0,0,90,7,100,105,114,110,97,109,
+ 101,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
+ 218,23,115,112,101,99,95,102,114,111,109,95,102,105,108,101,
+ 95,108,111,99,97,116,105,111,110,124,2,0,0,115,62,0,
+ 0,0,0,12,8,4,4,1,10,2,2,1,14,1,12,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,12,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,54,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,121,48,1,0,1,0,1,0,116,0,160,1,116,0,106,
+ 4,124,1,161,2,6,0,89,0,83,0,48,0,100,0,83,
+ 0,114,109,0,0,0,41,5,218,7,95,119,105,110,114,101,
+ 103,90,7,79,112,101,110,75,101,121,90,17,72,75,69,89,
+ 95,67,85,82,82,69,78,84,95,85,83,69,82,114,49,0,
+ 0,0,90,18,72,75,69,89,95,76,79,67,65,76,95,77,
+ 65,67,72,73,78,69,41,2,218,3,99,108,115,114,5,0,
+ 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,218,14,95,111,112,101,110,95,114,101,103,105,115,116,114,
+ 121,204,2,0,0,115,8,0,0,0,0,2,2,1,16,1,
+ 12,1,122,36,87,105,110,100,111,119,115,82,101,103,105,115,
+ 116,114,121,70,105,110,100,101,114,46,95,111,112,101,110,95,
+ 114,101,103,105,115,116,114,121,99,2,0,0,0,0,0,0,
+ 0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,0,
+ 0,115,132,0,0,0,124,0,106,0,114,14,124,0,106,1,
+ 125,2,110,6,124,0,106,2,125,2,124,2,106,3,124,1,
+ 100,1,116,4,106,5,100,0,100,2,133,2,25,0,22,0,
+ 100,3,141,2,125,3,122,58,124,0,160,6,124,3,161,1,
+ 143,28,125,4,116,7,160,8,124,4,100,4,161,2,125,5,
+ 87,0,100,0,4,0,4,0,131,3,1,0,110,16,49,0,
+ 115,94,48,0,1,0,1,0,1,0,89,0,1,0,87,0,
+ 110,20,4,0,116,9,121,126,1,0,1,0,1,0,89,0,
+ 100,0,83,0,48,0,124,5,83,0,41,5,78,122,5,37,
+ 100,46,37,100,114,27,0,0,0,41,2,114,139,0,0,0,
+ 90,11,115,121,115,95,118,101,114,115,105,111,110,114,39,0,
+ 0,0,41,10,218,11,68,69,66,85,71,95,66,85,73,76,
+ 68,218,18,82,69,71,73,83,84,82,89,95,75,69,89,95,
+ 68,69,66,85,71,218,12,82,69,71,73,83,84,82,89,95,
+ 75,69,89,114,61,0,0,0,114,8,0,0,0,218,12,118,
+ 101,114,115,105,111,110,95,105,110,102,111,114,194,0,0,0,
+ 114,192,0,0,0,90,10,81,117,101,114,121,86,97,108,117,
+ 101,114,49,0,0,0,41,6,114,193,0,0,0,114,139,0,
+ 0,0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,
+ 114,5,0,0,0,90,4,104,107,101,121,218,8,102,105,108,
+ 101,112,97,116,104,114,3,0,0,0,114,3,0,0,0,114,
+ 6,0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,
+ 103,105,115,116,114,121,211,2,0,0,115,24,0,0,0,0,
+ 2,6,1,8,2,6,1,6,1,16,255,6,2,2,1,12,
+ 1,46,1,12,1,8,1,122,38,87,105,110,100,111,119,115,
+ 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,95,
+ 115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,78,
+ 99,4,0,0,0,0,0,0,0,0,0,0,0,8,0,0,
+ 0,8,0,0,0,67,0,0,0,115,120,0,0,0,124,0,
+ 160,0,124,1,161,1,125,4,124,4,100,0,117,0,114,22,
+ 100,0,83,0,122,12,116,1,124,4,131,1,1,0,87,0,
+ 110,20,4,0,116,2,121,54,1,0,1,0,1,0,89,0,
+ 100,0,83,0,48,0,116,3,131,0,68,0,93,52,92,2,
+ 125,5,125,6,124,4,160,4,116,5,124,6,131,1,161,1,
+ 114,62,116,6,106,7,124,1,124,5,124,1,124,4,131,2,
+ 124,4,100,1,141,3,125,7,124,7,2,0,1,0,83,0,
+ 113,62,100,0,83,0,41,2,78,114,180,0,0,0,41,8,
+ 114,200,0,0,0,114,48,0,0,0,114,49,0,0,0,114,
+ 184,0,0,0,114,110,0,0,0,114,111,0,0,0,114,134,
+ 0,0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,
+ 111,97,100,101,114,41,8,114,193,0,0,0,114,139,0,0,
+ 0,114,43,0,0,0,218,6,116,97,114,103,101,116,114,199,
+ 0,0,0,114,140,0,0,0,114,189,0,0,0,114,187,0,
+ 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,218,9,102,105,110,100,95,115,112,101,99,226,2,0,0,
+ 115,28,0,0,0,0,2,10,1,8,1,4,1,2,1,12,
+ 1,12,1,8,1,14,1,14,1,6,1,8,1,2,254,6,
+ 3,122,31,87,105,110,100,111,119,115,82,101,103,105,115,116,
+ 114,121,70,105,110,100,101,114,46,102,105,110,100,95,115,112,
+ 101,99,99,3,0,0,0,0,0,0,0,0,0,0,0,4,
+ 0,0,0,4,0,0,0,67,0,0,0,115,34,0,0,0,
+ 124,0,160,0,124,1,124,2,161,2,125,3,124,3,100,1,
+ 117,1,114,26,124,3,106,1,83,0,100,1,83,0,100,1,
+ 83,0,41,2,122,108,70,105,110,100,32,109,111,100,117,108,
+ 101,32,110,97,109,101,100,32,105,110,32,116,104,101,32,114,
+ 101,103,105,115,116,114,121,46,10,10,32,32,32,32,32,32,
+ 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,
+ 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,
+ 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32,
+ 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,
+ 32,32,78,169,2,114,203,0,0,0,114,140,0,0,0,169,
+ 4,114,193,0,0,0,114,139,0,0,0,114,43,0,0,0,
+ 114,187,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
+ 6,0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,
+ 101,242,2,0,0,115,8,0,0,0,0,7,12,1,8,1,
+ 6,2,122,33,87,105,110,100,111,119,115,82,101,103,105,115,
+ 116,114,121,70,105,110,100,101,114,46,102,105,110,100,95,109,
+ 111,100,117,108,101,41,2,78,78,41,1,78,41,12,114,125,
+ 0,0,0,114,124,0,0,0,114,126,0,0,0,114,127,0,
+ 0,0,114,197,0,0,0,114,196,0,0,0,114,195,0,0,
+ 0,218,11,99,108,97,115,115,109,101,116,104,111,100,114,194,
+ 0,0,0,114,200,0,0,0,114,203,0,0,0,114,206,0,
+ 0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,
+ 0,114,6,0,0,0,114,191,0,0,0,192,2,0,0,115,
+ 28,0,0,0,8,2,4,3,2,255,2,4,2,255,2,3,
+ 4,2,2,1,10,6,2,1,10,14,2,1,12,15,2,1,
+ 114,191,0,0,0,99,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,2,0,0,0,64,0,0,0,115,48,
+ 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,
+ 2,100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,
+ 6,100,7,132,0,90,6,100,8,100,9,132,0,90,7,100,
+ 10,83,0,41,11,218,13,95,76,111,97,100,101,114,66,97,
+ 115,105,99,115,122,83,66,97,115,101,32,99,108,97,115,115,
+ 32,111,102,32,99,111,109,109,111,110,32,99,111,100,101,32,
+ 110,101,101,100,101,100,32,98,121,32,98,111,116,104,32,83,
+ 111,117,114,99,101,76,111,97,100,101,114,32,97,110,100,10,
+ 32,32,32,32,83,111,117,114,99,101,108,101,115,115,70,105,
+ 108,101,76,111,97,100,101,114,46,99,2,0,0,0,0,0,
+ 0,0,0,0,0,0,5,0,0,0,4,0,0,0,67,0,
+ 0,0,115,64,0,0,0,116,0,124,0,160,1,124,1,161,
+ 1,131,1,100,1,25,0,125,2,124,2,160,2,100,2,100,
+ 1,161,2,100,3,25,0,125,3,124,1,160,3,100,2,161,
+ 1,100,4,25,0,125,4,124,3,100,5,107,2,111,62,124,
+ 4,100,5,107,3,83,0,41,6,122,141,67,111,110,99,114,
+ 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,
+ 111,110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,
+ 100,101,114,46,105,115,95,112,97,99,107,97,103,101,32,98,
+ 121,32,99,104,101,99,107,105,110,103,32,105,102,10,32,32,
+ 32,32,32,32,32,32,116,104,101,32,112,97,116,104,32,114,
+ 101,116,117,114,110,101,100,32,98,121,32,103,101,116,95,102,
+ 105,108,101,110,97,109,101,32,104,97,115,32,97,32,102,105,
+ 108,101,110,97,109,101,32,111,102,32,39,95,95,105,110,105,
+ 116,95,95,46,112,121,39,46,114,38,0,0,0,114,70,0,
+ 0,0,114,72,0,0,0,114,27,0,0,0,218,8,95,95,
+ 105,110,105,116,95,95,41,4,114,46,0,0,0,114,179,0,
+ 0,0,114,42,0,0,0,114,40,0,0,0,41,5,114,118,
+ 0,0,0,114,139,0,0,0,114,96,0,0,0,90,13,102,
+ 105,108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,
+ 105,108,95,110,97,109,101,114,3,0,0,0,114,3,0,0,
+ 0,114,6,0,0,0,114,182,0,0,0,5,3,0,0,115,
+ 8,0,0,0,0,3,18,1,16,1,14,1,122,24,95,76,
+ 111,97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,
+ 97,99,107,97,103,101,99,2,0,0,0,0,0,0,0,0,
+ 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,
+ 4,0,0,0,100,1,83,0,169,2,122,42,85,115,101,32,
+ 100,101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,
+ 115,32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,
+ 97,116,105,111,110,46,78,114,3,0,0,0,169,2,114,118,
+ 0,0,0,114,187,0,0,0,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,218,13,99,114,101,97,116,101,95,
+ 109,111,100,117,108,101,13,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,117,0,114,36,
+ 116,2,100,2,160,3,124,1,106,1,161,1,131,1,130,1,
+ 116,4,160,5,116,6,124,2,124,1,106,7,161,3,1,0,
+ 100,1,83,0,41,3,122,19,69,120,101,99,117,116,101,32,
+ 116,104,101,32,109,111,100,117,108,101,46,78,122,52,99,97,
+ 110,110,111,116,32,108,111,97,100,32,109,111,100,117,108,101,
+ 32,123,33,114,125,32,119,104,101,110,32,103,101,116,95,99,
+ 111,100,101,40,41,32,114,101,116,117,114,110,115,32,78,111,
+ 110,101,41,8,218,8,103,101,116,95,99,111,100,101,114,125,
+ 0,0,0,114,117,0,0,0,114,61,0,0,0,114,134,0,
+ 0,0,218,25,95,99,97,108,108,95,119,105,116,104,95,102,
+ 114,97,109,101,115,95,114,101,109,111,118,101,100,218,4,101,
+ 120,101,99,114,131,0,0,0,41,3,114,118,0,0,0,218,
+ 6,109,111,100,117,108,101,114,164,0,0,0,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,218,11,101,120,101,
+ 99,95,109,111,100,117,108,101,16,3,0,0,115,12,0,0,
+ 0,0,2,12,1,8,1,6,1,4,255,6,2,122,25,95,
+ 76,111,97,100,101,114,66,97,115,105,99,115,46,101,120,101,
+ 99,95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,
+ 0,0,0,0,0,2,0,0,0,4,0,0,0,67,0,0,
+ 0,115,12,0,0,0,116,0,160,1,124,0,124,1,161,2,
+ 83,0,41,1,122,26,84,104,105,115,32,109,111,100,117,108,
+ 101,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,
+ 41,2,114,134,0,0,0,218,17,95,108,111,97,100,95,109,
+ 111,100,117,108,101,95,115,104,105,109,169,2,114,118,0,0,
+ 0,114,139,0,0,0,114,3,0,0,0,114,3,0,0,0,
+ 114,6,0,0,0,218,11,108,111,97,100,95,109,111,100,117,
+ 108,101,24,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,0,3,0,0,
+ 115,10,0,0,0,8,2,4,3,8,8,8,3,8,8,114,
+ 208,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,3,0,0,0,64,0,0,0,115,74,0,
+ 0,0,101,0,90,1,100,0,90,2,100,1,100,2,132,0,
+ 90,3,100,3,100,4,132,0,90,4,100,5,100,6,132,0,
+ 90,5,100,7,100,8,132,0,90,6,100,9,100,10,132,0,
+ 90,7,100,11,100,12,156,1,100,13,100,14,132,2,90,8,
+ 100,15,100,16,132,0,90,9,100,17,83,0,41,18,218,12,
+ 83,111,117,114,99,101,76,111,97,100,101,114,99,2,0,0,
+ 0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
+ 0,67,0,0,0,115,8,0,0,0,116,0,130,1,100,1,
+ 83,0,41,2,122,165,79,112,116,105,111,110,97,108,32,109,
+ 101,116,104,111,100,32,116,104,97,116,32,114,101,116,117,114,
+ 110,115,32,116,104,101,32,109,111,100,105,102,105,99,97,116,
+ 105,111,110,32,116,105,109,101,32,40,97,110,32,105,110,116,
+ 41,32,102,111,114,32,116,104,101,10,32,32,32,32,32,32,
+ 32,32,115,112,101,99,105,102,105,101,100,32,112,97,116,104,
+ 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,
+ 32,32,32,82,97,105,115,101,115,32,79,83,69,114,114,111,
+ 114,32,119,104,101,110,32,116,104,101,32,112,97,116,104,32,
+ 99,97,110,110,111,116,32,98,101,32,104,97,110,100,108,101,
+ 100,46,10,32,32,32,32,32,32,32,32,78,41,1,114,49,
+ 0,0,0,169,2,114,118,0,0,0,114,43,0,0,0,114,
+ 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,10,
+ 112,97,116,104,95,109,116,105,109,101,31,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,
- 9,102,105,110,100,95,115,112,101,99,222,2,0,0,115,28,
- 0,0,0,0,2,10,1,8,1,4,1,2,1,12,1,14,
- 1,8,1,14,1,14,1,6,1,8,1,2,254,6,3,122,
- 31,87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,
- 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,
- 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
- 0,4,0,0,0,67,0,0,0,115,34,0,0,0,124,0,
- 160,0,124,1,124,2,161,2,125,3,124,3,100,1,107,9,
- 114,26,124,3,106,1,83,0,100,1,83,0,100,1,83,0,
- 41,2,122,108,70,105,110,100,32,109,111,100,117,108,101,32,
- 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103,
- 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32,
- 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,
- 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,
- 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,
- 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,
- 78,169,2,114,203,0,0,0,114,140,0,0,0,169,4,114,
- 193,0,0,0,114,139,0,0,0,114,43,0,0,0,114,187,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,238,
- 2,0,0,115,8,0,0,0,0,7,12,1,8,1,6,2,
- 122,33,87,105,110,100,111,119,115,82,101,103,105,115,116,114,
- 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,
- 117,108,101,41,2,78,78,41,1,78,41,12,114,125,0,0,
- 0,114,124,0,0,0,114,126,0,0,0,114,127,0,0,0,
- 114,197,0,0,0,114,196,0,0,0,114,195,0,0,0,218,
- 11,99,108,97,115,115,109,101,116,104,111,100,114,194,0,0,
- 0,114,200,0,0,0,114,203,0,0,0,114,206,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,191,0,0,0,188,2,0,0,115,28,0,
- 0,0,8,2,4,3,2,255,2,4,2,255,2,3,4,2,
- 2,1,10,6,2,1,10,14,2,1,12,15,2,1,114,191,
- 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,0,2,0,0,0,64,0,0,0,115,48,0,0,
- 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,
- 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100,
- 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,83,
- 0,41,11,218,13,95,76,111,97,100,101,114,66,97,115,105,
- 99,115,122,83,66,97,115,101,32,99,108,97,115,115,32,111,
- 102,32,99,111,109,109,111,110,32,99,111,100,101,32,110,101,
- 101,100,101,100,32,98,121,32,98,111,116,104,32,83,111,117,
- 114,99,101,76,111,97,100,101,114,32,97,110,100,10,32,32,
- 32,32,83,111,117,114,99,101,108,101,115,115,70,105,108,101,
- 76,111,97,100,101,114,46,99,2,0,0,0,0,0,0,0,
- 0,0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,
- 115,64,0,0,0,116,0,124,0,160,1,124,1,161,1,131,
- 1,100,1,25,0,125,2,124,2,160,2,100,2,100,1,161,
- 2,100,3,25,0,125,3,124,1,160,3,100,2,161,1,100,
- 4,25,0,125,4,124,3,100,5,107,2,111,62,124,4,100,
- 5,107,3,83,0,41,6,122,141,67,111,110,99,114,101,116,
- 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,
- 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,
- 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32,
- 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32,
- 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116,
- 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108,
- 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101,
- 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95,
- 95,46,112,121,39,46,114,38,0,0,0,114,70,0,0,0,
- 114,72,0,0,0,114,27,0,0,0,218,8,95,95,105,110,
- 105,116,95,95,41,4,114,46,0,0,0,114,179,0,0,0,
- 114,42,0,0,0,114,40,0,0,0,41,5,114,118,0,0,
- 0,114,139,0,0,0,114,96,0,0,0,90,13,102,105,108,
- 101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,108,
- 95,110,97,109,101,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,182,0,0,0,1,3,0,0,115,8,0,
- 0,0,0,3,18,1,16,1,14,1,122,24,95,76,111,97,
- 100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,99,
- 107,97,103,101,99,2,0,0,0,0,0,0,0,0,0,0,
- 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
- 0,0,100,1,83,0,169,2,122,42,85,115,101,32,100,101,
- 102,97,117,108,116,32,115,101,109,97,110,116,105,99,115,32,
- 102,111,114,32,109,111,100,117,108,101,32,99,114,101,97,116,
- 105,111,110,46,78,114,3,0,0,0,169,2,114,118,0,0,
- 0,114,187,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,13,99,114,101,97,116,101,95,109,111,
- 100,117,108,101,9,3,0,0,115,2,0,0,0,0,1,122,
- 27,95,76,111,97,100,101,114,66,97,115,105,99,115,46,99,
- 114,101,97,116,101,95,109,111,100,117,108,101,99,2,0,0,
- 0,0,0,0,0,0,0,0,0,3,0,0,0,5,0,0,
- 0,67,0,0,0,115,56,0,0,0,124,0,160,0,124,1,
- 106,1,161,1,125,2,124,2,100,1,107,8,114,36,116,2,
- 100,2,160,3,124,1,106,1,161,1,131,1,130,1,116,4,
- 160,5,116,6,124,2,124,1,106,7,161,3,1,0,100,1,
- 83,0,41,3,122,19,69,120,101,99,117,116,101,32,116,104,
- 101,32,109,111,100,117,108,101,46,78,122,52,99,97,110,110,
- 111,116,32,108,111,97,100,32,109,111,100,117,108,101,32,123,
- 33,114,125,32,119,104,101,110,32,103,101,116,95,99,111,100,
- 101,40,41,32,114,101,116,117,114,110,115,32,78,111,110,101,
- 41,8,218,8,103,101,116,95,99,111,100,101,114,125,0,0,
- 0,114,117,0,0,0,114,61,0,0,0,114,134,0,0,0,
- 218,25,95,99,97,108,108,95,119,105,116,104,95,102,114,97,
- 109,101,115,95,114,101,109,111,118,101,100,218,4,101,120,101,
- 99,114,131,0,0,0,41,3,114,118,0,0,0,218,6,109,
- 111,100,117,108,101,114,164,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,218,11,101,120,101,99,95,
- 109,111,100,117,108,101,12,3,0,0,115,12,0,0,0,0,
- 2,12,1,8,1,6,1,4,255,6,2,122,25,95,76,111,
- 97,100,101,114,66,97,115,105,99,115,46,101,120,101,99,95,
- 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,
- 12,0,0,0,116,0,160,1,124,0,124,1,161,2,83,0,
- 41,1,122,26,84,104,105,115,32,109,111,100,117,108,101,32,
- 105,115,32,100,101,112,114,101,99,97,116,101,100,46,41,2,
- 114,134,0,0,0,218,17,95,108,111,97,100,95,109,111,100,
- 117,108,101,95,115,104,105,109,169,2,114,118,0,0,0,114,
- 139,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101,
- 20,3,0,0,115,2,0,0,0,0,2,122,25,95,76,111,
- 97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,95,
- 109,111,100,117,108,101,78,41,8,114,125,0,0,0,114,124,
- 0,0,0,114,126,0,0,0,114,127,0,0,0,114,182,0,
- 0,0,114,212,0,0,0,114,217,0,0,0,114,220,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,208,0,0,0,252,2,0,0,115,10,
- 0,0,0,8,2,4,3,8,8,8,3,8,8,114,208,0,
- 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,0,
- 0,0,0,3,0,0,0,64,0,0,0,115,74,0,0,0,
- 101,0,90,1,100,0,90,2,100,1,100,2,132,0,90,3,
- 100,3,100,4,132,0,90,4,100,5,100,6,132,0,90,5,
- 100,7,100,8,132,0,90,6,100,9,100,10,132,0,90,7,
- 100,11,100,12,156,1,100,13,100,14,132,2,90,8,100,15,
- 100,16,132,0,90,9,100,17,83,0,41,18,218,12,83,111,
- 117,114,99,101,76,111,97,100,101,114,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,
- 0,0,0,115,8,0,0,0,116,0,130,1,100,1,83,0,
- 41,2,122,165,79,112,116,105,111,110,97,108,32,109,101,116,
- 104,111,100,32,116,104,97,116,32,114,101,116,117,114,110,115,
- 32,116,104,101,32,109,111,100,105,102,105,99,97,116,105,111,
- 110,32,116,105,109,101,32,40,97,110,32,105,110,116,41,32,
- 102,111,114,32,116,104,101,10,32,32,32,32,32,32,32,32,
- 115,112,101,99,105,102,105,101,100,32,112,97,116,104,32,40,
- 97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,
- 32,82,97,105,115,101,115,32,79,83,69,114,114,111,114,32,
- 119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,97,
- 110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,46,
- 10,32,32,32,32,32,32,32,32,78,41,1,114,49,0,0,
- 0,169,2,114,118,0,0,0,114,43,0,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,218,10,112,97,
- 116,104,95,109,116,105,109,101,27,3,0,0,115,2,0,0,
- 0,0,6,122,23,83,111,117,114,99,101,76,111,97,100,101,
- 114,46,112,97,116,104,95,109,116,105,109,101,99,2,0,0,
- 0,0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
- 0,67,0,0,0,115,14,0,0,0,100,1,124,0,160,0,
- 124,1,161,1,105,1,83,0,41,2,97,158,1,0,0,79,
- 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,114,
- 101,116,117,114,110,105,110,103,32,97,32,109,101,116,97,100,
- 97,116,97,32,100,105,99,116,32,102,111,114,32,116,104,101,
- 32,115,112,101,99,105,102,105,101,100,10,32,32,32,32,32,
- 32,32,32,112,97,116,104,32,40,97,32,115,116,114,41,46,
- 10,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98,
- 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32,
- 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100,
- 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117,
- 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32,
- 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32,
- 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111,
- 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32,
- 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112,
- 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115,
- 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32,
- 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46,
- 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109,
- 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104,
- 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111,
- 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116,
- 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32,
- 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114,
- 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116,
- 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100,
- 108,101,100,46,10,32,32,32,32,32,32,32,32,114,169,0,
- 0,0,41,1,114,223,0,0,0,114,222,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,218,10,112,
- 97,116,104,95,115,116,97,116,115,35,3,0,0,115,2,0,
- 0,0,0,12,122,23,83,111,117,114,99,101,76,111,97,100,
- 101,114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,
- 0,0,0,0,0,0,0,0,0,0,4,0,0,0,4,0,
- 0,0,67,0,0,0,115,12,0,0,0,124,0,160,0,124,
- 2,124,3,161,2,83,0,41,1,122,228,79,112,116,105,111,
- 110,97,108,32,109,101,116,104,111,100,32,119,104,105,99,104,
- 32,119,114,105,116,101,115,32,100,97,116,97,32,40,98,121,
- 116,101,115,41,32,116,111,32,97,32,102,105,108,101,32,112,
- 97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,32,
- 32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,105,
- 110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,97,
- 108,108,111,119,115,32,102,111,114,32,116,104,101,32,119,114,
- 105,116,105,110,103,32,111,102,32,98,121,116,101,99,111,100,
- 101,32,102,105,108,101,115,46,10,10,32,32,32,32,32,32,
- 32,32,84,104,101,32,115,111,117,114,99,101,32,112,97,116,
- 104,32,105,115,32,110,101,101,100,101,100,32,105,110,32,111,
- 114,100,101,114,32,116,111,32,99,111,114,114,101,99,116,108,
- 121,32,116,114,97,110,115,102,101,114,32,112,101,114,109,105,
- 115,115,105,111,110,115,10,32,32,32,32,32,32,32,32,41,
- 1,218,8,115,101,116,95,100,97,116,97,41,4,114,118,0,
- 0,0,114,107,0,0,0,90,10,99,97,99,104,101,95,112,
- 97,116,104,114,25,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,218,15,95,99,97,99,104,101,95,
- 98,121,116,101,99,111,100,101,49,3,0,0,115,2,0,0,
- 0,0,8,122,28,83,111,117,114,99,101,76,111,97,100,101,
- 114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,100,
- 101,99,3,0,0,0,0,0,0,0,0,0,0,0,3,0,
- 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
- 1,83,0,41,2,122,150,79,112,116,105,111,110,97,108,32,
- 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105,
- 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41,
- 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32,
- 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32,
- 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116,
- 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119,
- 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110,
- 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105,
- 108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,3,
- 0,0,0,41,3,114,118,0,0,0,114,43,0,0,0,114,
- 25,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,114,225,0,0,0,59,3,0,0,115,2,0,0,
- 0,0,1,122,21,83,111,117,114,99,101,76,111,97,100,101,
- 114,46,115,101,116,95,100,97,116,97,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,5,0,0,0,10,0,0,0,67,
- 0,0,0,115,86,0,0,0,124,0,160,0,124,1,161,1,
- 125,2,122,14,124,0,160,1,124,2,161,1,125,3,87,0,
- 110,52,4,0,116,2,107,10,114,76,1,0,125,4,1,0,
+ 10,112,97,116,104,95,115,116,97,116,115,39,3,0,0,115,
+ 2,0,0,0,0,12,122,23,83,111,117,114,99,101,76,111,
+ 97,100,101,114,46,112,97,116,104,95,115,116,97,116,115,99,
+ 4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
+ 4,0,0,0,67,0,0,0,115,12,0,0,0,124,0,160,
+ 0,124,2,124,3,161,2,83,0,41,1,122,228,79,112,116,
+ 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,
+ 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,
+ 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,
+ 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,
+ 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,
+ 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,
+ 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,
+ 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,
+ 111,100,101,32,102,105,108,101,115,46,10,10,32,32,32,32,
+ 32,32,32,32,84,104,101,32,115,111,117,114,99,101,32,112,
+ 97,116,104,32,105,115,32,110,101,101,100,101,100,32,105,110,
+ 32,111,114,100,101,114,32,116,111,32,99,111,114,114,101,99,
+ 116,108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,
+ 109,105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,
+ 32,41,1,218,8,115,101,116,95,100,97,116,97,41,4,114,
+ 118,0,0,0,114,107,0,0,0,90,10,99,97,99,104,101,
+ 95,112,97,116,104,114,25,0,0,0,114,3,0,0,0,114,
+ 3,0,0,0,114,6,0,0,0,218,15,95,99,97,99,104,
+ 101,95,98,121,116,101,99,111,100,101,53,3,0,0,115,2,
+ 0,0,0,0,8,122,28,83,111,117,114,99,101,76,111,97,
+ 100,101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,
+ 111,100,101,99,3,0,0,0,0,0,0,0,0,0,0,0,
+ 3,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,
+ 0,100,1,83,0,41,2,122,150,79,112,116,105,111,110,97,
+ 108,32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,
+ 114,105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,
+ 115,41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,
+ 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,
+ 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,
+ 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,
+ 111,119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,
+ 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,
+ 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,78,
+ 114,3,0,0,0,41,3,114,118,0,0,0,114,43,0,0,
+ 0,114,25,0,0,0,114,3,0,0,0,114,3,0,0,0,
+ 114,6,0,0,0,114,225,0,0,0,63,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,84,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,50,4,0,116,2,121,74,1,0,125,4,1,0,
122,26,116,3,100,1,124,1,100,2,141,2,124,4,130,2,
87,0,89,0,100,3,125,4,126,4,110,10,100,3,125,4,
126,4,48,0,48,0,116,4,124,3,131,1,83,0,41,4,
@@ -1268,8 +1268,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,176,0,0,0,41,5,114,118,0,0,0,114,139,0,0,
0,114,43,0,0,0,114,174,0,0,0,218,3,101,120,99,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 10,103,101,116,95,115,111,117,114,99,101,66,3,0,0,115,
- 20,0,0,0,0,2,10,1,2,1,14,1,16,1,4,1,
+ 10,103,101,116,95,115,111,117,114,99,101,70,3,0,0,115,
+ 20,0,0,0,0,2,10,1,2,1,14,1,14,1,4,1,
2,255,4,1,2,255,24,2,122,23,83,111,117,114,99,101,
76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,
101,114,104,0,0,0,41,1,218,9,95,111,112,116,105,109,
@@ -1291,311 +1291,310 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
118,0,0,0,114,25,0,0,0,114,43,0,0,0,114,230,
0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
0,0,218,14,115,111,117,114,99,101,95,116,111,95,99,111,
- 100,101,76,3,0,0,115,8,0,0,0,0,5,12,1,2,
+ 100,101,80,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,
+ 0,9,0,0,0,67,0,0,0,115,24,2,0,0,124,0,
160,0,124,1,161,1,125,2,100,1,125,3,100,1,125,4,
100,1,125,5,100,2,125,6,100,3,125,7,122,12,116,1,
- 124,2,131,1,125,8,87,0,110,26,4,0,116,2,107,10,
- 114,68,1,0,1,0,1,0,100,1,125,8,89,0,144,1,
- 110,48,48,0,122,14,124,0,160,3,124,2,161,1,125,9,
- 87,0,110,22,4,0,116,4,107,10,114,106,1,0,1,0,
- 1,0,89,0,144,1,110,10,48,0,116,5,124,9,100,4,
- 25,0,131,1,125,3,122,14,124,0,160,6,124,8,161,1,
- 125,10,87,0,110,20,4,0,116,4,107,10,114,154,1,0,
- 1,0,1,0,89,0,110,218,48,0,124,1,124,8,100,5,
- 156,2,125,11,122,148,116,7,124,10,124,1,124,11,131,3,
- 125,12,116,8,124,10,131,1,100,6,100,1,133,2,25,0,
- 125,13,124,12,100,7,64,0,100,8,107,3,125,6,124,6,
- 144,1,114,36,124,12,100,9,64,0,100,8,107,3,125,7,
- 116,9,106,10,100,10,107,3,144,1,114,56,124,7,115,254,
- 116,9,106,10,100,11,107,2,144,1,114,56,124,0,160,6,
- 124,2,161,1,125,4,116,9,160,11,116,12,124,4,161,2,
- 125,5,116,13,124,10,124,5,124,1,124,11,131,4,1,0,
- 110,20,116,14,124,10,124,3,124,9,100,12,25,0,124,1,
- 124,11,131,5,1,0,87,0,110,26,4,0,116,15,116,16,
- 102,2,107,10,144,1,114,84,1,0,1,0,1,0,89,0,
- 110,32,48,0,116,17,160,18,100,13,124,8,124,2,161,3,
- 1,0,116,19,124,13,124,1,124,8,124,2,100,14,141,4,
- 83,0,124,4,100,1,107,8,144,1,114,136,124,0,160,6,
- 124,2,161,1,125,4,124,0,160,20,124,4,124,2,161,2,
- 125,14,116,17,160,18,100,15,124,2,161,2,1,0,116,21,
- 106,22,144,2,115,30,124,8,100,1,107,9,144,2,114,30,
- 124,3,100,1,107,9,144,2,114,30,124,6,144,1,114,228,
- 124,5,100,1,107,8,144,1,114,214,116,9,160,11,124,4,
- 161,1,125,5,116,23,124,14,124,5,124,7,131,3,125,10,
- 110,16,116,24,124,14,124,3,116,25,124,4,131,1,131,3,
- 125,10,122,18,124,0,160,26,124,2,124,8,124,10,161,3,
- 1,0,87,0,110,22,4,0,116,2,107,10,144,2,114,28,
- 1,0,1,0,1,0,89,0,110,2,48,0,124,14,83,0,
- 41,16,122,190,67,111,110,99,114,101,116,101,32,105,109,112,
- 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,
- 110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,116,
- 95,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32,
- 82,101,97,100,105,110,103,32,111,102,32,98,121,116,101,99,
- 111,100,101,32,114,101,113,117,105,114,101,115,32,112,97,116,
- 104,95,115,116,97,116,115,32,116,111,32,98,101,32,105,109,
- 112,108,101,109,101,110,116,101,100,46,32,84,111,32,119,114,
- 105,116,101,10,32,32,32,32,32,32,32,32,98,121,116,101,
- 99,111,100,101,44,32,115,101,116,95,100,97,116,97,32,109,
- 117,115,116,32,97,108,115,111,32,98,101,32,105,109,112,108,
- 101,109,101,110,116,101,100,46,10,10,32,32,32,32,32,32,
- 32,32,78,70,84,114,169,0,0,0,114,159,0,0,0,114,
- 145,0,0,0,114,38,0,0,0,114,72,0,0,0,114,27,
- 0,0,0,90,5,110,101,118,101,114,90,6,97,108,119,97,
- 121,115,218,4,115,105,122,101,122,13,123,125,32,109,97,116,
- 99,104,101,115,32,123,125,41,3,114,116,0,0,0,114,106,
- 0,0,0,114,107,0,0,0,122,19,99,111,100,101,32,111,
- 98,106,101,99,116,32,102,114,111,109,32,123,125,41,27,114,
- 179,0,0,0,114,97,0,0,0,114,81,0,0,0,114,224,
- 0,0,0,114,49,0,0,0,114,17,0,0,0,114,227,0,
- 0,0,114,152,0,0,0,218,10,109,101,109,111,114,121,118,
- 105,101,119,114,163,0,0,0,90,21,99,104,101,99,107,95,
- 104,97,115,104,95,98,97,115,101,100,95,112,121,99,115,114,
- 157,0,0,0,218,17,95,82,65,87,95,77,65,71,73,67,
- 95,78,85,77,66,69,82,114,158,0,0,0,114,156,0,0,
- 0,114,117,0,0,0,114,150,0,0,0,114,134,0,0,0,
- 114,149,0,0,0,114,165,0,0,0,114,233,0,0,0,114,
- 8,0,0,0,218,19,100,111,110,116,95,119,114,105,116,101,
- 95,98,121,116,101,99,111,100,101,114,171,0,0,0,114,170,
- 0,0,0,114,22,0,0,0,114,226,0,0,0,41,15,114,
- 118,0,0,0,114,139,0,0,0,114,107,0,0,0,114,154,
- 0,0,0,114,174,0,0,0,114,157,0,0,0,90,10,104,
- 97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,107,
- 95,115,111,117,114,99,101,114,106,0,0,0,218,2,115,116,
- 114,25,0,0,0,114,151,0,0,0,114,82,0,0,0,90,
- 10,98,121,116,101,115,95,100,97,116,97,90,11,99,111,100,
- 101,95,111,98,106,101,99,116,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,114,213,0,0,0,84,3,0,0,
- 115,152,0,0,0,0,7,10,1,4,1,4,1,4,1,4,
- 1,4,1,2,1,12,1,14,1,12,2,2,1,14,1,14,
- 1,8,2,12,1,2,1,14,1,14,1,6,3,2,1,2,
- 254,6,4,2,1,12,1,16,1,12,1,6,1,12,1,12,
- 1,2,255,2,2,8,254,4,3,10,1,4,1,2,1,2,
- 254,4,4,8,1,2,255,6,3,2,1,2,1,2,1,6,
- 1,2,1,2,251,8,7,20,1,6,2,8,1,2,255,4,
- 2,6,1,2,1,2,254,6,3,10,1,10,1,12,1,12,
- 1,18,1,6,255,4,2,6,1,10,1,10,1,14,2,6,
- 1,6,255,4,2,2,1,18,1,16,1,6,1,122,21,83,
- 111,117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,
- 99,111,100,101,78,41,10,114,125,0,0,0,114,124,0,0,
- 0,114,126,0,0,0,114,223,0,0,0,114,224,0,0,0,
- 114,226,0,0,0,114,225,0,0,0,114,229,0,0,0,114,
- 233,0,0,0,114,213,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,114,221,0,
- 0,0,25,3,0,0,115,14,0,0,0,8,2,8,8,8,
- 14,8,10,8,7,8,10,14,8,114,221,0,0,0,99,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,
- 0,0,0,0,0,0,0,115,124,0,0,0,101,0,90,1,
- 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,
- 100,4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,
- 101,7,135,0,102,1,100,8,100,9,132,8,131,1,90,8,
- 101,7,100,10,100,11,132,0,131,1,90,9,100,12,100,13,
- 132,0,90,10,101,7,100,14,100,15,132,0,131,1,90,11,
- 100,16,100,17,132,0,90,12,100,18,100,19,132,0,90,13,
- 100,20,100,21,132,0,90,14,100,22,100,23,132,0,90,15,
- 135,0,4,0,90,16,83,0,41,24,218,10,70,105,108,101,
- 76,111,97,100,101,114,122,103,66,97,115,101,32,102,105,108,
- 101,32,108,111,97,100,101,114,32,99,108,97,115,115,32,119,
- 104,105,99,104,32,105,109,112,108,101,109,101,110,116,115,32,
- 116,104,101,32,108,111,97,100,101,114,32,112,114,111,116,111,
- 99,111,108,32,109,101,116,104,111,100,115,32,116,104,97,116,
- 10,32,32,32,32,114,101,113,117,105,114,101,32,102,105,108,
- 101,32,115,121,115,116,101,109,32,117,115,97,103,101,46,99,
- 3,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
- 2,0,0,0,67,0,0,0,115,16,0,0,0,124,1,124,
- 0,95,0,124,2,124,0,95,1,100,1,83,0,41,2,122,
- 75,67,97,99,104,101,32,116,104,101,32,109,111,100,117,108,
- 101,32,110,97,109,101,32,97,110,100,32,116,104,101,32,112,
- 97,116,104,32,116,111,32,116,104,101,32,102,105,108,101,32,
- 102,111,117,110,100,32,98,121,32,116,104,101,10,32,32,32,
- 32,32,32,32,32,102,105,110,100,101,114,46,78,114,159,0,
- 0,0,41,3,114,118,0,0,0,114,139,0,0,0,114,43,
- 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,209,0,0,0,174,3,0,0,115,4,0,0,0,
- 0,3,6,1,122,19,70,105,108,101,76,111,97,100,101,114,
- 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,
- 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,
- 0,0,115,24,0,0,0,124,0,106,0,124,1,106,0,107,
- 2,111,22,124,0,106,1,124,1,106,1,107,2,83,0,114,
- 109,0,0,0,169,2,218,9,95,95,99,108,97,115,115,95,
- 95,114,131,0,0,0,169,2,114,118,0,0,0,90,5,111,
- 116,104,101,114,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,218,6,95,95,101,113,95,95,180,3,0,0,115,
- 6,0,0,0,0,1,12,1,10,255,122,17,70,105,108,101,
- 76,111,97,100,101,114,46,95,95,101,113,95,95,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,
- 0,0,67,0,0,0,115,20,0,0,0,116,0,124,0,106,
- 1,131,1,116,0,124,0,106,2,131,1,65,0,83,0,114,
- 109,0,0,0,169,3,218,4,104,97,115,104,114,116,0,0,
- 0,114,43,0,0,0,169,1,114,118,0,0,0,114,3,0,
- 0,0,114,3,0,0,0,114,6,0,0,0,218,8,95,95,
- 104,97,115,104,95,95,184,3,0,0,115,2,0,0,0,0,
- 1,122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,
- 104,97,115,104,95,95,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,
- 16,0,0,0,116,0,116,1,124,0,131,2,160,2,124,1,
- 161,1,83,0,41,1,122,100,76,111,97,100,32,97,32,109,
- 111,100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,
- 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,
- 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,
- 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,
- 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,
- 100,46,10,10,32,32,32,32,32,32,32,32,41,3,218,5,
- 115,117,112,101,114,114,239,0,0,0,114,220,0,0,0,114,
- 219,0,0,0,169,1,114,241,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,220,0,0,0,187,3,0,0,115,2,
- 0,0,0,0,10,122,22,70,105,108,101,76,111,97,100,101,
- 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0,
- 0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,
- 0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83,
- 0,169,1,122,58,82,101,116,117,114,110,32,116,104,101,32,
- 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114,
- 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100,
- 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,114,
- 47,0,0,0,114,219,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,179,0,0,0,199,3,0,
- 0,115,2,0,0,0,0,3,122,23,70,105,108,101,76,111,
- 97,100,101,114,46,103,101,116,95,102,105,108,101,110,97,109,
- 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,
- 0,0,8,0,0,0,67,0,0,0,115,126,0,0,0,116,
- 0,124,0,116,1,116,2,102,2,131,2,114,70,116,3,160,
- 4,116,5,124,1,131,1,161,1,143,24,125,2,124,2,160,
- 6,161,0,87,0,2,0,100,1,4,0,4,0,131,3,1,
- 0,83,0,49,0,115,58,48,0,1,0,1,0,1,0,89,
- 0,1,0,110,52,116,3,160,7,124,1,100,2,161,2,143,
- 24,125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,
- 0,4,0,131,3,1,0,83,0,49,0,115,112,48,0,1,
- 0,1,0,1,0,89,0,1,0,100,1,83,0,41,3,122,
- 39,82,101,116,117,114,110,32,116,104,101,32,100,97,116,97,
- 32,102,114,111,109,32,112,97,116,104,32,97,115,32,114,97,
- 119,32,98,121,116,101,115,46,78,218,1,114,41,8,114,161,
- 0,0,0,114,221,0,0,0,218,19,69,120,116,101,110,115,
- 105,111,110,70,105,108,101,76,111,97,100,101,114,114,63,0,
- 0,0,90,9,111,112,101,110,95,99,111,100,101,114,84,0,
- 0,0,90,4,114,101,97,100,114,64,0,0,0,41,3,114,
- 118,0,0,0,114,43,0,0,0,114,67,0,0,0,114,3,
- 0,0,0,114,3,0,0,0,114,6,0,0,0,114,227,0,
- 0,0,204,3,0,0,115,10,0,0,0,0,2,14,1,16,
- 1,40,2,14,1,122,19,70,105,108,101,76,111,97,100,101,
- 114,46,103,101,116,95,100,97,116,97,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,
- 0,0,0,115,18,0,0,0,124,0,160,0,124,1,161,1,
- 114,14,124,0,83,0,100,0,83,0,114,109,0,0,0,41,
- 1,114,182,0,0,0,169,2,114,118,0,0,0,114,216,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,19,103,101,116,95,114,101,115,111,117,114,99,101,95,
- 114,101,97,100,101,114,215,3,0,0,115,6,0,0,0,0,
- 2,10,1,4,1,122,30,70,105,108,101,76,111,97,100,101,
- 114,46,103,101,116,95,114,101,115,111,117,114,99,101,95,114,
- 101,97,100,101,114,99,2,0,0,0,0,0,0,0,0,0,
- 0,0,3,0,0,0,4,0,0,0,67,0,0,0,115,32,
- 0,0,0,116,0,116,1,124,0,106,2,131,1,100,1,25,
- 0,124,1,131,2,125,2,116,3,160,4,124,2,100,2,161,
- 2,83,0,41,3,78,114,72,0,0,0,114,251,0,0,0,
- 41,5,114,37,0,0,0,114,46,0,0,0,114,43,0,0,
- 0,114,63,0,0,0,114,64,0,0,0,169,3,114,118,0,
- 0,0,90,8,114,101,115,111,117,114,99,101,114,43,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,13,111,112,101,110,95,114,101,115,111,117,114,99,101,221,
- 3,0,0,115,4,0,0,0,0,1,20,1,122,24,70,105,
- 108,101,76,111,97,100,101,114,46,111,112,101,110,95,114,101,
- 115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,
- 38,0,0,0,124,0,160,0,124,1,161,1,115,14,116,1,
- 130,1,116,2,116,3,124,0,106,4,131,1,100,1,25,0,
- 124,1,131,2,125,2,124,2,83,0,169,2,78,114,72,0,
- 0,0,41,5,218,11,105,115,95,114,101,115,111,117,114,99,
- 101,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,
- 114,114,111,114,114,37,0,0,0,114,46,0,0,0,114,43,
- 0,0,0,114,255,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,218,13,114,101,115,111,117,114,99,
- 101,95,112,97,116,104,225,3,0,0,115,8,0,0,0,0,
- 1,10,1,4,1,20,1,122,24,70,105,108,101,76,111,97,
- 100,101,114,46,114,101,115,111,117,114,99,101,95,112,97,116,
- 104,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,
- 0,0,3,0,0,0,67,0,0,0,115,40,0,0,0,116,
- 0,124,1,107,6,114,12,100,1,83,0,116,1,116,2,124,
- 0,106,3,131,1,100,2,25,0,124,1,131,2,125,2,116,
- 4,124,2,131,1,83,0,41,3,78,70,114,72,0,0,0,
- 41,5,114,34,0,0,0,114,37,0,0,0,114,46,0,0,
- 0,114,43,0,0,0,114,53,0,0,0,169,3,114,118,0,
- 0,0,114,116,0,0,0,114,43,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,114,2,1,0,0,
- 231,3,0,0,115,8,0,0,0,0,1,8,1,4,1,20,
- 1,122,22,70,105,108,101,76,111,97,100,101,114,46,105,115,
- 95,114,101,115,111,117,114,99,101,99,1,0,0,0,0,0,
- 0,0,0,0,0,0,1,0,0,0,5,0,0,0,67,0,
- 0,0,115,24,0,0,0,116,0,116,1,160,2,116,3,124,
- 0,106,4,131,1,100,1,25,0,161,1,131,1,83,0,114,
- 1,1,0,0,41,5,218,4,105,116,101,114,114,2,0,0,
- 0,218,7,108,105,115,116,100,105,114,114,46,0,0,0,114,
- 43,0,0,0,114,246,0,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,8,99,111,110,116,101,110,
- 116,115,237,3,0,0,115,2,0,0,0,0,1,122,19,70,
- 105,108,101,76,111,97,100,101,114,46,99,111,110,116,101,110,
- 116,115,41,17,114,125,0,0,0,114,124,0,0,0,114,126,
- 0,0,0,114,127,0,0,0,114,209,0,0,0,114,243,0,
- 0,0,114,247,0,0,0,114,136,0,0,0,114,220,0,0,
- 0,114,179,0,0,0,114,227,0,0,0,114,254,0,0,0,
- 114,0,1,0,0,114,4,1,0,0,114,2,1,0,0,114,
- 8,1,0,0,90,13,95,95,99,108,97,115,115,99,101,108,
- 108,95,95,114,3,0,0,0,114,3,0,0,0,114,249,0,
- 0,0,114,6,0,0,0,114,239,0,0,0,169,3,0,0,
- 115,30,0,0,0,8,2,4,3,8,6,8,4,8,3,2,
- 1,14,11,2,1,10,4,8,11,2,1,10,5,8,4,8,
- 6,8,6,114,239,0,0,0,99,0,0,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,0,
- 0,115,46,0,0,0,101,0,90,1,100,0,90,2,100,1,
- 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,
- 90,5,100,6,100,7,156,1,100,8,100,9,132,2,90,6,
- 100,10,83,0,41,11,218,16,83,111,117,114,99,101,70,105,
- 108,101,76,111,97,100,101,114,122,62,67,111,110,99,114,101,
+ 124,2,131,1,125,8,87,0,110,24,4,0,116,2,121,66,
+ 1,0,1,0,1,0,100,1,125,8,89,0,144,1,110,42,
+ 48,0,122,14,124,0,160,3,124,2,161,1,125,9,87,0,
+ 110,20,4,0,116,4,121,102,1,0,1,0,1,0,89,0,
+ 144,1,110,6,48,0,116,5,124,9,100,4,25,0,131,1,
+ 125,3,122,14,124,0,160,6,124,8,161,1,125,10,87,0,
+ 110,18,4,0,116,4,121,148,1,0,1,0,1,0,89,0,
+ 110,216,48,0,124,1,124,8,100,5,156,2,125,11,122,148,
+ 116,7,124,10,124,1,124,11,131,3,125,12,116,8,124,10,
+ 131,1,100,6,100,1,133,2,25,0,125,13,124,12,100,7,
+ 64,0,100,8,107,3,125,6,124,6,144,1,114,30,124,12,
+ 100,9,64,0,100,8,107,3,125,7,116,9,106,10,100,10,
+ 107,3,144,1,114,50,124,7,115,248,116,9,106,10,100,11,
+ 107,2,144,1,114,50,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,24,4,0,116,15,116,16,102,2,144,1,121,76,
+ 1,0,1,0,1,0,89,0,110,32,48,0,116,17,160,18,
+ 100,13,124,8,124,2,161,3,1,0,116,19,124,13,124,1,
+ 124,8,124,2,100,14,141,4,83,0,124,4,100,1,117,0,
+ 144,1,114,128,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,20,124,8,
+ 100,1,117,1,144,2,114,20,124,3,100,1,117,1,144,2,
+ 114,20,124,6,144,1,114,220,124,5,100,1,117,0,144,1,
+ 114,206,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,20,4,0,
+ 116,2,144,2,121,18,1,0,1,0,1,0,89,0,110,2,
+ 48,0,124,14,83,0,41,16,122,190,67,111,110,99,114,101,
116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,
- 110,32,111,102,32,83,111,117,114,99,101,76,111,97,100,101,
- 114,32,117,115,105,110,103,32,116,104,101,32,102,105,108,101,
- 32,115,121,115,116,101,109,46,99,2,0,0,0,0,0,0,
- 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,
- 0,115,22,0,0,0,116,0,124,1,131,1,125,2,124,2,
- 106,1,124,2,106,2,100,1,156,2,83,0,41,2,122,33,
- 82,101,116,117,114,110,32,116,104,101,32,109,101,116,97,100,
- 97,116,97,32,102,111,114,32,116,104,101,32,112,97,116,104,
- 46,41,2,114,169,0,0,0,114,234,0,0,0,41,3,114,
- 48,0,0,0,218,8,115,116,95,109,116,105,109,101,90,7,
- 115,116,95,115,105,122,101,41,3,114,118,0,0,0,114,43,
- 0,0,0,114,238,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,114,224,0,0,0,245,3,0,0,
- 115,4,0,0,0,0,2,8,1,122,27,83,111,117,114,99,
- 101,70,105,108,101,76,111,97,100,101,114,46,112,97,116,104,
- 95,115,116,97,116,115,99,4,0,0,0,0,0,0,0,0,
- 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115,
- 24,0,0,0,116,0,124,1,131,1,125,4,124,0,106,1,
- 124,2,124,3,124,4,100,1,141,3,83,0,41,2,78,169,
- 1,218,5,95,109,111,100,101,41,2,114,114,0,0,0,114,
- 225,0,0,0,41,5,114,118,0,0,0,114,107,0,0,0,
- 114,106,0,0,0,114,25,0,0,0,114,51,0,0,0,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,226,
- 0,0,0,250,3,0,0,115,4,0,0,0,0,2,8,1,
- 122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,100,
- 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111,
- 100,101,114,59,0,0,0,114,11,1,0,0,99,3,0,0,
- 0,0,0,0,0,1,0,0,0,9,0,0,0,11,0,0,
- 0,67,0,0,0,115,2,1,0,0,116,0,124,1,131,1,
- 92,2,125,4,125,5,103,0,125,6,124,4,114,52,116,1,
- 124,4,131,1,115,52,116,0,124,4,131,1,92,2,125,4,
- 125,7,124,6,160,2,124,7,161,1,1,0,113,16,116,3,
- 124,6,131,1,68,0,93,108,125,7,116,4,124,4,124,7,
- 131,2,125,4,122,14,116,5,160,6,124,4,161,1,1,0,
- 87,0,113,60,4,0,116,7,107,10,114,112,1,0,1,0,
- 1,0,89,0,113,60,89,0,113,60,4,0,116,8,107,10,
- 114,166,1,0,125,8,1,0,122,30,116,9,160,10,100,1,
- 124,4,124,8,161,3,1,0,87,0,89,0,100,2,125,8,
- 126,8,1,0,100,2,83,0,100,2,125,8,126,8,48,0,
- 48,0,113,60,122,28,116,11,124,1,124,2,124,3,131,3,
- 1,0,116,9,160,10,100,3,124,1,161,2,1,0,87,0,
- 110,54,4,0,116,8,107,10,144,0,114,252,1,0,125,8,
+ 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,
+ 101,114,46,103,101,116,95,99,111,100,101,46,10,10,32,32,
+ 32,32,32,32,32,32,82,101,97,100,105,110,103,32,111,102,
+ 32,98,121,116,101,99,111,100,101,32,114,101,113,117,105,114,
+ 101,115,32,112,97,116,104,95,115,116,97,116,115,32,116,111,
+ 32,98,101,32,105,109,112,108,101,109,101,110,116,101,100,46,
+ 32,84,111,32,119,114,105,116,101,10,32,32,32,32,32,32,
+ 32,32,98,121,116,101,99,111,100,101,44,32,115,101,116,95,
+ 100,97,116,97,32,109,117,115,116,32,97,108,115,111,32,98,
+ 101,32,105,109,112,108,101,109,101,110,116,101,100,46,10,10,
+ 32,32,32,32,32,32,32,32,78,70,84,114,169,0,0,0,
+ 114,159,0,0,0,114,145,0,0,0,114,38,0,0,0,114,
+ 72,0,0,0,114,27,0,0,0,90,5,110,101,118,101,114,
+ 90,6,97,108,119,97,121,115,218,4,115,105,122,101,122,13,
+ 123,125,32,109,97,116,99,104,101,115,32,123,125,41,3,114,
+ 116,0,0,0,114,106,0,0,0,114,107,0,0,0,122,19,
+ 99,111,100,101,32,111,98,106,101,99,116,32,102,114,111,109,
+ 32,123,125,41,27,114,179,0,0,0,114,97,0,0,0,114,
+ 81,0,0,0,114,224,0,0,0,114,49,0,0,0,114,17,
+ 0,0,0,114,227,0,0,0,114,152,0,0,0,218,10,109,
+ 101,109,111,114,121,118,105,101,119,114,163,0,0,0,90,21,
+ 99,104,101,99,107,95,104,97,115,104,95,98,97,115,101,100,
+ 95,112,121,99,115,114,157,0,0,0,218,17,95,82,65,87,
+ 95,77,65,71,73,67,95,78,85,77,66,69,82,114,158,0,
+ 0,0,114,156,0,0,0,114,117,0,0,0,114,150,0,0,
+ 0,114,134,0,0,0,114,149,0,0,0,114,165,0,0,0,
+ 114,233,0,0,0,114,8,0,0,0,218,19,100,111,110,116,
+ 95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114,
+ 171,0,0,0,114,170,0,0,0,114,22,0,0,0,114,226,
+ 0,0,0,41,15,114,118,0,0,0,114,139,0,0,0,114,
+ 107,0,0,0,114,154,0,0,0,114,174,0,0,0,114,157,
+ 0,0,0,90,10,104,97,115,104,95,98,97,115,101,100,90,
+ 12,99,104,101,99,107,95,115,111,117,114,99,101,114,106,0,
+ 0,0,218,2,115,116,114,25,0,0,0,114,151,0,0,0,
+ 114,82,0,0,0,90,10,98,121,116,101,115,95,100,97,116,
+ 97,90,11,99,111,100,101,95,111,98,106,101,99,116,114,3,
+ 0,0,0,114,3,0,0,0,114,6,0,0,0,114,213,0,
+ 0,0,88,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,12,1,12,
+ 2,2,1,14,1,12,1,8,2,12,1,2,1,14,1,12,
+ 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,18,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,14,
+ 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,29,3,0,0,115,14,0,0,
+ 0,8,2,8,8,8,14,8,10,8,7,8,10,14,8,114,
+ 221,0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,4,0,0,0,0,0,0,0,115,124,0,
+ 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,
+ 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,
+ 100,7,132,0,90,6,101,7,135,0,102,1,100,8,100,9,
+ 132,8,131,1,90,8,101,7,100,10,100,11,132,0,131,1,
+ 90,9,100,12,100,13,132,0,90,10,101,7,100,14,100,15,
+ 132,0,131,1,90,11,100,16,100,17,132,0,90,12,100,18,
+ 100,19,132,0,90,13,100,20,100,21,132,0,90,14,100,22,
+ 100,23,132,0,90,15,135,0,4,0,90,16,83,0,41,24,
+ 218,10,70,105,108,101,76,111,97,100,101,114,122,103,66,97,
+ 115,101,32,102,105,108,101,32,108,111,97,100,101,114,32,99,
+ 108,97,115,115,32,119,104,105,99,104,32,105,109,112,108,101,
+ 109,101,110,116,115,32,116,104,101,32,108,111,97,100,101,114,
+ 32,112,114,111,116,111,99,111,108,32,109,101,116,104,111,100,
+ 115,32,116,104,97,116,10,32,32,32,32,114,101,113,117,105,
+ 114,101,32,102,105,108,101,32,115,121,115,116,101,109,32,117,
+ 115,97,103,101,46,99,3,0,0,0,0,0,0,0,0,0,
+ 0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,16,
+ 0,0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,
+ 1,83,0,41,2,122,75,67,97,99,104,101,32,116,104,101,
+ 32,109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,
+ 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,
+ 32,102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,
+ 104,101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,
+ 114,46,78,114,159,0,0,0,41,3,114,118,0,0,0,114,
+ 139,0,0,0,114,43,0,0,0,114,3,0,0,0,114,3,
+ 0,0,0,114,6,0,0,0,114,209,0,0,0,178,3,0,
+ 0,115,4,0,0,0,0,3,6,1,122,19,70,105,108,101,
+ 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,
+ 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
+ 2,0,0,0,67,0,0,0,115,24,0,0,0,124,0,106,
+ 0,124,1,106,0,107,2,111,22,124,0,106,1,124,1,106,
+ 1,107,2,83,0,114,109,0,0,0,169,2,218,9,95,95,
+ 99,108,97,115,115,95,95,114,131,0,0,0,169,2,114,118,
+ 0,0,0,90,5,111,116,104,101,114,114,3,0,0,0,114,
+ 3,0,0,0,114,6,0,0,0,218,6,95,95,101,113,95,
+ 95,184,3,0,0,115,6,0,0,0,0,1,12,1,10,255,
+ 122,17,70,105,108,101,76,111,97,100,101,114,46,95,95,101,
+ 113,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0,
+ 1,0,0,0,3,0,0,0,67,0,0,0,115,20,0,0,
+ 0,116,0,124,0,106,1,131,1,116,0,124,0,106,2,131,
+ 1,65,0,83,0,114,109,0,0,0,169,3,218,4,104,97,
+ 115,104,114,116,0,0,0,114,43,0,0,0,169,1,114,118,
+ 0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
+ 0,0,218,8,95,95,104,97,115,104,95,95,188,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,
+ 191,3,0,0,115,2,0,0,0,0,10,122,22,70,105,108,
+ 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100,
+ 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,
+ 2,0,0,0,1,0,0,0,67,0,0,0,115,6,0,0,
+ 0,124,0,106,0,83,0,169,1,122,58,82,101,116,117,114,
+ 110,32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,
+ 101,32,115,111,117,114,99,101,32,102,105,108,101,32,97,115,
+ 32,102,111,117,110,100,32,98,121,32,116,104,101,32,102,105,
+ 110,100,101,114,46,114,47,0,0,0,114,219,0,0,0,114,
+ 3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,179,
+ 0,0,0,203,3,0,0,115,2,0,0,0,0,3,122,23,
+ 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,
+ 105,108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,
+ 0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,0,
+ 115,126,0,0,0,116,0,124,0,116,1,116,2,102,2,131,
+ 2,114,70,116,3,160,4,116,5,124,1,131,1,161,1,143,
+ 24,125,2,124,2,160,6,161,0,87,0,2,0,100,1,4,
+ 0,4,0,131,3,1,0,83,0,49,0,115,58,48,0,1,
+ 0,1,0,1,0,89,0,1,0,110,52,116,3,160,7,124,
+ 1,100,2,161,2,143,24,125,2,124,2,160,6,161,0,87,
+ 0,2,0,100,1,4,0,4,0,131,3,1,0,83,0,49,
+ 0,115,112,48,0,1,0,1,0,1,0,89,0,1,0,100,
+ 1,83,0,41,3,122,39,82,101,116,117,114,110,32,116,104,
+ 101,32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,
+ 32,97,115,32,114,97,119,32,98,121,116,101,115,46,78,218,
+ 1,114,41,8,114,161,0,0,0,114,221,0,0,0,218,19,
+ 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
+ 100,101,114,114,63,0,0,0,90,9,111,112,101,110,95,99,
+ 111,100,101,114,84,0,0,0,90,4,114,101,97,100,114,64,
+ 0,0,0,41,3,114,118,0,0,0,114,43,0,0,0,114,
+ 67,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,114,227,0,0,0,208,3,0,0,115,10,0,0,
+ 0,0,2,14,1,16,1,40,2,14,1,122,19,70,105,108,
+ 101,76,111,97,100,101,114,46,103,101,116,95,100,97,116,97,
+ 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
+ 0,3,0,0,0,67,0,0,0,115,18,0,0,0,124,0,
+ 160,0,124,1,161,1,114,14,124,0,83,0,100,0,83,0,
+ 114,109,0,0,0,41,1,114,182,0,0,0,169,2,114,118,
+ 0,0,0,114,216,0,0,0,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,218,19,103,101,116,95,114,101,115,
+ 111,117,114,99,101,95,114,101,97,100,101,114,219,3,0,0,
+ 115,6,0,0,0,0,2,10,1,4,1,122,30,70,105,108,
+ 101,76,111,97,100,101,114,46,103,101,116,95,114,101,115,111,
+ 117,114,99,101,95,114,101,97,100,101,114,99,2,0,0,0,
+ 0,0,0,0,0,0,0,0,3,0,0,0,4,0,0,0,
+ 67,0,0,0,115,32,0,0,0,116,0,116,1,124,0,106,
+ 2,131,1,100,1,25,0,124,1,131,2,125,2,116,3,160,
+ 4,124,2,100,2,161,2,83,0,41,3,78,114,72,0,0,
+ 0,114,251,0,0,0,41,5,114,37,0,0,0,114,46,0,
+ 0,0,114,43,0,0,0,114,63,0,0,0,114,64,0,0,
+ 0,169,3,114,118,0,0,0,90,8,114,101,115,111,117,114,
+ 99,101,114,43,0,0,0,114,3,0,0,0,114,3,0,0,
+ 0,114,6,0,0,0,218,13,111,112,101,110,95,114,101,115,
+ 111,117,114,99,101,225,3,0,0,115,4,0,0,0,0,1,
+ 20,1,122,24,70,105,108,101,76,111,97,100,101,114,46,111,
+ 112,101,110,95,114,101,115,111,117,114,99,101,99,2,0,0,
+ 0,0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,
+ 0,67,0,0,0,115,38,0,0,0,124,0,160,0,124,1,
+ 161,1,115,14,116,1,130,1,116,2,116,3,124,0,106,4,
+ 131,1,100,1,25,0,124,1,131,2,125,2,124,2,83,0,
+ 169,2,78,114,72,0,0,0,41,5,218,11,105,115,95,114,
+ 101,115,111,117,114,99,101,218,17,70,105,108,101,78,111,116,
+ 70,111,117,110,100,69,114,114,111,114,114,37,0,0,0,114,
+ 46,0,0,0,114,43,0,0,0,114,255,0,0,0,114,3,
+ 0,0,0,114,3,0,0,0,114,6,0,0,0,218,13,114,
+ 101,115,111,117,114,99,101,95,112,97,116,104,229,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,118,0,114,12,100,1,83,
+ 0,116,1,116,2,124,0,106,3,131,1,100,2,25,0,124,
+ 1,131,2,125,2,116,4,124,2,131,1,83,0,41,3,78,
+ 70,114,72,0,0,0,41,5,114,34,0,0,0,114,37,0,
+ 0,0,114,46,0,0,0,114,43,0,0,0,114,53,0,0,
+ 0,169,3,114,118,0,0,0,114,116,0,0,0,114,43,0,
+ 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,114,2,1,0,0,235,3,0,0,115,8,0,0,0,0,
+ 1,8,1,4,1,20,1,122,22,70,105,108,101,76,111,97,
+ 100,101,114,46,105,115,95,114,101,115,111,117,114,99,101,99,
+ 1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
+ 5,0,0,0,67,0,0,0,115,24,0,0,0,116,0,116,
+ 1,160,2,116,3,124,0,106,4,131,1,100,1,25,0,161,
+ 1,131,1,83,0,114,1,1,0,0,41,5,218,4,105,116,
+ 101,114,114,2,0,0,0,218,7,108,105,115,116,100,105,114,
+ 114,46,0,0,0,114,43,0,0,0,114,246,0,0,0,114,
+ 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,8,
+ 99,111,110,116,101,110,116,115,241,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,173,3,0,0,115,30,0,0,0,8,2,4,3,8,
+ 6,8,4,8,3,2,1,14,11,2,1,10,4,8,11,2,
+ 1,10,5,8,4,8,6,8,6,114,239,0,0,0,99,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,
+ 0,0,0,64,0,0,0,115,46,0,0,0,101,0,90,1,
+ 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,
+ 100,4,100,5,132,0,90,5,100,6,100,7,156,1,100,8,
+ 100,9,132,2,90,6,100,10,83,0,41,11,218,16,83,111,
+ 117,114,99,101,70,105,108,101,76,111,97,100,101,114,122,62,
+ 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,
+ 110,116,97,116,105,111,110,32,111,102,32,83,111,117,114,99,
+ 101,76,111,97,100,101,114,32,117,115,105,110,103,32,116,104,
+ 101,32,102,105,108,101,32,115,121,115,116,101,109,46,99,2,
+ 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,3,
+ 0,0,0,67,0,0,0,115,22,0,0,0,116,0,124,1,
+ 131,1,125,2,124,2,106,1,124,2,106,2,100,1,156,2,
+ 83,0,41,2,122,33,82,101,116,117,114,110,32,116,104,101,
+ 32,109,101,116,97,100,97,116,97,32,102,111,114,32,116,104,
+ 101,32,112,97,116,104,46,41,2,114,169,0,0,0,114,234,
+ 0,0,0,41,3,114,48,0,0,0,218,8,115,116,95,109,
+ 116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114,
+ 118,0,0,0,114,43,0,0,0,114,238,0,0,0,114,3,
+ 0,0,0,114,3,0,0,0,114,6,0,0,0,114,224,0,
+ 0,0,249,3,0,0,115,4,0,0,0,0,2,8,1,122,
+ 27,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101,
+ 114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,0,
+ 0,0,0,0,0,0,0,0,0,5,0,0,0,5,0,0,
+ 0,67,0,0,0,115,24,0,0,0,116,0,124,1,131,1,
+ 125,4,124,0,106,1,124,2,124,3,124,4,100,1,141,3,
+ 83,0,41,2,78,169,1,218,5,95,109,111,100,101,41,2,
+ 114,114,0,0,0,114,225,0,0,0,41,5,114,118,0,0,
+ 0,114,107,0,0,0,114,106,0,0,0,114,25,0,0,0,
+ 114,51,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
+ 6,0,0,0,114,226,0,0,0,254,3,0,0,115,4,0,
+ 0,0,0,2,8,1,122,32,83,111,117,114,99,101,70,105,
+ 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95,
+ 98,121,116,101,99,111,100,101,114,59,0,0,0,114,11,1,
+ 0,0,99,3,0,0,0,0,0,0,0,1,0,0,0,9,
+ 0,0,0,11,0,0,0,67,0,0,0,115,252,0,0,0,
+ 116,0,124,1,131,1,92,2,125,4,125,5,103,0,125,6,
+ 124,4,114,52,116,1,124,4,131,1,115,52,116,0,124,4,
+ 131,1,92,2,125,4,125,7,124,6,160,2,124,7,161,1,
+ 1,0,113,16,116,3,124,6,131,1,68,0,93,104,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,121,110,
+ 1,0,1,0,1,0,89,0,113,60,89,0,113,60,4,0,
+ 116,8,121,162,1,0,125,8,1,0,122,30,116,9,160,10,
+ 100,1,124,4,124,8,161,3,1,0,87,0,89,0,100,2,
+ 125,8,126,8,1,0,100,2,83,0,100,2,125,8,126,8,
+ 48,0,48,0,113,60,122,28,116,11,124,1,124,2,124,3,
+ 131,3,1,0,116,9,160,10,100,3,124,1,161,2,1,0,
+ 87,0,110,52,4,0,116,8,144,0,121,246,1,0,125,8,
1,0,122,26,116,9,160,10,100,1,124,1,124,8,161,3,
1,0,87,0,89,0,100,2,125,8,126,8,110,10,100,2,
125,8,126,8,48,0,48,0,100,2,83,0,41,4,122,27,
@@ -1612,16 +1611,16 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
25,0,0,0,114,12,1,0,0,218,6,112,97,114,101,110,
116,114,96,0,0,0,114,36,0,0,0,114,32,0,0,0,
114,228,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,225,0,0,0,255,3,0,0,115,48,0,
+ 6,0,0,0,114,225,0,0,0,3,4,0,0,115,48,0,
0,0,0,2,12,1,4,2,12,1,12,1,12,2,12,1,
- 10,1,2,1,14,1,14,2,8,1,16,3,6,1,2,0,
- 2,255,4,2,28,1,2,1,12,1,16,1,18,2,8,1,
+ 10,1,2,1,14,1,12,2,8,1,14,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,241,3,0,0,
+ 0,0,114,6,0,0,0,114,9,1,0,0,245,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,
@@ -1643,7 +1642,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,0,114,165,0,0,0,114,235,0,0,0,41,5,114,
118,0,0,0,114,139,0,0,0,114,43,0,0,0,114,25,
0,0,0,114,151,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,114,213,0,0,0,34,4,0,0,
+ 0,0,114,6,0,0,0,114,213,0,0,0,38,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,
@@ -1654,13 +1653,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,50,4,0,0,115,2,0,0,0,0,
+ 0,114,229,0,0,0,54,4,0,0,115,2,0,0,0,0,
2,122,31,83,111,117,114,99,101,108,101,115,115,70,105,108,
101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,
99,101,78,41,6,114,125,0,0,0,114,124,0,0,0,114,
126,0,0,0,114,127,0,0,0,114,213,0,0,0,114,229,
0,0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,
- 0,0,114,6,0,0,0,114,15,1,0,0,30,4,0,0,
+ 0,0,114,6,0,0,0,114,15,1,0,0,34,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,
@@ -1681,7 +1680,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
124,0,95,0,124,2,124,0,95,1,100,0,83,0,114,109,
0,0,0,114,159,0,0,0,114,5,1,0,0,114,3,0,
0,0,114,3,0,0,0,114,6,0,0,0,114,209,0,0,
- 0,67,4,0,0,115,4,0,0,0,0,1,6,1,122,28,
+ 0,71,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,
@@ -1689,7 +1688,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
106,0,107,2,111,22,124,0,106,1,124,1,106,1,107,2,
83,0,114,109,0,0,0,114,240,0,0,0,114,242,0,0,
0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 114,243,0,0,0,71,4,0,0,115,6,0,0,0,0,1,
+ 114,243,0,0,0,75,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,
@@ -1697,7 +1696,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0,
83,0,114,109,0,0,0,114,244,0,0,0,114,246,0,0,
0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 114,247,0,0,0,75,4,0,0,115,2,0,0,0,0,1,
+ 114,247,0,0,0,79,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,
@@ -1714,7 +1713,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
109,105,99,114,149,0,0,0,114,116,0,0,0,114,43,0,
0,0,41,3,114,118,0,0,0,114,187,0,0,0,114,216,
0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,212,0,0,0,78,4,0,0,115,18,0,0,0,
+ 0,0,114,212,0,0,0,82,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,
@@ -1731,7 +1730,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,163,0,0,0,90,12,101,120,101,99,95,100,121,110,97,
109,105,99,114,149,0,0,0,114,116,0,0,0,114,43,0,
0,0,114,253,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,217,0,0,0,86,4,0,0,115,
+ 0,114,6,0,0,0,114,217,0,0,0,90,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,
@@ -1750,14 +1749,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
169,2,114,31,0,0,0,218,6,115,117,102,102,105,120,169,
1,90,9,102,105,108,101,95,110,97,109,101,114,3,0,0,
0,114,6,0,0,0,218,9,60,103,101,110,101,120,112,114,
- 62,95,4,0,0,115,4,0,0,0,4,1,2,255,122,49,
+ 62,99,4,0,0,115,4,0,0,0,4,1,2,255,122,49,
69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
100,101,114,46,105,115,95,112,97,99,107,97,103,101,46,60,
108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,
62,41,4,114,46,0,0,0,114,43,0,0,0,218,3,97,
110,121,218,18,69,88,84,69,78,83,73,79,78,95,83,85,
70,70,73,88,69,83,114,219,0,0,0,114,3,0,0,0,
- 114,18,1,0,0,114,6,0,0,0,114,182,0,0,0,92,
+ 114,18,1,0,0,114,6,0,0,0,114,182,0,0,0,96,
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,
@@ -1769,7 +1768,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
99,114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,
106,101,99,116,46,78,114,3,0,0,0,114,219,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 213,0,0,0,98,4,0,0,115,2,0,0,0,0,2,122,
+ 213,0,0,0,102,4,0,0,115,2,0,0,0,0,2,122,
28,69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,
97,100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,1,0,
@@ -1779,14 +1778,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
108,101,115,32,104,97,118,101,32,110,111,32,115,111,117,114,
99,101,32,99,111,100,101,46,78,114,3,0,0,0,114,219,
0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,229,0,0,0,102,4,0,0,115,2,0,0,0,
+ 0,0,114,229,0,0,0,106,4,0,0,115,2,0,0,0,
0,2,122,30,69,120,116,101,110,115,105,111,110,70,105,108,
101,76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,
99,101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,
0,0,0,1,0,0,0,67,0,0,0,115,6,0,0,0,
124,0,106,0,83,0,114,250,0,0,0,114,47,0,0,0,
114,219,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,179,0,0,0,106,4,0,0,115,2,0,
+ 6,0,0,0,114,179,0,0,0,110,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,
@@ -1795,7 +1794,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,114,217,0,0,0,114,182,0,0,0,114,213,0,0,0,
114,229,0,0,0,114,136,0,0,0,114,179,0,0,0,114,
3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,114,252,0,0,0,59,4,0,0,115,22,0,0,
+ 0,0,0,114,252,0,0,0,63,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,
@@ -1838,7 +1837,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,118,0,0,0,114,116,0,0,0,114,43,0,0,0,90,
11,112,97,116,104,95,102,105,110,100,101,114,114,3,0,0,
0,114,3,0,0,0,114,6,0,0,0,114,209,0,0,0,
- 119,4,0,0,115,8,0,0,0,0,1,6,1,6,1,14,
+ 123,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,
@@ -1855,7 +1854,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,125,4,0,0,115,8,0,
+ 97,116,104,95,110,97,109,101,115,129,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,
@@ -1868,15 +1867,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,90,18,112,97,114,101,110,116,95,109,111,100,117,108,
101,95,110,97,109,101,90,14,112,97,116,104,95,97,116,116,
114,95,110,97,109,101,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,25,1,0,0,135,4,0,0,115,4,
+ 114,6,0,0,0,114,25,1,0,0,139,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,
+ 124,0,106,4,124,1,161,2,125,2,124,2,100,0,117,1,
+ 114,68,124,2,106,5,100,0,117,0,114,68,124,2,106,6,
114,68,124,2,106,6,124,0,95,7,124,1,124,0,95,2,
124,0,106,7,83,0,114,109,0,0,0,41,8,114,111,0,
0,0,114,25,1,0,0,114,26,1,0,0,114,27,1,0,
@@ -1884,7 +1883,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,24,1,0,0,41,3,114,118,0,0,0,90,11,112,97,
114,101,110,116,95,112,97,116,104,114,187,0,0,0,114,3,
0,0,0,114,3,0,0,0,114,6,0,0,0,218,12,95,
- 114,101,99,97,108,99,117,108,97,116,101,139,4,0,0,115,
+ 114,101,99,97,108,99,117,108,97,116,101,143,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,
@@ -1893,7 +1892,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,124,0,160,1,161,0,131,1,83,0,114,109,0,0,0,
41,2,114,6,1,0,0,114,32,1,0,0,114,246,0,0,
0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,8,95,95,105,116,101,114,95,95,152,4,0,0,115,2,
+ 218,8,95,95,105,116,101,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,105,116,101,114,95,95,99,2,
0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,2,
@@ -1901,7 +1900,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
161,0,124,1,25,0,83,0,114,109,0,0,0,169,1,114,
32,1,0,0,41,2,114,118,0,0,0,218,5,105,110,100,
101,120,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,11,95,95,103,101,116,105,116,101,109,95,95,155,4,
+ 0,218,11,95,95,103,101,116,105,116,101,109,95,95,159,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,
@@ -1910,7 +1909,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,114,109,0,0,0,41,1,114,24,1,0,0,41,3,114,
118,0,0,0,114,35,1,0,0,114,43,0,0,0,114,3,
0,0,0,114,3,0,0,0,114,6,0,0,0,218,11,95,
- 95,115,101,116,105,116,101,109,95,95,158,4,0,0,115,2,
+ 95,115,101,116,105,116,101,109,95,95,162,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,
@@ -1918,7 +1917,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,124,0,160,1,161,0,131,1,83,0,114,109,0,0,0,
41,2,114,22,0,0,0,114,32,1,0,0,114,246,0,0,
0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,7,95,95,108,101,110,95,95,161,4,0,0,115,2,0,
+ 218,7,95,95,108,101,110,95,95,165,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,
@@ -1927,15 +1926,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
115,112,97,99,101,80,97,116,104,40,123,33,114,125,41,41,
2,114,61,0,0,0,114,24,1,0,0,114,246,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 8,95,95,114,101,112,114,95,95,164,4,0,0,115,2,0,
+ 8,95,95,114,101,112,114,95,95,168,4,0,0,115,2,0,
0,0,0,1,122,23,95,78,97,109,101,115,112,97,99,101,
80,97,116,104,46,95,95,114,101,112,114,95,95,99,2,0,
0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
0,0,67,0,0,0,115,12,0,0,0,124,1,124,0,160,
- 0,161,0,107,6,83,0,114,109,0,0,0,114,34,1,0,
+ 0,161,0,118,0,83,0,114,109,0,0,0,114,34,1,0,
0,169,2,114,118,0,0,0,218,4,105,116,101,109,114,3,
0,0,0,114,3,0,0,0,114,6,0,0,0,218,12,95,
- 95,99,111,110,116,97,105,110,115,95,95,167,4,0,0,115,
+ 95,99,111,110,116,97,105,110,115,95,95,171,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,
@@ -1943,7 +1942,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,124,0,106,0,160,1,124,1,161,1,1,0,100,0,83,
0,114,109,0,0,0,41,2,114,24,1,0,0,114,186,0,
0,0,114,40,1,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,186,0,0,0,170,4,0,0,115,
+ 0,114,6,0,0,0,114,186,0,0,0,174,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,
@@ -1952,7 +1951,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,114,37,1,0,0,114,38,1,0,0,114,39,1,0,
0,114,42,1,0,0,114,186,0,0,0,114,3,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 22,1,0,0,112,4,0,0,115,24,0,0,0,8,1,4,
+ 22,1,0,0,116,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,
@@ -1968,7 +1967,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
124,3,131,3,124,0,95,1,100,0,83,0,114,109,0,0,
0,41,2,114,22,1,0,0,114,24,1,0,0,114,28,1,
0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,114,209,0,0,0,176,4,0,0,115,2,0,0,0,0,
+ 0,114,209,0,0,0,180,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,
@@ -1985,21 +1984,21 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,115,112,97,99,101,41,62,41,2,114,61,0,0,0,114,
125,0,0,0,41,2,114,193,0,0,0,114,216,0,0,0,
114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 11,109,111,100,117,108,101,95,114,101,112,114,179,4,0,0,
+ 11,109,111,100,117,108,101,95,114,101,112,114,183,4,0,0,
115,2,0,0,0,0,7,122,28,95,78,97,109,101,115,112,
97,99,101,76,111,97,100,101,114,46,109,111,100,117,108,101,
95,114,101,112,114,99,2,0,0,0,0,0,0,0,0,0,
0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,
0,0,0,100,1,83,0,41,2,78,84,114,3,0,0,0,
114,219,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,182,0,0,0,188,4,0,0,115,2,0,
+ 6,0,0,0,114,182,0,0,0,192,4,0,0,115,2,0,
0,0,0,1,122,27,95,78,97,109,101,115,112,97,99,101,
76,111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,
101,99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,
0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,
1,83,0,41,2,78,114,39,0,0,0,114,3,0,0,0,
114,219,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,229,0,0,0,191,4,0,0,115,2,0,
+ 6,0,0,0,114,229,0,0,0,195,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,
@@ -2008,21 +2007,21 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
6,78,114,39,0,0,0,122,8,60,115,116,114,105,110,103,
62,114,215,0,0,0,84,41,1,114,231,0,0,0,41,1,
114,232,0,0,0,114,219,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,114,213,0,0,0,194,4,
+ 3,0,0,0,114,6,0,0,0,114,213,0,0,0,198,4,
0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101,
115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95,
99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0,
0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
0,0,100,1,83,0,114,210,0,0,0,114,3,0,0,0,
114,211,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,212,0,0,0,197,4,0,0,115,2,0,
+ 6,0,0,0,114,212,0,0,0,201,4,0,0,115,2,0,
0,0,0,1,122,30,95,78,97,109,101,115,112,97,99,101,
76,111,97,100,101,114,46,99,114,101,97,116,101,95,109,111,
100,117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,
0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,
0,0,100,0,83,0,114,109,0,0,0,114,3,0,0,0,
114,253,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,217,0,0,0,200,4,0,0,115,2,0,
+ 6,0,0,0,114,217,0,0,0,204,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,
@@ -2040,7 +2039,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
97,116,104,32,123,33,114,125,41,4,114,134,0,0,0,114,
149,0,0,0,114,24,1,0,0,114,218,0,0,0,114,219,
0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
- 0,0,114,220,0,0,0,203,4,0,0,115,8,0,0,0,
+ 0,0,114,220,0,0,0,207,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,
@@ -2048,7 +2047,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,114,44,1,0,0,114,182,0,0,0,114,229,0,0,
0,114,213,0,0,0,114,212,0,0,0,114,217,0,0,0,
114,220,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,114,43,1,0,0,175,4,
+ 3,0,0,0,114,6,0,0,0,114,43,1,0,0,179,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,
@@ -2068,7 +2067,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,
+ 125,1,125,2,124,2,100,1,117,0,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,
@@ -2085,653 +2084,652 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
99,97,99,104,101,218,5,105,116,101,109,115,114,128,0,0,
0,114,46,1,0,0,41,3,114,193,0,0,0,114,116,0,
0,0,218,6,102,105,110,100,101,114,114,3,0,0,0,114,
- 3,0,0,0,114,6,0,0,0,114,46,1,0,0,221,4,
+ 3,0,0,0,114,6,0,0,0,114,46,1,0,0,225,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,
+ 9,0,0,0,67,0,0,0,115,82,0,0,0,116,0,106,
+ 1,100,1,117,1,114,28,116,0,106,1,115,28,116,2,160,
3,100,2,116,4,161,2,1,0,116,0,106,1,68,0,93,
- 44,125,2,122,14,124,2,124,1,131,1,87,0,2,0,1,
- 0,83,0,4,0,116,5,107,10,114,76,1,0,1,0,1,
- 0,89,0,113,34,89,0,113,34,48,0,113,34,100,1,83,
- 0,41,3,122,46,83,101,97,114,99,104,32,115,121,115,46,
- 112,97,116,104,95,104,111,111,107,115,32,102,111,114,32,97,
- 32,102,105,110,100,101,114,32,102,111,114,32,39,112,97,116,
- 104,39,46,78,122,23,115,121,115,46,112,97,116,104,95,104,
- 111,111,107,115,32,105,115,32,101,109,112,116,121,41,6,114,
- 8,0,0,0,218,10,112,97,116,104,95,104,111,111,107,115,
- 114,74,0,0,0,114,75,0,0,0,114,138,0,0,0,114,
- 117,0,0,0,41,3,114,193,0,0,0,114,43,0,0,0,
- 90,4,104,111,111,107,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,218,11,95,112,97,116,104,95,104,111,111,
- 107,115,231,4,0,0,115,16,0,0,0,0,3,16,1,12,
- 1,10,1,2,1,14,1,14,1,12,2,122,22,80,97,116,
- 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111,
- 111,107,115,99,2,0,0,0,0,0,0,0,0,0,0,0,
- 3,0,0,0,8,0,0,0,67,0,0,0,115,104,0,0,
- 0,124,1,100,1,107,2,114,44,122,12,116,0,160,1,161,
- 0,125,1,87,0,110,22,4,0,116,2,107,10,114,42,1,
- 0,1,0,1,0,89,0,100,2,83,0,48,0,122,14,116,
- 3,106,4,124,1,25,0,125,2,87,0,110,40,4,0,116,
- 5,107,10,114,98,1,0,1,0,1,0,124,0,160,6,124,
- 1,161,1,125,2,124,2,116,3,106,4,124,1,60,0,89,
- 0,110,2,48,0,124,2,83,0,41,3,122,210,71,101,116,
- 32,116,104,101,32,102,105,110,100,101,114,32,102,111,114,32,
- 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,102,
- 114,111,109,32,115,121,115,46,112,97,116,104,95,105,109,112,
- 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,
- 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,
- 104,32,101,110,116,114,121,32,105,115,32,110,111,116,32,105,
- 110,32,116,104,101,32,99,97,99,104,101,44,32,102,105,110,
- 100,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116,
- 101,32,102,105,110,100,101,114,10,32,32,32,32,32,32,32,
- 32,97,110,100,32,99,97,99,104,101,32,105,116,46,32,73,
- 102,32,110,111,32,102,105,110,100,101,114,32,105,115,32,97,
- 118,97,105,108,97,98,108,101,44,32,115,116,111,114,101,32,
- 78,111,110,101,46,10,10,32,32,32,32,32,32,32,32,114,
- 39,0,0,0,78,41,7,114,2,0,0,0,114,54,0,0,
- 0,114,3,1,0,0,114,8,0,0,0,114,48,1,0,0,
- 218,8,75,101,121,69,114,114,111,114,114,52,1,0,0,41,
- 3,114,193,0,0,0,114,43,0,0,0,114,50,1,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 20,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,
- 99,97,99,104,101,244,4,0,0,115,22,0,0,0,0,8,
- 8,1,2,1,12,1,14,3,8,1,2,1,14,1,14,1,
- 10,1,16,1,122,31,80,97,116,104,70,105,110,100,101,114,
- 46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95,
- 99,97,99,104,101,99,3,0,0,0,0,0,0,0,0,0,
- 0,0,6,0,0,0,4,0,0,0,67,0,0,0,115,82,
- 0,0,0,116,0,124,2,100,1,131,2,114,26,124,2,160,
- 1,124,1,161,1,92,2,125,3,125,4,110,14,124,2,160,
- 2,124,1,161,1,125,3,103,0,125,4,124,3,100,0,107,
- 9,114,60,116,3,160,4,124,1,124,3,161,2,83,0,116,
- 3,160,5,124,1,100,0,161,2,125,5,124,4,124,5,95,
- 6,124,5,83,0,41,2,78,114,137,0,0,0,41,7,114,
- 128,0,0,0,114,137,0,0,0,114,206,0,0,0,114,134,
- 0,0,0,114,201,0,0,0,114,183,0,0,0,114,178,0,
- 0,0,41,6,114,193,0,0,0,114,139,0,0,0,114,50,
- 1,0,0,114,140,0,0,0,114,141,0,0,0,114,187,0,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,
- 0,218,16,95,108,101,103,97,99,121,95,103,101,116,95,115,
- 112,101,99,10,5,0,0,115,18,0,0,0,0,4,10,1,
- 16,2,10,1,4,1,8,1,12,1,12,1,6,1,122,27,
- 80,97,116,104,70,105,110,100,101,114,46,95,108,101,103,97,
- 99,121,95,103,101,116,95,115,112,101,99,78,99,4,0,0,
- 0,0,0,0,0,0,0,0,0,9,0,0,0,5,0,0,
- 0,67,0,0,0,115,166,0,0,0,103,0,125,4,124,2,
- 68,0,93,134,125,5,116,0,124,5,116,1,116,2,102,2,
- 131,2,115,28,113,8,124,0,160,3,124,5,161,1,125,6,
- 124,6,100,1,107,9,114,8,116,4,124,6,100,2,131,2,
- 114,70,124,6,160,5,124,1,124,3,161,2,125,7,110,12,
- 124,0,160,6,124,1,124,6,161,2,125,7,124,7,100,1,
- 107,8,114,92,113,8,124,7,106,7,100,1,107,9,114,110,
- 124,7,2,0,1,0,83,0,124,7,106,8,125,8,124,8,
- 100,1,107,8,114,132,116,9,100,3,131,1,130,1,124,4,
- 160,10,124,8,161,1,1,0,113,8,116,11,160,12,124,1,
- 100,1,161,2,125,7,124,4,124,7,95,8,124,7,83,0,
- 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97,
- 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101,
- 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109,
- 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97,
- 109,101,46,78,114,203,0,0,0,122,19,115,112,101,99,32,
- 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,13,
- 114,161,0,0,0,114,84,0,0,0,218,5,98,121,116,101,
- 115,114,54,1,0,0,114,128,0,0,0,114,203,0,0,0,
- 114,55,1,0,0,114,140,0,0,0,114,178,0,0,0,114,
- 117,0,0,0,114,167,0,0,0,114,134,0,0,0,114,183,
- 0,0,0,41,9,114,193,0,0,0,114,139,0,0,0,114,
- 43,0,0,0,114,202,0,0,0,218,14,110,97,109,101,115,
- 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121,
- 114,50,1,0,0,114,187,0,0,0,114,141,0,0,0,114,
- 3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,9,
- 95,103,101,116,95,115,112,101,99,25,5,0,0,115,40,0,
- 0,0,0,5,4,1,8,1,14,1,2,1,10,1,8,1,
- 10,1,14,2,12,1,8,1,2,1,10,1,8,1,6,1,
- 8,1,8,5,12,2,12,1,6,1,122,20,80,97,116,104,
- 70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,99,
- 99,4,0,0,0,0,0,0,0,0,0,0,0,6,0,0,
- 0,5,0,0,0,67,0,0,0,115,100,0,0,0,124,2,
- 100,1,107,8,114,14,116,0,106,1,125,2,124,0,160,2,
- 124,1,124,2,124,3,161,3,125,4,124,4,100,1,107,8,
- 114,40,100,1,83,0,124,4,106,3,100,1,107,8,114,92,
- 124,4,106,4,125,5,124,5,114,86,100,1,124,4,95,5,
- 116,6,124,1,124,5,124,0,106,2,131,3,124,4,95,4,
- 124,4,83,0,100,1,83,0,110,4,124,4,83,0,100,1,
- 83,0,41,2,122,141,84,114,121,32,116,111,32,102,105,110,
- 100,32,97,32,115,112,101,99,32,102,111,114,32,39,102,117,
- 108,108,110,97,109,101,39,32,111,110,32,115,121,115,46,112,
- 97,116,104,32,111,114,32,39,112,97,116,104,39,46,10,10,
- 32,32,32,32,32,32,32,32,84,104,101,32,115,101,97,114,
- 99,104,32,105,115,32,98,97,115,101,100,32,111,110,32,115,
+ 42,125,2,122,14,124,2,124,1,131,1,87,0,2,0,1,
+ 0,83,0,4,0,116,5,121,74,1,0,1,0,1,0,89,
+ 0,113,34,89,0,113,34,48,0,113,34,100,1,83,0,41,
+ 3,122,46,83,101,97,114,99,104,32,115,121,115,46,112,97,
+ 116,104,95,104,111,111,107,115,32,102,111,114,32,97,32,102,
+ 105,110,100,101,114,32,102,111,114,32,39,112,97,116,104,39,
+ 46,78,122,23,115,121,115,46,112,97,116,104,95,104,111,111,
+ 107,115,32,105,115,32,101,109,112,116,121,41,6,114,8,0,
+ 0,0,218,10,112,97,116,104,95,104,111,111,107,115,114,74,
+ 0,0,0,114,75,0,0,0,114,138,0,0,0,114,117,0,
+ 0,0,41,3,114,193,0,0,0,114,43,0,0,0,90,4,
+ 104,111,111,107,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,
+ 235,4,0,0,115,16,0,0,0,0,3,16,1,12,1,10,
+ 1,2,1,14,1,12,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,100,0,0,0,124,
+ 1,100,1,107,2,114,42,122,12,116,0,160,1,161,0,125,
+ 1,87,0,110,20,4,0,116,2,121,40,1,0,1,0,1,
+ 0,89,0,100,2,83,0,48,0,122,14,116,3,106,4,124,
+ 1,25,0,125,2,87,0,110,38,4,0,116,5,121,94,1,
+ 0,1,0,1,0,124,0,160,6,124,1,161,1,125,2,124,
+ 2,116,3,106,4,124,1,60,0,89,0,110,2,48,0,124,
+ 2,83,0,41,3,122,210,71,101,116,32,116,104,101,32,102,
+ 105,110,100,101,114,32,102,111,114,32,116,104,101,32,112,97,
+ 116,104,32,101,110,116,114,121,32,102,114,111,109,32,115,121,
+ 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,
+ 99,97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,
+ 73,102,32,116,104,101,32,112,97,116,104,32,101,110,116,114,
+ 121,32,105,115,32,110,111,116,32,105,110,32,116,104,101,32,
+ 99,97,99,104,101,44,32,102,105,110,100,32,116,104,101,32,
+ 97,112,112,114,111,112,114,105,97,116,101,32,102,105,110,100,
+ 101,114,10,32,32,32,32,32,32,32,32,97,110,100,32,99,
+ 97,99,104,101,32,105,116,46,32,73,102,32,110,111,32,102,
+ 105,110,100,101,114,32,105,115,32,97,118,97,105,108,97,98,
+ 108,101,44,32,115,116,111,114,101,32,78,111,110,101,46,10,
+ 10,32,32,32,32,32,32,32,32,114,39,0,0,0,78,41,
+ 7,114,2,0,0,0,114,54,0,0,0,114,3,1,0,0,
+ 114,8,0,0,0,114,48,1,0,0,218,8,75,101,121,69,
+ 114,114,111,114,114,52,1,0,0,41,3,114,193,0,0,0,
+ 114,43,0,0,0,114,50,1,0,0,114,3,0,0,0,114,
+ 3,0,0,0,114,6,0,0,0,218,20,95,112,97,116,104,
+ 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,248,
+ 4,0,0,115,22,0,0,0,0,8,8,1,2,1,12,1,
+ 12,3,8,1,2,1,14,1,12,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,117,1,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,14,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,117,1,
+ 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,117,0,114,92,113,8,
+ 124,7,106,7,100,1,117,1,114,110,124,7,2,0,1,0,
+ 83,0,124,7,106,8,125,8,124,8,100,1,117,0,114,132,
+ 116,9,100,3,131,1,130,1,124,4,160,10,124,8,161,1,
+ 1,0,113,8,116,11,160,12,124,1,100,1,161,2,125,7,
+ 124,4,124,7,95,8,124,7,83,0,41,4,122,63,70,105,
+ 110,100,32,116,104,101,32,108,111,97,100,101,114,32,111,114,
+ 32,110,97,109,101,115,112,97,99,101,95,112,97,116,104,32,
+ 102,111,114,32,116,104,105,115,32,109,111,100,117,108,101,47,
+ 112,97,99,107,97,103,101,32,110,97,109,101,46,78,114,203,
+ 0,0,0,122,19,115,112,101,99,32,109,105,115,115,105,110,
+ 103,32,108,111,97,100,101,114,41,13,114,161,0,0,0,114,
+ 84,0,0,0,218,5,98,121,116,101,115,114,54,1,0,0,
+ 114,128,0,0,0,114,203,0,0,0,114,55,1,0,0,114,
+ 140,0,0,0,114,178,0,0,0,114,117,0,0,0,114,167,
+ 0,0,0,114,134,0,0,0,114,183,0,0,0,41,9,114,
+ 193,0,0,0,114,139,0,0,0,114,43,0,0,0,114,202,
+ 0,0,0,218,14,110,97,109,101,115,112,97,99,101,95,112,
+ 97,116,104,90,5,101,110,116,114,121,114,50,1,0,0,114,
+ 187,0,0,0,114,141,0,0,0,114,3,0,0,0,114,3,
+ 0,0,0,114,6,0,0,0,218,9,95,103,101,116,95,115,
+ 112,101,99,29,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,117,0,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,117,0,114,40,100,1,83,0,
+ 124,4,106,3,100,1,117,0,114,92,124,4,106,4,125,5,
+ 124,5,114,86,100,1,124,4,95,5,116,6,124,1,124,5,
+ 124,0,106,2,131,3,124,4,95,4,124,4,83,0,100,1,
+ 83,0,110,4,124,4,83,0,100,1,83,0,41,2,122,141,
+ 84,114,121,32,116,111,32,102,105,110,100,32,97,32,115,112,
+ 101,99,32,102,111,114,32,39,102,117,108,108,110,97,109,101,
+ 39,32,111,110,32,115,121,115,46,112,97,116,104,32,111,114,
+ 32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32,
+ 32,32,84,104,101,32,115,101,97,114,99,104,32,105,115,32,
+ 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,
+ 104,95,104,111,111,107,115,32,97,110,100,32,115,121,115,46,
+ 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,
+ 99,104,101,46,10,32,32,32,32,32,32,32,32,78,41,7,
+ 114,8,0,0,0,114,43,0,0,0,114,58,1,0,0,114,
+ 140,0,0,0,114,178,0,0,0,114,181,0,0,0,114,22,
+ 1,0,0,41,6,114,193,0,0,0,114,139,0,0,0,114,
+ 43,0,0,0,114,202,0,0,0,114,187,0,0,0,114,57,
+ 1,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
+ 0,0,114,203,0,0,0,61,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,117,0,
+ 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,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,
- 116,101,114,95,99,97,99,104,101,46,10,32,32,32,32,32,
- 32,32,32,78,41,7,114,8,0,0,0,114,43,0,0,0,
- 114,58,1,0,0,114,140,0,0,0,114,178,0,0,0,114,
- 181,0,0,0,114,22,1,0,0,41,6,114,193,0,0,0,
- 114,139,0,0,0,114,43,0,0,0,114,202,0,0,0,114,
- 187,0,0,0,114,57,1,0,0,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,203,0,0,0,57,5,0,
- 0,115,26,0,0,0,0,6,8,1,6,1,14,1,8,1,
- 4,1,10,1,6,1,4,3,6,1,16,1,4,2,6,2,
- 122,20,80,97,116,104,70,105,110,100,101,114,46,102,105,110,
- 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,0,
- 0,0,0,4,0,0,0,4,0,0,0,67,0,0,0,115,
- 30,0,0,0,124,0,160,0,124,1,124,2,161,2,125,3,
- 124,3,100,1,107,8,114,24,100,1,83,0,124,3,106,1,
- 83,0,41,2,122,170,102,105,110,100,32,116,104,101,32,109,
- 111,100,117,108,101,32,111,110,32,115,121,115,46,112,97,116,
- 104,32,111,114,32,39,112,97,116,104,39,32,98,97,115,101,
- 100,32,111,110,32,115,121,115,46,112,97,116,104,95,104,111,
- 111,107,115,32,97,110,100,10,32,32,32,32,32,32,32,32,
- 115,121,115,46,112,97,116,104,95,105,109,112,111,114,116,101,
- 114,95,99,97,99,104,101,46,10,10,32,32,32,32,32,32,
- 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115,
- 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115,
- 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110,
- 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32,
- 78,114,204,0,0,0,114,205,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,114,206,0,0,0,81,
- 5,0,0,115,8,0,0,0,0,8,12,1,8,1,4,1,
- 122,22,80,97,116,104,70,105,110,100,101,114,46,102,105,110,
- 100,95,109,111,100,117,108,101,99,1,0,0,0,0,0,0,
- 0,0,0,0,0,4,0,0,0,3,0,0,0,79,0,0,
- 0,115,24,0,0,0,100,1,100,2,108,0,109,1,125,3,
- 1,0,124,3,106,2,124,1,124,2,142,1,83,0,41,3,
- 97,32,1,0,0,10,32,32,32,32,32,32,32,32,70,105,
- 110,100,32,100,105,115,116,114,105,98,117,116,105,111,110,115,
- 46,10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,
- 110,32,97,110,32,105,116,101,114,97,98,108,101,32,111,102,
- 32,97,108,108,32,68,105,115,116,114,105,98,117,116,105,111,
- 110,32,105,110,115,116,97,110,99,101,115,32,99,97,112,97,
- 98,108,101,32,111,102,10,32,32,32,32,32,32,32,32,108,
- 111,97,100,105,110,103,32,116,104,101,32,109,101,116,97,100,
- 97,116,97,32,102,111,114,32,112,97,99,107,97,103,101,115,
- 32,109,97,116,99,104,105,110,103,32,96,96,99,111,110,116,
- 101,120,116,46,110,97,109,101,96,96,10,32,32,32,32,32,
- 32,32,32,40,111,114,32,97,108,108,32,110,97,109,101,115,
- 32,105,102,32,96,96,78,111,110,101,96,96,32,105,110,100,
- 105,99,97,116,101,100,41,32,97,108,111,110,103,32,116,104,
- 101,32,112,97,116,104,115,32,105,110,32,116,104,101,32,108,
- 105,115,116,10,32,32,32,32,32,32,32,32,111,102,32,100,
- 105,114,101,99,116,111,114,105,101,115,32,96,96,99,111,110,
- 116,101,120,116,46,112,97,116,104,96,96,46,10,32,32,32,
- 32,32,32,32,32,114,72,0,0,0,41,1,218,18,77,101,
- 116,97,100,97,116,97,80,97,116,104,70,105,110,100,101,114,
- 41,3,90,18,105,109,112,111,114,116,108,105,98,46,109,101,
- 116,97,100,97,116,97,114,59,1,0,0,218,18,102,105,110,
- 100,95,100,105,115,116,114,105,98,117,116,105,111,110,115,41,
- 4,114,193,0,0,0,114,119,0,0,0,114,120,0,0,0,
- 114,59,1,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,60,1,0,0,94,5,0,0,115,4,0,
- 0,0,0,10,12,1,122,29,80,97,116,104,70,105,110,100,
- 101,114,46,102,105,110,100,95,100,105,115,116,114,105,98,117,
- 116,105,111,110,115,41,1,78,41,2,78,78,41,1,78,41,
- 13,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,
- 114,127,0,0,0,114,207,0,0,0,114,46,1,0,0,114,
- 52,1,0,0,114,54,1,0,0,114,55,1,0,0,114,58,
- 1,0,0,114,203,0,0,0,114,206,0,0,0,114,60,1,
- 0,0,114,3,0,0,0,114,3,0,0,0,114,3,0,0,
- 0,114,6,0,0,0,114,45,1,0,0,217,4,0,0,115,
- 34,0,0,0,8,2,4,2,2,1,10,9,2,1,10,12,
- 2,1,10,21,2,1,10,14,2,1,12,31,2,1,12,23,
- 2,1,12,12,2,1,114,45,1,0,0,99,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
- 64,0,0,0,115,90,0,0,0,101,0,90,1,100,0,90,
- 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,
- 5,132,0,90,5,101,6,90,7,100,6,100,7,132,0,90,
- 8,100,8,100,9,132,0,90,9,100,19,100,11,100,12,132,
- 1,90,10,100,13,100,14,132,0,90,11,101,12,100,15,100,
- 16,132,0,131,1,90,13,100,17,100,18,132,0,90,14,100,
- 10,83,0,41,20,218,10,70,105,108,101,70,105,110,100,101,
- 114,122,172,70,105,108,101,45,98,97,115,101,100,32,102,105,
- 110,100,101,114,46,10,10,32,32,32,32,73,110,116,101,114,
- 97,99,116,105,111,110,115,32,119,105,116,104,32,116,104,101,
- 32,102,105,108,101,32,115,121,115,116,101,109,32,97,114,101,
- 32,99,97,99,104,101,100,32,102,111,114,32,112,101,114,102,
- 111,114,109,97,110,99,101,44,32,98,101,105,110,103,10,32,
- 32,32,32,114,101,102,114,101,115,104,101,100,32,119,104,101,
- 110,32,116,104,101,32,100,105,114,101,99,116,111,114,121,32,
- 116,104,101,32,102,105,110,100,101,114,32,105,115,32,104,97,
- 110,100,108,105,110,103,32,104,97,115,32,98,101,101,110,32,
- 109,111,100,105,102,105,101,100,46,10,10,32,32,32,32,99,
- 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,
- 6,0,0,0,7,0,0,0,115,84,0,0,0,103,0,125,
- 3,124,2,68,0,93,32,92,2,137,0,125,4,124,3,160,
- 0,135,0,102,1,100,1,100,2,132,8,124,4,68,0,131,
- 1,161,1,1,0,113,8,124,3,124,0,95,1,124,1,112,
- 54,100,3,124,0,95,2,100,4,124,0,95,3,116,4,131,
- 0,124,0,95,5,116,4,131,0,124,0,95,6,100,5,83,
- 0,41,6,122,154,73,110,105,116,105,97,108,105,122,101,32,
- 119,105,116,104,32,116,104,101,32,112,97,116,104,32,116,111,
- 32,115,101,97,114,99,104,32,111,110,32,97,110,100,32,97,
- 32,118,97,114,105,97,98,108,101,32,110,117,109,98,101,114,
- 32,111,102,10,32,32,32,32,32,32,32,32,50,45,116,117,
- 112,108,101,115,32,99,111,110,116,97,105,110,105,110,103,32,
- 116,104,101,32,108,111,97,100,101,114,32,97,110,100,32,116,
- 104,101,32,102,105,108,101,32,115,117,102,102,105,120,101,115,
- 32,116,104,101,32,108,111,97,100,101,114,10,32,32,32,32,
- 32,32,32,32,114,101,99,111,103,110,105,122,101,115,46,99,
- 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
- 3,0,0,0,51,0,0,0,115,22,0,0,0,124,0,93,
- 14,125,1,124,1,136,0,102,2,86,0,1,0,113,2,100,
- 0,83,0,114,109,0,0,0,114,3,0,0,0,114,16,1,
- 0,0,169,1,114,140,0,0,0,114,3,0,0,0,114,6,
- 0,0,0,114,19,1,0,0,123,5,0,0,115,4,0,0,
- 0,4,0,2,0,122,38,70,105,108,101,70,105,110,100,101,
- 114,46,95,95,105,110,105,116,95,95,46,60,108,111,99,97,
- 108,115,62,46,60,103,101,110,101,120,112,114,62,114,70,0,
- 0,0,114,104,0,0,0,78,41,7,114,167,0,0,0,218,
- 8,95,108,111,97,100,101,114,115,114,43,0,0,0,218,11,
- 95,112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,
- 218,11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,
- 114,101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,
- 104,101,41,5,114,118,0,0,0,114,43,0,0,0,218,14,
- 108,111,97,100,101,114,95,100,101,116,97,105,108,115,90,7,
- 108,111,97,100,101,114,115,114,189,0,0,0,114,3,0,0,
- 0,114,62,1,0,0,114,6,0,0,0,114,209,0,0,0,
- 117,5,0,0,115,16,0,0,0,0,4,4,1,12,1,26,
- 1,6,2,10,1,6,1,8,1,122,19,70,105,108,101,70,
- 105,110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,
- 0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,2,
- 0,0,0,67,0,0,0,115,10,0,0,0,100,1,124,0,
- 95,0,100,2,83,0,41,3,122,31,73,110,118,97,108,105,
- 100,97,116,101,32,116,104,101,32,100,105,114,101,99,116,111,
- 114,121,32,109,116,105,109,101,46,114,104,0,0,0,78,41,
- 1,114,64,1,0,0,114,246,0,0,0,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,114,46,1,0,0,131,
- 5,0,0,115,2,0,0,0,0,2,122,28,70,105,108,101,
- 70,105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,
- 101,95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,
- 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,
- 0,115,42,0,0,0,124,0,160,0,124,1,161,1,125,2,
- 124,2,100,1,107,8,114,26,100,1,103,0,102,2,83,0,
- 124,2,106,1,124,2,106,2,112,38,103,0,102,2,83,0,
- 41,2,122,197,84,114,121,32,116,111,32,102,105,110,100,32,
- 97,32,108,111,97,100,101,114,32,102,111,114,32,116,104,101,
- 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,
- 101,44,32,111,114,32,116,104,101,32,110,97,109,101,115,112,
- 97,99,101,10,32,32,32,32,32,32,32,32,112,97,99,107,
- 97,103,101,32,112,111,114,116,105,111,110,115,46,32,82,101,
- 116,117,114,110,115,32,40,108,111,97,100,101,114,44,32,108,
- 105,115,116,45,111,102,45,112,111,114,116,105,111,110,115,41,
- 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,
- 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,
- 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95,
- 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10,
- 10,32,32,32,32,32,32,32,32,78,41,3,114,203,0,0,
- 0,114,140,0,0,0,114,178,0,0,0,41,3,114,118,0,
- 0,0,114,139,0,0,0,114,187,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,114,137,0,0,0,
- 137,5,0,0,115,8,0,0,0,0,7,10,1,8,1,8,
- 1,122,22,70,105,108,101,70,105,110,100,101,114,46,102,105,
- 110,100,95,108,111,97,100,101,114,99,6,0,0,0,0,0,
- 0,0,0,0,0,0,7,0,0,0,6,0,0,0,67,0,
- 0,0,115,26,0,0,0,124,1,124,2,124,3,131,2,125,
- 6,116,0,124,2,124,3,124,6,124,4,100,1,141,4,83,
- 0,41,2,78,114,177,0,0,0,41,1,114,190,0,0,0,
- 41,7,114,118,0,0,0,114,188,0,0,0,114,139,0,0,
- 0,114,43,0,0,0,90,4,115,109,115,108,114,202,0,0,
- 0,114,140,0,0,0,114,3,0,0,0,114,3,0,0,0,
- 114,6,0,0,0,114,58,1,0,0,149,5,0,0,115,8,
- 0,0,0,0,1,10,1,8,1,2,255,122,20,70,105,108,
- 101,70,105,110,100,101,114,46,95,103,101,116,95,115,112,101,
- 99,78,99,3,0,0,0,0,0,0,0,0,0,0,0,14,
- 0,0,0,8,0,0,0,67,0,0,0,115,98,1,0,0,
- 100,1,125,3,124,1,160,0,100,2,161,1,100,3,25,0,
- 125,4,122,24,116,1,124,0,106,2,112,34,116,3,160,4,
- 161,0,131,1,106,5,125,5,87,0,110,24,4,0,116,6,
- 107,10,114,66,1,0,1,0,1,0,100,4,125,5,89,0,
- 110,2,48,0,124,5,124,0,106,7,107,3,114,92,124,0,
- 160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,0,
- 114,114,124,0,106,10,125,6,124,4,160,11,161,0,125,7,
- 110,10,124,0,106,12,125,6,124,4,125,7,124,7,124,6,
- 107,6,114,218,116,13,124,0,106,2,124,4,131,2,125,8,
- 124,0,106,14,68,0,93,58,92,2,125,9,125,10,100,5,
- 124,9,23,0,125,11,116,13,124,8,124,11,131,2,125,12,
- 116,15,124,12,131,1,114,150,124,0,160,16,124,10,124,1,
- 124,12,124,8,103,1,124,2,161,5,2,0,1,0,83,0,
- 113,150,116,17,124,8,131,1,125,3,124,0,106,14,68,0,
- 93,82,92,2,125,9,125,10,116,13,124,0,106,2,124,4,
- 124,9,23,0,131,2,125,12,116,18,106,19,100,6,124,12,
- 100,3,100,7,141,3,1,0,124,7,124,9,23,0,124,6,
- 107,6,114,224,116,15,124,12,131,1,114,224,124,0,160,16,
- 124,10,124,1,124,12,100,8,124,2,161,5,2,0,1,0,
- 83,0,113,224,124,3,144,1,114,94,116,18,160,19,100,9,
- 124,8,161,2,1,0,116,18,160,20,124,1,100,8,161,2,
- 125,13,124,8,103,1,124,13,95,21,124,13,83,0,100,8,
- 83,0,41,10,122,111,84,114,121,32,116,111,32,102,105,110,
- 100,32,97,32,115,112,101,99,32,102,111,114,32,116,104,101,
- 32,115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,
- 101,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117,
- 114,110,115,32,116,104,101,32,109,97,116,99,104,105,110,103,
- 32,115,112,101,99,44,32,111,114,32,78,111,110,101,32,105,
- 102,32,110,111,116,32,102,111,117,110,100,46,10,32,32,32,
- 32,32,32,32,32,70,114,70,0,0,0,114,27,0,0,0,
- 114,104,0,0,0,114,209,0,0,0,122,9,116,114,121,105,
- 110,103,32,123,125,41,1,90,9,118,101,114,98,111,115,105,
- 116,121,78,122,25,112,111,115,115,105,98,108,101,32,110,97,
- 109,101,115,112,97,99,101,32,102,111,114,32,123,125,41,22,
- 114,40,0,0,0,114,48,0,0,0,114,43,0,0,0,114,
- 2,0,0,0,114,54,0,0,0,114,10,1,0,0,114,49,
- 0,0,0,114,64,1,0,0,218,11,95,102,105,108,108,95,
- 99,97,99,104,101,114,7,0,0,0,114,67,1,0,0,114,
- 105,0,0,0,114,66,1,0,0,114,37,0,0,0,114,63,
- 1,0,0,114,53,0,0,0,114,58,1,0,0,114,55,0,
- 0,0,114,134,0,0,0,114,149,0,0,0,114,183,0,0,
- 0,114,178,0,0,0,41,14,114,118,0,0,0,114,139,0,
- 0,0,114,202,0,0,0,90,12,105,115,95,110,97,109,101,
- 115,112,97,99,101,90,11,116,97,105,108,95,109,111,100,117,
- 108,101,114,169,0,0,0,90,5,99,97,99,104,101,90,12,
- 99,97,99,104,101,95,109,111,100,117,108,101,90,9,98,97,
- 115,101,95,112,97,116,104,114,17,1,0,0,114,188,0,0,
- 0,90,13,105,110,105,116,95,102,105,108,101,110,97,109,101,
- 90,9,102,117,108,108,95,112,97,116,104,114,187,0,0,0,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,114,
- 203,0,0,0,154,5,0,0,115,74,0,0,0,0,5,4,
- 1,14,1,2,1,24,1,14,1,10,1,10,1,8,1,6,
- 2,6,1,6,1,10,2,6,1,4,2,8,1,12,1,14,
- 1,8,1,10,1,8,1,26,4,8,2,14,1,16,1,16,
- 1,12,1,8,1,10,1,2,0,2,255,10,2,6,1,12,
- 1,12,1,8,1,4,1,122,20,70,105,108,101,70,105,110,
- 100,101,114,46,102,105,110,100,95,115,112,101,99,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,9,0,0,0,10,0,
- 0,0,67,0,0,0,115,190,0,0,0,124,0,106,0,125,
- 1,122,22,116,1,160,2,124,1,112,22,116,1,160,3,161,
- 0,161,1,125,2,87,0,110,30,4,0,116,4,116,5,116,
- 6,102,3,107,10,114,58,1,0,1,0,1,0,103,0,125,
- 2,89,0,110,2,48,0,116,7,106,8,160,9,100,1,161,
- 1,115,84,116,10,124,2,131,1,124,0,95,11,110,74,116,
- 10,131,0,125,3,124,2,68,0,93,56,125,4,124,4,160,
- 12,100,2,161,1,92,3,125,5,125,6,125,7,124,6,114,
- 136,100,3,160,13,124,5,124,7,160,14,161,0,161,2,125,
- 8,110,4,124,5,125,8,124,3,160,15,124,8,161,1,1,
- 0,113,94,124,3,124,0,95,11,116,7,106,8,160,9,116,
- 16,161,1,114,186,100,4,100,5,132,0,124,2,68,0,131,
- 1,124,0,95,17,100,6,83,0,41,7,122,68,70,105,108,
- 108,32,116,104,101,32,99,97,99,104,101,32,111,102,32,112,
- 111,116,101,110,116,105,97,108,32,109,111,100,117,108,101,115,
- 32,97,110,100,32,112,97,99,107,97,103,101,115,32,102,111,
- 114,32,116,104,105,115,32,100,105,114,101,99,116,111,114,121,
- 46,114,0,0,0,0,114,70,0,0,0,114,60,0,0,0,
- 99,1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
- 0,4,0,0,0,83,0,0,0,115,20,0,0,0,104,0,
- 124,0,93,12,125,1,124,1,160,0,161,0,146,2,113,4,
- 83,0,114,3,0,0,0,41,1,114,105,0,0,0,41,2,
- 114,31,0,0,0,90,2,102,110,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,9,60,115,101,116,99,111,
- 109,112,62,231,5,0,0,115,4,0,0,0,6,0,2,0,
- 122,41,70,105,108,101,70,105,110,100,101,114,46,95,102,105,
- 108,108,95,99,97,99,104,101,46,60,108,111,99,97,108,115,
- 62,46,60,115,101,116,99,111,109,112,62,78,41,18,114,43,
- 0,0,0,114,2,0,0,0,114,7,1,0,0,114,54,0,
- 0,0,114,3,1,0,0,218,15,80,101,114,109,105,115,115,
- 105,111,110,69,114,114,111,114,218,18,78,111,116,65,68,105,
- 114,101,99,116,111,114,121,69,114,114,111,114,114,8,0,0,
- 0,114,9,0,0,0,114,10,0,0,0,114,65,1,0,0,
- 114,66,1,0,0,114,100,0,0,0,114,61,0,0,0,114,
- 105,0,0,0,218,3,97,100,100,114,11,0,0,0,114,67,
- 1,0,0,41,9,114,118,0,0,0,114,43,0,0,0,114,
- 8,1,0,0,90,21,108,111,119,101,114,95,115,117,102,102,
- 105,120,95,99,111,110,116,101,110,116,115,114,41,1,0,0,
- 114,116,0,0,0,114,29,1,0,0,114,17,1,0,0,90,
- 8,110,101,119,95,110,97,109,101,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,69,1,0,0,202,5,0,
- 0,115,34,0,0,0,0,2,6,1,2,1,22,1,20,3,
- 10,3,12,1,12,7,6,1,8,1,16,1,4,1,18,2,
- 4,1,12,1,6,1,12,1,122,22,70,105,108,101,70,105,
- 110,100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,
- 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
- 0,3,0,0,0,7,0,0,0,115,18,0,0,0,135,0,
- 135,1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,
- 41,3,97,20,1,0,0,65,32,99,108,97,115,115,32,109,
- 101,116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,
- 114,110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,
- 32,117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,
- 95,104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,
- 105,99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,
- 97,110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,
- 103,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,
- 108,111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,
- 112,97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,
- 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,
- 114,101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,
- 116,104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,
- 111,110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,
- 115,32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,
- 121,44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,
- 115,10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,
- 46,10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,
- 0,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0,
- 19,0,0,0,115,34,0,0,0,116,0,124,0,131,1,115,
- 20,116,1,100,1,124,0,100,2,141,2,130,1,136,0,124,
- 0,102,1,136,1,158,2,142,0,83,0,41,3,122,45,80,
- 97,116,104,32,104,111,111,107,32,102,111,114,32,105,109,112,
- 111,114,116,108,105,98,46,109,97,99,104,105,110,101,114,121,
- 46,70,105,108,101,70,105,110,100,101,114,46,122,30,111,110,
- 108,121,32,100,105,114,101,99,116,111,114,105,101,115,32,97,
- 114,101,32,115,117,112,112,111,114,116,101,100,114,47,0,0,
- 0,41,2,114,55,0,0,0,114,117,0,0,0,114,47,0,
- 0,0,169,2,114,193,0,0,0,114,68,1,0,0,114,3,
- 0,0,0,114,6,0,0,0,218,24,112,97,116,104,95,104,
- 111,111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,
- 101,114,243,5,0,0,115,6,0,0,0,0,2,8,1,12,
- 1,122,54,70,105,108,101,70,105,110,100,101,114,46,112,97,
- 116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,62,
- 46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70,
- 105,108,101,70,105,110,100,101,114,114,3,0,0,0,41,3,
- 114,193,0,0,0,114,68,1,0,0,114,75,1,0,0,114,
- 3,0,0,0,114,74,1,0,0,114,6,0,0,0,218,9,
- 112,97,116,104,95,104,111,111,107,233,5,0,0,115,4,0,
- 0,0,0,10,14,6,122,20,70,105,108,101,70,105,110,100,
- 101,114,46,112,97,116,104,95,104,111,111,107,99,1,0,0,
- 0,0,0,0,0,0,0,0,0,1,0,0,0,3,0,0,
- 0,67,0,0,0,115,12,0,0,0,100,1,160,0,124,0,
- 106,1,161,1,83,0,41,2,78,122,16,70,105,108,101,70,
- 105,110,100,101,114,40,123,33,114,125,41,41,2,114,61,0,
- 0,0,114,43,0,0,0,114,246,0,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,6,0,0,0,114,39,1,0,0,
- 251,5,0,0,115,2,0,0,0,0,1,122,19,70,105,108,
- 101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,95,
- 41,1,78,41,15,114,125,0,0,0,114,124,0,0,0,114,
- 126,0,0,0,114,127,0,0,0,114,209,0,0,0,114,46,
- 1,0,0,114,143,0,0,0,114,206,0,0,0,114,137,0,
- 0,0,114,58,1,0,0,114,203,0,0,0,114,69,1,0,
- 0,114,207,0,0,0,114,76,1,0,0,114,39,1,0,0,
+ 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,85,5,0,0,115,8,0,
+ 0,0,0,8,12,1,8,1,4,1,122,22,80,97,116,104,
+ 70,105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,
+ 108,101,99,1,0,0,0,0,0,0,0,0,0,0,0,4,
+ 0,0,0,4,0,0,0,79,0,0,0,115,28,0,0,0,
+ 100,1,100,2,108,0,109,1,125,3,1,0,124,3,106,2,
+ 124,1,105,0,124,2,164,1,142,1,83,0,41,3,97,32,
+ 1,0,0,10,32,32,32,32,32,32,32,32,70,105,110,100,
+ 32,100,105,115,116,114,105,98,117,116,105,111,110,115,46,10,
+ 10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,32,
+ 97,110,32,105,116,101,114,97,98,108,101,32,111,102,32,97,
+ 108,108,32,68,105,115,116,114,105,98,117,116,105,111,110,32,
+ 105,110,115,116,97,110,99,101,115,32,99,97,112,97,98,108,
+ 101,32,111,102,10,32,32,32,32,32,32,32,32,108,111,97,
+ 100,105,110,103,32,116,104,101,32,109,101,116,97,100,97,116,
+ 97,32,102,111,114,32,112,97,99,107,97,103,101,115,32,109,
+ 97,116,99,104,105,110,103,32,96,96,99,111,110,116,101,120,
+ 116,46,110,97,109,101,96,96,10,32,32,32,32,32,32,32,
+ 32,40,111,114,32,97,108,108,32,110,97,109,101,115,32,105,
+ 102,32,96,96,78,111,110,101,96,96,32,105,110,100,105,99,
+ 97,116,101,100,41,32,97,108,111,110,103,32,116,104,101,32,
+ 112,97,116,104,115,32,105,110,32,116,104,101,32,108,105,115,
+ 116,10,32,32,32,32,32,32,32,32,111,102,32,100,105,114,
+ 101,99,116,111,114,105,101,115,32,96,96,99,111,110,116,101,
+ 120,116,46,112,97,116,104,96,96,46,10,32,32,32,32,32,
+ 32,32,32,114,72,0,0,0,41,1,218,18,77,101,116,97,
+ 100,97,116,97,80,97,116,104,70,105,110,100,101,114,41,3,
+ 90,18,105,109,112,111,114,116,108,105,98,46,109,101,116,97,
+ 100,97,116,97,114,59,1,0,0,218,18,102,105,110,100,95,
+ 100,105,115,116,114,105,98,117,116,105,111,110,115,41,4,114,
+ 193,0,0,0,114,119,0,0,0,114,120,0,0,0,114,59,
+ 1,0,0,114,3,0,0,0,114,3,0,0,0,114,6,0,
+ 0,0,114,60,1,0,0,98,5,0,0,115,4,0,0,0,
+ 0,10,12,1,122,29,80,97,116,104,70,105,110,100,101,114,
+ 46,102,105,110,100,95,100,105,115,116,114,105,98,117,116,105,
+ 111,110,115,41,1,78,41,2,78,78,41,1,78,41,13,114,
+ 125,0,0,0,114,124,0,0,0,114,126,0,0,0,114,127,
+ 0,0,0,114,207,0,0,0,114,46,1,0,0,114,52,1,
+ 0,0,114,54,1,0,0,114,55,1,0,0,114,58,1,0,
+ 0,114,203,0,0,0,114,206,0,0,0,114,60,1,0,0,
114,3,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,61,1,0,0,108,5,0,0,115,22,0,
- 0,0,8,2,4,7,8,14,8,4,4,2,8,12,8,5,
- 10,48,8,31,2,1,10,17,114,61,1,0,0,99,4,0,
- 0,0,0,0,0,0,0,0,0,0,6,0,0,0,8,0,
- 0,0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,
- 1,161,1,125,4,124,0,160,0,100,2,161,1,125,5,124,
- 4,115,66,124,5,114,36,124,5,106,1,125,4,110,30,124,
- 2,124,3,107,2,114,56,116,2,124,1,124,2,131,2,125,
- 4,110,10,116,3,124,1,124,2,131,2,125,4,124,5,115,
- 84,116,4,124,1,124,2,124,4,100,3,141,3,125,5,122,
- 36,124,5,124,0,100,2,60,0,124,4,124,0,100,1,60,
- 0,124,2,124,0,100,4,60,0,124,3,124,0,100,5,60,
- 0,87,0,110,20,4,0,116,5,107,10,114,140,1,0,1,
- 0,1,0,89,0,110,2,48,0,100,0,83,0,41,6,78,
- 218,10,95,95,108,111,97,100,101,114,95,95,218,8,95,95,
- 115,112,101,99,95,95,114,62,1,0,0,90,8,95,95,102,
- 105,108,101,95,95,90,10,95,95,99,97,99,104,101,100,95,
- 95,41,6,218,3,103,101,116,114,140,0,0,0,114,15,1,
- 0,0,114,9,1,0,0,114,190,0,0,0,218,9,69,120,
- 99,101,112,116,105,111,110,41,6,90,2,110,115,114,116,0,
- 0,0,90,8,112,97,116,104,110,97,109,101,90,9,99,112,
- 97,116,104,110,97,109,101,114,140,0,0,0,114,187,0,0,
+ 6,0,0,0,114,45,1,0,0,221,4,0,0,115,34,0,
+ 0,0,8,2,4,2,2,1,10,9,2,1,10,12,2,1,
+ 10,21,2,1,10,14,2,1,12,31,2,1,12,23,2,1,
+ 12,12,2,1,114,45,1,0,0,99,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,3,0,0,0,64,0,
+ 0,0,115,90,0,0,0,101,0,90,1,100,0,90,2,100,
+ 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,
+ 0,90,5,101,6,90,7,100,6,100,7,132,0,90,8,100,
+ 8,100,9,132,0,90,9,100,19,100,11,100,12,132,1,90,
+ 10,100,13,100,14,132,0,90,11,101,12,100,15,100,16,132,
+ 0,131,1,90,13,100,17,100,18,132,0,90,14,100,10,83,
+ 0,41,20,218,10,70,105,108,101,70,105,110,100,101,114,122,
+ 172,70,105,108,101,45,98,97,115,101,100,32,102,105,110,100,
+ 101,114,46,10,10,32,32,32,32,73,110,116,101,114,97,99,
+ 116,105,111,110,115,32,119,105,116,104,32,116,104,101,32,102,
+ 105,108,101,32,115,121,115,116,101,109,32,97,114,101,32,99,
+ 97,99,104,101,100,32,102,111,114,32,112,101,114,102,111,114,
+ 109,97,110,99,101,44,32,98,101,105,110,103,10,32,32,32,
+ 32,114,101,102,114,101,115,104,101,100,32,119,104,101,110,32,
+ 116,104,101,32,100,105,114,101,99,116,111,114,121,32,116,104,
+ 101,32,102,105,110,100,101,114,32,105,115,32,104,97,110,100,
+ 108,105,110,103,32,104,97,115,32,98,101,101,110,32,109,111,
+ 100,105,102,105,101,100,46,10,10,32,32,32,32,99,2,0,
+ 0,0,0,0,0,0,0,0,0,0,5,0,0,0,6,0,
+ 0,0,7,0,0,0,115,84,0,0,0,103,0,125,3,124,
+ 2,68,0,93,32,92,2,137,0,125,4,124,3,160,0,135,
+ 0,102,1,100,1,100,2,132,8,124,4,68,0,131,1,161,
+ 1,1,0,113,8,124,3,124,0,95,1,124,1,112,54,100,
+ 3,124,0,95,2,100,4,124,0,95,3,116,4,131,0,124,
+ 0,95,5,116,4,131,0,124,0,95,6,100,5,83,0,41,
+ 6,122,154,73,110,105,116,105,97,108,105,122,101,32,119,105,
+ 116,104,32,116,104,101,32,112,97,116,104,32,116,111,32,115,
+ 101,97,114,99,104,32,111,110,32,97,110,100,32,97,32,118,
+ 97,114,105,97,98,108,101,32,110,117,109,98,101,114,32,111,
+ 102,10,32,32,32,32,32,32,32,32,50,45,116,117,112,108,
+ 101,115,32,99,111,110,116,97,105,110,105,110,103,32,116,104,
+ 101,32,108,111,97,100,101,114,32,97,110,100,32,116,104,101,
+ 32,102,105,108,101,32,115,117,102,102,105,120,101,115,32,116,
+ 104,101,32,108,111,97,100,101,114,10,32,32,32,32,32,32,
+ 32,32,114,101,99,111,103,110,105,122,101,115,46,99,1,0,
+ 0,0,0,0,0,0,0,0,0,0,2,0,0,0,3,0,
+ 0,0,51,0,0,0,115,22,0,0,0,124,0,93,14,125,
+ 1,124,1,136,0,102,2,86,0,1,0,113,2,100,0,83,
+ 0,114,109,0,0,0,114,3,0,0,0,114,16,1,0,0,
+ 169,1,114,140,0,0,0,114,3,0,0,0,114,6,0,0,
+ 0,114,19,1,0,0,127,5,0,0,115,4,0,0,0,4,
+ 0,2,0,122,38,70,105,108,101,70,105,110,100,101,114,46,
+ 95,95,105,110,105,116,95,95,46,60,108,111,99,97,108,115,
+ 62,46,60,103,101,110,101,120,112,114,62,114,70,0,0,0,
+ 114,104,0,0,0,78,41,7,114,167,0,0,0,218,8,95,
+ 108,111,97,100,101,114,115,114,43,0,0,0,218,11,95,112,
+ 97,116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,
+ 95,112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,
+ 108,97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,
+ 41,5,114,118,0,0,0,114,43,0,0,0,218,14,108,111,
+ 97,100,101,114,95,100,101,116,97,105,108,115,90,7,108,111,
+ 97,100,101,114,115,114,189,0,0,0,114,3,0,0,0,114,
+ 62,1,0,0,114,6,0,0,0,114,209,0,0,0,121,5,
+ 0,0,115,16,0,0,0,0,4,4,1,12,1,26,1,6,
+ 2,10,1,6,1,8,1,122,19,70,105,108,101,70,105,110,
+ 100,101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,
+ 0,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0,
+ 0,67,0,0,0,115,10,0,0,0,100,1,124,0,95,0,
+ 100,2,83,0,41,3,122,31,73,110,118,97,108,105,100,97,
+ 116,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,
+ 32,109,116,105,109,101,46,114,104,0,0,0,78,41,1,114,
+ 64,1,0,0,114,246,0,0,0,114,3,0,0,0,114,3,
+ 0,0,0,114,6,0,0,0,114,46,1,0,0,135,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,117,0,114,26,100,1,103,0,102,2,83,0,124,2,
+ 106,1,124,2,106,2,112,38,103,0,102,2,83,0,41,2,
+ 122,197,84,114,121,32,116,111,32,102,105,110,100,32,97,32,
+ 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115,
+ 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,44,
+ 32,111,114,32,116,104,101,32,110,97,109,101,115,112,97,99,
+ 101,10,32,32,32,32,32,32,32,32,112,97,99,107,97,103,
+ 101,32,112,111,114,116,105,111,110,115,46,32,82,101,116,117,
+ 114,110,115,32,40,108,111,97,100,101,114,44,32,108,105,115,
+ 116,45,111,102,45,112,111,114,116,105,111,110,115,41,46,10,
+ 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,
+ 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,
+ 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112,
+ 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32,
+ 32,32,32,32,32,32,32,78,41,3,114,203,0,0,0,114,
+ 140,0,0,0,114,178,0,0,0,41,3,114,118,0,0,0,
+ 114,139,0,0,0,114,187,0,0,0,114,3,0,0,0,114,
+ 3,0,0,0,114,6,0,0,0,114,137,0,0,0,141,5,
+ 0,0,115,8,0,0,0,0,7,10,1,8,1,8,1,122,
+ 22,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,
+ 95,108,111,97,100,101,114,99,6,0,0,0,0,0,0,0,
+ 0,0,0,0,7,0,0,0,6,0,0,0,67,0,0,0,
+ 115,26,0,0,0,124,1,124,2,124,3,131,2,125,6,116,
+ 0,124,2,124,3,124,6,124,4,100,1,141,4,83,0,41,
+ 2,78,114,177,0,0,0,41,1,114,190,0,0,0,41,7,
+ 114,118,0,0,0,114,188,0,0,0,114,139,0,0,0,114,
+ 43,0,0,0,90,4,115,109,115,108,114,202,0,0,0,114,
+ 140,0,0,0,114,3,0,0,0,114,3,0,0,0,114,6,
+ 0,0,0,114,58,1,0,0,153,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,96,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,22,4,0,116,6,121,64,
+ 1,0,1,0,1,0,100,4,125,5,89,0,110,2,48,0,
+ 124,5,124,0,106,7,107,3,114,90,124,0,160,8,161,0,
+ 1,0,124,5,124,0,95,7,116,9,131,0,114,112,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,118,0,114,216,
+ 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,148,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,148,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,118,0,114,222,
+ 116,15,124,12,131,1,114,222,124,0,160,16,124,10,124,1,
+ 124,12,100,8,124,2,161,5,2,0,1,0,83,0,113,222,
+ 124,3,144,1,114,92,116,18,160,19,100,9,124,8,161,2,
+ 1,0,116,18,160,20,124,1,100,8,161,2,125,13,124,8,
+ 103,1,124,13,95,21,124,13,83,0,100,8,83,0,41,10,
+ 122,111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,
+ 115,112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,
+ 99,105,102,105,101,100,32,109,111,100,117,108,101,46,10,10,
+ 32,32,32,32,32,32,32,32,82,101,116,117,114,110,115,32,
+ 116,104,101,32,109,97,116,99,104,105,110,103,32,115,112,101,
+ 99,44,32,111,114,32,78,111,110,101,32,105,102,32,110,111,
+ 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,
+ 32,70,114,70,0,0,0,114,27,0,0,0,114,104,0,0,
+ 0,114,209,0,0,0,122,9,116,114,121,105,110,103,32,123,
+ 125,41,1,90,9,118,101,114,98,111,115,105,116,121,78,122,
+ 25,112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,
+ 97,99,101,32,102,111,114,32,123,125,41,22,114,40,0,0,
+ 0,114,48,0,0,0,114,43,0,0,0,114,2,0,0,0,
+ 114,54,0,0,0,114,10,1,0,0,114,49,0,0,0,114,
+ 64,1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,
+ 101,114,7,0,0,0,114,67,1,0,0,114,105,0,0,0,
+ 114,66,1,0,0,114,37,0,0,0,114,63,1,0,0,114,
+ 53,0,0,0,114,58,1,0,0,114,55,0,0,0,114,134,
+ 0,0,0,114,149,0,0,0,114,183,0,0,0,114,178,0,
+ 0,0,41,14,114,118,0,0,0,114,139,0,0,0,114,202,
+ 0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,99,
+ 101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,169,
+ 0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,104,
+ 101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,112,
+ 97,116,104,114,17,1,0,0,114,188,0,0,0,90,13,105,
+ 110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,117,
+ 108,108,95,112,97,116,104,114,187,0,0,0,114,3,0,0,
+ 0,114,3,0,0,0,114,6,0,0,0,114,203,0,0,0,
+ 158,5,0,0,115,74,0,0,0,0,5,4,1,14,1,2,
+ 1,24,1,12,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,188,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,28,4,0,116,4,116,5,116,6,102,3,121,
+ 56,1,0,1,0,1,0,103,0,125,2,89,0,110,2,48,
+ 0,116,7,106,8,160,9,100,1,161,1,115,82,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,134,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,92,124,3,124,
+ 0,95,11,116,7,106,8,160,9,116,16,161,1,114,184,100,
+ 4,100,5,132,0,124,2,68,0,131,1,124,0,95,17,100,
+ 6,83,0,41,7,122,68,70,105,108,108,32,116,104,101,32,
+ 99,97,99,104,101,32,111,102,32,112,111,116,101,110,116,105,
+ 97,108,32,109,111,100,117,108,101,115,32,97,110,100,32,112,
+ 97,99,107,97,103,101,115,32,102,111,114,32,116,104,105,115,
+ 32,100,105,114,101,99,116,111,114,121,46,114,0,0,0,0,
+ 114,70,0,0,0,114,60,0,0,0,99,1,0,0,0,0,
+ 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,83,
+ 0,0,0,115,20,0,0,0,104,0,124,0,93,12,125,1,
+ 124,1,160,0,161,0,146,2,113,4,83,0,114,3,0,0,
+ 0,41,1,114,105,0,0,0,41,2,114,31,0,0,0,90,
+ 2,102,110,114,3,0,0,0,114,3,0,0,0,114,6,0,
+ 0,0,218,9,60,115,101,116,99,111,109,112,62,235,5,0,
+ 0,115,4,0,0,0,6,0,2,0,122,41,70,105,108,101,
+ 70,105,110,100,101,114,46,95,102,105,108,108,95,99,97,99,
+ 104,101,46,60,108,111,99,97,108,115,62,46,60,115,101,116,
+ 99,111,109,112,62,78,41,18,114,43,0,0,0,114,2,0,
+ 0,0,114,7,1,0,0,114,54,0,0,0,114,3,1,0,
+ 0,218,15,80,101,114,109,105,115,115,105,111,110,69,114,114,
+ 111,114,218,18,78,111,116,65,68,105,114,101,99,116,111,114,
+ 121,69,114,114,111,114,114,8,0,0,0,114,9,0,0,0,
+ 114,10,0,0,0,114,65,1,0,0,114,66,1,0,0,114,
+ 100,0,0,0,114,61,0,0,0,114,105,0,0,0,218,3,
+ 97,100,100,114,11,0,0,0,114,67,1,0,0,41,9,114,
+ 118,0,0,0,114,43,0,0,0,114,8,1,0,0,90,21,
+ 108,111,119,101,114,95,115,117,102,102,105,120,95,99,111,110,
+ 116,101,110,116,115,114,41,1,0,0,114,116,0,0,0,114,
+ 29,1,0,0,114,17,1,0,0,90,8,110,101,119,95,110,
+ 97,109,101,114,3,0,0,0,114,3,0,0,0,114,6,0,
+ 0,0,114,69,1,0,0,206,5,0,0,115,34,0,0,0,
+ 0,2,6,1,2,1,22,1,18,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,36,
+ 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,103,1,136,1,162,
+ 1,82,0,142,0,83,0,41,3,122,45,80,97,116,104,32,
+ 104,111,111,107,32,102,111,114,32,105,109,112,111,114,116,108,
+ 105,98,46,109,97,99,104,105,110,101,114,121,46,70,105,108,
+ 101,70,105,110,100,101,114,46,122,30,111,110,108,121,32,100,
+ 105,114,101,99,116,111,114,105,101,115,32,97,114,101,32,115,
+ 117,112,112,111,114,116,101,100,114,47,0,0,0,41,2,114,
+ 55,0,0,0,114,117,0,0,0,114,47,0,0,0,169,2,
+ 114,193,0,0,0,114,68,1,0,0,114,3,0,0,0,114,
+ 6,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95,
+ 102,111,114,95,70,105,108,101,70,105,110,100,101,114,247,5,
+ 0,0,115,6,0,0,0,0,2,8,1,12,1,122,54,70,
+ 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,
+ 111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,
+ 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,
+ 105,110,100,101,114,114,3,0,0,0,41,3,114,193,0,0,
+ 0,114,68,1,0,0,114,75,1,0,0,114,3,0,0,0,
+ 114,74,1,0,0,114,6,0,0,0,218,9,112,97,116,104,
+ 95,104,111,111,107,237,5,0,0,115,4,0,0,0,0,10,
+ 14,6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,
+ 97,116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,
+ 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,
+ 0,115,12,0,0,0,100,1,160,0,124,0,106,1,161,1,
+ 83,0,41,2,78,122,16,70,105,108,101,70,105,110,100,101,
+ 114,40,123,33,114,125,41,41,2,114,61,0,0,0,114,43,
+ 0,0,0,114,246,0,0,0,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,114,39,1,0,0,255,5,0,0,
+ 115,2,0,0,0,0,1,122,19,70,105,108,101,70,105,110,
+ 100,101,114,46,95,95,114,101,112,114,95,95,41,1,78,41,
+ 15,114,125,0,0,0,114,124,0,0,0,114,126,0,0,0,
+ 114,127,0,0,0,114,209,0,0,0,114,46,1,0,0,114,
+ 143,0,0,0,114,206,0,0,0,114,137,0,0,0,114,58,
+ 1,0,0,114,203,0,0,0,114,69,1,0,0,114,207,0,
+ 0,0,114,76,1,0,0,114,39,1,0,0,114,3,0,0,
0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,101,
- 1,6,0,0,115,34,0,0,0,0,2,10,1,10,1,4,
- 1,4,1,8,1,8,1,12,2,10,1,4,1,14,1,2,
- 1,8,1,8,1,8,1,12,1,14,2,114,81,1,0,0,
- 99,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,
- 0,3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,
- 116,1,160,2,161,0,102,2,125,0,116,3,116,4,102,2,
- 125,1,116,5,116,6,102,2,125,2,124,0,124,1,124,2,
- 103,3,83,0,41,1,122,95,82,101,116,117,114,110,115,32,
- 97,32,108,105,115,116,32,111,102,32,102,105,108,101,45,98,
- 97,115,101,100,32,109,111,100,117,108,101,32,108,111,97,100,
- 101,114,115,46,10,10,32,32,32,32,69,97,99,104,32,105,
- 116,101,109,32,105,115,32,97,32,116,117,112,108,101,32,40,
- 108,111,97,100,101,114,44,32,115,117,102,102,105,120,101,115,
- 41,46,10,32,32,32,32,41,7,114,252,0,0,0,114,163,
- 0,0,0,218,18,101,120,116,101,110,115,105,111,110,95,115,
- 117,102,102,105,120,101,115,114,9,1,0,0,114,101,0,0,
- 0,114,15,1,0,0,114,88,0,0,0,41,3,90,10,101,
- 120,116,101,110,115,105,111,110,115,90,6,115,111,117,114,99,
- 101,90,8,98,121,116,101,99,111,100,101,114,3,0,0,0,
- 114,3,0,0,0,114,6,0,0,0,114,184,0,0,0,24,
- 6,0,0,115,8,0,0,0,0,5,12,1,8,1,8,1,
- 114,184,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
- 0,0,12,0,0,0,9,0,0,0,67,0,0,0,115,178,
- 1,0,0,124,0,97,0,116,0,106,1,97,1,116,0,106,
- 2,97,2,116,1,106,3,116,4,25,0,125,1,100,1,68,
- 0,93,48,125,2,124,2,116,1,106,3,107,7,114,56,116,
- 0,160,5,124,2,161,1,125,3,110,10,116,1,106,3,124,
- 2,25,0,125,3,116,6,124,1,124,2,124,3,131,3,1,
- 0,113,30,100,2,100,3,103,1,102,2,100,4,100,5,100,
- 3,103,2,102,2,102,2,125,4,124,4,68,0,93,110,92,
- 2,125,5,125,6,116,7,100,6,100,7,132,0,124,6,68,
- 0,131,1,131,1,115,136,74,0,130,1,124,6,100,8,25,
- 0,125,7,124,5,116,1,106,3,107,6,114,170,116,1,106,
- 3,124,5,25,0,125,8,1,0,113,226,113,106,122,20,116,
- 0,160,5,124,5,161,1,125,8,87,0,1,0,113,226,87,
- 0,113,106,4,0,116,8,107,10,114,214,1,0,1,0,1,
- 0,89,0,113,106,89,0,113,106,48,0,113,106,116,8,100,
- 9,131,1,130,1,116,6,124,1,100,10,124,8,131,3,1,
- 0,116,6,124,1,100,11,124,7,131,3,1,0,116,6,124,
- 1,100,12,100,13,160,9,124,6,161,1,131,3,1,0,116,
- 6,124,1,100,14,100,15,100,16,132,0,124,6,68,0,131,
- 1,131,3,1,0,116,0,160,5,100,17,161,1,125,9,116,
- 6,124,1,100,17,124,9,131,3,1,0,116,0,160,5,100,
- 18,161,1,125,10,116,6,124,1,100,18,124,10,131,3,1,
- 0,124,5,100,4,107,2,144,1,114,110,116,0,160,5,100,
- 19,161,1,125,11,116,6,124,1,100,20,124,11,131,3,1,
- 0,116,6,124,1,100,21,116,10,131,0,131,3,1,0,116,
- 11,160,12,116,2,160,13,161,0,161,1,1,0,124,5,100,
- 4,107,2,144,1,114,174,116,14,160,15,100,22,161,1,1,
- 0,100,23,116,11,107,6,144,1,114,174,100,24,116,16,95,
- 17,100,25,83,0,41,26,122,205,83,101,116,117,112,32,116,
- 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109,
- 112,111,114,116,101,114,115,32,102,111,114,32,105,109,112,111,
- 114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,
- 110,103,32,110,101,101,100,101,100,10,32,32,32,32,98,117,
- 105,108,116,45,105,110,32,109,111,100,117,108,101,115,32,97,
- 110,100,32,105,110,106,101,99,116,105,110,103,32,116,104,101,
- 109,32,105,110,116,111,32,116,104,101,32,103,108,111,98,97,
- 108,32,110,97,109,101,115,112,97,99,101,46,10,10,32,32,
- 32,32,79,116,104,101,114,32,99,111,109,112,111,110,101,110,
- 116,115,32,97,114,101,32,101,120,116,114,97,99,116,101,100,
- 32,102,114,111,109,32,116,104,101,32,99,111,114,101,32,98,
- 111,111,116,115,116,114,97,112,32,109,111,100,117,108,101,46,
- 10,10,32,32,32,32,41,4,114,63,0,0,0,114,74,0,
- 0,0,218,8,98,117,105,108,116,105,110,115,114,160,0,0,
- 0,90,5,112,111,115,105,120,250,1,47,90,2,110,116,250,
- 1,92,99,1,0,0,0,0,0,0,0,0,0,0,0,2,
- 0,0,0,3,0,0,0,115,0,0,0,115,26,0,0,0,
- 124,0,93,18,125,1,116,0,124,1,131,1,100,0,107,2,
- 86,0,1,0,113,2,100,1,83,0,41,2,114,38,0,0,
- 0,78,41,1,114,22,0,0,0,41,2,114,31,0,0,0,
- 114,94,0,0,0,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,114,19,1,0,0,60,6,0,0,115,4,0,
- 0,0,4,0,2,0,122,25,95,115,101,116,117,112,46,60,
- 108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,
- 62,114,72,0,0,0,122,30,105,109,112,111,114,116,108,105,
- 98,32,114,101,113,117,105,114,101,115,32,112,111,115,105,120,
- 32,111,114,32,110,116,114,2,0,0,0,114,34,0,0,0,
- 114,30,0,0,0,114,39,0,0,0,114,57,0,0,0,99,
- 1,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
- 4,0,0,0,83,0,0,0,115,22,0,0,0,104,0,124,
- 0,93,14,125,1,100,0,124,1,155,0,157,2,146,2,113,
- 4,83,0,41,1,114,73,0,0,0,114,3,0,0,0,41,
- 2,114,31,0,0,0,218,1,115,114,3,0,0,0,114,3,
- 0,0,0,114,6,0,0,0,114,70,1,0,0,76,6,0,
- 0,115,4,0,0,0,6,0,2,0,122,25,95,115,101,116,
- 117,112,46,60,108,111,99,97,108,115,62,46,60,115,101,116,
- 99,111,109,112,62,90,7,95,116,104,114,101,97,100,90,8,
- 95,119,101,97,107,114,101,102,90,6,119,105,110,114,101,103,
- 114,192,0,0,0,114,7,0,0,0,122,4,46,112,121,119,
- 122,6,95,100,46,112,121,100,84,78,41,18,114,134,0,0,
- 0,114,8,0,0,0,114,163,0,0,0,114,31,1,0,0,
- 114,125,0,0,0,90,18,95,98,117,105,108,116,105,110,95,
- 102,114,111,109,95,110,97,109,101,114,129,0,0,0,218,3,
- 97,108,108,114,117,0,0,0,114,35,0,0,0,114,13,0,
- 0,0,114,21,1,0,0,114,167,0,0,0,114,82,1,0,
- 0,114,101,0,0,0,114,186,0,0,0,114,191,0,0,0,
- 114,195,0,0,0,41,12,218,17,95,98,111,111,116,115,116,
- 114,97,112,95,109,111,100,117,108,101,90,11,115,101,108,102,
- 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110,
- 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109,
- 111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108,
- 115,90,10,98,117,105,108,116,105,110,95,111,115,114,30,0,
- 0,0,114,34,0,0,0,90,9,111,115,95,109,111,100,117,
- 108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108,
- 101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108,
- 101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101,
- 114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,218,
- 6,95,115,101,116,117,112,35,6,0,0,115,78,0,0,0,
- 0,8,4,1,6,1,6,3,10,1,8,1,10,1,12,2,
- 10,1,14,3,22,1,12,2,22,1,8,1,10,1,10,1,
- 6,2,2,1,10,1,10,1,14,1,12,2,8,1,12,1,
- 12,1,18,1,22,3,10,1,12,3,10,1,12,3,10,1,
- 10,1,12,3,14,1,14,1,10,1,10,1,10,1,114,89,
- 1,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 2,0,0,0,4,0,0,0,67,0,0,0,115,50,0,0,
- 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116,
- 2,106,3,160,4,116,5,106,6,124,1,142,0,103,1,161,
- 1,1,0,116,2,106,7,160,8,116,9,161,1,1,0,100,
- 1,83,0,41,2,122,41,73,110,115,116,97,108,108,32,116,
- 104,101,32,112,97,116,104,45,98,97,115,101,100,32,105,109,
- 112,111,114,116,32,99,111,109,112,111,110,101,110,116,115,46,
- 78,41,10,114,89,1,0,0,114,184,0,0,0,114,8,0,
- 0,0,114,51,1,0,0,114,167,0,0,0,114,61,1,0,
- 0,114,76,1,0,0,218,9,109,101,116,97,95,112,97,116,
- 104,114,186,0,0,0,114,45,1,0,0,41,2,114,88,1,
- 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111,
- 97,100,101,114,115,114,3,0,0,0,114,3,0,0,0,114,
- 6,0,0,0,218,8,95,105,110,115,116,97,108,108,100,6,
- 0,0,115,8,0,0,0,0,2,8,1,6,1,20,1,114,
- 91,1,0,0,41,1,114,59,0,0,0,41,1,78,41,3,
- 78,78,78,41,2,114,72,0,0,0,114,72,0,0,0,41,
- 1,84,41,1,78,41,1,78,41,63,114,127,0,0,0,114,
- 12,0,0,0,90,37,95,67,65,83,69,95,73,78,83,69,
- 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,
- 83,95,66,89,84,69,83,95,75,69,89,114,11,0,0,0,
- 114,13,0,0,0,114,20,0,0,0,114,26,0,0,0,114,
- 28,0,0,0,114,37,0,0,0,114,46,0,0,0,114,48,
- 0,0,0,114,52,0,0,0,114,53,0,0,0,114,55,0,
- 0,0,114,58,0,0,0,114,68,0,0,0,218,4,116,121,
- 112,101,218,8,95,95,99,111,100,101,95,95,114,162,0,0,
- 0,114,18,0,0,0,114,148,0,0,0,114,17,0,0,0,
- 114,23,0,0,0,114,236,0,0,0,114,91,0,0,0,114,
- 87,0,0,0,114,101,0,0,0,114,88,0,0,0,90,23,
- 68,69,66,85,71,95,66,89,84,69,67,79,68,69,95,83,
- 85,70,70,73,88,69,83,90,27,79,80,84,73,77,73,90,
- 69,68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,
- 73,88,69,83,114,97,0,0,0,114,102,0,0,0,114,108,
- 0,0,0,114,112,0,0,0,114,114,0,0,0,114,136,0,
- 0,0,114,143,0,0,0,114,152,0,0,0,114,156,0,0,
- 0,114,158,0,0,0,114,165,0,0,0,114,170,0,0,0,
- 114,171,0,0,0,114,176,0,0,0,218,6,111,98,106,101,
- 99,116,114,185,0,0,0,114,190,0,0,0,114,191,0,0,
- 0,114,208,0,0,0,114,221,0,0,0,114,239,0,0,0,
- 114,9,1,0,0,114,15,1,0,0,114,21,1,0,0,114,
- 252,0,0,0,114,22,1,0,0,114,43,1,0,0,114,45,
- 1,0,0,114,61,1,0,0,114,81,1,0,0,114,184,0,
- 0,0,114,89,1,0,0,114,91,1,0,0,114,3,0,0,
- 0,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
- 218,8,60,109,111,100,117,108,101,62,1,0,0,0,115,126,
- 0,0,0,4,22,4,1,4,1,2,1,2,255,4,4,8,
- 17,8,5,8,5,8,6,8,6,8,12,8,10,8,9,8,
- 5,8,7,8,9,10,22,10,127,0,16,16,1,12,2,4,
- 1,4,2,6,2,6,2,8,2,16,71,8,40,8,19,8,
- 12,8,12,8,28,8,17,8,33,8,28,8,24,10,13,10,
- 10,10,11,8,14,6,3,4,1,2,255,12,68,14,64,14,
- 29,16,127,0,17,14,72,18,45,18,26,4,3,18,53,14,
- 63,14,42,14,127,0,20,14,127,0,22,10,23,8,11,8,
- 65,
+ 114,61,1,0,0,112,5,0,0,115,22,0,0,0,8,2,
+ 4,7,8,14,8,4,4,2,8,12,8,5,10,48,8,31,
+ 2,1,10,17,114,61,1,0,0,99,4,0,0,0,0,0,
+ 0,0,0,0,0,0,6,0,0,0,8,0,0,0,67,0,
+ 0,0,115,144,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,
+ 18,4,0,116,5,121,138,1,0,1,0,1,0,89,0,110,
+ 2,48,0,100,0,83,0,41,6,78,218,10,95,95,108,111,
+ 97,100,101,114,95,95,218,8,95,95,115,112,101,99,95,95,
+ 114,62,1,0,0,90,8,95,95,102,105,108,101,95,95,90,
+ 10,95,95,99,97,99,104,101,100,95,95,41,6,218,3,103,
+ 101,116,114,140,0,0,0,114,15,1,0,0,114,9,1,0,
+ 0,114,190,0,0,0,218,9,69,120,99,101,112,116,105,111,
+ 110,41,6,90,2,110,115,114,116,0,0,0,90,8,112,97,
+ 116,104,110,97,109,101,90,9,99,112,97,116,104,110,97,109,
+ 101,114,140,0,0,0,114,187,0,0,0,114,3,0,0,0,
+ 114,3,0,0,0,114,6,0,0,0,218,14,95,102,105,120,
+ 95,117,112,95,109,111,100,117,108,101,5,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,12,2,114,81,1,0,0,99,0,0,0,0,0,
+ 0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,
+ 0,0,0,115,38,0,0,0,116,0,116,1,160,2,161,0,
+ 102,2,125,0,116,3,116,4,102,2,125,1,116,5,116,6,
+ 102,2,125,2,124,0,124,1,124,2,103,3,83,0,41,1,
+ 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116,
+ 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109,
+ 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10,
+ 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115,
+ 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114,
+ 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32,
+ 32,41,7,114,252,0,0,0,114,163,0,0,0,218,18,101,
+ 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101,
+ 115,114,9,1,0,0,114,101,0,0,0,114,15,1,0,0,
+ 114,88,0,0,0,41,3,90,10,101,120,116,101,110,115,105,
+ 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116,
+ 101,99,111,100,101,114,3,0,0,0,114,3,0,0,0,114,
+ 6,0,0,0,114,184,0,0,0,28,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,176,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,118,1,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,108,92,2,125,5,125,6,116,
+ 7,100,6,100,7,132,0,124,6,68,0,131,1,131,1,115,
+ 136,74,0,130,1,124,6,100,8,25,0,125,7,124,5,116,
+ 1,106,3,118,0,114,170,116,1,106,3,124,5,25,0,125,
+ 8,1,0,113,224,113,106,122,20,116,0,160,5,124,5,161,
+ 1,125,8,87,0,1,0,113,224,87,0,113,106,4,0,116,
+ 8,121,212,1,0,1,0,1,0,89,0,113,106,89,0,113,
+ 106,48,0,113,106,116,8,100,9,131,1,130,1,116,6,124,
+ 1,100,10,124,8,131,3,1,0,116,6,124,1,100,11,124,
+ 7,131,3,1,0,116,6,124,1,100,12,100,13,160,9,124,
+ 6,161,1,131,3,1,0,116,6,124,1,100,14,100,15,100,
+ 16,132,0,124,6,68,0,131,1,131,3,1,0,116,0,160,
+ 5,100,17,161,1,125,9,116,6,124,1,100,17,124,9,131,
+ 3,1,0,116,0,160,5,100,18,161,1,125,10,116,6,124,
+ 1,100,18,124,10,131,3,1,0,124,5,100,4,107,2,144,
+ 1,114,108,116,0,160,5,100,19,161,1,125,11,116,6,124,
+ 1,100,20,124,11,131,3,1,0,116,6,124,1,100,21,116,
+ 10,131,0,131,3,1,0,116,11,160,12,116,2,160,13,161,
+ 0,161,1,1,0,124,5,100,4,107,2,144,1,114,172,116,
+ 14,160,15,100,22,161,1,1,0,100,23,116,11,118,0,144,
+ 1,114,172,100,24,116,16,95,17,100,25,83,0,41,26,122,
+ 205,83,101,116,117,112,32,116,104,101,32,112,97,116,104,45,
+ 98,97,115,101,100,32,105,109,112,111,114,116,101,114,115,32,
+ 102,111,114,32,105,109,112,111,114,116,108,105,98,32,98,121,
+ 32,105,109,112,111,114,116,105,110,103,32,110,101,101,100,101,
+ 100,10,32,32,32,32,98,117,105,108,116,45,105,110,32,109,
+ 111,100,117,108,101,115,32,97,110,100,32,105,110,106,101,99,
+ 116,105,110,103,32,116,104,101,109,32,105,110,116,111,32,116,
+ 104,101,32,103,108,111,98,97,108,32,110,97,109,101,115,112,
+ 97,99,101,46,10,10,32,32,32,32,79,116,104,101,114,32,
+ 99,111,109,112,111,110,101,110,116,115,32,97,114,101,32,101,
+ 120,116,114,97,99,116,101,100,32,102,114,111,109,32,116,104,
+ 101,32,99,111,114,101,32,98,111,111,116,115,116,114,97,112,
+ 32,109,111,100,117,108,101,46,10,10,32,32,32,32,41,4,
+ 114,63,0,0,0,114,74,0,0,0,218,8,98,117,105,108,
+ 116,105,110,115,114,160,0,0,0,90,5,112,111,115,105,120,
+ 250,1,47,90,2,110,116,250,1,92,99,1,0,0,0,0,
+ 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115,
+ 0,0,0,115,26,0,0,0,124,0,93,18,125,1,116,0,
+ 124,1,131,1,100,0,107,2,86,0,1,0,113,2,100,1,
+ 83,0,41,2,114,38,0,0,0,78,41,1,114,22,0,0,
+ 0,41,2,114,31,0,0,0,114,94,0,0,0,114,3,0,
+ 0,0,114,3,0,0,0,114,6,0,0,0,114,19,1,0,
+ 0,64,6,0,0,115,4,0,0,0,4,0,2,0,122,25,
+ 95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,46,
+ 60,103,101,110,101,120,112,114,62,114,72,0,0,0,122,30,
+ 105,109,112,111,114,116,108,105,98,32,114,101,113,117,105,114,
+ 101,115,32,112,111,115,105,120,32,111,114,32,110,116,114,2,
+ 0,0,0,114,34,0,0,0,114,30,0,0,0,114,39,0,
+ 0,0,114,57,0,0,0,99,1,0,0,0,0,0,0,0,
+ 0,0,0,0,2,0,0,0,4,0,0,0,83,0,0,0,
+ 115,22,0,0,0,104,0,124,0,93,14,125,1,100,0,124,
+ 1,155,0,157,2,146,2,113,4,83,0,41,1,114,73,0,
+ 0,0,114,3,0,0,0,41,2,114,31,0,0,0,218,1,
+ 115,114,3,0,0,0,114,3,0,0,0,114,6,0,0,0,
+ 114,70,1,0,0,80,6,0,0,115,4,0,0,0,6,0,
+ 2,0,122,25,95,115,101,116,117,112,46,60,108,111,99,97,
+ 108,115,62,46,60,115,101,116,99,111,109,112,62,90,7,95,
+ 116,104,114,101,97,100,90,8,95,119,101,97,107,114,101,102,
+ 90,6,119,105,110,114,101,103,114,192,0,0,0,114,7,0,
+ 0,0,122,4,46,112,121,119,122,6,95,100,46,112,121,100,
+ 84,78,41,18,114,134,0,0,0,114,8,0,0,0,114,163,
+ 0,0,0,114,31,1,0,0,114,125,0,0,0,90,18,95,
+ 98,117,105,108,116,105,110,95,102,114,111,109,95,110,97,109,
+ 101,114,129,0,0,0,218,3,97,108,108,114,117,0,0,0,
+ 114,35,0,0,0,114,13,0,0,0,114,21,1,0,0,114,
+ 167,0,0,0,114,82,1,0,0,114,101,0,0,0,114,186,
+ 0,0,0,114,191,0,0,0,114,195,0,0,0,41,12,218,
+ 17,95,98,111,111,116,115,116,114,97,112,95,109,111,100,117,
+ 108,101,90,11,115,101,108,102,95,109,111,100,117,108,101,90,
+ 12,98,117,105,108,116,105,110,95,110,97,109,101,90,14,98,
+ 117,105,108,116,105,110,95,109,111,100,117,108,101,90,10,111,
+ 115,95,100,101,116,97,105,108,115,90,10,98,117,105,108,116,
+ 105,110,95,111,115,114,30,0,0,0,114,34,0,0,0,90,
+ 9,111,115,95,109,111,100,117,108,101,90,13,116,104,114,101,
+ 97,100,95,109,111,100,117,108,101,90,14,119,101,97,107,114,
+ 101,102,95,109,111,100,117,108,101,90,13,119,105,110,114,101,
+ 103,95,109,111,100,117,108,101,114,3,0,0,0,114,3,0,
+ 0,0,114,6,0,0,0,218,6,95,115,101,116,117,112,39,
+ 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,
+ 12,1,12,2,8,1,12,1,12,1,18,1,22,3,10,1,
+ 12,3,10,1,12,3,10,1,10,1,12,3,14,1,14,1,
+ 10,1,10,1,10,1,114,89,1,0,0,99,1,0,0,0,
+ 0,0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,
+ 67,0,0,0,115,50,0,0,0,116,0,124,0,131,1,1,
+ 0,116,1,131,0,125,1,116,2,106,3,160,4,116,5,106,
+ 6,124,1,142,0,103,1,161,1,1,0,116,2,106,7,160,
+ 8,116,9,161,1,1,0,100,1,83,0,41,2,122,41,73,
+ 110,115,116,97,108,108,32,116,104,101,32,112,97,116,104,45,
+ 98,97,115,101,100,32,105,109,112,111,114,116,32,99,111,109,
+ 112,111,110,101,110,116,115,46,78,41,10,114,89,1,0,0,
+ 114,184,0,0,0,114,8,0,0,0,114,51,1,0,0,114,
+ 167,0,0,0,114,61,1,0,0,114,76,1,0,0,218,9,
+ 109,101,116,97,95,112,97,116,104,114,186,0,0,0,114,45,
+ 1,0,0,41,2,114,88,1,0,0,90,17,115,117,112,112,
+ 111,114,116,101,100,95,108,111,97,100,101,114,115,114,3,0,
+ 0,0,114,3,0,0,0,114,6,0,0,0,218,8,95,105,
+ 110,115,116,97,108,108,104,6,0,0,115,8,0,0,0,0,
+ 2,8,1,6,1,20,1,114,91,1,0,0,41,1,114,59,
+ 0,0,0,41,1,78,41,3,78,78,78,41,2,114,72,0,
+ 0,0,114,72,0,0,0,41,1,84,41,1,78,41,1,78,
+ 41,63,114,127,0,0,0,114,12,0,0,0,90,37,95,67,
+ 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,
+ 80,76,65,84,70,79,82,77,83,95,66,89,84,69,83,95,
+ 75,69,89,114,11,0,0,0,114,13,0,0,0,114,20,0,
+ 0,0,114,26,0,0,0,114,28,0,0,0,114,37,0,0,
+ 0,114,46,0,0,0,114,48,0,0,0,114,52,0,0,0,
+ 114,53,0,0,0,114,55,0,0,0,114,58,0,0,0,114,
+ 68,0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,
+ 100,101,95,95,114,162,0,0,0,114,18,0,0,0,114,148,
+ 0,0,0,114,17,0,0,0,114,23,0,0,0,114,236,0,
+ 0,0,114,91,0,0,0,114,87,0,0,0,114,101,0,0,
+ 0,114,88,0,0,0,90,23,68,69,66,85,71,95,66,89,
+ 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,90,
+ 27,79,80,84,73,77,73,90,69,68,95,66,89,84,69,67,
+ 79,68,69,95,83,85,70,70,73,88,69,83,114,97,0,0,
+ 0,114,102,0,0,0,114,108,0,0,0,114,112,0,0,0,
+ 114,114,0,0,0,114,136,0,0,0,114,143,0,0,0,114,
+ 152,0,0,0,114,156,0,0,0,114,158,0,0,0,114,165,
+ 0,0,0,114,170,0,0,0,114,171,0,0,0,114,176,0,
+ 0,0,218,6,111,98,106,101,99,116,114,185,0,0,0,114,
+ 190,0,0,0,114,191,0,0,0,114,208,0,0,0,114,221,
+ 0,0,0,114,239,0,0,0,114,9,1,0,0,114,15,1,
+ 0,0,114,21,1,0,0,114,252,0,0,0,114,22,1,0,
+ 0,114,43,1,0,0,114,45,1,0,0,114,61,1,0,0,
+ 114,81,1,0,0,114,184,0,0,0,114,89,1,0,0,114,
+ 91,1,0,0,114,3,0,0,0,114,3,0,0,0,114,3,
+ 0,0,0,114,6,0,0,0,218,8,60,109,111,100,117,108,
+ 101,62,1,0,0,0,115,126,0,0,0,4,22,4,1,4,
+ 1,2,1,2,255,4,4,8,17,8,5,8,5,8,6,8,
+ 6,8,12,8,10,8,9,8,5,8,7,8,9,10,22,10,
+ 127,0,20,16,1,12,2,4,1,4,2,6,2,6,2,8,
+ 2,16,71,8,40,8,19,8,12,8,12,8,28,8,17,8,
+ 33,8,28,8,24,10,13,10,10,10,11,8,14,6,3,4,
+ 1,2,255,12,68,14,64,14,29,16,127,0,17,14,72,18,
+ 45,18,26,4,3,18,53,14,63,14,42,14,127,0,20,14,
+ 127,0,22,10,23,8,11,8,65,
};
diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h
index a05a7a3b945..199c4106280 100644
--- a/Python/importlib_zipimport.h
+++ b/Python/importlib_zipimport.h
@@ -117,863 +117,860 @@ const unsigned char _Py_M__zipimport[] = {
111,102,32,116,104,101,10,32,32,32,32,122,105,112,102,105,
108,101,32,116,97,114,103,101,116,101,100,46,10,32,32,32,
32,99,2,0,0,0,0,0,0,0,0,0,0,0,8,0,
- 0,0,9,0,0,0,67,0,0,0,115,36,1,0,0,116,
+ 0,0,9,0,0,0,67,0,0,0,115,32,1,0,0,116,
0,124,1,116,1,131,2,115,28,100,1,100,0,108,2,125,
2,124,2,160,3,124,1,161,1,125,1,124,1,115,44,116,
4,100,2,124,1,100,3,141,2,130,1,116,5,114,60,124,
1,160,6,116,5,116,7,161,2,125,1,103,0,125,3,122,
- 14,116,8,160,9,124,1,161,1,125,4,87,0,110,72,4,
- 0,116,10,116,11,102,2,107,10,114,150,1,0,1,0,1,
- 0,116,8,160,12,124,1,161,1,92,2,125,5,125,6,124,
- 5,124,1,107,2,114,132,116,4,100,4,124,1,100,3,141,
- 2,130,1,124,5,125,1,124,3,160,13,124,6,161,1,1,
- 0,89,0,113,64,48,0,124,4,106,14,100,5,64,0,100,
- 6,107,3,114,182,116,4,100,4,124,1,100,3,141,2,130,
- 1,113,182,113,64,122,12,116,15,124,1,25,0,125,7,87,
- 0,110,36,4,0,116,16,107,10,114,230,1,0,1,0,1,
- 0,116,17,124,1,131,1,125,7,124,7,116,15,124,1,60,
- 0,89,0,110,2,48,0,124,7,124,0,95,18,124,1,124,
- 0,95,19,116,8,106,20,124,3,100,0,100,0,100,7,133,
- 3,25,0,142,0,124,0,95,21,124,0,106,21,144,1,114,
- 32,124,0,4,0,106,21,116,7,55,0,2,0,95,21,100,
- 0,83,0,41,8,78,114,0,0,0,0,122,21,97,114,99,
- 104,105,118,101,32,112,97,116,104,32,105,115,32,101,109,112,
- 116,121,169,1,218,4,112,97,116,104,122,14,110,111,116,32,
- 97,32,90,105,112,32,102,105,108,101,105,0,240,0,0,105,
- 0,128,0,0,233,255,255,255,255,41,22,218,10,105,115,105,
- 110,115,116,97,110,99,101,218,3,115,116,114,218,2,111,115,
- 90,8,102,115,100,101,99,111,100,101,114,3,0,0,0,218,
- 12,97,108,116,95,112,97,116,104,95,115,101,112,218,7,114,
- 101,112,108,97,99,101,218,8,112,97,116,104,95,115,101,112,
- 218,19,95,98,111,111,116,115,116,114,97,112,95,101,120,116,
- 101,114,110,97,108,90,10,95,112,97,116,104,95,115,116,97,
- 116,218,7,79,83,69,114,114,111,114,218,10,86,97,108,117,
- 101,69,114,114,111,114,90,11,95,112,97,116,104,95,115,112,
- 108,105,116,218,6,97,112,112,101,110,100,90,7,115,116,95,
- 109,111,100,101,218,20,95,122,105,112,95,100,105,114,101,99,
- 116,111,114,121,95,99,97,99,104,101,218,8,75,101,121,69,
- 114,114,111,114,218,15,95,114,101,97,100,95,100,105,114,101,
- 99,116,111,114,121,218,6,95,102,105,108,101,115,218,7,97,
- 114,99,104,105,118,101,218,10,95,112,97,116,104,95,106,111,
- 105,110,218,6,112,114,101,102,105,120,41,8,218,4,115,101,
- 108,102,114,13,0,0,0,114,17,0,0,0,114,31,0,0,
- 0,90,2,115,116,90,7,100,105,114,110,97,109,101,90,8,
- 98,97,115,101,110,97,109,101,218,5,102,105,108,101,115,114,
- 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,
- 95,95,105,110,105,116,95,95,63,0,0,0,115,58,0,0,
- 0,0,1,10,1,8,1,10,1,4,1,12,1,4,1,12,
- 2,4,2,2,1,14,1,18,3,14,1,8,1,12,1,4,
- 1,16,3,14,2,12,1,4,2,2,1,12,1,14,1,8,
- 1,14,1,6,1,6,2,22,1,8,1,122,20,122,105,112,
- 105,109,112,111,114,116,101,114,46,95,95,105,110,105,116,95,
- 95,78,99,3,0,0,0,0,0,0,0,0,0,0,0,5,
- 0,0,0,4,0,0,0,67,0,0,0,115,78,0,0,0,
- 116,0,124,0,124,1,131,2,125,3,124,3,100,1,107,9,
- 114,26,124,0,103,0,102,2,83,0,116,1,124,0,124,1,
- 131,2,125,4,116,2,124,0,124,4,131,2,114,70,100,1,
- 124,0,106,3,155,0,116,4,155,0,124,4,155,0,157,3,
- 103,1,102,2,83,0,100,1,103,0,102,2,83,0,41,2,
- 97,239,1,0,0,102,105,110,100,95,108,111,97,100,101,114,
- 40,102,117,108,108,110,97,109,101,44,32,112,97,116,104,61,
- 78,111,110,101,41,32,45,62,32,115,101,108,102,44,32,115,
- 116,114,32,111,114,32,78,111,110,101,46,10,10,32,32,32,
- 32,32,32,32,32,83,101,97,114,99,104,32,102,111,114,32,
- 97,32,109,111,100,117,108,101,32,115,112,101,99,105,102,105,
- 101,100,32,98,121,32,39,102,117,108,108,110,97,109,101,39,
- 46,32,39,102,117,108,108,110,97,109,101,39,32,109,117,115,
- 116,32,98,101,32,116,104,101,10,32,32,32,32,32,32,32,
- 32,102,117,108,108,121,32,113,117,97,108,105,102,105,101,100,
- 32,40,100,111,116,116,101,100,41,32,109,111,100,117,108,101,
- 32,110,97,109,101,46,32,73,116,32,114,101,116,117,114,110,
- 115,32,116,104,101,32,122,105,112,105,109,112,111,114,116,101,
- 114,10,32,32,32,32,32,32,32,32,105,110,115,116,97,110,
- 99,101,32,105,116,115,101,108,102,32,105,102,32,116,104,101,
- 32,109,111,100,117,108,101,32,119,97,115,32,102,111,117,110,
- 100,44,32,97,32,115,116,114,105,110,103,32,99,111,110,116,
- 97,105,110,105,110,103,32,116,104,101,10,32,32,32,32,32,
- 32,32,32,102,117,108,108,32,112,97,116,104,32,110,97,109,
- 101,32,105,102,32,105,116,39,115,32,112,111,115,115,105,98,
- 108,121,32,97,32,112,111,114,116,105,111,110,32,111,102,32,
- 97,32,110,97,109,101,115,112,97,99,101,32,112,97,99,107,
- 97,103,101,44,10,32,32,32,32,32,32,32,32,111,114,32,
- 78,111,110,101,32,111,116,104,101,114,119,105,115,101,46,32,
- 84,104,101,32,111,112,116,105,111,110,97,108,32,39,112,97,
- 116,104,39,32,97,114,103,117,109,101,110,116,32,105,115,32,
- 105,103,110,111,114,101,100,32,45,45,32,105,116,39,115,10,
- 32,32,32,32,32,32,32,32,116,104,101,114,101,32,102,111,
- 114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,32,
- 119,105,116,104,32,116,104,101,32,105,109,112,111,114,116,101,
- 114,32,112,114,111,116,111,99,111,108,46,10,32,32,32,32,
- 32,32,32,32,78,41,5,218,16,95,103,101,116,95,109,111,
- 100,117,108,101,95,105,110,102,111,218,16,95,103,101,116,95,
- 109,111,100,117,108,101,95,112,97,116,104,218,7,95,105,115,
- 95,100,105,114,114,29,0,0,0,114,20,0,0,0,41,5,
- 114,32,0,0,0,218,8,102,117,108,108,110,97,109,101,114,
- 13,0,0,0,218,2,109,105,218,7,109,111,100,112,97,116,
- 104,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
- 218,11,102,105,110,100,95,108,111,97,100,101,114,109,0,0,
- 0,115,14,0,0,0,0,10,10,1,8,2,8,7,10,1,
- 10,4,24,2,122,23,122,105,112,105,109,112,111,114,116,101,
- 114,46,102,105,110,100,95,108,111,97,100,101,114,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,16,0,0,0,124,0,160,0,124,
- 1,124,2,161,2,100,1,25,0,83,0,41,2,97,139,1,
- 0,0,102,105,110,100,95,109,111,100,117,108,101,40,102,117,
- 108,108,110,97,109,101,44,32,112,97,116,104,61,78,111,110,
- 101,41,32,45,62,32,115,101,108,102,32,111,114,32,78,111,
- 110,101,46,10,10,32,32,32,32,32,32,32,32,83,101,97,
- 114,99,104,32,102,111,114,32,97,32,109,111,100,117,108,101,
- 32,115,112,101,99,105,102,105,101,100,32,98,121,32,39,102,
- 117,108,108,110,97,109,101,39,46,32,39,102,117,108,108,110,
- 97,109,101,39,32,109,117,115,116,32,98,101,32,116,104,101,
- 10,32,32,32,32,32,32,32,32,102,117,108,108,121,32,113,
- 117,97,108,105,102,105,101,100,32,40,100,111,116,116,101,100,
- 41,32,109,111,100,117,108,101,32,110,97,109,101,46,32,73,
- 116,32,114,101,116,117,114,110,115,32,116,104,101,32,122,105,
- 112,105,109,112,111,114,116,101,114,10,32,32,32,32,32,32,
- 32,32,105,110,115,116,97,110,99,101,32,105,116,115,101,108,
- 102,32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,
- 119,97,115,32,102,111,117,110,100,44,32,111,114,32,78,111,
- 110,101,32,105,102,32,105,116,32,119,97,115,110,39,116,46,
- 10,32,32,32,32,32,32,32,32,84,104,101,32,111,112,116,
- 105,111,110,97,108,32,39,112,97,116,104,39,32,97,114,103,
- 117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100,
- 32,45,45,32,105,116,39,115,32,116,104,101,114,101,32,102,
- 111,114,32,99,111,109,112,97,116,105,98,105,108,105,116,121,
- 10,32,32,32,32,32,32,32,32,119,105,116,104,32,116,104,
- 101,32,105,109,112,111,114,116,101,114,32,112,114,111,116,111,
- 99,111,108,46,10,32,32,32,32,32,32,32,32,114,0,0,
- 0,0,41,1,114,41,0,0,0,41,3,114,32,0,0,0,
- 114,38,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,102,105,110,100,95,
- 109,111,100,117,108,101,141,0,0,0,115,2,0,0,0,0,
- 9,122,23,122,105,112,105,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,5,0,0,0,3,0,0,0,67,
- 0,0,0,115,20,0,0,0,116,0,124,0,124,1,131,2,
- 92,3,125,2,125,3,125,4,124,2,83,0,41,1,122,163,
- 103,101,116,95,99,111,100,101,40,102,117,108,108,110,97,109,
- 101,41,32,45,62,32,99,111,100,101,32,111,98,106,101,99,
- 116,46,10,10,32,32,32,32,32,32,32,32,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,115,112,101,99,105,
- 102,105,101,100,32,109,111,100,117,108,101,46,32,82,97,105,
- 115,101,32,90,105,112,73,109,112,111,114,116,69,114,114,111,
- 114,10,32,32,32,32,32,32,32,32,105,102,32,116,104,101,
- 32,109,111,100,117,108,101,32,99,111,117,108,100,110,39,116,
- 32,98,101,32,102,111,117,110,100,46,10,32,32,32,32,32,
- 32,32,32,169,1,218,16,95,103,101,116,95,109,111,100,117,
- 108,101,95,99,111,100,101,169,5,114,32,0,0,0,114,38,
- 0,0,0,218,4,99,111,100,101,218,9,105,115,112,97,99,
- 107,97,103,101,114,40,0,0,0,114,9,0,0,0,114,9,
- 0,0,0,114,10,0,0,0,218,8,103,101,116,95,99,111,
- 100,101,153,0,0,0,115,4,0,0,0,0,6,16,1,122,
- 20,122,105,112,105,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,4,0,0,0,8,0,0,0,67,0,0,0,115,118,
- 0,0,0,116,0,114,16,124,1,160,1,116,0,116,2,161,
- 2,125,1,124,1,125,2,124,1,160,3,124,0,106,4,116,
- 2,23,0,161,1,114,58,124,1,116,5,124,0,106,4,116,
- 2,23,0,131,1,100,1,133,2,25,0,125,2,122,14,124,
- 0,106,6,124,2,25,0,125,3,87,0,110,32,4,0,116,
- 7,107,10,114,104,1,0,1,0,1,0,116,8,100,2,100,
- 3,124,2,131,3,130,1,89,0,110,2,48,0,116,9,124,
- 0,106,4,124,3,131,2,83,0,41,4,122,154,103,101,116,
- 95,100,97,116,97,40,112,97,116,104,110,97,109,101,41,32,
- 45,62,32,115,116,114,105,110,103,32,119,105,116,104,32,102,
- 105,108,101,32,100,97,116,97,46,10,10,32,32,32,32,32,
- 32,32,32,82,101,116,117,114,110,32,116,104,101,32,100,97,
- 116,97,32,97,115,115,111,99,105,97,116,101,100,32,119,105,
- 116,104,32,39,112,97,116,104,110,97,109,101,39,46,32,82,
- 97,105,115,101,32,79,83,69,114,114,111,114,32,105,102,10,
- 32,32,32,32,32,32,32,32,116,104,101,32,102,105,108,101,
- 32,119,97,115,110,39,116,32,102,111,117,110,100,46,10,32,
- 32,32,32,32,32,32,32,78,114,0,0,0,0,218,0,41,
- 10,114,18,0,0,0,114,19,0,0,0,114,20,0,0,0,
- 218,10,115,116,97,114,116,115,119,105,116,104,114,29,0,0,
- 0,218,3,108,101,110,114,28,0,0,0,114,26,0,0,0,
- 114,22,0,0,0,218,9,95,103,101,116,95,100,97,116,97,
- 41,4,114,32,0,0,0,218,8,112,97,116,104,110,97,109,
- 101,90,3,107,101,121,218,9,116,111,99,95,101,110,116,114,
- 121,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
- 218,8,103,101,116,95,100,97,116,97,163,0,0,0,115,20,
- 0,0,0,0,6,4,1,12,2,4,1,16,1,22,2,2,
- 1,14,1,14,1,18,1,122,20,122,105,112,105,109,112,111,
- 114,116,101,114,46,103,101,116,95,100,97,116,97,99,2,0,
- 0,0,0,0,0,0,0,0,0,0,5,0,0,0,3,0,
- 0,0,67,0,0,0,115,20,0,0,0,116,0,124,0,124,
- 1,131,2,92,3,125,2,125,3,125,4,124,4,83,0,41,
- 1,122,106,103,101,116,95,102,105,108,101,110,97,109,101,40,
- 102,117,108,108,110,97,109,101,41,32,45,62,32,102,105,108,
- 101,110,97,109,101,32,115,116,114,105,110,103,46,10,10,32,
- 32,32,32,32,32,32,32,82,101,116,117,114,110,32,116,104,
- 101,32,102,105,108,101,110,97,109,101,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,32,32,32,32,32,32,32,32,114,43,0,
- 0,0,114,45,0,0,0,114,9,0,0,0,114,9,0,0,
- 0,114,10,0,0,0,218,12,103,101,116,95,102,105,108,101,
- 110,97,109,101,184,0,0,0,115,4,0,0,0,0,7,16,
- 1,122,24,122,105,112,105,109,112,111,114,116,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,6,0,0,0,8,0,0,0,
- 67,0,0,0,115,128,0,0,0,116,0,124,0,124,1,131,
- 2,125,2,124,2,100,1,107,8,114,36,116,1,100,2,124,
- 1,155,2,157,2,124,1,100,3,141,2,130,1,116,2,124,
- 0,124,1,131,2,125,3,124,2,114,64,116,3,160,4,124,
- 3,100,4,161,2,125,4,110,10,124,3,155,0,100,5,157,
- 2,125,4,122,14,124,0,106,5,124,4,25,0,125,5,87,
- 0,110,22,4,0,116,6,107,10,114,110,1,0,1,0,1,
- 0,89,0,100,1,83,0,48,0,116,7,124,0,106,8,124,
- 5,131,2,160,9,161,0,83,0,41,6,122,253,103,101,116,
- 95,115,111,117,114,99,101,40,102,117,108,108,110,97,109,101,
- 41,32,45,62,32,115,111,117,114,99,101,32,115,116,114,105,
- 110,103,46,10,10,32,32,32,32,32,32,32,32,82,101,116,
- 117,114,110,32,116,104,101,32,115,111,117,114,99,101,32,99,
- 111,100,101,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,32,82,97,
- 105,115,101,32,90,105,112,73,109,112,111,114,116,69,114,114,
- 111,114,10,32,32,32,32,32,32,32,32,105,102,32,116,104,
- 101,32,109,111,100,117,108,101,32,99,111,117,108,100,110,39,
- 116,32,98,101,32,102,111,117,110,100,44,32,114,101,116,117,
- 114,110,32,78,111,110,101,32,105,102,32,116,104,101,32,97,
- 114,99,104,105,118,101,32,100,111,101,115,10,32,32,32,32,
- 32,32,32,32,99,111,110,116,97,105,110,32,116,104,101,32,
- 109,111,100,117,108,101,44,32,98,117,116,32,104,97,115,32,
- 110,111,32,115,111,117,114,99,101,32,102,111,114,32,105,116,
- 46,10,32,32,32,32,32,32,32,32,78,250,18,99,97,110,
- 39,116,32,102,105,110,100,32,109,111,100,117,108,101,32,169,
- 1,218,4,110,97,109,101,250,11,95,95,105,110,105,116,95,
- 95,46,112,121,250,3,46,112,121,41,10,114,35,0,0,0,
- 114,3,0,0,0,114,36,0,0,0,114,21,0,0,0,114,
- 30,0,0,0,114,28,0,0,0,114,26,0,0,0,114,52,
- 0,0,0,114,29,0,0,0,218,6,100,101,99,111,100,101,
- 41,6,114,32,0,0,0,114,38,0,0,0,114,39,0,0,
- 0,114,13,0,0,0,218,8,102,117,108,108,112,97,116,104,
- 114,54,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
- 10,0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,
- 195,0,0,0,115,24,0,0,0,0,7,10,1,8,1,18,
- 2,10,1,4,1,14,2,10,2,2,1,14,1,14,2,8,
- 1,122,22,122,105,112,105,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,
+ 14,116,8,160,9,124,1,161,1,125,4,87,0,110,70,4,
+ 0,116,10,116,11,102,2,121,148,1,0,1,0,1,0,116,
+ 8,160,12,124,1,161,1,92,2,125,5,125,6,124,5,124,
+ 1,107,2,114,130,116,4,100,4,124,1,100,3,141,2,130,
+ 1,124,5,125,1,124,3,160,13,124,6,161,1,1,0,89,
+ 0,113,64,48,0,124,4,106,14,100,5,64,0,100,6,107,
+ 3,114,180,116,4,100,4,124,1,100,3,141,2,130,1,113,
+ 180,113,64,122,12,116,15,124,1,25,0,125,7,87,0,110,
+ 34,4,0,116,16,121,226,1,0,1,0,1,0,116,17,124,
+ 1,131,1,125,7,124,7,116,15,124,1,60,0,89,0,110,
+ 2,48,0,124,7,124,0,95,18,124,1,124,0,95,19,116,
+ 8,106,20,124,3,100,0,100,0,100,7,133,3,25,0,142,
+ 0,124,0,95,21,124,0,106,21,144,1,114,28,124,0,4,
+ 0,106,21,116,7,55,0,2,0,95,21,100,0,83,0,41,
+ 8,78,114,0,0,0,0,122,21,97,114,99,104,105,118,101,
+ 32,112,97,116,104,32,105,115,32,101,109,112,116,121,169,1,
+ 218,4,112,97,116,104,122,14,110,111,116,32,97,32,90,105,
+ 112,32,102,105,108,101,105,0,240,0,0,105,0,128,0,0,
+ 233,255,255,255,255,41,22,218,10,105,115,105,110,115,116,97,
+ 110,99,101,218,3,115,116,114,218,2,111,115,90,8,102,115,
+ 100,101,99,111,100,101,114,3,0,0,0,218,12,97,108,116,
+ 95,112,97,116,104,95,115,101,112,218,7,114,101,112,108,97,
+ 99,101,218,8,112,97,116,104,95,115,101,112,218,19,95,98,
+ 111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,
+ 108,90,10,95,112,97,116,104,95,115,116,97,116,218,7,79,
+ 83,69,114,114,111,114,218,10,86,97,108,117,101,69,114,114,
+ 111,114,90,11,95,112,97,116,104,95,115,112,108,105,116,218,
+ 6,97,112,112,101,110,100,90,7,115,116,95,109,111,100,101,
+ 218,20,95,122,105,112,95,100,105,114,101,99,116,111,114,121,
+ 95,99,97,99,104,101,218,8,75,101,121,69,114,114,111,114,
+ 218,15,95,114,101,97,100,95,100,105,114,101,99,116,111,114,
+ 121,218,6,95,102,105,108,101,115,218,7,97,114,99,104,105,
+ 118,101,218,10,95,112,97,116,104,95,106,111,105,110,218,6,
+ 112,114,101,102,105,120,41,8,218,4,115,101,108,102,114,13,
+ 0,0,0,114,17,0,0,0,114,31,0,0,0,90,2,115,
+ 116,90,7,100,105,114,110,97,109,101,90,8,98,97,115,101,
+ 110,97,109,101,218,5,102,105,108,101,115,114,9,0,0,0,
+ 114,9,0,0,0,114,10,0,0,0,218,8,95,95,105,110,
+ 105,116,95,95,63,0,0,0,115,58,0,0,0,0,1,10,
+ 1,8,1,10,1,4,1,12,1,4,1,12,2,4,2,2,
+ 1,14,1,16,3,14,1,8,1,12,1,4,1,16,3,14,
+ 2,12,1,4,2,2,1,12,1,12,1,8,1,14,1,6,
+ 1,6,2,22,1,8,1,122,20,122,105,112,105,109,112,111,
+ 114,116,101,114,46,95,95,105,110,105,116,95,95,78,99,3,
+ 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,4,
+ 0,0,0,67,0,0,0,115,78,0,0,0,116,0,124,0,
+ 124,1,131,2,125,3,124,3,100,1,117,1,114,26,124,0,
+ 103,0,102,2,83,0,116,1,124,0,124,1,131,2,125,4,
+ 116,2,124,0,124,4,131,2,114,70,100,1,124,0,106,3,
+ 155,0,116,4,155,0,124,4,155,0,157,3,103,1,102,2,
+ 83,0,100,1,103,0,102,2,83,0,41,2,97,239,1,0,
+ 0,102,105,110,100,95,108,111,97,100,101,114,40,102,117,108,
+ 108,110,97,109,101,44,32,112,97,116,104,61,78,111,110,101,
+ 41,32,45,62,32,115,101,108,102,44,32,115,116,114,32,111,
+ 114,32,78,111,110,101,46,10,10,32,32,32,32,32,32,32,
+ 32,83,101,97,114,99,104,32,102,111,114,32,97,32,109,111,
+ 100,117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,
+ 121,32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,
+ 117,108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,
+ 32,116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,
+ 108,121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,
+ 116,116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,
+ 101,46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,
+ 101,32,122,105,112,105,109,112,111,114,116,101,114,10,32,32,
+ 32,32,32,32,32,32,105,110,115,116,97,110,99,101,32,105,
+ 116,115,101,108,102,32,105,102,32,116,104,101,32,109,111,100,
+ 117,108,101,32,119,97,115,32,102,111,117,110,100,44,32,97,
+ 32,115,116,114,105,110,103,32,99,111,110,116,97,105,110,105,
+ 110,103,32,116,104,101,10,32,32,32,32,32,32,32,32,102,
+ 117,108,108,32,112,97,116,104,32,110,97,109,101,32,105,102,
+ 32,105,116,39,115,32,112,111,115,115,105,98,108,121,32,97,
+ 32,112,111,114,116,105,111,110,32,111,102,32,97,32,110,97,
+ 109,101,115,112,97,99,101,32,112,97,99,107,97,103,101,44,
+ 10,32,32,32,32,32,32,32,32,111,114,32,78,111,110,101,
+ 32,111,116,104,101,114,119,105,115,101,46,32,84,104,101,32,
+ 111,112,116,105,111,110,97,108,32,39,112,97,116,104,39,32,
+ 97,114,103,117,109,101,110,116,32,105,115,32,105,103,110,111,
+ 114,101,100,32,45,45,32,105,116,39,115,10,32,32,32,32,
+ 32,32,32,32,116,104,101,114,101,32,102,111,114,32,99,111,
+ 109,112,97,116,105,98,105,108,105,116,121,32,119,105,116,104,
+ 32,116,104,101,32,105,109,112,111,114,116,101,114,32,112,114,
+ 111,116,111,99,111,108,46,10,32,32,32,32,32,32,32,32,
+ 78,41,5,218,16,95,103,101,116,95,109,111,100,117,108,101,
+ 95,105,110,102,111,218,16,95,103,101,116,95,109,111,100,117,
+ 108,101,95,112,97,116,104,218,7,95,105,115,95,100,105,114,
+ 114,29,0,0,0,114,20,0,0,0,41,5,114,32,0,0,
+ 0,218,8,102,117,108,108,110,97,109,101,114,13,0,0,0,
+ 218,2,109,105,218,7,109,111,100,112,97,116,104,114,9,0,
+ 0,0,114,9,0,0,0,114,10,0,0,0,218,11,102,105,
+ 110,100,95,108,111,97,100,101,114,109,0,0,0,115,14,0,
+ 0,0,0,10,10,1,8,2,8,7,10,1,10,4,24,2,
+ 122,23,122,105,112,105,109,112,111,114,116,101,114,46,102,105,
+ 110,100,95,108,111,97,100,101,114,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,40,0,0,0,116,0,124,0,124,1,131,2,125,
- 2,124,2,100,1,107,8,114,36,116,1,100,2,124,1,155,
- 2,157,2,124,1,100,3,141,2,130,1,124,2,83,0,41,
- 4,122,171,105,115,95,112,97,99,107,97,103,101,40,102,117,
- 108,108,110,97,109,101,41,32,45,62,32,98,111,111,108,46,
- 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110,
- 32,84,114,117,101,32,105,102,32,116,104,101,32,109,111,100,
- 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121,
- 32,102,117,108,108,110,97,109,101,32,105,115,32,97,32,112,
- 97,99,107,97,103,101,46,10,32,32,32,32,32,32,32,32,
- 82,97,105,115,101,32,90,105,112,73,109,112,111,114,116,69,
- 114,114,111,114,32,105,102,32,116,104,101,32,109,111,100,117,
- 108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,102,
- 111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,114,
- 57,0,0,0,114,58,0,0,0,41,2,114,35,0,0,0,
- 114,3,0,0,0,41,3,114,32,0,0,0,114,38,0,0,
- 0,114,39,0,0,0,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,218,10,105,115,95,112,97,99,107,97,103,
- 101,221,0,0,0,115,8,0,0,0,0,6,10,1,8,1,
- 18,1,122,22,122,105,112,105,109,112,111,114,116,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,8,0,0,0,8,0,0,0,67,
- 0,0,0,115,248,0,0,0,116,0,124,0,124,1,131,2,
- 92,3,125,2,125,3,125,4,116,1,106,2,160,3,124,1,
- 161,1,125,5,124,5,100,1,107,8,115,46,116,4,124,5,
- 116,5,131,2,115,64,116,5,124,1,131,1,125,5,124,5,
- 116,1,106,2,124,1,60,0,124,0,124,5,95,6,122,84,
- 124,3,114,108,116,7,124,0,124,1,131,2,125,6,116,8,
- 160,9,124,0,106,10,124,6,161,2,125,7,124,7,103,1,
- 124,5,95,11,116,12,124,5,100,2,131,2,115,124,116,13,
- 124,5,95,13,116,8,160,14,124,5,106,15,124,1,124,4,
- 161,3,1,0,116,16,124,2,124,5,106,15,131,2,1,0,
- 87,0,110,22,1,0,1,0,1,0,116,1,106,2,124,1,
- 61,0,130,0,89,0,110,2,48,0,122,14,116,1,106,2,
- 124,1,25,0,125,5,87,0,110,36,4,0,116,17,107,10,
- 114,228,1,0,1,0,1,0,116,18,100,3,124,1,155,2,
- 100,4,157,3,131,1,130,1,89,0,110,2,48,0,116,19,
- 160,20,100,5,124,1,124,4,161,3,1,0,124,5,83,0,
- 41,6,122,245,108,111,97,100,95,109,111,100,117,108,101,40,
- 102,117,108,108,110,97,109,101,41,32,45,62,32,109,111,100,
- 117,108,101,46,10,10,32,32,32,32,32,32,32,32,76,111,
- 97,100,32,116,104,101,32,109,111,100,117,108,101,32,115,112,
- 101,99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,
- 110,97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,
- 39,32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,
- 32,32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,
- 105,102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,
- 111,100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,
- 101,116,117,114,110,115,32,116,104,101,32,105,109,112,111,114,
- 116,101,100,10,32,32,32,32,32,32,32,32,109,111,100,117,
- 108,101,44,32,111,114,32,114,97,105,115,101,115,32,90,105,
- 112,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,
- 105,116,32,119,97,115,110,39,116,32,102,111,117,110,100,46,
- 10,32,32,32,32,32,32,32,32,78,218,12,95,95,98,117,
- 105,108,116,105,110,115,95,95,122,14,76,111,97,100,101,100,
- 32,109,111,100,117,108,101,32,122,25,32,110,111,116,32,102,
- 111,117,110,100,32,105,110,32,115,121,115,46,109,111,100,117,
- 108,101,115,122,30,105,109,112,111,114,116,32,123,125,32,35,
- 32,108,111,97,100,101,100,32,102,114,111,109,32,90,105,112,
- 32,123,125,41,21,114,44,0,0,0,218,3,115,121,115,218,
- 7,109,111,100,117,108,101,115,218,3,103,101,116,114,15,0,
- 0,0,218,12,95,109,111,100,117,108,101,95,116,121,112,101,
- 218,10,95,95,108,111,97,100,101,114,95,95,114,36,0,0,
- 0,114,21,0,0,0,114,30,0,0,0,114,29,0,0,0,
- 90,8,95,95,112,97,116,104,95,95,218,7,104,97,115,97,
- 116,116,114,114,66,0,0,0,90,14,95,102,105,120,95,117,
- 112,95,109,111,100,117,108,101,218,8,95,95,100,105,99,116,
- 95,95,218,4,101,120,101,99,114,26,0,0,0,218,11,73,
- 109,112,111,114,116,69,114,114,111,114,218,10,95,98,111,111,
- 116,115,116,114,97,112,218,16,95,118,101,114,98,111,115,101,
- 95,109,101,115,115,97,103,101,41,8,114,32,0,0,0,114,
- 38,0,0,0,114,46,0,0,0,114,47,0,0,0,114,40,
- 0,0,0,90,3,109,111,100,114,13,0,0,0,114,63,0,
- 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
- 0,218,11,108,111,97,100,95,109,111,100,117,108,101,234,0,
- 0,0,115,48,0,0,0,0,7,16,1,12,1,18,1,8,
- 1,10,1,6,2,2,1,4,3,10,1,14,1,8,2,10,
- 1,6,1,16,1,16,1,6,1,8,1,8,2,2,1,14,
- 1,14,1,22,1,14,1,122,23,122,105,112,105,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,3,0,0,
- 0,8,0,0,0,67,0,0,0,115,88,0,0,0,122,20,
- 124,0,160,0,124,1,161,1,115,18,87,0,100,1,83,0,
- 87,0,110,22,4,0,116,1,107,10,114,42,1,0,1,0,
- 1,0,89,0,100,1,83,0,48,0,116,2,106,3,115,78,
- 100,2,100,3,108,4,109,5,125,2,1,0,124,2,160,6,
- 116,2,161,1,1,0,100,4,116,2,95,3,116,2,124,0,
- 124,1,131,2,83,0,41,5,122,204,82,101,116,117,114,110,
- 32,116,104,101,32,82,101,115,111,117,114,99,101,82,101,97,
- 100,101,114,32,102,111,114,32,97,32,112,97,99,107,97,103,
- 101,32,105,110,32,97,32,122,105,112,32,102,105,108,101,46,
- 10,10,32,32,32,32,32,32,32,32,73,102,32,39,102,117,
- 108,108,110,97,109,101,39,32,105,115,32,97,32,112,97,99,
- 107,97,103,101,32,119,105,116,104,105,110,32,116,104,101,32,
- 122,105,112,32,102,105,108,101,44,32,114,101,116,117,114,110,
- 32,116,104,101,10,32,32,32,32,32,32,32,32,39,82,101,
- 115,111,117,114,99,101,82,101,97,100,101,114,39,32,111,98,
- 106,101,99,116,32,102,111,114,32,116,104,101,32,112,97,99,
- 107,97,103,101,46,32,32,79,116,104,101,114,119,105,115,101,
- 32,114,101,116,117,114,110,32,78,111,110,101,46,10,32,32,
- 32,32,32,32,32,32,78,114,0,0,0,0,41,1,218,14,
- 82,101,115,111,117,114,99,101,82,101,97,100,101,114,84,41,
- 7,114,65,0,0,0,114,3,0,0,0,218,24,95,90,105,
- 112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,82,
- 101,97,100,101,114,218,11,95,114,101,103,105,115,116,101,114,
- 101,100,90,13,105,109,112,111,114,116,108,105,98,46,97,98,
- 99,114,79,0,0,0,90,8,114,101,103,105,115,116,101,114,
- 41,3,114,32,0,0,0,114,38,0,0,0,114,79,0,0,
+ 0,0,115,16,0,0,0,124,0,160,0,124,1,124,2,161,
+ 2,100,1,25,0,83,0,41,2,97,139,1,0,0,102,105,
+ 110,100,95,109,111,100,117,108,101,40,102,117,108,108,110,97,
+ 109,101,44,32,112,97,116,104,61,78,111,110,101,41,32,45,
+ 62,32,115,101,108,102,32,111,114,32,78,111,110,101,46,10,
+ 10,32,32,32,32,32,32,32,32,83,101,97,114,99,104,32,
+ 102,111,114,32,97,32,109,111,100,117,108,101,32,115,112,101,
+ 99,105,102,105,101,100,32,98,121,32,39,102,117,108,108,110,
+ 97,109,101,39,46,32,39,102,117,108,108,110,97,109,101,39,
+ 32,109,117,115,116,32,98,101,32,116,104,101,10,32,32,32,
+ 32,32,32,32,32,102,117,108,108,121,32,113,117,97,108,105,
+ 102,105,101,100,32,40,100,111,116,116,101,100,41,32,109,111,
+ 100,117,108,101,32,110,97,109,101,46,32,73,116,32,114,101,
+ 116,117,114,110,115,32,116,104,101,32,122,105,112,105,109,112,
+ 111,114,116,101,114,10,32,32,32,32,32,32,32,32,105,110,
+ 115,116,97,110,99,101,32,105,116,115,101,108,102,32,105,102,
+ 32,116,104,101,32,109,111,100,117,108,101,32,119,97,115,32,
+ 102,111,117,110,100,44,32,111,114,32,78,111,110,101,32,105,
+ 102,32,105,116,32,119,97,115,110,39,116,46,10,32,32,32,
+ 32,32,32,32,32,84,104,101,32,111,112,116,105,111,110,97,
+ 108,32,39,112,97,116,104,39,32,97,114,103,117,109,101,110,
+ 116,32,105,115,32,105,103,110,111,114,101,100,32,45,45,32,
+ 105,116,39,115,32,116,104,101,114,101,32,102,111,114,32,99,
+ 111,109,112,97,116,105,98,105,108,105,116,121,10,32,32,32,
+ 32,32,32,32,32,119,105,116,104,32,116,104,101,32,105,109,
+ 112,111,114,116,101,114,32,112,114,111,116,111,99,111,108,46,
+ 10,32,32,32,32,32,32,32,32,114,0,0,0,0,41,1,
+ 114,41,0,0,0,41,3,114,32,0,0,0,114,38,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,102,105,110,100,95,109,111,100,117,
+ 108,101,141,0,0,0,115,2,0,0,0,0,9,122,23,122,
+ 105,112,105,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,5,0,0,0,3,0,0,0,67,0,0,0,115,
+ 20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,2,
+ 125,3,125,4,124,2,83,0,41,1,122,163,103,101,116,95,
+ 99,111,100,101,40,102,117,108,108,110,97,109,101,41,32,45,
+ 62,32,99,111,100,101,32,111,98,106,101,99,116,46,10,10,
+ 32,32,32,32,32,32,32,32,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,115,112,101,99,105,102,105,101,100,
+ 32,109,111,100,117,108,101,46,32,82,97,105,115,101,32,90,
+ 105,112,73,109,112,111,114,116,69,114,114,111,114,10,32,32,
+ 32,32,32,32,32,32,105,102,32,116,104,101,32,109,111,100,
+ 117,108,101,32,99,111,117,108,100,110,39,116,32,98,101,32,
+ 102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,169,
+ 1,218,16,95,103,101,116,95,109,111,100,117,108,101,95,99,
+ 111,100,101,169,5,114,32,0,0,0,114,38,0,0,0,218,
+ 4,99,111,100,101,218,9,105,115,112,97,99,107,97,103,101,
+ 114,40,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
+ 10,0,0,0,218,8,103,101,116,95,99,111,100,101,153,0,
+ 0,0,115,4,0,0,0,0,6,16,1,122,20,122,105,112,
+ 105,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,4,0,
+ 0,0,8,0,0,0,67,0,0,0,115,116,0,0,0,116,
+ 0,114,16,124,1,160,1,116,0,116,2,161,2,125,1,124,
+ 1,125,2,124,1,160,3,124,0,106,4,116,2,23,0,161,
+ 1,114,58,124,1,116,5,124,0,106,4,116,2,23,0,131,
+ 1,100,1,133,2,25,0,125,2,122,14,124,0,106,6,124,
+ 2,25,0,125,3,87,0,110,30,4,0,116,7,121,102,1,
+ 0,1,0,1,0,116,8,100,2,100,3,124,2,131,3,130,
+ 1,89,0,110,2,48,0,116,9,124,0,106,4,124,3,131,
+ 2,83,0,41,4,122,154,103,101,116,95,100,97,116,97,40,
+ 112,97,116,104,110,97,109,101,41,32,45,62,32,115,116,114,
+ 105,110,103,32,119,105,116,104,32,102,105,108,101,32,100,97,
+ 116,97,46,10,10,32,32,32,32,32,32,32,32,82,101,116,
+ 117,114,110,32,116,104,101,32,100,97,116,97,32,97,115,115,
+ 111,99,105,97,116,101,100,32,119,105,116,104,32,39,112,97,
+ 116,104,110,97,109,101,39,46,32,82,97,105,115,101,32,79,
+ 83,69,114,114,111,114,32,105,102,10,32,32,32,32,32,32,
+ 32,32,116,104,101,32,102,105,108,101,32,119,97,115,110,39,
+ 116,32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,
+ 32,78,114,0,0,0,0,218,0,41,10,114,18,0,0,0,
+ 114,19,0,0,0,114,20,0,0,0,218,10,115,116,97,114,
+ 116,115,119,105,116,104,114,29,0,0,0,218,3,108,101,110,
+ 114,28,0,0,0,114,26,0,0,0,114,22,0,0,0,218,
+ 9,95,103,101,116,95,100,97,116,97,41,4,114,32,0,0,
+ 0,218,8,112,97,116,104,110,97,109,101,90,3,107,101,121,
+ 218,9,116,111,99,95,101,110,116,114,121,114,9,0,0,0,
+ 114,9,0,0,0,114,10,0,0,0,218,8,103,101,116,95,
+ 100,97,116,97,163,0,0,0,115,20,0,0,0,0,6,4,
+ 1,12,2,4,1,16,1,22,2,2,1,14,1,12,1,18,
+ 1,122,20,122,105,112,105,109,112,111,114,116,101,114,46,103,
+ 101,116,95,100,97,116,97,99,2,0,0,0,0,0,0,0,
+ 0,0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,
+ 115,20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,
+ 2,125,3,125,4,124,4,83,0,41,1,122,106,103,101,116,
+ 95,102,105,108,101,110,97,109,101,40,102,117,108,108,110,97,
+ 109,101,41,32,45,62,32,102,105,108,101,110,97,109,101,32,
+ 115,116,114,105,110,103,46,10,10,32,32,32,32,32,32,32,
+ 32,82,101,116,117,114,110,32,116,104,101,32,102,105,108,101,
+ 110,97,109,101,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,32,
+ 32,32,32,32,32,32,32,114,43,0,0,0,114,45,0,0,
0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,
- 218,19,103,101,116,95,114,101,115,111,117,114,99,101,95,114,
- 101,97,100,101,114,16,1,0,0,115,20,0,0,0,0,6,
- 2,1,10,1,10,1,14,1,8,1,6,1,12,1,10,1,
- 6,1,122,31,122,105,112,105,109,112,111,114,116,101,114,46,
- 103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,
- 100,101,114,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,100,1,124,0,106,0,155,0,116,1,155,0,124,0,106,
- 2,155,0,100,2,157,5,83,0,41,3,78,122,21,60,122,
- 105,112,105,109,112,111,114,116,101,114,32,111,98,106,101,99,
- 116,32,34,122,2,34,62,41,3,114,29,0,0,0,114,20,
- 0,0,0,114,31,0,0,0,41,1,114,32,0,0,0,114,
- 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,8,
- 95,95,114,101,112,114,95,95,34,1,0,0,115,2,0,0,
- 0,0,1,122,20,122,105,112,105,109,112,111,114,116,101,114,
- 46,95,95,114,101,112,114,95,95,41,1,78,41,1,78,41,
- 15,114,6,0,0,0,114,7,0,0,0,114,8,0,0,0,
- 218,7,95,95,100,111,99,95,95,114,34,0,0,0,114,41,
- 0,0,0,114,42,0,0,0,114,48,0,0,0,114,55,0,
- 0,0,114,56,0,0,0,114,64,0,0,0,114,65,0,0,
- 0,114,78,0,0,0,114,82,0,0,0,114,83,0,0,0,
- 114,9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
- 10,0,0,0,114,4,0,0,0,45,0,0,0,115,24,0,
- 0,0,8,1,4,17,8,46,10,32,10,12,8,10,8,21,
- 8,11,8,26,8,13,8,38,8,18,122,12,95,95,105,110,
- 105,116,95,95,46,112,121,99,84,114,60,0,0,0,70,41,
- 3,122,4,46,112,121,99,84,70,41,3,114,61,0,0,0,
- 70,70,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,20,0,0,0,
- 124,0,106,0,124,1,160,1,100,1,161,1,100,2,25,0,
- 23,0,83,0,41,3,78,218,1,46,233,2,0,0,0,41,
- 2,114,31,0,0,0,218,10,114,112,97,114,116,105,116,105,
- 111,110,41,2,114,32,0,0,0,114,38,0,0,0,114,9,
- 0,0,0,114,9,0,0,0,114,10,0,0,0,114,36,0,
- 0,0,52,1,0,0,115,2,0,0,0,0,1,114,36,0,
- 0,0,99,2,0,0,0,0,0,0,0,0,0,0,0,3,
- 0,0,0,2,0,0,0,67,0,0,0,115,18,0,0,0,
- 124,1,116,0,23,0,125,2,124,2,124,0,106,1,107,6,
- 83,0,169,1,78,41,2,114,20,0,0,0,114,28,0,0,
- 0,41,3,114,32,0,0,0,114,13,0,0,0,90,7,100,
- 105,114,112,97,116,104,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,114,37,0,0,0,56,1,0,0,115,4,
- 0,0,0,0,4,8,2,114,37,0,0,0,99,2,0,0,
- 0,0,0,0,0,0,0,0,0,7,0,0,0,4,0,0,
- 0,67,0,0,0,115,56,0,0,0,116,0,124,0,124,1,
- 131,2,125,2,116,1,68,0,93,36,92,3,125,3,125,4,
- 125,5,124,2,124,3,23,0,125,6,124,6,124,0,106,2,
- 107,6,114,14,124,5,2,0,1,0,83,0,113,14,100,0,
- 83,0,114,88,0,0,0,41,3,114,36,0,0,0,218,16,
- 95,122,105,112,95,115,101,97,114,99,104,111,114,100,101,114,
- 114,28,0,0,0,41,7,114,32,0,0,0,114,38,0,0,
- 0,114,13,0,0,0,218,6,115,117,102,102,105,120,218,10,
- 105,115,98,121,116,101,99,111,100,101,114,47,0,0,0,114,
- 63,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
- 0,0,0,114,35,0,0,0,65,1,0,0,115,12,0,0,
- 0,0,1,10,1,14,1,8,1,10,1,10,1,114,35,0,
- 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,26,
- 0,0,0,9,0,0,0,67,0,0,0,115,18,5,0,0,
- 122,14,116,0,160,1,124,0,161,1,125,1,87,0,110,38,
- 4,0,116,2,107,10,114,52,1,0,1,0,1,0,116,3,
- 100,1,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
- 89,0,110,2,48,0,124,1,144,4,143,178,1,0,122,36,
- 124,1,160,4,116,5,11,0,100,3,161,2,1,0,124,1,
- 160,6,161,0,125,2,124,1,160,7,116,5,161,1,125,3,
- 87,0,110,38,4,0,116,2,107,10,114,136,1,0,1,0,
+ 218,12,103,101,116,95,102,105,108,101,110,97,109,101,184,0,
+ 0,0,115,4,0,0,0,0,7,16,1,122,24,122,105,112,
+ 105,109,112,111,114,116,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,6,0,0,0,8,0,0,0,67,0,0,0,115,126,
+ 0,0,0,116,0,124,0,124,1,131,2,125,2,124,2,100,
+ 1,117,0,114,36,116,1,100,2,124,1,155,2,157,2,124,
+ 1,100,3,141,2,130,1,116,2,124,0,124,1,131,2,125,
+ 3,124,2,114,64,116,3,160,4,124,3,100,4,161,2,125,
+ 4,110,10,124,3,155,0,100,5,157,2,125,4,122,14,124,
+ 0,106,5,124,4,25,0,125,5,87,0,110,20,4,0,116,
+ 6,121,108,1,0,1,0,1,0,89,0,100,1,83,0,48,
+ 0,116,7,124,0,106,8,124,5,131,2,160,9,161,0,83,
+ 0,41,6,122,253,103,101,116,95,115,111,117,114,99,101,40,
+ 102,117,108,108,110,97,109,101,41,32,45,62,32,115,111,117,
+ 114,99,101,32,115,116,114,105,110,103,46,10,10,32,32,32,
+ 32,32,32,32,32,82,101,116,117,114,110,32,116,104,101,32,
+ 115,111,117,114,99,101,32,99,111,100,101,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,32,82,97,105,115,101,32,90,105,112,73,
+ 109,112,111,114,116,69,114,114,111,114,10,32,32,32,32,32,
+ 32,32,32,105,102,32,116,104,101,32,109,111,100,117,108,101,
+ 32,99,111,117,108,100,110,39,116,32,98,101,32,102,111,117,
+ 110,100,44,32,114,101,116,117,114,110,32,78,111,110,101,32,
+ 105,102,32,116,104,101,32,97,114,99,104,105,118,101,32,100,
+ 111,101,115,10,32,32,32,32,32,32,32,32,99,111,110,116,
+ 97,105,110,32,116,104,101,32,109,111,100,117,108,101,44,32,
+ 98,117,116,32,104,97,115,32,110,111,32,115,111,117,114,99,
+ 101,32,102,111,114,32,105,116,46,10,32,32,32,32,32,32,
+ 32,32,78,250,18,99,97,110,39,116,32,102,105,110,100,32,
+ 109,111,100,117,108,101,32,169,1,218,4,110,97,109,101,250,
+ 11,95,95,105,110,105,116,95,95,46,112,121,250,3,46,112,
+ 121,41,10,114,35,0,0,0,114,3,0,0,0,114,36,0,
+ 0,0,114,21,0,0,0,114,30,0,0,0,114,28,0,0,
+ 0,114,26,0,0,0,114,52,0,0,0,114,29,0,0,0,
+ 218,6,100,101,99,111,100,101,41,6,114,32,0,0,0,114,
+ 38,0,0,0,114,39,0,0,0,114,13,0,0,0,218,8,
+ 102,117,108,108,112,97,116,104,114,54,0,0,0,114,9,0,
+ 0,0,114,9,0,0,0,114,10,0,0,0,218,10,103,101,
+ 116,95,115,111,117,114,99,101,195,0,0,0,115,24,0,0,
+ 0,0,7,10,1,8,1,18,2,10,1,4,1,14,2,10,
+ 2,2,1,14,1,12,2,8,1,122,22,122,105,112,105,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,3,0,
+ 0,0,4,0,0,0,67,0,0,0,115,40,0,0,0,116,
+ 0,124,0,124,1,131,2,125,2,124,2,100,1,117,0,114,
+ 36,116,1,100,2,124,1,155,2,157,2,124,1,100,3,141,
+ 2,130,1,124,2,83,0,41,4,122,171,105,115,95,112,97,
+ 99,107,97,103,101,40,102,117,108,108,110,97,109,101,41,32,
+ 45,62,32,98,111,111,108,46,10,10,32,32,32,32,32,32,
+ 32,32,82,101,116,117,114,110,32,84,114,117,101,32,105,102,
+ 32,116,104,101,32,109,111,100,117,108,101,32,115,112,101,99,
+ 105,102,105,101,100,32,98,121,32,102,117,108,108,110,97,109,
+ 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,10,
+ 32,32,32,32,32,32,32,32,82,97,105,115,101,32,90,105,
+ 112,73,109,112,111,114,116,69,114,114,111,114,32,105,102,32,
+ 116,104,101,32,109,111,100,117,108,101,32,99,111,117,108,100,
+ 110,39,116,32,98,101,32,102,111,117,110,100,46,10,32,32,
+ 32,32,32,32,32,32,78,114,57,0,0,0,114,58,0,0,
+ 0,41,2,114,35,0,0,0,114,3,0,0,0,41,3,114,
+ 32,0,0,0,114,38,0,0,0,114,39,0,0,0,114,9,
+ 0,0,0,114,9,0,0,0,114,10,0,0,0,218,10,105,
+ 115,95,112,97,99,107,97,103,101,221,0,0,0,115,8,0,
+ 0,0,0,6,10,1,8,1,18,1,122,22,122,105,112,105,
+ 109,112,111,114,116,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,8,
+ 0,0,0,8,0,0,0,67,0,0,0,115,246,0,0,0,
+ 116,0,124,0,124,1,131,2,92,3,125,2,125,3,125,4,
+ 116,1,106,2,160,3,124,1,161,1,125,5,124,5,100,1,
+ 117,0,115,46,116,4,124,5,116,5,131,2,115,64,116,5,
+ 124,1,131,1,125,5,124,5,116,1,106,2,124,1,60,0,
+ 124,0,124,5,95,6,122,84,124,3,114,108,116,7,124,0,
+ 124,1,131,2,125,6,116,8,160,9,124,0,106,10,124,6,
+ 161,2,125,7,124,7,103,1,124,5,95,11,116,12,124,5,
+ 100,2,131,2,115,124,116,13,124,5,95,13,116,8,160,14,
+ 124,5,106,15,124,1,124,4,161,3,1,0,116,16,124,2,
+ 124,5,106,15,131,2,1,0,87,0,110,22,1,0,1,0,
+ 1,0,116,1,106,2,124,1,61,0,130,0,89,0,110,2,
+ 48,0,122,14,116,1,106,2,124,1,25,0,125,5,87,0,
+ 110,34,4,0,116,17,121,226,1,0,1,0,1,0,116,18,
+ 100,3,124,1,155,2,100,4,157,3,131,1,130,1,89,0,
+ 110,2,48,0,116,19,160,20,100,5,124,1,124,4,161,3,
+ 1,0,124,5,83,0,41,6,122,245,108,111,97,100,95,109,
+ 111,100,117,108,101,40,102,117,108,108,110,97,109,101,41,32,
+ 45,62,32,109,111,100,117,108,101,46,10,10,32,32,32,32,
+ 32,32,32,32,76,111,97,100,32,116,104,101,32,109,111,100,
+ 117,108,101,32,115,112,101,99,105,102,105,101,100,32,98,121,
+ 32,39,102,117,108,108,110,97,109,101,39,46,32,39,102,117,
+ 108,108,110,97,109,101,39,32,109,117,115,116,32,98,101,32,
+ 116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,108,
+ 121,32,113,117,97,108,105,102,105,101,100,32,40,100,111,116,
+ 116,101,100,41,32,109,111,100,117,108,101,32,110,97,109,101,
+ 46,32,73,116,32,114,101,116,117,114,110,115,32,116,104,101,
+ 32,105,109,112,111,114,116,101,100,10,32,32,32,32,32,32,
+ 32,32,109,111,100,117,108,101,44,32,111,114,32,114,97,105,
+ 115,101,115,32,90,105,112,73,109,112,111,114,116,69,114,114,
+ 111,114,32,105,102,32,105,116,32,119,97,115,110,39,116,32,
+ 102,111,117,110,100,46,10,32,32,32,32,32,32,32,32,78,
+ 218,12,95,95,98,117,105,108,116,105,110,115,95,95,122,14,
+ 76,111,97,100,101,100,32,109,111,100,117,108,101,32,122,25,
+ 32,110,111,116,32,102,111,117,110,100,32,105,110,32,115,121,
+ 115,46,109,111,100,117,108,101,115,122,30,105,109,112,111,114,
+ 116,32,123,125,32,35,32,108,111,97,100,101,100,32,102,114,
+ 111,109,32,90,105,112,32,123,125,41,21,114,44,0,0,0,
+ 218,3,115,121,115,218,7,109,111,100,117,108,101,115,218,3,
+ 103,101,116,114,15,0,0,0,218,12,95,109,111,100,117,108,
+ 101,95,116,121,112,101,218,10,95,95,108,111,97,100,101,114,
+ 95,95,114,36,0,0,0,114,21,0,0,0,114,30,0,0,
+ 0,114,29,0,0,0,90,8,95,95,112,97,116,104,95,95,
+ 218,7,104,97,115,97,116,116,114,114,66,0,0,0,90,14,
+ 95,102,105,120,95,117,112,95,109,111,100,117,108,101,218,8,
+ 95,95,100,105,99,116,95,95,218,4,101,120,101,99,114,26,
+ 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114,
+ 218,10,95,98,111,111,116,115,116,114,97,112,218,16,95,118,
+ 101,114,98,111,115,101,95,109,101,115,115,97,103,101,41,8,
+ 114,32,0,0,0,114,38,0,0,0,114,46,0,0,0,114,
+ 47,0,0,0,114,40,0,0,0,90,3,109,111,100,114,13,
+ 0,0,0,114,63,0,0,0,114,9,0,0,0,114,9,0,
+ 0,0,114,10,0,0,0,218,11,108,111,97,100,95,109,111,
+ 100,117,108,101,234,0,0,0,115,48,0,0,0,0,7,16,
+ 1,12,1,18,1,8,1,10,1,6,2,2,1,4,3,10,
+ 1,14,1,8,2,10,1,6,1,16,1,16,1,6,1,8,
+ 1,8,2,2,1,14,1,12,1,22,1,14,1,122,23,122,
+ 105,112,105,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,3,0,0,0,8,0,0,0,67,0,0,0,115,
+ 86,0,0,0,122,20,124,0,160,0,124,1,161,1,115,18,
+ 87,0,100,1,83,0,87,0,110,20,4,0,116,1,121,40,
+ 1,0,1,0,1,0,89,0,100,1,83,0,48,0,116,2,
+ 106,3,115,76,100,2,100,3,108,4,109,5,125,2,1,0,
+ 124,2,160,6,116,2,161,1,1,0,100,4,116,2,95,3,
+ 116,2,124,0,124,1,131,2,83,0,41,5,122,204,82,101,
+ 116,117,114,110,32,116,104,101,32,82,101,115,111,117,114,99,
+ 101,82,101,97,100,101,114,32,102,111,114,32,97,32,112,97,
+ 99,107,97,103,101,32,105,110,32,97,32,122,105,112,32,102,
+ 105,108,101,46,10,10,32,32,32,32,32,32,32,32,73,102,
+ 32,39,102,117,108,108,110,97,109,101,39,32,105,115,32,97,
+ 32,112,97,99,107,97,103,101,32,119,105,116,104,105,110,32,
+ 116,104,101,32,122,105,112,32,102,105,108,101,44,32,114,101,
+ 116,117,114,110,32,116,104,101,10,32,32,32,32,32,32,32,
+ 32,39,82,101,115,111,117,114,99,101,82,101,97,100,101,114,
+ 39,32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,
+ 32,112,97,99,107,97,103,101,46,32,32,79,116,104,101,114,
+ 119,105,115,101,32,114,101,116,117,114,110,32,78,111,110,101,
+ 46,10,32,32,32,32,32,32,32,32,78,114,0,0,0,0,
+ 41,1,218,14,82,101,115,111,117,114,99,101,82,101,97,100,
+ 101,114,84,41,7,114,65,0,0,0,114,3,0,0,0,218,
+ 24,95,90,105,112,73,109,112,111,114,116,82,101,115,111,117,
+ 114,99,101,82,101,97,100,101,114,218,11,95,114,101,103,105,
+ 115,116,101,114,101,100,90,13,105,109,112,111,114,116,108,105,
+ 98,46,97,98,99,114,79,0,0,0,90,8,114,101,103,105,
+ 115,116,101,114,41,3,114,32,0,0,0,114,38,0,0,0,
+ 114,79,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
+ 10,0,0,0,218,19,103,101,116,95,114,101,115,111,117,114,
+ 99,101,95,114,101,97,100,101,114,16,1,0,0,115,20,0,
+ 0,0,0,6,2,1,10,1,10,1,12,1,8,1,6,1,
+ 12,1,10,1,6,1,122,31,122,105,112,105,109,112,111,114,
+ 116,101,114,46,103,101,116,95,114,101,115,111,117,114,99,101,
+ 95,114,101,97,100,101,114,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,100,1,124,0,106,0,155,0,116,1,155,
+ 0,124,0,106,2,155,0,100,2,157,5,83,0,41,3,78,
+ 122,21,60,122,105,112,105,109,112,111,114,116,101,114,32,111,
+ 98,106,101,99,116,32,34,122,2,34,62,41,3,114,29,0,
+ 0,0,114,20,0,0,0,114,31,0,0,0,41,1,114,32,
+ 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,
+ 0,0,218,8,95,95,114,101,112,114,95,95,34,1,0,0,
+ 115,2,0,0,0,0,1,122,20,122,105,112,105,109,112,111,
+ 114,116,101,114,46,95,95,114,101,112,114,95,95,41,1,78,
+ 41,1,78,41,15,114,6,0,0,0,114,7,0,0,0,114,
+ 8,0,0,0,218,7,95,95,100,111,99,95,95,114,34,0,
+ 0,0,114,41,0,0,0,114,42,0,0,0,114,48,0,0,
+ 0,114,55,0,0,0,114,56,0,0,0,114,64,0,0,0,
+ 114,65,0,0,0,114,78,0,0,0,114,82,0,0,0,114,
+ 83,0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,
+ 0,0,0,114,10,0,0,0,114,4,0,0,0,45,0,0,
+ 0,115,24,0,0,0,8,1,4,17,8,46,10,32,10,12,
+ 8,10,8,21,8,11,8,26,8,13,8,38,8,18,122,12,
+ 95,95,105,110,105,116,95,95,46,112,121,99,84,114,60,0,
+ 0,0,70,41,3,122,4,46,112,121,99,84,70,41,3,114,
+ 61,0,0,0,70,70,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,
+ 20,0,0,0,124,0,106,0,124,1,160,1,100,1,161,1,
+ 100,2,25,0,23,0,83,0,41,3,78,218,1,46,233,2,
+ 0,0,0,41,2,114,31,0,0,0,218,10,114,112,97,114,
+ 116,105,116,105,111,110,41,2,114,32,0,0,0,114,38,0,
+ 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+ 0,114,36,0,0,0,52,1,0,0,115,2,0,0,0,0,
+ 1,114,36,0,0,0,99,2,0,0,0,0,0,0,0,0,
+ 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115,
+ 18,0,0,0,124,1,116,0,23,0,125,2,124,2,124,0,
+ 106,1,118,0,83,0,169,1,78,41,2,114,20,0,0,0,
+ 114,28,0,0,0,41,3,114,32,0,0,0,114,13,0,0,
+ 0,90,7,100,105,114,112,97,116,104,114,9,0,0,0,114,
+ 9,0,0,0,114,10,0,0,0,114,37,0,0,0,56,1,
+ 0,0,115,4,0,0,0,0,4,8,2,114,37,0,0,0,
+ 99,2,0,0,0,0,0,0,0,0,0,0,0,7,0,0,
+ 0,4,0,0,0,67,0,0,0,115,56,0,0,0,116,0,
+ 124,0,124,1,131,2,125,2,116,1,68,0,93,36,92,3,
+ 125,3,125,4,125,5,124,2,124,3,23,0,125,6,124,6,
+ 124,0,106,2,118,0,114,14,124,5,2,0,1,0,83,0,
+ 113,14,100,0,83,0,114,88,0,0,0,41,3,114,36,0,
+ 0,0,218,16,95,122,105,112,95,115,101,97,114,99,104,111,
+ 114,100,101,114,114,28,0,0,0,41,7,114,32,0,0,0,
+ 114,38,0,0,0,114,13,0,0,0,218,6,115,117,102,102,
+ 105,120,218,10,105,115,98,121,116,101,99,111,100,101,114,47,
+ 0,0,0,114,63,0,0,0,114,9,0,0,0,114,9,0,
+ 0,0,114,10,0,0,0,114,35,0,0,0,65,1,0,0,
+ 115,12,0,0,0,0,1,10,1,14,1,8,1,10,1,10,
+ 1,114,35,0,0,0,99,1,0,0,0,0,0,0,0,0,
+ 0,0,0,26,0,0,0,9,0,0,0,67,0,0,0,115,
+ 2,5,0,0,122,14,116,0,160,1,124,0,161,1,125,1,
+ 87,0,110,36,4,0,116,2,121,50,1,0,1,0,1,0,
+ 116,3,100,1,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,89,0,110,2,48,0,124,1,144,4,143,164,1,0,
+ 122,36,124,1,160,4,116,5,11,0,100,3,161,2,1,0,
+ 124,1,160,6,161,0,125,2,124,1,160,7,116,5,161,1,
+ 125,3,87,0,110,36,4,0,116,2,121,132,1,0,1,0,
1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
141,2,130,1,89,0,110,2,48,0,116,8,124,3,131,1,
- 116,5,107,3,114,168,116,3,100,4,124,0,155,2,157,2,
+ 116,5,107,3,114,164,116,3,100,4,124,0,155,2,157,2,
124,0,100,2,141,2,130,1,124,3,100,0,100,5,133,2,
- 25,0,116,9,107,3,144,1,114,178,122,24,124,1,160,4,
+ 25,0,116,9,107,3,144,1,114,170,122,24,124,1,160,4,
100,6,100,3,161,2,1,0,124,1,160,6,161,0,125,4,
- 87,0,110,38,4,0,116,2,107,10,114,248,1,0,1,0,
- 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
- 141,2,130,1,89,0,110,2,48,0,116,10,124,4,116,11,
- 24,0,116,5,24,0,100,6,131,2,125,5,122,22,124,1,
- 160,4,124,5,161,1,1,0,124,1,160,7,161,0,125,6,
- 87,0,110,40,4,0,116,2,107,10,144,1,114,74,1,0,
+ 87,0,110,36,4,0,116,2,121,242,1,0,1,0,1,0,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,89,0,110,2,48,0,116,10,124,4,116,11,24,0,
+ 116,5,24,0,100,6,131,2,125,5,122,22,124,1,160,4,
+ 124,5,161,1,1,0,124,1,160,7,161,0,125,6,87,0,
+ 110,38,4,0,116,2,144,1,121,66,1,0,1,0,1,0,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,89,0,110,2,48,0,124,6,160,12,116,9,161,1,
+ 125,7,124,7,100,6,107,0,144,1,114,106,116,3,100,7,
+ 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,6,
+ 124,7,124,7,116,5,23,0,133,2,25,0,125,3,116,8,
+ 124,3,131,1,116,5,107,3,144,1,114,154,116,3,100,8,
+ 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,4,
+ 116,8,124,6,131,1,24,0,124,7,23,0,125,2,116,13,
+ 124,3,100,9,100,10,133,2,25,0,131,1,125,8,116,13,
+ 124,3,100,10,100,11,133,2,25,0,131,1,125,9,124,2,
+ 124,8,107,0,144,1,114,230,116,3,100,12,124,0,155,2,
+ 157,2,124,0,100,2,141,2,130,1,124,2,124,9,107,0,
+ 144,2,114,2,116,3,100,13,124,0,155,2,157,2,124,0,
+ 100,2,141,2,130,1,124,2,124,8,56,0,125,2,124,2,
+ 124,9,24,0,125,10,124,10,100,6,107,0,144,2,114,46,
+ 116,3,100,14,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,105,0,125,11,100,6,125,12,122,14,124,1,160,4,
+ 124,2,161,1,1,0,87,0,110,38,4,0,116,2,144,2,
+ 121,106,1,0,1,0,1,0,116,3,100,4,124,0,155,2,
+ 157,2,124,0,100,2,141,2,130,1,89,0,110,2,48,0,
+ 124,1,160,7,100,15,161,1,125,3,116,8,124,3,131,1,
+ 100,5,107,0,144,2,114,140,116,14,100,16,131,1,130,1,
+ 124,3,100,0,100,5,133,2,25,0,100,17,107,3,144,2,
+ 114,162,144,4,113,208,116,8,124,3,131,1,100,15,107,3,
+ 144,2,114,184,116,14,100,16,131,1,130,1,116,15,124,3,
+ 100,18,100,19,133,2,25,0,131,1,125,13,116,15,124,3,
+ 100,19,100,9,133,2,25,0,131,1,125,14,116,15,124,3,
+ 100,9,100,20,133,2,25,0,131,1,125,15,116,15,124,3,
+ 100,20,100,10,133,2,25,0,131,1,125,16,116,13,124,3,
+ 100,10,100,11,133,2,25,0,131,1,125,17,116,13,124,3,
+ 100,11,100,21,133,2,25,0,131,1,125,18,116,13,124,3,
+ 100,21,100,22,133,2,25,0,131,1,125,4,116,15,124,3,
+ 100,22,100,23,133,2,25,0,131,1,125,19,116,15,124,3,
+ 100,23,100,24,133,2,25,0,131,1,125,20,116,15,124,3,
+ 100,24,100,25,133,2,25,0,131,1,125,21,116,13,124,3,
+ 100,26,100,15,133,2,25,0,131,1,125,22,124,19,124,20,
+ 23,0,124,21,23,0,125,8,124,22,124,9,107,4,144,3,
+ 114,144,116,3,100,27,124,0,155,2,157,2,124,0,100,2,
+ 141,2,130,1,124,22,124,10,55,0,125,22,122,14,124,1,
+ 160,7,124,19,161,1,125,23,87,0,110,38,4,0,116,2,
+ 144,3,121,204,1,0,1,0,1,0,116,3,100,4,124,0,
+ 155,2,157,2,124,0,100,2,141,2,130,1,89,0,110,2,
+ 48,0,116,8,124,23,131,1,124,19,107,3,144,3,114,238,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,122,50,116,8,124,1,160,7,124,8,124,19,24,0,
+ 161,1,131,1,124,8,124,19,24,0,107,3,144,4,114,30,
+ 116,3,100,4,124,0,155,2,157,2,124,0,100,2,141,2,
+ 130,1,87,0,110,38,4,0,116,2,144,4,121,70,1,0,
1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0,
- 100,2,141,2,130,1,89,0,110,2,48,0,124,6,160,12,
- 116,9,161,1,125,7,124,7,100,6,107,0,144,1,114,114,
- 116,3,100,7,124,0,155,2,157,2,124,0,100,2,141,2,
- 130,1,124,6,124,7,124,7,116,5,23,0,133,2,25,0,
- 125,3,116,8,124,3,131,1,116,5,107,3,144,1,114,162,
- 116,3,100,8,124,0,155,2,157,2,124,0,100,2,141,2,
- 130,1,124,4,116,8,124,6,131,1,24,0,124,7,23,0,
- 125,2,116,13,124,3,100,9,100,10,133,2,25,0,131,1,
- 125,8,116,13,124,3,100,10,100,11,133,2,25,0,131,1,
- 125,9,124,2,124,8,107,0,144,1,114,238,116,3,100,12,
- 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,2,
- 124,9,107,0,144,2,114,10,116,3,100,13,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,124,2,124,8,56,0,
- 125,2,124,2,124,9,24,0,125,10,124,10,100,6,107,0,
- 144,2,114,54,116,3,100,14,124,0,155,2,157,2,124,0,
- 100,2,141,2,130,1,105,0,125,11,100,6,125,12,122,14,
- 124,1,160,4,124,2,161,1,1,0,87,0,110,40,4,0,
- 116,2,107,10,144,2,114,116,1,0,1,0,1,0,116,3,
- 100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
- 89,0,110,2,48,0,124,1,160,7,100,15,161,1,125,3,
- 116,8,124,3,131,1,100,5,107,0,144,2,114,150,116,14,
- 100,16,131,1,130,1,124,3,100,0,100,5,133,2,25,0,
- 100,17,107,3,144,2,114,172,144,4,113,224,116,8,124,3,
- 131,1,100,15,107,3,144,2,114,194,116,14,100,16,131,1,
- 130,1,116,15,124,3,100,18,100,19,133,2,25,0,131,1,
- 125,13,116,15,124,3,100,19,100,9,133,2,25,0,131,1,
- 125,14,116,15,124,3,100,9,100,20,133,2,25,0,131,1,
- 125,15,116,15,124,3,100,20,100,10,133,2,25,0,131,1,
- 125,16,116,13,124,3,100,10,100,11,133,2,25,0,131,1,
- 125,17,116,13,124,3,100,11,100,21,133,2,25,0,131,1,
- 125,18,116,13,124,3,100,21,100,22,133,2,25,0,131,1,
- 125,4,116,15,124,3,100,22,100,23,133,2,25,0,131,1,
- 125,19,116,15,124,3,100,23,100,24,133,2,25,0,131,1,
- 125,20,116,15,124,3,100,24,100,25,133,2,25,0,131,1,
- 125,21,116,13,124,3,100,26,100,15,133,2,25,0,131,1,
- 125,22,124,19,124,20,23,0,124,21,23,0,125,8,124,22,
- 124,9,107,4,144,3,114,154,116,3,100,27,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,124,22,124,10,55,0,
- 125,22,122,14,124,1,160,7,124,19,161,1,125,23,87,0,
- 110,40,4,0,116,2,107,10,144,3,114,216,1,0,1,0,
- 1,0,116,3,100,4,124,0,155,2,157,2,124,0,100,2,
- 141,2,130,1,89,0,110,2,48,0,116,8,124,23,131,1,
- 124,19,107,3,144,3,114,250,116,3,100,4,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,122,50,116,8,124,1,
- 160,7,124,8,124,19,24,0,161,1,131,1,124,8,124,19,
- 24,0,107,3,144,4,114,42,116,3,100,4,124,0,155,2,
- 157,2,124,0,100,2,141,2,130,1,87,0,110,40,4,0,
- 116,2,107,10,144,4,114,84,1,0,1,0,1,0,116,3,
- 100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1,
- 89,0,110,2,48,0,124,13,100,28,64,0,144,4,114,106,
- 124,23,160,16,161,0,125,23,110,54,122,14,124,23,160,16,
- 100,29,161,1,125,23,87,0,110,38,4,0,116,17,107,10,
- 144,4,114,158,1,0,1,0,1,0,124,23,160,16,100,30,
- 161,1,160,18,116,19,161,1,125,23,89,0,110,2,48,0,
- 124,23,160,20,100,31,116,21,161,2,125,23,116,22,160,23,
- 124,0,124,23,161,2,125,24,124,24,124,14,124,18,124,4,
- 124,22,124,15,124,16,124,17,102,8,125,25,124,25,124,11,
- 124,23,60,0,124,12,100,32,55,0,125,12,144,2,113,118,
- 87,0,100,0,4,0,4,0,131,3,1,0,110,18,49,0,
- 144,4,115,246,48,0,1,0,1,0,1,0,89,0,1,0,
- 116,24,160,25,100,33,124,12,124,0,161,3,1,0,124,11,
- 83,0,41,34,78,122,21,99,97,110,39,116,32,111,112,101,
- 110,32,90,105,112,32,102,105,108,101,58,32,114,12,0,0,
- 0,114,86,0,0,0,250,21,99,97,110,39,116,32,114,101,
- 97,100,32,90,105,112,32,102,105,108,101,58,32,233,4,0,
- 0,0,114,0,0,0,0,122,16,110,111,116,32,97,32,90,
- 105,112,32,102,105,108,101,58,32,122,18,99,111,114,114,117,
- 112,116,32,90,105,112,32,102,105,108,101,58,32,233,12,0,
- 0,0,233,16,0,0,0,233,20,0,0,0,122,28,98,97,
- 100,32,99,101,110,116,114,97,108,32,100,105,114,101,99,116,
- 111,114,121,32,115,105,122,101,58,32,122,30,98,97,100,32,
- 99,101,110,116,114,97,108,32,100,105,114,101,99,116,111,114,
- 121,32,111,102,102,115,101,116,58,32,122,38,98,97,100,32,
- 99,101,110,116,114,97,108,32,100,105,114,101,99,116,111,114,
- 121,32,115,105,122,101,32,111,114,32,111,102,102,115,101,116,
- 58,32,233,46,0,0,0,250,27,69,79,70,32,114,101,97,
- 100,32,119,104,101,114,101,32,110,111,116,32,101,120,112,101,
- 99,116,101,100,115,4,0,0,0,80,75,1,2,233,8,0,
- 0,0,233,10,0,0,0,233,14,0,0,0,233,24,0,0,
- 0,233,28,0,0,0,233,30,0,0,0,233,32,0,0,0,
- 233,34,0,0,0,233,42,0,0,0,122,25,98,97,100,32,
- 108,111,99,97,108,32,104,101,97,100,101,114,32,111,102,102,
- 115,101,116,58,32,105,0,8,0,0,218,5,97,115,99,105,
- 105,90,6,108,97,116,105,110,49,250,1,47,114,5,0,0,
- 0,122,33,122,105,112,105,109,112,111,114,116,58,32,102,111,
- 117,110,100,32,123,125,32,110,97,109,101,115,32,105,110,32,
- 123,33,114,125,41,26,218,3,95,105,111,218,9,111,112,101,
- 110,95,99,111,100,101,114,22,0,0,0,114,3,0,0,0,
- 218,4,115,101,101,107,218,20,69,78,68,95,67,69,78,84,
- 82,65,76,95,68,73,82,95,83,73,90,69,90,4,116,101,
- 108,108,218,4,114,101,97,100,114,51,0,0,0,218,18,83,
- 84,82,73,78,71,95,69,78,68,95,65,82,67,72,73,86,
- 69,218,3,109,97,120,218,15,77,65,88,95,67,79,77,77,
- 69,78,84,95,76,69,78,218,5,114,102,105,110,100,114,2,
- 0,0,0,218,8,69,79,70,69,114,114,111,114,114,1,0,
- 0,0,114,62,0,0,0,218,18,85,110,105,99,111,100,101,
- 68,101,99,111,100,101,69,114,114,111,114,218,9,116,114,97,
- 110,115,108,97,116,101,218,11,99,112,52,51,55,95,116,97,
- 98,108,101,114,19,0,0,0,114,20,0,0,0,114,21,0,
- 0,0,114,30,0,0,0,114,76,0,0,0,114,77,0,0,
- 0,41,26,114,29,0,0,0,218,2,102,112,90,15,104,101,
- 97,100,101,114,95,112,111,115,105,116,105,111,110,218,6,98,
- 117,102,102,101,114,218,9,102,105,108,101,95,115,105,122,101,
- 90,17,109,97,120,95,99,111,109,109,101,110,116,95,115,116,
- 97,114,116,218,4,100,97,116,97,90,3,112,111,115,218,11,
- 104,101,97,100,101,114,95,115,105,122,101,90,13,104,101,97,
- 100,101,114,95,111,102,102,115,101,116,90,10,97,114,99,95,
- 111,102,102,115,101,116,114,33,0,0,0,218,5,99,111,117,
- 110,116,218,5,102,108,97,103,115,218,8,99,111,109,112,114,
- 101,115,115,218,4,116,105,109,101,218,4,100,97,116,101,218,
- 3,99,114,99,218,9,100,97,116,97,95,115,105,122,101,218,
- 9,110,97,109,101,95,115,105,122,101,218,10,101,120,116,114,
- 97,95,115,105,122,101,90,12,99,111,109,109,101,110,116,95,
- 115,105,122,101,218,11,102,105,108,101,95,111,102,102,115,101,
- 116,114,59,0,0,0,114,13,0,0,0,218,1,116,114,9,
- 0,0,0,114,9,0,0,0,114,10,0,0,0,114,27,0,
- 0,0,96,1,0,0,115,212,0,0,0,0,1,2,1,14,
- 1,14,1,24,2,8,1,2,1,14,1,8,1,14,1,14,
- 1,24,1,12,1,18,1,18,3,2,1,12,1,12,1,14,
- 1,10,1,2,255,12,2,8,1,2,255,2,1,2,255,4,
- 2,2,1,10,1,12,1,16,1,10,1,2,255,12,2,10,
- 1,10,1,10,1,2,255,6,2,16,1,14,1,10,1,2,
- 255,6,2,16,2,16,1,16,1,10,1,18,1,10,1,18,
- 1,8,1,8,1,10,1,18,2,4,2,4,1,2,1,14,
- 1,16,1,24,2,10,1,14,1,8,2,18,1,4,1,14,
- 1,8,1,16,1,16,1,16,1,16,1,16,1,16,1,16,
- 1,16,1,16,1,16,1,16,1,12,1,10,1,18,1,8,
- 2,2,1,14,1,16,1,24,1,14,1,18,4,2,1,28,
- 1,22,1,16,1,24,2,10,2,10,3,2,1,14,1,16,
- 1,22,2,12,1,12,1,20,1,8,1,44,1,14,1,114,
- 27,0,0,0,117,190,1,0,0,0,1,2,3,4,5,6,
- 7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,
- 23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,
- 39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,
- 55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,
- 71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,
- 87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,
- 103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,
- 119,120,121,122,123,124,125,126,127,195,135,195,188,195,169,195,
- 162,195,164,195,160,195,165,195,167,195,170,195,171,195,168,195,
- 175,195,174,195,172,195,132,195,133,195,137,195,166,195,134,195,
- 180,195,182,195,178,195,187,195,185,195,191,195,150,195,156,194,
- 162,194,163,194,165,226,130,167,198,146,195,161,195,173,195,179,
- 195,186,195,177,195,145,194,170,194,186,194,191,226,140,144,194,
- 172,194,189,194,188,194,161,194,171,194,187,226,150,145,226,150,
- 146,226,150,147,226,148,130,226,148,164,226,149,161,226,149,162,
- 226,149,150,226,149,149,226,149,163,226,149,145,226,149,151,226,
- 149,157,226,149,156,226,149,155,226,148,144,226,148,148,226,148,
- 180,226,148,172,226,148,156,226,148,128,226,148,188,226,149,158,
- 226,149,159,226,149,154,226,149,148,226,149,169,226,149,166,226,
- 149,160,226,149,144,226,149,172,226,149,167,226,149,168,226,149,
- 164,226,149,165,226,149,153,226,149,152,226,149,146,226,149,147,
- 226,149,171,226,149,170,226,148,152,226,148,140,226,150,136,226,
- 150,132,226,150,140,226,150,144,226,150,128,206,177,195,159,206,
- 147,207,128,206,163,207,131,194,181,207,132,206,166,206,152,206,
- 169,206,180,226,136,158,207,134,206,181,226,136,169,226,137,161,
- 194,177,226,137,165,226,137,164,226,140,160,226,140,161,195,183,
- 226,137,136,194,176,226,136,153,194,183,226,136,154,226,129,191,
- 194,178,226,150,160,194,160,99,0,0,0,0,0,0,0,0,
- 0,0,0,0,1,0,0,0,8,0,0,0,67,0,0,0,
- 115,112,0,0,0,116,0,114,22,116,1,160,2,100,1,161,
- 1,1,0,116,3,100,2,131,1,130,1,100,3,97,0,122,
- 64,122,16,100,4,100,5,108,4,109,5,125,0,1,0,87,
- 0,110,38,4,0,116,6,107,10,114,82,1,0,1,0,1,
- 0,116,1,160,2,100,1,161,1,1,0,116,3,100,2,131,
- 1,130,1,89,0,110,2,48,0,87,0,100,6,97,0,110,
- 6,100,6,97,0,48,0,116,1,160,2,100,7,161,1,1,
- 0,124,0,83,0,41,8,78,122,27,122,105,112,105,109,112,
- 111,114,116,58,32,122,108,105,98,32,85,78,65,86,65,73,
- 76,65,66,76,69,250,41,99,97,110,39,116,32,100,101,99,
- 111,109,112,114,101,115,115,32,100,97,116,97,59,32,122,108,
- 105,98,32,110,111,116,32,97,118,97,105,108,97,98,108,101,
- 84,114,0,0,0,0,169,1,218,10,100,101,99,111,109,112,
- 114,101,115,115,70,122,25,122,105,112,105,109,112,111,114,116,
- 58,32,122,108,105,98,32,97,118,97,105,108,97,98,108,101,
- 41,7,218,15,95,105,109,112,111,114,116,105,110,103,95,122,
- 108,105,98,114,76,0,0,0,114,77,0,0,0,114,3,0,
- 0,0,90,4,122,108,105,98,114,141,0,0,0,218,9,69,
- 120,99,101,112,116,105,111,110,114,140,0,0,0,114,9,0,
- 0,0,114,9,0,0,0,114,10,0,0,0,218,20,95,103,
- 101,116,95,100,101,99,111,109,112,114,101,115,115,95,102,117,
- 110,99,254,1,0,0,115,26,0,0,0,0,2,4,3,10,
- 1,8,2,4,1,4,1,16,1,14,1,10,1,16,2,6,
- 0,6,2,10,1,114,144,0,0,0,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,17,0,0,0,9,0,0,0,67,
- 0,0,0,115,150,1,0,0,124,1,92,8,125,2,125,3,
- 125,4,125,5,125,6,125,7,125,8,125,9,124,4,100,1,
- 107,0,114,36,116,0,100,2,131,1,130,1,116,1,160,2,
- 124,0,161,1,144,1,143,18,125,10,122,14,124,10,160,3,
- 124,6,161,1,1,0,87,0,110,38,4,0,116,4,107,10,
- 114,102,1,0,1,0,1,0,116,0,100,3,124,0,155,2,
+ 100,2,141,2,130,1,89,0,110,2,48,0,124,13,100,28,
+ 64,0,144,4,114,92,124,23,160,16,161,0,125,23,110,52,
+ 122,14,124,23,160,16,100,29,161,1,125,23,87,0,110,36,
+ 4,0,116,17,144,4,121,142,1,0,1,0,1,0,124,23,
+ 160,16,100,30,161,1,160,18,116,19,161,1,125,23,89,0,
+ 110,2,48,0,124,23,160,20,100,31,116,21,161,2,125,23,
+ 116,22,160,23,124,0,124,23,161,2,125,24,124,24,124,14,
+ 124,18,124,4,124,22,124,15,124,16,124,17,102,8,125,25,
+ 124,25,124,11,124,23,60,0,124,12,100,32,55,0,125,12,
+ 144,2,113,108,87,0,100,0,4,0,4,0,131,3,1,0,
+ 110,18,49,0,144,4,115,230,48,0,1,0,1,0,1,0,
+ 89,0,1,0,116,24,160,25,100,33,124,12,124,0,161,3,
+ 1,0,124,11,83,0,41,34,78,122,21,99,97,110,39,116,
+ 32,111,112,101,110,32,90,105,112,32,102,105,108,101,58,32,
+ 114,12,0,0,0,114,86,0,0,0,250,21,99,97,110,39,
+ 116,32,114,101,97,100,32,90,105,112,32,102,105,108,101,58,
+ 32,233,4,0,0,0,114,0,0,0,0,122,16,110,111,116,
+ 32,97,32,90,105,112,32,102,105,108,101,58,32,122,18,99,
+ 111,114,114,117,112,116,32,90,105,112,32,102,105,108,101,58,
+ 32,233,12,0,0,0,233,16,0,0,0,233,20,0,0,0,
+ 122,28,98,97,100,32,99,101,110,116,114,97,108,32,100,105,
+ 114,101,99,116,111,114,121,32,115,105,122,101,58,32,122,30,
+ 98,97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,
+ 99,116,111,114,121,32,111,102,102,115,101,116,58,32,122,38,
+ 98,97,100,32,99,101,110,116,114,97,108,32,100,105,114,101,
+ 99,116,111,114,121,32,115,105,122,101,32,111,114,32,111,102,
+ 102,115,101,116,58,32,233,46,0,0,0,250,27,69,79,70,
+ 32,114,101,97,100,32,119,104,101,114,101,32,110,111,116,32,
+ 101,120,112,101,99,116,101,100,115,4,0,0,0,80,75,1,
+ 2,233,8,0,0,0,233,10,0,0,0,233,14,0,0,0,
+ 233,24,0,0,0,233,28,0,0,0,233,30,0,0,0,233,
+ 32,0,0,0,233,34,0,0,0,233,42,0,0,0,122,25,
+ 98,97,100,32,108,111,99,97,108,32,104,101,97,100,101,114,
+ 32,111,102,102,115,101,116,58,32,105,0,8,0,0,218,5,
+ 97,115,99,105,105,90,6,108,97,116,105,110,49,250,1,47,
+ 114,5,0,0,0,122,33,122,105,112,105,109,112,111,114,116,
+ 58,32,102,111,117,110,100,32,123,125,32,110,97,109,101,115,
+ 32,105,110,32,123,33,114,125,41,26,218,3,95,105,111,218,
+ 9,111,112,101,110,95,99,111,100,101,114,22,0,0,0,114,
+ 3,0,0,0,218,4,115,101,101,107,218,20,69,78,68,95,
+ 67,69,78,84,82,65,76,95,68,73,82,95,83,73,90,69,
+ 90,4,116,101,108,108,218,4,114,101,97,100,114,51,0,0,
+ 0,218,18,83,84,82,73,78,71,95,69,78,68,95,65,82,
+ 67,72,73,86,69,218,3,109,97,120,218,15,77,65,88,95,
+ 67,79,77,77,69,78,84,95,76,69,78,218,5,114,102,105,
+ 110,100,114,2,0,0,0,218,8,69,79,70,69,114,114,111,
+ 114,114,1,0,0,0,114,62,0,0,0,218,18,85,110,105,
+ 99,111,100,101,68,101,99,111,100,101,69,114,114,111,114,218,
+ 9,116,114,97,110,115,108,97,116,101,218,11,99,112,52,51,
+ 55,95,116,97,98,108,101,114,19,0,0,0,114,20,0,0,
+ 0,114,21,0,0,0,114,30,0,0,0,114,76,0,0,0,
+ 114,77,0,0,0,41,26,114,29,0,0,0,218,2,102,112,
+ 90,15,104,101,97,100,101,114,95,112,111,115,105,116,105,111,
+ 110,218,6,98,117,102,102,101,114,218,9,102,105,108,101,95,
+ 115,105,122,101,90,17,109,97,120,95,99,111,109,109,101,110,
+ 116,95,115,116,97,114,116,218,4,100,97,116,97,90,3,112,
+ 111,115,218,11,104,101,97,100,101,114,95,115,105,122,101,90,
+ 13,104,101,97,100,101,114,95,111,102,102,115,101,116,90,10,
+ 97,114,99,95,111,102,102,115,101,116,114,33,0,0,0,218,
+ 5,99,111,117,110,116,218,5,102,108,97,103,115,218,8,99,
+ 111,109,112,114,101,115,115,218,4,116,105,109,101,218,4,100,
+ 97,116,101,218,3,99,114,99,218,9,100,97,116,97,95,115,
+ 105,122,101,218,9,110,97,109,101,95,115,105,122,101,218,10,
+ 101,120,116,114,97,95,115,105,122,101,90,12,99,111,109,109,
+ 101,110,116,95,115,105,122,101,218,11,102,105,108,101,95,111,
+ 102,102,115,101,116,114,59,0,0,0,114,13,0,0,0,218,
+ 1,116,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+ 0,114,27,0,0,0,96,1,0,0,115,212,0,0,0,0,
+ 1,2,1,14,1,12,1,24,2,8,1,2,1,14,1,8,
+ 1,14,1,12,1,24,1,12,1,18,1,18,3,2,1,12,
+ 1,12,1,12,1,10,1,2,255,12,2,8,1,2,255,2,
+ 1,2,255,4,2,2,1,10,1,12,1,14,1,10,1,2,
+ 255,12,2,10,1,10,1,10,1,2,255,6,2,16,1,14,
+ 1,10,1,2,255,6,2,16,2,16,1,16,1,10,1,18,
+ 1,10,1,18,1,8,1,8,1,10,1,18,2,4,2,4,
+ 1,2,1,14,1,14,1,24,2,10,1,14,1,8,2,18,
+ 1,4,1,14,1,8,1,16,1,16,1,16,1,16,1,16,
+ 1,16,1,16,1,16,1,16,1,16,1,16,1,12,1,10,
+ 1,18,1,8,2,2,1,14,1,14,1,24,1,14,1,18,
+ 4,2,1,28,1,22,1,14,1,24,2,10,2,10,3,2,
+ 1,14,1,14,1,22,2,12,1,12,1,20,1,8,1,44,
+ 1,14,1,114,27,0,0,0,117,190,1,0,0,0,1,2,
+ 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,
+ 19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,
+ 35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,
+ 51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,
+ 67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,
+ 83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,
+ 99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,
+ 115,116,117,118,119,120,121,122,123,124,125,126,127,195,135,195,
+ 188,195,169,195,162,195,164,195,160,195,165,195,167,195,170,195,
+ 171,195,168,195,175,195,174,195,172,195,132,195,133,195,137,195,
+ 166,195,134,195,180,195,182,195,178,195,187,195,185,195,191,195,
+ 150,195,156,194,162,194,163,194,165,226,130,167,198,146,195,161,
+ 195,173,195,179,195,186,195,177,195,145,194,170,194,186,194,191,
+ 226,140,144,194,172,194,189,194,188,194,161,194,171,194,187,226,
+ 150,145,226,150,146,226,150,147,226,148,130,226,148,164,226,149,
+ 161,226,149,162,226,149,150,226,149,149,226,149,163,226,149,145,
+ 226,149,151,226,149,157,226,149,156,226,149,155,226,148,144,226,
+ 148,148,226,148,180,226,148,172,226,148,156,226,148,128,226,148,
+ 188,226,149,158,226,149,159,226,149,154,226,149,148,226,149,169,
+ 226,149,166,226,149,160,226,149,144,226,149,172,226,149,167,226,
+ 149,168,226,149,164,226,149,165,226,149,153,226,149,152,226,149,
+ 146,226,149,147,226,149,171,226,149,170,226,148,152,226,148,140,
+ 226,150,136,226,150,132,226,150,140,226,150,144,226,150,128,206,
+ 177,195,159,206,147,207,128,206,163,207,131,194,181,207,132,206,
+ 166,206,152,206,169,206,180,226,136,158,207,134,206,181,226,136,
+ 169,226,137,161,194,177,226,137,165,226,137,164,226,140,160,226,
+ 140,161,195,183,226,137,136,194,176,226,136,153,194,183,226,136,
+ 154,226,129,191,194,178,226,150,160,194,160,99,0,0,0,0,
+ 0,0,0,0,0,0,0,0,1,0,0,0,8,0,0,0,
+ 67,0,0,0,115,110,0,0,0,116,0,114,22,116,1,160,
+ 2,100,1,161,1,1,0,116,3,100,2,131,1,130,1,100,
+ 3,97,0,122,62,122,16,100,4,100,5,108,4,109,5,125,
+ 0,1,0,87,0,110,36,4,0,116,6,121,80,1,0,1,
+ 0,1,0,116,1,160,2,100,1,161,1,1,0,116,3,100,
+ 2,131,1,130,1,89,0,110,2,48,0,87,0,100,6,97,
+ 0,110,6,100,6,97,0,48,0,116,1,160,2,100,7,161,
+ 1,1,0,124,0,83,0,41,8,78,122,27,122,105,112,105,
+ 109,112,111,114,116,58,32,122,108,105,98,32,85,78,65,86,
+ 65,73,76,65,66,76,69,250,41,99,97,110,39,116,32,100,
+ 101,99,111,109,112,114,101,115,115,32,100,97,116,97,59,32,
+ 122,108,105,98,32,110,111,116,32,97,118,97,105,108,97,98,
+ 108,101,84,114,0,0,0,0,169,1,218,10,100,101,99,111,
+ 109,112,114,101,115,115,70,122,25,122,105,112,105,109,112,111,
+ 114,116,58,32,122,108,105,98,32,97,118,97,105,108,97,98,
+ 108,101,41,7,218,15,95,105,109,112,111,114,116,105,110,103,
+ 95,122,108,105,98,114,76,0,0,0,114,77,0,0,0,114,
+ 3,0,0,0,90,4,122,108,105,98,114,141,0,0,0,218,
+ 9,69,120,99,101,112,116,105,111,110,114,140,0,0,0,114,
+ 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,20,
+ 95,103,101,116,95,100,101,99,111,109,112,114,101,115,115,95,
+ 102,117,110,99,254,1,0,0,115,26,0,0,0,0,2,4,
+ 3,10,1,8,2,4,1,4,1,16,1,12,1,10,1,16,
+ 2,6,0,6,2,10,1,114,144,0,0,0,99,2,0,0,
+ 0,0,0,0,0,0,0,0,0,17,0,0,0,9,0,0,
+ 0,67,0,0,0,115,144,1,0,0,124,1,92,8,125,2,
+ 125,3,125,4,125,5,125,6,125,7,125,8,125,9,124,4,
+ 100,1,107,0,114,36,116,0,100,2,131,1,130,1,116,1,
+ 160,2,124,0,161,1,144,1,143,14,125,10,122,14,124,10,
+ 160,3,124,6,161,1,1,0,87,0,110,36,4,0,116,4,
+ 121,100,1,0,1,0,1,0,116,0,100,3,124,0,155,2,
157,2,124,0,100,4,141,2,130,1,89,0,110,2,48,0,
124,10,160,5,100,5,161,1,125,11,116,6,124,11,131,1,
- 100,5,107,3,114,134,116,7,100,6,131,1,130,1,124,11,
- 100,0,100,7,133,2,25,0,100,8,107,3,114,168,116,0,
+ 100,5,107,3,114,132,116,7,100,6,131,1,130,1,124,11,
+ 100,0,100,7,133,2,25,0,100,8,107,3,114,166,116,0,
100,9,124,0,155,2,157,2,124,0,100,4,141,2,130,1,
116,8,124,11,100,10,100,11,133,2,25,0,131,1,125,12,
116,8,124,11,100,11,100,5,133,2,25,0,131,1,125,13,
100,5,124,12,23,0,124,13,23,0,125,14,124,6,124,14,
55,0,125,6,122,14,124,10,160,3,124,6,161,1,1,0,
- 87,0,110,40,4,0,116,4,107,10,144,1,114,18,1,0,
- 1,0,1,0,116,0,100,3,124,0,155,2,157,2,124,0,
- 100,4,141,2,130,1,89,0,110,2,48,0,124,10,160,5,
- 124,4,161,1,125,15,116,6,124,15,131,1,124,4,107,3,
- 144,1,114,52,116,4,100,12,131,1,130,1,87,0,100,0,
- 4,0,4,0,131,3,1,0,110,18,49,0,144,1,115,74,
- 48,0,1,0,1,0,1,0,89,0,1,0,124,3,100,1,
- 107,2,144,1,114,98,124,15,83,0,122,10,116,9,131,0,
- 125,16,87,0,110,30,4,0,116,10,107,10,144,1,114,138,
- 1,0,1,0,1,0,116,0,100,13,131,1,130,1,89,0,
- 110,2,48,0,124,16,124,15,100,14,131,2,83,0,41,15,
- 78,114,0,0,0,0,122,18,110,101,103,97,116,105,118,101,
- 32,100,97,116,97,32,115,105,122,101,114,92,0,0,0,114,
- 12,0,0,0,114,104,0,0,0,114,98,0,0,0,114,93,
- 0,0,0,115,4,0,0,0,80,75,3,4,122,23,98,97,
- 100,32,108,111,99,97,108,32,102,105,108,101,32,104,101,97,
- 100,101,114,58,32,233,26,0,0,0,114,103,0,0,0,122,
- 26,122,105,112,105,109,112,111,114,116,58,32,99,97,110,39,
- 116,32,114,101,97,100,32,100,97,116,97,114,139,0,0,0,
- 105,241,255,255,255,41,11,114,3,0,0,0,114,110,0,0,
- 0,114,111,0,0,0,114,112,0,0,0,114,22,0,0,0,
- 114,114,0,0,0,114,51,0,0,0,114,119,0,0,0,114,
- 1,0,0,0,114,144,0,0,0,114,143,0,0,0,41,17,
- 114,29,0,0,0,114,54,0,0,0,90,8,100,97,116,97,
- 112,97,116,104,114,130,0,0,0,114,134,0,0,0,114,125,
- 0,0,0,114,137,0,0,0,114,131,0,0,0,114,132,0,
- 0,0,114,133,0,0,0,114,123,0,0,0,114,124,0,0,
- 0,114,135,0,0,0,114,136,0,0,0,114,127,0,0,0,
- 90,8,114,97,119,95,100,97,116,97,114,141,0,0,0,114,
- 9,0,0,0,114,9,0,0,0,114,10,0,0,0,114,52,
- 0,0,0,19,2,0,0,115,62,0,0,0,0,1,20,1,
- 8,1,8,2,14,2,2,1,14,1,14,1,24,1,10,1,
- 12,1,8,2,16,2,18,2,16,1,16,1,12,1,8,1,
- 2,1,14,1,16,1,24,1,10,1,14,1,40,2,10,2,
- 4,3,2,1,10,1,16,1,14,1,114,52,0,0,0,99,
- 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
- 3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,124,
- 0,124,1,24,0,131,1,100,1,107,1,83,0,41,2,78,
- 114,5,0,0,0,41,1,218,3,97,98,115,41,2,90,2,
- 116,49,90,2,116,50,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,218,9,95,101,113,95,109,116,105,109,101,
- 65,2,0,0,115,2,0,0,0,0,2,114,147,0,0,0,
- 99,5,0,0,0,0,0,0,0,0,0,0,0,14,0,0,
- 0,8,0,0,0,67,0,0,0,115,60,1,0,0,124,3,
- 124,2,100,1,156,2,125,5,122,18,116,0,160,1,124,4,
- 124,3,124,5,161,3,125,6,87,0,110,22,4,0,116,2,
- 107,10,114,50,1,0,1,0,1,0,89,0,100,0,83,0,
- 48,0,124,6,100,2,64,0,100,3,107,3,125,7,124,7,
- 114,182,124,6,100,4,64,0,100,3,107,3,125,8,116,3,
- 106,4,100,5,107,3,114,180,124,8,115,104,116,3,106,4,
- 100,6,107,2,114,180,116,5,124,0,124,2,131,2,125,9,
- 124,9,100,0,107,9,114,180,116,3,160,6,116,0,106,7,
- 124,9,161,2,125,10,122,20,116,0,160,8,124,4,124,10,
- 124,3,124,5,161,4,1,0,87,0,110,22,4,0,116,2,
- 107,10,114,178,1,0,1,0,1,0,89,0,100,0,83,0,
- 48,0,110,84,116,9,124,0,124,2,131,2,92,2,125,11,
- 125,12,124,11,144,1,114,10,116,10,116,11,124,4,100,7,
- 100,8,133,2,25,0,131,1,124,11,131,2,114,246,116,11,
- 124,4,100,8,100,9,133,2,25,0,131,1,124,12,107,3,
- 144,1,114,10,116,12,160,13,100,10,124,3,155,2,157,2,
- 161,1,1,0,100,0,83,0,116,14,160,15,124,4,100,9,
- 100,0,133,2,25,0,161,1,125,13,116,16,124,13,116,17,
- 131,2,144,1,115,56,116,18,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,19,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,118,97,108,105,100,97,116,101,95,104,97,115,104,
- 95,112,121,99,218,29,95,103,101,116,95,109,116,105,109,101,
- 95,97,110,100,95,115,105,122,101,95,111,102,95,115,111,117,
- 114,99,101,114,147,0,0,0,114,2,0,0,0,114,76,0,
- 0,0,114,77,0,0,0,218,7,109,97,114,115,104,97,108,
- 90,5,108,111,97,100,115,114,15,0,0,0,218,10,95,99,
- 111,100,101,95,116,121,112,101,218,9,84,121,112,101,69,114,
- 114,111,114,41,14,114,32,0,0,0,114,53,0,0,0,114,
- 63,0,0,0,114,38,0,0,0,114,126,0,0,0,90,11,
- 101,120,99,95,100,101,116,97,105,108,115,114,129,0,0,0,
- 90,10,104,97,115,104,95,98,97,115,101,100,90,12,99,104,
- 101,99,107,95,115,111,117,114,99,101,90,12,115,111,117,114,
- 99,101,95,98,121,116,101,115,114,150,0,0,0,90,12,115,
- 111,117,114,99,101,95,109,116,105,109,101,90,11,115,111,117,
- 114,99,101,95,115,105,122,101,114,46,0,0,0,114,9,0,
- 0,0,114,9,0,0,0,114,10,0,0,0,218,15,95,117,
- 110,109,97,114,115,104,97,108,95,99,111,100,101,75,2,0,
- 0,115,88,0,0,0,0,2,2,1,2,254,6,5,2,1,
- 18,1,14,1,8,2,12,1,4,1,12,1,10,1,2,255,
- 2,1,8,255,2,2,10,1,8,1,4,1,4,1,2,254,
- 4,5,2,1,4,1,2,0,2,0,2,0,2,255,8,2,
- 14,1,10,3,8,255,6,3,6,3,22,1,18,255,4,2,
- 4,1,8,255,4,2,4,2,18,1,12,1,16,1,114,155,
- 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,
- 1,0,0,0,4,0,0,0,67,0,0,0,115,28,0,0,
- 0,124,0,160,0,100,1,100,2,161,2,125,0,124,0,160,
- 0,100,3,100,2,161,2,125,0,124,0,83,0,41,4,78,
- 115,2,0,0,0,13,10,243,1,0,0,0,10,243,1,0,
- 0,0,13,41,1,114,19,0,0,0,41,1,218,6,115,111,
- 117,114,99,101,114,9,0,0,0,114,9,0,0,0,114,10,
- 0,0,0,218,23,95,110,111,114,109,97,108,105,122,101,95,
- 108,105,110,101,95,101,110,100,105,110,103,115,126,2,0,0,
- 115,6,0,0,0,0,1,12,1,12,1,114,159,0,0,0,
- 99,2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,
- 0,6,0,0,0,67,0,0,0,115,24,0,0,0,116,0,
- 124,1,131,1,125,1,116,1,124,1,124,0,100,1,100,2,
- 100,3,141,4,83,0,41,4,78,114,74,0,0,0,84,41,
- 1,90,12,100,111,110,116,95,105,110,104,101,114,105,116,41,
- 2,114,159,0,0,0,218,7,99,111,109,112,105,108,101,41,
- 2,114,53,0,0,0,114,158,0,0,0,114,9,0,0,0,
- 114,9,0,0,0,114,10,0,0,0,218,15,95,99,111,109,
- 112,105,108,101,95,115,111,117,114,99,101,133,2,0,0,115,
- 4,0,0,0,0,1,8,1,114,161,0,0,0,99,2,0,
- 0,0,0,0,0,0,0,0,0,0,2,0,0,0,11,0,
- 0,0,67,0,0,0,115,68,0,0,0,116,0,160,1,124,
- 0,100,1,63,0,100,2,23,0,124,0,100,3,63,0,100,
- 4,64,0,124,0,100,5,64,0,124,1,100,6,63,0,124,
- 1,100,3,63,0,100,7,64,0,124,1,100,5,64,0,100,
- 8,20,0,100,9,100,9,100,9,102,9,161,1,83,0,41,
- 10,78,233,9,0,0,0,105,188,7,0,0,233,5,0,0,
- 0,233,15,0,0,0,233,31,0,0,0,233,11,0,0,0,
- 233,63,0,0,0,114,86,0,0,0,114,14,0,0,0,41,
- 2,114,131,0,0,0,90,6,109,107,116,105,109,101,41,2,
- 218,1,100,114,138,0,0,0,114,9,0,0,0,114,9,0,
- 0,0,114,10,0,0,0,218,14,95,112,97,114,115,101,95,
- 100,111,115,116,105,109,101,139,2,0,0,115,22,0,0,0,
- 0,1,4,1,10,1,10,1,6,1,6,1,10,1,10,1,
- 2,0,2,0,2,249,114,169,0,0,0,99,2,0,0,0,
- 0,0,0,0,0,0,0,0,6,0,0,0,10,0,0,0,
- 67,0,0,0,115,116,0,0,0,122,82,124,1,100,1,100,
- 0,133,2,25,0,100,2,107,6,115,22,74,0,130,1,124,
- 1,100,0,100,1,133,2,25,0,125,1,124,0,106,0,124,
- 1,25,0,125,2,124,2,100,3,25,0,125,3,124,2,100,
- 4,25,0,125,4,124,2,100,5,25,0,125,5,116,1,124,
- 4,124,3,131,2,124,5,102,2,87,0,83,0,4,0,116,
- 2,116,3,116,4,102,3,107,10,114,110,1,0,1,0,1,
- 0,89,0,100,6,83,0,48,0,100,0,83,0,41,7,78,
- 114,14,0,0,0,169,2,218,1,99,218,1,111,114,163,0,
- 0,0,233,6,0,0,0,233,3,0,0,0,41,2,114,0,
- 0,0,0,114,0,0,0,0,41,5,114,28,0,0,0,114,
- 169,0,0,0,114,26,0,0,0,218,10,73,110,100,101,120,
- 69,114,114,111,114,114,154,0,0,0,41,6,114,32,0,0,
- 0,114,13,0,0,0,114,54,0,0,0,114,131,0,0,0,
- 114,132,0,0,0,90,17,117,110,99,111,109,112,114,101,115,
- 115,101,100,95,115,105,122,101,114,9,0,0,0,114,9,0,
- 0,0,114,10,0,0,0,114,151,0,0,0,152,2,0,0,
- 115,20,0,0,0,0,1,2,2,20,1,12,1,10,3,8,
- 1,8,1,8,1,16,1,20,1,114,151,0,0,0,99,2,
- 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,8,
- 0,0,0,67,0,0,0,115,86,0,0,0,124,1,100,1,
- 100,0,133,2,25,0,100,2,107,6,115,20,74,0,130,1,
- 124,1,100,0,100,1,133,2,25,0,125,1,122,14,124,0,
- 106,0,124,1,25,0,125,2,87,0,110,22,4,0,116,1,
- 107,10,114,68,1,0,1,0,1,0,89,0,100,0,83,0,
- 48,0,116,2,124,0,106,3,124,2,131,2,83,0,100,0,
- 83,0,41,3,78,114,14,0,0,0,114,170,0,0,0,41,
- 4,114,28,0,0,0,114,26,0,0,0,114,52,0,0,0,
- 114,29,0,0,0,41,3,114,32,0,0,0,114,13,0,0,
- 0,114,54,0,0,0,114,9,0,0,0,114,9,0,0,0,
- 114,10,0,0,0,114,149,0,0,0,171,2,0,0,115,14,
- 0,0,0,0,2,20,1,12,2,2,1,14,1,14,1,8,
- 2,114,149,0,0,0,99,2,0,0,0,0,0,0,0,0,
- 0,0,0,11,0,0,0,9,0,0,0,67,0,0,0,115,
- 198,0,0,0,116,0,124,0,124,1,131,2,125,2,116,1,
- 68,0,93,160,92,3,125,3,125,4,125,5,124,2,124,3,
- 23,0,125,6,116,2,106,3,100,1,124,0,106,4,116,5,
- 124,6,100,2,100,3,141,5,1,0,122,14,124,0,106,6,
- 124,6,25,0,125,7,87,0,110,20,4,0,116,7,107,10,
- 114,88,1,0,1,0,1,0,89,0,113,14,48,0,124,7,
- 100,4,25,0,125,8,116,8,124,0,106,4,124,7,131,2,
- 125,9,124,4,114,132,116,9,124,0,124,8,124,6,124,1,
- 124,9,131,5,125,10,110,10,116,10,124,8,124,9,131,2,
- 125,10,124,10,100,0,107,8,114,152,113,14,124,7,100,4,
- 25,0,125,8,124,10,124,5,124,8,102,3,2,0,1,0,
- 83,0,113,14,116,11,100,5,124,1,155,2,157,2,124,1,
- 100,6,141,2,130,1,100,0,83,0,41,7,78,122,13,116,
- 114,121,105,110,103,32,123,125,123,125,123,125,114,86,0,0,
- 0,41,1,90,9,118,101,114,98,111,115,105,116,121,114,0,
- 0,0,0,114,57,0,0,0,114,58,0,0,0,41,12,114,
- 36,0,0,0,114,89,0,0,0,114,76,0,0,0,114,77,
- 0,0,0,114,29,0,0,0,114,20,0,0,0,114,28,0,
- 0,0,114,26,0,0,0,114,52,0,0,0,114,155,0,0,
- 0,114,161,0,0,0,114,3,0,0,0,41,11,114,32,0,
- 0,0,114,38,0,0,0,114,13,0,0,0,114,90,0,0,
- 0,114,91,0,0,0,114,47,0,0,0,114,63,0,0,0,
- 114,54,0,0,0,114,40,0,0,0,114,126,0,0,0,114,
- 46,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
- 0,0,0,114,44,0,0,0,186,2,0,0,115,36,0,0,
- 0,0,1,10,1,14,1,8,1,22,1,2,1,14,1,14,
- 1,6,2,8,1,12,1,4,1,18,2,10,1,8,3,2,
- 1,8,1,16,2,114,44,0,0,0,99,0,0,0,0,0,
- 0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,
- 0,0,0,115,60,0,0,0,101,0,90,1,100,0,90,2,
- 100,1,90,3,100,2,90,4,100,3,100,4,132,0,90,5,
- 100,5,100,6,132,0,90,6,100,7,100,8,132,0,90,7,
- 100,9,100,10,132,0,90,8,100,11,100,12,132,0,90,9,
- 100,13,83,0,41,14,114,80,0,0,0,122,165,80,114,105,
- 118,97,116,101,32,99,108,97,115,115,32,117,115,101,100,32,
- 116,111,32,115,117,112,112,111,114,116,32,90,105,112,73,109,
- 112,111,114,116,46,103,101,116,95,114,101,115,111,117,114,99,
- 101,95,114,101,97,100,101,114,40,41,46,10,10,32,32,32,
- 32,84,104,105,115,32,99,108,97,115,115,32,105,115,32,97,
- 108,108,111,119,101,100,32,116,111,32,114,101,102,101,114,101,
- 110,99,101,32,97,108,108,32,116,104,101,32,105,110,110,97,
- 114,100,115,32,97,110,100,32,112,114,105,118,97,116,101,32,
- 112,97,114,116,115,32,111,102,10,32,32,32,32,116,104,101,
- 32,122,105,112,105,109,112,111,114,116,101,114,46,10,32,32,
- 32,32,70,99,3,0,0,0,0,0,0,0,0,0,0,0,
- 3,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,
- 0,124,1,124,0,95,0,124,2,124,0,95,1,100,0,83,
- 0,114,88,0,0,0,41,2,114,4,0,0,0,114,38,0,
- 0,0,41,3,114,32,0,0,0,114,4,0,0,0,114,38,
+ 87,0,110,38,4,0,116,4,144,1,121,14,1,0,1,0,
+ 1,0,116,0,100,3,124,0,155,2,157,2,124,0,100,4,
+ 141,2,130,1,89,0,110,2,48,0,124,10,160,5,124,4,
+ 161,1,125,15,116,6,124,15,131,1,124,4,107,3,144,1,
+ 114,48,116,4,100,12,131,1,130,1,87,0,100,0,4,0,
+ 4,0,131,3,1,0,110,18,49,0,144,1,115,70,48,0,
+ 1,0,1,0,1,0,89,0,1,0,124,3,100,1,107,2,
+ 144,1,114,94,124,15,83,0,122,10,116,9,131,0,125,16,
+ 87,0,110,28,4,0,116,10,144,1,121,132,1,0,1,0,
+ 1,0,116,0,100,13,131,1,130,1,89,0,110,2,48,0,
+ 124,16,124,15,100,14,131,2,83,0,41,15,78,114,0,0,
+ 0,0,122,18,110,101,103,97,116,105,118,101,32,100,97,116,
+ 97,32,115,105,122,101,114,92,0,0,0,114,12,0,0,0,
+ 114,104,0,0,0,114,98,0,0,0,114,93,0,0,0,115,
+ 4,0,0,0,80,75,3,4,122,23,98,97,100,32,108,111,
+ 99,97,108,32,102,105,108,101,32,104,101,97,100,101,114,58,
+ 32,233,26,0,0,0,114,103,0,0,0,122,26,122,105,112,
+ 105,109,112,111,114,116,58,32,99,97,110,39,116,32,114,101,
+ 97,100,32,100,97,116,97,114,139,0,0,0,105,241,255,255,
+ 255,41,11,114,3,0,0,0,114,110,0,0,0,114,111,0,
+ 0,0,114,112,0,0,0,114,22,0,0,0,114,114,0,0,
+ 0,114,51,0,0,0,114,119,0,0,0,114,1,0,0,0,
+ 114,144,0,0,0,114,143,0,0,0,41,17,114,29,0,0,
+ 0,114,54,0,0,0,90,8,100,97,116,97,112,97,116,104,
+ 114,130,0,0,0,114,134,0,0,0,114,125,0,0,0,114,
+ 137,0,0,0,114,131,0,0,0,114,132,0,0,0,114,133,
+ 0,0,0,114,123,0,0,0,114,124,0,0,0,114,135,0,
+ 0,0,114,136,0,0,0,114,127,0,0,0,90,8,114,97,
+ 119,95,100,97,116,97,114,141,0,0,0,114,9,0,0,0,
+ 114,9,0,0,0,114,10,0,0,0,114,52,0,0,0,19,
+ 2,0,0,115,62,0,0,0,0,1,20,1,8,1,8,2,
+ 14,2,2,1,14,1,12,1,24,1,10,1,12,1,8,2,
+ 16,2,18,2,16,1,16,1,12,1,8,1,2,1,14,1,
+ 14,1,24,1,10,1,14,1,40,2,10,2,4,3,2,1,
+ 10,1,14,1,14,1,114,52,0,0,0,99,2,0,0,0,
+ 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
+ 67,0,0,0,115,16,0,0,0,116,0,124,0,124,1,24,
+ 0,131,1,100,1,107,1,83,0,41,2,78,114,5,0,0,
+ 0,41,1,218,3,97,98,115,41,2,90,2,116,49,90,2,
+ 116,50,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+ 0,218,9,95,101,113,95,109,116,105,109,101,65,2,0,0,
+ 115,2,0,0,0,0,2,114,147,0,0,0,99,5,0,0,
+ 0,0,0,0,0,0,0,0,0,14,0,0,0,8,0,0,
+ 0,67,0,0,0,115,56,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,20,4,0,116,2,121,48,1,0,
+ 1,0,1,0,89,0,100,0,83,0,48,0,124,6,100,2,
+ 64,0,100,3,107,3,125,7,124,7,114,178,124,6,100,4,
+ 64,0,100,3,107,3,125,8,116,3,106,4,100,5,107,3,
+ 114,176,124,8,115,102,116,3,106,4,100,6,107,2,114,176,
+ 116,5,124,0,124,2,131,2,125,9,124,9,100,0,117,1,
+ 114,176,116,3,160,6,116,0,106,7,124,9,161,2,125,10,
+ 122,20,116,0,160,8,124,4,124,10,124,3,124,5,161,4,
+ 1,0,87,0,110,20,4,0,116,2,121,174,1,0,1,0,
+ 1,0,89,0,100,0,83,0,48,0,110,84,116,9,124,0,
+ 124,2,131,2,92,2,125,11,125,12,124,11,144,1,114,6,
+ 116,10,116,11,124,4,100,7,100,8,133,2,25,0,131,1,
+ 124,11,131,2,114,242,116,11,124,4,100,8,100,9,133,2,
+ 25,0,131,1,124,12,107,3,144,1,114,6,116,12,160,13,
+ 100,10,124,3,155,2,157,2,161,1,1,0,100,0,83,0,
+ 116,14,160,15,124,4,100,9,100,0,133,2,25,0,161,1,
+ 125,13,116,16,124,13,116,17,131,2,144,1,115,52,116,18,
+ 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,
+ 19,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,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,12,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,12,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,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,
+ 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,114,0,0,
+ 0,122,82,124,1,100,1,100,0,133,2,25,0,100,2,118,
+ 0,115,22,74,0,130,1,124,1,100,0,100,1,133,2,25,
+ 0,125,1,124,0,106,0,124,1,25,0,125,2,124,2,100,
+ 3,25,0,125,3,124,2,100,4,25,0,125,4,124,2,100,
+ 5,25,0,125,5,116,1,124,4,124,3,131,2,124,5,102,
+ 2,87,0,83,0,4,0,116,2,116,3,116,4,102,3,121,
+ 108,1,0,1,0,1,0,89,0,100,6,83,0,48,0,100,
+ 0,83,0,41,7,78,114,14,0,0,0,169,2,218,1,99,
+ 218,1,111,114,163,0,0,0,233,6,0,0,0,233,3,0,
+ 0,0,41,2,114,0,0,0,0,114,0,0,0,0,41,5,
+ 114,28,0,0,0,114,169,0,0,0,114,26,0,0,0,218,
+ 10,73,110,100,101,120,69,114,114,111,114,114,154,0,0,0,
+ 41,6,114,32,0,0,0,114,13,0,0,0,114,54,0,0,
+ 0,114,131,0,0,0,114,132,0,0,0,90,17,117,110,99,
+ 111,109,112,114,101,115,115,101,100,95,115,105,122,101,114,9,
+ 0,0,0,114,9,0,0,0,114,10,0,0,0,114,151,0,
+ 0,0,152,2,0,0,115,20,0,0,0,0,1,2,2,20,
+ 1,12,1,10,3,8,1,8,1,8,1,16,1,18,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,84,0,
+ 0,0,124,1,100,1,100,0,133,2,25,0,100,2,118,0,
+ 115,20,74,0,130,1,124,1,100,0,100,1,133,2,25,0,
+ 125,1,122,14,124,0,106,0,124,1,25,0,125,2,87,0,
+ 110,20,4,0,116,1,121,66,1,0,1,0,1,0,89,0,
+ 100,0,83,0,48,0,116,2,124,0,106,3,124,2,131,2,
+ 83,0,100,0,83,0,41,3,78,114,14,0,0,0,114,170,
+ 0,0,0,41,4,114,28,0,0,0,114,26,0,0,0,114,
+ 52,0,0,0,114,29,0,0,0,41,3,114,32,0,0,0,
+ 114,13,0,0,0,114,54,0,0,0,114,9,0,0,0,114,
+ 9,0,0,0,114,10,0,0,0,114,149,0,0,0,171,2,
+ 0,0,115,14,0,0,0,0,2,20,1,12,2,2,1,14,
+ 1,12,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,196,0,0,0,116,0,124,0,124,1,131,2,
+ 125,2,116,1,68,0,93,158,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,18,4,0,
+ 116,7,121,86,1,0,1,0,1,0,89,0,113,14,48,0,
+ 124,7,100,4,25,0,125,8,116,8,124,0,106,4,124,7,
+ 131,2,125,9,124,4,114,130,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,117,0,114,150,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,12,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,90,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,121,84,1,0,1,0,1,0,116,
7,124,3,131,1,130,1,89,0,110,2,48,0,100,0,83,
0,41,5,78,114,85,0,0,0,114,109,0,0,0,114,0,
0,0,0,41,1,218,7,66,121,116,101,115,73,79,41,8,
@@ -986,7 +983,7 @@ const unsigned char _Py_M__zipimport[] = {
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,
+ 1,2,1,18,1,12,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,
@@ -999,85 +996,85 @@ const unsigned char _Py_M__zipimport[] = {
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,
+ 0,0,0,67,0,0,0,115,70,0,0,0,124,0,106,0,
160,1,100,1,100,2,161,2,125,2,124,2,155,0,100,2,
124,1,155,0,157,3,125,3,122,16,124,0,106,2,160,3,
- 124,3,161,1,1,0,87,0,110,22,4,0,116,4,107,10,
- 114,66,1,0,1,0,1,0,89,0,100,3,83,0,48,0,
- 100,4,83,0,41,5,78,114,85,0,0,0,114,109,0,0,
- 0,70,84,41,5,114,38,0,0,0,114,19,0,0,0,114,
- 4,0,0,0,114,55,0,0,0,114,22,0,0,0,41,4,
- 114,32,0,0,0,114,59,0,0,0,114,179,0,0,0,114,
- 13,0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,
- 0,0,0,218,11,105,115,95,114,101,115,111,117,114,99,101,
- 239,2,0,0,115,14,0,0,0,0,3,14,1,14,1,2,
- 1,16,1,14,1,8,1,122,36,95,90,105,112,73,109,112,
- 111,114,116,82,101,115,111,117,114,99,101,82,101,97,100,101,
- 114,46,105,115,95,114,101,115,111,117,114,99,101,99,1,0,
- 0,0,0,0,0,0,0,0,0,0,9,0,0,0,9,0,
- 0,0,99,0,0,0,115,186,0,0,0,100,1,100,2,108,
- 0,109,1,125,1,1,0,124,1,124,0,106,2,160,3,124,
- 0,106,4,161,1,131,1,125,2,124,2,160,5,124,0,106,
- 2,106,6,161,1,125,3,124,3,106,7,100,3,107,2,115,
- 58,74,0,130,1,124,3,106,8,125,4,116,9,131,0,125,
- 5,124,0,106,2,106,10,68,0,93,102,125,6,122,18,124,
- 1,124,6,131,1,160,5,124,4,161,1,125,7,87,0,110,
- 24,4,0,116,11,107,10,114,124,1,0,1,0,1,0,89,
- 0,113,78,89,0,110,2,48,0,124,7,106,8,106,7,125,
- 8,116,12,124,8,131,1,100,1,107,2,114,156,124,7,106,
- 7,86,0,1,0,113,78,124,8,124,5,107,7,114,78,124,
- 5,160,13,124,8,161,1,1,0,124,8,86,0,1,0,113,
- 78,100,0,83,0,41,4,78,114,0,0,0,0,41,1,218,
- 4,80,97,116,104,114,60,0,0,0,41,14,90,7,112,97,
- 116,104,108,105,98,114,183,0,0,0,114,4,0,0,0,114,
- 56,0,0,0,114,38,0,0,0,90,11,114,101,108,97,116,
- 105,118,101,95,116,111,114,29,0,0,0,114,59,0,0,0,
- 90,6,112,97,114,101,110,116,218,3,115,101,116,114,28,0,
- 0,0,114,23,0,0,0,114,51,0,0,0,218,3,97,100,
- 100,41,9,114,32,0,0,0,114,183,0,0,0,90,13,102,
- 117,108,108,110,97,109,101,95,112,97,116,104,90,13,114,101,
- 108,97,116,105,118,101,95,112,97,116,104,90,12,112,97,99,
- 107,97,103,101,95,112,97,116,104,90,12,115,117,98,100,105,
- 114,115,95,115,101,101,110,218,8,102,105,108,101,110,97,109,
- 101,90,8,114,101,108,97,116,105,118,101,90,11,112,97,114,
- 101,110,116,95,110,97,109,101,114,9,0,0,0,114,9,0,
- 0,0,114,10,0,0,0,218,8,99,111,110,116,101,110,116,
- 115,250,2,0,0,115,34,0,0,0,0,8,12,1,18,1,
- 14,3,14,1,6,1,6,1,12,1,2,1,18,1,14,1,
- 10,5,8,1,12,1,10,1,8,1,10,1,122,33,95,90,
- 105,112,73,109,112,111,114,116,82,101,115,111,117,114,99,101,
- 82,101,97,100,101,114,46,99,111,110,116,101,110,116,115,78,
- 41,10,114,6,0,0,0,114,7,0,0,0,114,8,0,0,
- 0,114,84,0,0,0,114,81,0,0,0,114,34,0,0,0,
- 114,180,0,0,0,114,181,0,0,0,114,182,0,0,0,114,
- 187,0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,
- 0,0,0,114,10,0,0,0,114,80,0,0,0,212,2,0,
- 0,115,14,0,0,0,8,1,4,5,4,2,8,4,8,9,
- 8,6,8,11,114,80,0,0,0,41,45,114,84,0,0,0,
- 90,26,95,102,114,111,122,101,110,95,105,109,112,111,114,116,
- 108,105,98,95,101,120,116,101,114,110,97,108,114,21,0,0,
- 0,114,1,0,0,0,114,2,0,0,0,90,17,95,102,114,
- 111,122,101,110,95,105,109,112,111,114,116,108,105,98,114,76,
- 0,0,0,114,148,0,0,0,114,110,0,0,0,114,152,0,
- 0,0,114,67,0,0,0,114,131,0,0,0,90,7,95,95,
- 97,108,108,95,95,114,20,0,0,0,90,15,112,97,116,104,
- 95,115,101,112,97,114,97,116,111,114,115,114,18,0,0,0,
- 114,75,0,0,0,114,3,0,0,0,114,25,0,0,0,218,
- 4,116,121,112,101,114,70,0,0,0,114,113,0,0,0,114,
- 115,0,0,0,114,117,0,0,0,114,4,0,0,0,114,89,
- 0,0,0,114,36,0,0,0,114,37,0,0,0,114,35,0,
- 0,0,114,27,0,0,0,114,122,0,0,0,114,142,0,0,
- 0,114,144,0,0,0,114,52,0,0,0,114,147,0,0,0,
- 114,155,0,0,0,218,8,95,95,99,111,100,101,95,95,114,
- 153,0,0,0,114,159,0,0,0,114,161,0,0,0,114,169,
- 0,0,0,114,151,0,0,0,114,149,0,0,0,114,44,0,
- 0,0,114,80,0,0,0,114,9,0,0,0,114,9,0,0,
- 0,114,9,0,0,0,114,10,0,0,0,218,8,60,109,111,
- 100,117,108,101,62,1,0,0,0,115,88,0,0,0,4,16,
- 8,1,16,1,8,1,8,1,8,1,8,1,8,1,8,2,
- 8,3,6,1,14,3,16,4,4,2,8,2,4,1,4,1,
- 4,2,14,127,0,127,0,1,12,1,12,1,2,1,2,252,
- 4,9,8,4,8,9,8,31,8,126,2,254,2,29,4,5,
- 8,21,8,46,8,10,8,46,10,5,8,7,8,6,8,13,
- 8,19,8,15,8,26,
+ 124,3,161,1,1,0,87,0,110,20,4,0,116,4,121,64,
+ 1,0,1,0,1,0,89,0,100,3,83,0,48,0,100,4,
+ 83,0,41,5,78,114,85,0,0,0,114,109,0,0,0,70,
+ 84,41,5,114,38,0,0,0,114,19,0,0,0,114,4,0,
+ 0,0,114,55,0,0,0,114,22,0,0,0,41,4,114,32,
+ 0,0,0,114,59,0,0,0,114,179,0,0,0,114,13,0,
+ 0,0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,
+ 0,218,11,105,115,95,114,101,115,111,117,114,99,101,239,2,
+ 0,0,115,14,0,0,0,0,3,14,1,14,1,2,1,16,
+ 1,12,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,184,0,0,0,100,1,100,2,108,0,109,
+ 1,125,1,1,0,124,1,124,0,106,2,160,3,124,0,106,
+ 4,161,1,131,1,125,2,124,2,160,5,124,0,106,2,106,
+ 6,161,1,125,3,124,3,106,7,100,3,107,2,115,58,74,
+ 0,130,1,124,3,106,8,125,4,116,9,131,0,125,5,124,
+ 0,106,2,106,10,68,0,93,100,125,6,122,18,124,1,124,
+ 6,131,1,160,5,124,4,161,1,125,7,87,0,110,22,4,
+ 0,116,11,121,122,1,0,1,0,1,0,89,0,113,78,89,
+ 0,110,2,48,0,124,7,106,8,106,7,125,8,116,12,124,
+ 8,131,1,100,1,107,2,114,154,124,7,106,7,86,0,1,
+ 0,113,78,124,8,124,5,118,1,114,78,124,5,160,13,124,
+ 8,161,1,1,0,124,8,86,0,1,0,113,78,100,0,83,
+ 0,41,4,78,114,0,0,0,0,41,1,218,4,80,97,116,
+ 104,114,60,0,0,0,41,14,90,7,112,97,116,104,108,105,
+ 98,114,183,0,0,0,114,4,0,0,0,114,56,0,0,0,
+ 114,38,0,0,0,90,11,114,101,108,97,116,105,118,101,95,
+ 116,111,114,29,0,0,0,114,59,0,0,0,90,6,112,97,
+ 114,101,110,116,218,3,115,101,116,114,28,0,0,0,114,23,
+ 0,0,0,114,51,0,0,0,218,3,97,100,100,41,9,114,
+ 32,0,0,0,114,183,0,0,0,90,13,102,117,108,108,110,
+ 97,109,101,95,112,97,116,104,90,13,114,101,108,97,116,105,
+ 118,101,95,112,97,116,104,90,12,112,97,99,107,97,103,101,
+ 95,112,97,116,104,90,12,115,117,98,100,105,114,115,95,115,
+ 101,101,110,218,8,102,105,108,101,110,97,109,101,90,8,114,
+ 101,108,97,116,105,118,101,90,11,112,97,114,101,110,116,95,
+ 110,97,109,101,114,9,0,0,0,114,9,0,0,0,114,10,
+ 0,0,0,218,8,99,111,110,116,101,110,116,115,250,2,0,
+ 0,115,34,0,0,0,0,8,12,1,18,1,14,3,14,1,
+ 6,1,6,1,12,1,2,1,18,1,12,1,10,5,8,1,
+ 12,1,10,1,8,1,10,1,122,33,95,90,105,112,73,109,
+ 112,111,114,116,82,101,115,111,117,114,99,101,82,101,97,100,
+ 101,114,46,99,111,110,116,101,110,116,115,78,41,10,114,6,
+ 0,0,0,114,7,0,0,0,114,8,0,0,0,114,84,0,
+ 0,0,114,81,0,0,0,114,34,0,0,0,114,180,0,0,
+ 0,114,181,0,0,0,114,182,0,0,0,114,187,0,0,0,
+ 114,9,0,0,0,114,9,0,0,0,114,9,0,0,0,114,
+ 10,0,0,0,114,80,0,0,0,212,2,0,0,115,14,0,
+ 0,0,8,1,4,5,4,2,8,4,8,9,8,6,8,11,
+ 114,80,0,0,0,41,45,114,84,0,0,0,90,26,95,102,
+ 114,111,122,101,110,95,105,109,112,111,114,116,108,105,98,95,
+ 101,120,116,101,114,110,97,108,114,21,0,0,0,114,1,0,
+ 0,0,114,2,0,0,0,90,17,95,102,114,111,122,101,110,
+ 95,105,109,112,111,114,116,108,105,98,114,76,0,0,0,114,
+ 148,0,0,0,114,110,0,0,0,114,152,0,0,0,114,67,
+ 0,0,0,114,131,0,0,0,90,7,95,95,97,108,108,95,
+ 95,114,20,0,0,0,90,15,112,97,116,104,95,115,101,112,
+ 97,114,97,116,111,114,115,114,18,0,0,0,114,75,0,0,
+ 0,114,3,0,0,0,114,25,0,0,0,218,4,116,121,112,
+ 101,114,70,0,0,0,114,113,0,0,0,114,115,0,0,0,
+ 114,117,0,0,0,114,4,0,0,0,114,89,0,0,0,114,
+ 36,0,0,0,114,37,0,0,0,114,35,0,0,0,114,27,
+ 0,0,0,114,122,0,0,0,114,142,0,0,0,114,144,0,
+ 0,0,114,52,0,0,0,114,147,0,0,0,114,155,0,0,
+ 0,218,8,95,95,99,111,100,101,95,95,114,153,0,0,0,
+ 114,159,0,0,0,114,161,0,0,0,114,169,0,0,0,114,
+ 151,0,0,0,114,149,0,0,0,114,44,0,0,0,114,80,
+ 0,0,0,114,9,0,0,0,114,9,0,0,0,114,9,0,
+ 0,0,114,10,0,0,0,218,8,60,109,111,100,117,108,101,
+ 62,1,0,0,0,115,88,0,0,0,4,16,8,1,16,1,
+ 8,1,8,1,8,1,8,1,8,1,8,2,8,3,6,1,
+ 14,3,16,4,4,2,8,2,4,1,4,1,4,2,14,127,
+ 0,127,0,1,12,1,12,1,2,1,2,252,4,9,8,4,
+ 8,9,8,31,8,126,2,254,2,29,4,5,8,21,8,46,
+ 8,10,8,46,10,5,8,7,8,6,8,13,8,19,8,15,
+ 8,26,
};
diff --git a/Python/initconfig.c b/Python/initconfig.c
index 2e46999932f..493b4bb4406 100644
--- a/Python/initconfig.c
+++ b/Python/initconfig.c
@@ -63,7 +63,35 @@ static const char usage_3[] = "\
-W arg : warning control; arg is action:message:category:module:lineno\n\
also PYTHONWARNINGS=arg\n\
-x : skip first line of source, allowing use of non-Unix forms of #!cmd\n\
--X opt : set implementation-specific option\n\
+-X opt : set implementation-specific option. The following options are available:\n\
+\n\
+ -X faulthandler: enable faulthandler\n\
+ -X showrefcount: output the total reference count and number of used\n\
+ memory blocks when the program finishes or after each statement in the\n\
+ interactive interpreter. This only works on debug builds\n\
+ -X tracemalloc: start tracing Python memory allocations using the\n\
+ tracemalloc module. By default, only the most recent frame is stored in a\n\
+ traceback of a trace. Use -X tracemalloc=NFRAME to start tracing with a\n\
+ traceback limit of NFRAME frames\n\
+ -X importtime: show how long each import takes. It shows module name,\n\
+ cumulative time (including nested imports) and self time (excluding\n\
+ nested imports). Note that its output may be broken in multi-threaded\n\
+ application. Typical usage is python3 -X importtime -c 'import asyncio'\n\
+ -X dev: enable CPython’s “development mode”, introducing additional runtime\n\
+ checks which are too expensive to be enabled by default. Effect of the\n\
+ developer mode:\n\
+ * Add default warning filter, as -W default\n\
+ * Install debug hooks on memory allocators: see the PyMem_SetupDebugHooks() C function\n\
+ * Enable the faulthandler module to dump the Python traceback on a crash\n\
+ * Enable asyncio debug mode\n\
+ * Set the dev_mode attribute of sys.flags to True\n\
+ * io.IOBase destructor logs close() exceptions\n\
+ -X utf8: enable UTF-8 mode for operating system interfaces, overriding the default\n\
+ locale-aware mode. -X utf8=0 explicitly disables UTF-8 mode (even when it would\n\
+ otherwise activate automatically)\n\
+ -X pycache_prefix=PATH: enable writing .pyc files to a parallel tree rooted at the\n\
+ given directory instead of to the code tree\n\
+\n\
--check-hash-based-pycs always|default|never:\n\
control how Python invalidates hash-based .pyc files\n\
";
@@ -769,7 +797,6 @@ _PyConfig_Copy(PyConfig *config, const PyConfig *config2)
COPY_ATTR(tracemalloc);
COPY_ATTR(import_time);
COPY_ATTR(show_ref_count);
- COPY_ATTR(show_alloc_count);
COPY_ATTR(dump_refs);
COPY_ATTR(malloc_stats);
@@ -872,7 +899,6 @@ config_as_dict(const PyConfig *config)
SET_ITEM_INT(tracemalloc);
SET_ITEM_INT(import_time);
SET_ITEM_INT(show_ref_count);
- SET_ITEM_INT(show_alloc_count);
SET_ITEM_INT(dump_refs);
SET_ITEM_INT(malloc_stats);
SET_ITEM_WSTR(filesystem_encoding);
@@ -1660,9 +1686,6 @@ config_read(PyConfig *config)
if (config_get_xoption(config, L"showrefcount")) {
config->show_ref_count = 1;
}
- if (config_get_xoption(config, L"showalloccount")) {
- config->show_alloc_count = 1;
- }
status = config_read_complex_options(config);
if (_PyStatus_EXCEPTION(status)) {
diff --git a/Python/marshal.c b/Python/marshal.c
index ec6b3dadc02..4a23df1dcd8 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -734,7 +734,7 @@ r_byte(RFILE *p)
else {
const char *ptr = r_string(1, p);
if (ptr != NULL)
- c = *(unsigned char *) ptr;
+ c = *(const unsigned char *) ptr;
}
return c;
}
@@ -813,7 +813,7 @@ r_PyLong(RFILE *p)
if (ob == NULL)
return NULL;
- Py_SIZE(ob) = n > 0 ? size : -size;
+ Py_SET_SIZE(ob, n > 0 ? size : -size);
for (i = 0; i < size-1; i++) {
d = 0;
@@ -1696,7 +1696,7 @@ marshal_load(PyObject *module, PyObject *file)
if (!PyBytes_Check(data)) {
PyErr_Format(PyExc_TypeError,
"file.read() returned not bytes but %.100s",
- data->ob_type->tp_name);
+ Py_TYPE(data)->tp_name);
result = NULL;
}
else {
diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h
index e4f4a8c7791..538fdbe3e0b 100644
--- a/Python/opcode_targets.h
+++ b/Python/opcode_targets.h
@@ -81,7 +81,7 @@ static void *opcode_targets[256] = {
&&TARGET_INPLACE_OR,
&&_unknown_opcode,
&&_unknown_opcode,
- &&_unknown_opcode,
+ &&TARGET_LIST_TO_TUPLE,
&&TARGET_RETURN_VALUE,
&&TARGET_IMPORT_STAR,
&&TARGET_SETUP_ANNOTATIONS,
@@ -116,11 +116,11 @@ static void *opcode_targets[256] = {
&&TARGET_POP_JUMP_IF_FALSE,
&&TARGET_POP_JUMP_IF_TRUE,
&&TARGET_LOAD_GLOBAL,
+ &&TARGET_IS_OP,
+ &&TARGET_CONTAINS_OP,
&&_unknown_opcode,
&&_unknown_opcode,
- &&_unknown_opcode,
- &&_unknown_opcode,
- &&_unknown_opcode,
+ &&TARGET_JUMP_IF_NOT_EXC_MATCH,
&&TARGET_SETUP_FINALLY,
&&_unknown_opcode,
&&TARGET_LOAD_FAST,
@@ -148,23 +148,23 @@ static void *opcode_targets[256] = {
&&TARGET_SET_ADD,
&&TARGET_MAP_ADD,
&&TARGET_LOAD_CLASSDEREF,
- &&TARGET_BUILD_LIST_UNPACK,
- &&TARGET_BUILD_MAP_UNPACK,
- &&TARGET_BUILD_MAP_UNPACK_WITH_CALL,
- &&TARGET_BUILD_TUPLE_UNPACK,
- &&TARGET_BUILD_SET_UNPACK,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
+ &&_unknown_opcode,
&&TARGET_SETUP_ASYNC_WITH,
&&TARGET_FORMAT_VALUE,
&&TARGET_BUILD_CONST_KEY_MAP,
&&TARGET_BUILD_STRING,
- &&TARGET_BUILD_TUPLE_UNPACK_WITH_CALL,
+ &&_unknown_opcode,
&&_unknown_opcode,
&&TARGET_LOAD_METHOD,
&&TARGET_CALL_METHOD,
- &&_unknown_opcode,
- &&_unknown_opcode,
- &&_unknown_opcode,
- &&_unknown_opcode,
+ &&TARGET_LIST_EXTEND,
+ &&TARGET_SET_UPDATE,
+ &&TARGET_DICT_MERGE,
+ &&TARGET_DICT_UPDATE,
&&_unknown_opcode,
&&_unknown_opcode,
&&_unknown_opcode,
diff --git a/Python/pathconfig.c b/Python/pathconfig.c
index 363b7686bc4..e37b5612366 100644
--- a/Python/pathconfig.c
+++ b/Python/pathconfig.c
@@ -150,7 +150,7 @@ _PyWideStringList_Join(const PyWideStringList *list, wchar_t sep)
static PyStatus
_PyPathConfig_InitDLLPath(void)
{
- if (_Py_dll_path == NULL) {
+ if (_Py_dll_path != NULL) {
/* Already set: nothing to do */
return _PyStatus_OK();
}
@@ -240,9 +240,8 @@ config_init_module_search_paths(PyConfig *config, _PyPathConfig *pathconfig)
const wchar_t *sys_path = pathconfig->module_search_path;
const wchar_t delim = DELIM;
- const wchar_t *p = sys_path;
while (1) {
- p = wcschr(sys_path, delim);
+ const wchar_t *p = wcschr(sys_path, delim);
if (p == NULL) {
p = sys_path + wcslen(sys_path); /* End of string */
}
diff --git a/Python/peephole.c b/Python/peephole.c
index 714a4520ba8..baa217ad02d 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -12,10 +12,10 @@
#define UNCONDITIONAL_JUMP(op) (op==JUMP_ABSOLUTE || op==JUMP_FORWARD)
#define CONDITIONAL_JUMP(op) (op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \
- || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP)
+ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP || op==JUMP_IF_NOT_EXC_MATCH)
#define ABSOLUTE_JUMP(op) (op==JUMP_ABSOLUTE \
|| op==POP_JUMP_IF_FALSE || op==POP_JUMP_IF_TRUE \
- || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP)
+ || op==JUMP_IF_FALSE_OR_POP || op==JUMP_IF_TRUE_OR_POP || op==JUMP_IF_NOT_EXC_MATCH)
#define JUMPS_ON_TRUE(op) (op==POP_JUMP_IF_TRUE || op==JUMP_IF_TRUE_OR_POP)
#define GETJUMPTGT(arr, i) (get_arg(arr, i) / sizeof(_Py_CODEUNIT) + \
(ABSOLUTE_JUMP(_Py_OPCODE(arr[i])) ? 0 : i+1))
@@ -194,6 +194,7 @@ markblocks(_Py_CODEUNIT *code, Py_ssize_t len)
case JUMP_IF_TRUE_OR_POP:
case POP_JUMP_IF_FALSE:
case POP_JUMP_IF_TRUE:
+ case JUMP_IF_NOT_EXC_MATCH:
case JUMP_ABSOLUTE:
case SETUP_FINALLY:
case SETUP_WITH:
@@ -493,6 +494,7 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
case POP_JUMP_IF_TRUE:
case JUMP_IF_FALSE_OR_POP:
case JUMP_IF_TRUE_OR_POP:
+ case JUMP_IF_NOT_EXC_MATCH:
j = blocks[j / sizeof(_Py_CODEUNIT)] * sizeof(_Py_CODEUNIT);
break;
diff --git a/Python/pyhash.c b/Python/pyhash.c
index 4c0b929586f..faac730d79d 100644
--- a/Python/pyhash.c
+++ b/Python/pyhash.c
@@ -129,7 +129,7 @@ _Py_HashDouble(double v)
}
Py_hash_t
-_Py_HashPointer(void *p)
+_Py_HashPointer(const void *p)
{
Py_hash_t x;
size_t y = (size_t)p;
@@ -366,7 +366,7 @@ static PyHash_FuncDef PyHash_Func = {fnv, "fnv", 8 * SIZEOF_PY_HASH_T,
static uint64_t
siphash24(uint64_t k0, uint64_t k1, const void *src, Py_ssize_t src_sz) {
uint64_t b = (uint64_t)src_sz << 56;
- const uint8_t *in = (uint8_t*)src;
+ const uint8_t *in = (const uint8_t*)src;
uint64_t v0 = k0 ^ 0x736f6d6570736575ULL;
uint64_t v1 = k1 ^ 0x646f72616e646f6dULL;
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 4f05dfc3490..fbeebbdf99d 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -10,6 +10,7 @@
#include "pycore_initconfig.h"
#include "pycore_fileutils.h"
#include "pycore_hamt.h"
+#include "pycore_object.h"
#include "pycore_pathconfig.h"
#include "pycore_pyerrors.h"
#include "pycore_pylifecycle.h"
@@ -749,7 +750,6 @@ pyinit_config(_PyRuntimeState *runtime,
if (_PyStatus_EXCEPTION(status)) {
return status;
}
- config = &tstate->interp->config;
*tstate_p = tstate;
status = pycore_interp_init(tstate);
@@ -1174,10 +1174,6 @@ Py_Initialize(void)
}
-#ifdef COUNT_ALLOCS
-extern void _Py_dump_counts(FILE*);
-#endif
-
/* Flush stdout and stderr */
static int
@@ -1341,7 +1337,7 @@ Py_FinalizeEx(void)
wait_for_thread_shutdown(tstate);
// Make any remaining pending calls.
- _Py_FinishPendingCalls(runtime);
+ _Py_FinishPendingCalls(tstate);
/* The interpreter is still entirely intact at this point, and the
* exit funcs may be relying on that. In particular, if some thread
@@ -1394,13 +1390,6 @@ Py_FinalizeEx(void)
* XXX I haven't seen a real-life report of either of these.
*/
_PyGC_CollectIfEnabled();
-#ifdef COUNT_ALLOCS
- /* With COUNT_ALLOCS, it helps to run GC multiple times:
- each collection might release some types from the type
- list, so they become garbage. */
- while (_PyGC_CollectIfEnabled() > 0)
- /* nothing */;
-#endif
/* Clear all loghooks */
/* We want minimal exposure of this function, so define the extern
@@ -1452,10 +1441,6 @@ Py_FinalizeEx(void)
/* unload faulthandler module */
_PyFaulthandler_Fini();
- /* Debugging stuff */
-#ifdef COUNT_ALLOCS
- _Py_dump_counts(stderr);
-#endif
/* dump hash stats */
_PyHash_Fini();
@@ -1817,7 +1802,7 @@ create_stdio(const PyConfig *config, PyObject* io,
write_through = Py_True;
else
write_through = Py_False;
- if (isatty && buffered_stdio)
+ if (buffered_stdio && (isatty || fd == fileno(stderr)))
line_buffering = Py_True;
else
line_buffering = Py_False;
diff --git a/Python/pymath.c b/Python/pymath.c
index 24b804223ee..a08a0e79615 100644
--- a/Python/pymath.c
+++ b/Python/pymath.c
@@ -79,3 +79,18 @@ round(double x)
return copysign(y, x);
}
#endif /* HAVE_ROUND */
+
+static const unsigned int BitLengthTable[32] = {
+ 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
+ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
+};
+
+unsigned int _Py_bit_length(unsigned long d) {
+ unsigned int d_bits = 0;
+ while (d >= 32) {
+ d_bits += 6;
+ d >>= 6;
+ }
+ d_bits += BitLengthTable[d];
+ return d_bits;
+}
diff --git a/Python/pystate.c b/Python/pystate.c
index d792380de46..ebc17ea5a72 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -806,6 +806,10 @@ PyThreadState_Clear(PyThreadState *tstate)
Py_CLEAR(tstate->async_gen_finalizer);
Py_CLEAR(tstate->context);
+
+ if (tstate->on_delete != NULL) {
+ tstate->on_delete(tstate->on_delete_data);
+ }
}
@@ -830,9 +834,7 @@ tstate_delete_common(PyThreadState *tstate,
if (tstate->next)
tstate->next->prev = tstate->prev;
HEAD_UNLOCK(runtime);
- if (tstate->on_delete != NULL) {
- tstate->on_delete(tstate->on_delete_data);
- }
+
PyMem_RawFree(tstate);
if (gilstate->autoInterpreterState &&
diff --git a/Python/pystrtod.c b/Python/pystrtod.c
index 94dc4818c2f..1c8202c7761 100644
--- a/Python/pystrtod.c
+++ b/Python/pystrtod.c
@@ -1,6 +1,7 @@
/* -*- Mode: C; c-file-style: "python" -*- */
#include
+#include "pycore_dtoa.h"
#include
/* Case-insensitive string match used for nan and inf detection; t should be
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index b68a0b5572a..f4ded2e24a3 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -12,6 +12,7 @@
#include "Python-ast.h"
#undef Yield /* undefine macro conflicting with */
+#include "pycore_object.h"
#include "pycore_pyerrors.h"
#include "pycore_pylifecycle.h"
#include "pycore_pystate.h"
diff --git a/Python/pytime.c b/Python/pytime.c
index 54ddfc952b8..9b2b74af5c0 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -1059,7 +1059,7 @@ _PyTime_localtime(time_t t, struct tm *tm)
return 0;
#else /* !MS_WINDOWS */
-#ifdef _AIX
+#if defined(_AIX) && (SIZEOF_TIME_T < 8)
/* bpo-34373: AIX does not return NULL if t is too small or too large */
if (t < -2145916800 /* 1902-01-01 */
|| t > 2145916800 /* 2038-01-01 */) {
diff --git a/Python/symtable.c b/Python/symtable.c
index b8713588b9a..30482d99b3c 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -1717,6 +1717,8 @@ static int
symtable_visit_annotations(struct symtable *st, stmt_ty s,
arguments_ty a, expr_ty returns)
{
+ if (a->posonlyargs && !symtable_visit_argannotations(st, a->posonlyargs))
+ return 0;
if (a->args && !symtable_visit_argannotations(st, a->args))
return 0;
if (a->vararg && a->vararg->annotation)
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 9f866a2a3d2..cacff529758 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -519,7 +519,7 @@ sys_breakpointhook(PyObject *self, PyObject *const *args, Py_ssize_t nargs, PyOb
return NULL;
}
PyMem_RawFree(envar);
- PyObject *retval = _PyObject_Vectorcall(hook, args, nargs, keywords);
+ PyObject *retval = PyObject_Vectorcall(hook, args, nargs, keywords);
Py_DECREF(hook);
return retval;
@@ -840,7 +840,7 @@ sys_intern_impl(PyObject *module, PyObject *s)
}
else {
_PyErr_Format(tstate, PyExc_TypeError,
- "can't intern %.400s", s->ob_type->tp_name);
+ "can't intern %.400s", Py_TYPE(s)->tp_name);
return NULL;
}
}
@@ -1656,7 +1656,7 @@ static Py_ssize_t
sys_getrefcount_impl(PyObject *module, PyObject *object)
/*[clinic end generated code: output=5fd477f2264b85b2 input=bf474efd50a21535]*/
{
- return object->ob_refcnt;
+ return Py_REFCNT(object);
}
#ifdef Py_REF_DEBUG
@@ -1685,20 +1685,6 @@ sys_getallocatedblocks_impl(PyObject *module)
return _Py_GetAllocatedBlocks();
}
-#ifdef COUNT_ALLOCS
-/*[clinic input]
-sys.getcounts
-[clinic start generated code]*/
-
-static PyObject *
-sys_getcounts_impl(PyObject *module)
-/*[clinic end generated code: output=20df00bc164f43cb input=ad2ec7bda5424953]*/
-{
- extern PyObject *_Py_get_counts(void);
-
- return _Py_get_counts();
-}
-#endif
/*[clinic input]
sys._getframe
@@ -1879,7 +1865,6 @@ static PyMethodDef sys_methods[] = {
SYS_GETDEFAULTENCODING_METHODDEF
SYS_GETDLOPENFLAGS_METHODDEF
SYS_GETALLOCATEDBLOCKS_METHODDEF
- SYS_GETCOUNTS_METHODDEF
#ifdef DYNAMIC_EXECUTION_PROFILE
{"getdxp", _Py_GetDXProfile, METH_VARARGS},
#endif
diff --git a/README.rst b/README.rst
index ae56ff02527..5971d4aefcb 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,4 @@
-This is Python version 3.9.0 alpha 2
+This is Python version 3.9.0 alpha 3
====================================
.. image:: https://travis-ci.org/python/cpython.svg?branch=master
@@ -22,7 +22,7 @@ This is Python version 3.9.0 alpha 2
:target: https://python.zulipchat.com
-Copyright (c) 2001-2019 Python Software Foundation. All rights reserved.
+Copyright (c) 2001-2020 Python Software Foundation. All rights reserved.
See the end of this file for further copyright and license information.
@@ -250,7 +250,7 @@ See :pep:`596` for Python 3.9 release details.
Copyright and License Information
---------------------------------
-Copyright (c) 2001-2019 Python Software Foundation. All rights reserved.
+Copyright (c) 2001-2020 Python Software Foundation. All rights reserved.
Copyright (c) 2000 BeOpen.com. All rights reserved.
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index 403d8a47656..382e29a28ab 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -1182,14 +1182,14 @@ class CLanguage(Language):
lines = [self.group_to_variable_name(g) + " = 1;" for g in group_ids]
lines = "\n".join(lines)
- s = """
+ s = """\
case {count}:
if (!PyArg_ParseTuple(args, "{format_units}:{name}", {parse_arguments})) {{
goto exit;
}}
{group_booleans}
break;
-"""[1:]
+"""
s = linear_format(s, group_booleans=lines)
s = s.format_map(d)
add(s)
@@ -3585,17 +3585,14 @@ class self_converter(CConverter):
cls = self.function.cls
if ((kind in (METHOD_NEW, METHOD_INIT)) and cls and cls.typedef):
+ type_object = self.function.cls.type_object
if kind == METHOD_NEW:
- passed_in_type = self.name
+ type_check = '({} == {})'.format(self.name, type_object)
else:
- passed_in_type = 'Py_TYPE({})'.format(self.name)
+ type_check = 'Py_IS_TYPE({}, {})'.format(self.name, type_object)
- line = '({passed_in_type} == {type_object}) &&\n '
- d = {
- 'type_object': self.function.cls.type_object,
- 'passed_in_type': passed_in_type
- }
- template_dict['self_type_check'] = line.format_map(d)
+ line = '{} &&\n '.format(type_check)
+ template_dict['self_type_check'] = line
diff --git a/Tools/msi/README.txt b/Tools/msi/README.txt
index f5656b971b3..82635f3d2c2 100644
--- a/Tools/msi/README.txt
+++ b/Tools/msi/README.txt
@@ -11,7 +11,7 @@ Tools/msi/buildrelease.bat script and environment variables:
set PYTHON=
set SPHINXBUILD=
- set PATH=;
+ set PATH=;
;%PATH%
buildrelease.bat [-x86] [-x64] [-D] [-B]
@@ -106,7 +106,7 @@ Tools/msi/buildrelease.bat script:
set PYTHON=
set SPHINXBUILD=
- set PATH=;
+ set PATH=;
;%PATH%
buildrelease.bat [-x86] [-x64] [-D] [-B]
@@ -131,7 +131,7 @@ installer. Official releases of Python must be signed.
Ensure %PYTHON% and %SPHINXBUILD% are set when passing this option. You
may also set %HTMLHELP% to the Html Help Compiler (hhc.exe), or put HHC
-on your PATH or in externals/. You will also need Mercurial (hg.exe) on
+on your PATH or in externals/. You will also need Git (git.exe) on
your PATH.
If WiX is not found on your system, it will be automatically downloaded
diff --git a/Tools/scripts/generate_opcode_h.py b/Tools/scripts/generate_opcode_h.py
index b184ffa1709..873f82156e2 100644
--- a/Tools/scripts/generate_opcode_h.py
+++ b/Tools/scripts/generate_opcode_h.py
@@ -22,11 +22,6 @@ footer = """
remaining private.*/
#define EXCEPT_HANDLER 257
-
-enum cmp_op {PyCmp_LT=Py_LT, PyCmp_LE=Py_LE, PyCmp_EQ=Py_EQ, PyCmp_NE=Py_NE,
- PyCmp_GT=Py_GT, PyCmp_GE=Py_GE, PyCmp_IN, PyCmp_NOT_IN,
- PyCmp_IS, PyCmp_IS_NOT, PyCmp_EXC_MATCH, PyCmp_BAD};
-
#define HAS_ARG(op) ((op) >= HAVE_ARGUMENT)
#ifdef __cplusplus
diff --git a/configure b/configure
index a2c7ddf595d..846116e1128 100755
--- a/configure
+++ b/configure
@@ -1483,80 +1483,102 @@ Optional Features:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--enable-universalsdk[=SDKDIR]
- Build fat binary against Mac OS X SDK
+ create a universal binary build. SDKDIR specifies
+ which macOS SDK should be used to perform the build,
+ see Mac/README.rst. (default is no)
--enable-framework[=INSTALLDIR]
- Build (MacOSX|Darwin) framework
- --enable-shared disable/enable building shared python library
- --enable-profiling enable C-level code profiling
- --enable-optimizations Enable expensive, stable optimizations (PGO, etc).
- Disabled by default.
+ create a Python.framework rather than a traditional
+ Unix install. optional INSTALLDIR specifies the
+ installation path. see Mac/README.rst (default is
+ no)
+ --enable-shared enable building a shared Python library (default is
+ no)
+ --enable-profiling enable C-level code profiling with gprof (default is
+ no)
+ --enable-optimizations enable expensive, stable optimizations (PGO, etc.)
+ (default is no)
--enable-loadable-sqlite-extensions
- support loadable extensions in _sqlite module
- --enable-ipv6 Enable ipv6 (with ipv4) support
- --disable-ipv6 Disable ipv6 support
- --enable-big-digits[=BITS]
- use big digits for Python longs [[BITS=30]]
+ support loadable extensions in _sqlite module, see
+ Doc/library/sqlite3.rst (default is no)
+ --enable-ipv6 enable ipv6 (with ipv4) support, see
+ Doc/library/socket.rst (default is yes if supported)
+ --enable-big-digits[=15|30]
+ use big digits (30 or 15 bits) for Python longs
+ (default is system-dependent)]
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-universal-archs=ARCH
- select architectures for universal build ("32-bit",
- "64-bit", "3-way", "intel", "intel-32", "intel-64",
- or "all")
+ specify the kind of universal binary that should be
+ created. this option is only valid when
+ --enable-universalsdk is set; options are:
+ ("32-bit", "64-bit", "3-way", "intel", "intel-32",
+ "intel-64", or "all") see Mac/README.rst
--with-framework-name=FRAMEWORK
- specify an alternate name of the framework built
- with --enable-framework
- --with-cxx-main=
- compile main() and link python executable with C++
- compiler
- --with-suffix=.exe set executable suffix
- --with-pydebug build with Py_DEBUG defined
+ specify the name for the python framework on macOS
+ only valid when --enable-framework is set. see
+ Mac/README.rst (default is 'Python')
+ --with-cxx-main[=COMPILER]
+ compile main() and link Python executable with C++
+ compiler specified in COMPILER (default is $CXX)
+ --with-suffix=SUFFIX set executable suffix to SUFFIX (default is '.exe')
+ --with-pydebug build with Py_DEBUG defined (default is no)
--with-trace-refs enable tracing references for debugging purpose
- --with-assertions build with C assertions enabled
- --with-lto Enable Link Time Optimization in any build. Disabled
- by default.
+ (default is no)
+ --with-assertions build with C assertions enabled (default is no)
+ --with-lto enable Link-Time-Optimization in any build (default
+ is no)
--with-hash-algorithm=[fnv|siphash24]
- select hash algorithm
+ select hash algorithm for use in Python/pyhash.c
+ (default is SipHash24)
--with-address-sanitizer
- enable AddressSanitizer (asan)
- --with-memory-sanitizer enable MemorySanitizer (msan)
+ enable AddressSanitizer memory error detector,
+ 'asan' (default is no)
+ --with-memory-sanitizer enable MemorySanitizer allocation error detector,
+ 'msan' (default is no)
--with-undefined-behavior-sanitizer
- enable UndefinedBehaviorSanitizer (ubsan)
- --with-libs='lib1 ...' link against additional libs
+ enable UndefinedBehaviorSanitizer undefined
+ behaviour detector, 'ubsan' (default is no)
+ --with-libs='lib1 ...' link against additional libs (default is no)
--with-system-expat build pyexpat module using an installed expat
- library
- --with-system-ffi build _ctypes module using an installed ffi library
+ library, see Doc/library/pyexpat.rst (default is no)
+ --with-system-ffi build _ctypes module using an installed ffi library,
+ see Doc/library/ctypes.rst (default is
+ system-dependent)
--with-system-libmpdec build _decimal module using an installed libmpdec
- library
+ library, see Doc/library/decimal.rst (default is no)
--with-tcltk-includes='-I...'
override search for Tcl and Tk include files
--with-tcltk-libs='-L...'
override search for Tcl and Tk libs
--with-dbmliborder=db1:db2:...
- order to check db backends for dbm. Valid value is a
- colon separated string with the backend names
- `ndbm', `gdbm' and `bdb'.
- --with(out)-doc-strings disable/enable documentation strings
- --with(out)-pymalloc disable/enable specialized mallocs
- --with(out)-c-locale-coercion
- disable/enable C locale coercion to a UTF-8 based
- locale
- --with-valgrind Enable Valgrind support
- --with(out)-dtrace disable/enable DTrace support
- --with-libm=STRING math library
- --with-libc=STRING C library
- --with(out)-computed-gotos
- Use computed gotos in evaluation loop (enabled by
+ override order to check db backends for dbm; a valid
+ value is a colon separated string with the backend
+ names `ndbm', `gdbm' and `bdb'.
+ --with-doc-strings enable documentation strings (default is yes)
+ --with-pymalloc enable specialized mallocs (default is yes)
+ --with-c-locale-coercion
+ enable C locale coercion to a UTF-8 based locale
+ (default is yes)
+ --with-valgrind enable Valgrind support (default is no)
+ --with-dtrace enable DTrace support (default is no)
+ --with-libm=STRING override libm math library to STRING (default is
+ system-dependent)
+ --with-libc=STRING override libc C library to STRING (default is
+ system-dependent)
+ --with-computed-gotos enable computed gotos in evaluation loop (enabled by
default on supported compilers)
- --with(out)-ensurepip=[=upgrade]
- "install" or "upgrade" using bundled pip
- --with-openssl=DIR root of the OpenSSL directory
+ --with-ensurepip[=install|upgrade|no]
+ "install" or "upgrade" using bundled pip (default is
+ upgrade)
+ --with-openssl=DIR override root of the OpenSSL directory to DIR
--with-ssl-default-suites=[python|openssl|STRING]
- Override default cipher suites string, python: use
+ override default cipher suites string, python: use
Python's preferred selection (default), openssl:
leave OpenSSL's defaults untouched, STRING: use a
- custom string, PROTOCOL_SSLv2 ignores the setting
+ custom string, PROTOCOL_SSLv2 ignores the setting,
+ see Doc/library/ssl.rst
Some influential environment variables:
MACHDEP name for machine-dependent library files
@@ -3248,7 +3270,7 @@ _ACEOF
##AC_ARG_WITH(dyld,
## AS_HELP_STRING([--with-dyld],
-## [Use (OpenStep|Rhapsody) dynamic linker]))
+## [use (OpenStep|Rhapsody) dynamic linker]))
##
# Set name for machine-dependent library files
@@ -3417,6 +3439,12 @@ $as_echo "#define _BSD_SOURCE 1" >>confdefs.h
define_xopen_source=no
;;
+ # On HP-UX, defining _XOPEN_SOURCE to 600 or greater hides
+ # chroot() and other functions
+ hp*|HP*)
+ define_xopen_source=no
+ ;;
+
esac
if test $define_xopen_source = yes
@@ -10281,6 +10309,7 @@ fi
+
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
@@ -11375,7 +11404,6 @@ $as_echo "$with_dtrace" >&6; }
DTRACE=
-DFLAGS=
DTRACE_HEADERS=
DTRACE_OBJS=
@@ -11441,7 +11469,7 @@ if ${ac_cv_dtrace_link+:} false; then :
else
ac_cv_dtrace_link=no
echo 'BEGIN{}' > conftest.d
- "$DTRACE" -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
+ "$DTRACE" "$DFLAGS" -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
ac_cv_dtrace_link=yes
fi
@@ -11537,7 +11565,7 @@ for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
memrchr mbrtowc mkdirat mkfifo \
madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \
posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \
- pthread_condattr_setclock pthread_init pthread_kill putenv pwrite pwritev pwritev2 \
+ pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \
readlink readlinkat readv realpath renameat \
sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \
setgid sethostname \
@@ -11547,7 +11575,7 @@ for ac_func in alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
sigaction sigaltstack sigfillset siginterrupt sigpending sigrelse \
sigtimedwait sigwait sigwaitinfo snprintf strftime strlcpy strsignal symlinkat sync \
sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
- truncate uname unlinkat unsetenv utimensat utimes waitid waitpid wait3 wait4 \
+ truncate uname unlinkat utimensat utimes waitid waitpid wait3 wait4 \
wcscoll wcsftime wcsxfrm wmemcmp writev _getpty rtpSpawn
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
diff --git a/configure.ac b/configure.ac
index 57dca35723c..840caf352d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -149,7 +149,10 @@ CONFIG_ARGS="$ac_configure_args"
AC_MSG_CHECKING([for --enable-universalsdk])
AC_ARG_ENABLE(universalsdk,
- AS_HELP_STRING([--enable-universalsdk@<:@=SDKDIR@:>@], [Build fat binary against Mac OS X SDK]),
+ AS_HELP_STRING([--enable-universalsdk@<:@=SDKDIR@:>@],
+ [create a universal binary build.
+ SDKDIR specifies which macOS SDK should be used to perform the build,
+ see Mac/README.rst. (default is no)]),
[
case $enableval in
yes)
@@ -212,7 +215,11 @@ fi
AC_SUBST(LIPO_32BIT_FLAGS)
AC_MSG_CHECKING(for --with-universal-archs)
AC_ARG_WITH(universal-archs,
- AS_HELP_STRING([--with-universal-archs=ARCH], [select architectures for universal build ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")]),
+ AS_HELP_STRING([--with-universal-archs=ARCH],
+ [specify the kind of universal binary that should be created. this option is
+ only valid when --enable-universalsdk is set; options are:
+ ("32-bit", "64-bit", "3-way", "intel", "intel-32", "intel-64", or "all")
+ see Mac/README.rst]),
[
UNIVERSAL_ARCHS="$withval"
],
@@ -226,7 +233,9 @@ fi
AC_ARG_WITH(framework-name,
AS_HELP_STRING([--with-framework-name=FRAMEWORK],
- [specify an alternate name of the framework built with --enable-framework]),
+ [specify the name for the python framework on macOS
+ only valid when --enable-framework is set. see Mac/README.rst
+ (default is 'Python')]),
[
PYTHONFRAMEWORK=${withval}
PYTHONFRAMEWORKDIR=${withval}.framework
@@ -238,7 +247,10 @@ AC_ARG_WITH(framework-name,
])
dnl quadrigraphs "@<:@" and "@:>@" produce "[" and "]" in the output
AC_ARG_ENABLE(framework,
- AS_HELP_STRING([--enable-framework@<:@=INSTALLDIR@:>@], [Build (MacOSX|Darwin) framework]),
+ AS_HELP_STRING([--enable-framework@<:@=INSTALLDIR@:>@],
+ [create a Python.framework rather than a traditional Unix install.
+ optional INSTALLDIR specifies the installation path. see Mac/README.rst
+ (default is no)]),
[
case $enableval in
yes)
@@ -357,7 +369,7 @@ AC_DEFINE_UNQUOTED(_PYTHONFRAMEWORK, "${PYTHONFRAMEWORK}", [framework name])
##AC_ARG_WITH(dyld,
## AS_HELP_STRING([--with-dyld],
-## [Use (OpenStep|Rhapsody) dynamic linker]))
+## [use (OpenStep|Rhapsody) dynamic linker]))
##
# Set name for machine-dependent library files
AC_ARG_VAR([MACHDEP], [name for machine-dependent library files])
@@ -521,6 +533,12 @@ case $ac_sys_system/$ac_sys_release in
define_xopen_source=no
;;
+ # On HP-UX, defining _XOPEN_SOURCE to 600 or greater hides
+ # chroot() and other functions
+ hp*|HP*)
+ define_xopen_source=no
+ ;;
+
esac
if test $define_xopen_source = yes
@@ -647,8 +665,8 @@ AC_SUBST(CXX)
AC_SUBST(MAINCC)
AC_MSG_CHECKING(for --with-cxx-main=)
AC_ARG_WITH(cxx_main,
- AS_HELP_STRING([--with-cxx-main=],
- [compile main() and link python executable with C++ compiler]),
+ AS_HELP_STRING([--with-cxx-main@<:@=COMPILER@:>@],
+ [compile main() and link Python executable with C++ compiler specified in COMPILER (default is $CXX)]),
[
case $withval in
@@ -928,7 +946,7 @@ esac
AC_EXEEXT
AC_MSG_CHECKING(for --with-suffix)
AC_ARG_WITH(suffix,
- AS_HELP_STRING([--with-suffix=.exe], [set executable suffix]),
+ AS_HELP_STRING([--with-suffix=SUFFIX], [set executable suffix to SUFFIX (default is '.exe')]),
[
case $withval in
no) EXEEXT=;;
@@ -1050,7 +1068,7 @@ AC_MSG_RESULT($GNULD)
AC_MSG_CHECKING(for --enable-shared)
AC_ARG_ENABLE(shared,
- AS_HELP_STRING([--enable-shared], [disable/enable building shared python library]))
+ AS_HELP_STRING([--enable-shared], [enable building a shared Python library (default is no)]))
if test -z "$enable_shared"
then
@@ -1065,7 +1083,7 @@ AC_MSG_RESULT($enable_shared)
AC_MSG_CHECKING(for --enable-profiling)
AC_ARG_ENABLE(profiling,
- AS_HELP_STRING([--enable-profiling], [enable C-level code profiling]))
+ AS_HELP_STRING([--enable-profiling], [enable C-level code profiling with gprof (default is no)]))
if test "x$enable_profiling" = xyes; then
ac_save_cc="$CC"
CC="$CC -pg"
@@ -1216,7 +1234,7 @@ ABIFLAGS=""
# Check for --with-pydebug
AC_MSG_CHECKING(for --with-pydebug)
AC_ARG_WITH(pydebug,
- AS_HELP_STRING([--with-pydebug], [build with Py_DEBUG defined]),
+ AS_HELP_STRING([--with-pydebug], [build with Py_DEBUG defined (default is no)]),
[
if test "$withval" != no
then
@@ -1233,7 +1251,9 @@ fi],
# --with-trace-refs
AC_MSG_CHECKING(for --with-trace-refs)
AC_ARG_WITH(trace-refs,
- AS_HELP_STRING([--with-trace-refs],[enable tracing references for debugging purpose]),,
+ AS_HELP_STRING(
+ [--with-trace-refs],
+ [enable tracing references for debugging purpose (default is no)]),,
with_trace_refs=no)
AC_MSG_RESULT($with_trace_refs)
@@ -1247,7 +1267,7 @@ fi
assertions='false'
AC_MSG_CHECKING(for --with-assertions)
AC_ARG_WITH(assertions,
- AS_HELP_STRING([--with-assertions],[build with C assertions enabled]),
+ AS_HELP_STRING([--with-assertions],[build with C assertions enabled (default is no)]),
[
if test "$withval" != no
then
@@ -1268,7 +1288,9 @@ AC_SUBST(DEF_MAKE_ALL_RULE)
AC_SUBST(DEF_MAKE_RULE)
Py_OPT='false'
AC_MSG_CHECKING(for --enable-optimizations)
-AC_ARG_ENABLE(optimizations, AS_HELP_STRING([--enable-optimizations], [Enable expensive, stable optimizations (PGO, etc). Disabled by default.]),
+AC_ARG_ENABLE(optimizations, AS_HELP_STRING(
+ [--enable-optimizations],
+ [enable expensive, stable optimizations (PGO, etc.) (default is no)]),
[
if test "$enableval" != no
then
@@ -1323,7 +1345,7 @@ fi
# Enable LTO flags
AC_MSG_CHECKING(for --with-lto)
-AC_ARG_WITH(lto, AS_HELP_STRING([--with-lto], [Enable Link Time Optimization in any build. Disabled by default.]),
+AC_ARG_WITH(lto, AS_HELP_STRING([--with-lto], [enable Link-Time-Optimization in any build (default is no)]),
[
if test "$withval" != no
then
@@ -2907,7 +2929,7 @@ AC_MSG_CHECKING(for --with-hash-algorithm)
dnl quadrigraphs "@<:@" and "@:>@" produce "[" and "]" in the output
AC_ARG_WITH(hash_algorithm,
AS_HELP_STRING([--with-hash-algorithm=@<:@fnv|siphash24@:>@],
- [select hash algorithm]),
+ [select hash algorithm for use in Python/pyhash.c (default is SipHash24)]),
[
AC_MSG_RESULT($withval)
case "$withval" in
@@ -2927,7 +2949,7 @@ esac
AC_MSG_CHECKING(for --with-address-sanitizer)
AC_ARG_WITH(address_sanitizer,
AS_HELP_STRING([--with-address-sanitizer],
- [enable AddressSanitizer (asan)]),
+ [enable AddressSanitizer memory error detector, 'asan' (default is no)]),
[
AC_MSG_RESULT($withval)
BASECFLAGS="-fsanitize=address -fno-omit-frame-pointer $BASECFLAGS"
@@ -2940,7 +2962,7 @@ with_pymalloc="no"
AC_MSG_CHECKING(for --with-memory-sanitizer)
AC_ARG_WITH(memory_sanitizer,
AS_HELP_STRING([--with-memory-sanitizer],
- [enable MemorySanitizer (msan)]),
+ [enable MemorySanitizer allocation error detector, 'msan' (default is no)]),
[
AC_MSG_RESULT($withval)
BASECFLAGS="-fsanitize=memory -fsanitize-memory-track-origins=2 -fno-omit-frame-pointer $BASECFLAGS"
@@ -2953,7 +2975,7 @@ with_pymalloc="no"
AC_MSG_CHECKING(for --with-undefined-behavior-sanitizer)
AC_ARG_WITH(undefined_behavior_sanitizer,
AS_HELP_STRING([--with-undefined-behavior-sanitizer],
- [enable UndefinedBehaviorSanitizer (ubsan)]),
+ [enable UndefinedBehaviorSanitizer undefined behaviour detector, 'ubsan' (default is no)]),
[
AC_MSG_RESULT($withval)
BASECFLAGS="-fsanitize=undefined $BASECFLAGS"
@@ -2967,7 +2989,7 @@ AC_CHECK_LIB(socket, socket, [LIBS="-lsocket $LIBS"], [], $LIBS) # SVR4 sockets
AC_MSG_CHECKING(for --with-libs)
AC_ARG_WITH(libs,
- AS_HELP_STRING([--with-libs='lib1 ...'], [link against additional libs]),
+ AS_HELP_STRING([--with-libs='lib1 ...'], [link against additional libs (default is no)]),
[
AC_MSG_RESULT($withval)
LIBS="$withval $LIBS"
@@ -2979,7 +3001,7 @@ PKG_PROG_PKG_CONFIG
# Check for use of the system expat library
AC_MSG_CHECKING(for --with-system-expat)
AC_ARG_WITH(system_expat,
- AS_HELP_STRING([--with-system-expat], [build pyexpat module using an installed expat library]),
+ AS_HELP_STRING([--with-system-expat], [build pyexpat module using an installed expat library, see Doc/library/pyexpat.rst (default is no)]),
[],
[with_system_expat="no"])
@@ -2988,7 +3010,7 @@ AC_MSG_RESULT($with_system_expat)
# Check for use of the system libffi library
AC_MSG_CHECKING(for --with-system-ffi)
AC_ARG_WITH(system_ffi,
- AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library]),,,)
+ AS_HELP_STRING([--with-system-ffi], [build _ctypes module using an installed ffi library, see Doc/library/ctypes.rst (default is system-dependent)]),,,)
if test "$ac_sys_system" = "Darwin"
then
@@ -3022,7 +3044,7 @@ AC_SUBST(LIBFFI_INCLUDEDIR)
# Check for use of the system libmpdec library
AC_MSG_CHECKING(for --with-system-libmpdec)
AC_ARG_WITH(system_libmpdec,
- AS_HELP_STRING([--with-system-libmpdec], [build _decimal module using an installed libmpdec library]),
+ AS_HELP_STRING([--with-system-libmpdec], [build _decimal module using an installed libmpdec library, see Doc/library/decimal.rst (default is no)]),
[],
[with_system_libmpdec="no"])
@@ -3031,7 +3053,8 @@ AC_MSG_RESULT($with_system_libmpdec)
# Check for support for loadable sqlite extensions
AC_MSG_CHECKING(for --enable-loadable-sqlite-extensions)
AC_ARG_ENABLE(loadable-sqlite-extensions,
- AS_HELP_STRING([--enable-loadable-sqlite-extensions], [support loadable extensions in _sqlite module]),
+ AS_HELP_STRING([--enable-loadable-sqlite-extensions],
+ [support loadable extensions in _sqlite module, see Doc/library/sqlite3.rst (default is no)]),
[],
[enable_loadable_sqlite_extensions="no"])
@@ -3068,7 +3091,7 @@ fi
# Check for --with-dbmliborder
AC_MSG_CHECKING(for --with-dbmliborder)
AC_ARG_WITH(dbmliborder,
- AS_HELP_STRING([--with-dbmliborder=db1:db2:...], [order to check db backends for dbm. Valid value is a colon separated string with the backend names `ndbm', `gdbm' and `bdb'.]),
+ AS_HELP_STRING([--with-dbmliborder=db1:db2:...], [override order to check db backends for dbm; a valid value is a colon separated string with the backend names `ndbm', `gdbm' and `bdb'.]),
[
if test x$with_dbmliborder = xyes
then
@@ -3240,8 +3263,8 @@ fi
AH_TEMPLATE(ENABLE_IPV6, [Define if --enable-ipv6 is specified])
AC_MSG_CHECKING([if --enable-ipv6 is specified])
AC_ARG_ENABLE(ipv6,
-[ --enable-ipv6 Enable ipv6 (with ipv4) support
- --disable-ipv6 Disable ipv6 support],
+ AS_HELP_STRING([--enable-ipv6],
+ [enable ipv6 (with ipv4) support, see Doc/library/socket.rst (default is yes if supported)]),
[ case "$enableval" in
no)
AC_MSG_RESULT(no)
@@ -3412,7 +3435,7 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ /* CAN_RAW_FD_FRAMES available check */
# Check for --with-doc-strings
AC_MSG_CHECKING(for --with-doc-strings)
AC_ARG_WITH(doc-strings,
- AS_HELP_STRING([--with(out)-doc-strings], [disable/enable documentation strings]))
+ AS_HELP_STRING([--with-doc-strings], [enable documentation strings (default is yes)]))
if test -z "$with_doc_strings"
then with_doc_strings="yes"
@@ -3427,7 +3450,7 @@ AC_MSG_RESULT($with_doc_strings)
# Check for Python-specific malloc support
AC_MSG_CHECKING(for --with-pymalloc)
AC_ARG_WITH(pymalloc,
- AS_HELP_STRING([--with(out)-pymalloc], [disable/enable specialized mallocs]))
+ AS_HELP_STRING([--with-pymalloc], [enable specialized mallocs (default is yes)]))
if test -z "$with_pymalloc"
then
@@ -3443,8 +3466,8 @@ AC_MSG_RESULT($with_pymalloc)
# Check for --with-c-locale-coercion
AC_MSG_CHECKING(for --with-c-locale-coercion)
AC_ARG_WITH(c-locale-coercion,
- AS_HELP_STRING([--with(out)-c-locale-coercion],
- [disable/enable C locale coercion to a UTF-8 based locale]))
+ AS_HELP_STRING([--with-c-locale-coercion],
+ [enable C locale coercion to a UTF-8 based locale (default is yes)]))
if test -z "$with_c_locale_coercion"
then
@@ -3460,7 +3483,7 @@ AC_MSG_RESULT($with_c_locale_coercion)
# Check for Valgrind support
AC_MSG_CHECKING([for --with-valgrind])
AC_ARG_WITH([valgrind],
- AS_HELP_STRING([--with-valgrind], [Enable Valgrind support]),,
+ AS_HELP_STRING([--with-valgrind], [enable Valgrind support (default is no)]),,
with_valgrind=no)
AC_MSG_RESULT([$with_valgrind])
if test "$with_valgrind" != no; then
@@ -3474,7 +3497,7 @@ fi
# Check for DTrace support
AC_MSG_CHECKING(for --with-dtrace)
AC_ARG_WITH(dtrace,
- AS_HELP_STRING([--with(out)-dtrace],[disable/enable DTrace support]),,
+ AS_HELP_STRING([--with-dtrace],[enable DTrace support (default is no)]),,
with_dtrace=no)
AC_MSG_RESULT($with_dtrace)
@@ -3483,7 +3506,6 @@ AC_SUBST(DFLAGS)
AC_SUBST(DTRACE_HEADERS)
AC_SUBST(DTRACE_OBJS)
DTRACE=
-DFLAGS=
DTRACE_HEADERS=
DTRACE_OBJS=
@@ -3504,7 +3526,7 @@ then
[ac_cv_dtrace_link], [dnl
ac_cv_dtrace_link=no
echo 'BEGIN{}' > conftest.d
- "$DTRACE" -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
+ "$DTRACE" "$DFLAGS" -G -s conftest.d -o conftest.o > /dev/null 2>&1 && \
ac_cv_dtrace_link=yes
])
if test "$ac_cv_dtrace_link" = "yes"; then
@@ -3581,7 +3603,7 @@ AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
memrchr mbrtowc mkdirat mkfifo \
madvise mkfifoat mknod mknodat mktime mremap nice openat pathconf pause pipe2 plock poll \
posix_fallocate posix_fadvise posix_spawn posix_spawnp pread preadv preadv2 \
- pthread_condattr_setclock pthread_init pthread_kill putenv pwrite pwritev pwritev2 \
+ pthread_condattr_setclock pthread_init pthread_kill pwrite pwritev pwritev2 \
readlink readlinkat readv realpath renameat \
sem_open sem_timedwait sem_getvalue sem_unlink sendfile setegid seteuid \
setgid sethostname \
@@ -3591,7 +3613,7 @@ AC_CHECK_FUNCS(alarm accept4 setitimer getitimer bind_textdomain_codeset chown \
sigaction sigaltstack sigfillset siginterrupt sigpending sigrelse \
sigtimedwait sigwait sigwaitinfo snprintf strftime strlcpy strsignal symlinkat sync \
sysconf tcgetpgrp tcsetpgrp tempnam timegm times tmpfile tmpnam tmpnam_r \
- truncate uname unlinkat unsetenv utimensat utimes waitid waitpid wait3 wait4 \
+ truncate uname unlinkat utimensat utimes waitid waitpid wait3 wait4 \
wcscoll wcsftime wcsxfrm wmemcmp writev _getpty rtpSpawn)
# Force lchmod off for Linux. Linux disallows changing the mode of symbolic
@@ -4321,7 +4343,7 @@ Darwin) ;;
esac
AC_MSG_CHECKING(for --with-libm=STRING)
AC_ARG_WITH(libm,
- AS_HELP_STRING([--with-libm=STRING], [math library]),
+ AS_HELP_STRING([--with-libm=STRING], [override libm math library to STRING (default is system-dependent)]),
[
if test "$withval" = no
then LIBM=
@@ -4337,7 +4359,7 @@ fi],
AC_SUBST(LIBC)
AC_MSG_CHECKING(for --with-libc=STRING)
AC_ARG_WITH(libc,
- AS_HELP_STRING([--with-libc=STRING], [C library]),
+ AS_HELP_STRING([--with-libc=STRING], [override libc C library to STRING (default is system-dependent)]),
[
if test "$withval" = no
then LIBC=
@@ -4555,7 +4577,7 @@ AC_CHECK_DECLS([RTLD_LAZY, RTLD_NOW, RTLD_GLOBAL, RTLD_LOCAL, RTLD_NODELETE, RTL
# determine what size digit to use for Python's longs
AC_MSG_CHECKING([digit size for Python's longs])
AC_ARG_ENABLE(big-digits,
-AS_HELP_STRING([--enable-big-digits@<:@=BITS@:>@],[use big digits for Python longs [[BITS=30]]]),
+AS_HELP_STRING([--enable-big-digits@<:@=15|30@:>@],[use big digits (30 or 15 bits) for Python longs (default is system-dependent)]]),
[case $enable_big_digits in
yes)
enable_big_digits=30 ;;
@@ -5267,8 +5289,8 @@ fi
# Check for --with-computed-gotos
AC_MSG_CHECKING(for --with-computed-gotos)
AC_ARG_WITH(computed-gotos,
- AS_HELP_STRING([--with(out)-computed-gotos],
- [Use computed gotos in evaluation loop (enabled by default on supported compilers)]),
+ AS_HELP_STRING([--with-computed-gotos],
+ [enable computed gotos in evaluation loop (enabled by default on supported compilers)]),
[
if test "$withval" = yes
then
@@ -5464,8 +5486,8 @@ fi
# ensurepip option
AC_MSG_CHECKING(for ensurepip)
AC_ARG_WITH(ensurepip,
- [AS_HELP_STRING([--with(out)-ensurepip=@<:@=upgrade@:>@],
- ["install" or "upgrade" using bundled pip])],
+ [AS_HELP_STRING([--with-ensurepip@<:@=install|upgrade|no@:>@],
+ ["install" or "upgrade" using bundled pip (default is upgrade)])],
[],
[with_ensurepip=upgrade])
AS_CASE($with_ensurepip,
@@ -5621,11 +5643,11 @@ AH_TEMPLATE(PY_SSL_DEFAULT_CIPHER_STRING,
AC_MSG_CHECKING(for --with-ssl-default-suites)
AC_ARG_WITH(ssl-default-suites,
AS_HELP_STRING([--with-ssl-default-suites=@<:@python|openssl|STRING@:>@],
- [Override default cipher suites string,
+ [override default cipher suites string,
python: use Python's preferred selection (default),
openssl: leave OpenSSL's defaults untouched,
STRING: use a custom string,
- PROTOCOL_SSLv2 ignores the setting]),
+ PROTOCOL_SSLv2 ignores the setting, see Doc/library/ssl.rst]),
[
AC_MSG_RESULT($withval)
case "$withval" in
diff --git a/m4/ax_check_openssl.m4 b/m4/ax_check_openssl.m4
index 28e48cbefb6..2846fd14c49 100644
--- a/m4/ax_check_openssl.m4
+++ b/m4/ax_check_openssl.m4
@@ -39,7 +39,7 @@ AC_DEFUN([AX_CHECK_OPENSSL], [
found=false
AC_ARG_WITH([openssl],
[AS_HELP_STRING([--with-openssl=DIR],
- [root of the OpenSSL directory])],
+ [override root of the OpenSSL directory to DIR])],
[
case "$withval" in
"" | y | ye | yes | n | no)
diff --git a/pyconfig.h.in b/pyconfig.h.in
index e053be15a11..b5602134d70 100644
--- a/pyconfig.h.in
+++ b/pyconfig.h.in
@@ -802,9 +802,6 @@
/* Define to 1 if you have the header file. */
#undef HAVE_PTY_H
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
/* Define to 1 if you have the `pwrite' function. */
#undef HAVE_PWRITE
@@ -1263,9 +1260,6 @@
/* Define to 1 if you have the `unlinkat' function. */
#undef HAVE_UNLINKAT
-/* Define to 1 if you have the `unsetenv' function. */
-#undef HAVE_UNSETENV
-
/* Define if you have a useable wchar_t type defined in wchar.h; useable means
wchar_t must be an unsigned type with at least 16 bits. (see
Include/unicodeobject.h). */
diff --git a/setup.py b/setup.py
index 02f523c42d3..51e67fe4a55 100644
--- a/setup.py
+++ b/setup.py
@@ -734,12 +734,14 @@ class PyBuildExt(build_ext):
# math library functions, e.g. sin()
self.add(Extension('math', ['mathmodule.c'],
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE'],
extra_objects=[shared_math],
depends=['_math.h', shared_math],
libraries=['m']))
# complex math library functions
self.add(Extension('cmath', ['cmathmodule.c'],
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE'],
extra_objects=[shared_math],
depends=['_math.h', shared_math],
libraries=['m']))
| |