hide the __class__ closure from the class body (#12370)

This commit is contained in:
Benjamin Peterson 2013-05-15 15:26:42 -05:00
parent fe361dfab5
commit 312595ce3a
7 changed files with 221 additions and 152 deletions

View File

@ -53,6 +53,9 @@ typedef struct _symtable_entry {
unsigned ste_varkeywords : 1; /* true if block has varkeywords */
unsigned ste_returns_value : 1; /* true if namespace uses return with
an argument */
unsigned ste_needs_class_closure : 1; /* for class scopes, true if a
closure over __class__
should be created */
int ste_lineno; /* first line of block */
int ste_col_offset; /* offset of first line of block */
int ste_opt_lineno; /* lineno of last exec or import * */

View File

@ -390,12 +390,13 @@ def _call_with_frames_removed(f, *args, **kwds):
# keyword-only defaults)
# Python 3.4a1 3260 (add LOAD_CLASSDEREF; allow locals of class to override
# free vars)
# Python 3.4a1 3270 (various tweaks to the __class_ closure)
#
# MAGIC must change whenever the bytecode emitted by the compiler may no
# longer be understood by older implementations of the eval loop (usually
# due to the addition of new opcodes).
_MAGIC_BYTES = (3260).to_bytes(2, 'little') + b'\r\n'
_MAGIC_BYTES = (3270).to_bytes(2, 'little') + b'\r\n'
_RAW_MAGIC_NUMBER = int.from_bytes(_MAGIC_BYTES, 'little')
_PYCACHE = '__pycache__'

View File

@ -81,8 +81,7 @@ class TestSuper(unittest.TestCase):
self.assertEqual(E().f(), 'AE')
@unittest.expectedFailure
def test___class___set(self):
def test_various___class___pathologies(self):
# See issue #12370
class X(A):
def f(self):
@ -91,6 +90,31 @@ class TestSuper(unittest.TestCase):
x = X()
self.assertEqual(x.f(), 'A')
self.assertEqual(x.__class__, 413)
class X:
x = __class__
def f():
__class__
self.assertIs(X.x, type(self))
with self.assertRaises(NameError) as e:
exec("""class X:
__class__
def f():
__class__""", globals(), {})
self.assertIs(type(e.exception), NameError) # Not UnboundLocalError
class X:
global __class__
__class__ = 42
def f():
__class__
self.assertEqual(globals()["__class__"], 42)
del globals()["__class__"]
self.assertNotIn("__class__", X.__dict__)
class X:
nonlocal __class__
__class__ = 42
def f():
__class__
self.assertEqual(__class__, 42)
def test___class___instancemethod(self):
# See issue #14857

View File

@ -10,6 +10,9 @@ What's New in Python 3.4.0 Alpha 1?
Core and Builtins
-----------------
- Issue #12370: Prevent class bodies from interfering with the __class__
closure.
- Issue #17237: Fix crash in the ASCII decoder on m68k.
- Issue #17927: Frame objects kept arguments alive if they had been

View File

@ -535,6 +535,37 @@ compiler_enter_scope(struct compiler *c, identifier name,
compiler_unit_free(u);
return 0;
}
if (u->u_ste->ste_needs_class_closure) {
/* Cook up a implicit __class__ cell. */
_Py_IDENTIFIER(__class__);
PyObject *tuple, *name, *zero;
int res;
assert(u->u_scope_type == COMPILER_SCOPE_CLASS);
assert(PyDict_Size(u->u_cellvars) == 0);
name = _PyUnicode_FromId(&PyId___class__);
if (!name) {
compiler_unit_free(u);
return 0;
}
tuple = PyTuple_Pack(2, name, Py_TYPE(name));
if (!tuple) {
compiler_unit_free(u);
return 0;
}
zero = PyLong_FromLong(0);
if (!zero) {
Py_DECREF(tuple);
compiler_unit_free(u);
return 0;
}
res = PyDict_SetItem(u->u_cellvars, tuple, zero);
Py_DECREF(tuple);
Py_DECREF(zero);
if (res < 0) {
compiler_unit_free(u);
return 0;
}
}
u->u_freevars = dictbytype(u->u_ste->ste_symbols, FREE, DEF_FREE_CLASS,
PyDict_Size(u->u_cellvars));
@ -1331,6 +1362,9 @@ compiler_mod(struct compiler *c, mod_ty mod)
static int
get_ref_type(struct compiler *c, PyObject *name)
{
if (c->u->u_scope_type == COMPILER_SCOPE_CLASS &&
!PyUnicode_CompareWithASCIIString(name, "__class__"))
return CELL;
int scope = PyST_GetScope(c->u->u_ste, name);
if (scope == 0) {
char buf[350];
@ -1704,24 +1738,24 @@ compiler_class(struct compiler *c, stmt_ty s)
compiler_exit_scope(c);
return 0;
}
/* return the (empty) __class__ cell */
str = PyUnicode_InternFromString("__class__");
if (str == NULL) {
compiler_exit_scope(c);
return 0;
}
i = compiler_lookup_arg(c->u->u_cellvars, str);
Py_DECREF(str);
if (i == -1) {
/* This happens when nobody references the cell */
PyErr_Clear();
/* Return None */
ADDOP_O(c, LOAD_CONST, Py_None, consts);
}
else {
if (c->u->u_ste->ste_needs_class_closure) {
/* return the (empty) __class__ cell */
str = PyUnicode_InternFromString("__class__");
if (str == NULL) {
compiler_exit_scope(c);
return 0;
}
i = compiler_lookup_arg(c->u->u_cellvars, str);
Py_DECREF(str);
assert(i == 0);
/* Return the cell where to store __class__ */
ADDOP_I(c, LOAD_CLOSURE, i);
}
else {
assert(PyDict_Size(c->u->u_cellvars) == 0);
/* This happens when nobody references the cell. Return None. */
ADDOP_O(c, LOAD_CONST, Py_None, consts);
}
ADDOP_IN_SCOPE(c, RETURN_VALUE);
/* create the code object */
co = assemble(c, 1);

View File

@ -637,7 +637,7 @@ const unsigned char _Py_M__importlib[] = {
4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,25,
0,0,0,95,99,97,108,108,95,119,105,116,104,95,102,114,
97,109,101,115,95,114,101,109,111,118,101,100,33,1,0,0,
115,2,0,0,0,0,8,114,102,0,0,0,105,188,12,0,
115,2,0,0,0,0,8,114,102,0,0,0,105,198,12,0,
0,233,2,0,0,0,114,13,0,0,0,115,2,0,0,0,
13,10,116,11,0,0,0,95,95,112,121,99,97,99,104,101,
95,95,117,3,0,0,0,46,112,121,117,4,0,0,0,46,
@ -711,7 +711,7 @@ const unsigned char _Py_M__importlib[] = {
36,0,0,0,116,3,0,0,0,116,97,103,244,8,0,0,
0,102,105,108,101,110,97,109,101,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,244,17,0,0,0,99,97,99,
104,101,95,102,114,111,109,95,115,111,117,114,99,101,152,1,
104,101,95,102,114,111,109,95,115,111,117,114,99,101,153,1,
0,0,115,22,0,0,0,0,13,31,1,6,1,9,2,6,
1,18,1,24,1,12,1,12,1,15,1,31,1,114,120,0,
0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,5,
@ -771,7 +771,7 @@ const unsigned char _Py_M__importlib[] = {
109,101,116,7,0,0,0,112,121,99,97,99,104,101,114,117,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,244,17,0,0,0,115,111,117,114,99,101,95,102,114,
111,109,95,99,97,99,104,101,179,1,0,0,115,24,0,0,
111,109,95,99,97,99,104,101,180,1,0,0,115,24,0,0,
0,0,9,18,1,15,1,18,1,18,1,12,1,3,1,24,
1,21,1,3,1,21,1,19,1,114,123,0,0,0,99,1,
0,0,0,0,0,0,0,5,0,0,0,13,0,0,0,67,
@ -812,7 +812,7 @@ const unsigned char _Py_M__importlib[] = {
101,120,116,101,110,115,105,111,110,244,11,0,0,0,115,111,
117,114,99,101,95,112,97,116,104,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,244,15,0,0,0,95,103,101,
116,95,115,111,117,114,99,101,102,105,108,101,202,1,0,0,
116,95,115,111,117,114,99,101,102,105,108,101,203,1,0,0,
115,20,0,0,0,0,7,18,1,4,1,24,1,35,1,4,
2,3,1,16,1,19,1,21,2,114,131,0,0,0,99,1,
0,0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,
@ -829,7 +829,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,40,0,0,0,40,2,0,0,0,114,35,0,0,
0,114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,244,10,0,0,0,95,99,97,108,99,95,
109,111,100,101,223,1,0,0,115,12,0,0,0,0,2,3,
109,111,100,101,224,1,0,0,115,12,0,0,0,0,2,3,
1,22,1,13,1,11,3,10,1,114,133,0,0,0,244,9,
0,0,0,118,101,114,98,111,115,105,116,121,114,29,0,0,
0,99,1,0,0,0,1,0,0,0,3,0,0,0,4,0,
@ -853,7 +853,7 @@ const unsigned char _Py_M__importlib[] = {
244,7,0,0,0,109,101,115,115,97,103,101,114,134,0,0,
0,114,101,0,0,0,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,244,16,0,0,0,95,118,101,114,98,111,
115,101,95,109,101,115,115,97,103,101,235,1,0,0,115,8,
115,101,95,109,101,115,115,97,103,101,236,1,0,0,115,8,
0,0,0,0,2,18,1,15,1,13,1,114,141,0,0,0,
99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,
0,3,0,0,0,115,35,0,0,0,135,0,0,102,1,0,
@ -879,7 +879,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,109,111,100,117,108,101,40,1,0,0,0,244,3,0,
0,0,102,120,110,114,4,0,0,0,114,5,0,0,0,244,
19,0,0,0,115,101,116,95,112,97,99,107,97,103,101,95,
119,114,97,112,112,101,114,245,1,0,0,115,12,0,0,0,
119,114,97,112,112,101,114,246,1,0,0,115,12,0,0,0,
0,1,15,1,24,1,12,1,15,1,31,1,117,40,0,0,
0,115,101,116,95,112,97,99,107,97,103,101,46,60,108,111,
99,97,108,115,62,46,115,101,116,95,112,97,99,107,97,103,
@ -887,7 +887,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,40,2,0,0,0,114,146,0,0,0,114,147,0,
0,0,114,4,0,0,0,40,1,0,0,0,114,146,0,0,
0,114,5,0,0,0,244,11,0,0,0,115,101,116,95,112,
97,99,107,97,103,101,243,1,0,0,115,6,0,0,0,0,
97,99,107,97,103,101,244,1,0,0,115,6,0,0,0,0,
2,18,7,13,1,114,148,0,0,0,99,1,0,0,0,0,
0,0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,
35,0,0,0,135,0,0,102,1,0,100,1,0,100,2,0,
@ -907,14 +907,14 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,145,0,0,0,40,1,0,0,0,114,146,0,
0,0,114,4,0,0,0,114,5,0,0,0,244,18,0,0,
0,115,101,116,95,108,111,97,100,101,114,95,119,114,97,112,
112,101,114,2,2,0,0,115,8,0,0,0,0,1,18,1,
112,101,114,3,2,0,0,115,8,0,0,0,0,1,18,1,
24,1,12,1,117,38,0,0,0,115,101,116,95,108,111,97,
100,101,114,46,60,108,111,99,97,108,115,62,46,115,101,116,
95,108,111,97,100,101,114,95,119,114,97,112,112,101,114,40,
1,0,0,0,114,64,0,0,0,40,2,0,0,0,114,146,
0,0,0,114,150,0,0,0,114,4,0,0,0,40,1,0,
0,0,114,146,0,0,0,114,5,0,0,0,244,10,0,0,
0,115,101,116,95,108,111,97,100,101,114,0,2,0,0,115,
0,115,101,116,95,108,111,97,100,101,114,1,2,0,0,115,
6,0,0,0,0,2,18,5,13,1,114,151,0,0,0,99,
1,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
3,0,0,0,115,35,0,0,0,135,0,0,102,1,0,100,
@ -1003,7 +1003,7 @@ const unsigned char _Py_M__importlib[] = {
108,111,97,100,114,153,0,0,0,40,1,0,0,0,114,146,
0,0,0,114,4,0,0,0,114,5,0,0,0,244,25,0,
0,0,109,111,100,117,108,101,95,102,111,114,95,108,111,97,
100,101,114,95,119,114,97,112,112,101,114,29,2,0,0,115,
100,101,114,95,119,114,97,112,112,101,114,30,2,0,0,115,
44,0,0,0,0,1,18,1,12,1,6,4,12,3,9,1,
13,1,9,1,3,1,19,1,19,1,5,2,6,1,12,2,
25,2,9,1,6,2,23,1,3,1,6,1,13,1,12,2,
@ -1014,7 +1014,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,40,2,0,0,0,114,146,0,0,0,114,158,0,
0,0,114,4,0,0,0,40,1,0,0,0,114,146,0,0,
0,114,5,0,0,0,244,17,0,0,0,109,111,100,117,108,
101,95,102,111,114,95,108,111,97,100,101,114,11,2,0,0,
101,95,102,111,114,95,108,111,97,100,101,114,12,2,0,0,
115,6,0,0,0,0,18,18,33,13,1,114,159,0,0,0,
99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0,
0,3,0,0,0,115,38,0,0,0,100,1,0,135,0,0,
@ -1051,7 +1051,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,40,1,0,0,0,244,6,0,0,0,109,101,116,
104,111,100,114,4,0,0,0,114,5,0,0,0,244,19,0,
0,0,95,99,104,101,99,107,95,110,97,109,101,95,119,114,
97,112,112,101,114,74,2,0,0,115,10,0,0,0,0,1,
97,112,112,101,114,75,2,0,0,115,10,0,0,0,0,1,
12,1,12,1,15,1,25,1,117,40,0,0,0,95,99,104,
101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115,
62,46,95,99,104,101,99,107,95,110,97,109,101,95,119,114,
@ -1059,7 +1059,7 @@ const unsigned char _Py_M__importlib[] = {
2,0,0,0,114,160,0,0,0,114,161,0,0,0,114,4,
0,0,0,40,1,0,0,0,114,160,0,0,0,114,5,0,
0,0,244,11,0,0,0,95,99,104,101,99,107,95,110,97,
109,101,66,2,0,0,115,6,0,0,0,0,8,21,6,13,
109,101,67,2,0,0,115,6,0,0,0,0,8,21,6,13,
1,114,162,0,0,0,99,1,0,0,0,0,0,0,0,2,
0,0,0,3,0,0,0,3,0,0,0,115,35,0,0,0,
135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,125,
@ -1082,7 +1082,7 @@ const unsigned char _Py_M__importlib[] = {
78,0,0,0,114,156,0,0,0,40,1,0,0,0,114,146,
0,0,0,114,4,0,0,0,114,5,0,0,0,244,25,0,
0,0,95,114,101,113,117,105,114,101,115,95,98,117,105,108,
116,105,110,95,119,114,97,112,112,101,114,86,2,0,0,115,
116,105,110,95,119,114,97,112,112,101,114,87,2,0,0,115,
8,0,0,0,0,1,15,1,18,1,12,1,117,52,0,0,
0,95,114,101,113,117,105,114,101,115,95,98,117,105,108,116,
105,110,46,60,108,111,99,97,108,115,62,46,95,114,101,113,
@ -1091,7 +1091,7 @@ const unsigned char _Py_M__importlib[] = {
2,0,0,0,114,146,0,0,0,114,164,0,0,0,114,4,
0,0,0,40,1,0,0,0,114,146,0,0,0,114,5,0,
0,0,244,17,0,0,0,95,114,101,113,117,105,114,101,115,
95,98,117,105,108,116,105,110,84,2,0,0,115,6,0,0,
95,98,117,105,108,116,105,110,85,2,0,0,115,6,0,0,
0,0,2,18,5,13,1,114,165,0,0,0,99,1,0,0,
0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,
0,115,35,0,0,0,135,0,0,102,1,0,100,1,0,100,
@ -1114,7 +1114,7 @@ const unsigned char _Py_M__importlib[] = {
40,1,0,0,0,114,146,0,0,0,114,4,0,0,0,114,
5,0,0,0,244,24,0,0,0,95,114,101,113,117,105,114,
101,115,95,102,114,111,122,101,110,95,119,114,97,112,112,101,
114,97,2,0,0,115,8,0,0,0,0,1,15,1,18,1,
114,98,2,0,0,115,8,0,0,0,0,1,15,1,18,1,
12,1,117,50,0,0,0,95,114,101,113,117,105,114,101,115,
95,102,114,111,122,101,110,46,60,108,111,99,97,108,115,62,
46,95,114,101,113,117,105,114,101,115,95,102,114,111,122,101,
@ -1122,7 +1122,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,40,2,0,0,0,114,146,0,0,0,114,167,0,
0,0,114,4,0,0,0,40,1,0,0,0,114,146,0,0,
0,114,5,0,0,0,244,16,0,0,0,95,114,101,113,117,
105,114,101,115,95,102,114,111,122,101,110,95,2,0,0,115,
105,114,101,115,95,102,114,111,122,101,110,96,2,0,0,115,
6,0,0,0,0,2,18,5,13,1,114,168,0,0,0,99,
2,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,
67,0,0,0,115,87,0,0,0,124,0,0,106,0,0,124,
@ -1150,7 +1150,7 @@ const unsigned char _Py_M__importlib[] = {
114,116,105,111,110,115,244,3,0,0,0,109,115,103,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,244,17,0,
0,0,95,102,105,110,100,95,109,111,100,117,108,101,95,115,
104,105,109,106,2,0,0,115,10,0,0,0,0,6,21,1,
104,105,109,107,2,0,0,115,10,0,0,0,0,6,21,1,
24,1,6,1,32,1,114,176,0,0,0,99,4,0,0,0,
0,0,0,0,11,0,0,0,19,0,0,0,67,0,0,0,
115,243,1,0,0,105,0,0,125,4,0,124,2,0,100,1,
@ -1235,7 +1235,7 @@ const unsigned char _Py_M__importlib[] = {
244,11,0,0,0,115,111,117,114,99,101,95,115,105,122,101,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,
25,0,0,0,95,118,97,108,105,100,97,116,101,95,98,121,
116,101,99,111,100,101,95,104,101,97,100,101,114,119,2,0,
116,101,99,111,100,101,95,104,101,97,100,101,114,120,2,0,
0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1,
12,1,13,1,16,1,16,1,16,1,12,1,18,1,10,1,
18,1,18,1,15,1,10,1,15,1,18,1,15,1,10,1,
@ -1269,7 +1269,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,130,0,0,0,244,4,0,0,0,99,111,100,101,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,17,
0,0,0,95,99,111,109,112,105,108,101,95,98,121,116,101,
99,111,100,101,174,2,0,0,115,16,0,0,0,0,2,15,
99,111,100,101,175,2,0,0,115,16,0,0,0,0,2,15,
1,15,1,13,1,12,1,19,1,4,2,18,1,114,190,0,
0,0,114,71,0,0,0,99,3,0,0,0,0,0,0,0,
4,0,0,0,3,0,0,0,67,0,0,0,115,76,0,0,
@ -1290,7 +1290,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,189,0,0,0,114,179,0,0,0,114,184,0,
0,0,114,52,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,244,17,0,0,0,95,99,111,100,101,
95,116,111,95,98,121,116,101,99,111,100,101,186,2,0,0,
95,116,111,95,98,121,116,101,99,111,100,101,187,2,0,0,
115,10,0,0,0,0,3,12,1,19,1,19,1,22,1,114,
193,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,
0,6,0,0,0,66,0,0,0,115,173,0,0,0,124,0,
@ -1324,7 +1324,7 @@ const unsigned char _Py_M__importlib[] = {
114,56,0,0,0,40,2,0,0,0,244,3,0,0,0,99,
108,115,114,145,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,244,11,0,0,0,109,111,100,117,108,
101,95,114,101,112,114,207,2,0,0,115,2,0,0,0,0,
101,95,114,101,112,114,208,2,0,0,115,2,0,0,0,0,
2,117,27,0,0,0,66,117,105,108,116,105,110,73,109,112,
111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112,
114,78,99,3,0,0,0,0,0,0,0,3,0,0,0,2,
@ -1343,7 +1343,7 @@ const unsigned char _Py_M__importlib[] = {
95,98,117,105,108,116,105,110,40,3,0,0,0,114,195,0,
0,0,114,156,0,0,0,114,35,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,244,11,0,0,0,
102,105,110,100,95,109,111,100,117,108,101,211,2,0,0,115,
102,105,110,100,95,109,111,100,117,108,101,212,2,0,0,115,
6,0,0,0,0,7,12,1,4,1,117,27,0,0,0,66,
117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,102,
105,110,100,95,109,111,100,117,108,101,99,2,0,0,0,0,
@ -1361,7 +1361,7 @@ const unsigned char _Py_M__importlib[] = {
95,98,117,105,108,116,105,110,40,3,0,0,0,114,195,0,
0,0,114,156,0,0,0,114,157,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,244,11,0,0,0,
108,111,97,100,95,109,111,100,117,108,101,222,2,0,0,115,
108,111,97,100,95,109,111,100,117,108,101,223,2,0,0,115,
14,0,0,0,0,6,15,1,3,1,20,1,3,1,22,1,
13,1,117,27,0,0,0,66,117,105,108,116,105,110,73,109,
112,111,114,116,101,114,46,108,111,97,100,95,109,111,100,117,
@ -1374,7 +1374,7 @@ const unsigned char _Py_M__importlib[] = {
116,115,46,78,114,4,0,0,0,40,2,0,0,0,114,195,
0,0,0,114,156,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,244,8,0,0,0,103,101,116,95,
99,111,100,101,236,2,0,0,115,2,0,0,0,0,4,117,
99,111,100,101,237,2,0,0,115,2,0,0,0,0,4,117,
24,0,0,0,66,117,105,108,116,105,110,73,109,112,111,114,
116,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,
0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,
@ -1385,7 +1385,7 @@ const unsigned char _Py_M__importlib[] = {
115,111,117,114,99,101,32,99,111,100,101,46,78,114,4,0,
0,0,40,2,0,0,0,114,195,0,0,0,114,156,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
244,10,0,0,0,103,101,116,95,115,111,117,114,99,101,242,
244,10,0,0,0,103,101,116,95,115,111,117,114,99,101,243,
2,0,0,115,2,0,0,0,0,4,117,26,0,0,0,66,
117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,103,
101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0,
@ -1396,7 +1396,7 @@ const unsigned char _Py_M__importlib[] = {
115,32,97,114,101,32,110,101,118,101,114,32,112,97,99,107,
97,103,101,115,46,70,114,4,0,0,0,40,2,0,0,0,
114,195,0,0,0,114,156,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,114,153,0,0,0,248,2,
4,0,0,0,114,5,0,0,0,114,153,0,0,0,249,2,
0,0,115,2,0,0,0,0,4,117,26,0,0,0,66,117,
105,108,116,105,110,73,109,112,111,114,116,101,114,46,105,115,
95,112,97,99,107,97,103,101,40,14,0,0,0,114,56,0,
@ -1406,7 +1406,7 @@ const unsigned char _Py_M__importlib[] = {
114,151,0,0,0,114,165,0,0,0,114,198,0,0,0,114,
199,0,0,0,114,200,0,0,0,114,153,0,0,0,40,1,
0,0,0,114,69,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,114,194,0,0,0,198,2,0,0,
0,0,114,5,0,0,0,114,194,0,0,0,199,2,0,0,
115,28,0,0,0,16,7,6,2,18,4,3,1,18,10,3,
1,3,1,3,1,27,11,3,1,21,5,3,1,21,5,3,
1,114,194,0,0,0,99,1,0,0,0,0,0,0,0,1,
@ -1440,7 +1440,7 @@ const unsigned char _Py_M__importlib[] = {
110,41,62,40,2,0,0,0,114,46,0,0,0,114,56,0,
0,0,40,2,0,0,0,114,195,0,0,0,244,1,0,0,
0,109,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
0,114,196,0,0,0,8,3,0,0,115,2,0,0,0,0,
0,114,196,0,0,0,9,3,0,0,115,2,0,0,0,0,
2,117,26,0,0,0,70,114,111,122,101,110,73,109,112,111,
114,116,101,114,46,109,111,100,117,108,101,95,114,101,112,114,
78,99,3,0,0,0,0,0,0,0,3,0,0,0,2,0,
@ -1451,7 +1451,7 @@ const unsigned char _Py_M__importlib[] = {
46,78,40,2,0,0,0,114,97,0,0,0,114,166,0,0,
0,40,3,0,0,0,114,195,0,0,0,114,156,0,0,0,
114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,197,0,0,0,12,3,0,0,115,2,0,
5,0,0,0,114,197,0,0,0,13,3,0,0,115,2,0,
0,0,0,3,117,26,0,0,0,70,114,111,122,101,110,73,
109,112,111,114,116,101,114,46,102,105,110,100,95,109,111,100,
117,108,101,99,2,0,0,0,0,0,0,0,4,0,0,0,
@ -1470,7 +1470,7 @@ const unsigned char _Py_M__importlib[] = {
95,102,105,108,101,95,95,40,4,0,0,0,114,195,0,0,
0,114,156,0,0,0,114,157,0,0,0,114,203,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
198,0,0,0,17,3,0,0,115,18,0,0,0,0,6,15,
198,0,0,0,18,3,0,0,115,18,0,0,0,0,6,15,
1,3,1,18,2,6,1,8,1,3,1,22,1,13,1,117,
26,0,0,0,70,114,111,122,101,110,73,109,112,111,114,116,
101,114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,
@ -1483,7 +1483,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,97,0,0,0,116,17,0,0,0,103,101,116,95,102,
114,111,122,101,110,95,111,98,106,101,99,116,40,2,0,0,
0,114,195,0,0,0,114,156,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,34,
114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,35,
3,0,0,115,2,0,0,0,0,4,117,23,0,0,0,70,
114,111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,
116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,
@ -1494,7 +1494,7 @@ const unsigned char _Py_M__importlib[] = {
111,116,32,104,97,118,101,32,115,111,117,114,99,101,32,99,
111,100,101,46,78,114,4,0,0,0,40,2,0,0,0,114,
195,0,0,0,114,156,0,0,0,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,114,200,0,0,0,40,3,0,
0,0,0,114,5,0,0,0,114,200,0,0,0,41,3,0,
0,115,2,0,0,0,0,4,117,25,0,0,0,70,114,111,
122,101,110,73,109,112,111,114,116,101,114,46,103,101,116,95,
115,111,117,114,99,101,99,2,0,0,0,0,0,0,0,2,
@ -1507,7 +1507,7 @@ const unsigned char _Py_M__importlib[] = {
17,0,0,0,105,115,95,102,114,111,122,101,110,95,112,97,
99,107,97,103,101,40,2,0,0,0,114,195,0,0,0,114,
156,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,114,153,0,0,0,46,3,0,0,115,2,0,0,
0,0,0,114,153,0,0,0,47,3,0,0,115,2,0,0,
0,0,4,117,25,0,0,0,70,114,111,122,101,110,73,109,
112,111,114,116,101,114,46,105,115,95,112,97,99,107,97,103,
101,40,14,0,0,0,114,56,0,0,0,114,55,0,0,0,
@ -1516,7 +1516,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,168,0,0,0,114,198,0,0,0,114,199,0,
0,0,114,200,0,0,0,114,153,0,0,0,40,1,0,0,
0,114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,114,202,0,0,0,255,2,0,0,115,28,
114,5,0,0,0,114,202,0,0,0,0,3,0,0,115,28,
0,0,0,16,7,6,2,18,4,3,1,18,4,3,1,3,
1,3,1,27,14,3,1,21,5,3,1,21,5,3,1,114,
202,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,
@ -1556,7 +1556,7 @@ const unsigned char _Py_M__importlib[] = {
73,78,69,40,2,0,0,0,114,195,0,0,0,244,3,0,
0,0,107,101,121,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,244,14,0,0,0,95,111,112,101,110,95,114,
101,103,105,115,116,114,121,66,3,0,0,115,8,0,0,0,
101,103,105,115,116,114,121,67,3,0,0,115,8,0,0,0,
0,2,3,1,23,1,13,1,117,36,0,0,0,87,105,110,
100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,
101,114,46,95,111,112,101,110,95,114,101,103,105,115,116,114,
@ -1585,7 +1585,7 @@ const unsigned char _Py_M__importlib[] = {
207,0,0,0,116,4,0,0,0,104,107,101,121,244,8,0,
0,0,102,105,108,101,112,97,116,104,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,244,16,0,0,0,95,115,
101,97,114,99,104,95,114,101,103,105,115,116,114,121,73,3,
101,97,114,99,104,95,114,101,103,105,115,116,114,121,74,3,
0,0,115,22,0,0,0,0,2,9,1,12,2,9,1,15,
1,22,1,3,1,18,1,28,1,13,1,9,1,117,38,0,
0,0,87,105,110,100,111,119,115,82,101,103,105,115,116,114,
@ -1612,7 +1612,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,195,0,0,0,114,156,0,0,0,114,35,0,0,0,
114,213,0,0,0,114,173,0,0,0,114,115,0,0,0,114,
36,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,114,197,0,0,0,88,3,0,0,115,20,0,0,
0,0,0,114,197,0,0,0,89,3,0,0,115,20,0,0,
0,0,3,15,1,12,1,4,1,3,1,17,1,13,1,9,
1,25,1,21,1,117,33,0,0,0,87,105,110,100,111,119,
115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,
@ -1622,7 +1622,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,201,0,0,0,114,208,0,0,0,114,214,0,
0,0,114,197,0,0,0,40,1,0,0,0,114,69,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
114,205,0,0,0,53,3,0,0,115,16,0,0,0,16,3,
114,205,0,0,0,54,3,0,0,115,16,0,0,0,16,3,
6,3,6,3,6,2,6,2,18,7,18,15,3,1,114,205,
0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,
5,0,0,0,66,0,0,0,115,62,0,0,0,124,0,0,
@ -1661,7 +1661,7 @@ const unsigned char _Py_M__importlib[] = {
114,119,0,0,0,116,13,0,0,0,102,105,108,101,110,97,
109,101,95,98,97,115,101,116,9,0,0,0,116,97,105,108,
95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,153,0,0,0,108,3,0,0,115,8,0,
5,0,0,0,114,153,0,0,0,109,3,0,0,115,8,0,
0,0,0,3,25,1,22,1,19,1,117,24,0,0,0,95,
76,111,97,100,101,114,66,97,115,105,99,115,46,105,115,95,
112,97,99,107,97,103,101,244,10,0,0,0,115,111,117,114,
@ -1694,7 +1694,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,66,0,0,0,244,11,0,0,0,99,111,100,101,
95,111,98,106,101,99,116,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,244,12,0,0,0,95,108,111,97,100,
95,109,111,100,117,108,101,116,3,0,0,115,26,0,0,0,
95,109,111,100,117,108,101,117,3,0,0,115,26,0,0,0,
0,4,9,1,15,1,18,1,6,1,3,1,22,1,13,1,
20,2,12,1,15,1,28,2,19,1,117,26,0,0,0,95,
76,111,97,100,101,114,66,97,115,105,99,115,46,95,108,111,
@ -1703,7 +1703,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,153,0,0,0,114,159,0,0,0,114,223,0,
0,0,40,1,0,0,0,114,69,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,218,0,0,0,
103,3,0,0,115,8,0,0,0,16,3,6,2,12,8,6,
104,3,0,0,115,8,0,0,0,16,3,6,2,12,8,6,
1,114,218,0,0,0,99,1,0,0,0,0,0,0,0,1,
0,0,0,4,0,0,0,66,0,0,0,115,122,0,0,0,
124,0,0,69,101,0,0,90,1,0,100,0,0,90,2,0,
@ -1732,7 +1732,7 @@ const unsigned char _Py_M__importlib[] = {
78,40,1,0,0,0,244,7,0,0,0,73,79,69,114,114,
111,114,40,2,0,0,0,114,78,0,0,0,114,35,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
244,10,0,0,0,112,97,116,104,95,109,116,105,109,101,139,
244,10,0,0,0,112,97,116,104,95,109,116,105,109,101,140,
3,0,0,115,2,0,0,0,0,6,117,23,0,0,0,83,
111,117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,
95,109,116,105,109,101,99,2,0,0,0,0,0,0,0,2,
@ -1769,7 +1769,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,226,0,0,0,40,2,0,0,0,114,78,0,0,
0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,244,10,0,0,0,112,97,116,104,95,115,
116,97,116,115,147,3,0,0,115,2,0,0,0,0,11,117,
116,97,116,115,148,3,0,0,115,2,0,0,0,0,11,117,
23,0,0,0,83,111,117,114,99,101,76,111,97,100,101,114,
46,112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,
0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,
@ -1794,7 +1794,7 @@ const unsigned char _Py_M__importlib[] = {
130,0,0,0,116,10,0,0,0,99,97,99,104,101,95,112,
97,116,104,114,52,0,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,244,15,0,0,0,95,99,97,99,
104,101,95,98,121,116,101,99,111,100,101,160,3,0,0,115,
104,101,95,98,121,116,101,99,111,100,101,161,3,0,0,115,
2,0,0,0,0,8,117,28,0,0,0,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,
@ -1812,7 +1812,7 @@ const unsigned char _Py_M__importlib[] = {
32,32,32,32,32,78,114,4,0,0,0,40,3,0,0,0,
114,78,0,0,0,114,35,0,0,0,114,52,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,228,
0,0,0,170,3,0,0,115,0,0,0,0,117,21,0,0,
0,0,0,171,3,0,0,115,0,0,0,0,117,21,0,0,
0,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,9,
0,0,0,44,0,0,0,67,0,0,0,115,62,1,0,0,
@ -1865,7 +1865,7 @@ const unsigned char _Py_M__importlib[] = {
117,114,99,101,244,8,0,0,0,101,110,99,111,100,105,110,
103,116,15,0,0,0,110,101,119,108,105,110,101,95,100,101,
99,111,100,101,114,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,200,0,0,0,177,3,0,0,115,38,0,
5,0,0,0,114,200,0,0,0,178,3,0,0,115,38,0,
0,0,0,2,12,1,15,1,3,1,19,1,18,1,9,1,
31,1,18,1,3,1,19,1,18,1,9,1,31,1,18,1,
3,1,30,1,18,1,9,1,117,23,0,0,0,83,111,117,
@ -1890,7 +1890,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,78,0,0,0,114,52,0,0,0,114,35,0,
0,0,114,238,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,244,14,0,0,0,115,111,117,114,99,
101,95,116,111,95,99,111,100,101,199,3,0,0,115,4,0,
101,95,116,111,95,99,111,100,101,200,3,0,0,115,4,0,
0,0,0,5,18,1,117,27,0,0,0,83,111,117,114,99,
101,76,111,97,100,101,114,46,115,111,117,114,99,101,95,116,
111,95,99,111,100,101,99,2,0,0,0,0,0,0,0,10,
@ -1952,7 +1952,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,129,0,0,0,244,2,0,0,0,115,116,114,52,0,
0,0,244,10,0,0,0,98,121,116,101,115,95,100,97,116,
97,114,235,0,0,0,114,222,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,207,
114,4,0,0,0,114,5,0,0,0,114,199,0,0,0,208,
3,0,0,115,78,0,0,0,0,7,15,1,6,1,3,1,
16,1,13,1,11,2,3,1,19,1,13,1,5,2,16,1,
3,1,19,1,13,1,5,2,3,1,9,1,12,1,13,1,
@ -1981,7 +1981,7 @@ const unsigned char _Py_M__importlib[] = {
116,101,99,111,100,101,46,10,10,32,32,32,32,32,32,32,
32,40,1,0,0,0,114,223,0,0,0,40,2,0,0,0,
114,78,0,0,0,114,156,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,114,198,0,0,0,2,4,
4,0,0,0,114,5,0,0,0,114,198,0,0,0,3,4,
0,0,115,2,0,0,0,0,8,117,24,0,0,0,83,111,
117,114,99,101,76,111,97,100,101,114,46,108,111,97,100,95,
109,111,100,117,108,101,78,114,126,0,0,0,40,11,0,0,
@ -1990,7 +1990,7 @@ const unsigned char _Py_M__importlib[] = {
228,0,0,0,114,200,0,0,0,114,240,0,0,0,114,199,
0,0,0,114,198,0,0,0,40,1,0,0,0,114,69,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
0,114,224,0,0,0,137,3,0,0,115,16,0,0,0,16,
0,114,224,0,0,0,138,3,0,0,115,16,0,0,0,16,
2,12,8,12,13,12,10,12,7,12,22,18,8,12,51,114,
224,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,
0,4,0,0,0,2,0,0,0,115,92,0,0,0,124,0,
@ -2019,7 +2019,7 @@ const unsigned char _Py_M__importlib[] = {
40,2,0,0,0,114,66,0,0,0,114,35,0,0,0,40,
3,0,0,0,114,78,0,0,0,114,156,0,0,0,114,35,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,114,79,0,0,0,18,4,0,0,115,4,0,0,0,
0,0,114,79,0,0,0,19,4,0,0,115,4,0,0,0,
0,3,9,1,117,19,0,0,0,70,105,108,101,76,111,97,
100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0,
0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,0,
@ -2031,7 +2031,7 @@ const unsigned char _Py_M__importlib[] = {
244,0,0,0,114,198,0,0,0,40,2,0,0,0,114,78,
0,0,0,114,156,0,0,0,40,1,0,0,0,244,9,0,
0,0,95,95,99,108,97,115,115,95,95,114,4,0,0,0,
114,5,0,0,0,114,198,0,0,0,24,4,0,0,115,2,
114,5,0,0,0,114,198,0,0,0,25,4,0,0,115,2,
0,0,0,0,5,117,22,0,0,0,70,105,108,101,76,111,
97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,
99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,
@ -2043,7 +2043,7 @@ const unsigned char _Py_M__importlib[] = {
110,100,101,114,46,40,1,0,0,0,114,35,0,0,0,40,
2,0,0,0,114,78,0,0,0,114,156,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,219,0,
0,0,31,4,0,0,115,2,0,0,0,0,3,117,23,0,
0,0,32,4,0,0,115,2,0,0,0,0,3,117,23,0,
0,0,70,105,108,101,76,111,97,100,101,114,46,103,101,116,
95,102,105,108,101,110,97,109,101,99,2,0,0,0,0,0,
0,0,3,0,0,0,8,0,0,0,67,0,0,0,115,41,
@ -2057,14 +2057,14 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,116,4,0,0,0,114,101,97,100,40,3,0,0,
0,114,78,0,0,0,114,35,0,0,0,114,53,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
231,0,0,0,36,4,0,0,115,4,0,0,0,0,2,21,
231,0,0,0,37,4,0,0,115,4,0,0,0,0,2,21,
1,117,19,0,0,0,70,105,108,101,76,111,97,100,101,114,
46,103,101,116,95,100,97,116,97,40,9,0,0,0,114,56,
0,0,0,114,55,0,0,0,114,57,0,0,0,114,58,0,
0,0,114,79,0,0,0,114,162,0,0,0,114,198,0,0,
0,114,219,0,0,0,114,231,0,0,0,40,1,0,0,0,
114,69,0,0,0,114,4,0,0,0,40,1,0,0,0,114,
246,0,0,0,114,5,0,0,0,114,244,0,0,0,13,4,
246,0,0,0,114,5,0,0,0,114,244,0,0,0,14,4,
0,0,115,10,0,0,0,16,3,6,2,12,6,24,7,18,
5,114,244,0,0,0,99,1,0,0,0,0,0,0,0,1,
0,0,0,4,0,0,0,66,0,0,0,115,68,0,0,0,
@ -2090,7 +2090,7 @@ const unsigned char _Py_M__importlib[] = {
105,109,101,116,7,0,0,0,115,116,95,115,105,122,101,40,
3,0,0,0,114,78,0,0,0,114,35,0,0,0,114,242,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,114,227,0,0,0,46,4,0,0,115,4,0,0,0,
0,0,114,227,0,0,0,47,4,0,0,115,4,0,0,0,
0,2,15,1,117,27,0,0,0,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,5,0,0,
@ -2102,7 +2102,7 @@ const unsigned char _Py_M__importlib[] = {
5,0,0,0,114,78,0,0,0,114,130,0,0,0,114,129,
0,0,0,114,52,0,0,0,114,42,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,229,0,0,
0,51,4,0,0,115,4,0,0,0,0,2,12,1,117,32,
0,52,4,0,0,115,4,0,0,0,0,2,12,1,117,32,
0,0,0,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,250,0,0,0,105,182,1,0,0,99,3,0,
@ -2142,7 +2142,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,244,6,0,0,0,112,97,114,101,110,116,114,119,0,
0,0,114,27,0,0,0,114,23,0,0,0,114,236,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
114,228,0,0,0,56,4,0,0,115,38,0,0,0,0,2,
114,228,0,0,0,57,4,0,0,115,38,0,0,0,0,2,
18,1,6,2,22,1,18,1,17,2,19,1,15,1,3,1,
17,1,13,2,7,1,18,3,16,1,27,1,3,1,16,1,
17,1,18,2,117,25,0,0,0,83,111,117,114,99,101,70,
@ -2151,7 +2151,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,57,0,0,0,114,58,0,0,0,114,227,0,0,
0,114,229,0,0,0,114,228,0,0,0,40,1,0,0,0,
114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,248,0,0,0,42,4,0,0,115,8,0,
5,0,0,0,114,248,0,0,0,43,4,0,0,115,8,0,
0,0,16,2,6,2,12,5,12,5,114,248,0,0,0,99,
1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,
66,0,0,0,115,62,0,0,0,124,0,0,69,101,0,0,
@ -2169,7 +2169,7 @@ const unsigned char _Py_M__importlib[] = {
131,1,1,83,40,3,0,0,0,78,114,220,0,0,0,84,
40,1,0,0,0,114,223,0,0,0,40,2,0,0,0,114,
78,0,0,0,114,156,0,0,0,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,114,198,0,0,0,89,4,0,
0,0,0,114,5,0,0,0,114,198,0,0,0,90,4,0,
0,115,2,0,0,0,0,1,117,32,0,0,0,83,111,117,
114,99,101,108,101,115,115,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,
@ -2185,7 +2185,7 @@ const unsigned char _Py_M__importlib[] = {
0,40,5,0,0,0,114,78,0,0,0,114,156,0,0,0,
114,35,0,0,0,114,52,0,0,0,114,243,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,199,
0,0,0,92,4,0,0,115,8,0,0,0,0,1,15,1,
0,0,0,93,4,0,0,115,8,0,0,0,0,1,15,1,
15,1,24,1,117,29,0,0,0,83,111,117,114,99,101,108,
101,115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,
116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,
@ -2195,7 +2195,7 @@ const unsigned char _Py_M__importlib[] = {
114,101,32,105,115,32,110,111,32,115,111,117,114,99,101,32,
99,111,100,101,46,78,114,4,0,0,0,40,2,0,0,0,
114,78,0,0,0,114,156,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,114,200,0,0,0,98,4,
4,0,0,0,114,5,0,0,0,114,200,0,0,0,99,4,
0,0,115,2,0,0,0,0,2,117,31,0,0,0,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,40,7,
@ -2203,7 +2203,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,58,0,0,0,114,198,0,0,0,114,199,0,0,
0,114,200,0,0,0,40,1,0,0,0,114,69,0,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
254,0,0,0,85,4,0,0,115,8,0,0,0,16,2,6,
254,0,0,0,86,4,0,0,115,8,0,0,0,16,2,6,
2,12,3,12,6,114,254,0,0,0,99,1,0,0,0,0,
0,0,0,1,0,0,0,5,0,0,0,66,0,0,0,115,
104,0,0,0,124,0,0,69,101,0,0,90,1,0,100,0,
@ -2227,7 +2227,7 @@ const unsigned char _Py_M__importlib[] = {
78,40,2,0,0,0,114,66,0,0,0,114,35,0,0,0,
40,3,0,0,0,114,78,0,0,0,114,66,0,0,0,114,
35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,114,79,0,0,0,115,4,0,0,115,4,0,0,
0,0,0,114,79,0,0,0,116,4,0,0,115,4,0,0,
0,0,1,9,1,117,28,0,0,0,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,4,
@ -2255,7 +2255,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,38,0,0,0,114,143,0,0,0,40,4,0,0,0,
114,78,0,0,0,114,156,0,0,0,114,157,0,0,0,114,
145,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,114,198,0,0,0,119,4,0,0,115,24,0,0,
0,0,0,114,198,0,0,0,120,4,0,0,115,24,0,0,
0,0,5,15,1,3,1,9,1,15,1,16,1,31,1,28,
1,8,1,3,1,22,1,13,1,117,31,0,0,0,69,120,
116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
@ -2277,7 +2277,7 @@ const unsigned char _Py_M__importlib[] = {
117,102,102,105,120,40,1,0,0,0,244,9,0,0,0,102,
105,108,101,95,110,97,109,101,114,4,0,0,0,114,5,0,
0,0,245,9,0,0,0,60,103,101,110,101,120,112,114,62,
140,4,0,0,115,2,0,0,0,6,1,117,49,0,0,0,
141,4,0,0,115,2,0,0,0,6,1,117,49,0,0,0,
69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,
100,101,114,46,105,115,95,112,97,99,107,97,103,101,46,60,
108,111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,
@ -2286,7 +2286,7 @@ const unsigned char _Py_M__importlib[] = {
69,78,83,73,79,78,95,83,85,70,70,73,88,69,83,40,
2,0,0,0,114,78,0,0,0,114,156,0,0,0,114,4,
0,0,0,40,1,0,0,0,114,1,1,0,0,114,5,0,
0,0,114,153,0,0,0,137,4,0,0,115,6,0,0,0,
0,0,114,153,0,0,0,138,4,0,0,115,6,0,0,0,
0,2,19,1,18,1,117,30,0,0,0,69,120,116,101,110,
115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,105,
115,95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,
@ -2298,7 +2298,7 @@ const unsigned char _Py_M__importlib[] = {
101,32,97,32,99,111,100,101,32,111,98,106,101,99,116,46,
78,114,4,0,0,0,40,2,0,0,0,114,78,0,0,0,
114,156,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,199,0,0,0,143,4,0,0,115,2,0,
5,0,0,0,114,199,0,0,0,144,4,0,0,115,2,0,
0,0,0,2,117,28,0,0,0,69,120,116,101,110,115,105,
111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,116,
95,99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,
@ -2309,7 +2309,7 @@ const unsigned char _Py_M__importlib[] = {
118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100,
101,46,78,114,4,0,0,0,40,2,0,0,0,114,78,0,
0,0,114,156,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,114,200,0,0,0,147,4,0,0,115,
0,114,5,0,0,0,114,200,0,0,0,148,4,0,0,115,
2,0,0,0,0,2,117,30,0,0,0,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,78,40,12,0,0,0,114,
@ -2318,7 +2318,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,151,0,0,0,114,198,0,0,0,114,153,0,0,
0,114,199,0,0,0,114,200,0,0,0,40,1,0,0,0,
114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,255,0,0,0,107,4,0,0,115,16,0,
5,0,0,0,114,255,0,0,0,108,4,0,0,115,16,0,
0,0,16,6,6,2,12,4,3,1,3,1,24,16,12,6,
12,4,114,255,0,0,0,99,1,0,0,0,0,0,0,0,
1,0,0,0,2,0,0,0,66,0,0,0,115,134,0,0,
@ -2365,7 +2365,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,66,0,0,0,114,35,0,0,0,244,11,0,0,
0,112,97,116,104,95,102,105,110,100,101,114,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,79,0,0,0,
159,4,0,0,115,8,0,0,0,0,1,9,1,9,1,21,
160,4,0,0,115,8,0,0,0,0,1,9,1,9,1,21,
1,117,23,0,0,0,95,78,97,109,101,115,112,97,99,101,
80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,0,
0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,
@ -2385,7 +2385,7 @@ const unsigned char _Py_M__importlib[] = {
0,244,3,0,0,0,100,111,116,114,83,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,244,23,0,
0,0,95,102,105,110,100,95,112,97,114,101,110,116,95,112,
97,116,104,95,110,97,109,101,115,165,4,0,0,115,8,0,
97,116,104,95,110,97,109,101,115,166,4,0,0,115,8,0,
0,0,0,2,27,1,12,2,4,3,117,38,0,0,0,95,
78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,102,
105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95,
@ -2399,7 +2399,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,112,97,114,101,110,116,95,109,111,100,117,108,101,
95,110,97,109,101,116,14,0,0,0,112,97,116,104,95,97,
116,116,114,95,110,97,109,101,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,114,8,1,0,0,175,4,0,0,
0,0,114,5,0,0,0,114,8,1,0,0,176,4,0,0,
115,4,0,0,0,0,1,18,1,117,31,0,0,0,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,
@ -2418,7 +2418,7 @@ const unsigned char _Py_M__importlib[] = {
104,114,173,0,0,0,116,8,0,0,0,110,101,119,95,112,
97,116,104,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,244,12,0,0,0,95,114,101,99,97,108,99,117,108,
97,116,101,179,4,0,0,115,14,0,0,0,0,2,18,1,
97,116,101,180,4,0,0,115,14,0,0,0,0,2,18,1,
15,1,27,3,12,1,12,1,12,1,117,27,0,0,0,95,
78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,114,
101,99,97,108,99,117,108,97,116,101,99,1,0,0,0,0,
@ -2428,7 +2428,7 @@ const unsigned char _Py_M__importlib[] = {
4,0,0,0,105,116,101,114,114,14,1,0,0,40,1,0,
0,0,114,78,0,0,0,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,244,8,0,0,0,95,95,105,116,101,
114,95,95,191,4,0,0,115,2,0,0,0,0,1,117,23,
114,95,95,192,4,0,0,115,2,0,0,0,0,1,117,23,
0,0,0,95,78,97,109,101,115,112,97,99,101,80,97,116,
104,46,95,95,105,116,101,114,95,95,99,1,0,0,0,0,
0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,
@ -2436,7 +2436,7 @@ const unsigned char _Py_M__importlib[] = {
131,1,0,83,40,1,0,0,0,78,40,2,0,0,0,114,
31,0,0,0,114,14,1,0,0,40,1,0,0,0,114,78,
0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,244,7,0,0,0,95,95,108,101,110,95,95,194,4,
0,0,244,7,0,0,0,95,95,108,101,110,95,95,195,4,
0,0,115,2,0,0,0,0,1,117,22,0,0,0,95,78,
97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,108,
101,110,95,95,99,1,0,0,0,0,0,0,0,1,0,0,
@ -2446,7 +2446,7 @@ const unsigned char _Py_M__importlib[] = {
97,99,101,80,97,116,104,40,123,33,114,125,41,40,2,0,
0,0,114,46,0,0,0,114,7,1,0,0,40,1,0,0,
0,114,78,0,0,0,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,114,90,0,0,0,197,4,0,0,115,2,
114,5,0,0,0,114,90,0,0,0,198,4,0,0,115,2,
0,0,0,0,1,117,23,0,0,0,95,78,97,109,101,115,
112,97,99,101,80,97,116,104,46,95,95,114,101,112,114,95,
95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,
@ -2455,7 +2455,7 @@ const unsigned char _Py_M__importlib[] = {
78,40,1,0,0,0,114,14,1,0,0,40,2,0,0,0,
114,78,0,0,0,244,4,0,0,0,105,116,101,109,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,244,12,0,
0,0,95,95,99,111,110,116,97,105,110,115,95,95,200,4,
0,0,95,95,99,111,110,116,97,105,110,115,95,95,201,4,
0,0,115,2,0,0,0,0,1,117,27,0,0,0,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,
@ -2464,7 +2464,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,1,100,0,0,83,40,1,0,0,0,78,40,2,0,
0,0,114,7,1,0,0,114,251,0,0,0,40,2,0,0,
0,114,78,0,0,0,114,18,1,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,203,
114,4,0,0,0,114,5,0,0,0,114,251,0,0,0,204,
4,0,0,115,2,0,0,0,0,1,117,21,0,0,0,95,
78,97,109,101,115,112,97,99,101,80,97,116,104,46,97,112,
112,101,110,100,78,40,13,0,0,0,114,56,0,0,0,114,
@ -2473,7 +2473,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,16,1,0,0,114,17,1,0,0,114,90,0,0,
0,114,19,1,0,0,114,251,0,0,0,40,1,0,0,0,
114,69,0,0,0,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,5,1,0,0,152,4,0,0,115,20,0,
5,0,0,0,114,5,1,0,0,153,4,0,0,115,20,0,
0,0,16,5,6,2,12,6,12,10,12,4,12,12,12,3,
12,3,12,3,12,3,114,5,1,0,0,99,1,0,0,0,
0,0,0,0,1,0,0,0,3,0,0,0,66,0,0,0,
@ -2490,7 +2490,7 @@ const unsigned char _Py_M__importlib[] = {
114,5,1,0,0,114,7,1,0,0,40,4,0,0,0,114,
78,0,0,0,114,66,0,0,0,114,35,0,0,0,114,11,
1,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,114,79,0,0,0,208,4,0,0,115,2,0,0,0,
0,0,114,79,0,0,0,209,4,0,0,115,2,0,0,0,
0,1,117,24,0,0,0,78,97,109,101,115,112,97,99,101,
76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99,
2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0,
@ -2500,7 +2500,7 @@ const unsigned char _Py_M__importlib[] = {
32,40,110,97,109,101,115,112,97,99,101,41,62,40,2,0,
0,0,114,46,0,0,0,114,56,0,0,0,40,2,0,0,
0,114,195,0,0,0,114,145,0,0,0,114,4,0,0,0,
114,4,0,0,0,114,5,0,0,0,114,196,0,0,0,211,
114,4,0,0,0,114,5,0,0,0,114,196,0,0,0,212,
4,0,0,115,2,0,0,0,0,2,117,27,0,0,0,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,
@ -2515,7 +2515,7 @@ const unsigned char _Py_M__importlib[] = {
125,40,3,0,0,0,114,141,0,0,0,114,7,1,0,0,
114,143,0,0,0,40,2,0,0,0,114,78,0,0,0,114,
145,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,114,198,0,0,0,215,4,0,0,115,6,0,0,
0,0,0,114,198,0,0,0,216,4,0,0,115,6,0,0,
0,0,3,16,1,12,1,117,27,0,0,0,78,97,109,101,
115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,100,
95,109,111,100,117,108,101,78,40,8,0,0,0,114,56,0,
@ -2523,7 +2523,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,201,0,0,0,114,196,0,0,0,114,159,0,0,0,
114,198,0,0,0,40,1,0,0,0,114,69,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,20,
1,0,0,207,4,0,0,115,6,0,0,0,16,1,12,3,
1,0,0,208,4,0,0,115,6,0,0,0,16,1,12,3,
18,4,114,20,1,0,0,99,1,0,0,0,0,0,0,0,
1,0,0,0,4,0,0,0,66,0,0,0,115,119,0,0,
0,124,0,0,69,101,0,0,90,1,0,100,0,0,90,2,
@ -2560,7 +2560,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,22,1,0,0,40,2,0,0,0,114,195,0,
0,0,244,6,0,0,0,102,105,110,100,101,114,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,22,1,0,
0,229,4,0,0,115,6,0,0,0,0,4,22,1,15,1,
0,230,4,0,0,115,6,0,0,0,0,4,22,1,15,1,
117,28,0,0,0,80,97,116,104,70,105,110,100,101,114,46,
105,110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,
115,99,2,0,0,0,0,0,0,0,3,0,0,0,12,0,
@ -2586,7 +2586,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,114,195,0,0,0,114,35,0,0,0,116,4,0,
0,0,104,111,111,107,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,244,11,0,0,0,95,112,97,116,104,95,
104,111,111,107,115,237,4,0,0,115,16,0,0,0,0,7,
104,111,111,107,115,238,4,0,0,115,16,0,0,0,0,7,
9,1,19,1,16,1,3,1,14,1,13,1,12,2,117,22,
0,0,0,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,
@ -2616,7 +2616,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,195,0,0,0,114,35,0,0,0,114,25,1,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
244,20,0,0,0,95,112,97,116,104,95,105,109,112,111,114,
116,101,114,95,99,97,99,104,101,254,4,0,0,115,16,0,
116,101,114,95,99,97,99,104,101,255,4,0,0,115,16,0,
0,0,0,8,12,1,9,1,3,1,17,1,13,1,15,1,
18,1,117,31,0,0,0,80,97,116,104,70,105,110,100,101,
114,46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,
@ -2648,7 +2648,7 @@ const unsigned char _Py_M__importlib[] = {
114,121,114,25,1,0,0,114,173,0,0,0,114,174,0,0,
0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
244,11,0,0,0,95,103,101,116,95,108,111,97,100,101,114,
15,5,0,0,115,28,0,0,0,0,5,6,1,13,1,21,
16,5,0,0,115,28,0,0,0,0,5,6,1,13,1,21,
1,6,1,15,1,12,1,15,1,24,2,15,1,6,1,12,
2,10,5,20,2,117,22,0,0,0,80,97,116,104,70,105,
110,100,101,114,46,95,103,101,116,95,108,111,97,100,101,114,
@ -2671,7 +2671,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,40,5,0,0,0,114,195,0,0,0,114,156,0,0,
0,114,35,0,0,0,114,173,0,0,0,114,31,1,0,0,
114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,
197,0,0,0,42,5,0,0,115,16,0,0,0,0,4,12,
197,0,0,0,43,5,0,0,115,16,0,0,0,0,4,12,
1,12,1,24,1,12,1,4,2,6,3,19,2,117,22,0,
0,0,80,97,116,104,70,105,110,100,101,114,46,102,105,110,
100,95,109,111,100,117,108,101,40,10,0,0,0,114,56,0,
@ -2679,7 +2679,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,201,0,0,0,114,22,1,0,0,114,27,1,0,0,
114,28,1,0,0,114,32,1,0,0,114,197,0,0,0,40,
1,0,0,0,114,69,0,0,0,114,4,0,0,0,114,4,
0,0,0,114,5,0,0,0,114,21,1,0,0,225,4,0,
0,0,0,114,5,0,0,0,114,21,1,0,0,226,4,0,
0,115,14,0,0,0,16,2,6,2,18,8,18,17,18,17,
18,27,3,1,114,21,1,0,0,99,1,0,0,0,0,0,
0,0,1,0,0,0,3,0,0,0,66,0,0,0,115,110,
@ -2728,7 +2728,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,83,40,1,0,0,0,78,114,4,0,0,0,40,2,
0,0,0,114,22,0,0,0,114,0,1,0,0,40,1,0,
0,0,114,173,0,0,0,114,4,0,0,0,114,5,0,0,
0,114,2,1,0,0,75,5,0,0,115,2,0,0,0,6,
0,114,2,1,0,0,76,5,0,0,115,2,0,0,0,6,
0,117,38,0,0,0,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,104,0,0,
@ -2742,7 +2742,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,114,35,0,0,0,116,7,0,0,0,100,101,116,97,
105,108,115,116,7,0,0,0,108,111,97,100,101,114,115,114,
115,0,0,0,114,4,0,0,0,40,1,0,0,0,114,173,
0,0,0,114,5,0,0,0,114,79,0,0,0,69,5,0,
0,0,0,114,5,0,0,0,114,79,0,0,0,70,5,0,
0,115,16,0,0,0,0,4,6,1,19,1,36,1,9,2,
15,1,9,1,12,1,117,19,0,0,0,70,105,108,101,70,
105,110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,
@ -2754,7 +2754,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,78,114,126,0,0,0,40,1,0,0,0,114,35,
1,0,0,40,1,0,0,0,114,78,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,22,1,0,
0,83,5,0,0,115,2,0,0,0,0,2,117,28,0,0,
0,84,5,0,0,115,2,0,0,0,0,2,117,28,0,0,
0,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,12,0,0,0,13,0,0,0,67,0,
@ -2817,7 +2817,7 @@ const unsigned char _Py_M__importlib[] = {
114,173,0,0,0,116,13,0,0,0,105,110,105,116,95,102,
105,108,101,110,97,109,101,116,9,0,0,0,102,117,108,108,
95,112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,
5,0,0,0,114,169,0,0,0,89,5,0,0,115,66,0,
5,0,0,0,114,169,0,0,0,90,5,0,0,115,66,0,
0,0,0,3,6,1,19,1,3,1,25,1,13,1,11,1,
15,1,10,1,12,2,9,1,9,1,15,2,9,1,6,2,
12,1,18,1,12,1,22,1,10,1,15,1,12,1,26,4,
@ -2855,7 +2855,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,40,2,0,0,0,114,22,0,0,0,116,2,0,0,
0,102,110,114,4,0,0,0,114,4,0,0,0,114,5,0,
0,0,245,9,0,0,0,60,115,101,116,99,111,109,112,62,
162,5,0,0,115,2,0,0,0,9,0,117,41,0,0,0,
163,5,0,0,115,2,0,0,0,9,0,117,41,0,0,0,
70,105,108,101,70,105,110,100,101,114,46,95,102,105,108,108,
95,99,97,99,104,101,46,60,108,111,99,97,108,115,62,46,
60,115,101,116,99,111,109,112,62,78,40,17,0,0,0,114,
@ -2874,7 +2874,7 @@ const unsigned char _Py_M__importlib[] = {
110,116,101,110,116,115,114,18,1,0,0,114,66,0,0,0,
114,12,1,0,0,114,0,1,0,0,116,8,0,0,0,110,
101,119,95,110,97,109,101,114,4,0,0,0,114,4,0,0,
0,114,5,0,0,0,114,39,1,0,0,133,5,0,0,115,
0,114,5,0,0,0,114,39,1,0,0,134,5,0,0,115,
34,0,0,0,0,2,9,1,3,1,19,1,22,3,11,3,
18,1,18,7,9,1,13,1,24,1,6,1,27,2,6,1,
17,1,9,1,18,1,117,22,0,0,0,70,105,108,101,70,
@ -2916,7 +2916,7 @@ const unsigned char _Py_M__importlib[] = {
0,108,111,97,100,101,114,95,100,101,116,97,105,108,115,114,
4,0,0,0,114,5,0,0,0,244,24,0,0,0,112,97,
116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,
70,105,110,100,101,114,174,5,0,0,115,6,0,0,0,0,
70,105,110,100,101,114,175,5,0,0,115,6,0,0,0,0,
2,12,1,21,1,117,54,0,0,0,70,105,108,101,70,105,
110,100,101,114,46,112,97,116,104,95,104,111,111,107,46,60,
108,111,99,97,108,115,62,46,112,97,116,104,95,104,111,111,
@ -2925,7 +2925,7 @@ const unsigned char _Py_M__importlib[] = {
45,1,0,0,114,46,1,0,0,114,4,0,0,0,40,2,
0,0,0,114,195,0,0,0,114,45,1,0,0,114,5,0,
0,0,244,9,0,0,0,112,97,116,104,95,104,111,111,107,
164,5,0,0,115,4,0,0,0,0,10,21,6,117,20,0,
165,5,0,0,115,4,0,0,0,0,10,21,6,117,20,0,
0,0,70,105,108,101,70,105,110,100,101,114,46,112,97,116,
104,95,104,111,111,107,99,1,0,0,0,0,0,0,0,1,
0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,
@ -2934,7 +2934,7 @@ const unsigned char _Py_M__importlib[] = {
105,110,100,101,114,40,123,33,114,125,41,40,2,0,0,0,
114,46,0,0,0,114,35,0,0,0,40,1,0,0,0,114,
78,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,114,90,0,0,0,182,5,0,0,115,2,0,0,
0,0,0,114,90,0,0,0,183,5,0,0,115,2,0,0,
0,0,1,117,19,0,0,0,70,105,108,101,70,105,110,100,
101,114,46,95,95,114,101,112,114,95,95,78,40,13,0,0,
0,114,56,0,0,0,114,55,0,0,0,114,57,0,0,0,
@ -2943,7 +2943,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,0,114,201,0,0,0,114,47,1,0,0,114,90,0,
0,0,40,1,0,0,0,114,69,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,114,33,1,0,0,
60,5,0,0,115,16,0,0,0,16,7,6,2,12,14,12,
61,5,0,0,115,16,0,0,0,16,7,6,2,12,14,12,
4,6,2,12,44,12,31,18,18,114,33,1,0,0,99,1,
0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,66,
0,0,0,115,50,0,0,0,124,0,0,69,101,0,0,90,
@ -2962,7 +2962,7 @@ const unsigned char _Py_M__importlib[] = {
97,0,0,0,244,12,0,0,0,97,99,113,117,105,114,101,
95,108,111,99,107,40,1,0,0,0,114,78,0,0,0,114,
4,0,0,0,114,4,0,0,0,114,5,0,0,0,244,9,
0,0,0,95,95,101,110,116,101,114,95,95,192,5,0,0,
0,0,0,95,95,101,110,116,101,114,95,95,193,5,0,0,
115,2,0,0,0,0,2,117,28,0,0,0,95,73,109,112,
111,114,116,76,111,99,107,67,111,110,116,101,120,116,46,95,
95,101,110,116,101,114,95,95,99,4,0,0,0,0,0,0,
@ -2978,14 +2978,14 @@ const unsigned char _Py_M__importlib[] = {
0,0,101,120,99,95,118,97,108,117,101,116,13,0,0,0,
101,120,99,95,116,114,97,99,101,98,97,99,107,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,244,8,0,0,
0,95,95,101,120,105,116,95,95,196,5,0,0,115,2,0,
0,95,95,101,120,105,116,95,95,197,5,0,0,115,2,0,
0,0,0,2,117,27,0,0,0,95,73,109,112,111,114,116,
76,111,99,107,67,111,110,116,101,120,116,46,95,95,101,120,
105,116,95,95,78,40,6,0,0,0,114,56,0,0,0,114,
55,0,0,0,114,57,0,0,0,114,58,0,0,0,114,50,
1,0,0,114,51,1,0,0,40,1,0,0,0,114,69,0,
0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,
0,114,48,1,0,0,188,5,0,0,115,6,0,0,0,16,
0,114,48,1,0,0,189,5,0,0,115,6,0,0,0,16,
2,6,2,12,4,114,48,1,0,0,99,3,0,0,0,0,
0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,
91,0,0,0,124,1,0,106,0,0,100,1,0,124,2,0,
@ -3009,7 +3009,7 @@ const unsigned char _Py_M__importlib[] = {
101,118,101,108,116,4,0,0,0,98,105,116,115,116,4,0,
0,0,98,97,115,101,114,4,0,0,0,114,4,0,0,0,
114,5,0,0,0,244,13,0,0,0,95,114,101,115,111,108,
118,101,95,110,97,109,101,201,5,0,0,115,10,0,0,0,
118,101,95,110,97,109,101,202,5,0,0,115,10,0,0,0,
0,2,22,1,18,1,15,1,10,1,114,54,1,0,0,99,
2,0,0,0,0,0,0,0,4,0,0,0,11,0,0,0,
67,0,0,0,115,138,0,0,0,116,0,0,106,1,0,115,
@ -3032,7 +3032,7 @@ const unsigned char _Py_M__importlib[] = {
114,66,0,0,0,114,35,0,0,0,114,25,1,0,0,114,
173,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,244,12,0,0,0,95,102,105,110,100,95,109,111,
100,117,108,101,210,5,0,0,115,20,0,0,0,0,2,9,
100,117,108,101,211,5,0,0,115,20,0,0,0,0,2,9,
1,19,1,16,1,10,1,24,1,12,2,15,1,4,2,21,
2,114,56,1,0,0,99,3,0,0,0,0,0,0,0,4,
0,0,0,4,0,0,0,67,0,0,0,115,194,0,0,0,
@ -3070,7 +3070,7 @@ const unsigned char _Py_M__importlib[] = {
114,66,0,0,0,114,52,1,0,0,114,53,1,0,0,114,
175,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,
0,0,0,244,13,0,0,0,95,115,97,110,105,116,121,95,
99,104,101,99,107,227,5,0,0,115,24,0,0,0,0,2,
99,104,101,99,107,228,5,0,0,115,24,0,0,0,0,2,
15,1,30,1,12,1,15,1,6,1,15,1,15,1,15,1,
6,2,27,1,19,1,114,59,1,0,0,117,20,0,0,0,
78,111,32,109,111,100,117,108,101,32,110,97,109,101,100,32,
@ -3129,7 +3129,7 @@ const unsigned char _Py_M__importlib[] = {
114,236,0,0,0,114,145,0,0,0,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,244,23,0,0,0,95,102,
105,110,100,95,97,110,100,95,108,111,97,100,95,117,110,108,
111,99,107,101,100,246,5,0,0,115,76,0,0,0,0,1,
111,99,107,101,100,247,5,0,0,115,76,0,0,0,0,1,
6,1,19,1,6,1,15,1,16,2,15,1,11,2,13,1,
3,1,13,1,13,1,22,1,26,1,15,1,12,1,27,3,
9,1,9,1,15,2,13,1,19,2,13,1,6,2,13,1,
@ -3150,7 +3150,7 @@ const unsigned char _Py_M__importlib[] = {
1,0,0,114,87,0,0,0,40,3,0,0,0,114,66,0,
0,0,114,62,1,0,0,114,73,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,244,14,0,0,0,
95,102,105,110,100,95,97,110,100,95,108,111,97,100,40,6,
95,102,105,110,100,95,97,110,100,95,108,111,97,100,41,6,
0,0,115,14,0,0,0,0,2,3,1,16,2,11,1,10,
1,3,1,17,2,114,64,1,0,0,99,3,0,0,0,0,
0,0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,
@ -3196,7 +3196,7 @@ const unsigned char _Py_M__importlib[] = {
40,5,0,0,0,114,66,0,0,0,114,52,1,0,0,114,
53,1,0,0,114,145,0,0,0,114,140,0,0,0,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,114,65,1,
0,0,53,6,0,0,115,26,0,0,0,0,9,16,1,12,
0,0,54,6,0,0,115,26,0,0,0,0,9,16,1,12,
1,21,1,10,1,15,1,13,1,13,1,12,1,10,2,15,
1,21,1,10,1,114,65,1,0,0,99,3,0,0,0,0,
0,0,0,6,0,0,0,17,0,0,0,67,0,0,0,115,
@ -3244,7 +3244,7 @@ const unsigned char _Py_M__importlib[] = {
111,109,95,110,97,109,101,114,236,0,0,0,114,4,0,0,
0,114,4,0,0,0,114,5,0,0,0,244,16,0,0,0,
95,104,97,110,100,108,101,95,102,114,111,109,108,105,115,116,
77,6,0,0,115,34,0,0,0,0,10,15,1,12,1,12,
78,6,0,0,115,34,0,0,0,0,10,15,1,12,1,12,
1,13,1,15,1,22,1,13,1,15,1,21,1,3,1,17,
1,18,6,18,1,15,1,9,1,32,1,114,71,1,0,0,
99,1,0,0,0,0,0,0,0,2,0,0,0,2,0,0,
@ -3270,7 +3270,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,40,2,0,0,0,244,7,0,0,0,103,108,111,98,
97,108,115,114,52,1,0,0,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,244,17,0,0,0,95,99,97,108,
99,95,95,95,112,97,99,107,97,103,101,95,95,111,6,0,
99,95,95,95,112,97,99,107,97,103,101,95,95,112,6,0,
0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1,
25,1,114,73,1,0,0,99,0,0,0,0,0,0,0,0,
3,0,0,0,3,0,0,0,67,0,0,0,115,55,0,0,
@ -3293,7 +3293,7 @@ const unsigned char _Py_M__importlib[] = {
0,116,10,0,0,0,101,120,116,101,110,115,105,111,110,115,
116,6,0,0,0,115,111,117,114,99,101,116,8,0,0,0,
98,121,116,101,99,111,100,101,114,4,0,0,0,114,4,0,
0,0,114,5,0,0,0,114,215,0,0,0,126,6,0,0,
0,0,114,5,0,0,0,114,215,0,0,0,127,6,0,0,
115,8,0,0,0,0,5,18,1,12,1,12,1,114,215,0,
0,0,99,5,0,0,0,0,0,0,0,9,0,0,0,5,
0,0,0,67,0,0,0,115,227,0,0,0,124,4,0,100,
@ -3350,7 +3350,7 @@ const unsigned char _Py_M__importlib[] = {
116,8,0,0,0,103,108,111,98,97,108,115,95,114,52,1,
0,0,116,7,0,0,0,99,117,116,95,111,102,102,114,4,
0,0,0,114,4,0,0,0,114,5,0,0,0,244,10,0,
0,0,95,95,105,109,112,111,114,116,95,95,137,6,0,0,
0,0,95,95,105,109,112,111,114,116,95,95,138,6,0,0,
115,26,0,0,0,0,11,12,1,15,2,24,1,12,1,18,
1,6,3,12,1,23,1,6,1,4,4,35,3,40,2,114,
77,1,0,0,99,2,0,0,0,0,0,0,0,16,0,0,
@ -3429,7 +3429,7 @@ const unsigned char _Py_M__importlib[] = {
0,0,0,78,40,1,0,0,0,114,31,0,0,0,40,2,
0,0,0,114,22,0,0,0,114,118,0,0,0,114,4,0,
0,0,114,4,0,0,0,114,5,0,0,0,114,2,1,0,
0,210,6,0,0,115,2,0,0,0,6,0,117,25,0,0,
0,211,6,0,0,115,2,0,0,0,6,0,117,25,0,0,
0,95,115,101,116,117,112,46,60,108,111,99,97,108,115,62,
46,60,103,101,110,101,120,112,114,62,114,71,0,0,0,117,
30,0,0,0,105,109,112,111,114,116,108,105,98,32,114,101,
@ -3468,7 +3468,7 @@ const unsigned char _Py_M__importlib[] = {
102,95,109,111,100,117,108,101,116,13,0,0,0,119,105,110,
114,101,103,95,109,111,100,117,108,101,114,4,0,0,0,114,
4,0,0,0,114,5,0,0,0,244,6,0,0,0,95,115,
101,116,117,112,173,6,0,0,115,102,0,0,0,0,9,6,
101,116,117,112,174,6,0,0,115,102,0,0,0,0,9,6,
1,6,2,12,1,9,2,6,2,12,1,28,1,15,1,24,
1,15,1,12,1,15,1,22,2,13,1,13,1,15,1,18,
2,13,1,20,2,33,1,19,2,31,1,10,1,15,1,13,
@ -3498,7 +3498,7 @@ const unsigned char _Py_M__importlib[] = {
0,114,84,1,0,0,114,85,1,0,0,116,17,0,0,0,
115,117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,
115,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,
244,8,0,0,0,95,105,110,115,116,97,108,108,249,6,0,
244,8,0,0,0,95,105,110,115,116,97,108,108,250,6,0,
0,115,16,0,0,0,0,2,13,1,9,1,28,1,16,1,
16,1,15,1,19,1,114,87,1,0,0,40,3,0,0,0,
117,3,0,0,0,119,105,110,114,1,0,0,0,114,2,0,
@ -3533,7 +3533,7 @@ const unsigned char _Py_M__importlib[] = {
101,62,8,0,0,0,115,140,0,0,0,6,21,6,3,12,
13,12,10,12,9,12,6,12,12,12,10,12,6,12,7,15,
22,12,8,15,3,12,12,6,2,6,3,22,4,19,68,19,
23,12,19,12,20,12,109,22,1,18,2,6,2,9,2,9,
23,12,19,12,20,12,110,22,1,18,2,6,2,9,2,9,
1,9,2,15,27,12,23,12,21,12,12,18,8,12,13,12,
11,12,55,12,18,12,11,12,11,12,13,21,55,21,12,18,
12,19,57,19,54,19,50,19,34,22,132,19,29,25,43,25,

View File

@ -77,6 +77,7 @@ ste_new(struct symtable *st, identifier name, _Py_block_ty block,
ste->ste_child_free = 0;
ste->ste_generator = 0;
ste->ste_returns_value = 0;
ste->ste_needs_class_closure = 0;
if (PyDict_SetItem(st->st_blocks, ste->ste_id, (PyObject *)ste) < 0)
goto fail;
@ -514,13 +515,10 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags,
Note that the current block's free variables are included in free.
That's safe because no name can be free and local in the same scope.
The 'restricted' argument may be set to a string to restrict the analysis
to the one variable whose name equals that string (e.g. "__class__").
*/
static int
analyze_cells(PyObject *scopes, PyObject *free, const char *restricted)
analyze_cells(PyObject *scopes, PyObject *free)
{
PyObject *name, *v, *v_cell;
int success = 0;
@ -537,9 +535,6 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted)
continue;
if (!PySet_Contains(free, name))
continue;
if (restricted != NULL &&
PyUnicode_CompareWithASCIIString(name, restricted))
continue;
/* Replace LOCAL with CELL for this name, and remove
from free. It is safe to replace the value of name
in the dict, because it will not cause a resize.
@ -555,6 +550,20 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted)
return success;
}
static int
drop_class_free(PySTEntryObject *ste, PyObject *free)
{
int res;
if (!GET_IDENTIFIER(__class__))
return 0;
res = PySet_Discard(free, __class__);
if (res < 0)
return 0;
if (res)
ste->ste_needs_class_closure = 1;
return 1;
}
/* Check for illegal statements in unoptimized namespaces */
static int
check_unoptimized(const PySTEntryObject* ste) {
@ -785,7 +794,6 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free,
/* Special-case __class__ */
if (!GET_IDENTIFIER(__class__))
goto error;
assert(PySet_Contains(local, __class__) == 1);
if (PySet_Add(newbound, __class__) < 0)
goto error;
}
@ -818,11 +826,9 @@ analyze_block(PySTEntryObject *ste, PyObject *bound, PyObject *free,
Py_DECREF(temp);
/* Check if any local variables must be converted to cell variables */
if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree,
NULL))
if (ste->ste_type == FunctionBlock && !analyze_cells(scopes, newfree))
goto error;
else if (ste->ste_type == ClassBlock && !analyze_cells(scopes, newfree,
"__class__"))
else if (ste->ste_type == ClassBlock && !drop_class_free(ste, newfree))
goto error;
/* Records the results of the analysis in the symbol table entry */
if (!update_symbols(ste->ste_symbols, scopes, bound, newfree,
@ -1179,9 +1185,7 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
if (!symtable_enter_block(st, s->v.ClassDef.name, ClassBlock,
(void *)s, s->lineno, s->col_offset))
VISIT_QUIT(st, 0);
if (!GET_IDENTIFIER(__class__) ||
!symtable_add_def(st, __class__, DEF_LOCAL) ||
!GET_IDENTIFIER(__locals__) ||
if (!GET_IDENTIFIER(__locals__) ||
!symtable_add_def(st, __locals__, DEF_PARAM)) {
symtable_exit_block(st, s);
VISIT_QUIT(st, 0);