Python-checkins
Threads by month
- ----- 2024 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
June 2021
- 1 participants
- 404 discussions
bpo-44313: generate LOAD_ATTR/CALL_FUNCTION for top-level imported objects (GH-26677)
by markshannon 30 Jun '21
by markshannon 30 Jun '21
30 Jun '21
https://github.com/python/cpython/commit/1b28187a0e3e914ee48de8032cbba0a965…
commit: 1b28187a0e3e914ee48de8032cbba0a965dd5563
branch: main
author: Batuhan Taskaya <batuhan(a)python.org>
committer: markshannon <mark(a)hotpy.org>
date: 2021-06-30T23:53:36+01:00
summary:
bpo-44313: generate LOAD_ATTR/CALL_FUNCTION for top-level imported objects (GH-26677)
files:
A Misc/NEWS.d/next/Core and Builtins/2021-06-10-16-10-39.bpo-44313.34RjI8.rst
M Include/internal/pycore_symtable.h
M Lib/importlib/_bootstrap_external.py
M Lib/test/test_compile.py
M Programs/test_frozenmain.h
M Python/compile.c
M Python/importlib_external.h
M Python/importlib_zipimport.h
M Python/symtable.c
diff --git a/Include/internal/pycore_symtable.h b/Include/internal/pycore_symtable.h
index f3505f8949be4b..4c1b7d3519ccf9 100644
--- a/Include/internal/pycore_symtable.h
+++ b/Include/internal/pycore_symtable.h
@@ -72,6 +72,7 @@ extern PyTypeObject PySTEntry_Type;
#define PySTEntry_Check(op) Py_IS_TYPE(op, &PySTEntry_Type)
+extern long _PyST_GetSymbol(PySTEntryObject *, PyObject *);
extern int _PyST_GetScope(PySTEntryObject *, PyObject *);
extern struct symtable* _PySymtable_Build(
diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py
index 21ac22d9464ee6..c8b8ece5f57aea 100644
--- a/Lib/importlib/_bootstrap_external.py
+++ b/Lib/importlib/_bootstrap_external.py
@@ -360,6 +360,7 @@ def _write_atomic(path, data, mode=0o666):
# Python 3.11a1 3455 (add MAKE_CELL bpo-43693)
# Python 3.11a1 3456 (interleave cell args bpo-43693)
# Python 3.11a1 3457 (Change localsplus to a bytes object bpo-43693)
+# Python 3.11a1 3458 (imported objects now don't use LOAD_METHOD/CALL_METHOD)
#
# MAGIC must change whenever the bytecode emitted by the compiler may no
diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py
index 6dc1c383f8f2c9..7de607ca4c7898 100644
--- a/Lib/test/test_compile.py
+++ b/Lib/test/test_compile.py
@@ -6,6 +6,7 @@
import _ast
import tempfile
import types
+import textwrap
from test import support
from test.support import script_helper
from test.support.os_helper import FakePath
@@ -791,6 +792,41 @@ def or_false(x):
self.assertIn('LOAD_', opcodes[0].opname)
self.assertEqual('RETURN_VALUE', opcodes[1].opname)
+ def test_imported_load_method(self):
+ sources = [
+ """\
+ import os
+ def foo():
+ return os.uname()
+ """,
+ """\
+ import os as operating_system
+ def foo():
+ return operating_system.uname()
+ """,
+ """\
+ from os import path
+ def foo(x):
+ return path.join(x)
+ """,
+ """\
+ from os import path as os_path
+ def foo(x):
+ return os_path.join(x)
+ """
+ ]
+ for source in sources:
+ namespace = {}
+ exec(textwrap.dedent(source), namespace)
+ func = namespace['foo']
+ with self.subTest(func=func.__name__):
+ opcodes = list(dis.get_instructions(func))
+ instructions = [opcode.opname for opcode in opcodes]
+ self.assertNotIn('LOAD_METHOD', instructions)
+ self.assertNotIn('CALL_METHOD', instructions)
+ self.assertIn('LOAD_ATTR', instructions)
+ self.assertIn('CALL_FUNCTION', instructions)
+
def test_lineno_procedure_call(self):
def call():
(
diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-06-10-16-10-39.bpo-44313.34RjI8.rst b/Misc/NEWS.d/next/Core and Builtins/2021-06-10-16-10-39.bpo-44313.34RjI8.rst
new file mode 100644
index 00000000000000..e48d4a471f802f
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2021-06-10-16-10-39.bpo-44313.34RjI8.rst
@@ -0,0 +1,4 @@
+Directly imported objects and modules (through import and from import
+statements) don't generate ``LOAD_METHOD``/``CALL_METHOD`` for directly
+accessed objects on their namespace. They now use the regular
+``LOAD_ATTR``/``CALL_FUNCTION``.
diff --git a/Programs/test_frozenmain.h b/Programs/test_frozenmain.h
index 519b91526d157b..10b13503b8e66a 100644
--- a/Programs/test_frozenmain.h
+++ b/Programs/test_frozenmain.h
@@ -4,7 +4,7 @@ unsigned char M_test_frozenmain[] = {
0,0,0,0,0,115,86,0,0,0,100,0,100,1,108,0,
90,0,100,0,100,1,108,1,90,1,101,2,100,2,131,1,
1,0,101,2,100,3,101,0,106,3,131,2,1,0,101,1,
- 160,4,161,0,100,4,25,0,90,5,100,5,68,0,93,14,
+ 106,4,131,0,100,4,25,0,90,5,100,5,68,0,93,14,
90,6,101,2,100,6,101,6,155,0,100,7,101,5,101,6,
25,0,155,0,157,4,131,1,1,0,113,26,100,1,83,0,
41,8,233,0,0,0,0,78,122,18,70,114,111,122,101,110,
diff --git a/Python/compile.c b/Python/compile.c
index 52d29877a5f0ad..99e500f746185d 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -4278,6 +4278,23 @@ check_index(struct compiler *c, expr_ty e, expr_ty s)
}
}
+static int
+is_import_originated(struct compiler *c, expr_ty e)
+{
+ /* Check whether the global scope has an import named
+ e, if it is a Name object. For not traversing all the
+ scope stack every time this function is called, it will
+ only check the global scope to determine whether something
+ is imported or not. */
+
+ if (e->kind != Name_kind) {
+ return 0;
+ }
+
+ long flags = _PyST_GetSymbol(c->c_st->st_top, e->v.Name.id);
+ return flags & DEF_IMPORT;
+}
+
// Return 1 if the method call was optimized, -1 if not, and 0 on error.
static int
maybe_optimize_method_call(struct compiler *c, expr_ty e)
@@ -4291,6 +4308,12 @@ maybe_optimize_method_call(struct compiler *c, expr_ty e)
if (meth->kind != Attribute_kind || meth->v.Attribute.ctx != Load) {
return -1;
}
+
+ /* Check that the base object is not something that is imported */
+ if (is_import_originated(c, meth->v.Attribute.value)) {
+ return -1;
+ }
+
/* Check that there aren't too many arguments */
argsl = asdl_seq_LEN(args);
kwdsl = asdl_seq_LEN(kwds);
diff --git a/Python/importlib_external.h b/Python/importlib_external.h
index c6da76f39da093..f0d4138a0803e7 100644
--- a/Python/importlib_external.h
+++ b/Python/importlib_external.h
@@ -25,7 +25,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
90,38,100,40,160,39,100,41,100,42,161,2,100,43,23,0,
90,40,101,41,160,42,101,40,100,42,161,2,90,43,100,44,
90,44,100,45,90,45,100,46,103,1,90,46,101,8,114,192,
- 101,46,160,47,100,47,161,1,1,0,101,2,160,48,161,0,
+ 101,46,160,47,100,47,161,1,1,0,101,2,106,48,131,0,
90,49,100,48,103,1,90,50,101,50,4,0,90,51,90,52,
100,113,100,1,100,49,156,1,100,50,100,51,132,3,90,53,
100,52,100,53,132,0,90,54,100,54,100,55,132,0,90,55,
@@ -249,8 +249,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,218,11,95,112,97,116,104,95,115,112,108,105,116,132,0,
0,0,115,10,0,0,0,2,128,22,2,8,1,8,1,28,
1,114,9,0,0,0,114,73,0,0,0,99,1,0,0,0,
- 0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
- 115,10,0,0,0,116,0,160,1,124,0,161,1,83,0,41,
+ 0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
+ 115,10,0,0,0,116,0,106,1,124,0,131,1,83,0,41,
2,122,126,83,116,97,116,32,116,104,101,32,112,97,116,104,
46,10,10,32,32,32,32,77,97,100,101,32,97,32,115,101,
112,97,114,97,116,101,32,102,117,110,99,116,105,111,110,32,
@@ -290,7 +290,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,243,2,0,0,0,10,2,114,9,0,0,0,114,80,0,
0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3,
0,0,0,3,0,0,0,115,22,0,0,0,124,0,115,6,
- 116,0,160,1,161,0,125,0,116,2,124,0,100,1,131,2,
+ 116,0,106,1,131,0,125,0,116,2,124,0,100,1,131,2,
83,0,41,3,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,78,41,3,114,19,0,0,
@@ -300,7 +300,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
6,0,0,0,4,2,8,1,10,1,114,9,0,0,0,114,
83,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,
0,4,0,0,0,3,0,0,0,115,62,0,0,0,124,0,
- 115,4,100,1,83,0,116,0,160,1,124,0,161,1,100,2,
+ 115,4,100,1,83,0,116,0,106,1,124,0,131,1,100,2,
25,0,160,2,100,3,100,4,161,2,125,1,116,3,124,1,
131,1,100,5,107,4,111,30,124,1,160,4,100,6,161,1,
112,30,124,1,160,5,100,4,161,1,83,0,41,8,250,30,
@@ -322,15 +322,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,114,9,0,0,0,233,182,1,0,0,99,3,0,0,
0,0,0,0,0,0,0,0,0,11,0,0,0,3,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,
+ 131,1,161,2,125,3,116,2,106,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,9,0,116,7,160,8,124,4,100,3,
- 161,2,53,0,125,5,124,5,160,9,124,1,161,1,1,0,
+ 64,0,131,3,125,4,9,0,116,7,106,8,124,4,100,3,
+ 131,2,53,0,125,5,124,5,160,9,124,1,161,1,1,0,
100,4,4,0,4,0,131,3,1,0,110,11,35,0,49,0,
115,48,119,4,37,0,1,0,1,0,1,0,89,0,1,0,
- 1,0,116,2,160,10,124,3,124,0,161,2,1,0,100,4,
+ 1,0,116,2,106,10,124,3,124,0,131,2,1,0,100,4,
83,0,35,0,4,0,116,11,121,88,1,0,1,0,1,0,
- 9,0,116,2,160,12,124,3,161,1,1,0,130,0,35,0,
+ 9,0,116,2,106,12,124,3,131,1,1,0,130,0,35,0,
4,0,116,11,121,87,1,0,1,0,1,0,89,0,130,0,
37,0,37,0,119,0,119,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,
@@ -369,10 +369,10 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,5,0,0,0,3,0,
0,0,115,80,1,0,0,124,1,100,1,117,1,114,26,116,
- 0,160,1,100,2,116,2,161,2,1,0,124,2,100,1,117,
+ 0,106,1,100,2,116,2,131,2,1,0,124,2,100,1,117,
1,114,20,100,3,125,3,116,3,124,3,131,1,130,1,124,
- 1,114,24,100,4,110,1,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,
+ 1,114,24,100,4,110,1,100,5,125,2,116,4,106,5,124,
+ 0,131,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,
57,116,11,100,7,131,1,130,1,100,4,160,12,124,6,114,
@@ -384,7 +384,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,114,162,116,22,124,
- 4,131,1,115,134,116,23,116,4,160,24,161,0,124,4,131,
+ 4,131,1,115,134,116,23,116,4,106,24,131,0,124,4,131,
2,125,4,124,4,100,5,25,0,100,11,107,2,114,152,124,
4,100,8,25,0,116,25,118,1,114,152,124,4,100,12,100,
1,133,2,25,0,125,4,116,23,116,8,106,21,124,4,160,
@@ -476,7 +476,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
111,115,116,95,102,105,108,101,110,97,109,101,218,8,102,105,
108,101,110,97,109,101,115,12,0,0,0,32,32,32,32,32,
32,32,32,32,32,32,32,114,7,0,0,0,218,17,99,97,
- 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,132,
+ 99,104,101,95,102,114,111,109,95,115,111,117,114,99,101,133,
1,0,0,115,72,0,0,0,8,18,6,1,2,1,4,255,
8,2,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,1,8,2,8,1,
@@ -485,7 +485,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,9,0,0,0,114,121,0,0,0,99,1,0,0,0,0,
0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,115,
40,1,0,0,116,0,106,1,106,2,100,1,117,0,114,10,
- 116,3,100,2,131,1,130,1,116,4,160,5,124,0,161,1,
+ 116,3,100,2,131,1,130,1,116,4,106,5,124,0,131,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,51,116,0,106,7,
160,8,116,9,161,1,125,4,124,1,160,10,124,4,116,11,
@@ -558,7 +558,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
97,115,101,95,102,105,108,101,110,97,109,101,115,10,0,0,
0,32,32,32,32,32,32,32,32,32,32,114,7,0,0,0,
218,17,115,111,117,114,99,101,95,102,114,111,109,95,99,97,
- 99,104,101,203,1,0,0,115,60,0,0,0,12,9,8,1,
+ 99,104,101,204,1,0,0,115,60,0,0,0,12,9,8,1,
10,1,12,1,4,1,10,1,12,1,14,1,16,1,4,1,
4,1,12,1,8,1,8,1,2,1,8,255,10,2,8,1,
14,1,8,1,16,1,10,1,4,1,2,1,8,255,16,2,
@@ -593,7 +593,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
218,1,95,90,9,101,120,116,101,110,115,105,111,110,218,11,
115,111,117,114,99,101,95,112,97,116,104,115,5,0,0,0,
32,32,32,32,32,114,7,0,0,0,218,15,95,103,101,116,
- 95,115,111,117,114,99,101,102,105,108,101,243,1,0,0,115,
+ 95,115,111,117,114,99,101,102,105,108,101,244,1,0,0,115,
26,0,0,0,12,7,4,1,16,1,24,1,4,1,2,1,
10,1,2,128,16,1,16,1,2,128,16,1,2,254,115,12,
0,0,0,159,4,36,0,164,15,53,7,190,1,53,7,114,
@@ -607,7 +607,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
218,5,116,117,112,108,101,114,127,0,0,0,114,121,0,0,
0,114,107,0,0,0,114,113,0,0,0,41,1,114,120,0,
0,0,115,1,0,0,0,32,114,7,0,0,0,218,11,95,
- 103,101,116,95,99,97,99,104,101,100,6,2,0,0,115,22,
+ 103,101,116,95,99,97,99,104,101,100,7,2,0,0,115,22,
0,0,0,14,1,2,1,8,1,2,128,12,1,6,1,2,
128,14,1,4,1,4,2,2,251,115,12,0,0,0,136,3,
12,0,140,7,22,7,162,1,22,7,114,137,0,0,0,99,
@@ -623,7 +623,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
3,114,75,0,0,0,114,77,0,0,0,114,76,0,0,0,
41,2,114,65,0,0,0,114,78,0,0,0,115,2,0,0,
0,32,32,114,7,0,0,0,218,10,95,99,97,108,99,95,
- 109,111,100,101,18,2,0,0,115,18,0,0,0,2,2,12,
+ 109,111,100,101,19,2,0,0,115,18,0,0,0,2,2,12,
1,2,128,12,1,8,1,2,128,8,3,4,1,2,251,115,
12,0,0,0,129,5,7,0,135,9,18,7,153,1,18,7,
114,139,0,0,0,99,1,0,0,0,0,0,0,0,0,0,
@@ -662,7 +662,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
97,114,103,115,218,6,109,101,116,104,111,100,115,5,0,0,
0,32,32,32,32,128,114,7,0,0,0,218,19,95,99,104,
101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114,
- 38,2,0,0,115,18,0,0,0,8,1,8,1,10,1,4,
+ 39,2,0,0,115,18,0,0,0,8,1,8,1,10,1,4,
1,12,1,2,255,2,1,6,255,24,2,114,9,0,0,0,
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,
@@ -680,22 +680,22 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,85,0,0,0,115,3,
0,0,0,32,32,32,114,7,0,0,0,218,5,95,119,114,
- 97,112,51,2,0,0,115,10,0,0,0,8,1,10,1,18,
+ 97,112,52,2,0,0,115,10,0,0,0,8,1,10,1,18,
1,2,128,18,1,114,9,0,0,0,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,114,69,0,0,0,41,2,218,10,95,
98,111,111,116,115,116,114,97,112,114,157,0,0,0,41,3,
114,146,0,0,0,114,147,0,0,0,114,157,0,0,0,115,
3,0,0,0,96,32,32,114,7,0,0,0,218,11,95,99,
- 104,101,99,107,95,110,97,109,101,30,2,0,0,115,14,0,
+ 104,101,99,107,95,110,97,109,101,31,2,0,0,115,14,0,
0,0,2,128,14,8,8,10,8,1,8,2,10,6,4,1,
114,9,0,0,0,114,159,0,0,0,99,2,0,0,0,0,
- 0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,115,
- 72,0,0,0,116,0,160,1,100,1,116,2,161,2,1,0,
+ 0,0,0,0,0,0,0,5,0,0,0,3,0,0,0,115,
+ 72,0,0,0,116,0,106,1,100,1,116,2,131,2,1,0,
124,0,160,3,124,1,161,1,92,2,125,2,125,3,124,2,
100,2,117,0,114,34,116,4,124,3,131,1,114,34,100,3,
- 125,4,116,0,160,1,124,4,160,5,124,3,100,4,25,0,
- 161,1,116,6,161,2,1,0,124,2,83,0,41,5,122,155,
+ 125,4,116,0,106,1,124,4,160,5,124,3,100,4,25,0,
+ 161,1,116,6,131,2,1,0,124,2,83,0,41,5,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,
@@ -722,7 +722,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,115,5,0,0,0,32,
32,32,32,32,114,7,0,0,0,218,17,95,102,105,110,100,
- 95,109,111,100,117,108,101,95,115,104,105,109,61,2,0,0,
+ 95,109,111,100,117,108,101,95,115,104,105,109,62,2,0,0,
115,16,0,0,0,6,7,2,2,4,254,14,6,16,1,4,
1,22,1,4,1,114,9,0,0,0,114,166,0,0,0,99,
3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,
@@ -790,7 +790,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,116,97,105,108,115,90,5,109,97,103,105,99,114,117,0,
0,0,114,17,0,0,0,115,6,0,0,0,32,32,32,32,
32,32,114,7,0,0,0,218,13,95,99,108,97,115,115,105,
- 102,121,95,112,121,99,81,2,0,0,115,28,0,0,0,12,
+ 102,121,95,112,121,99,82,2,0,0,115,28,0,0,0,12,
16,8,1,16,1,12,1,16,1,12,1,10,1,12,1,8,
1,16,1,8,2,16,1,16,1,4,1,114,9,0,0,0,
114,175,0,0,0,99,5,0,0,0,0,0,0,0,0,0,
@@ -845,7 +845,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
105,122,101,114,141,0,0,0,114,174,0,0,0,114,117,0,
0,0,115,6,0,0,0,32,32,32,32,32,32,114,7,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,114,2,0,0,115,
+ 109,101,115,116,97,109,112,95,112,121,99,115,2,0,0,115,
18,0,0,0,24,19,10,1,12,1,16,1,8,1,22,1,
2,255,22,2,8,254,114,9,0,0,0,114,179,0,0,0,
99,4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,
@@ -892,13 +892,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
104,97,115,104,114,141,0,0,0,114,174,0,0,0,115,4,
0,0,0,32,32,32,32,114,7,0,0,0,218,18,95,118,
97,108,105,100,97,116,101,95,104,97,115,104,95,112,121,99,
- 142,2,0,0,115,14,0,0,0,16,17,2,1,8,1,4,
+ 143,2,0,0,115,14,0,0,0,16,17,2,1,8,1,4,
255,2,2,6,254,4,255,114,9,0,0,0,114,181,0,0,
0,99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,
- 0,0,3,0,0,0,115,76,0,0,0,116,0,160,1,124,
- 0,161,1,125,4,116,2,124,4,116,3,131,2,114,28,116,
+ 0,0,3,0,0,0,115,76,0,0,0,116,0,106,1,124,
+ 0,131,1,125,4,116,2,124,4,116,3,131,2,114,28,116,
4,160,5,100,1,124,2,161,2,1,0,124,3,100,2,117,
- 1,114,26,116,6,160,7,124,4,124,3,161,2,1,0,124,
+ 1,114,26,116,6,106,7,124,4,124,3,131,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,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,
@@ -915,15 +915,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,41,5,114,42,0,0,0,114,141,0,0,0,114,132,0,
0,0,114,134,0,0,0,218,4,99,111,100,101,115,5,0,
0,0,32,32,32,32,32,114,7,0,0,0,218,17,95,99,
- 111,109,112,105,108,101,95,98,121,116,101,99,111,100,101,166,
+ 111,109,112,105,108,101,95,98,121,116,101,99,111,100,101,167,
2,0,0,115,18,0,0,0,10,2,10,1,12,1,8,1,
12,1,4,1,10,2,4,1,6,255,114,9,0,0,0,114,
188,0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,
- 0,5,0,0,0,3,0,0,0,115,70,0,0,0,116,0,
+ 0,4,0,0,0,3,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,160,2,116,4,106,5,124,0,131,1,161,1,1,0,
124,3,83,0,41,3,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,
@@ -934,15 +934,15 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
109,101,114,178,0,0,0,114,42,0,0,0,115,4,0,0,
0,32,32,32,32,114,7,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,179,2,0,0,115,12,0,0,0,8,2,14,1,14,
+ 121,99,180,2,0,0,115,12,0,0,0,8,2,14,1,14,
1,14,1,16,1,4,1,114,9,0,0,0,114,193,0,0,
- 0,84,99,3,0,0,0,0,0,0,0,0,0,0,0,5,
+ 0,84,99,3,0,0,0,0,0,0,0,0,0,0,0,4,
0,0,0,3,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,25,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,4,122,38,
+ 160,2,124,1,161,1,1,0,124,3,160,2,116,5,106,6,
+ 124,0,131,1,161,1,1,0,124,3,83,0,41,4,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,3,0,0,0,114,169,0,0,0,
@@ -952,13 +952,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,90,7,99,104,101,99,107,101,100,114,42,0,0,0,
114,17,0,0,0,115,5,0,0,0,32,32,32,32,32,114,
7,0,0,0,218,17,95,99,111,100,101,95,116,111,95,104,
- 97,115,104,95,112,121,99,189,2,0,0,115,14,0,0,0,
+ 97,115,104,95,112,121,99,190,2,0,0,115,14,0,0,0,
8,2,12,1,14,1,16,1,10,1,16,1,4,1,114,9,
0,0,0,114,194,0,0,0,99,1,0,0,0,0,0,0,
0,0,0,0,0,6,0,0,0,3,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,
+ 0,0,100,1,100,2,108,0,125,1,116,1,106,2,124,0,
+ 131,1,106,3,125,2,124,1,160,4,124,2,161,1,125,3,
+ 116,1,106,5,100,2,100,3,131,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,
@@ -980,7 +980,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
110,103,90,15,110,101,119,108,105,110,101,95,100,101,99,111,
100,101,114,115,5,0,0,0,32,32,32,32,32,114,7,0,
0,0,218,13,100,101,99,111,100,101,95,115,111,117,114,99,
- 101,200,2,0,0,115,10,0,0,0,8,5,12,1,10,1,
+ 101,201,2,0,0,115,10,0,0,0,8,5,12,1,10,1,
12,1,20,1,114,9,0,0,0,114,199,0,0,0,169,2,
114,163,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,
@@ -989,8 +989,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,114,29,100,2,125,1,116,0,124,2,100,3,131,2,114,
28,9,0,124,2,160,1,124,0,161,1,125,1,110,39,35,
0,4,0,116,2,121,157,1,0,1,0,1,0,89,0,110,
- 30,37,0,110,28,116,3,160,4,124,1,161,1,125,1,116,
- 5,124,1,131,1,115,57,9,0,116,6,116,3,160,7,161,
+ 30,37,0,110,28,116,3,106,4,124,1,131,1,125,1,116,
+ 5,124,1,131,1,115,57,9,0,116,6,116,3,106,7,131,
0,124,1,131,2,125,1,110,10,35,0,4,0,116,8,121,
156,1,0,1,0,1,0,89,0,110,1,37,0,116,9,160,
10,124,0,124,2,124,1,100,4,166,3,125,4,100,5,124,
@@ -1045,7 +1045,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
105,120,101,115,114,205,0,0,0,90,7,100,105,114,110,97,
109,101,115,9,0,0,0,32,32,32,32,32,32,32,32,32,
114,7,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,217,2,
+ 95,102,105,108,101,95,108,111,99,97,116,105,111,110,218,2,
0,0,115,96,0,0,0,8,12,4,4,10,1,2,2,12,
1,2,128,12,1,4,1,2,128,2,251,10,7,8,1,2,
1,16,1,2,128,12,1,4,1,2,128,16,8,6,1,8,
@@ -1078,17 +1078,17 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,
101,125,92,68,101,98,117,103,122,6,95,100,46,112,121,100,
99,1,0,0,0,0,0,0,0,0,0,0,0,8,0,0,
- 0,3,0,0,0,115,52,0,0,0,9,0,116,0,160,1,
- 116,0,106,2,124,0,161,2,83,0,35,0,4,0,116,3,
- 121,25,1,0,1,0,1,0,116,0,160,1,116,0,106,4,
- 124,0,161,2,6,0,89,0,83,0,37,0,119,0,114,69,
+ 0,3,0,0,0,115,52,0,0,0,9,0,116,0,106,1,
+ 116,0,106,2,124,0,131,2,83,0,35,0,4,0,116,3,
+ 121,25,1,0,1,0,1,0,116,0,106,1,116,0,106,4,
+ 124,0,131,2,6,0,89,0,83,0,37,0,119,0,114,69,
0,0,0,41,5,218,6,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,76,0,0,0,90,18,
72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73,
78,69,114,20,0,0,0,115,1,0,0,0,32,114,7,0,
0,0,218,14,95,111,112,101,110,95,114,101,103,105,115,116,
- 114,121,46,3,0,0,115,14,0,0,0,2,2,14,1,2,
+ 114,121,47,3,0,0,115,14,0,0,0,2,2,14,1,2,
128,12,1,18,1,2,128,2,255,115,12,0,0,0,129,6,
8,0,136,14,24,7,153,1,24,7,122,36,87,105,110,100,
111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,
@@ -1098,8 +1098,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
124,0,106,1,125,2,110,3,124,0,106,2,125,2,124,2,
160,3,124,1,100,1,116,4,106,5,100,0,100,2,133,2,
25,0,22,0,100,3,166,2,125,3,9,0,124,0,160,6,
- 124,3,161,1,53,0,125,4,116,7,160,8,124,4,100,4,
- 161,2,125,5,100,0,4,0,4,0,131,3,1,0,110,11,
+ 124,3,161,1,53,0,125,4,116,7,106,8,124,4,100,4,
+ 131,2,125,5,100,0,4,0,4,0,131,3,1,0,110,11,
35,0,49,0,115,48,119,4,37,0,1,0,1,0,1,0,
89,0,1,0,1,0,124,5,83,0,35,0,4,0,116,9,
121,67,1,0,1,0,1,0,89,0,100,0,83,0,37,0,
@@ -1116,7 +1116,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
115,116,114,121,95,107,101,121,114,21,0,0,0,90,4,104,
107,101,121,218,8,102,105,108,101,112,97,116,104,115,6,0,
0,0,32,32,32,32,32,32,114,7,0,0,0,218,16,95,
- 115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,53,
+ 115,101,97,114,99,104,95,114,101,103,105,115,116,114,121,54,
3,0,0,115,36,0,0,0,6,2,8,1,6,2,6,1,
16,1,6,255,2,2,12,1,12,1,20,255,2,128,12,0,
4,4,2,128,12,254,6,1,2,128,2,255,115,39,0,0,
@@ -1142,7 +1142,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,65,0,0,0,218,6,116,97,114,103,101,116,114,221,0,
0,0,114,163,0,0,0,114,211,0,0,0,114,209,0,0,
0,115,8,0,0,0,32,32,32,32,32,32,32,32,114,7,
- 0,0,0,218,9,102,105,110,100,95,115,112,101,99,68,3,
+ 0,0,0,218,9,102,105,110,100,95,115,112,101,99,69,3,
0,0,115,38,0,0,0,10,2,8,1,4,1,2,1,10,
1,2,128,12,1,6,1,2,128,14,1,14,1,6,1,8,
1,2,1,6,254,8,3,2,252,4,255,2,254,115,12,0,
@@ -1150,8 +1150,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,
- 3,0,0,0,115,42,0,0,0,116,0,160,1,100,1,116,
- 2,161,2,1,0,124,0,160,3,124,1,124,2,161,2,125,
+ 3,0,0,0,115,42,0,0,0,116,0,106,1,100,1,116,
+ 2,131,2,1,0,124,0,160,3,124,1,124,2,161,2,125,
3,124,3,100,2,117,1,114,19,124,3,106,4,83,0,100,
2,83,0,41,3,122,106,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,
@@ -1172,7 +1172,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
4,114,220,0,0,0,114,162,0,0,0,114,65,0,0,0,
114,209,0,0,0,115,4,0,0,0,32,32,32,32,114,7,
0,0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,
- 84,3,0,0,115,14,0,0,0,6,7,2,2,4,254,12,
+ 85,3,0,0,115,14,0,0,0,6,7,2,2,4,254,12,
3,8,1,6,1,4,2,114,9,0,0,0,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,169,
@@ -1185,7 +1185,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,218,11,99,108,97,115,115,109,101,116,104,111,100,114,222,
0,0,0,114,225,0,0,0,114,228,0,0,0,114,12,0,
0,0,114,9,0,0,0,114,7,0,0,0,114,213,0,0,
- 0,34,3,0,0,115,30,0,0,0,8,0,4,2,2,3,
+ 0,35,3,0,0,115,30,0,0,0,8,0,4,2,2,3,
2,255,2,4,2,255,12,3,2,2,10,1,2,6,10,1,
2,14,12,1,2,15,16,1,114,9,0,0,0,114,213,0,
0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,
@@ -1221,7 +1221,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,115,5,0,
0,0,32,32,32,32,32,114,7,0,0,0,114,205,0,0,
- 0,106,3,0,0,115,8,0,0,0,18,3,16,1,14,1,
+ 0,107,3,0,0,115,8,0,0,0,18,3,16,1,14,1,
16,1,114,9,0,0,0,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,1,0,
@@ -1231,7 +1231,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
99,114,101,97,116,105,111,110,46,78,114,12,0,0,0,169,
2,114,143,0,0,0,114,209,0,0,0,115,2,0,0,0,
32,32,114,7,0,0,0,218,13,99,114,101,97,116,101,95,
- 109,111,100,117,108,101,114,3,0,0,243,2,0,0,0,4,
+ 109,111,100,117,108,101,115,3,0,0,243,2,0,0,0,4,
0,114,9,0,0,0,122,27,95,76,111,97,100,101,114,66,
97,115,105,99,115,46,99,114,101,97,116,101,95,109,111,100,
117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0,
@@ -1251,7 +1251,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,120,101,99,114,155,0,0,0,41,3,114,143,0,0,0,
218,6,109,111,100,117,108,101,114,187,0,0,0,115,3,0,
0,0,32,32,32,114,7,0,0,0,218,11,101,120,101,99,
- 95,109,111,100,117,108,101,117,3,0,0,115,12,0,0,0,
+ 95,109,111,100,117,108,101,118,3,0,0,115,12,0,0,0,
12,2,8,1,4,1,8,1,4,255,20,2,114,9,0,0,
0,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,
@@ -1263,13 +1263,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
109,111,100,117,108,101,95,115,104,105,109,169,2,114,143,0,
0,0,114,162,0,0,0,115,2,0,0,0,32,32,114,7,
0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101,
- 125,3,0,0,115,2,0,0,0,12,3,114,9,0,0,0,
+ 126,3,0,0,115,2,0,0,0,12,3,114,9,0,0,0,
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,149,
0,0,0,114,148,0,0,0,114,150,0,0,0,114,151,0,
0,0,114,205,0,0,0,114,238,0,0,0,114,244,0,0,
0,114,247,0,0,0,114,12,0,0,0,114,9,0,0,0,
- 114,7,0,0,0,114,234,0,0,0,101,3,0,0,115,12,
+ 114,7,0,0,0,114,234,0,0,0,102,3,0,0,115,12,
0,0,0,8,0,4,2,8,3,8,8,8,3,12,8,114,
9,0,0,0,114,234,0,0,0,99,0,0,0,0,0,0,
0,0,0,0,0,0,3,0,0,0,0,0,0,0,115,74,
@@ -1294,7 +1294,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
32,32,32,32,78,41,1,114,76,0,0,0,169,2,114,143,
0,0,0,114,65,0,0,0,115,2,0,0,0,32,32,114,
7,0,0,0,218,10,112,97,116,104,95,109,116,105,109,101,
- 133,3,0,0,115,2,0,0,0,4,6,114,9,0,0,0,
+ 134,3,0,0,115,2,0,0,0,4,6,114,9,0,0,0,
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,4,0,0,0,3,0,0,0,115,14,
@@ -1328,7 +1328,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
32,32,32,32,32,32,114,192,0,0,0,78,41,1,114,250,
0,0,0,114,249,0,0,0,115,2,0,0,0,32,32,114,
7,0,0,0,218,10,112,97,116,104,95,115,116,97,116,115,
- 141,3,0,0,115,2,0,0,0,14,12,114,9,0,0,0,
+ 142,3,0,0,115,2,0,0,0,14,12,114,9,0,0,0,
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,3,0,0,0,115,12,
@@ -1352,7 +1352,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
90,10,99,97,99,104,101,95,112,97,116,104,114,42,0,0,
0,115,4,0,0,0,32,32,32,32,114,7,0,0,0,218,
15,95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,
- 155,3,0,0,115,2,0,0,0,12,8,114,9,0,0,0,
+ 156,3,0,0,115,2,0,0,0,12,8,114,9,0,0,0,
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,1,0,0,0,3,
@@ -1368,7 +1368,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
100,101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,
32,32,78,114,12,0,0,0,41,3,114,143,0,0,0,114,
65,0,0,0,114,42,0,0,0,115,3,0,0,0,32,32,
- 32,114,7,0,0,0,114,252,0,0,0,165,3,0,0,114,
+ 32,114,7,0,0,0,114,252,0,0,0,166,3,0,0,114,
239,0,0,0,114,9,0,0,0,122,21,83,111,117,114,99,
101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,97,
99,2,0,0,0,0,0,0,0,0,0,0,0,8,0,0,
@@ -1388,7 +1388,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,114,199,0,0,0,41,5,114,143,0,0,0,114,162,
0,0,0,114,65,0,0,0,114,197,0,0,0,218,3,101,
120,99,115,5,0,0,0,32,32,32,32,32,114,7,0,0,
- 0,218,10,103,101,116,95,115,111,117,114,99,101,172,3,0,
+ 0,218,10,103,101,116,95,115,111,117,114,99,101,173,3,0,
0,115,26,0,0,0,10,2,2,1,10,1,8,4,2,128,
12,253,4,1,2,1,4,255,2,1,2,255,10,128,2,255,
115,20,0,0,0,134,5,15,0,143,7,33,7,150,7,29,
@@ -1412,7 +1412,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,218,7,99,111,109,112,105,108,101,41,4,114,143,0,
0,0,114,42,0,0,0,114,65,0,0,0,114,1,1,0,
0,115,4,0,0,0,32,32,32,32,114,7,0,0,0,218,
- 14,115,111,117,114,99,101,95,116,111,95,99,111,100,101,182,
+ 14,115,111,117,114,99,101,95,116,111,95,99,111,100,101,183,
3,0,0,115,6,0,0,0,12,5,4,1,6,255,114,9,
0,0,0,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,
@@ -1433,8 +1433,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
100,8,107,3,125,6,124,6,114,141,124,12,100,9,64,0,
100,8,107,3,125,7,116,9,106,10,100,10,107,3,114,140,
124,7,115,122,116,9,106,10,100,11,107,2,114,140,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,
+ 160,6,124,2,161,1,125,4,116,9,106,11,116,12,124,4,
+ 131,2,125,5,116,13,124,10,124,5,124,1,124,11,131,4,
1,0,110,10,116,14,124,10,124,3,124,9,100,12,25,0,
124,1,124,11,131,5,1,0,110,13,35,0,4,0,116,15,
116,16,102,2,144,1,121,10,1,0,1,0,1,0,89,0,
@@ -1445,7 +1445,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
116,17,160,18,100,15,124,2,161,2,1,0,116,21,106,22,
144,1,115,7,124,8,100,1,117,1,144,1,114,7,124,3,
100,1,117,1,144,1,114,7,124,6,114,233,124,5,100,1,
- 117,0,114,226,116,9,160,11,124,4,161,1,125,5,116,23,
+ 117,0,114,226,116,9,106,11,124,4,131,1,125,5,116,23,
124,14,124,5,124,7,131,3,125,10,110,8,116,24,124,14,
124,3,116,25,124,4,131,1,131,3,125,10,9,0,124,0,
160,26,124,2,124,8,124,10,161,3,1,0,124,14,83,0,
@@ -1490,7 +1490,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,17,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,115,15,
0,0,0,32,32,32,32,32,32,32,32,32,32,32,32,32,
- 32,32,114,7,0,0,0,114,240,0,0,0,190,3,0,0,
+ 32,32,114,7,0,0,0,114,240,0,0,0,191,3,0,0,
115,188,0,0,0,10,7,4,1,4,1,4,1,4,1,4,
1,2,1,10,1,2,128,14,1,8,1,2,128,2,2,12,
1,2,128,14,1,4,1,2,128,12,2,2,1,12,1,2,
@@ -1514,7 +1514,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
250,0,0,0,114,251,0,0,0,114,253,0,0,0,114,252,
0,0,0,114,0,1,0,0,114,4,1,0,0,114,240,0,
0,0,114,12,0,0,0,114,9,0,0,0,114,7,0,0,
- 0,114,248,0,0,0,131,3,0,0,115,16,0,0,0,8,
+ 0,114,248,0,0,0,132,3,0,0,115,16,0,0,0,8,
0,8,2,8,8,8,14,8,10,8,7,14,10,12,8,114,
9,0,0,0,114,248,0,0,0,99,0,0,0,0,0,0,
0,0,0,0,0,0,4,0,0,0,0,0,0,0,115,94,
@@ -1541,7 +1541,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114,
46,78,114,182,0,0,0,41,3,114,143,0,0,0,114,162,
0,0,0,114,65,0,0,0,115,3,0,0,0,32,32,32,
- 114,7,0,0,0,114,235,0,0,0,24,4,0,0,115,4,
+ 114,7,0,0,0,114,235,0,0,0,25,4,0,0,115,4,
0,0,0,6,3,10,1,114,9,0,0,0,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,
@@ -1550,7 +1550,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
2,83,0,114,69,0,0,0,169,2,218,9,95,95,99,108,
97,115,115,95,95,114,155,0,0,0,169,2,114,143,0,0,
0,90,5,111,116,104,101,114,115,2,0,0,0,32,32,114,
- 7,0,0,0,218,6,95,95,101,113,95,95,30,4,0,0,
+ 7,0,0,0,218,6,95,95,101,113,95,95,31,4,0,0,
243,6,0,0,0,12,1,10,1,2,255,114,9,0,0,0,
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,
@@ -1559,7 +1559,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,114,69,0,0,0,169,3,218,4,104,97,115,104,114,141,
0,0,0,114,65,0,0,0,169,1,114,143,0,0,0,115,
1,0,0,0,32,114,7,0,0,0,218,8,95,95,104,97,
- 115,104,95,95,34,4,0,0,243,2,0,0,0,20,1,114,
+ 115,104,95,95,35,4,0,0,243,2,0,0,0,20,1,114,
9,0,0,0,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,3,0,0,0,3,0,0,0,115,16,
@@ -1574,7 +1574,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
115,117,112,101,114,114,10,1,0,0,114,247,0,0,0,41,
3,114,143,0,0,0,114,162,0,0,0,114,13,1,0,0,
115,3,0,0,0,32,32,128,114,7,0,0,0,114,247,0,
- 0,0,37,4,0,0,115,2,0,0,0,16,10,114,9,0,
+ 0,0,38,4,0,0,115,2,0,0,0,16,10,114,9,0,
0,0,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,1,0,0,0,3,0,0,0,243,
@@ -1584,16 +1584,16 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101,
32,102,105,110,100,101,114,46,78,114,74,0,0,0,114,246,
0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,114,
- 202,0,0,0,49,4,0,0,243,2,0,0,0,6,3,114,
+ 202,0,0,0,50,4,0,0,243,2,0,0,0,6,3,114,
9,0,0,0,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,9,0,0,0,3,0,
0,0,115,136,0,0,0,116,0,124,0,116,1,116,2,102,
- 2,131,2,114,38,116,3,160,4,116,5,124,1,131,1,161,
+ 2,131,2,114,38,116,3,106,4,116,5,124,1,131,1,131,
1,53,0,125,2,124,2,160,6,161,0,2,0,100,1,4,
0,4,0,131,3,1,0,83,0,35,0,49,0,115,30,119,
4,37,0,1,0,1,0,1,0,89,0,1,0,1,0,100,
- 1,83,0,116,3,160,7,124,1,100,2,161,2,53,0,125,
+ 1,83,0,116,3,106,7,124,1,100,2,131,2,53,0,125,
2,124,2,160,6,161,0,2,0,100,1,4,0,4,0,131,
3,1,0,83,0,35,0,49,0,115,60,119,4,37,0,1,
0,1,0,1,0,89,0,1,0,1,0,100,1,83,0,41,
@@ -1606,7 +1606,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
109,0,0,0,90,4,114,101,97,100,114,92,0,0,0,41,
3,114,143,0,0,0,114,65,0,0,0,114,94,0,0,0,
115,3,0,0,0,32,32,32,114,7,0,0,0,114,254,0,
- 0,0,54,4,0,0,115,22,0,0,0,14,2,16,1,6,
+ 0,0,55,4,0,0,115,22,0,0,0,14,2,16,1,6,
1,22,255,2,128,16,0,14,3,6,1,22,255,2,128,16,
0,115,24,0,0,0,142,4,25,3,153,4,29,11,158,3,
29,11,172,4,55,3,183,4,59,11,188,3,59,11,122,19,
@@ -1620,7 +1620,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,41,3,114,143,0,0,0,114,243,0,0,0,114,29,1,
0,0,115,3,0,0,0,32,32,32,114,7,0,0,0,218,
19,103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,
- 97,100,101,114,63,4,0,0,115,4,0,0,0,12,2,8,
+ 97,100,101,114,64,4,0,0,115,4,0,0,0,12,2,8,
1,114,9,0,0,0,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,41,13,114,149,0,0,0,114,148,0,
@@ -1629,7 +1629,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,247,0,0,0,114,202,0,0,0,114,254,0,0,0,114,
31,1,0,0,90,13,95,95,99,108,97,115,115,99,101,108,
108,95,95,41,1,114,13,1,0,0,115,1,0,0,0,64,
- 114,7,0,0,0,114,10,1,0,0,19,4,0,0,115,24,
+ 114,7,0,0,0,114,10,1,0,0,20,4,0,0,115,24,
0,0,0,10,128,4,2,8,3,8,6,8,4,2,3,14,
1,2,11,10,1,8,4,2,9,18,1,114,9,0,0,0,
114,10,1,0,0,99,0,0,0,0,0,0,0,0,0,0,
@@ -1652,7 +1652,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
116,105,109,101,90,7,115,116,95,115,105,122,101,41,3,114,
143,0,0,0,114,65,0,0,0,114,9,1,0,0,115,3,
0,0,0,32,32,32,114,7,0,0,0,114,251,0,0,0,
- 73,4,0,0,115,4,0,0,0,8,2,14,1,114,9,0,
+ 74,4,0,0,115,4,0,0,0,8,2,14,1,114,9,0,
0,0,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,6,0,0,0,
@@ -1662,7 +1662,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
139,0,0,0,114,252,0,0,0,41,5,114,143,0,0,0,
114,134,0,0,0,114,132,0,0,0,114,42,0,0,0,114,
78,0,0,0,115,5,0,0,0,32,32,32,32,32,114,7,
- 0,0,0,114,253,0,0,0,78,4,0,0,115,4,0,0,
+ 0,0,0,114,253,0,0,0,79,4,0,0,115,4,0,0,
0,8,2,16,1,114,9,0,0,0,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,87,0,0,
@@ -1673,7 +1673,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
131,1,92,2,125,4,125,7,124,6,160,2,124,7,161,1,
1,0,124,4,114,31,116,1,124,4,131,1,114,14,116,3,
124,6,131,1,68,0,93,47,125,7,116,4,124,4,124,7,
- 131,2,125,4,9,0,116,5,160,6,124,4,161,1,1,0,
+ 131,2,125,4,9,0,116,5,106,6,124,4,131,1,1,0,
113,35,35,0,4,0,116,7,121,58,1,0,1,0,1,0,
89,0,113,35,4,0,116,8,121,124,1,0,125,8,1,0,
116,9,160,10,100,1,124,4,124,8,161,3,1,0,89,0,
@@ -1698,7 +1698,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,101,110,116,114,120,0,0,0,114,63,0,0,0,114,68,
0,0,0,114,255,0,0,0,115,9,0,0,0,32,32,32,
32,32,32,32,32,32,114,7,0,0,0,114,252,0,0,0,
- 83,4,0,0,115,60,0,0,0,12,2,4,1,12,2,12,
+ 84,4,0,0,115,60,0,0,0,12,2,4,1,12,2,12,
1,10,1,12,254,12,4,10,1,2,1,12,1,2,128,12,
1,4,2,12,1,6,3,4,1,4,255,14,2,10,128,2,
1,12,1,16,1,2,128,12,1,8,2,2,1,16,255,10,
@@ -1711,7 +1711,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
97,116,97,78,41,7,114,149,0,0,0,114,148,0,0,0,
114,150,0,0,0,114,151,0,0,0,114,251,0,0,0,114,
253,0,0,0,114,252,0,0,0,114,12,0,0,0,114,9,
- 0,0,0,114,7,0,0,0,114,32,1,0,0,69,4,0,
+ 0,0,0,114,7,0,0,0,114,32,1,0,0,70,4,0,
0,115,10,0,0,0,8,0,4,2,8,2,8,5,18,5,
114,9,0,0,0,114,32,1,0,0,99,0,0,0,0,0,
0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,115,
@@ -1733,7 +1733,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,0,114,188,0,0,0,114,6,1,0,0,41,5,114,
143,0,0,0,114,162,0,0,0,114,65,0,0,0,114,42,
0,0,0,114,174,0,0,0,115,5,0,0,0,32,32,32,
- 32,32,114,7,0,0,0,114,240,0,0,0,118,4,0,0,
+ 32,32,114,7,0,0,0,114,240,0,0,0,119,4,0,0,
115,22,0,0,0,10,1,10,1,2,4,2,1,6,254,12,
4,2,1,14,1,2,1,2,1,6,253,114,9,0,0,0,
122,29,83,111,117,114,99,101,108,101,115,115,70,105,108,101,
@@ -1744,13 +1744,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,99,
111,100,101,46,78,114,12,0,0,0,114,246,0,0,0,115,
2,0,0,0,32,32,114,7,0,0,0,114,0,1,0,0,
- 134,4,0,0,114,25,0,0,0,114,9,0,0,0,122,31,
+ 135,4,0,0,114,25,0,0,0,114,9,0,0,0,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,149,0,0,0,114,148,0,0,0,114,150,0,0,
0,114,151,0,0,0,114,240,0,0,0,114,0,1,0,0,
114,12,0,0,0,114,9,0,0,0,114,7,0,0,0,114,
- 39,1,0,0,114,4,0,0,115,8,0,0,0,8,0,4,
+ 39,1,0,0,115,4,0,0,115,8,0,0,0,8,0,4,
2,8,2,12,16,114,9,0,0,0,114,39,1,0,0,99,
0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,
0,0,0,0,115,92,0,0,0,101,0,90,1,100,0,90,
@@ -1771,19 +1771,19 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
1,100,0,83,0,114,69,0,0,0,114,182,0,0,0,41,
3,114,143,0,0,0,114,141,0,0,0,114,65,0,0,0,
115,3,0,0,0,32,32,32,114,7,0,0,0,114,235,0,
- 0,0,147,4,0,0,115,4,0,0,0,6,1,10,1,114,
+ 0,0,148,4,0,0,115,4,0,0,0,6,1,10,1,114,
9,0,0,0,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,3,0,0,0,114,11,1,0,0,114,69,0,0,
0,114,12,1,0,0,114,14,1,0,0,115,2,0,0,0,
- 32,32,114,7,0,0,0,114,15,1,0,0,151,4,0,0,
+ 32,32,114,7,0,0,0,114,15,1,0,0,152,4,0,0,
114,16,1,0,0,114,9,0,0,0,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,3,0,0,0,3,0,0,0,114,17,1,0,0,
114,69,0,0,0,114,18,1,0,0,114,20,1,0,0,115,
- 1,0,0,0,32,114,7,0,0,0,114,21,1,0,0,155,
+ 1,0,0,0,32,114,7,0,0,0,114,21,1,0,0,156,
4,0,0,114,22,1,0,0,114,9,0,0,0,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,
@@ -1801,7 +1801,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
172,0,0,0,114,141,0,0,0,114,65,0,0,0,41,3,
114,143,0,0,0,114,209,0,0,0,114,243,0,0,0,115,
3,0,0,0,32,32,32,114,7,0,0,0,114,238,0,0,
- 0,158,4,0,0,115,14,0,0,0,4,2,6,1,4,255,
+ 0,159,4,0,0,115,14,0,0,0,4,2,6,1,4,255,
6,2,8,1,4,255,4,2,114,9,0,0,0,122,33,69,
120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,
101,114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,
@@ -1818,7 +1818,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,99,95,100,121,110,97,109,105,99,114,172,0,0,0,114,
141,0,0,0,114,65,0,0,0,169,2,114,143,0,0,0,
114,243,0,0,0,115,2,0,0,0,32,32,114,7,0,0,
- 0,114,244,0,0,0,166,4,0,0,115,8,0,0,0,14,
+ 0,114,244,0,0,0,167,4,0,0,115,8,0,0,0,14,
2,6,1,8,1,8,255,114,9,0,0,0,122,31,69,120,
116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0,
@@ -1836,7 +1836,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
235,0,0,0,78,114,12,0,0,0,41,3,114,5,0,0,
0,218,6,115,117,102,102,105,120,218,9,102,105,108,101,95,
110,97,109,101,115,3,0,0,0,32,32,128,114,7,0,0,
- 0,114,8,0,0,0,175,4,0,0,115,8,0,0,0,2,
+ 0,114,8,0,0,0,176,4,0,0,115,8,0,0,0,2,
128,4,0,2,1,20,255,114,9,0,0,0,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,
@@ -1844,7 +1844,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
41,4,114,73,0,0,0,114,65,0,0,0,218,3,97,110,
121,114,231,0,0,0,41,3,114,143,0,0,0,114,162,0,
0,0,114,42,1,0,0,115,3,0,0,0,32,32,64,114,
- 7,0,0,0,114,205,0,0,0,172,4,0,0,115,10,0,
+ 7,0,0,0,114,205,0,0,0,173,4,0,0,115,10,0,
0,0,2,128,14,2,12,1,2,1,8,255,114,9,0,0,
0,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,
@@ -1855,7 +1855,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,32,99,97,110,110,111,116,32,99,114,101,97,116,101,32,
97,32,99,111,100,101,32,111,98,106,101,99,116,46,78,114,
12,0,0,0,114,246,0,0,0,115,2,0,0,0,32,32,
- 114,7,0,0,0,114,240,0,0,0,178,4,0,0,114,25,
+ 114,7,0,0,0,114,240,0,0,0,179,4,0,0,114,25,
0,0,0,114,9,0,0,0,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,
@@ -1865,13 +1865,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
117,108,101,115,32,104,97,118,101,32,110,111,32,115,111,117,
114,99,101,32,99,111,100,101,46,78,114,12,0,0,0,114,
246,0,0,0,115,2,0,0,0,32,32,114,7,0,0,0,
- 114,0,1,0,0,182,4,0,0,114,25,0,0,0,114,9,
+ 114,0,1,0,0,183,4,0,0,114,25,0,0,0,114,9,
0,0,0,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,
1,0,0,0,3,0,0,0,114,24,1,0,0,114,25,1,
0,0,114,74,0,0,0,114,246,0,0,0,115,2,0,0,
- 0,32,32,114,7,0,0,0,114,202,0,0,0,186,4,0,
+ 0,32,32,114,7,0,0,0,114,202,0,0,0,187,4,0,
0,114,26,1,0,0,114,9,0,0,0,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,
@@ -1880,7 +1880,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
1,0,0,114,238,0,0,0,114,244,0,0,0,114,205,0,
0,0,114,240,0,0,0,114,0,1,0,0,114,159,0,0,
0,114,202,0,0,0,114,12,0,0,0,114,9,0,0,0,
- 114,7,0,0,0,114,28,1,0,0,139,4,0,0,115,24,
+ 114,7,0,0,0,114,28,1,0,0,140,4,0,0,115,24,
0,0,0,8,0,4,2,8,6,8,4,8,4,8,3,8,
8,8,6,8,6,8,4,2,4,14,1,114,9,0,0,0,
114,28,1,0,0,99,0,0,0,0,0,0,0,0,0,0,
@@ -1923,7 +1923,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
4,114,143,0,0,0,114,141,0,0,0,114,65,0,0,0,
90,11,112,97,116,104,95,102,105,110,100,101,114,115,4,0,
0,0,32,32,32,32,114,7,0,0,0,114,235,0,0,0,
- 199,4,0,0,115,8,0,0,0,6,1,6,1,14,1,10,
+ 200,4,0,0,115,8,0,0,0,6,1,6,1,14,1,10,
1,114,9,0,0,0,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,3,0,0,0,
@@ -1940,7 +1940,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,143,0,0,0,114,38,1,0,0,218,3,100,111,116,90,
2,109,101,115,4,0,0,0,32,32,32,32,114,7,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,205,4,0,0,115,8,
+ 112,97,116,104,95,110,97,109,101,115,206,4,0,0,115,8,
0,0,0,18,2,8,1,4,2,8,3,114,9,0,0,0,
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,
@@ -1953,7 +1953,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
143,0,0,0,90,18,112,97,114,101,110,116,95,109,111,100,
117,108,101,95,110,97,109,101,90,14,112,97,116,104,95,97,
116,116,114,95,110,97,109,101,115,3,0,0,0,32,32,32,
- 114,7,0,0,0,114,47,1,0,0,215,4,0,0,115,4,
+ 114,7,0,0,0,114,47,1,0,0,216,4,0,0,115,4,
0,0,0,12,1,16,1,114,9,0,0,0,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,
@@ -1969,7 +1969,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,114,46,1,0,0,41,3,114,143,0,0,0,90,11,112,
97,114,101,110,116,95,112,97,116,104,114,209,0,0,0,115,
3,0,0,0,32,32,32,114,7,0,0,0,218,12,95,114,
- 101,99,97,108,99,117,108,97,116,101,219,4,0,0,115,16,
+ 101,99,97,108,99,117,108,97,116,101,220,4,0,0,115,16,
0,0,0,12,2,10,1,14,1,18,3,6,1,8,1,6,
1,6,1,114,9,0,0,0,122,27,95,78,97,109,101,115,
112,97,99,101,80,97,116,104,46,95,114,101,99,97,108,99,
@@ -1978,7 +1978,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,124,0,160,1,161,0,131,1,83,0,114,69,0,0,0,
41,2,218,4,105,116,101,114,114,54,1,0,0,114,20,1,
0,0,115,1,0,0,0,32,114,7,0,0,0,218,8,95,
- 95,105,116,101,114,95,95,232,4,0,0,243,2,0,0,0,
+ 95,105,116,101,114,95,95,233,4,0,0,243,2,0,0,0,
12,1,114,9,0,0,0,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,
@@ -1986,7 +1986,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
124,1,25,0,83,0,114,69,0,0,0,169,1,114,54,1,
0,0,41,2,114,143,0,0,0,218,5,105,110,100,101,120,
115,2,0,0,0,32,32,114,7,0,0,0,218,11,95,95,
- 103,101,116,105,116,101,109,95,95,235,4,0,0,114,58,1,
+ 103,101,116,105,116,101,109,95,95,236,4,0,0,114,58,1,
0,0,114,9,0,0,0,122,26,95,78,97,109,101,115,112,
97,99,101,80,97,116,104,46,95,95,103,101,116,105,116,101,
109,95,95,99,3,0,0,0,0,0,0,0,0,0,0,0,
@@ -1995,14 +1995,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
41,1,114,46,1,0,0,41,3,114,143,0,0,0,114,60,
1,0,0,114,65,0,0,0,115,3,0,0,0,32,32,32,
114,7,0,0,0,218,11,95,95,115,101,116,105,116,101,109,
- 95,95,238,4,0,0,115,2,0,0,0,14,1,114,9,0,
+ 95,95,239,4,0,0,115,2,0,0,0,14,1,114,9,0,
0,0,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,3,0,0,0,3,
0,0,0,114,55,1,0,0,114,69,0,0,0,41,2,114,
4,0,0,0,114,54,1,0,0,114,20,1,0,0,115,1,
0,0,0,32,114,7,0,0,0,218,7,95,95,108,101,110,
- 95,95,241,4,0,0,114,58,1,0,0,114,9,0,0,0,
+ 95,95,242,4,0,0,114,58,1,0,0,114,9,0,0,0,
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,3,0,0,0,3,0,0,0,243,12,0,
@@ -2010,7 +2010,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
78,122,20,95,78,97,109,101,115,112,97,99,101,80,97,116,
104,40,123,33,114,125,41,41,2,114,89,0,0,0,114,46,
1,0,0,114,20,1,0,0,115,1,0,0,0,32,114,7,
- 0,0,0,218,8,95,95,114,101,112,114,95,95,244,4,0,
+ 0,0,0,218,8,95,95,114,101,112,114,95,95,245,4,0,
0,114,58,1,0,0,114,9,0,0,0,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,
@@ -2018,7 +2018,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
124,0,160,0,161,0,118,0,83,0,114,69,0,0,0,114,
59,1,0,0,169,2,114,143,0,0,0,218,4,105,116,101,
109,115,2,0,0,0,32,32,114,7,0,0,0,218,12,95,
- 95,99,111,110,116,97,105,110,115,95,95,247,4,0,0,114,
+ 95,99,111,110,116,97,105,110,115,95,95,248,4,0,0,114,
58,1,0,0,114,9,0,0,0,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,
@@ -2026,7 +2026,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
124,0,106,0,160,1,124,1,161,1,1,0,100,0,83,0,
114,69,0,0,0,41,2,114,46,1,0,0,114,61,0,0,
0,114,66,1,0,0,115,2,0,0,0,32,32,114,7,0,
- 0,0,114,61,0,0,0,250,4,0,0,243,2,0,0,0,
+ 0,0,114,61,0,0,0,251,4,0,0,243,2,0,0,0,
16,1,114,9,0,0,0,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,149,0,0,0,114,148,0,0,0,114,150,0,0,0,
@@ -2035,7 +2035,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
1,0,0,114,62,1,0,0,114,63,1,0,0,114,65,1,
0,0,114,68,1,0,0,114,61,0,0,0,114,12,0,0,
0,114,9,0,0,0,114,7,0,0,0,114,44,1,0,0,
- 192,4,0,0,115,26,0,0,0,8,0,4,1,8,6,8,
+ 193,4,0,0,115,26,0,0,0,8,0,4,1,8,6,8,
6,8,10,8,4,8,13,8,3,8,3,8,3,8,3,8,
3,12,3,114,9,0,0,0,114,44,1,0,0,99,0,0,
0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,
@@ -2051,12 +2051,12 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
1,124,2,124,3,131,3,124,0,95,1,100,0,83,0,114,
69,0,0,0,41,2,114,44,1,0,0,114,46,1,0,0,
114,50,1,0,0,115,4,0,0,0,32,32,32,32,114,7,
- 0,0,0,114,235,0,0,0,0,5,0,0,115,2,0,0,
+ 0,0,0,114,235,0,0,0,1,5,0,0,115,2,0,0,
0,18,1,114,9,0,0,0,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,1,0,0,0,0,0,0,0,0,0,0,0,
- 4,0,0,0,3,0,0,0,115,24,0,0,0,116,0,160,
- 1,100,1,116,2,161,2,1,0,100,2,160,3,124,0,106,
+ 3,0,0,0,3,0,0,0,115,24,0,0,0,116,0,106,
+ 1,100,1,116,2,131,2,1,0,100,2,160,3,124,0,106,
4,161,1,83,0,41,4,122,115,82,101,116,117,114,110,32,
114,101,112,114,32,102,111,114,32,116,104,101,32,109,111,100,
117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,
@@ -2075,20 +2075,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,0,114,100,0,0,0,114,101,0,0,0,114,89,0,
0,0,114,149,0,0,0,41,1,114,243,0,0,0,115,1,
0,0,0,32,114,7,0,0,0,218,11,109,111,100,117,108,
- 101,95,114,101,112,114,3,5,0,0,115,8,0,0,0,6,
+ 101,95,114,101,112,114,4,5,0,0,115,8,0,0,0,6,
7,2,1,4,255,12,2,114,9,0,0,0,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,1,0,0,0,3,0,0,0,114,
24,0,0,0,41,2,78,84,114,12,0,0,0,114,246,0,
0,0,115,2,0,0,0,32,32,114,7,0,0,0,114,205,
- 0,0,0,14,5,0,0,243,2,0,0,0,4,1,114,9,
+ 0,0,0,15,5,0,0,243,2,0,0,0,4,1,114,9,
0,0,0,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,1,0,0,
0,3,0,0,0,114,24,0,0,0,41,2,78,114,10,0,
0,0,114,12,0,0,0,114,246,0,0,0,115,2,0,0,
- 0,32,32,114,7,0,0,0,114,0,1,0,0,17,5,0,
+ 0,32,32,114,7,0,0,0,114,0,1,0,0,18,5,0,
0,114,72,1,0,0,114,9,0,0,0,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,
@@ -2097,20 +2097,20 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
83,0,41,6,78,114,10,0,0,0,122,8,60,115,116,114,
105,110,103,62,114,242,0,0,0,84,41,1,114,2,1,0,
0,41,1,114,3,1,0,0,114,246,0,0,0,115,2,0,
- 0,0,32,32,114,7,0,0,0,114,240,0,0,0,20,5,
+ 0,0,32,32,114,7,0,0,0,114,240,0,0,0,21,5,
0,0,114,69,1,0,0,114,9,0,0,0,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,1,0,0,0,3,0,0,0,114,24,0,0,
0,114,236,0,0,0,114,12,0,0,0,114,237,0,0,0,
115,2,0,0,0,32,32,114,7,0,0,0,114,238,0,0,
- 0,23,5,0,0,114,239,0,0,0,114,9,0,0,0,122,
+ 0,24,5,0,0,114,239,0,0,0,114,9,0,0,0,122,
30,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,
114,46,99,114,101,97,116,101,95,109,111,100,117,108,101,99,
2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,
3,0,0,0,115,4,0,0,0,100,0,83,0,114,69,0,
0,0,114,12,0,0,0,114,40,1,0,0,115,2,0,0,
- 0,32,32,114,7,0,0,0,114,244,0,0,0,26,5,0,
+ 0,32,32,114,7,0,0,0,114,244,0,0,0,27,5,0,
0,114,72,1,0,0,114,9,0,0,0,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,
@@ -2128,7 +2128,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
104,32,112,97,116,104,32,123,33,114,125,78,41,4,114,158,
0,0,0,114,172,0,0,0,114,46,1,0,0,114,245,0,
0,0,114,246,0,0,0,115,2,0,0,0,32,32,114,7,
- 0,0,0,114,247,0,0,0,29,5,0,0,115,8,0,0,
+ 0,0,0,114,247,0,0,0,30,5,0,0,115,8,0,0,
0,6,7,4,1,4,255,12,3,114,9,0,0,0,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,99,2,0,0,
@@ -2139,7 +2139,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,82,101,97,100,101,114,41,3,114,30,1,0,0,114,73,
1,0,0,114,46,1,0,0,41,3,114,143,0,0,0,114,
243,0,0,0,114,73,1,0,0,115,3,0,0,0,32,32,
- 32,114,7,0,0,0,114,31,1,0,0,41,5,0,0,115,
+ 32,114,7,0,0,0,114,31,1,0,0,42,5,0,0,115,
4,0,0,0,12,1,10,1,114,9,0,0,0,122,36,95,
78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,
103,101,116,95,114,101,115,111,117,114,99,101,95,114,101,97,
@@ -2148,7 +2148,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
71,1,0,0,114,205,0,0,0,114,0,1,0,0,114,240,
0,0,0,114,238,0,0,0,114,244,0,0,0,114,247,0,
0,0,114,31,1,0,0,114,12,0,0,0,114,9,0,0,
- 0,114,7,0,0,0,114,70,1,0,0,255,4,0,0,115,
+ 0,114,7,0,0,0,114,70,1,0,0,0,5,0,0,115,
22,0,0,0,8,0,8,1,2,3,10,1,8,10,8,3,
8,3,8,3,8,3,8,3,12,12,114,9,0,0,0,114,
70,1,0,0,99,0,0,0,0,0,0,0,0,0,0,0,
@@ -2185,14 +2185,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
99,104,101,218,5,105,116,101,109,115,114,152,0,0,0,114,
75,1,0,0,41,2,114,141,0,0,0,218,6,102,105,110,
100,101,114,115,2,0,0,0,32,32,114,7,0,0,0,114,
- 75,1,0,0,52,5,0,0,115,14,0,0,0,22,4,8,
+ 75,1,0,0,53,5,0,0,115,14,0,0,0,22,4,8,
1,10,1,10,1,8,1,2,128,4,252,114,9,0,0,0,
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,1,
0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,3,
0,0,0,115,78,0,0,0,116,0,106,1,100,1,117,1,
- 114,14,116,0,106,1,115,14,116,2,160,3,100,2,116,4,
- 161,2,1,0,116,0,106,1,68,0,93,18,125,1,9,0,
+ 114,14,116,0,106,1,115,14,116,2,106,3,100,2,116,4,
+ 131,2,1,0,116,0,106,1,68,0,93,18,125,1,9,0,
124,1,124,0,131,1,2,0,1,0,83,0,35,0,4,0,
116,5,121,38,1,0,1,0,1,0,89,0,113,17,37,0,
100,1,83,0,119,0,41,3,122,46,83,101,97,114,99,104,
@@ -2204,14 +2204,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
104,111,111,107,115,114,99,0,0,0,114,100,0,0,0,114,
161,0,0,0,114,142,0,0,0,41,2,114,65,0,0,0,
90,4,104,111,111,107,115,2,0,0,0,32,32,114,7,0,
- 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,62,
+ 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,63,
5,0,0,115,22,0,0,0,16,3,12,1,10,1,2,1,
12,1,2,128,12,1,4,1,2,128,4,2,2,253,115,12,
0,0,0,148,3,26,2,154,7,35,9,166,1,35,9,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,8,0,0,0,3,0,0,0,115,104,0,0,
- 0,124,1,100,1,107,2,114,21,9,0,116,0,160,1,161,
+ 0,124,1,100,1,107,2,114,21,9,0,116,0,106,1,131,
0,125,1,110,11,35,0,4,0,116,2,121,51,1,0,1,
0,1,0,89,0,100,2,83,0,37,0,9,0,116,3,106,
4,124,1,25,0,125,2,124,2,83,0,35,0,4,0,116,
@@ -2238,7 +2238,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
220,0,0,0,114,65,0,0,0,114,79,1,0,0,115,3,
0,0,0,32,32,32,114,7,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,75,5,0,0,115,36,0,0,0,8,8,2,1,10,1,
+ 101,76,5,0,0,115,36,0,0,0,8,8,2,1,10,1,
2,128,12,1,6,3,2,128,2,1,10,1,4,4,2,128,
12,253,10,1,12,1,4,1,2,128,2,253,2,250,115,24,
0,0,0,133,4,10,0,138,7,20,7,150,5,29,0,157,
@@ -2248,10 +2248,10 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,0,0,0,0,0,0,0,4,0,0,0,3,0,0,
0,115,138,0,0,0,116,0,124,2,100,1,131,2,114,27,
116,1,160,2,124,2,161,1,155,0,100,2,157,2,125,3,
- 116,3,160,4,124,3,116,5,161,2,1,0,124,2,160,6,
+ 116,3,106,4,124,3,116,5,131,2,1,0,124,2,160,6,
124,1,161,1,92,2,125,4,125,5,110,21,116,1,160,2,
- 124,2,161,1,155,0,100,3,157,2,125,3,116,3,160,4,
- 124,3,116,5,161,2,1,0,124,2,160,7,124,1,161,1,
+ 124,2,161,1,155,0,100,3,157,2,125,3,116,3,106,4,
+ 124,3,116,5,131,2,1,0,124,2,160,7,124,1,161,1,
125,4,103,0,125,5,124,4,100,0,117,1,114,58,116,1,
160,8,124,1,124,4,161,2,83,0,116,1,160,9,124,1,
100,0,161,2,125,6,124,5,124,6,95,10,124,6,83,0,
@@ -2271,7 +2271,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,0,114,164,0,0,0,114,209,0,0,0,115,7,0,
0,0,32,32,32,32,32,32,32,114,7,0,0,0,218,16,
95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,
- 97,5,0,0,115,26,0,0,0,10,4,16,1,12,2,16,
+ 98,5,0,0,115,26,0,0,0,10,4,16,1,12,2,16,
1,16,2,12,2,10,1,4,1,8,1,12,1,12,1,6,
1,4,1,114,9,0,0,0,122,27,80,97,116,104,70,105,
110,100,101,114,46,95,108,101,103,97,99,121,95,103,101,116,
@@ -2303,7 +2303,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
5,101,110,116,114,121,114,79,1,0,0,114,209,0,0,0,
114,164,0,0,0,115,9,0,0,0,32,32,32,32,32,32,
32,32,32,114,7,0,0,0,218,9,95,103,101,116,95,115,
- 112,101,99,118,5,0,0,115,42,0,0,0,4,5,8,1,
+ 112,101,99,119,5,0,0,115,42,0,0,0,4,5,8,1,
14,1,2,1,10,1,8,1,10,1,14,1,12,2,8,1,
2,1,10,1,8,1,6,1,8,1,8,1,10,5,2,128,
12,2,6,1,4,1,114,9,0,0,0,122,20,80,97,116,
@@ -2330,13 +2330,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
41,6,114,220,0,0,0,114,162,0,0,0,114,65,0,0,
0,114,224,0,0,0,114,209,0,0,0,114,87,1,0,0,
115,6,0,0,0,32,32,32,32,32,32,114,7,0,0,0,
- 114,225,0,0,0,150,5,0,0,115,26,0,0,0,8,6,
+ 114,225,0,0,0,151,5,0,0,115,26,0,0,0,8,6,
6,1,14,1,8,1,4,1,10,1,6,1,4,1,6,3,
16,1,4,1,4,2,4,2,114,9,0,0,0,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,3,0,0,0,115,42,0,0,0,116,0,160,
- 1,100,1,116,2,161,2,1,0,124,0,160,3,124,1,124,
+ 4,0,0,0,3,0,0,0,115,42,0,0,0,116,0,106,
+ 1,100,1,116,2,131,2,1,0,124,0,160,3,124,1,124,
2,161,2,125,3,124,3,100,2,117,0,114,18,100,2,83,
0,124,3,106,4,83,0,41,3,122,170,102,105,110,100,32,
116,104,101,32,109,111,100,117,108,101,32,111,110,32,115,121,
@@ -2357,7 +2357,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
46,49,50,59,32,117,115,101,32,102,105,110,100,95,115,112,
101,99,40,41,32,105,110,115,116,101,97,100,78,114,226,0,
0,0,114,227,0,0,0,115,4,0,0,0,32,32,32,32,
- 114,7,0,0,0,114,228,0,0,0,174,5,0,0,115,14,
+ 114,7,0,0,0,114,228,0,0,0,175,5,0,0,115,14,
0,0,0,6,8,2,2,4,254,12,3,8,1,4,1,6,
1,114,9,0,0,0,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,0,
@@ -2389,7 +2389,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,218,18,102,105,110,100,95,100,105,115,116,114,105,98,
117,116,105,111,110,115,41,3,114,144,0,0,0,114,145,0,
0,0,114,89,1,0,0,115,3,0,0,0,32,32,32,114,
- 7,0,0,0,114,90,1,0,0,190,5,0,0,115,4,0,
+ 7,0,0,0,114,90,1,0,0,191,5,0,0,115,4,0,
0,0,12,10,16,1,114,9,0,0,0,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,114,69,0,0,0,114,
@@ -2399,7 +2399,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
1,0,0,114,85,1,0,0,114,88,1,0,0,114,225,0,
0,0,114,228,0,0,0,114,90,1,0,0,114,12,0,0,
0,114,9,0,0,0,114,7,0,0,0,114,74,1,0,0,
- 48,5,0,0,115,36,0,0,0,8,0,4,2,2,2,10,
+ 49,5,0,0,115,36,0,0,0,8,0,4,2,2,2,10,
1,2,9,10,1,2,12,10,1,2,21,10,1,2,20,12,
1,2,31,12,1,2,23,12,1,2,15,14,1,114,9,0,
0,0,114,74,1,0,0,99,0,0,0,0,0,0,0,0,
@@ -2427,7 +2427,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
5,125,4,124,3,160,0,136,5,102,1,100,1,100,2,132,
8,124,4,68,0,131,1,161,1,1,0,113,5,124,3,124,
0,95,1,124,1,112,28,100,3,124,0,95,2,116,3,124,
- 0,106,2,131,1,115,44,116,4,116,5,160,6,161,0,124,
+ 0,106,2,131,1,115,44,116,4,116,5,106,6,131,0,124,
0,106,2,131,2,124,0,95,2,100,4,124,0,95,7,116,
8,131,0,124,0,95,9,116,8,131,0,124,0,95,10,100,
5,83,0,41,6,122,154,73,110,105,116,105,97,108,105,122,
@@ -2446,7 +2446,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,83,0,114,69,0,0,0,114,12,0,0,0,41,3,114,
5,0,0,0,114,41,1,0,0,114,163,0,0,0,115,3,
0,0,0,32,32,128,114,7,0,0,0,114,8,0,0,0,
- 219,5,0,0,115,4,0,0,0,2,128,22,0,114,9,0,
+ 220,5,0,0,115,4,0,0,0,2,128,22,0,114,9,0,
0,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,97,0,0,0,114,
@@ -2460,7 +2460,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,211,0,0,0,114,163,0,
0,0,115,6,0,0,0,32,32,32,32,32,64,114,7,0,
- 0,0,114,235,0,0,0,213,5,0,0,115,22,0,0,0,
+ 0,0,114,235,0,0,0,214,5,0,0,115,22,0,0,0,
2,128,4,4,12,1,26,1,6,1,10,2,10,1,18,1,
6,1,8,1,12,1,114,9,0,0,0,122,19,70,105,108,
101,70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,
@@ -2470,12 +2470,12 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
116,101,32,116,104,101,32,100,105,114,101,99,116,111,114,121,
32,109,116,105,109,101,46,114,130,0,0,0,78,41,1,114,
93,1,0,0,114,20,1,0,0,115,1,0,0,0,32,114,
- 7,0,0,0,114,75,1,0,0,229,5,0,0,114,81,0,
+ 7,0,0,0,114,75,1,0,0,230,5,0,0,114,81,0,
0,0,114,9,0,0,0,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,4,0,0,0,3,0,0,0,115,54,0,0,0,116,
- 0,160,1,100,1,116,2,161,2,1,0,124,0,160,3,124,
+ 0,0,3,0,0,0,3,0,0,0,115,54,0,0,0,116,
+ 0,106,1,100,1,116,2,131,2,1,0,124,0,160,3,124,
1,161,1,125,2,124,2,100,2,117,0,114,19,100,2,103,
0,102,2,83,0,124,2,106,4,124,2,106,5,112,25,103,
0,102,2,83,0,41,3,122,197,84,114,121,32,116,111,32,
@@ -2501,7 +2501,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,114,101,0,0,0,114,225,0,0,0,114,163,0,0,
0,114,201,0,0,0,41,3,114,143,0,0,0,114,162,0,
0,0,114,209,0,0,0,115,3,0,0,0,32,32,32,114,
- 7,0,0,0,114,160,0,0,0,235,5,0,0,115,14,0,
+ 7,0,0,0,114,160,0,0,0,236,5,0,0,115,14,0,
0,0,6,7,2,2,4,254,10,3,8,1,8,1,16,1,
114,9,0,0,0,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,
@@ -2512,14 +2512,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
41,7,114,143,0,0,0,114,210,0,0,0,114,162,0,0,
0,114,65,0,0,0,90,4,115,109,115,108,114,224,0,0,
0,114,163,0,0,0,115,7,0,0,0,32,32,32,32,32,
- 32,32,114,7,0,0,0,114,88,1,0,0,250,5,0,0,
+ 32,32,114,7,0,0,0,114,88,1,0,0,251,5,0,0,
115,8,0,0,0,10,1,8,1,2,1,6,255,114,9,0,
0,0,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,9,0,0,0,3,0,0,0,115,126,
1,0,0,100,1,125,3,124,1,160,0,100,2,161,1,100,
3,25,0,125,4,9,0,116,1,124,0,106,2,112,17,116,
- 3,160,4,161,0,131,1,106,5,125,5,110,12,35,0,4,
+ 3,106,4,131,0,131,1,106,5,125,5,110,12,35,0,4,
0,116,6,121,190,1,0,1,0,1,0,100,4,125,5,89,
0,110,1,37,0,124,5,124,0,106,7,107,3,114,45,124,
0,160,8,161,0,1,0,124,5,124,0,95,7,116,9,131,
@@ -2570,7 +2570,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
110,97,109,101,90,9,102,117,108,108,95,112,97,116,104,114,
209,0,0,0,115,14,0,0,0,32,32,32,32,32,32,32,
32,32,32,32,32,32,32,114,7,0,0,0,114,225,0,0,
- 0,255,5,0,0,115,94,0,0,0,4,5,14,1,2,1,
+ 0,0,6,0,0,115,94,0,0,0,4,5,14,1,2,1,
22,1,2,128,12,1,8,1,2,128,10,1,8,1,6,1,
6,2,6,1,10,1,6,2,4,1,8,2,12,1,14,1,
8,1,10,1,8,1,24,1,2,255,8,5,14,2,2,1,
@@ -2582,8 +2582,8 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,10,
0,0,0,3,0,0,0,115,194,0,0,0,124,0,106,0,
- 125,1,9,0,116,1,160,2,124,1,112,11,116,1,160,3,
- 161,0,161,1,125,2,110,15,35,0,4,0,116,4,116,5,
+ 125,1,9,0,116,1,106,2,124,1,112,11,116,1,106,3,
+ 131,0,131,1,125,2,110,15,35,0,4,0,116,4,116,5,
116,6,102,3,121,96,1,0,1,0,1,0,103,0,125,2,
89,0,110,1,37,0,116,7,106,8,160,9,100,1,161,1,
115,41,116,10,124,2,131,1,124,0,95,11,110,37,116,10,
@@ -2604,7 +2604,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,124,0,93,6,125,1,124,1,160,0,161,0,146,2,113,
2,83,0,114,12,0,0,0,41,1,114,131,0,0,0,41,
2,114,5,0,0,0,90,2,102,110,115,2,0,0,0,32,
- 32,114,7,0,0,0,114,14,0,0,0,79,6,0,0,115,
+ 32,114,7,0,0,0,114,14,0,0,0,80,6,0,0,115,
2,0,0,0,20,0,114,9,0,0,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,
@@ -2622,7 +2622,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
67,1,0,0,114,141,0,0,0,114,51,1,0,0,114,41,
1,0,0,90,8,110,101,119,95,110,97,109,101,115,9,0,
0,0,32,32,32,32,32,32,32,32,32,114,7,0,0,0,
- 114,98,1,0,0,50,6,0,0,115,42,0,0,0,6,2,
+ 114,98,1,0,0,51,6,0,0,115,42,0,0,0,6,2,
2,1,20,1,2,128,18,1,8,3,2,128,12,3,12,1,
6,7,8,1,16,1,4,1,18,1,4,2,12,1,6,1,
12,1,20,1,4,255,2,233,115,13,0,0,0,132,9,14,
@@ -2662,7 +2662,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
114,65,0,0,0,114,220,0,0,0,114,97,1,0,0,115,
3,0,0,0,32,128,128,114,7,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,91,6,0,0,115,6,0,0,0,8,
+ 70,105,110,100,101,114,92,6,0,0,115,6,0,0,0,8,
2,12,1,16,1,114,9,0,0,0,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,
@@ -2670,14 +2670,14 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
101,114,78,114,12,0,0,0,41,3,114,220,0,0,0,114,
97,1,0,0,114,102,1,0,0,115,3,0,0,0,96,96,
32,114,7,0,0,0,218,9,112,97,116,104,95,104,111,111,
- 107,81,6,0,0,115,6,0,0,0,4,128,14,10,4,6,
+ 107,82,6,0,0,115,6,0,0,0,4,128,14,10,4,6,
114,9,0,0,0,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,3,0,0,0,3,0,0,0,
114,64,1,0,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,89,0,0,
0,114,65,0,0,0,114,20,1,0,0,115,1,0,0,0,
- 32,114,7,0,0,0,114,65,1,0,0,99,6,0,0,114,
+ 32,114,7,0,0,0,114,65,1,0,0,100,6,0,0,114,
58,1,0,0,114,9,0,0,0,122,19,70,105,108,101,70,
105,110,100,101,114,46,95,95,114,101,112,114,95,95,114,69,
0,0,0,41,15,114,149,0,0,0,114,148,0,0,0,114,
@@ -2686,7 +2686,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
0,0,114,88,1,0,0,114,225,0,0,0,114,98,1,0,
0,114,233,0,0,0,114,103,1,0,0,114,65,1,0,0,
114,12,0,0,0,114,9,0,0,0,114,7,0,0,0,114,
- 91,1,0,0,204,5,0,0,115,24,0,0,0,8,0,4,
+ 91,1,0,0,205,5,0,0,115,24,0,0,0,8,0,4,
2,8,7,8,16,4,4,8,2,8,15,10,5,8,51,2,
31,10,1,12,17,114,9,0,0,0,114,91,1,0,0,99,
4,0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,
@@ -2710,13 +2710,13 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
97,116,104,110,97,109,101,114,163,0,0,0,114,209,0,0,
0,115,6,0,0,0,32,32,32,32,32,32,114,7,0,0,
0,218,14,95,102,105,120,95,117,112,95,109,111,100,117,108,
- 101,105,6,0,0,115,40,0,0,0,10,2,10,1,4,1,
+ 101,106,6,0,0,115,40,0,0,0,10,2,10,1,4,1,
4,1,8,1,8,1,12,1,10,2,4,1,14,1,2,1,
8,1,8,1,8,1,12,1,2,128,12,1,6,2,2,128,
2,254,115,15,0,0,0,171,16,61,0,189,7,65,7,7,
193,8,1,65,7,7,114,108,1,0,0,99,0,0,0,0,
0,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,
- 115,38,0,0,0,116,0,116,1,160,2,161,0,102,2,125,
+ 115,38,0,0,0,116,0,116,1,106,2,131,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,2,122,95,82,
101,116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,
@@ -2731,7 +2731,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
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,115,3,0,0,0,32,32,32,114,7,0,0,0,
- 114,207,0,0,0,128,6,0,0,115,8,0,0,0,12,5,
+ 114,207,0,0,0,129,6,0,0,115,8,0,0,0,12,5,
8,1,8,1,10,1,114,9,0,0,0,114,207,0,0,0,
99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,
0,3,0,0,0,115,8,0,0,0,124,0,97,0,100,0,
@@ -2739,7 +2739,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100,
117,108,101,115,1,0,0,0,32,114,7,0,0,0,218,21,
95,115,101,116,95,98,111,111,116,115,116,114,97,112,95,109,
- 111,100,117,108,101,139,6,0,0,115,2,0,0,0,8,2,
+ 111,100,117,108,101,140,6,0,0,115,2,0,0,0,8,2,
114,9,0,0,0,114,111,1,0,0,99,1,0,0,0,0,
0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,115,
50,0,0,0,116,0,124,0,131,1,1,0,116,1,131,0,
@@ -2754,7 +2754,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
112,97,116,104,114,61,0,0,0,114,74,1,0,0,41,2,
114,110,1,0,0,90,17,115,117,112,112,111,114,116,101,100,
95,108,111,97,100,101,114,115,115,2,0,0,0,32,32,114,
- 7,0,0,0,218,8,95,105,110,115,116,97,108,108,144,6,
+ 7,0,0,0,218,8,95,105,110,115,116,97,108,108,145,6,
0,0,115,8,0,0,0,8,2,6,1,20,1,16,1,114,
9,0,0,0,114,113,1,0,0,41,1,114,87,0,0,0,
114,69,0,0,0,41,3,78,78,78,41,2,114,0,0,0,
@@ -2799,7 +2799,7 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = {
1,8,1,10,1,14,1,4,4,4,1,2,1,2,1,4,
255,8,4,6,16,8,3,8,5,8,5,4,6,10,1,8,
30,8,6,8,8,8,10,8,9,8,5,4,7,10,1,8,
- 8,10,5,10,22,0,127,16,38,12,1,4,2,4,1,6,
+ 8,10,5,10,22,0,127,16,39,12,1,4,2,4,1,6,
2,4,1,10,1,8,2,6,2,8,2,16,2,8,71,8,
40,8,19,8,12,8,12,8,31,8,20,8,33,8,28,10,
24,10,13,10,10,8,11,6,14,4,3,2,1,12,255,14,
diff --git a/Python/importlib_zipimport.h b/Python/importlib_zipimport.h
index c16880eac07065..c2d973f967e1e0 100644
--- a/Python/importlib_zipimport.h
+++ b/Python/importlib_zipimport.h
@@ -122,9 +122,9 @@ const unsigned char _Py_M__zipimport[] = {
2,125,2,124,2,160,3,124,1,161,1,125,1,124,1,115,
22,116,4,100,2,124,1,100,3,141,2,130,1,116,5,114,
30,124,1,160,6,116,5,116,7,161,2,125,1,103,0,125,
- 3,9,0,9,0,116,8,160,9,124,1,161,1,125,4,110,
+ 3,9,0,9,0,116,8,106,9,124,1,131,1,125,4,110,
36,35,0,4,0,116,10,116,11,102,2,121,147,1,0,1,
- 0,1,0,116,8,160,12,124,1,161,1,92,2,125,5,125,
+ 0,1,0,116,8,106,12,124,1,131,1,92,2,125,5,125,
6,124,5,124,1,107,2,114,66,116,4,100,5,124,1,100,
3,141,2,130,1,124,5,125,1,124,3,160,13,124,6,161,
1,1,0,89,0,110,15,37,0,124,4,106,14,100,6,64,
@@ -172,7 +172,7 @@ const unsigned char _Py_M__zipimport[] = {
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,4,0,0,0,3,0,0,0,115,90,0,0,0,116,0,
- 160,1,100,1,116,2,161,2,1,0,116,3,124,0,124,1,
+ 106,1,100,1,116,2,131,2,1,0,116,3,124,0,124,1,
131,2,125,3,124,3,100,2,117,1,114,19,124,0,103,0,
102,2,83,0,116,4,124,0,124,1,131,2,125,4,116,5,
124,0,124,4,131,2,114,41,100,2,124,0,106,6,155,0,
@@ -234,8 +234,8 @@ const unsigned char _Py_M__zipimport[] = {
2,114,10,0,0,0,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,4,0,0,0,
- 3,0,0,0,115,28,0,0,0,116,0,160,1,100,1,116,
- 2,161,2,1,0,124,0,160,3,124,1,124,2,161,2,100,
+ 3,0,0,0,115,28,0,0,0,116,0,106,1,100,1,116,
+ 2,131,2,1,0,124,0,160,3,124,1,124,2,161,2,100,
2,25,0,83,0,41,4,97,203,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,
@@ -280,13 +280,13 @@ const unsigned char _Py_M__zipimport[] = {
11,2,2,4,254,16,3,114,10,0,0,0,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,3,0,0,0,0,0,0,0,0,0,
- 0,0,6,0,0,0,3,0,0,0,115,108,0,0,0,116,
+ 0,0,5,0,0,0,3,0,0,0,115,108,0,0,0,116,
0,124,0,124,1,131,2,125,3,124,3,100,1,117,1,114,
- 17,116,1,160,2,124,1,124,0,124,3,100,2,166,3,83,
+ 17,116,1,106,2,124,1,124,0,124,3,100,2,141,3,83,
0,116,3,124,0,124,1,131,2,125,4,116,4,124,0,124,
4,131,2,114,52,124,0,106,5,155,0,116,6,155,0,124,
- 4,155,0,157,3,125,5,116,1,160,7,124,1,100,1,100,
- 3,100,4,166,3,125,6,124,6,106,8,160,9,124,5,161,
+ 4,155,0,157,3,125,5,116,1,106,7,124,1,100,1,100,
+ 3,100,4,141,3,125,6,124,6,106,8,160,9,124,5,161,
1,1,0,124,6,83,0,100,1,83,0,41,5,122,107,67,
114,101,97,116,101,32,97,32,77,111,100,117,108,101,83,112,
101,99,32,102,111,114,32,116,104,101,32,115,112,101,99,105,
@@ -387,8 +387,8 @@ const unsigned char _Py_M__zipimport[] = {
0,3,0,0,0,115,128,0,0,0,116,0,124,0,124,1,
131,2,125,2,124,2,100,1,117,0,114,18,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,32,116,3,160,4,
- 124,3,100,4,161,2,125,4,110,5,124,3,155,0,100,5,
+ 124,0,124,1,131,2,125,3,124,2,114,32,116,3,106,4,
+ 124,3,100,4,131,2,125,4,110,5,124,3,155,0,100,5,
157,2,125,4,9,0,124,0,106,5,124,4,25,0,125,5,
110,11,35,0,4,0,116,6,121,63,1,0,1,0,1,0,
89,0,100,1,83,0,37,0,116,7,124,0,106,8,124,5,
@@ -447,22 +447,22 @@ const unsigned char _Py_M__zipimport[] = {
0,0,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,3,0,0,0,115,
- 0,1,0,0,100,1,125,2,116,0,160,1,124,2,116,2,
- 161,2,1,0,116,3,124,0,124,1,131,2,92,3,125,3,
+ 0,1,0,0,100,1,125,2,116,0,106,1,124,2,116,2,
+ 131,2,1,0,116,3,124,0,124,1,131,2,92,3,125,3,
125,4,125,5,116,4,106,5,160,6,124,1,161,1,125,6,
124,6,100,2,117,0,115,31,116,7,124,6,116,8,131,2,
115,40,116,8,124,1,131,1,125,6,124,6,116,4,106,5,
124,1,60,0,124,0,124,6,95,9,9,0,124,4,114,62,
- 116,10,124,0,124,1,131,2,125,7,116,11,160,12,124,0,
- 106,13,124,7,161,2,125,8,124,8,103,1,124,6,95,14,
+ 116,10,124,0,124,1,131,2,125,7,116,11,106,12,124,0,
+ 106,13,124,7,131,2,125,8,124,8,103,1,124,6,95,14,
116,15,124,6,100,3,131,2,115,70,116,16,124,6,95,16,
- 116,11,160,17,124,6,106,18,124,1,124,5,161,3,1,0,
+ 116,11,106,17,124,6,106,18,124,1,124,5,131,3,1,0,
116,19,124,3,124,6,106,18,131,2,1,0,110,10,35,0,
1,0,1,0,1,0,116,4,106,5,124,1,61,0,130,0,
37,0,9,0,116,4,106,5,124,1,25,0,125,6,110,16,
35,0,4,0,116,20,121,127,1,0,1,0,1,0,116,21,
100,4,124,1,155,2,100,5,157,3,131,1,130,1,37,0,
- 116,22,160,23,100,6,124,1,124,5,161,3,1,0,124,6,
+ 116,22,106,23,100,6,124,1,124,5,131,3,1,0,124,6,
83,0,119,0,41,7,97,64,1,0,0,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,
@@ -623,7 +623,7 @@ const unsigned char _Py_M__zipimport[] = {
0,10,1,14,1,8,1,10,1,8,1,2,255,4,2,114,
10,0,0,0,114,39,0,0,0,99,1,0,0,0,0,0,
0,0,0,0,0,0,9,0,0,0,3,0,0,0,115,248,
- 4,0,0,9,0,116,0,160,1,124,0,161,1,125,1,110,
+ 4,0,0,9,0,116,0,106,1,124,0,131,1,125,1,110,
18,35,0,4,0,116,2,144,2,121,123,1,0,1,0,1,
0,116,3,100,1,124,0,155,2,157,2,124,0,100,2,141,
2,130,1,37,0,124,1,53,0,1,0,9,0,124,1,160,
@@ -695,13 +695,13 @@ const unsigned char _Py_M__zipimport[] = {
0,116,17,144,2,121,116,1,0,1,0,1,0,124,23,160,
16,100,31,161,1,160,18,116,19,161,1,125,23,89,0,110,
1,37,0,124,23,160,20,100,32,116,21,161,2,125,23,116,
- 22,160,23,124,0,124,23,161,2,125,24,124,24,124,14,124,
+ 22,106,23,124,0,124,23,131,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,33,55,0,125,12,144,
1,113,42,9,0,100,0,4,0,4,0,131,3,1,0,110,
12,35,0,49,0,144,2,115,101,119,4,37,0,1,0,1,
- 0,1,0,89,0,1,0,1,0,116,24,160,25,100,34,124,
- 12,124,0,161,3,1,0,124,11,83,0,119,0,119,0,119,
+ 0,1,0,89,0,1,0,1,0,116,24,106,25,100,34,124,
+ 12,124,0,131,3,1,0,124,11,83,0,119,0,119,0,119,
0,119,0,119,0,119,0,119,0,119,0,41,35,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,13,0,0,0,114,94,0,0,0,250,
@@ -822,13 +822,13 @@ const unsigned char _Py_M__zipimport[] = {
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,8,0,0,0,3,0,0,0,115,110,0,0,0,116,0,
- 114,11,116,1,160,2,100,1,161,1,1,0,116,3,100,2,
+ 114,11,116,1,106,2,100,1,131,1,1,0,116,3,100,2,
131,1,130,1,100,3,97,0,9,0,100,4,100,5,108,4,
109,5,125,0,1,0,110,17,35,0,4,0,116,6,121,54,
- 1,0,1,0,1,0,116,1,160,2,100,1,161,1,1,0,
+ 1,0,1,0,1,0,116,1,106,2,100,1,131,1,1,0,
116,3,100,2,131,1,130,1,37,0,9,0,100,6,97,0,
- 110,5,35,0,100,6,97,0,119,0,37,0,116,1,160,2,
- 100,7,161,1,1,0,124,0,83,0,119,0,41,8,78,122,
+ 110,5,35,0,100,6,97,0,119,0,37,0,116,1,106,2,
+ 100,7,131,1,1,0,124,0,83,0,119,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,
@@ -851,7 +851,7 @@ const unsigned char _Py_M__zipimport[] = {
0,9,0,0,0,3,0,0,0,115,132,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,18,116,0,100,2,131,1,
- 130,1,116,1,160,2,124,0,161,1,53,0,125,10,9,0,
+ 130,1,116,1,106,2,124,0,131,1,53,0,125,10,9,0,
124,10,160,3,124,6,161,1,1,0,110,17,35,0,4,0,
116,4,121,193,1,0,1,0,1,0,116,0,100,3,124,0,
155,2,157,2,124,0,100,4,141,2,130,1,37,0,124,10,
@@ -913,21 +913,21 @@ const unsigned char _Py_M__zipimport[] = {
114,11,0,0,0,218,9,95,101,113,95,109,116,105,109,101,
115,2,0,0,115,2,0,0,0,16,2,114,10,0,0,0,
114,154,0,0,0,99,5,0,0,0,0,0,0,0,0,0,
- 0,0,6,0,0,0,3,0,0,0,115,254,0,0,0,124,
- 3,124,2,100,1,156,2,125,5,116,0,160,1,124,4,124,
- 3,124,5,161,3,125,6,124,6,100,2,64,0,100,3,107,
+ 0,0,5,0,0,0,3,0,0,0,115,254,0,0,0,124,
+ 3,124,2,100,1,156,2,125,5,116,0,106,1,124,4,124,
+ 3,124,5,131,3,125,6,124,6,100,2,64,0,100,3,107,
3,125,7,124,7,114,63,124,6,100,4,64,0,100,3,107,
3,125,8,116,2,106,3,100,5,107,3,114,62,124,8,115,
38,116,2,106,3,100,6,107,2,114,62,116,4,124,0,124,
- 2,131,2,125,9,124,9,100,0,117,1,114,62,116,2,160,
- 5,116,0,106,6,124,9,161,2,125,10,116,0,160,7,124,
- 4,124,10,124,3,124,5,161,4,1,0,110,40,116,8,124,
+ 2,131,2,125,9,124,9,100,0,117,1,114,62,116,2,106,
+ 5,116,0,106,6,124,9,131,2,125,10,116,0,106,7,124,
+ 4,124,10,124,3,124,5,131,4,1,0,110,40,116,8,124,
0,124,2,131,2,92,2,125,11,125,12,124,11,114,103,116,
9,116,10,124,4,100,7,100,8,133,2,25,0,131,1,124,
11,131,2,114,93,116,10,124,4,100,8,100,9,133,2,25,
- 0,131,1,124,12,107,3,114,103,116,11,160,12,100,10,124,
- 3,155,2,157,2,161,1,1,0,100,0,83,0,116,13,160,
- 14,124,4,100,9,100,0,133,2,25,0,161,1,125,13,116,
+ 0,131,1,124,12,107,3,114,103,116,11,106,12,100,10,124,
+ 3,155,2,157,2,131,1,1,0,100,0,83,0,116,13,106,
+ 14,124,4,100,9,100,0,133,2,25,0,131,1,125,13,116,
15,124,13,116,16,131,2,115,125,116,17,100,11,124,1,155,
2,100,12,157,3,131,1,130,1,124,13,83,0,41,13,78,
41,2,114,48,0,0,0,114,14,0,0,0,114,5,0,0,
@@ -987,11 +987,11 @@ const unsigned char _Py_M__zipimport[] = {
111,109,112,105,108,101,95,115,111,117,114,99,101,175,2,0,
0,115,4,0,0,0,8,1,16,1,114,10,0,0,0,114,
168,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,
- 0,11,0,0,0,3,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,
+ 0,10,0,0,0,3,0,0,0,115,68,0,0,0,116,0,
+ 106,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,
+ 64,0,100,8,20,0,100,9,100,9,100,9,102,9,131,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,94,0,0,0,114,15,0,
@@ -1040,8 +1040,8 @@ const unsigned char _Py_M__zipimport[] = {
0,9,0,0,0,3,0,0,0,115,14,1,0,0,116,0,
124,0,124,1,131,2,125,2,100,0,125,3,116,1,68,0,
93,100,92,3,125,4,125,5,125,6,124,2,124,4,23,0,
- 125,7,116,2,160,3,100,1,124,0,106,4,116,5,124,7,
- 100,2,100,3,166,5,1,0,9,0,124,0,106,6,124,7,
+ 125,7,116,2,106,3,100,1,124,0,106,4,116,5,124,7,
+ 100,2,100,3,141,5,1,0,9,0,124,0,106,6,124,7,
25,0,125,8,110,10,35,0,4,0,116,7,121,134,1,0,
1,0,1,0,89,0,113,9,37,0,124,8,100,4,25,0,
125,9,116,8,124,0,106,4,124,8,131,2,125,10,100,0,
diff --git a/Python/symtable.c b/Python/symtable.c
index 62bd1e2ec48f8a..4508464ef13f24 100644
--- a/Python/symtable.c
+++ b/Python/symtable.c
@@ -391,7 +391,7 @@ PySymtable_Lookup(struct symtable *st, void *key)
return (PySTEntryObject *)v;
}
-static long
+long
_PyST_GetSymbol(PySTEntryObject *ste, PyObject *name)
{
PyObject *v = PyDict_GetItemWithError(ste->ste_symbols, name);
1
0
https://github.com/python/cpython/commit/66c53b48e1f5c841d9f48e51ce7bf1a74b…
commit: 66c53b48e1f5c841d9f48e51ce7bf1a74b75b629
branch: main
author: Pablo Galindo <Pablogsal(a)gmail.com>
committer: pablogsal <Pablogsal(a)gmail.com>
date: 2021-06-30T21:55:57+01:00
summary:
Fix compiler errors for unused variables in marshal.c (GH-26977)
files:
M Python/marshal.c
diff --git a/Python/marshal.c b/Python/marshal.c
index 182dee7966aa8..6c08189cca29b 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -1371,8 +1371,6 @@ r_object(RFILE *p)
if (exceptiontable == NULL)
goto code_error;
- Py_ssize_t nlocalsplus = PyTuple_GET_SIZE(localsplusnames);
-
struct _PyCodeConstructor con = {
.filename = filename,
.name = name,
1
0
bpo-44535: Enable building with Visual Studio 2022 on Windows (GH-26962)
by miss-islington 30 Jun '21
by miss-islington 30 Jun '21
30 Jun '21
https://github.com/python/cpython/commit/67e394562d67cbcd0ac8114e5439494e76…
commit: 67e394562d67cbcd0ac8114e5439494e7645b8f5
branch: 3.9
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: miss-islington <31488909+miss-islington(a)users.noreply.github.com>
date: 2021-06-30T12:31:04-07:00
summary:
bpo-44535: Enable building with Visual Studio 2022 on Windows (GH-26962)
(cherry picked from commit d3a95c1b6eacbbbd92c294744e7ed41932f3f63e)
Co-authored-by: Steve Dower <steve.dower(a)python.org>
files:
A Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
M PCbuild/python.props
diff --git a/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst b/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
new file mode 100644
index 00000000000000..e06d0d304852f3
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
@@ -0,0 +1 @@
+Enable building using a Visual Studio 2022 install on Windows.
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 419d5ebe84c2d1..acbf4e005ec5ba 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -11,6 +11,7 @@
We set BasePlatformToolset for ICC's benefit, it's otherwise ignored.
-->
+ <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '17.0' or '$(VisualStudioVersion)' == '17.0')">v142</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '16.0' or '$(VisualStudioVersion)' == '16.0')">v142</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '15.0' or '$(VisualStudioVersion)' == '15.0')">v141</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VCTargetsPath14)' != ''">v140</BasePlatformToolset>
1
0
bpo-44535: Enable building with Visual Studio 2022 on Windows (GH-26962)
by miss-islington 30 Jun '21
by miss-islington 30 Jun '21
30 Jun '21
https://github.com/python/cpython/commit/6843a3b9300eb80c2bf5dac7dd363dae9e…
commit: 6843a3b9300eb80c2bf5dac7dd363dae9e6f000d
branch: 3.10
author: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
committer: miss-islington <31488909+miss-islington(a)users.noreply.github.com>
date: 2021-06-30T12:24:42-07:00
summary:
bpo-44535: Enable building with Visual Studio 2022 on Windows (GH-26962)
(cherry picked from commit d3a95c1b6eacbbbd92c294744e7ed41932f3f63e)
Co-authored-by: Steve Dower <steve.dower(a)python.org>
files:
A Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
M PCbuild/python.props
diff --git a/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst b/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
new file mode 100644
index 00000000000000..e06d0d304852f3
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
@@ -0,0 +1 @@
+Enable building using a Visual Studio 2022 install on Windows.
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 4a56d50b8b7655..60625101b47287 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -11,6 +11,7 @@
We set BasePlatformToolset for ICC's benefit, it's otherwise ignored.
-->
+ <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '17.0' or '$(VisualStudioVersion)' == '17.0')">v142</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '16.0' or '$(VisualStudioVersion)' == '16.0')">v142</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '15.0' or '$(VisualStudioVersion)' == '15.0')">v141</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VCTargetsPath14)' != ''">v140</BasePlatformToolset>
1
0
30 Jun '21
https://github.com/python/cpython/commit/d3a95c1b6eacbbbd92c294744e7ed41932…
commit: d3a95c1b6eacbbbd92c294744e7ed41932f3f63e
branch: main
author: Steve Dower <steve.dower(a)python.org>
committer: zooba <steve.dower(a)microsoft.com>
date: 2021-06-30T20:06:06+01:00
summary:
bpo-44535: Enable building with Visual Studio 2022 on Windows (GH-26962)
files:
A Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
M PCbuild/python.props
diff --git a/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst b/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
new file mode 100644
index 00000000000000..e06d0d304852f3
--- /dev/null
+++ b/Misc/NEWS.d/next/Build/2021-06-30-02-32-46.bpo-44535.M9iN4-.rst
@@ -0,0 +1 @@
+Enable building using a Visual Studio 2022 install on Windows.
diff --git a/PCbuild/python.props b/PCbuild/python.props
index 4a56d50b8b7655..60625101b47287 100644
--- a/PCbuild/python.props
+++ b/PCbuild/python.props
@@ -11,6 +11,7 @@
We set BasePlatformToolset for ICC's benefit, it's otherwise ignored.
-->
+ <BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '17.0' or '$(VisualStudioVersion)' == '17.0')">v142</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '16.0' or '$(VisualStudioVersion)' == '16.0')">v142</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and ('$(MSBuildToolsVersion)' == '15.0' or '$(VisualStudioVersion)' == '15.0')">v141</BasePlatformToolset>
<BasePlatformToolset Condition="'$(BasePlatformToolset)' == '' and '$(VCTargetsPath14)' != ''">v140</BasePlatformToolset>
1
0
bpo-41180: Fixes documentation to specify correct event name and add versionchanged (GH-26972)
by zooba 30 Jun '21
by zooba 30 Jun '21
30 Jun '21
https://github.com/python/cpython/commit/95919b0d2744adb87acf696ae1de905cf0…
commit: 95919b0d2744adb87acf696ae1de905cf02a95a6
branch: main
author: Steve Dower <steve.dower(a)python.org>
committer: zooba <steve.dower(a)microsoft.com>
date: 2021-06-30T18:53:13+01:00
summary:
bpo-41180: Fixes documentation to specify correct event name and add versionchanged (GH-26972)
files:
M Doc/library/marshal.rst
diff --git a/Doc/library/marshal.rst b/Doc/library/marshal.rst
index 458c0d53a225e..24f9dc1689da4 100644
--- a/Doc/library/marshal.rst
+++ b/Doc/library/marshal.rst
@@ -76,13 +76,18 @@ The module defines these functions:
format), raise :exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. The
file must be a readable :term:`binary file`.
- .. audit-event:: marshal.loads bytes marshal.load
+ .. audit-event:: marshal.load "" marshal.load
.. note::
If an object containing an unsupported type was marshalled with :func:`dump`,
:func:`load` will substitute ``None`` for the unmarshallable type.
+ .. versionchanged:: 3.10
+
+ This call used to raise a ``code.__new__`` audit event for each code object. Now
+ it raises a single ``marshal.load`` event for the entire load operation.
+
.. function:: dumps(value[, version])
@@ -104,6 +109,11 @@ The module defines these functions:
.. audit-event:: marshal.loads bytes marshal.load
+ .. versionchanged:: 3.10
+
+ This call used to raise a ``code.__new__`` audit event for each code object. Now
+ it raises a single ``marshal.loads`` event for the entire load operation.
+
In addition, the following constants are defined:
1
0
bpo-41180: Replace marshal code.__new__ audit event with marshal.load[s] and marshal.dumps (GH-26971)
by zooba 30 Jun '21
by zooba 30 Jun '21
30 Jun '21
https://github.com/python/cpython/commit/863e3d5c7e037b24b8294b041ed7686b52…
commit: 863e3d5c7e037b24b8294b041ed7686b522973d8
branch: 3.9
author: Steve Dower <steve.dower(a)python.org>
committer: zooba <steve.dower(a)microsoft.com>
date: 2021-06-30T18:52:39+01:00
summary:
bpo-41180: Replace marshal code.__new__ audit event with marshal.load[s] and marshal.dumps (GH-26971)
files:
A Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
M Doc/library/marshal.rst
M Lib/test/audit-tests.py
M Lib/test/test_audit.py
M Python/marshal.c
diff --git a/Doc/library/marshal.rst b/Doc/library/marshal.rst
index d65afc20041133..b38ba54b3c3bc6 100644
--- a/Doc/library/marshal.rst
+++ b/Doc/library/marshal.rst
@@ -66,6 +66,8 @@ The module defines these functions:
The *version* argument indicates the data format that ``dump`` should use
(see below).
+ .. audit-event:: marshal.dumps value,version marshal.dump
+
.. function:: load(file)
@@ -74,11 +76,18 @@ The module defines these functions:
format), raise :exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. The
file must be a readable :term:`binary file`.
+ .. audit-event:: marshal.load "" marshal.load
+
.. note::
If an object containing an unsupported type was marshalled with :func:`dump`,
:func:`load` will substitute ``None`` for the unmarshallable type.
+ .. versionchanged:: 3.9.7
+
+ This call used to raise a ``code.__new__`` audit event for each code object. Now
+ it raises a single ``marshal.load`` event for the entire load operation.
+
.. function:: dumps(value[, version])
@@ -89,6 +98,8 @@ The module defines these functions:
The *version* argument indicates the data format that ``dumps`` should use
(see below).
+ .. audit-event:: marshal.dumps value,version marshal.dump
+
.. function:: loads(bytes)
@@ -96,6 +107,13 @@ The module defines these functions:
:exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. Extra bytes in the
input are ignored.
+ .. audit-event:: marshal.loads bytes marshal.load
+
+ .. versionchanged:: 3.9.7
+
+ This call used to raise a ``code.__new__`` audit event for each code object. Now
+ it raises a single ``marshal.loads`` event for the entire load operation.
+
In addition, the following constants are defined:
diff --git a/Lib/test/audit-tests.py b/Lib/test/audit-tests.py
index 8e66594e52429b..95216bcc48253c 100644
--- a/Lib/test/audit-tests.py
+++ b/Lib/test/audit-tests.py
@@ -6,6 +6,7 @@
"""
import contextlib
+import os
import sys
@@ -106,6 +107,32 @@ def test_block_add_hook_baseexception():
pass
+def test_marshal():
+ import marshal
+ o = ("a", "b", "c", 1, 2, 3)
+ payload = marshal.dumps(o)
+
+ with TestHook() as hook:
+ assertEqual(o, marshal.loads(marshal.dumps(o)))
+
+ try:
+ with open("test-marshal.bin", "wb") as f:
+ marshal.dump(o, f)
+ with open("test-marshal.bin", "rb") as f:
+ assertEqual(o, marshal.load(f))
+ finally:
+ os.unlink("test-marshal.bin")
+
+ actual = [(a[0], a[1]) for e, a in hook.seen if e == "marshal.dumps"]
+ assertSequenceEqual(actual, [(o, marshal.version)] * 2)
+
+ actual = [a[0] for e, a in hook.seen if e == "marshal.loads"]
+ assertSequenceEqual(actual, [payload])
+
+ actual = [e for e, a in hook.seen if e == "marshal.load"]
+ assertSequenceEqual(actual, ["marshal.load"])
+
+
def test_pickle():
import pickle
diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py
index a9ac6fee446f87..387a31229a2f16 100644
--- a/Lib/test/test_audit.py
+++ b/Lib/test/test_audit.py
@@ -51,6 +51,11 @@ def test_block_add_hook(self):
def test_block_add_hook_baseexception(self):
self.do_test("test_block_add_hook_baseexception")
+ def test_marshal(self):
+ support.import_module("marshal")
+
+ self.do_test("test_marshal")
+
def test_pickle(self):
support.import_module("pickle")
diff --git a/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst b/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
new file mode 100644
index 00000000000000..88b70c7cea2610
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
@@ -0,0 +1,5 @@
+Add auditing events to the :mod:`marshal` module, and stop raising
+``code.__init__`` events for every unmarshalled code object. Directly
+instantiated code objects will continue to raise an event, and audit event
+handlers should inspect or collect the raw marshal data. This reduces a
+significant performance overhead when loading from ``.pyc`` files.
diff --git a/Python/marshal.c b/Python/marshal.c
index c4538bd373a82e..baafa3ecfbf1de 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -596,14 +596,18 @@ PyMarshal_WriteObjectToFile(PyObject *x, FILE *fp, int version)
{
char buf[BUFSIZ];
WFILE wf;
+ if (PySys_Audit("marshal.dumps", "Oi", x, version) < 0) {
+ return; /* caller must check PyErr_Occurred() */
+ }
memset(&wf, 0, sizeof(wf));
wf.fp = fp;
wf.ptr = wf.buf = buf;
wf.end = wf.ptr + sizeof(buf);
wf.error = WFERR_OK;
wf.version = version;
- if (w_init_refs(&wf, version))
- return; /* caller mush check PyErr_Occurred() */
+ if (w_init_refs(&wf, version)) {
+ return; /* caller must check PyErr_Occurred() */
+ }
w_object(x, &wf);
w_clear_refs(&wf);
w_flush(&wf);
@@ -1371,12 +1375,6 @@ r_object(RFILE *p)
if (lnotab == NULL)
goto code_error;
- if (PySys_Audit("code.__new__", "OOOiiiiii",
- code, filename, name, argcount, posonlyargcount,
- kwonlyargcount, nlocals, stacksize, flags) < 0) {
- goto code_error;
- }
-
v = (PyObject *) PyCode_NewWithPosOnlyArgs(
argcount, posonlyargcount, kwonlyargcount,
nlocals, stacksize, flags,
@@ -1435,6 +1433,15 @@ read_object(RFILE *p)
fprintf(stderr, "XXX readobject called with exception set\n");
return NULL;
}
+ if (p->ptr && p->end) {
+ if (PySys_Audit("marshal.loads", "y#", p->ptr, (Py_ssize_t)(p->end - p->ptr)) < 0) {
+ return NULL;
+ }
+ } else if (p->fp || p->readable) {
+ if (PySys_Audit("marshal.load", NULL) < 0) {
+ return NULL;
+ }
+ }
v = r_object(p);
if (v == NULL && !PyErr_Occurred())
PyErr_SetString(PyExc_TypeError, "NULL object in marshal data for object");
@@ -1531,7 +1538,7 @@ PyMarshal_ReadObjectFromFile(FILE *fp)
rf.refs = PyList_New(0);
if (rf.refs == NULL)
return NULL;
- result = r_object(&rf);
+ result = read_object(&rf);
Py_DECREF(rf.refs);
if (rf.buf != NULL)
PyMem_FREE(rf.buf);
@@ -1552,7 +1559,7 @@ PyMarshal_ReadObjectFromString(const char *str, Py_ssize_t len)
rf.refs = PyList_New(0);
if (rf.refs == NULL)
return NULL;
- result = r_object(&rf);
+ result = read_object(&rf);
Py_DECREF(rf.refs);
if (rf.buf != NULL)
PyMem_FREE(rf.buf);
@@ -1564,6 +1571,9 @@ PyMarshal_WriteObjectToString(PyObject *x, int version)
{
WFILE wf;
+ if (PySys_Audit("marshal.dumps", "Oi", x, version) < 0) {
+ return NULL;
+ }
memset(&wf, 0, sizeof(wf));
wf.str = PyBytes_FromStringAndSize((char *)NULL, 50);
if (wf.str == NULL)
1
0
bpo-41180: Replace marshal code.__new__ audit event with marshal.load[s] and marshal.dumps (GH-26970)
by zooba 30 Jun '21
by zooba 30 Jun '21
30 Jun '21
https://github.com/python/cpython/commit/a5764d3d96341441d3f70fb5c96a82610a…
commit: a5764d3d96341441d3f70fb5c96a82610a3f4842
branch: 3.10
author: Steve Dower <steve.dower(a)python.org>
committer: zooba <steve.dower(a)microsoft.com>
date: 2021-06-30T18:52:25+01:00
summary:
bpo-41180: Replace marshal code.__new__ audit event with marshal.load[s] and marshal.dumps (GH-26970)
files:
A Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
M Doc/library/marshal.rst
M Lib/test/audit-tests.py
M Lib/test/test_audit.py
M Python/marshal.c
diff --git a/Doc/library/marshal.rst b/Doc/library/marshal.rst
index d65afc20041133..24f9dc1689da4a 100644
--- a/Doc/library/marshal.rst
+++ b/Doc/library/marshal.rst
@@ -66,6 +66,8 @@ The module defines these functions:
The *version* argument indicates the data format that ``dump`` should use
(see below).
+ .. audit-event:: marshal.dumps value,version marshal.dump
+
.. function:: load(file)
@@ -74,11 +76,18 @@ The module defines these functions:
format), raise :exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. The
file must be a readable :term:`binary file`.
+ .. audit-event:: marshal.load "" marshal.load
+
.. note::
If an object containing an unsupported type was marshalled with :func:`dump`,
:func:`load` will substitute ``None`` for the unmarshallable type.
+ .. versionchanged:: 3.10
+
+ This call used to raise a ``code.__new__`` audit event for each code object. Now
+ it raises a single ``marshal.load`` event for the entire load operation.
+
.. function:: dumps(value[, version])
@@ -89,6 +98,8 @@ The module defines these functions:
The *version* argument indicates the data format that ``dumps`` should use
(see below).
+ .. audit-event:: marshal.dumps value,version marshal.dump
+
.. function:: loads(bytes)
@@ -96,6 +107,13 @@ The module defines these functions:
:exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. Extra bytes in the
input are ignored.
+ .. audit-event:: marshal.loads bytes marshal.load
+
+ .. versionchanged:: 3.10
+
+ This call used to raise a ``code.__new__`` audit event for each code object. Now
+ it raises a single ``marshal.loads`` event for the entire load operation.
+
In addition, the following constants are defined:
diff --git a/Lib/test/audit-tests.py b/Lib/test/audit-tests.py
index 7a7de637c38823..ccec9fedc4460d 100644
--- a/Lib/test/audit-tests.py
+++ b/Lib/test/audit-tests.py
@@ -6,6 +6,7 @@
"""
import contextlib
+import os
import sys
@@ -106,6 +107,32 @@ def test_block_add_hook_baseexception():
pass
+def test_marshal():
+ import marshal
+ o = ("a", "b", "c", 1, 2, 3)
+ payload = marshal.dumps(o)
+
+ with TestHook() as hook:
+ assertEqual(o, marshal.loads(marshal.dumps(o)))
+
+ try:
+ with open("test-marshal.bin", "wb") as f:
+ marshal.dump(o, f)
+ with open("test-marshal.bin", "rb") as f:
+ assertEqual(o, marshal.load(f))
+ finally:
+ os.unlink("test-marshal.bin")
+
+ actual = [(a[0], a[1]) for e, a in hook.seen if e == "marshal.dumps"]
+ assertSequenceEqual(actual, [(o, marshal.version)] * 2)
+
+ actual = [a[0] for e, a in hook.seen if e == "marshal.loads"]
+ assertSequenceEqual(actual, [payload])
+
+ actual = [e for e, a in hook.seen if e == "marshal.load"]
+ assertSequenceEqual(actual, ["marshal.load"])
+
+
def test_pickle():
import pickle
diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py
index 25ff34bb11298a..c5ce26323b5f9e 100644
--- a/Lib/test/test_audit.py
+++ b/Lib/test/test_audit.py
@@ -54,6 +54,11 @@ def test_block_add_hook(self):
def test_block_add_hook_baseexception(self):
self.do_test("test_block_add_hook_baseexception")
+ def test_marshal(self):
+ import_helper.import_module("marshal")
+
+ self.do_test("test_marshal")
+
def test_pickle(self):
import_helper.import_module("pickle")
diff --git a/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst b/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
new file mode 100644
index 00000000000000..88b70c7cea2610
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
@@ -0,0 +1,5 @@
+Add auditing events to the :mod:`marshal` module, and stop raising
+``code.__init__`` events for every unmarshalled code object. Directly
+instantiated code objects will continue to raise an event, and audit event
+handlers should inspect or collect the raw marshal data. This reduces a
+significant performance overhead when loading from ``.pyc`` files.
diff --git a/Python/marshal.c b/Python/marshal.c
index fa4ec9eb605f05..41252406060def 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -596,14 +596,18 @@ PyMarshal_WriteObjectToFile(PyObject *x, FILE *fp, int version)
{
char buf[BUFSIZ];
WFILE wf;
+ if (PySys_Audit("marshal.dumps", "Oi", x, version) < 0) {
+ return; /* caller must check PyErr_Occurred() */
+ }
memset(&wf, 0, sizeof(wf));
wf.fp = fp;
wf.ptr = wf.buf = buf;
wf.end = wf.ptr + sizeof(buf);
wf.error = WFERR_OK;
wf.version = version;
- if (w_init_refs(&wf, version))
- return; /* caller mush check PyErr_Occurred() */
+ if (w_init_refs(&wf, version)) {
+ return; /* caller must check PyErr_Occurred() */
+ }
w_object(x, &wf);
w_clear_refs(&wf);
w_flush(&wf);
@@ -1371,12 +1375,6 @@ r_object(RFILE *p)
if (linetable == NULL)
goto code_error;
- if (PySys_Audit("code.__new__", "OOOiiiiii",
- code, filename, name, argcount, posonlyargcount,
- kwonlyargcount, nlocals, stacksize, flags) < 0) {
- goto code_error;
- }
-
v = (PyObject *) PyCode_NewWithPosOnlyArgs(
argcount, posonlyargcount, kwonlyargcount,
nlocals, stacksize, flags,
@@ -1435,6 +1433,15 @@ read_object(RFILE *p)
fprintf(stderr, "XXX readobject called with exception set\n");
return NULL;
}
+ if (p->ptr && p->end) {
+ if (PySys_Audit("marshal.loads", "y#", p->ptr, (Py_ssize_t)(p->end - p->ptr)) < 0) {
+ return NULL;
+ }
+ } else if (p->fp || p->readable) {
+ if (PySys_Audit("marshal.load", NULL) < 0) {
+ return NULL;
+ }
+ }
v = r_object(p);
if (v == NULL && !PyErr_Occurred())
PyErr_SetString(PyExc_TypeError, "NULL object in marshal data for object");
@@ -1531,7 +1538,7 @@ PyMarshal_ReadObjectFromFile(FILE *fp)
rf.refs = PyList_New(0);
if (rf.refs == NULL)
return NULL;
- result = r_object(&rf);
+ result = read_object(&rf);
Py_DECREF(rf.refs);
if (rf.buf != NULL)
PyMem_Free(rf.buf);
@@ -1552,7 +1559,7 @@ PyMarshal_ReadObjectFromString(const char *str, Py_ssize_t len)
rf.refs = PyList_New(0);
if (rf.refs == NULL)
return NULL;
- result = r_object(&rf);
+ result = read_object(&rf);
Py_DECREF(rf.refs);
if (rf.buf != NULL)
PyMem_Free(rf.buf);
@@ -1564,6 +1571,9 @@ PyMarshal_WriteObjectToString(PyObject *x, int version)
{
WFILE wf;
+ if (PySys_Audit("marshal.dumps", "Oi", x, version) < 0) {
+ return NULL;
+ }
memset(&wf, 0, sizeof(wf));
wf.str = PyBytes_FromStringAndSize((char *)NULL, 50);
if (wf.str == NULL)
1
0
bpo-41180: Replace marshal code.__new__ audit event with marshal.load[s] and marshal.dumps (GH-26961)
by zooba 30 Jun '21
by zooba 30 Jun '21
30 Jun '21
https://github.com/python/cpython/commit/139de04518bd98a975b7c98ab8a38e570d…
commit: 139de04518bd98a975b7c98ab8a38e570dc585e4
branch: main
author: Steve Dower <steve.dower(a)python.org>
committer: zooba <steve.dower(a)microsoft.com>
date: 2021-06-30T17:21:37+01:00
summary:
bpo-41180: Replace marshal code.__new__ audit event with marshal.load[s] and marshal.dumps (GH-26961)
files:
A Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
M Doc/library/marshal.rst
M Lib/test/audit-tests.py
M Lib/test/test_audit.py
M Python/marshal.c
diff --git a/Doc/library/marshal.rst b/Doc/library/marshal.rst
index d65afc20041133..458c0d53a225ef 100644
--- a/Doc/library/marshal.rst
+++ b/Doc/library/marshal.rst
@@ -66,6 +66,8 @@ The module defines these functions:
The *version* argument indicates the data format that ``dump`` should use
(see below).
+ .. audit-event:: marshal.dumps value,version marshal.dump
+
.. function:: load(file)
@@ -74,6 +76,8 @@ The module defines these functions:
format), raise :exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. The
file must be a readable :term:`binary file`.
+ .. audit-event:: marshal.loads bytes marshal.load
+
.. note::
If an object containing an unsupported type was marshalled with :func:`dump`,
@@ -89,6 +93,8 @@ The module defines these functions:
The *version* argument indicates the data format that ``dumps`` should use
(see below).
+ .. audit-event:: marshal.dumps value,version marshal.dump
+
.. function:: loads(bytes)
@@ -96,6 +102,8 @@ The module defines these functions:
:exc:`EOFError`, :exc:`ValueError` or :exc:`TypeError`. Extra bytes in the
input are ignored.
+ .. audit-event:: marshal.loads bytes marshal.load
+
In addition, the following constants are defined:
diff --git a/Lib/test/audit-tests.py b/Lib/test/audit-tests.py
index 7a7de637c38823..ccec9fedc4460d 100644
--- a/Lib/test/audit-tests.py
+++ b/Lib/test/audit-tests.py
@@ -6,6 +6,7 @@
"""
import contextlib
+import os
import sys
@@ -106,6 +107,32 @@ def test_block_add_hook_baseexception():
pass
+def test_marshal():
+ import marshal
+ o = ("a", "b", "c", 1, 2, 3)
+ payload = marshal.dumps(o)
+
+ with TestHook() as hook:
+ assertEqual(o, marshal.loads(marshal.dumps(o)))
+
+ try:
+ with open("test-marshal.bin", "wb") as f:
+ marshal.dump(o, f)
+ with open("test-marshal.bin", "rb") as f:
+ assertEqual(o, marshal.load(f))
+ finally:
+ os.unlink("test-marshal.bin")
+
+ actual = [(a[0], a[1]) for e, a in hook.seen if e == "marshal.dumps"]
+ assertSequenceEqual(actual, [(o, marshal.version)] * 2)
+
+ actual = [a[0] for e, a in hook.seen if e == "marshal.loads"]
+ assertSequenceEqual(actual, [payload])
+
+ actual = [e for e, a in hook.seen if e == "marshal.load"]
+ assertSequenceEqual(actual, ["marshal.load"])
+
+
def test_pickle():
import pickle
diff --git a/Lib/test/test_audit.py b/Lib/test/test_audit.py
index 25ff34bb11298a..c5ce26323b5f9e 100644
--- a/Lib/test/test_audit.py
+++ b/Lib/test/test_audit.py
@@ -54,6 +54,11 @@ def test_block_add_hook(self):
def test_block_add_hook_baseexception(self):
self.do_test("test_block_add_hook_baseexception")
+ def test_marshal(self):
+ import_helper.import_module("marshal")
+
+ self.do_test("test_marshal")
+
def test_pickle(self):
import_helper.import_module("pickle")
diff --git a/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst b/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
new file mode 100644
index 00000000000000..88b70c7cea2610
--- /dev/null
+++ b/Misc/NEWS.d/next/Security/2021-06-29-23-40-22.bpo-41180.uTWHv_.rst
@@ -0,0 +1,5 @@
+Add auditing events to the :mod:`marshal` module, and stop raising
+``code.__init__`` events for every unmarshalled code object. Directly
+instantiated code objects will continue to raise an event, and audit event
+handlers should inspect or collect the raw marshal data. This reduces a
+significant performance overhead when loading from ``.pyc`` files.
diff --git a/Python/marshal.c b/Python/marshal.c
index d6504a8b8c18ff..182dee7966aa87 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -596,14 +596,18 @@ PyMarshal_WriteObjectToFile(PyObject *x, FILE *fp, int version)
{
char buf[BUFSIZ];
WFILE wf;
+ if (PySys_Audit("marshal.dumps", "Oi", x, version) < 0) {
+ return; /* caller must check PyErr_Occurred() */
+ }
memset(&wf, 0, sizeof(wf));
wf.fp = fp;
wf.ptr = wf.buf = buf;
wf.end = wf.ptr + sizeof(buf);
wf.error = WFERR_OK;
wf.version = version;
- if (w_init_refs(&wf, version))
- return; /* caller mush check PyErr_Occurred() */
+ if (w_init_refs(&wf, version)) {
+ return; /* caller must check PyErr_Occurred() */
+ }
w_object(x, &wf);
w_clear_refs(&wf);
w_flush(&wf);
@@ -1368,12 +1372,6 @@ r_object(RFILE *p)
goto code_error;
Py_ssize_t nlocalsplus = PyTuple_GET_SIZE(localsplusnames);
- if (PySys_Audit("code.__new__", "OOOiiiiii",
- code, filename, name, argcount, posonlyargcount,
- kwonlyargcount, nlocalsplus, stacksize,
- flags) < 0) {
- goto code_error;
- }
struct _PyCodeConstructor con = {
.filename = filename,
@@ -1460,6 +1458,15 @@ read_object(RFILE *p)
fprintf(stderr, "XXX readobject called with exception set\n");
return NULL;
}
+ if (p->ptr && p->end) {
+ if (PySys_Audit("marshal.loads", "y#", p->ptr, (Py_ssize_t)(p->end - p->ptr)) < 0) {
+ return NULL;
+ }
+ } else if (p->fp || p->readable) {
+ if (PySys_Audit("marshal.load", NULL) < 0) {
+ return NULL;
+ }
+ }
v = r_object(p);
if (v == NULL && !PyErr_Occurred())
PyErr_SetString(PyExc_TypeError, "NULL object in marshal data for object");
@@ -1556,7 +1563,7 @@ PyMarshal_ReadObjectFromFile(FILE *fp)
rf.refs = PyList_New(0);
if (rf.refs == NULL)
return NULL;
- result = r_object(&rf);
+ result = read_object(&rf);
Py_DECREF(rf.refs);
if (rf.buf != NULL)
PyMem_Free(rf.buf);
@@ -1577,7 +1584,7 @@ PyMarshal_ReadObjectFromString(const char *str, Py_ssize_t len)
rf.refs = PyList_New(0);
if (rf.refs == NULL)
return NULL;
- result = r_object(&rf);
+ result = read_object(&rf);
Py_DECREF(rf.refs);
if (rf.buf != NULL)
PyMem_Free(rf.buf);
@@ -1589,6 +1596,9 @@ PyMarshal_WriteObjectToString(PyObject *x, int version)
{
WFILE wf;
+ if (PySys_Audit("marshal.dumps", "Oi", x, version) < 0) {
+ return NULL;
+ }
memset(&wf, 0, sizeof(wf));
wf.str = PyBytes_FromStringAndSize((char *)NULL, 50);
if (wf.str == NULL)
1
0
https://github.com/python/cpython/commit/86eeeb425936ba67d79f32bfbd5c5f8002…
commit: 86eeeb425936ba67d79f32bfbd5c5f8002819438
branch: main
author: Julien Palard <julien(a)palard.fr>
committer: JulienPalard <julien(a)palard.fr>
date: 2021-06-30T11:31:04+02:00
summary:
Doc: fix a rst tag. (GH-26965)
files:
M Doc/library/contextlib.rst
diff --git a/Doc/library/contextlib.rst b/Doc/library/contextlib.rst
index 7ac3856819593..38f619a66d6d8 100644
--- a/Doc/library/contextlib.rst
+++ b/Doc/library/contextlib.rst
@@ -515,9 +515,9 @@ Functions and classes provided:
These context managers may suppress exceptions just as they normally
would if used directly as part of a :keyword:`with` statement.
- ... versionchanged:: 3.11
- Raises :exc:`TypeError` instead of :exc:`AttributeError` if *cm*
- is not a context manager.
+ .. versionchanged:: 3.11
+ Raises :exc:`TypeError` instead of :exc:`AttributeError` if *cm*
+ is not a context manager.
.. method:: push(exit)
@@ -589,9 +589,9 @@ Functions and classes provided:
Similar to :meth:`enter_context` but expects an asynchronous context
manager.
- ... versionchanged:: 3.11
- Raises :exc:`TypeError` instead of :exc:`AttributeError` if *cm*
- is not an asynchronous context manager.
+ .. versionchanged:: 3.11
+ Raises :exc:`TypeError` instead of :exc:`AttributeError` if *cm*
+ is not an asynchronous context manager.
.. method:: push_async_exit(exit)
1
0