From 74727b9d98298e7141a3169e98690dff37839328 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Wed, 9 Jun 2021 00:00:00 +0000 Subject: [PATCH 01/64] bpo-44347: [doc] clarify meaning of shutil.copytree's dirs_exist_ok kwarg * It now mirrors the documentation for os.makedirs * Docstring in python source file was correspondingly updated --- Doc/library/shutil.rst | 6 +++--- Lib/shutil.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index d5080da15bba41..7e41ab45ea24f1 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -230,9 +230,9 @@ Directory and files operations dirs_exist_ok=False) Recursively copy an entire directory tree rooted at *src* to a directory - named *dst* and return the destination directory. *dirs_exist_ok* dictates - whether to raise an exception in case *dst* or any missing parent directory - already exists. + named *dst* and return the destination directory. If *dirs_exist_ok* is + False (the default), a :exc:`FileExistsError` is raised if *dst* already + exists. Permissions and times of directories are copied with :func:`copystat`, individual files are copied using :func:`~shutil.copy2`. diff --git a/Lib/shutil.py b/Lib/shutil.py index 1982b1c626e966..64fd91a8b1d61e 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -509,8 +509,8 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False): """Recursively copy a directory tree and return the destination directory. - dirs_exist_ok dictates whether to raise an exception in case dst or any - missing parent directory already exists. + If dirs_exist_ok is False (the default), a FileExistsError is + raised if dst already exists. If exception(s) occur, an Error is raised with a list of reasons. From 0fa96d12c8685da1f5f98de2d9cbf66b7d015a77 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Thu, 10 Jun 2021 09:40:48 -0400 Subject: [PATCH 02/64] bpo-44347: [doc] clarify shutil.copytree dirs_exist_ok kwarg * Add additional clarification: nonexistent parent directories will also be created. --- Doc/library/shutil.rst | 13 ++++++++----- Lib/shutil.py | 8 +++++--- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 7e41ab45ea24f1..bcfd22568380bd 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -230,9 +230,7 @@ Directory and files operations dirs_exist_ok=False) Recursively copy an entire directory tree rooted at *src* to a directory - named *dst* and return the destination directory. If *dirs_exist_ok* is - False (the default), a :exc:`FileExistsError` is raised if *dst* already - exists. + named *dst* and return the destination directory. Permissions and times of directories are copied with :func:`copystat`, individual files are copied using :func:`~shutil.copy2`. @@ -263,8 +261,13 @@ Directory and files operations If *copy_function* is given, it must be a callable that will be used to copy each file. It will be called with the source path and the destination path -   as arguments. By default, :func:`~shutil.copy2` is used, but any function -   that supports the same signature (like :func:`~shutil.copy`) can be used. + as arguments. By default, :func:`~shutil.copy2` is used, but any function + that supports the same signature (like :func:`~shutil.copy`) can be used. + + If *dirs_exist_ok* is `False` (the default), a :exc:`FileExistsError` is + raised if *dst* already exists. Furthermore, any parent directory in the + path to *dst* will be created if they do not exist when the *dirs_exist_ok* + flag is `True`. .. audit-event:: shutil.copytree src,dst shutil.copytree diff --git a/Lib/shutil.py b/Lib/shutil.py index 64fd91a8b1d61e..6e428570d5b8be 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -509,9 +509,6 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False): """Recursively copy a directory tree and return the destination directory. - If dirs_exist_ok is False (the default), a FileExistsError is - raised if dst already exists. - If exception(s) occur, an Error is raised with a list of reasons. If the optional symlinks flag is true, symbolic links in the @@ -542,6 +539,11 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, destination path as arguments. By default, copy2() is used, but any function that supports the same signature (like copy()) can be used. + If dirs_exist_ok is False (the default), a FileExistsError is + raised if dst already exists. Furthermore, any parent directory in the + path to dst will be created if they do not exist when the dirs_exist_ok + flag is True. + """ sys.audit("shutil.copytree", src, dst) with os.scandir(src) as itr: From 9b262b8dcdcc8b625df5ff1bd4469f961f342888 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Thu, 10 Jun 2021 17:01:51 -0400 Subject: [PATCH 03/64] bpo-44347: [doc|fix]: add NEWS.d entry, remove use of default context --- Doc/library/shutil.rst | 8 ++++---- .../2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index bcfd22568380bd..70606a639fdc18 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -264,10 +264,10 @@ Directory and files operations as arguments. By default, :func:`~shutil.copy2` is used, but any function that supports the same signature (like :func:`~shutil.copy`) can be used. - If *dirs_exist_ok* is `False` (the default), a :exc:`FileExistsError` is - raised if *dst* already exists. Furthermore, any parent directory in the - path to *dst* will be created if they do not exist when the *dirs_exist_ok* - flag is `True`. + If *dirs_exist_ok* is false (the default), a :exc:`FileExistsError` is + raised if *dst* already exists. Conversely, *dst* as well as any any parent + directory in the path to *dst* will be created if they do not exist when + the *dirs_exist_ok* flag is true. .. audit-event:: shutil.copytree src,dst shutil.copytree diff --git a/Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst b/Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst new file mode 100644 index 00000000000000..f155c8f16a101b --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst @@ -0,0 +1,2 @@ +Clarify the meaning of *dirs_exist_ok*, a kwarg passed to the shutil.copytree +function. From e365e5258cc0f609faa1c8d5bea764bf5837133e Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Fri, 11 Jun 2021 15:28:47 -0400 Subject: [PATCH 04/64] bpo-44347: [doc] better document argument shutil.copytree(dirs_exist_ok=False) * Be more explicit --- Doc/library/shutil.rst | 8 ++++---- Lib/shutil.py | 8 +++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 70606a639fdc18..234321809897f6 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -264,10 +264,10 @@ Directory and files operations as arguments. By default, :func:`~shutil.copy2` is used, but any function that supports the same signature (like :func:`~shutil.copy`) can be used. - If *dirs_exist_ok* is false (the default), a :exc:`FileExistsError` is - raised if *dst* already exists. Conversely, *dst* as well as any any parent - directory in the path to *dst* will be created if they do not exist when - the *dirs_exist_ok* flag is true. + If *dirs_exist_ok* is false (the default) and *dst* already exists, a + :exc:`FileExistsError` is raised. If *dirs_exist_ok* is true, *dst* as well + as any parent directory in the path to *dst* will be created if they do + not exist already. .. audit-event:: shutil.copytree src,dst shutil.copytree diff --git a/Lib/shutil.py b/Lib/shutil.py index 6e428570d5b8be..fa483ebc9dd582 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -539,11 +539,9 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, destination path as arguments. By default, copy2() is used, but any function that supports the same signature (like copy()) can be used. - If dirs_exist_ok is False (the default), a FileExistsError is - raised if dst already exists. Furthermore, any parent directory in the - path to dst will be created if they do not exist when the dirs_exist_ok - flag is True. - + If dirs_exist_ok is false (the default), a FileExistsError is raised if dst + already exists. If dirs_exist_ok is true, dst as well as any any parent + directory in the path to dst will be created if they do not exist already. """ sys.audit("shutil.copytree", src, dst) with os.scandir(src) as itr: From d340c878ac99cdf4792e1ae5fdeff2561266af98 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Fri, 11 Jun 2021 15:36:04 -0400 Subject: [PATCH 05/64] bpo-44347: [doc|fix]: add missed updated docstring from previous commit --- Lib/shutil.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Lib/shutil.py b/Lib/shutil.py index fa483ebc9dd582..ebc8a07cca741a 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -539,9 +539,10 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, destination path as arguments. By default, copy2() is used, but any function that supports the same signature (like copy()) can be used. - If dirs_exist_ok is false (the default), a FileExistsError is raised if dst - already exists. If dirs_exist_ok is true, dst as well as any any parent - directory in the path to dst will be created if they do not exist already. + If dirs_exist_ok is false (the default) and dst already exists, a + FileExistsError is raised. If dirs_exist_ok is true, dst as well as any + parent directory in the path to dst will be created if they do not exist + already. """ sys.audit("shutil.copytree", src, dst) with os.scandir(src) as itr: From dd2f5c3690092b84d738ca3a1e4e7d43b12e2c82 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Fri, 11 Jun 2021 21:35:40 +0100 Subject: [PATCH 06/64] bpo-44381: Windows build now allows enabling control flow guard (GH-26645) --- .../next/Build/2021-06-10-18-08-44.bpo-44381.Xpc1iX.rst | 2 ++ PCbuild/pyproject.props | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-06-10-18-08-44.bpo-44381.Xpc1iX.rst diff --git a/Misc/NEWS.d/next/Build/2021-06-10-18-08-44.bpo-44381.Xpc1iX.rst b/Misc/NEWS.d/next/Build/2021-06-10-18-08-44.bpo-44381.Xpc1iX.rst new file mode 100644 index 00000000000000..002112c4b55674 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-06-10-18-08-44.bpo-44381.Xpc1iX.rst @@ -0,0 +1,2 @@ +The Windows build now accepts :envvar:`EnableControlFlowGuard` set to +``guard`` to enable CFG. diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props index 834b27c86d42c8..d492b71dfbaa3d 100644 --- a/PCbuild/pyproject.props +++ b/PCbuild/pyproject.props @@ -44,11 +44,11 @@ Default true true - OnlyExplicitInline - OnlyExplicitInline + $(EnableControlFlowGuard) /utf-8 %(AdditionalOptions) + OnlyExplicitInline Disabled false MultiThreadedDebugDLL From d8837d8cde7de5e19a5bf41b7c6e719ec9ae1b36 Mon Sep 17 00:00:00 2001 From: Kaustubh J Date: Sat, 12 Jun 2021 04:25:32 +0530 Subject: [PATCH 07/64] bpo-40128: Fix IDLE autocomplete on macOS (GH-26672) In particular, when running with tk8.6.8, as in PSF 3.9. Co-authored-by: Terry Jan Reedy --- Lib/idlelib/autocomplete_w.py | 1 + Misc/NEWS.d/next/IDLE/2021-06-11-17-43-39.bpo-40128.7vDN3U.rst | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/IDLE/2021-06-11-17-43-39.bpo-40128.7vDN3U.rst diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py index 2e3f9c14a19814..13ff60ae4493e6 100644 --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -206,6 +206,7 @@ def show_window(self, comp_lists, index, complete, mode, userWantsWin): scrollbar.config(command=listbox.yview) scrollbar.pack(side=RIGHT, fill=Y) listbox.pack(side=LEFT, fill=BOTH, expand=True) + acw.update_idletasks() # Need for tk8.6.8 on macOS: #40128. acw.lift() # work around bug in Tk 8.5.18+ (issue #24570) # Initialize the listbox selection diff --git a/Misc/NEWS.d/next/IDLE/2021-06-11-17-43-39.bpo-40128.7vDN3U.rst b/Misc/NEWS.d/next/IDLE/2021-06-11-17-43-39.bpo-40128.7vDN3U.rst new file mode 100644 index 00000000000000..dafbe2cd5c3a8f --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2021-06-11-17-43-39.bpo-40128.7vDN3U.rst @@ -0,0 +1,3 @@ +Mostly fix completions on macOS when not using tcl/tk 8.6.11 (as with 3.9). +The added update_idletask call should be harmless and possibly helpful +otherwise. From 869f2fa22ae0f5d8941b5518427fa228a8926a06 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sat, 12 Jun 2021 10:23:02 +0100 Subject: [PATCH 08/64] bpo-44339: Fix math.pow corner case to comply with IEEE 754 (GH-26606) Change the behaviour of `math.pow(0.0, -math.inf)` and `math.pow(-0.0, -math.inf)` to return positive infinity instead of raising `ValueError`. This makes `math.pow` consistent with the built-in `pow` (and the `**` operator) for this particular special case, and brings the `math.pow` special-case handling into compliance with IEEE 754. --- Doc/library/math.rst | 7 ++++++- Doc/whatsnew/3.11.rst | 10 ++++++++-- Lib/test/ieee754.txt | 6 ++---- Lib/test/test_math.py | 4 ++-- .../Library/2021-06-08-17-47-38.bpo-44339.9JwMSc.rst | 3 +++ Modules/mathmodule.c | 2 -- 6 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-06-08-17-47-38.bpo-44339.9JwMSc.rst diff --git a/Doc/library/math.rst b/Doc/library/math.rst index 7aa543ae5d47ea..71186788a652af 100644 --- a/Doc/library/math.rst +++ b/Doc/library/math.rst @@ -409,7 +409,7 @@ Power and logarithmic functions .. function:: pow(x, y) Return ``x`` raised to the power ``y``. Exceptional cases follow - Annex 'F' of the C99 standard as far as possible. In particular, + the IEEE 754 standard as far as possible. In particular, ``pow(1.0, x)`` and ``pow(x, 0.0)`` always return ``1.0``, even when ``x`` is a zero or a NaN. If both ``x`` and ``y`` are finite, ``x`` is negative, and ``y`` is not an integer then ``pow(x, y)`` @@ -419,6 +419,11 @@ Power and logarithmic functions its arguments to type :class:`float`. Use ``**`` or the built-in :func:`pow` function for computing exact integer powers. + .. versionchanged:: 3.11 + The special cases ``pow(0.0, -inf)`` and ``pow(-0.0, -inf)`` were + changed to return ``inf`` instead of raising :exc:`ValueError`, + for consistency with IEEE 754. + .. function:: sqrt(x) diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index ba7c456aa21565..50d91a0adc141b 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -96,8 +96,14 @@ string. (Contributed by Sergey B Kirpichev in :issue:`44258`.) math ---- -Add :func:`math.cbrt()`: return the cube root of x. -(Contributed by Ajith Ramachandran in :issue:`44357`.) +* Add :func:`math.cbrt`: return the cube root of x. + (Contributed by Ajith Ramachandran in :issue:`44357`.) + +* The behaviour of two :func:`math.pow` corner cases was changed, for + consistency with the IEEE 754 specification. The operations + ``math.pow(0.0, -math.inf)`` and ``math.pow(-0.0, -math.inf)`` now return + ``inf``. Previously they raised :exc:`ValueError`. (Contributed by Mark + Dickinson in :issue:`44339`.) Removed diff --git a/Lib/test/ieee754.txt b/Lib/test/ieee754.txt index 89bb0c50a3d24a..a8b8a0a2148f00 100644 --- a/Lib/test/ieee754.txt +++ b/Lib/test/ieee754.txt @@ -104,7 +104,7 @@ infinity and NaN. 1.0 The power of 0 raised to x is defined as 0, if x is positive. Negative -values are a domain error or zero division error and NaN result in a +finite values are a domain error or zero division error and NaN result in a silent NaN. >>> pow(0, 0) @@ -112,9 +112,7 @@ silent NaN. >>> pow(0, INF) 0.0 >>> pow(0, -INF) -Traceback (most recent call last): -... -ValueError: math domain error +inf >>> 0 ** -1 Traceback (most recent call last): ... diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index da162844e202a0..42b61c317c4e3a 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1230,7 +1230,7 @@ def testPow(self): self.assertRaises(ValueError, math.pow, 0., -2.) self.assertRaises(ValueError, math.pow, 0., -2.3) self.assertRaises(ValueError, math.pow, 0., -3.) - self.assertRaises(ValueError, math.pow, 0., NINF) + self.assertEqual(math.pow(0., NINF), INF) self.assertTrue(math.isnan(math.pow(0., NAN))) # pow(INF, x) @@ -1256,7 +1256,7 @@ def testPow(self): self.assertRaises(ValueError, math.pow, -0., -2.) self.assertRaises(ValueError, math.pow, -0., -2.3) self.assertRaises(ValueError, math.pow, -0., -3.) - self.assertRaises(ValueError, math.pow, -0., NINF) + self.assertEqual(math.pow(-0., NINF), INF) self.assertTrue(math.isnan(math.pow(-0., NAN))) # pow(NINF, x) diff --git a/Misc/NEWS.d/next/Library/2021-06-08-17-47-38.bpo-44339.9JwMSc.rst b/Misc/NEWS.d/next/Library/2021-06-08-17-47-38.bpo-44339.9JwMSc.rst new file mode 100644 index 00000000000000..10499eb02bb3c9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-08-17-47-38.bpo-44339.9JwMSc.rst @@ -0,0 +1,3 @@ +Change ``math.pow(±0.0, -math.inf)`` to return ``inf`` instead of raising +``ValueError``. This brings the special-case handling of ``math.pow`` into +compliance with the IEEE 754 standard. diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index b3429c5653c958..bd97b03205b7ca 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -2810,8 +2810,6 @@ math_pow_impl(PyObject *module, double x, double y) r = y; else if (y < 0. && fabs(x) < 1.0) { r = -y; /* result is +inf */ - if (x == 0.) /* 0**-inf: divide-by-zero */ - errno = EDOM; } else r = 0.; From 29584b7871ef735e98d9aefc6705a022bec0aa24 Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 12 Jun 2021 15:15:17 +0300 Subject: [PATCH 09/64] bpo-43475: Fix the Python implementation of hash of Decimal NaN (GH-26679) --- Doc/library/stdtypes.rst | 2 +- Lib/_pydecimal.py | 2 +- Lib/test/test_decimal.py | 23 +++++++++++++++-------- Lib/test/test_float.py | 19 +++++++++++++++++++ 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index e34a888639c189..3b2ff8090ced35 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -739,7 +739,7 @@ number, :class:`float`, or :class:`complex`:: """Compute the hash of a float x.""" if math.isnan(x): - return super().__hash__() + return object.__hash__(x) elif math.isinf(x): return sys.hash_info.inf if x > 0 else -sys.hash_info.inf else: diff --git a/Lib/_pydecimal.py b/Lib/_pydecimal.py index ff23322ed5603e..3d6cece9676c93 100644 --- a/Lib/_pydecimal.py +++ b/Lib/_pydecimal.py @@ -951,7 +951,7 @@ def __hash__(self): if self.is_snan(): raise TypeError('Cannot hash a signaling NaN value.') elif self.is_nan(): - return super().__hash__() + return object.__hash__(self) else: if self._sign: return -_PyHASH_INF diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index 179a9ea7042fbf..058829b03a3dee 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -1814,13 +1814,7 @@ def hashit(d): # check that hash(d) == hash(int(d)) for integral values for value in test_values: - self.assertEqual(hashit(value), hashit(int(value))) - - #the same hash that to an int - self.assertEqual(hashit(Decimal(23)), hashit(23)) - self.assertRaises(TypeError, hash, Decimal('sNaN')) - self.assertTrue(hashit(Decimal('Inf'))) - self.assertTrue(hashit(Decimal('-Inf'))) + self.assertEqual(hashit(value), hash(int(value))) # check that the hashes of a Decimal float match when they # represent exactly the same values @@ -1829,7 +1823,7 @@ def hashit(d): for s in test_strings: f = float(s) d = Decimal(s) - self.assertEqual(hashit(f), hashit(d)) + self.assertEqual(hashit(d), hash(f)) with localcontext() as c: # check that the value of the hash doesn't depend on the @@ -1850,6 +1844,19 @@ def hashit(d): x = 1100 ** 1248 self.assertEqual(hashit(Decimal(x)), hashit(x)) + def test_hash_method_nan(self): + Decimal = self.decimal.Decimal + self.assertRaises(TypeError, hash, Decimal('sNaN')) + value = Decimal('NaN') + self.assertEqual(hash(value), object.__hash__(value)) + class H: + def __hash__(self): + return 42 + class D(Decimal, H): + pass + value = D('NaN') + self.assertEqual(hash(value), object.__hash__(value)) + def test_min_and_max_methods(self): Decimal = self.decimal.Decimal diff --git a/Lib/test/test_float.py b/Lib/test/test_float.py index ff4f3876be5cd3..f0ed40f7c94a7e 100644 --- a/Lib/test/test_float.py +++ b/Lib/test/test_float.py @@ -564,6 +564,25 @@ def test_float_pow(self): #self.assertTrue(0.0 < pow_op(2.0, -1047) < 1e-315) #self.assertTrue(0.0 > pow_op(-2.0, -1047) > -1e-315) + def test_hash(self): + for x in range(-30, 30): + self.assertEqual(hash(float(x)), hash(x)) + self.assertEqual(hash(float(sys.float_info.max)), + hash(int(sys.float_info.max))) + self.assertEqual(hash(float('inf')), sys.hash_info.inf) + self.assertEqual(hash(float('-inf')), -sys.hash_info.inf) + + def test_hash_nan(self): + value = float('nan') + self.assertEqual(hash(value), object.__hash__(value)) + class H: + def __hash__(self): + return 42 + class F(float, H): + pass + value = F('nan') + self.assertEqual(hash(value), object.__hash__(value)) + @requires_setformat class FormatFunctionsTestCase(unittest.TestCase): From b63a7936a01203b5969c8b852e42cfebfde5786f Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Sat, 12 Jun 2021 16:11:59 +0300 Subject: [PATCH 10/64] Add more const modifiers. (GH-26691) --- Include/cpython/code.h | 6 +++--- Include/internal/pycore_code.h | 4 ++-- Modules/_zoneinfo.c | 4 ++-- Objects/codeobject.c | 6 +++--- Objects/unicodeobject.c | 2 +- Parser/pegen.c | 14 +++++++------- Parser/pegen.h | 6 +++--- Parser/string_parser.c | 10 +++++----- Python/specialize.c | 2 +- 9 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Include/cpython/code.h b/Include/cpython/code.h index a3db7d9d5eff7a..f6e789dd4d8cfe 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -196,8 +196,8 @@ PyAPI_FUNC(int) PyCode_Addr2Line(PyCodeObject *, int); /* for internal use only */ struct _opaque { int computed_line; - char *lo_next; - char *limit; + const char *lo_next; + const char *limit; }; typedef struct _line_offsets { @@ -234,7 +234,7 @@ PyAPI_FUNC(int) _PyCode_SetExtra(PyObject *code, Py_ssize_t index, int _PyCode_InitAddressRange(PyCodeObject* co, PyCodeAddressRange *bounds); /** Out of process API for initializing the line number table. */ -void PyLineTable_InitAddressRange(char *linetable, Py_ssize_t length, int firstlineno, PyCodeAddressRange *range); +void PyLineTable_InitAddressRange(const char *linetable, Py_ssize_t length, int firstlineno, PyCodeAddressRange *range); /** API for traversing the line number table. */ int PyLineTable_NextAddressRange(PyCodeAddressRange *range); diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index 05ba522969a3d0..bfc2deb1b60424 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -79,7 +79,7 @@ typedef union _cache_or_instruction { * The zeroth entry immediately precedes the instructions. */ static inline SpecializedCacheEntry * -_GetSpecializedCacheEntry(_Py_CODEUNIT *first_instr, Py_ssize_t n) +_GetSpecializedCacheEntry(const _Py_CODEUNIT *first_instr, Py_ssize_t n) { SpecializedCacheOrInstruction *last_cache_plus_one = (SpecializedCacheOrInstruction *)first_instr; assert(&last_cache_plus_one->code[0] == first_instr); @@ -126,7 +126,7 @@ offset_from_oparg_and_nexti(int oparg, int nexti) * nexti is used as it corresponds to the instruction pointer in the interpreter. * This doesn't check that an entry has been allocated for that instruction. */ static inline SpecializedCacheEntry * -_GetSpecializedCacheEntryForInstruction(_Py_CODEUNIT *first_instr, int nexti, int oparg) +_GetSpecializedCacheEntryForInstruction(const _Py_CODEUNIT *first_instr, int nexti, int oparg) { return _GetSpecializedCacheEntry( first_instr, diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c index 755442f857652b..c722330ee491a9 100644 --- a/Modules/_zoneinfo.c +++ b/Modules/_zoneinfo.c @@ -1468,11 +1468,11 @@ parse_tz_str(PyObject *tz_str_obj, _tzrule *out) long std_offset = 1 << 20; long dst_offset = 1 << 20; - char *tz_str = PyBytes_AsString(tz_str_obj); + const char *tz_str = PyBytes_AsString(tz_str_obj); if (tz_str == NULL) { return -1; } - char *p = tz_str; + const char *p = tz_str; // Read the `std` abbreviation, which must be at least 3 characters long. Py_ssize_t num_chars = parse_abbr(p, &std_abbr); diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 1a99ec361e6b5b..701a37d7392fbe 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -627,7 +627,7 @@ PyCode_Addr2Line(PyCodeObject *co, int addrq) } void -PyLineTable_InitAddressRange(char *linetable, Py_ssize_t length, int firstlineno, PyCodeAddressRange *range) +PyLineTable_InitAddressRange(const char *linetable, Py_ssize_t length, int firstlineno, PyCodeAddressRange *range) { range->opaque.lo_next = linetable; range->opaque.limit = range->opaque.lo_next + length; @@ -640,7 +640,7 @@ PyLineTable_InitAddressRange(char *linetable, Py_ssize_t length, int firstlineno int _PyCode_InitAddressRange(PyCodeObject* co, PyCodeAddressRange *bounds) { - char *linetable = PyBytes_AS_STRING(co->co_linetable); + const char *linetable = PyBytes_AS_STRING(co->co_linetable); Py_ssize_t length = PyBytes_GET_SIZE(co->co_linetable); PyLineTable_InitAddressRange(linetable, length, co->co_firstlineno, bounds); return bounds->ar_line; @@ -926,7 +926,7 @@ _PyCode_InitOpcache(PyCodeObject *co) return -1; } - _Py_CODEUNIT *opcodes = (_Py_CODEUNIT*)PyBytes_AS_STRING(co->co_code); + const _Py_CODEUNIT *opcodes = (const _Py_CODEUNIT*)PyBytes_AS_STRING(co->co_code); Py_ssize_t opts = 0; for (Py_ssize_t i = 0; i < co_size;) { diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index 82f0b1afed444c..c316cafdc7ffc5 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -658,7 +658,7 @@ unicode_result_ready(PyObject *unicode) if (length == 1) { int kind = PyUnicode_KIND(unicode); if (kind == PyUnicode_1BYTE_KIND) { - Py_UCS1 *data = PyUnicode_1BYTE_DATA(unicode); + const Py_UCS1 *data = PyUnicode_1BYTE_DATA(unicode); Py_UCS1 ch = data[0]; struct _Py_unicode_state *state = get_unicode_state(); PyObject *latin1_char = state->latin1[ch]; diff --git a/Parser/pegen.c b/Parser/pegen.c index 82f840c605073b..19412446b118ab 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -7,7 +7,7 @@ #include "string_parser.h" PyObject * -_PyPegen_new_type_comment(Parser *p, char *s) +_PyPegen_new_type_comment(Parser *p, const char *s) { PyObject *res = PyUnicode_DecodeUTF8(s, strlen(s), NULL); if (res == NULL) { @@ -26,7 +26,7 @@ _PyPegen_add_type_comment_to_arg(Parser *p, arg_ty a, Token *tc) if (tc == NULL) { return a; } - char *bytes = PyBytes_AsString(tc->bytes); + const char *bytes = PyBytes_AsString(tc->bytes); if (bytes == NULL) { return NULL; } @@ -66,7 +66,7 @@ _PyPegen_check_barry_as_flufl(Parser *p, Token* t) { assert(t->bytes != NULL); assert(t->type == NOTEQUAL); - char* tok_str = PyBytes_AS_STRING(t->bytes); + const char* tok_str = PyBytes_AS_STRING(t->bytes); if (p->flags & PyPARSE_BARRY_AS_BDFL && strcmp(tok_str, "<>") != 0) { RAISE_SYNTAX_ERROR("with Barry as BDFL, use '<>' instead of '!='"); return -1; @@ -78,7 +78,7 @@ _PyPegen_check_barry_as_flufl(Parser *p, Token* t) { } PyObject * -_PyPegen_new_identifier(Parser *p, char *n) +_PyPegen_new_identifier(Parser *p, const char *n) { PyObject *id = PyUnicode_DecodeUTF8(n, strlen(n), NULL); if (!id) { @@ -911,7 +911,7 @@ _PyPegen_expect_soft_keyword(Parser *p, const char *keyword) if (t->type != NAME) { return NULL; } - char *s = PyBytes_AsString(t->bytes); + const char *s = PyBytes_AsString(t->bytes); if (!s) { p->error_indicator = 1; return NULL; @@ -942,7 +942,7 @@ _PyPegen_name_from_token(Parser *p, Token* t) if (t == NULL) { return NULL; } - char* s = PyBytes_AsString(t->bytes); + const char *s = PyBytes_AsString(t->bytes); if (!s) { p->error_indicator = 1; return NULL; @@ -1068,7 +1068,7 @@ _PyPegen_number_token(Parser *p) return NULL; } - char *num_raw = PyBytes_AsString(t->bytes); + const char *num_raw = PyBytes_AsString(t->bytes); if (num_raw == NULL) { p->error_indicator = 1; return NULL; diff --git a/Parser/pegen.h b/Parser/pegen.h index 1540da030e9efc..161a49816d6c03 100644 --- a/Parser/pegen.h +++ b/Parser/pegen.h @@ -202,7 +202,7 @@ CHECK_CALL_NULL_ALLOWED(Parser *p, void *result) #define CHECK(type, result) ((type) CHECK_CALL(p, result)) #define CHECK_NULL_ALLOWED(type, result) ((type) CHECK_CALL_NULL_ALLOWED(p, result)) -PyObject *_PyPegen_new_type_comment(Parser *, char *); +PyObject *_PyPegen_new_type_comment(Parser *, const char *); Py_LOCAL_INLINE(PyObject *) NEW_TYPE_COMMENT(Parser *p, Token *tc) @@ -210,7 +210,7 @@ NEW_TYPE_COMMENT(Parser *p, Token *tc) if (tc == NULL) { return NULL; } - char *bytes = PyBytes_AsString(tc->bytes); + const char *bytes = PyBytes_AsString(tc->bytes); if (bytes == NULL) { goto error; } @@ -242,7 +242,7 @@ INVALID_VERSION_CHECK(Parser *p, int version, char *msg, void *node) #define CHECK_VERSION(type, version, msg, node) ((type) INVALID_VERSION_CHECK(p, version, msg, node)) arg_ty _PyPegen_add_type_comment_to_arg(Parser *, arg_ty, Token *); -PyObject *_PyPegen_new_identifier(Parser *, char *); +PyObject *_PyPegen_new_identifier(Parser *, const char *); Parser *_PyPegen_Parser_New(struct tok_state *, int, int, int, int *, PyArena *); void _PyPegen_Parser_Free(Parser *); mod_ty _PyPegen_run_parser_from_file_pointer(FILE *, int, PyObject *, const char *, diff --git a/Parser/string_parser.c b/Parser/string_parser.c index fa41a360c3fb5b..66405b26f37e4c 100644 --- a/Parser/string_parser.c +++ b/Parser/string_parser.c @@ -87,7 +87,7 @@ decode_unicode_with_escapes(Parser *parser, const char *s, size_t len, Token *t) if (*s & 0x80) { PyObject *w; int kind; - void *data; + const void *data; Py_ssize_t w_len; Py_ssize_t i; w = decode_utf8(&s, end); @@ -288,17 +288,17 @@ fstring_find_expr_location(Token *parent, char *expr_str, int *p_lines, int *p_c *p_lines = 0; *p_cols = 0; if (parent && parent->bytes) { - char *parent_str = PyBytes_AsString(parent->bytes); + const char *parent_str = PyBytes_AsString(parent->bytes); if (!parent_str) { return false; } - char *substr = strstr(parent_str, expr_str); + const char *substr = strstr(parent_str, expr_str); if (substr) { // The following is needed, in order to correctly shift the column // offset, in the case that (disregarding any whitespace) a newline // immediately follows the opening curly brace of the fstring expression. bool newline_after_brace = 1; - char *start = substr + 1; + const char *start = substr + 1; while (start && *start != '}' && *start != '\n') { if (*start != ' ' && *start != '\t' && *start != '\f') { newline_after_brace = 0; @@ -318,7 +318,7 @@ fstring_find_expr_location(Token *parent, char *expr_str, int *p_lines, int *p_c } /* adjust the start based on the number of newlines encountered before the f-string expression */ - for (char* p = parent_str; p < substr; p++) { + for (const char *p = parent_str; p < substr; p++) { if (*p == '\n') { (*p_lines)++; } diff --git a/Python/specialize.c b/Python/specialize.c index 1801e6620f1e3c..d82122dfad6201 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -120,7 +120,7 @@ oparg_from_instruction_and_update_offset(int index, int opcode, int original_opa } static int -entries_needed(_Py_CODEUNIT *code, int len) +entries_needed(const _Py_CODEUNIT *code, int len) { int cache_offset = 0; int previous_opcode = -1; From feca673f1c3ae29dbf0822ffa1cf2c421d501b2b Mon Sep 17 00:00:00 2001 From: Tim Peters Date: Sat, 12 Jun 2021 11:29:56 -0500 Subject: [PATCH 11/64] bpo-44376 - reduce pow() overhead for small exponents (GH-26662) Greatly reduce pow() overhead for small exponents. --- .../2021-06-11-17-37-15.bpo-44376.zhM1UW.rst | 1 + Objects/longobject.c | 50 +++++++++++++++++-- 2 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-11-17-37-15.bpo-44376.zhM1UW.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-06-11-17-37-15.bpo-44376.zhM1UW.rst b/Misc/NEWS.d/next/Core and Builtins/2021-06-11-17-37-15.bpo-44376.zhM1UW.rst new file mode 100644 index 00000000000000..f854d56b3c8419 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-06-11-17-37-15.bpo-44376.zhM1UW.rst @@ -0,0 +1 @@ +Exact integer exponentiation (like ``i**2`` or ``pow(i, 2)``) with a small exponent is much faster, due to reducing overhead in such cases. \ No newline at end of file diff --git a/Objects/longobject.c b/Objects/longobject.c index e1c1191e648dae..5e29e9a7257093 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -4239,17 +4239,57 @@ long_pow(PyObject *v, PyObject *w, PyObject *x) REDUCE(result); \ } while(0) - if (Py_SIZE(b) <= FIVEARY_CUTOFF) { + i = Py_SIZE(b); + digit bi = i ? b->ob_digit[i-1] : 0; + digit bit; + if (i <= 1 && bi <= 3) { + /* aim for minimal overhead */ + if (bi >= 2) { + MULT(a, a, z); + if (bi == 3) { + MULT(z, a, z); + } + } + else if (bi == 1) { + /* Multiplying by 1 serves two purposes: if `a` is of an int + * subclass, makes the result an int (e.g., pow(False, 1) returns + * 0 instead of False), and potentially reduces `a` by the modulus. + */ + MULT(a, z, z); + } + /* else bi is 0, and z==1 is correct */ + } + else if (i <= FIVEARY_CUTOFF) { /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */ /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */ - for (i = Py_SIZE(b) - 1; i >= 0; --i) { - digit bi = b->ob_digit[i]; - for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) { + /* Find the first significant exponent bit. Search right to left + * because we're primarily trying to cut overhead for small powers. + */ + assert(bi); /* else there is no significant bit */ + Py_INCREF(a); + Py_DECREF(z); + z = a; + for (bit = 2; ; bit <<= 1) { + if (bit > bi) { /* found the first bit */ + assert((bi & bit) == 0); + bit >>= 1; + assert(bi & bit); + break; + } + } + for (--i, bit >>= 1;;) { + for (; bit != 0; bit >>= 1) { MULT(z, z, z); - if (bi & j) + if (bi & bit) { MULT(z, a, z); + } + } + if (--i < 0) { + break; } + bi = b->ob_digit[i]; + bit = (digit)1 << (PyLong_SHIFT-1); } } else { From b1e8a39f6f87d90927e9a2d700a4cef79df3585a Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Sat, 12 Jun 2021 18:53:49 +0100 Subject: [PATCH 12/64] bpo-44396: Update multi-line-start location when reallocating tokenizer buffers (GH-26676) Automerge-Triggered-By: GH:pablogsal --- Lib/test/test_eof.py | 7 +++++++ .../2021-06-11-18-17-42.bpo-44396.Z9EKim.rst | 2 ++ Parser/tokenizer.c | 5 +++++ 3 files changed, 14 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-11-18-17-42.bpo-44396.Z9EKim.rst diff --git a/Lib/test/test_eof.py b/Lib/test/test_eof.py index 2d3b4ae4e591ef..abcbf046e2cc22 100644 --- a/Lib/test/test_eof.py +++ b/Lib/test/test_eof.py @@ -29,6 +29,13 @@ def test_EOFS(self): else: raise support.TestFailed + def test_EOFS_with_file(self): + expect = ("(, line 1)") + with os_helper.temp_dir() as temp_dir: + file_name = script_helper.make_script(temp_dir, 'foo', """'''this is \na \ntest""") + rc, out, err = script_helper.assert_python_failure(file_name) + self.assertIn(b'unterminated triple-quoted string literal (detected at line 3)', err) + def test_eof_with_line_continuation(self): expect = "unexpected EOF while parsing (, line 1)" try: diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-06-11-18-17-42.bpo-44396.Z9EKim.rst b/Misc/NEWS.d/next/Core and Builtins/2021-06-11-18-17-42.bpo-44396.Z9EKim.rst new file mode 100644 index 00000000000000..be72a7111dc8ae --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-06-11-18-17-42.bpo-44396.Z9EKim.rst @@ -0,0 +1,2 @@ +Fix a possible crash in the tokenizer when raising syntax errors for +unclosed strings. Patch by Pablo Galindo. diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 6002f3e05a890c..be9b13ebabb8e3 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -372,6 +372,8 @@ tok_reserve_buf(struct tok_state *tok, Py_ssize_t size) if (newsize > tok->end - tok->buf) { char *newbuf = tok->buf; Py_ssize_t start = tok->start == NULL ? -1 : tok->start - tok->buf; + Py_ssize_t line_start = tok->start == NULL ? -1 : tok->line_start - tok->buf; + Py_ssize_t multi_line_start = tok->multi_line_start - tok->buf; newbuf = (char *)PyMem_Realloc(newbuf, newsize); if (newbuf == NULL) { tok->done = E_NOMEM; @@ -382,6 +384,8 @@ tok_reserve_buf(struct tok_state *tok, Py_ssize_t size) tok->inp = tok->buf + oldsize; tok->end = tok->buf + newsize; tok->start = start < 0 ? NULL : tok->buf + start; + tok->line_start = line_start < 0 ? NULL : tok->buf + line_start; + tok->multi_line_start = multi_line_start < 0 ? NULL : tok->buf + multi_line_start; } return 1; } @@ -1883,6 +1887,7 @@ tok_get(struct tok_state *tok, const char **p_start, const char **p_end) while (end_quote_size != quote_size) { c = tok_nextc(tok); if (c == EOF || (quote_size == 1 && c == '\n')) { + assert(tok->multi_line_start != NULL); // shift the tok_state's location into // the start of string, and report the error // from the initial quote character From 732ecabf22b17684c74103c9b921fabb3b7a4ee5 Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Sat, 12 Jun 2021 22:17:58 +0200 Subject: [PATCH 13/64] bpo-44389: Remove duplicate SSL_OP_NO_TLSv1_2 flag (GH-26680) --- Modules/_ssl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 8daf04dd08bbb4..1080fa6cffbd96 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3587,7 +3587,7 @@ set_options(PySSLContext *self, PyObject *arg, void *c) long new_opts, opts, set, clear; long opt_no = ( SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | - SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_2 + SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2 ); if (!PyArg_Parse(arg, "l", &new_opts)) From 2a93215bf306c7fa9d3f969d93f0e4da96d1f5df Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 13 Jun 2021 07:07:24 +0900 Subject: [PATCH 14/64] bpo-43425: Update test_c_parser not to use TempdirManager (GH-26693) --- Lib/test/test_peg_generator/test_c_parser.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_peg_generator/test_c_parser.py b/Lib/test/test_peg_generator/test_c_parser.py index 3852cfbc477b6b..013b3afd594392 100644 --- a/Lib/test/test_peg_generator/test_c_parser.py +++ b/Lib/test/test_peg_generator/test_c_parser.py @@ -1,7 +1,9 @@ import sysconfig import textwrap import unittest -from distutils.tests.support import TempdirManager +import os +import shutil +import tempfile from pathlib import Path from test import test_tools @@ -68,20 +70,21 @@ def test_parse(self): """ -class TestCParser(TempdirManager, unittest.TestCase): +class TestCParser(unittest.TestCase): def setUp(self): self._backup_config_vars = dict(sysconfig._CONFIG_VARS) cmd = support.missing_compiler_executable() if cmd is not None: self.skipTest("The %r command is not found" % cmd) - super(TestCParser, self).setUp() - self.tmp_path = self.mkdtemp() + self.old_cwd = os.getcwd() + self.tmp_path = tempfile.mkdtemp() change_cwd = os_helper.change_cwd(self.tmp_path) change_cwd.__enter__() self.addCleanup(change_cwd.__exit__, None, None, None) def tearDown(self): - super(TestCParser, self).tearDown() + os.chdir(self.old_cwd) + shutil.rmtree(self.tmp_path) sysconfig._CONFIG_VARS.clear() sysconfig._CONFIG_VARS.update(self._backup_config_vars) From 50aee6591e5927efe875b2789e00af6509ab36dc Mon Sep 17 00:00:00 2001 From: Binbin Date: Sun, 13 Jun 2021 10:47:44 +0800 Subject: [PATCH 15/64] Fix typos in multiple files (GH-26689) Co-authored-by: Terry Jan Reedy --- Lib/_aix_support.py | 2 +- Lib/ast.py | 2 +- Lib/asyncio/proactor_events.py | 2 +- Lib/contextlib.py | 2 +- Lib/dataclasses.py | 2 +- Lib/http/server.py | 2 +- Lib/idlelib/config.py | 2 +- Lib/idlelib/history.py | 2 +- Lib/importlib/_bootstrap_external.py | 2 +- Lib/multiprocessing/connection.py | 2 +- Lib/platform.py | 4 +- Lib/plistlib.py | 4 +- Lib/pstats.py | 2 +- Lib/socket.py | 2 +- Lib/ssl.py | 2 +- Lib/subprocess.py | 2 +- Lib/symtable.py | 4 +- Lib/test/test_descr.py | 2 +- Lib/turtle.py | 2 +- Lib/types.py | 2 +- Lib/unittest/mock.py | 2 +- Parser/tokenizer.c | 6 +- Python/importlib_external.h | 1984 +++++++++++++------------- configure.ac | 8 +- 24 files changed, 1023 insertions(+), 1023 deletions(-) diff --git a/Lib/_aix_support.py b/Lib/_aix_support.py index d27a1e8735de30..1d8482ff382507 100644 --- a/Lib/_aix_support.py +++ b/Lib/_aix_support.py @@ -47,7 +47,7 @@ def aix_platform(): # type: () -> str """ AIX filesets are identified by four decimal values: V.R.M.F. - V (version) and R (release) can be retreived using ``uname`` + V (version) and R (release) can be retrieved using ``uname`` Since 2007, starting with AIX 5.3 TL7, the M value has been included with the fileset bos.rte and represents the Technology Level (TL) of AIX. The F (Fix) value also increases, but is not diff --git a/Lib/ast.py b/Lib/ast.py index 64487d2f0a60e5..400d7c45146da8 100644 --- a/Lib/ast.py +++ b/Lib/ast.py @@ -1334,7 +1334,7 @@ def visit_UnaryOp(self, node): operator_precedence = self.unop_precedence[operator] with self.require_parens(operator_precedence, node): self.write(operator) - # factor prefixes (+, -, ~) shouldn't be seperated + # factor prefixes (+, -, ~) shouldn't be separated # from the value they belong, (e.g: +1 instead of + 1) if operator_precedence is not _Precedence.FACTOR: self.write(" ") diff --git a/Lib/asyncio/proactor_events.py b/Lib/asyncio/proactor_events.py index 45c11ee4b487ec..1d9e2fe2ca728e 100644 --- a/Lib/asyncio/proactor_events.py +++ b/Lib/asyncio/proactor_events.py @@ -221,7 +221,7 @@ def resume_reading(self): length = self._pending_data_length self._pending_data_length = -1 if length > -1: - # Call the protocol methode after calling _loop_reading(), + # Call the protocol method after calling _loop_reading(), # since the protocol can decide to pause reading again. self._loop.call_soon(self._data_received, self._data[:length], length) diff --git a/Lib/contextlib.py b/Lib/contextlib.py index eb5946145b47ee..1a8ef6122c8d47 100644 --- a/Lib/contextlib.py +++ b/Lib/contextlib.py @@ -224,7 +224,7 @@ async def __aexit__(self, typ, value, traceback): # was passed to throw() and later wrapped into a RuntimeError # (see PEP 479 for sync generators; async generators also # have this behavior). But do this only if the exception wrapped - # by the RuntimeError is actully Stop(Async)Iteration (see + # by the RuntimeError is actually Stop(Async)Iteration (see # issue29692). if isinstance(value, (StopIteration, StopAsyncIteration)): if exc.__cause__ is value: diff --git a/Lib/dataclasses.py b/Lib/dataclasses.py index 79739976d3d29b..95ff39287bed61 100644 --- a/Lib/dataclasses.py +++ b/Lib/dataclasses.py @@ -1100,7 +1100,7 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen, # _dataclass_getstate and _dataclass_setstate are needed for pickling frozen -# classes with slots. These could be slighly more performant if we generated +# classes with slots. These could be slightly more performant if we generated # the code instead of iterating over fields. But that can be a project for # another day, if performance becomes an issue. def _dataclass_getstate(self): diff --git a/Lib/http/server.py b/Lib/http/server.py index e985dfd5640086..4f9b8a16d45fe7 100644 --- a/Lib/http/server.py +++ b/Lib/http/server.py @@ -704,7 +704,7 @@ def send_head(self): # The test for this was added in test_httpserver.py # However, some OS platforms accept a trailingSlash as a filename # See discussion on python-dev and Issue34711 regarding - # parseing and rejection of filenames with a trailing slash + # parsing and rejection of filenames with a trailing slash if path.endswith("/"): self.send_error(HTTPStatus.NOT_FOUND, "File not found") return None diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py index 04444a3bf20b30..5ce5f4a4f7bd0d 100644 --- a/Lib/idlelib/config.py +++ b/Lib/idlelib/config.py @@ -16,7 +16,7 @@ default values. For 'highlight' and 'keys', user sections augment the default sections (and must, therefore, have distinct names). -Throughout this module there is an emphasis on returning useable defaults +Throughout this module there is an emphasis on returning usable defaults when a problem occurs in returning a requested configuration value back to idle. This is to allow IDLE to continue to function in spite of errors in the retrieval of config information. When a default is returned instead of diff --git a/Lib/idlelib/history.py b/Lib/idlelib/history.py index 7ce09253eff5c9..100f505256a940 100644 --- a/Lib/idlelib/history.py +++ b/Lib/idlelib/history.py @@ -29,7 +29,7 @@ def __init__(self, text): text.bind("<>", self.history_next) def history_next(self, event): - "Fetch later statement; start with ealiest if cyclic." + "Fetch later statement; start with earliest if cyclic." self.fetch(reverse=False) return "break" diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 009b45f00d8cf6..3cbbb80219cfcd 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1178,7 +1178,7 @@ def __hash__(self): return hash(self.name) ^ hash(self.path) def create_module(self, spec): - """Create an unitialized extension module""" + """Create an uninitialized extension module""" module = _bootstrap._call_with_frames_removed( _imp.create_dynamic, spec) _bootstrap._verbose_message('extension module {!r} loaded from {!r}', diff --git a/Lib/multiprocessing/connection.py b/Lib/multiprocessing/connection.py index 510e4b5aba44a6..1cca66d5661e34 100644 --- a/Lib/multiprocessing/connection.py +++ b/Lib/multiprocessing/connection.py @@ -943,7 +943,7 @@ def wait(object_list, timeout=None): return ready # -# Make connection and socket objects sharable if possible +# Make connection and socket objects shareable if possible # if sys.platform == 'win32': diff --git a/Lib/platform.py b/Lib/platform.py index d298a42edc8483..02152f6fc9bf86 100755 --- a/Lib/platform.py +++ b/Lib/platform.py @@ -5,7 +5,7 @@ If called from the command line, it prints the platform information concatenated as single string to stdout. The output - format is useable as part of a filename. + format is usable as part of a filename. """ # This module is maintained by Marc-Andre Lemburg . @@ -169,7 +169,7 @@ def libc_ver(executable=None, lib='', version='', chunksize=16384): Note that the function has intimate knowledge of how different libc versions add symbols to the executable and thus is probably - only useable for executables compiled using gcc. + only usable for executables compiled using gcc. The file is read and scanned in chunks of chunksize bytes. diff --git a/Lib/plistlib.py b/Lib/plistlib.py index 5772efdfe6710a..3ab71edc320af2 100644 --- a/Lib/plistlib.py +++ b/Lib/plistlib.py @@ -177,8 +177,8 @@ def parse(self, fileobj): return self.root def handle_entity_decl(self, entity_name, is_parameter_entity, value, base, system_id, public_id, notation_name): - # Reject plist files with entity declarations to avoid XML vulnerabilies in expat. - # Regular plist files don't contain those declerations, and Apple's plutil tool does not + # Reject plist files with entity declarations to avoid XML vulnerabilities in expat. + # Regular plist files don't contain those declarations, and Apple's plutil tool does not # accept them either. raise InvalidFileException("XML entity declarations are not supported in plist files") diff --git a/Lib/pstats.py b/Lib/pstats.py index e77459d38b33ec..8e0743f2e5f29d 100644 --- a/Lib/pstats.py +++ b/Lib/pstats.py @@ -522,7 +522,7 @@ def print_line(self, func): # hack: should print percentages class TupleComp: """This class provides a generic function for comparing any two tuples. Each instance records a list of tuple-indices (from most significant - to least significant), and sort direction (ascending or decending) for + to least significant), and sort direction (ascending or descending) for each tuple-index. The compare functions can then be used as the function argument to the system sort() function when a list of tuples need to be sorted in the instances order.""" diff --git a/Lib/socket.py b/Lib/socket.py index fc11eb783c3dd1..a64ae400ce9883 100755 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -13,7 +13,7 @@ socketpair() -- create a pair of new socket objects [*] fromfd() -- create a socket object from an open file descriptor [*] send_fds() -- Send file descriptor to the socket. -recv_fds() -- Recieve file descriptors from the socket. +recv_fds() -- Receive file descriptors from the socket. fromshare() -- create a socket object from data received from socket.share() [*] gethostname() -- return the current hostname gethostbyname() -- map a hostname to its IP number diff --git a/Lib/ssl.py b/Lib/ssl.py index e667e9658d5110..207925166efa35 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -368,7 +368,7 @@ def _ipaddress_match(cert_ipaddress, host_ip): (section 1.7.2 - "Out of Scope"). """ # OpenSSL may add a trailing newline to a subjectAltName's IP address, - # commonly woth IPv6 addresses. Strip off trailing \n. + # commonly with IPv6 addresses. Strip off trailing \n. ip = _inet_paton(cert_ipaddress.rstrip()) return ip == host_ip diff --git a/Lib/subprocess.py b/Lib/subprocess.py index 8203aded7d5529..7a9ab5a4ed0ece 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -2086,7 +2086,7 @@ def send_signal(self, sig): try: os.kill(self.pid, sig) except ProcessLookupError: - # Supress the race condition error; bpo-40550. + # Suppress the race condition error; bpo-40550. pass def terminate(self): diff --git a/Lib/symtable.py b/Lib/symtable.py index 98db1e2557d37f..922854bf669b3c 100644 --- a/Lib/symtable.py +++ b/Lib/symtable.py @@ -62,7 +62,7 @@ def __repr__(self): def get_type(self): """Return the type of the symbol table. - The values retuned are 'class', 'module' and + The values returned are 'class', 'module' and 'function'. """ if self._table.type == _symtable.TYPE_MODULE: @@ -245,7 +245,7 @@ def is_parameter(self): return bool(self.__flags & DEF_PARAM) def is_global(self): - """Return *True* if the sysmbol is global. + """Return *True* if the symbol is global. """ return bool(self.__scope in (GLOBAL_IMPLICIT, GLOBAL_EXPLICIT) or (self.__module_scope and self.__flags & DEF_BOUND)) diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index 3cb923ed0520a3..0ff4d022586e18 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -5696,7 +5696,7 @@ class C(A): def test_incomplete_extend(self): """ - Extending an unitialized type with type->tp_mro == NULL must + Extending an uninitialized type with type->tp_mro == NULL must throw a reasonable TypeError exception, instead of failing with PyErr_BadInternalCall. """ diff --git a/Lib/turtle.py b/Lib/turtle.py index 7d94720f8131d6..95d55e9e1c8042 100644 --- a/Lib/turtle.py +++ b/Lib/turtle.py @@ -3826,7 +3826,7 @@ def write_docstringdict(filename="turtle_docstringdict"): default value is turtle_docstringdict Has to be called explicitly, (not used by the turtle-graphics classes) - The docstring dictionary will be written to the Python script .py + The docstring dictionary will be written to the Python script .py It is intended to serve as a template for translation of the docstrings into different languages. """ diff --git a/Lib/types.py b/Lib/types.py index c509b242d5d8f3..c665e6f8615ff8 100644 --- a/Lib/types.py +++ b/Lib/types.py @@ -158,7 +158,7 @@ class DynamicClassAttribute: attributes on the class with the same name. (Enum used this between Python versions 3.4 - 3.9 .) - Subclass from this to use a different method of accessing virtual atributes + Subclass from this to use a different method of accessing virtual attributes and still be treated properly by the inspect module. (Enum uses this since Python 3.10 .) diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py index c6067151de14fe..a4e571a80508eb 100644 --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -2205,7 +2205,7 @@ async def _execute_mock_call(self, /, *args, **kwargs): try: result = next(effect) except StopIteration: - # It is impossible to propogate a StopIteration + # It is impossible to propagate a StopIteration # through coroutines because of PEP 479 raise StopAsyncIteration if _is_exception(result): diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index be9b13ebabb8e3..ba9366402babd3 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1187,12 +1187,12 @@ static int verify_end_of_number(struct tok_state *tok, int c, const char *kind) { /* Emit a deprecation warning only if the numeric literal is immediately - * followed by one of keywords which can occurr after a numeric literal + * followed by one of keywords which can occur after a numeric literal * in valid code: "and", "else", "for", "if", "in", "is" and "or". * It allows to gradually deprecate existing valid code without adding * warning before error in most cases of invalid numeric literal (which - * would be confusiong and break existing tests). - * Raise a syntax error with slighly better message than plain + * would be confusing and break existing tests). + * Raise a syntax error with slightly better message than plain * "invalid syntax" if the numeric literal is immediately followed by * other keyword or identifier. */ diff --git a/Python/importlib_external.h b/Python/importlib_external.h index f8642890580d7b..778cca1718bf84 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1768,1002 +1768,1002 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,116, 2,106,3,124,1,161,2,125,2,116,0,160,4,100,1,124, 1,106,5,124,0,106,6,161,3,1,0,124,2,83,0,41, - 3,122,38,67,114,101,97,116,101,32,97,110,32,117,110,105, - 116,105,97,108,105,122,101,100,32,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,122,38,101,120,116,101,110, - 115,105,111,110,32,109,111,100,117,108,101,32,123,33,114,125, - 32,108,111,97,100,101,100,32,102,114,111,109,32,123,33,114, - 125,78,41,7,114,158,0,0,0,114,241,0,0,0,114,186, - 0,0,0,90,14,99,114,101,97,116,101,95,100,121,110,97, - 109,105,99,114,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,32,32,32,114,7,0,0,0,114,238,0,0,0, - 156,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, + 3,122,40,67,114,101,97,116,101,32,97,110,32,117,110,105, + 110,105,116,105,97,108,105,122,101,100,32,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,122,38,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, + 114,125,32,108,111,97,100,101,100,32,102,114,111,109,32,123, + 33,114,125,78,41,7,114,158,0,0,0,114,241,0,0,0, + 114,186,0,0,0,90,14,99,114,101,97,116,101,95,100,121, + 110,97,109,105,99,114,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,32,32,32,114,7,0,0,0,114,238,0, + 0,0,156,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,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,116, + 2,106,3,124,1,161,2,1,0,116,0,160,4,100,1,124, + 0,106,5,124,0,106,6,161,3,1,0,100,2,83,0,41, + 3,122,30,73,110,105,116,105,97,108,105,122,101,32,97,110, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,122,40,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,32,123,33,114,125,32,101,120,101,99,117,116,101, + 100,32,102,114,111,109,32,123,33,114,125,78,41,7,114,158, + 0,0,0,114,241,0,0,0,114,186,0,0,0,90,12,101, + 120,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,32,32,114,7,0,0,0,114,244,0, + 0,0,164,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,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,3,0,0,0,115,38, + 0,0,0,135,2,116,0,124,0,106,1,131,1,100,1,25, + 0,138,2,116,2,136,2,102,1,100,2,100,3,132,8,116, + 3,68,0,131,1,131,1,83,0,41,5,122,49,82,101,116, + 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,3, + 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,51,0,0,0,115,28,0,0,0,129,0,124, + 0,93,9,125,1,137,2,100,0,124,1,23,0,107,2,86, + 0,1,0,113,2,100,1,83,0,41,2,114,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, + 32,32,128,114,7,0,0,0,114,8,0,0,0,173,4,0, + 0,115,6,0,0,0,6,128,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,99,97,108,115,62,46,60,103,101,110,101, + 120,112,114,62,78,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,32,32,64,114, + 7,0,0,0,114,205,0,0,0,170,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, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,67,0,0,0,114,24,0,0,0,41,2,122,63,82, + 101,116,117,114,110,32,78,111,110,101,32,97,115,32,97,110, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,99,97,110,110,111,116,32,99,114,101,97,116,101,32, + 97,32,99,111,100,101,32,111,98,106,101,99,116,46,78,114, + 12,0,0,0,114,246,0,0,0,32,32,114,7,0,0,0, + 114,240,0,0,0,176,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,0,0,0,1,0, + 0,0,67,0,0,0,114,24,0,0,0,41,2,122,53,82, + 101,116,117,114,110,32,78,111,110,101,32,97,115,32,101,120, + 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,32, + 104,97,118,101,32,110,111,32,115,111,117,114,99,101,32,99, + 111,100,101,46,78,114,12,0,0,0,114,246,0,0,0,32, + 32,114,7,0,0,0,114,0,1,0,0,180,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,67,0,0,0,114,24, + 1,0,0,114,25,1,0,0,114,74,0,0,0,114,246,0, + 0,0,32,32,114,7,0,0,0,114,202,0,0,0,184,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,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,5,0,0,0, - 67,0,0,0,115,36,0,0,0,116,0,160,1,116,2,106, - 3,124,1,161,2,1,0,116,0,160,4,100,1,124,0,106, - 5,124,0,106,6,161,3,1,0,100,2,83,0,41,3,122, - 30,73,110,105,116,105,97,108,105,122,101,32,97,110,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,122, - 40,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,32,123,33,114,125,32,101,120,101,99,117,116,101,100,32, - 102,114,111,109,32,123,33,114,125,78,41,7,114,158,0,0, - 0,114,241,0,0,0,114,186,0,0,0,90,12,101,120,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,32,32,114,7,0,0,0,114,244,0,0,0, - 164,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,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,115,38,0,0, - 0,135,2,116,0,124,0,106,1,131,1,100,1,25,0,138, - 2,116,2,136,2,102,1,100,2,100,3,132,8,116,3,68, - 0,131,1,131,1,83,0,41,5,122,49,82,101,116,117,114, - 110,32,84,114,117,101,32,105,102,32,116,104,101,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,32,105, - 115,32,97,32,112,97,99,107,97,103,101,46,114,3,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,51,0,0,0,115,28,0,0,0,129,0,124,0,93, - 9,125,1,137,2,100,0,124,1,23,0,107,2,86,0,1, - 0,113,2,100,1,83,0,41,2,114,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,32,32, - 128,114,7,0,0,0,114,8,0,0,0,173,4,0,0,115, - 6,0,0,0,6,128,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,99,97,108,115,62,46,60,103,101,110,101,120,112, - 114,62,78,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,32,32,64,114,7,0, - 0,0,114,205,0,0,0,170,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,101,99, - 2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, - 67,0,0,0,114,24,0,0,0,41,2,122,63,82,101,116, - 117,114,110,32,78,111,110,101,32,97,115,32,97,110,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,32, - 99,97,110,110,111,116,32,99,114,101,97,116,101,32,97,32, - 99,111,100,101,32,111,98,106,101,99,116,46,78,114,12,0, - 0,0,114,246,0,0,0,32,32,114,7,0,0,0,114,240, - 0,0,0,176,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,0,0,0,1,0,0,0, - 67,0,0,0,114,24,0,0,0,41,2,122,53,82,101,116, - 117,114,110,32,78,111,110,101,32,97,115,32,101,120,116,101, - 110,115,105,111,110,32,109,111,100,117,108,101,115,32,104,97, - 118,101,32,110,111,32,115,111,117,114,99,101,32,99,111,100, - 101,46,78,114,12,0,0,0,114,246,0,0,0,32,32,114, - 7,0,0,0,114,0,1,0,0,180,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,67,0,0,0,114,24,1,0, - 0,114,25,1,0,0,114,74,0,0,0,114,246,0,0,0, - 32,32,114,7,0,0,0,114,202,0,0,0,184,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,114, - 149,0,0,0,114,148,0,0,0,114,150,0,0,0,114,151, - 0,0,0,114,235,0,0,0,114,15,1,0,0,114,21,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,7,0,0,0,114, - 28,1,0,0,137,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,0,0,2,0,0,0, - 64,0,0,0,115,104,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, - 5,132,0,90,5,100,6,100,7,132,0,90,6,100,8,100, - 9,132,0,90,7,100,10,100,11,132,0,90,8,100,12,100, - 13,132,0,90,9,100,14,100,15,132,0,90,10,100,16,100, - 17,132,0,90,11,100,18,100,19,132,0,90,12,100,20,100, - 21,132,0,90,13,100,22,100,23,132,0,90,14,100,24,83, - 0,41,25,218,14,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,97,38,1,0,0,82,101,112,114,101,115,101,110, - 116,115,32,97,32,110,97,109,101,115,112,97,99,101,32,112, - 97,99,107,97,103,101,39,115,32,112,97,116,104,46,32,32, - 73,116,32,117,115,101,115,32,116,104,101,32,109,111,100,117, - 108,101,32,110,97,109,101,10,32,32,32,32,116,111,32,102, - 105,110,100,32,105,116,115,32,112,97,114,101,110,116,32,109, - 111,100,117,108,101,44,32,97,110,100,32,102,114,111,109,32, - 116,104,101,114,101,32,105,116,32,108,111,111,107,115,32,117, - 112,32,116,104,101,32,112,97,114,101,110,116,39,115,10,32, - 32,32,32,95,95,112,97,116,104,95,95,46,32,32,87,104, - 101,110,32,116,104,105,115,32,99,104,97,110,103,101,115,44, - 32,116,104,101,32,109,111,100,117,108,101,39,115,32,111,119, - 110,32,112,97,116,104,32,105,115,32,114,101,99,111,109,112, - 117,116,101,100,44,10,32,32,32,32,117,115,105,110,103,32, - 112,97,116,104,95,102,105,110,100,101,114,46,32,32,70,111, - 114,32,116,111,112,45,108,101,118,101,108,32,109,111,100,117, - 108,101,115,44,32,116,104,101,32,112,97,114,101,110,116,32, - 109,111,100,117,108,101,39,115,32,112,97,116,104,10,32,32, - 32,32,105,115,32,115,121,115,46,112,97,116,104,46,99,4, - 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,67, - 0,0,0,115,36,0,0,0,124,1,124,0,95,0,124,2, - 124,0,95,1,116,2,124,0,160,3,161,0,131,1,124,0, - 95,4,124,3,124,0,95,5,100,0,83,0,114,69,0,0, - 0,41,6,218,5,95,110,97,109,101,218,5,95,112,97,116, - 104,114,136,0,0,0,218,16,95,103,101,116,95,112,97,114, - 101,110,116,95,112,97,116,104,218,17,95,108,97,115,116,95, - 112,97,114,101,110,116,95,112,97,116,104,218,12,95,112,97, - 116,104,95,102,105,110,100,101,114,169,4,114,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,32,32,32,32,114,7,0,0,0, - 114,235,0,0,0,197,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,67,0,0,0,115,38,0,0,0,124,0, - 106,0,160,1,100,1,161,1,92,3,125,1,125,2,125,3, - 124,2,100,2,107,2,114,15,100,3,83,0,124,1,100,4, - 102,2,83,0,41,6,122,62,82,101,116,117,114,110,115,32, - 97,32,116,117,112,108,101,32,111,102,32,40,112,97,114,101, - 110,116,45,109,111,100,117,108,101,45,110,97,109,101,44,32, - 112,97,114,101,110,116,45,112,97,116,104,45,97,116,116,114, - 45,110,97,109,101,41,114,97,0,0,0,114,10,0,0,0, - 41,2,114,16,0,0,0,114,65,0,0,0,90,8,95,95, - 112,97,116,104,95,95,78,41,2,114,45,1,0,0,114,104, - 0,0,0,41,4,114,143,0,0,0,114,38,1,0,0,218, - 3,100,111,116,90,2,109,101,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,203,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, - 116,104,95,110,97,109,101,115,99,1,0,0,0,0,0,0, - 0,0,0,0,0,3,0,0,0,67,0,0,0,115,28,0, - 0,0,124,0,160,0,161,0,92,2,125,1,125,2,116,1, - 116,2,106,3,124,1,25,0,124,2,131,2,83,0,114,69, - 0,0,0,41,4,114,52,1,0,0,114,154,0,0,0,114, - 16,0,0,0,218,7,109,111,100,117,108,101,115,41,3,114, - 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,32,32,32,114,7,0,0,0, - 114,47,1,0,0,213,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,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,67,0,0,0,115,80,0, - 0,0,116,0,124,0,160,1,161,0,131,1,125,1,124,1, - 124,0,106,2,107,3,114,37,124,0,160,3,124,0,106,4, - 124,1,161,2,125,2,124,2,100,0,117,1,114,34,124,2, - 106,5,100,0,117,0,114,34,124,2,106,6,114,34,124,2, - 106,6,124,0,95,7,124,1,124,0,95,2,124,0,106,7, - 83,0,114,69,0,0,0,41,8,114,136,0,0,0,114,47, - 1,0,0,114,48,1,0,0,114,49,1,0,0,114,45,1, - 0,0,114,163,0,0,0,114,201,0,0,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,32,32,32,114,7,0, - 0,0,218,12,95,114,101,99,97,108,99,117,108,97,116,101, - 217,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,117,108,97,116,101,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,67,0,0,0, - 243,12,0,0,0,116,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,32,114,7,0,0,0,218,8, - 95,95,105,116,101,114,95,95,230,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,0,67,0,0,0,115,12,0,0,0,124,0,160,0,161, - 0,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,32,32,114,7,0,0,0,218,11,95,95,103,101,116,105, - 116,101,109,95,95,233,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,3,0,0,0, - 67,0,0,0,115,14,0,0,0,124,2,124,0,106,0,124, - 1,60,0,100,0,83,0,114,69,0,0,0,41,1,114,46, - 1,0,0,41,3,114,143,0,0,0,114,60,1,0,0,114, - 65,0,0,0,32,32,32,114,7,0,0,0,218,11,95,95, - 115,101,116,105,116,101,109,95,95,236,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,67,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,32,114,7,0,0,0,218,7,95,95,108, - 101,110,95,95,239,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,67,0,0,0,243, - 12,0,0,0,100,1,160,0,124,0,106,1,161,1,83,0, - 41,2,78,122,20,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,40,123,33,114,125,41,41,2,114,89,0,0,0, - 114,46,1,0,0,114,20,1,0,0,32,114,7,0,0,0, - 218,8,95,95,114,101,112,114,95,95,242,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,0,3,0, - 0,0,67,0,0,0,115,12,0,0,0,124,1,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,32,32, - 114,7,0,0,0,218,12,95,95,99,111,110,116,97,105,110, - 115,95,95,245,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,0,0,0,3,0,0,0,67, - 0,0,0,115,16,0,0,0,124,0,106,0,160,1,124,1, - 161,1,1,0,100,0,83,0,114,69,0,0,0,41,2,114, - 46,1,0,0,114,61,0,0,0,114,66,1,0,0,32,32, - 114,7,0,0,0,114,61,0,0,0,248,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,114,151,0,0,0,114,235,0,0,0,114,52,1, - 0,0,114,47,1,0,0,114,54,1,0,0,114,57,1,0, - 0,114,61,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,7,0,0,0,114,44,1,0,0,190,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,64,0,0,0, - 115,88,0,0,0,101,0,90,1,100,0,90,2,100,1,100, - 2,132,0,90,3,101,4,100,3,100,4,132,0,131,1,90, - 5,100,5,100,6,132,0,90,6,100,7,100,8,132,0,90, - 7,100,9,100,10,132,0,90,8,100,11,100,12,132,0,90, - 9,100,13,100,14,132,0,90,10,100,15,100,16,132,0,90, - 11,100,17,100,18,132,0,90,12,100,19,83,0,41,20,218, - 16,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, - 114,99,4,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,67,0,0,0,115,18,0,0,0,116,0,124,1,124, - 2,124,3,131,3,124,0,95,1,100,0,83,0,114,69,0, - 0,0,41,2,114,44,1,0,0,114,46,1,0,0,114,50, - 1,0,0,32,32,32,32,114,7,0,0,0,114,235,0,0, - 0,254,4,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,67,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,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,101,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,84,104,101,32,105,109,112,111,114,116,32,109,97,99, - 104,105,110,101,114,121,32,100,111,101,115,32,116,104,101,32, - 106,111,98,32,105,116,115,101,108,102,46,10,10,32,32,32, - 32,32,32,32,32,122,82,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,40,41,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, - 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, - 116,104,111,110,32,51,46,49,50,122,25,60,109,111,100,117, - 108,101,32,123,33,114,125,32,40,110,97,109,101,115,112,97, - 99,101,41,62,78,41,5,114,99,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,32,114,7,0,0,0,218,11,109, - 111,100,117,108,101,95,114,101,112,114,1,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,67, - 0,0,0,114,24,0,0,0,41,2,78,84,114,12,0,0, - 0,114,246,0,0,0,32,32,114,7,0,0,0,114,205,0, - 0,0,12,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, - 67,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,32,32,114,7,0, - 0,0,114,0,1,0,0,15,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,0,0,0,0,0,6, - 0,0,0,67,0,0,0,115,16,0,0,0,116,0,100,1, - 100,2,100,3,100,4,100,5,141,4,83,0,41,6,78,114, - 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,32,32,114,7,0,0,0,114,240, - 0,0,0,18,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,67,0,0, - 0,114,24,0,0,0,114,236,0,0,0,114,12,0,0,0, - 114,237,0,0,0,32,32,114,7,0,0,0,114,238,0,0, - 0,21,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, - 67,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,32,32,114,7, - 0,0,0,114,244,0,0,0,24,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,0,0,0,0,0, - 0,4,0,0,0,67,0,0,0,115,26,0,0,0,116,0, - 160,1,100,1,124,0,106,2,161,2,1,0,116,0,160,3, - 124,0,124,1,161,2,83,0,41,3,122,98,76,111,97,100, - 32,97,32,110,97,109,101,115,112,97,99,101,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, - 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,38, - 110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101, - 32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,116, - 104,32,123,33,114,125,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,32,32,114,7,0,0,0,114,247,0,0,0,27,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,0,0,0,0,0,0,0,0,0,2, - 0,0,0,67,0,0,0,115,22,0,0,0,100,1,100,2, - 108,0,109,1,125,2,1,0,124,2,124,0,106,2,131,1, - 83,0,41,3,78,114,0,0,0,0,41,1,218,15,78,97, - 109,101,115,112,97,99,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,32, - 32,32,114,7,0,0,0,114,31,1,0,0,39,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,100,101,114,78,41,13,114,149,0,0,0,114,148,0,0, - 0,114,150,0,0,0,114,235,0,0,0,114,232,0,0,0, - 114,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,7,0, - 0,0,114,70,1,0,0,253,4,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,0,4,0,0, - 0,64,0,0,0,115,118,0,0,0,101,0,90,1,100,0, - 90,2,100,1,90,3,101,4,100,2,100,3,132,0,131,1, - 90,5,101,4,100,4,100,5,132,0,131,1,90,6,101,7, - 100,6,100,7,132,0,131,1,90,8,101,7,100,8,100,9, - 132,0,131,1,90,9,101,7,100,19,100,11,100,12,132,1, - 131,1,90,10,101,7,100,20,100,13,100,14,132,1,131,1, - 90,11,101,7,100,19,100,15,100,16,132,1,131,1,90,12, - 101,4,100,17,100,18,132,0,131,1,90,13,100,10,83,0, - 41,21,218,10,80,97,116,104,70,105,110,100,101,114,122,62, - 77,101,116,97,32,112,97,116,104,32,102,105,110,100,101,114, - 32,102,111,114,32,115,121,115,46,112,97,116,104,32,97,110, - 100,32,112,97,99,107,97,103,101,32,95,95,112,97,116,104, - 95,95,32,97,116,116,114,105,98,117,116,101,115,46,99,0, + 114,46,103,101,116,95,102,105,108,101,110,97,109,101,78,41, + 14,114,149,0,0,0,114,148,0,0,0,114,150,0,0,0, + 114,151,0,0,0,114,235,0,0,0,114,15,1,0,0,114, + 21,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,7,0,0, + 0,114,28,1,0,0,137,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,0,0,2,0, + 0,0,64,0,0,0,115,104,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,100, + 8,100,9,132,0,90,7,100,10,100,11,132,0,90,8,100, + 12,100,13,132,0,90,9,100,14,100,15,132,0,90,10,100, + 16,100,17,132,0,90,11,100,18,100,19,132,0,90,12,100, + 20,100,21,132,0,90,13,100,22,100,23,132,0,90,14,100, + 24,83,0,41,25,218,14,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,97,38,1,0,0,82,101,112,114,101,115, + 101,110,116,115,32,97,32,110,97,109,101,115,112,97,99,101, + 32,112,97,99,107,97,103,101,39,115,32,112,97,116,104,46, + 32,32,73,116,32,117,115,101,115,32,116,104,101,32,109,111, + 100,117,108,101,32,110,97,109,101,10,32,32,32,32,116,111, + 32,102,105,110,100,32,105,116,115,32,112,97,114,101,110,116, + 32,109,111,100,117,108,101,44,32,97,110,100,32,102,114,111, + 109,32,116,104,101,114,101,32,105,116,32,108,111,111,107,115, + 32,117,112,32,116,104,101,32,112,97,114,101,110,116,39,115, + 10,32,32,32,32,95,95,112,97,116,104,95,95,46,32,32, + 87,104,101,110,32,116,104,105,115,32,99,104,97,110,103,101, + 115,44,32,116,104,101,32,109,111,100,117,108,101,39,115,32, + 111,119,110,32,112,97,116,104,32,105,115,32,114,101,99,111, + 109,112,117,116,101,100,44,10,32,32,32,32,117,115,105,110, + 103,32,112,97,116,104,95,102,105,110,100,101,114,46,32,32, + 70,111,114,32,116,111,112,45,108,101,118,101,108,32,109,111, + 100,117,108,101,115,44,32,116,104,101,32,112,97,114,101,110, + 116,32,109,111,100,117,108,101,39,115,32,112,97,116,104,10, + 32,32,32,32,105,115,32,115,121,115,46,112,97,116,104,46, + 99,4,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,67,0,0,0,115,36,0,0,0,124,1,124,0,95,0, + 124,2,124,0,95,1,116,2,124,0,160,3,161,0,131,1, + 124,0,95,4,124,3,124,0,95,5,100,0,83,0,114,69, + 0,0,0,41,6,218,5,95,110,97,109,101,218,5,95,112, + 97,116,104,114,136,0,0,0,218,16,95,103,101,116,95,112, + 97,114,101,110,116,95,112,97,116,104,218,17,95,108,97,115, + 116,95,112,97,114,101,110,116,95,112,97,116,104,218,12,95, + 112,97,116,104,95,102,105,110,100,101,114,169,4,114,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,32,32,32,32,114,7,0, + 0,0,114,235,0,0,0,197,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,67,0,0,0,115,38,0,0,0, + 124,0,106,0,160,1,100,1,161,1,92,3,125,1,125,2, + 125,3,124,2,100,2,107,2,114,15,100,3,83,0,124,1, + 100,4,102,2,83,0,41,6,122,62,82,101,116,117,114,110, + 115,32,97,32,116,117,112,108,101,32,111,102,32,40,112,97, + 114,101,110,116,45,109,111,100,117,108,101,45,110,97,109,101, + 44,32,112,97,114,101,110,116,45,112,97,116,104,45,97,116, + 116,114,45,110,97,109,101,41,114,97,0,0,0,114,10,0, + 0,0,41,2,114,16,0,0,0,114,65,0,0,0,90,8, + 95,95,112,97,116,104,95,95,78,41,2,114,45,1,0,0, + 114,104,0,0,0,41,4,114,143,0,0,0,114,38,1,0, + 0,218,3,100,111,116,90,2,109,101,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,203,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,116,104,95,110,97,109,101,115,99,1,0,0,0,0, + 0,0,0,0,0,0,0,3,0,0,0,67,0,0,0,115, + 28,0,0,0,124,0,160,0,161,0,92,2,125,1,125,2, + 116,1,116,2,106,3,124,1,25,0,124,2,131,2,83,0, + 114,69,0,0,0,41,4,114,52,1,0,0,114,154,0,0, + 0,114,16,0,0,0,218,7,109,111,100,117,108,101,115,41, + 3,114,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,32,32,32,114,7,0, + 0,0,114,47,1,0,0,213,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,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,67,0,0,0,115, + 80,0,0,0,116,0,124,0,160,1,161,0,131,1,125,1, + 124,1,124,0,106,2,107,3,114,37,124,0,160,3,124,0, + 106,4,124,1,161,2,125,2,124,2,100,0,117,1,114,34, + 124,2,106,5,100,0,117,0,114,34,124,2,106,6,114,34, + 124,2,106,6,124,0,95,7,124,1,124,0,95,2,124,0, + 106,7,83,0,114,69,0,0,0,41,8,114,136,0,0,0, + 114,47,1,0,0,114,48,1,0,0,114,49,1,0,0,114, + 45,1,0,0,114,163,0,0,0,114,201,0,0,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,32,32,32,114, + 7,0,0,0,218,12,95,114,101,99,97,108,99,117,108,97, + 116,101,217,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,117,108,97,116,101,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,67,0, + 0,0,243,12,0,0,0,116,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,32,114,7,0,0,0, + 218,8,95,95,105,116,101,114,95,95,230,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,0,67,0,0,0,115,12,0,0,0,124,0,160, + 0,161,0,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,32,32,114,7,0,0,0,218,11,95,95,103,101, + 116,105,116,101,109,95,95,233,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,3,0, + 0,0,67,0,0,0,115,14,0,0,0,124,2,124,0,106, + 0,124,1,60,0,100,0,83,0,114,69,0,0,0,41,1, + 114,46,1,0,0,41,3,114,143,0,0,0,114,60,1,0, + 0,114,65,0,0,0,32,32,32,114,7,0,0,0,218,11, + 95,95,115,101,116,105,116,101,109,95,95,236,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,67,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,32,114,7,0,0,0,218,7,95, + 95,108,101,110,95,95,239,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,67,0,0, + 0,243,12,0,0,0,100,1,160,0,124,0,106,1,161,1, + 83,0,41,2,78,122,20,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,40,123,33,114,125,41,41,2,114,89,0, + 0,0,114,46,1,0,0,114,20,1,0,0,32,114,7,0, + 0,0,218,8,95,95,114,101,112,114,95,95,242,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,0, + 3,0,0,0,67,0,0,0,115,12,0,0,0,124,1,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, + 32,32,114,7,0,0,0,218,12,95,95,99,111,110,116,97, + 105,110,115,95,95,245,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,0,0,0,3,0,0, + 0,67,0,0,0,115,16,0,0,0,124,0,106,0,160,1, + 124,1,161,1,1,0,100,0,83,0,114,69,0,0,0,41, + 2,114,46,1,0,0,114,61,0,0,0,114,66,1,0,0, + 32,32,114,7,0,0,0,114,61,0,0,0,248,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,114,151,0,0,0,114,235,0,0,0,114, + 52,1,0,0,114,47,1,0,0,114,54,1,0,0,114,57, + 1,0,0,114,61,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,7,0,0,0,114,44,1,0,0, + 190,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,64,0, + 0,0,115,88,0,0,0,101,0,90,1,100,0,90,2,100, + 1,100,2,132,0,90,3,101,4,100,3,100,4,132,0,131, + 1,90,5,100,5,100,6,132,0,90,6,100,7,100,8,132, + 0,90,7,100,9,100,10,132,0,90,8,100,11,100,12,132, + 0,90,9,100,13,100,14,132,0,90,10,100,15,100,16,132, + 0,90,11,100,17,100,18,132,0,90,12,100,19,83,0,41, + 20,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,99,4,0,0,0,0,0,0,0,0,0,0,0, + 4,0,0,0,67,0,0,0,115,18,0,0,0,116,0,124, + 1,124,2,124,3,131,3,124,0,95,1,100,0,83,0,114, + 69,0,0,0,41,2,114,44,1,0,0,114,46,1,0,0, + 114,50,1,0,0,32,32,32,32,114,7,0,0,0,114,235, + 0,0,0,254,4,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,67, - 0,0,0,115,64,0,0,0,116,0,116,1,106,2,160,3, - 161,0,131,1,68,0,93,22,92,2,125,0,125,1,124,1, - 100,1,117,0,114,20,116,1,106,2,124,0,61,0,113,7, - 116,4,124,1,100,2,131,2,114,29,124,1,160,5,161,0, - 1,0,113,7,100,1,83,0,41,3,122,125,67,97,108,108, - 32,116,104,101,32,105,110,118,97,108,105,100,97,116,101,95, - 99,97,99,104,101,115,40,41,32,109,101,116,104,111,100,32, - 111,110,32,97,108,108,32,112,97,116,104,32,101,110,116,114, - 121,32,102,105,110,100,101,114,115,10,32,32,32,32,32,32, - 32,32,115,116,111,114,101,100,32,105,110,32,115,121,115,46, - 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, - 99,104,101,115,32,40,119,104,101,114,101,32,105,109,112,108, - 101,109,101,110,116,101,100,41,46,78,218,17,105,110,118,97, - 108,105,100,97,116,101,95,99,97,99,104,101,115,41,6,218, - 4,108,105,115,116,114,16,0,0,0,218,19,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,218, - 5,105,116,101,109,115,114,152,0,0,0,114,75,1,0,0, - 41,2,114,141,0,0,0,218,6,102,105,110,100,101,114,32, - 32,114,7,0,0,0,114,75,1,0,0,50,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,67,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,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,32,115,121,115,46,112,97,116,104, - 95,104,111,111,107,115,32,102,111,114,32,97,32,102,105,110, - 100,101,114,32,102,111,114,32,39,112,97,116,104,39,46,78, - 122,23,115,121,115,46,112,97,116,104,95,104,111,111,107,115, - 32,105,115,32,101,109,112,116,121,41,6,114,16,0,0,0, - 218,10,112,97,116,104,95,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,32,32,114, - 7,0,0,0,218,11,95,112,97,116,104,95,104,111,111,107, - 115,60,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,67,0,0,0,115,104, - 0,0,0,124,1,100,1,107,2,114,21,9,0,116,0,160, - 1,161,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,5,121,50,1,0,1,0,1,0,124,0,160,6,124, - 1,161,1,125,2,124,2,116,3,106,4,124,1,60,0,89, - 0,124,2,83,0,37,0,119,0,119,0,41,3,122,210,71, - 101,116,32,116,104,101,32,102,105,110,100,101,114,32,102,111, - 114,32,116,104,101,32,112,97,116,104,32,101,110,116,114,121, - 32,102,114,111,109,32,115,121,115,46,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,46,10,10, - 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, - 97,116,104,32,101,110,116,114,121,32,105,115,32,110,111,116, - 32,105,110,32,116,104,101,32,99,97,99,104,101,44,32,102, - 105,110,100,32,116,104,101,32,97,112,112,114,111,112,114,105, - 97,116,101,32,102,105,110,100,101,114,10,32,32,32,32,32, - 32,32,32,97,110,100,32,99,97,99,104,101,32,105,116,46, - 32,73,102,32,110,111,32,102,105,110,100,101,114,32,105,115, - 32,97,118,97,105,108,97,98,108,101,44,32,115,116,111,114, - 101,32,78,111,110,101,46,10,10,32,32,32,32,32,32,32, - 32,114,10,0,0,0,78,41,7,114,19,0,0,0,114,82, - 0,0,0,218,17,70,105,108,101,78,111,116,70,111,117,110, - 100,69,114,114,111,114,114,16,0,0,0,114,77,1,0,0, - 218,8,75,101,121,69,114,114,111,114,114,81,1,0,0,41, - 3,114,220,0,0,0,114,65,0,0,0,114,79,1,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,73,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,17,49,7, - 178,1,49,7,179,1,20,7,122,31,80,97,116,104,70,105, - 110,100,101,114,46,95,112,97,116,104,95,105,109,112,111,114, - 116,101,114,95,99,97,99,104,101,99,3,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,67,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,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,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,41,4,78, - 114,160,0,0,0,122,53,46,102,105,110,100,95,115,112,101, - 99,40,41,32,110,111,116,32,102,111,117,110,100,59,32,102, - 97,108,108,105,110,103,32,98,97,99,107,32,116,111,32,102, - 105,110,100,95,108,111,97,100,101,114,40,41,122,53,46,102, - 105,110,100,95,115,112,101,99,40,41,32,110,111,116,32,102, - 111,117,110,100,59,32,102,97,108,108,105,110,103,32,98,97, - 99,107,32,116,111,32,102,105,110,100,95,109,111,100,117,108, - 101,40,41,41,11,114,152,0,0,0,114,158,0,0,0,90, - 12,95,111,98,106,101,99,116,95,110,97,109,101,114,99,0, - 0,0,114,100,0,0,0,114,161,0,0,0,114,160,0,0, - 0,114,228,0,0,0,114,223,0,0,0,114,206,0,0,0, - 114,201,0,0,0,41,7,114,220,0,0,0,114,162,0,0, - 0,114,79,1,0,0,114,165,0,0,0,114,163,0,0,0, - 114,164,0,0,0,114,209,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,95,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,95,115,112,101,99,78,99,4, - 0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,67, - 0,0,0,115,166,0,0,0,103,0,125,4,124,2,68,0, - 93,67,125,5,116,0,124,5,116,1,116,2,102,2,131,2, - 115,14,113,4,124,0,160,3,124,5,161,1,125,6,124,6, - 100,1,117,1,114,71,116,4,124,6,100,2,131,2,114,35, - 124,6,160,5,124,1,124,3,161,2,125,7,110,6,124,0, - 160,6,124,1,124,6,161,2,125,7,124,7,100,1,117,0, - 114,46,113,4,124,7,106,7,100,1,117,1,114,55,124,7, - 2,0,1,0,83,0,124,7,106,8,125,8,124,8,100,1, - 117,0,114,66,116,9,100,3,131,1,130,1,124,4,160,10, - 124,8,161,1,1,0,113,4,116,11,160,12,124,1,100,1, - 161,2,125,7,124,4,124,7,95,8,124,7,83,0,41,4, - 122,63,70,105,110,100,32,116,104,101,32,108,111,97,100,101, - 114,32,111,114,32,110,97,109,101,115,112,97,99,101,95,112, - 97,116,104,32,102,111,114,32,116,104,105,115,32,109,111,100, - 117,108,101,47,112,97,99,107,97,103,101,32,110,97,109,101, - 46,78,114,225,0,0,0,122,19,115,112,101,99,32,109,105, - 115,115,105,110,103,32,108,111,97,100,101,114,41,13,114,184, - 0,0,0,114,109,0,0,0,218,5,98,121,116,101,115,114, - 84,1,0,0,114,152,0,0,0,114,225,0,0,0,114,85, - 1,0,0,114,163,0,0,0,114,201,0,0,0,114,142,0, - 0,0,114,190,0,0,0,114,158,0,0,0,114,206,0,0, - 0,41,9,114,220,0,0,0,114,162,0,0,0,114,65,0, - 0,0,114,224,0,0,0,218,14,110,97,109,101,115,112,97, - 99,101,95,112,97,116,104,90,5,101,110,116,114,121,114,79, - 1,0,0,114,209,0,0,0,114,164,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,116,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,104,70,105,110,100,101,114,46,95,103,101,116,95, - 115,112,101,99,99,4,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,67,0,0,0,115,94,0,0,0,124,2, - 100,1,117,0,114,7,116,0,106,1,125,2,124,0,160,2, - 124,1,124,2,124,3,161,3,125,4,124,4,100,1,117,0, - 114,20,100,1,83,0,124,4,106,3,100,1,117,0,114,45, - 124,4,106,4,125,5,124,5,114,43,100,1,124,4,95,5, - 116,6,124,1,124,5,124,0,106,2,131,3,124,4,95,4, - 124,4,83,0,100,1,83,0,124,4,83,0,41,2,122,141, - 84,114,121,32,116,111,32,102,105,110,100,32,97,32,115,112, - 101,99,32,102,111,114,32,39,102,117,108,108,110,97,109,101, - 39,32,111,110,32,115,121,115,46,112,97,116,104,32,111,114, - 32,39,112,97,116,104,39,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,115,101,97,114,99,104,32,105,115,32, - 98,97,115,101,100,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,97,110,100,32,115,121,115,46, - 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, - 99,104,101,46,10,32,32,32,32,32,32,32,32,78,41,7, - 114,16,0,0,0,114,65,0,0,0,114,88,1,0,0,114, - 163,0,0,0,114,201,0,0,0,114,204,0,0,0,114,44, - 1,0,0,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,32,32,32,32,32,32,114,7,0,0,0,114,225, - 0,0,0,148,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,67,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,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,115,46, - 112,97,116,104,32,111,114,32,39,112,97,116,104,39,32,98, - 97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,104, - 95,104,111,111,107,115,32,97,110,100,10,32,32,32,32,32, - 32,32,32,115,121,115,46,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,122,101,80,97,116,104,70,105,110,100,101,114,46, - 102,105,110,100,95,109,111,100,117,108,101,40,41,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,32,97,110,100,32, - 115,108,97,116,101,100,32,102,111,114,32,114,101,109,111,118, - 97,108,32,105,110,32,80,121,116,104,111,110,32,51,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,32,32,32,32,114,7,0,0,0,114,228, - 0,0,0,172,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,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,79,0,0,0,115,28,0,0, - 0,100,1,100,2,108,0,109,1,125,2,1,0,124,2,106, - 2,124,0,105,0,124,1,164,1,142,1,83,0,41,4,97, - 32,1,0,0,10,32,32,32,32,32,32,32,32,70,105,110, - 100,32,100,105,115,116,114,105,98,117,116,105,111,110,115,46, - 10,10,32,32,32,32,32,32,32,32,82,101,116,117,114,110, - 32,97,110,32,105,116,101,114,97,98,108,101,32,111,102,32, - 97,108,108,32,68,105,115,116,114,105,98,117,116,105,111,110, - 32,105,110,115,116,97,110,99,101,115,32,99,97,112,97,98, - 108,101,32,111,102,10,32,32,32,32,32,32,32,32,108,111, - 97,100,105,110,103,32,116,104,101,32,109,101,116,97,100,97, - 116,97,32,102,111,114,32,112,97,99,107,97,103,101,115,32, - 109,97,116,99,104,105,110,103,32,96,96,99,111,110,116,101, - 120,116,46,110,97,109,101,96,96,10,32,32,32,32,32,32, - 32,32,40,111,114,32,97,108,108,32,110,97,109,101,115,32, - 105,102,32,96,96,78,111,110,101,96,96,32,105,110,100,105, - 99,97,116,101,100,41,32,97,108,111,110,103,32,116,104,101, - 32,112,97,116,104,115,32,105,110,32,116,104,101,32,108,105, - 115,116,10,32,32,32,32,32,32,32,32,111,102,32,100,105, - 114,101,99,116,111,114,105,101,115,32,96,96,99,111,110,116, - 101,120,116,46,112,97,116,104,96,96,46,10,32,32,32,32, - 32,32,32,32,114,0,0,0,0,41,1,218,18,77,101,116, - 97,100,97,116,97,80,97,116,104,70,105,110,100,101,114,78, - 41,3,90,18,105,109,112,111,114,116,108,105,98,46,109,101, - 116,97,100,97,116,97,114,89,1,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, - 32,32,32,114,7,0,0,0,114,90,1,0,0,188,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,229,0,0,0,41,14,114,149,0,0,0,114, - 148,0,0,0,114,150,0,0,0,114,151,0,0,0,114,232, - 0,0,0,114,75,1,0,0,114,81,1,0,0,114,233,0, - 0,0,114,84,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,7,0,0,0,114,74,1,0,0,46, - 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,0, - 0,0,0,3,0,0,0,64,0,0,0,115,90,0,0,0, - 101,0,90,1,100,0,90,2,100,1,90,3,100,2,100,3, - 132,0,90,4,100,4,100,5,132,0,90,5,101,6,90,7, - 100,6,100,7,132,0,90,8,100,8,100,9,132,0,90,9, - 100,19,100,11,100,12,132,1,90,10,100,13,100,14,132,0, - 90,11,101,12,100,15,100,16,132,0,131,1,90,13,100,17, - 100,18,132,0,90,14,100,10,83,0,41,20,218,10,70,105, - 108,101,70,105,110,100,101,114,122,172,70,105,108,101,45,98, - 97,115,101,100,32,102,105,110,100,101,114,46,10,10,32,32, - 32,32,73,110,116,101,114,97,99,116,105,111,110,115,32,119, - 105,116,104,32,116,104,101,32,102,105,108,101,32,115,121,115, - 116,101,109,32,97,114,101,32,99,97,99,104,101,100,32,102, - 111,114,32,112,101,114,102,111,114,109,97,110,99,101,44,32, - 98,101,105,110,103,10,32,32,32,32,114,101,102,114,101,115, - 104,101,100,32,119,104,101,110,32,116,104,101,32,100,105,114, - 101,99,116,111,114,121,32,116,104,101,32,102,105,110,100,101, - 114,32,105,115,32,104,97,110,100,108,105,110,103,32,104,97, - 115,32,98,101,101,110,32,109,111,100,105,102,105,101,100,46, - 10,10,32,32,32,32,99,2,0,0,0,0,0,0,0,0, - 0,0,0,6,0,0,0,7,0,0,0,115,114,0,0,0, - 135,5,103,0,125,3,124,2,68,0,93,16,92,2,138,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,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,101, - 32,119,105,116,104,32,116,104,101,32,112,97,116,104,32,116, - 111,32,115,101,97,114,99,104,32,111,110,32,97,110,100,32, - 97,32,118,97,114,105,97,98,108,101,32,110,117,109,98,101, - 114,32,111,102,10,32,32,32,32,32,32,32,32,50,45,116, - 117,112,108,101,115,32,99,111,110,116,97,105,110,105,110,103, - 32,116,104,101,32,108,111,97,100,101,114,32,97,110,100,32, - 116,104,101,32,102,105,108,101,32,115,117,102,102,105,120,101, - 115,32,116,104,101,32,108,111,97,100,101,114,10,32,32,32, - 32,32,32,32,32,114,101,99,111,103,110,105,122,101,115,46, - 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,51,0,0,0,115,24,0,0,0,129,0,124,0,93,7, - 125,1,124,1,137,2,102,2,86,0,1,0,113,2,100,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,32,32,128, - 114,7,0,0,0,114,8,0,0,0,217,5,0,0,115,4, - 0,0,0,6,128,18,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,130,0,0,0,78,41, - 11,114,190,0,0,0,218,8,95,108,111,97,100,101,114,115, - 114,65,0,0,0,114,86,0,0,0,114,67,0,0,0,114, - 19,0,0,0,114,82,0,0,0,218,11,95,112,97,116,104, - 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, - 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, - 101,100,95,112,97,116,104,95,99,97,99,104,101,41,6,114, - 143,0,0,0,114,65,0,0,0,218,14,108,111,97,100,101, - 114,95,100,101,116,97,105,108,115,90,7,108,111,97,100,101, - 114,115,114,211,0,0,0,114,163,0,0,0,32,32,32,32, - 32,64,114,7,0,0,0,114,235,0,0,0,211,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,99,1,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,100, - 1,124,0,95,0,100,2,83,0,41,3,122,31,73,110,118, - 97,108,105,100,97,116,101,32,116,104,101,32,100,105,114,101, - 99,116,111,114,121,32,109,116,105,109,101,46,114,130,0,0, - 0,78,41,1,114,93,1,0,0,114,20,1,0,0,32,114, - 7,0,0,0,114,75,1,0,0,227,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,67,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, - 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, - 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,117,108,101,44,32,111,114,32,116,104,101,32,110, - 97,109,101,115,112,97,99,101,10,32,32,32,32,32,32,32, - 32,112,97,99,107,97,103,101,32,112,111,114,116,105,111,110, - 115,46,32,82,101,116,117,114,110,115,32,40,108,111,97,100, - 101,114,44,32,108,105,115,116,45,111,102,45,112,111,114,116, - 105,111,110,115,41,46,10,10,32,32,32,32,32,32,32,32, + 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,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,101,32,109,101,116, + 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,32,84,104,101,32,105,109,112,111,114,116,32,109, + 97,99,104,105,110,101,114,121,32,100,111,101,115,32,116,104, + 101,32,106,111,98,32,105,116,115,101,108,102,46,10,10,32, + 32,32,32,32,32,32,32,122,82,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,40,41,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, + 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, + 80,121,116,104,111,110,32,51,46,49,50,122,25,60,109,111, + 100,117,108,101,32,123,33,114,125,32,40,110,97,109,101,115, + 112,97,99,101,41,62,78,41,5,114,99,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,32,114,7,0,0,0,218, + 11,109,111,100,117,108,101,95,114,101,112,114,1,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,67,0,0,0,114,24,0,0,0,41,2,78,84,114,12, + 0,0,0,114,246,0,0,0,32,32,114,7,0,0,0,114, + 205,0,0,0,12,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,67,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,32,32,114, + 7,0,0,0,114,0,1,0,0,15,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,0,0,0,0, + 0,6,0,0,0,67,0,0,0,115,16,0,0,0,116,0, + 100,1,100,2,100,3,100,4,100,5,141,4,83,0,41,6, + 78,114,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,32,32,114,7,0,0,0, + 114,240,0,0,0,18,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,67, + 0,0,0,114,24,0,0,0,114,236,0,0,0,114,12,0, + 0,0,114,237,0,0,0,32,32,114,7,0,0,0,114,238, + 0,0,0,21,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,67,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,32,32, + 114,7,0,0,0,114,244,0,0,0,24,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,0,0,0, + 0,0,0,4,0,0,0,67,0,0,0,115,26,0,0,0, + 116,0,160,1,100,1,124,0,106,2,161,2,1,0,116,0, + 160,3,124,0,124,1,161,2,83,0,41,3,122,98,76,111, + 97,100,32,97,32,110,97,109,101,115,112,97,99,101,32,109, + 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,101, - 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, - 108,111,97,100,101,114,40,41,32,105,115,32,100,101,112,114, - 101,99,97,116,101,100,32,97,110,100,32,115,108,97,116,101, - 100,32,102,111,114,32,114,101,109,111,118,97,108,32,105,110, - 32,80,121,116,104,111,110,32,51,46,49,50,59,32,117,115, + 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 122,38,110,97,109,101,115,112,97,99,101,32,109,111,100,117, + 108,101,32,108,111,97,100,101,100,32,119,105,116,104,32,112, + 97,116,104,32,123,33,114,125,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,32,32,114,7,0,0,0,114,247,0,0,0, + 27,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,0,0,0,0,0,0,0,0, + 0,2,0,0,0,67,0,0,0,115,22,0,0,0,100,1, + 100,2,108,0,109,1,125,2,1,0,124,2,124,0,106,2, + 131,1,83,0,41,3,78,114,0,0,0,0,41,1,218,15, + 78,97,109,101,115,112,97,99,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,32,32,32,114,7,0,0,0,114,31,1,0,0,39,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,100,101,114,78,41,13,114,149,0,0,0,114,148, + 0,0,0,114,150,0,0,0,114,235,0,0,0,114,232,0, + 0,0,114,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, + 7,0,0,0,114,70,1,0,0,253,4,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,0,4, + 0,0,0,64,0,0,0,115,118,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,101,4,100,2,100,3,132,0, + 131,1,90,5,101,4,100,4,100,5,132,0,131,1,90,6, + 101,7,100,6,100,7,132,0,131,1,90,8,101,7,100,8, + 100,9,132,0,131,1,90,9,101,7,100,19,100,11,100,12, + 132,1,131,1,90,10,101,7,100,20,100,13,100,14,132,1, + 131,1,90,11,101,7,100,19,100,15,100,16,132,1,131,1, + 90,12,101,4,100,17,100,18,132,0,131,1,90,13,100,10, + 83,0,41,21,218,10,80,97,116,104,70,105,110,100,101,114, + 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, + 101,114,32,102,111,114,32,115,121,115,46,112,97,116,104,32, + 97,110,100,32,112,97,99,107,97,103,101,32,95,95,112,97, + 116,104,95,95,32,97,116,116,114,105,98,117,116,101,115,46, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,67,0,0,0,115,64,0,0,0,116,0,116,1,106,2, + 160,3,161,0,131,1,68,0,93,22,92,2,125,0,125,1, + 124,1,100,1,117,0,114,20,116,1,106,2,124,0,61,0, + 113,7,116,4,124,1,100,2,131,2,114,29,124,1,160,5, + 161,0,1,0,113,7,100,1,83,0,41,3,122,125,67,97, + 108,108,32,116,104,101,32,105,110,118,97,108,105,100,97,116, + 101,95,99,97,99,104,101,115,40,41,32,109,101,116,104,111, + 100,32,111,110,32,97,108,108,32,112,97,116,104,32,101,110, + 116,114,121,32,102,105,110,100,101,114,115,10,32,32,32,32, + 32,32,32,32,115,116,111,114,101,100,32,105,110,32,115,121, + 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,115,32,40,119,104,101,114,101,32,105,109, + 112,108,101,109,101,110,116,101,100,41,46,78,218,17,105,110, + 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,41, + 6,218,4,108,105,115,116,114,16,0,0,0,218,19,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,218,5,105,116,101,109,115,114,152,0,0,0,114,75,1, + 0,0,41,2,114,141,0,0,0,218,6,102,105,110,100,101, + 114,32,32,114,7,0,0,0,114,75,1,0,0,50,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,67,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,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,32,115,121,115,46,112,97, + 116,104,95,104,111,111,107,115,32,102,111,114,32,97,32,102, + 105,110,100,101,114,32,102,111,114,32,39,112,97,116,104,39, + 46,78,122,23,115,121,115,46,112,97,116,104,95,104,111,111, + 107,115,32,105,115,32,101,109,112,116,121,41,6,114,16,0, + 0,0,218,10,112,97,116,104,95,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,32, + 32,114,7,0,0,0,218,11,95,112,97,116,104,95,104,111, + 111,107,115,60,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,67,0,0,0, + 115,104,0,0,0,124,1,100,1,107,2,114,21,9,0,116, + 0,160,1,161,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,5,121,50,1,0,1,0,1,0,124,0,160, + 6,124,1,161,1,125,2,124,2,116,3,106,4,124,1,60, + 0,89,0,124,2,83,0,37,0,119,0,119,0,41,3,122, + 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, + 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, + 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, + 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, + 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, + 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, + 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, + 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, + 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, + 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, + 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, + 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, + 32,32,32,114,10,0,0,0,78,41,7,114,19,0,0,0, + 114,82,0,0,0,218,17,70,105,108,101,78,111,116,70,111, + 117,110,100,69,114,114,111,114,114,16,0,0,0,114,77,1, + 0,0,218,8,75,101,121,69,114,114,111,114,114,81,1,0, + 0,41,3,114,220,0,0,0,114,65,0,0,0,114,79,1, + 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, + 73,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,17, + 49,7,178,1,49,7,179,1,20,7,122,31,80,97,116,104, + 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,67,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,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,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,41, + 4,78,114,160,0,0,0,122,53,46,102,105,110,100,95,115, + 112,101,99,40,41,32,110,111,116,32,102,111,117,110,100,59, + 32,102,97,108,108,105,110,103,32,98,97,99,107,32,116,111, + 32,102,105,110,100,95,108,111,97,100,101,114,40,41,122,53, + 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, + 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, + 98,97,99,107,32,116,111,32,102,105,110,100,95,109,111,100, + 117,108,101,40,41,41,11,114,152,0,0,0,114,158,0,0, + 0,90,12,95,111,98,106,101,99,116,95,110,97,109,101,114, + 99,0,0,0,114,100,0,0,0,114,161,0,0,0,114,160, + 0,0,0,114,228,0,0,0,114,223,0,0,0,114,206,0, + 0,0,114,201,0,0,0,41,7,114,220,0,0,0,114,162, + 0,0,0,114,79,1,0,0,114,165,0,0,0,114,163,0, + 0,0,114,164,0,0,0,114,209,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,95,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,95,115,112,101,99,78, + 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, + 0,67,0,0,0,115,166,0,0,0,103,0,125,4,124,2, + 68,0,93,67,125,5,116,0,124,5,116,1,116,2,102,2, + 131,2,115,14,113,4,124,0,160,3,124,5,161,1,125,6, + 124,6,100,1,117,1,114,71,116,4,124,6,100,2,131,2, + 114,35,124,6,160,5,124,1,124,3,161,2,125,7,110,6, + 124,0,160,6,124,1,124,6,161,2,125,7,124,7,100,1, + 117,0,114,46,113,4,124,7,106,7,100,1,117,1,114,55, + 124,7,2,0,1,0,83,0,124,7,106,8,125,8,124,8, + 100,1,117,0,114,66,116,9,100,3,131,1,130,1,124,4, + 160,10,124,8,161,1,1,0,113,4,116,11,160,12,124,1, + 100,1,161,2,125,7,124,4,124,7,95,8,124,7,83,0, + 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, + 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, + 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, + 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, + 109,101,46,78,114,225,0,0,0,122,19,115,112,101,99,32, + 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,13, + 114,184,0,0,0,114,109,0,0,0,218,5,98,121,116,101, + 115,114,84,1,0,0,114,152,0,0,0,114,225,0,0,0, + 114,85,1,0,0,114,163,0,0,0,114,201,0,0,0,114, + 142,0,0,0,114,190,0,0,0,114,158,0,0,0,114,206, + 0,0,0,41,9,114,220,0,0,0,114,162,0,0,0,114, + 65,0,0,0,114,224,0,0,0,218,14,110,97,109,101,115, + 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, + 114,79,1,0,0,114,209,0,0,0,114,164,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,116,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,104,70,105,110,100,101,114,46,95,103,101, + 116,95,115,112,101,99,99,4,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,67,0,0,0,115,94,0,0,0, + 124,2,100,1,117,0,114,7,116,0,106,1,125,2,124,0, + 160,2,124,1,124,2,124,3,161,3,125,4,124,4,100,1, + 117,0,114,20,100,1,83,0,124,4,106,3,100,1,117,0, + 114,45,124,4,106,4,125,5,124,5,114,43,100,1,124,4, + 95,5,116,6,124,1,124,5,124,0,106,2,131,3,124,4, + 95,4,124,4,83,0,100,1,83,0,124,4,83,0,41,2, + 122,141,84,114,121,32,116,111,32,102,105,110,100,32,97,32, + 115,112,101,99,32,102,111,114,32,39,102,117,108,108,110,97, + 109,101,39,32,111,110,32,115,121,115,46,112,97,116,104,32, + 111,114,32,39,112,97,116,104,39,46,10,10,32,32,32,32, + 32,32,32,32,84,104,101,32,115,101,97,114,99,104,32,105, + 115,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, + 97,116,104,95,104,111,111,107,115,32,97,110,100,32,115,121, + 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,46,10,32,32,32,32,32,32,32,32,78, + 41,7,114,16,0,0,0,114,65,0,0,0,114,88,1,0, + 0,114,163,0,0,0,114,201,0,0,0,114,204,0,0,0, + 114,44,1,0,0,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,32,32,32,32,32,32,114,7,0,0,0, + 114,225,0,0,0,148,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,67,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,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, + 115,46,112,97,116,104,32,111,114,32,39,112,97,116,104,39, + 32,98,97,115,101,100,32,111,110,32,115,121,115,46,112,97, + 116,104,95,104,111,111,107,115,32,97,110,100,10,32,32,32, + 32,32,32,32,32,115,121,115,46,112,97,116,104,95,105,109, + 112,111,114,116,101,114,95,99,97,99,104,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 46,32,32,85,115,101,32,102,105,110,100,95,115,112,101,99, + 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, + 32,32,32,32,32,122,101,80,97,116,104,70,105,110,100,101, + 114,46,102,105,110,100,95,109,111,100,117,108,101,40,41,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, + 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, + 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, + 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,32,32,32,32,114,7,0,0,0, + 114,228,0,0,0,172,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,0,0,0,0,0, + 0,0,0,0,0,0,4,0,0,0,79,0,0,0,115,28, + 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, + 2,106,2,124,0,105,0,124,1,164,1,142,1,83,0,41, + 4,97,32,1,0,0,10,32,32,32,32,32,32,32,32,70, + 105,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110, + 115,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, + 114,110,32,97,110,32,105,116,101,114,97,98,108,101,32,111, + 102,32,97,108,108,32,68,105,115,116,114,105,98,117,116,105, + 111,110,32,105,110,115,116,97,110,99,101,115,32,99,97,112, + 97,98,108,101,32,111,102,10,32,32,32,32,32,32,32,32, + 108,111,97,100,105,110,103,32,116,104,101,32,109,101,116,97, + 100,97,116,97,32,102,111,114,32,112,97,99,107,97,103,101, + 115,32,109,97,116,99,104,105,110,103,32,96,96,99,111,110, + 116,101,120,116,46,110,97,109,101,96,96,10,32,32,32,32, + 32,32,32,32,40,111,114,32,97,108,108,32,110,97,109,101, + 115,32,105,102,32,96,96,78,111,110,101,96,96,32,105,110, + 100,105,99,97,116,101,100,41,32,97,108,111,110,103,32,116, + 104,101,32,112,97,116,104,115,32,105,110,32,116,104,101,32, + 108,105,115,116,10,32,32,32,32,32,32,32,32,111,102,32, + 100,105,114,101,99,116,111,114,105,101,115,32,96,96,99,111, + 110,116,101,120,116,46,112,97,116,104,96,96,46,10,32,32, + 32,32,32,32,32,32,114,0,0,0,0,41,1,218,18,77, + 101,116,97,100,97,116,97,80,97,116,104,70,105,110,100,101, + 114,78,41,3,90,18,105,109,112,111,114,116,108,105,98,46, + 109,101,116,97,100,97,116,97,114,89,1,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,32,32,32,114,7,0,0,0,114,90,1,0,0,188, + 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,229,0,0,0,41,14,114,149,0,0, + 0,114,148,0,0,0,114,150,0,0,0,114,151,0,0,0, + 114,232,0,0,0,114,75,1,0,0,114,81,1,0,0,114, + 233,0,0,0,114,84,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,7,0,0,0,114,74,1,0, + 0,46,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,0,0,0,0,3,0,0,0,64,0,0,0,115,90,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,101,6, + 90,7,100,6,100,7,132,0,90,8,100,8,100,9,132,0, + 90,9,100,19,100,11,100,12,132,1,90,10,100,13,100,14, + 132,0,90,11,101,12,100,15,100,16,132,0,131,1,90,13, + 100,17,100,18,132,0,90,14,100,10,83,0,41,20,218,10, + 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, + 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, + 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, + 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, + 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, + 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, + 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, + 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, + 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, + 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, + 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, + 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, + 0,0,0,0,0,6,0,0,0,7,0,0,0,115,114,0, + 0,0,135,5,103,0,125,3,124,2,68,0,93,16,92,2, + 138,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,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,101,32,119,105,116,104,32,116,104,101,32,112,97,116,104, + 32,116,111,32,115,101,97,114,99,104,32,111,110,32,97,110, + 100,32,97,32,118,97,114,105,97,98,108,101,32,110,117,109, + 98,101,114,32,111,102,10,32,32,32,32,32,32,32,32,50, + 45,116,117,112,108,101,115,32,99,111,110,116,97,105,110,105, + 110,103,32,116,104,101,32,108,111,97,100,101,114,32,97,110, + 100,32,116,104,101,32,102,105,108,101,32,115,117,102,102,105, + 120,101,115,32,116,104,101,32,108,111,97,100,101,114,10,32, + 32,32,32,32,32,32,32,114,101,99,111,103,110,105,122,101, + 115,46,99,1,0,0,0,0,0,0,0,0,0,0,0,3, + 0,0,0,51,0,0,0,115,24,0,0,0,129,0,124,0, + 93,7,125,1,124,1,137,2,102,2,86,0,1,0,113,2, + 100,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,32, + 32,128,114,7,0,0,0,114,8,0,0,0,217,5,0,0, + 115,4,0,0,0,6,128,18,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,130,0,0,0, + 78,41,11,114,190,0,0,0,218,8,95,108,111,97,100,101, + 114,115,114,65,0,0,0,114,86,0,0,0,114,67,0,0, + 0,114,19,0,0,0,114,82,0,0,0,218,11,95,112,97, + 116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,95, + 112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,108, + 97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,41, + 6,114,143,0,0,0,114,65,0,0,0,218,14,108,111,97, + 100,101,114,95,100,101,116,97,105,108,115,90,7,108,111,97, + 100,101,114,115,114,211,0,0,0,114,163,0,0,0,32,32, + 32,32,32,64,114,7,0,0,0,114,235,0,0,0,211,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,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,67,0,0,0,115,10,0,0, + 0,100,1,124,0,95,0,100,2,83,0,41,3,122,31,73, + 110,118,97,108,105,100,97,116,101,32,116,104,101,32,100,105, + 114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,130, + 0,0,0,78,41,1,114,93,1,0,0,114,20,1,0,0, + 32,114,7,0,0,0,114,75,1,0,0,227,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,67,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,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,102,105,110,100,32,97,32,108,111,97,100,101,114,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, + 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, + 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, + 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, + 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, + 114,116,105,111,110,115,41,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,78,41,6,114,99,0,0,0,114,100,0, - 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,32,32,32,114,7,0,0,0,114, - 160,0,0,0,233,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,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,67,0,0,0,115,26,0, - 0,0,124,1,124,2,124,3,131,2,125,6,116,0,124,2, - 124,3,124,6,124,4,100,1,141,4,83,0,41,2,78,114, - 200,0,0,0,41,1,114,212,0,0,0,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,32,32,32,32,32,32,32,114,7,0,0,0,114,88,1, - 0,0,248,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, - 67,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,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,0,114,56,124,0,106,10,125,6,124, - 4,160,11,161,0,125,7,110,5,124,0,106,12,125,6,124, - 4,125,7,124,7,124,6,118,0,114,108,116,13,124,0,106, - 2,124,4,131,2,125,8,124,0,106,14,68,0,93,29,92, - 2,125,9,125,10,100,5,124,9,23,0,125,11,116,13,124, - 8,124,11,131,2,125,12,116,15,124,12,131,1,114,103,124, - 0,160,16,124,10,124,1,124,12,124,8,103,1,124,2,161, - 5,2,0,1,0,83,0,113,74,116,17,124,8,131,1,125, - 3,124,0,106,14,68,0,93,55,92,2,125,9,125,10,9, - 0,116,13,124,0,106,2,124,4,124,9,23,0,131,2,125, - 12,110,12,35,0,4,0,116,18,121,189,1,0,1,0,1, - 0,89,0,1,0,100,6,83,0,37,0,116,19,160,20,100, - 7,124,12,100,3,100,8,166,3,1,0,124,7,124,9,23, - 0,124,6,118,0,114,166,116,15,124,12,131,1,114,166,124, - 0,160,16,124,10,124,1,124,12,100,6,124,2,161,5,2, - 0,1,0,83,0,113,111,124,3,114,187,116,19,160,20,100, - 9,124,8,161,2,1,0,116,19,160,21,124,1,100,6,161, - 2,125,13,124,8,103,1,124,13,95,22,124,13,83,0,100, - 6,83,0,119,0,119,0,41,10,122,111,84,114,121,32,116, - 111,32,102,105,110,100,32,97,32,115,112,101,99,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,117,108,101,46,10,10,32,32,32,32,32,32,32, - 32,82,101,116,117,114,110,115,32,116,104,101,32,109,97,116, - 99,104,105,110,103,32,115,112,101,99,44,32,111,114,32,78, - 111,110,101,32,105,102,32,110,111,116,32,102,111,117,110,100, - 46,10,32,32,32,32,32,32,32,32,70,114,97,0,0,0, - 114,45,0,0,0,114,130,0,0,0,114,235,0,0,0,78, - 122,9,116,114,121,105,110,103,32,123,125,41,1,90,9,118, - 101,114,98,111,115,105,116,121,122,25,112,111,115,115,105,98, - 108,101,32,110,97,109,101,115,112,97,99,101,32,102,111,114, - 32,123,125,41,23,114,104,0,0,0,114,75,0,0,0,114, - 65,0,0,0,114,19,0,0,0,114,82,0,0,0,114,33, - 1,0,0,114,76,0,0,0,114,93,1,0,0,218,11,95, - 102,105,108,108,95,99,97,99,104,101,114,22,0,0,0,114, - 96,1,0,0,114,131,0,0,0,114,95,1,0,0,114,67, - 0,0,0,114,92,1,0,0,114,80,0,0,0,114,88,1, - 0,0,114,83,0,0,0,114,111,0,0,0,114,158,0,0, - 0,114,172,0,0,0,114,206,0,0,0,114,201,0,0,0, - 41,14,114,143,0,0,0,114,162,0,0,0,114,224,0,0, - 0,90,12,105,115,95,110,97,109,101,115,112,97,99,101,90, - 11,116,97,105,108,95,109,111,100,117,108,101,114,192,0,0, - 0,90,5,99,97,99,104,101,90,12,99,97,99,104,101,95, - 109,111,100,117,108,101,90,9,98,97,115,101,95,112,97,116, - 104,114,41,1,0,0,114,210,0,0,0,90,13,105,110,105, - 116,95,102,105,108,101,110,97,109,101,90,9,102,117,108,108, - 95,112,97,116,104,114,209,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,253,5,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,18,1,2,128,12,1,8,1,2,128,16,1,12,1,8, - 1,10,1,4,1,8,255,2,128,4,2,12,1,12,1,8, - 1,4,1,4,1,2,244,2,228,115,31,0,0,0,138,10, - 21,0,149,9,32,7,193,52,8,65,61,2,193,61,7,66, - 8,9,194,61,1,66,8,9,194,62,1,32,7,122,20,70, - 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,1,0,0,0,0,0,0,0,0,0,0,0, - 10,0,0,0,67,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,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,131,0,125,3,124,2,68,0,93,28,125,4,124,4,160, - 12,100,2,161,1,92,3,125,5,125,6,125,7,124,6,114, - 67,100,3,160,13,124,5,124,7,160,14,161,0,161,2,125, - 8,110,2,124,5,125,8,124,3,160,15,124,8,161,1,1, - 0,113,46,124,3,124,0,95,11,116,7,106,8,160,9,116, - 16,161,1,114,94,100,4,100,5,132,0,124,2,68,0,131, - 1,124,0,95,17,100,6,83,0,100,6,83,0,119,0,41, - 7,122,68,70,105,108,108,32,116,104,101,32,99,97,99,104, - 101,32,111,102,32,112,111,116,101,110,116,105,97,108,32,109, - 111,100,117,108,101,115,32,97,110,100,32,112,97,99,107,97, - 103,101,115,32,102,111,114,32,116,104,105,115,32,100,105,114, - 101,99,116,111,114,121,46,114,15,0,0,0,114,97,0,0, - 0,114,88,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,83,0,0,0,115,20,0,0,0, - 104,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,32,32,114,7,0, - 0,0,114,14,0,0,0,77,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,116,99,111,109, - 112,62,78,41,18,114,65,0,0,0,114,19,0,0,0,90, - 7,108,105,115,116,100,105,114,114,82,0,0,0,114,82,1, - 0,0,218,15,80,101,114,109,105,115,115,105,111,110,69,114, - 114,111,114,218,18,78,111,116,65,68,105,114,101,99,116,111, - 114,121,69,114,114,111,114,114,16,0,0,0,114,26,0,0, - 0,114,27,0,0,0,114,94,1,0,0,114,95,1,0,0, - 114,126,0,0,0,114,89,0,0,0,114,131,0,0,0,218, - 3,97,100,100,114,28,0,0,0,114,96,1,0,0,41,9, - 114,143,0,0,0,114,65,0,0,0,90,8,99,111,110,116, - 101,110,116,115,90,21,108,111,119,101,114,95,115,117,102,102, - 105,120,95,99,111,110,116,101,110,116,115,114,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,32,32,32,32,32,32,32, - 32,32,114,7,0,0,0,114,98,1,0,0,48,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,0,142,12,28,7,193,32,1,28, - 7,122,22,70,105,108,101,70,105,110,100,101,114,46,95,102, - 105,108,108,95,99,97,99,104,101,99,1,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,7,0,0,0,115,22, - 0,0,0,135,3,135,4,136,3,136,4,102,2,100,1,100, - 2,132,8,125,2,124,2,83,0,41,4,97,20,1,0,0, - 65,32,99,108,97,115,115,32,109,101,116,104,111,100,32,119, - 104,105,99,104,32,114,101,116,117,114,110,115,32,97,32,99, - 108,111,115,117,114,101,32,116,111,32,117,115,101,32,111,110, - 32,115,121,115,46,112,97,116,104,95,104,111,111,107,10,32, - 32,32,32,32,32,32,32,119,104,105,99,104,32,119,105,108, - 108,32,114,101,116,117,114,110,32,97,110,32,105,110,115,116, - 97,110,99,101,32,117,115,105,110,103,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,108,111,97,100,101,114,115, - 32,97,110,100,32,116,104,101,32,112,97,116,104,10,32,32, - 32,32,32,32,32,32,99,97,108,108,101,100,32,111,110,32, - 116,104,101,32,99,108,111,115,117,114,101,46,10,10,32,32, - 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, - 104,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, - 99,108,111,115,117,114,101,32,105,115,32,110,111,116,32,97, - 32,100,105,114,101,99,116,111,114,121,44,32,73,109,112,111, - 114,116,69,114,114,111,114,32,105,115,10,32,32,32,32,32, - 32,32,32,114,97,105,115,101,100,46,10,10,32,32,32,32, - 32,32,32,32,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,19,0,0,0,115,36,0,0,0,116,0, - 124,0,131,1,115,10,116,1,100,1,124,0,100,2,141,2, - 130,1,137,1,124,0,103,1,137,2,162,1,82,0,142,0, - 83,0,41,4,122,45,80,97,116,104,32,104,111,111,107,32, - 102,111,114,32,105,109,112,111,114,116,108,105,98,46,109,97, - 99,104,105,110,101,114,121,46,70,105,108,101,70,105,110,100, - 101,114,46,122,30,111,110,108,121,32,100,105,114,101,99,116, - 111,114,105,101,115,32,97,114,101,32,115,117,112,112,111,114, - 116,101,100,114,74,0,0,0,78,41,2,114,83,0,0,0, - 114,142,0,0,0,41,3,114,65,0,0,0,114,220,0,0, - 0,114,97,1,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,89,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,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,78,114,12,0,0,0,41,5,114,220,0,0, - 0,114,97,1,0,0,114,102,1,0,0,114,220,0,0,0, - 114,97,1,0,0,96,96,32,64,64,114,7,0,0,0,218, - 9,112,97,116,104,95,104,111,111,107,79,6,0,0,115,6, - 0,0,0,4,128,14,10,4,6,114,9,0,0,0,122,20, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 122,101,70,105,108,101,70,105,110,100,101,114,46,102,105,110, + 100,95,108,111,97,100,101,114,40,41,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, + 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, + 105,110,32,80,121,116,104,111,110,32,51,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,41,6,114,99,0,0,0,114, + 100,0,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,32,32,32,114,7,0,0, + 0,114,160,0,0,0,233,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,0,0,0, + 0,0,0,0,0,0,0,6,0,0,0,67,0,0,0,115, + 26,0,0,0,124,1,124,2,124,3,131,2,125,6,116,0, + 124,2,124,3,124,6,124,4,100,1,141,4,83,0,41,2, + 78,114,200,0,0,0,41,1,114,212,0,0,0,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,32,32,32,32,32,32,32,114,7,0,0,0,114, + 88,1,0,0,248,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,67,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,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,0,114,56,124,0,106,10,125, + 6,124,4,160,11,161,0,125,7,110,5,124,0,106,12,125, + 6,124,4,125,7,124,7,124,6,118,0,114,108,116,13,124, + 0,106,2,124,4,131,2,125,8,124,0,106,14,68,0,93, + 29,92,2,125,9,125,10,100,5,124,9,23,0,125,11,116, + 13,124,8,124,11,131,2,125,12,116,15,124,12,131,1,114, + 103,124,0,160,16,124,10,124,1,124,12,124,8,103,1,124, + 2,161,5,2,0,1,0,83,0,113,74,116,17,124,8,131, + 1,125,3,124,0,106,14,68,0,93,55,92,2,125,9,125, + 10,9,0,116,13,124,0,106,2,124,4,124,9,23,0,131, + 2,125,12,110,12,35,0,4,0,116,18,121,189,1,0,1, + 0,1,0,89,0,1,0,100,6,83,0,37,0,116,19,160, + 20,100,7,124,12,100,3,100,8,166,3,1,0,124,7,124, + 9,23,0,124,6,118,0,114,166,116,15,124,12,131,1,114, + 166,124,0,160,16,124,10,124,1,124,12,100,6,124,2,161, + 5,2,0,1,0,83,0,113,111,124,3,114,187,116,19,160, + 20,100,9,124,8,161,2,1,0,116,19,160,21,124,1,100, + 6,161,2,125,13,124,8,103,1,124,13,95,22,124,13,83, + 0,100,6,83,0,119,0,119,0,41,10,122,111,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,115,112,101,99,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, + 32,32,32,82,101,116,117,114,110,115,32,116,104,101,32,109, + 97,116,99,104,105,110,103,32,115,112,101,99,44,32,111,114, + 32,78,111,110,101,32,105,102,32,110,111,116,32,102,111,117, + 110,100,46,10,32,32,32,32,32,32,32,32,70,114,97,0, + 0,0,114,45,0,0,0,114,130,0,0,0,114,235,0,0, + 0,78,122,9,116,114,121,105,110,103,32,123,125,41,1,90, + 9,118,101,114,98,111,115,105,116,121,122,25,112,111,115,115, + 105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,102, + 111,114,32,123,125,41,23,114,104,0,0,0,114,75,0,0, + 0,114,65,0,0,0,114,19,0,0,0,114,82,0,0,0, + 114,33,1,0,0,114,76,0,0,0,114,93,1,0,0,218, + 11,95,102,105,108,108,95,99,97,99,104,101,114,22,0,0, + 0,114,96,1,0,0,114,131,0,0,0,114,95,1,0,0, + 114,67,0,0,0,114,92,1,0,0,114,80,0,0,0,114, + 88,1,0,0,114,83,0,0,0,114,111,0,0,0,114,158, + 0,0,0,114,172,0,0,0,114,206,0,0,0,114,201,0, + 0,0,41,14,114,143,0,0,0,114,162,0,0,0,114,224, + 0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,99, + 101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,192, + 0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,104, + 101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,112, + 97,116,104,114,41,1,0,0,114,210,0,0,0,90,13,105, + 110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,117, + 108,108,95,112,97,116,104,114,209,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,253,5,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,18,1,2,128,12,1,8,1,2,128,16,1,12, + 1,8,1,10,1,4,1,8,255,2,128,4,2,12,1,12, + 1,8,1,4,1,4,1,2,244,2,228,115,31,0,0,0, + 138,10,21,0,149,9,32,7,193,52,8,65,61,2,193,61, + 7,66,8,9,194,61,1,66,8,9,194,62,1,32,7,122, + 20,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, + 95,115,112,101,99,99,1,0,0,0,0,0,0,0,0,0, + 0,0,10,0,0,0,67,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,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,131,0,125,3,124,2,68,0,93,28,125,4,124, + 4,160,12,100,2,161,1,92,3,125,5,125,6,125,7,124, + 6,114,67,100,3,160,13,124,5,124,7,160,14,161,0,161, + 2,125,8,110,2,124,5,125,8,124,3,160,15,124,8,161, + 1,1,0,113,46,124,3,124,0,95,11,116,7,106,8,160, + 9,116,16,161,1,114,94,100,4,100,5,132,0,124,2,68, + 0,131,1,124,0,95,17,100,6,83,0,100,6,83,0,119, + 0,41,7,122,68,70,105,108,108,32,116,104,101,32,99,97, + 99,104,101,32,111,102,32,112,111,116,101,110,116,105,97,108, + 32,109,111,100,117,108,101,115,32,97,110,100,32,112,97,99, + 107,97,103,101,115,32,102,111,114,32,116,104,105,115,32,100, + 105,114,101,99,116,111,114,121,46,114,15,0,0,0,114,97, + 0,0,0,114,88,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,83,0,0,0,115,20,0, + 0,0,104,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,32,32,114, + 7,0,0,0,114,14,0,0,0,77,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,116,99, + 111,109,112,62,78,41,18,114,65,0,0,0,114,19,0,0, + 0,90,7,108,105,115,116,100,105,114,114,82,0,0,0,114, + 82,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, + 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, + 116,111,114,121,69,114,114,111,114,114,16,0,0,0,114,26, + 0,0,0,114,27,0,0,0,114,94,1,0,0,114,95,1, + 0,0,114,126,0,0,0,114,89,0,0,0,114,131,0,0, + 0,218,3,97,100,100,114,28,0,0,0,114,96,1,0,0, + 41,9,114,143,0,0,0,114,65,0,0,0,90,8,99,111, + 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, + 102,102,105,120,95,99,111,110,116,101,110,116,115,114,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,32,32,32,32,32, + 32,32,32,32,114,7,0,0,0,114,98,1,0,0,48,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,0,142,12,28,7,193,32, + 1,28,7,122,22,70,105,108,101,70,105,110,100,101,114,46, + 95,102,105,108,108,95,99,97,99,104,101,99,1,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0, + 115,22,0,0,0,135,3,135,4,136,3,136,4,102,2,100, + 1,100,2,132,8,125,2,124,2,83,0,41,4,97,20,1, + 0,0,65,32,99,108,97,115,115,32,109,101,116,104,111,100, + 32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,97, + 32,99,108,111,115,117,114,101,32,116,111,32,117,115,101,32, + 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, + 10,32,32,32,32,32,32,32,32,119,104,105,99,104,32,119, + 105,108,108,32,114,101,116,117,114,110,32,97,110,32,105,110, + 115,116,97,110,99,101,32,117,115,105,110,103,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,32,108,111,97,100,101, + 114,115,32,97,110,100,32,116,104,101,32,112,97,116,104,10, + 32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,111, + 110,32,116,104,101,32,99,108,111,115,117,114,101,46,10,10, + 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, + 97,116,104,32,99,97,108,108,101,100,32,111,110,32,116,104, + 101,32,99,108,111,115,117,114,101,32,105,115,32,110,111,116, + 32,97,32,100,105,114,101,99,116,111,114,121,44,32,73,109, + 112,111,114,116,69,114,114,111,114,32,105,115,10,32,32,32, + 32,32,32,32,32,114,97,105,115,101,100,46,10,10,32,32, + 32,32,32,32,32,32,99,1,0,0,0,0,0,0,0,0, + 0,0,0,4,0,0,0,19,0,0,0,115,36,0,0,0, + 116,0,124,0,131,1,115,10,116,1,100,1,124,0,100,2, + 141,2,130,1,137,1,124,0,103,1,137,2,162,1,82,0, + 142,0,83,0,41,4,122,45,80,97,116,104,32,104,111,111, + 107,32,102,111,114,32,105,109,112,111,114,116,108,105,98,46, + 109,97,99,104,105,110,101,114,121,46,70,105,108,101,70,105, + 110,100,101,114,46,122,30,111,110,108,121,32,100,105,114,101, + 99,116,111,114,105,101,115,32,97,114,101,32,115,117,112,112, + 111,114,116,101,100,114,74,0,0,0,78,41,2,114,83,0, + 0,0,114,142,0,0,0,41,3,114,65,0,0,0,114,220, + 0,0,0,114,97,1,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,89,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,99,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,0,0,67,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,32,114,7,0,0,0,114,65,1,0,0,97, - 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,150,0,0,0,114,151,0,0,0,114,235,0, - 0,0,114,75,1,0,0,114,166,0,0,0,114,228,0,0, - 0,114,160,0,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,7,0,0,0,114,91, - 1,0,0,202,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,67, - 0,0,0,115,146,0,0,0,124,0,160,0,100,1,161,1, - 125,4,124,0,160,0,100,2,161,1,125,5,124,4,115,33, - 124,5,114,18,124,5,106,1,125,4,110,15,124,2,124,3, - 107,2,114,28,116,2,124,1,124,2,131,2,125,4,110,5, - 116,3,124,1,124,2,131,2,125,4,124,5,115,42,116,4, - 124,1,124,2,124,4,100,3,141,3,125,5,9,0,124,5, - 124,0,100,2,60,0,124,4,124,0,100,1,60,0,124,2, - 124,0,100,4,60,0,124,3,124,0,100,5,60,0,100,0, - 83,0,35,0,4,0,116,5,121,72,1,0,1,0,1,0, - 89,0,100,0,83,0,37,0,119,0,41,6,78,218,10,95, - 95,108,111,97,100,101,114,95,95,218,8,95,95,115,112,101, - 99,95,95,41,1,114,163,0,0,0,90,8,95,95,102,105, - 108,101,95,95,90,10,95,95,99,97,99,104,101,100,95,95, - 41,6,218,3,103,101,116,114,163,0,0,0,114,39,1,0, - 0,114,32,1,0,0,114,212,0,0,0,218,9,69,120,99, - 101,112,116,105,111,110,41,6,90,2,110,115,114,141,0,0, - 0,90,8,112,97,116,104,110,97,109,101,90,9,99,112,97, - 116,104,110,97,109,101,114,163,0,0,0,114,209,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,103,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,67,0,0,0,115,38,0,0,0,116, - 0,116,1,160,2,161,0,102,2,125,0,116,3,116,4,102, - 2,125,1,116,5,116,6,102,2,125,2,124,0,124,1,124, - 2,103,3,83,0,41,2,122,95,82,101,116,117,114,110,115, - 32,97,32,108,105,115,116,32,111,102,32,102,105,108,101,45, - 98,97,115,101,100,32,109,111,100,117,108,101,32,108,111,97, - 100,101,114,115,46,10,10,32,32,32,32,69,97,99,104,32, - 105,116,101,109,32,105,115,32,97,32,116,117,112,108,101,32, - 40,108,111,97,100,101,114,44,32,115,117,102,102,105,120,101, - 115,41,46,10,32,32,32,32,78,41,7,114,28,1,0,0, - 114,186,0,0,0,218,18,101,120,116,101,110,115,105,111,110, - 95,115,117,102,102,105,120,101,115,114,32,1,0,0,114,127, - 0,0,0,114,39,1,0,0,114,113,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,32,32,32, - 114,7,0,0,0,114,207,0,0,0,126,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,67,0,0,0,115,8,0,0,0,124, - 0,97,0,100,0,83,0,114,69,0,0,0,41,1,114,158, - 0,0,0,41,1,218,17,95,98,111,111,116,115,116,114,97, - 112,95,109,111,100,117,108,101,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,137,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,67,0,0,0,115, - 50,0,0,0,116,0,124,0,131,1,1,0,116,1,131,0, - 125,1,116,2,106,3,160,4,116,5,106,6,124,1,142,0, - 103,1,161,1,1,0,116,2,106,7,160,8,116,9,161,1, - 1,0,100,1,83,0,41,2,122,41,73,110,115,116,97,108, - 108,32,116,104,101,32,112,97,116,104,45,98,97,115,101,100, - 32,105,109,112,111,114,116,32,99,111,109,112,111,110,101,110, - 116,115,46,78,41,10,114,111,1,0,0,114,207,0,0,0, - 114,16,0,0,0,114,80,1,0,0,114,190,0,0,0,114, - 91,1,0,0,114,103,1,0,0,218,9,109,101,116,97,95, - 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,32,32,114,7,0,0,0,218, - 8,95,105,110,115,116,97,108,108,142,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,0,114,0,0,0, - 0,41,1,84,41,85,114,151,0,0,0,114,158,0,0,0, - 114,186,0,0,0,114,91,0,0,0,114,16,0,0,0,114, - 99,0,0,0,114,183,0,0,0,114,26,0,0,0,114,230, - 0,0,0,90,2,110,116,114,19,0,0,0,114,214,0,0, - 0,90,5,112,111,115,105,120,114,51,0,0,0,218,3,97, - 108,108,114,59,0,0,0,114,136,0,0,0,114,57,0,0, - 0,114,62,0,0,0,90,20,95,112,97,116,104,115,101,112, - 115,95,119,105,116,104,95,99,111,108,111,110,114,29,0,0, - 0,90,37,95,67,65,83,69,95,73,78,83,69,78,83,73, - 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,66, - 89,84,69,83,95,75,69,89,114,28,0,0,0,114,30,0, - 0,0,114,22,0,0,0,114,37,0,0,0,114,43,0,0, - 0,114,46,0,0,0,114,67,0,0,0,114,73,0,0,0, - 114,75,0,0,0,114,79,0,0,0,114,80,0,0,0,114, - 83,0,0,0,114,86,0,0,0,114,95,0,0,0,218,4, - 116,121,112,101,218,8,95,95,99,111,100,101,95,95,114,185, - 0,0,0,114,35,0,0,0,114,171,0,0,0,114,34,0, - 0,0,114,40,0,0,0,114,7,1,0,0,114,116,0,0, - 0,114,112,0,0,0,114,127,0,0,0,114,61,0,0,0, - 114,109,1,0,0,114,231,0,0,0,114,113,0,0,0,90, - 23,68,69,66,85,71,95,66,89,84,69,67,79,68,69,95, - 83,85,70,70,73,88,69,83,90,27,79,80,84,73,77,73, - 90,69,68,95,66,89,84,69,67,79,68,69,95,83,85,70, - 70,73,88,69,83,114,121,0,0,0,114,128,0,0,0,114, - 135,0,0,0,114,137,0,0,0,114,139,0,0,0,114,159, - 0,0,0,114,166,0,0,0,114,175,0,0,0,114,179,0, - 0,0,114,181,0,0,0,114,188,0,0,0,114,193,0,0, - 0,114,194,0,0,0,114,199,0,0,0,218,6,111,98,106, - 101,99,116,114,208,0,0,0,114,212,0,0,0,114,213,0, - 0,0,114,234,0,0,0,114,248,0,0,0,114,10,1,0, - 0,114,32,1,0,0,114,39,1,0,0,114,28,1,0,0, - 114,44,1,0,0,114,70,1,0,0,114,74,1,0,0,114, - 91,1,0,0,114,108,1,0,0,114,207,0,0,0,114,111, - 1,0,0,114,113,1,0,0,114,12,0,0,0,114,7,0, - 0,0,218,8,60,109,111,100,117,108,101,62,1,0,0,0, - 115,180,0,0,0,4,0,4,22,8,3,8,1,8,1,8, - 1,8,1,10,3,4,1,8,1,10,1,8,2,4,3,10, - 1,6,2,22,2,8,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,36,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,73,14,67,16,30,0,127,14,17,18, - 50,18,45,18,25,14,53,14,63,14,49,0,127,14,29,0, - 127,10,30,8,23,8,11,12,5,114,9,0,0,0, + 104,111,111,107,46,60,108,111,99,97,108,115,62,46,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, + 70,105,110,100,101,114,78,114,12,0,0,0,41,5,114,220, + 0,0,0,114,97,1,0,0,114,102,1,0,0,114,220,0, + 0,0,114,97,1,0,0,96,96,32,64,64,114,7,0,0, + 0,218,9,112,97,116,104,95,104,111,111,107,79,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,67,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,32,114,7,0,0,0,114,65,1,0, + 0,97,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,150,0,0,0,114,151,0,0,0,114, + 235,0,0,0,114,75,1,0,0,114,166,0,0,0,114,228, + 0,0,0,114,160,0,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,7,0,0,0, + 114,91,1,0,0,202,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,67,0,0,0,115,146,0,0,0,124,0,160,0,100,1, + 161,1,125,4,124,0,160,0,100,2,161,1,125,5,124,4, + 115,33,124,5,114,18,124,5,106,1,125,4,110,15,124,2, + 124,3,107,2,114,28,116,2,124,1,124,2,131,2,125,4, + 110,5,116,3,124,1,124,2,131,2,125,4,124,5,115,42, + 116,4,124,1,124,2,124,4,100,3,141,3,125,5,9,0, + 124,5,124,0,100,2,60,0,124,4,124,0,100,1,60,0, + 124,2,124,0,100,4,60,0,124,3,124,0,100,5,60,0, + 100,0,83,0,35,0,4,0,116,5,121,72,1,0,1,0, + 1,0,89,0,100,0,83,0,37,0,119,0,41,6,78,218, + 10,95,95,108,111,97,100,101,114,95,95,218,8,95,95,115, + 112,101,99,95,95,41,1,114,163,0,0,0,90,8,95,95, + 102,105,108,101,95,95,90,10,95,95,99,97,99,104,101,100, + 95,95,41,6,218,3,103,101,116,114,163,0,0,0,114,39, + 1,0,0,114,32,1,0,0,114,212,0,0,0,218,9,69, + 120,99,101,112,116,105,111,110,41,6,90,2,110,115,114,141, + 0,0,0,90,8,112,97,116,104,110,97,109,101,90,9,99, + 112,97,116,104,110,97,109,101,114,163,0,0,0,114,209,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,103,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,67,0,0,0,115,38,0,0, + 0,116,0,116,1,160,2,161,0,102,2,125,0,116,3,116, + 4,102,2,125,1,116,5,116,6,102,2,125,2,124,0,124, + 1,124,2,103,3,83,0,41,2,122,95,82,101,116,117,114, + 110,115,32,97,32,108,105,115,116,32,111,102,32,102,105,108, + 101,45,98,97,115,101,100,32,109,111,100,117,108,101,32,108, + 111,97,100,101,114,115,46,10,10,32,32,32,32,69,97,99, + 104,32,105,116,101,109,32,105,115,32,97,32,116,117,112,108, + 101,32,40,108,111,97,100,101,114,44,32,115,117,102,102,105, + 120,101,115,41,46,10,32,32,32,32,78,41,7,114,28,1, + 0,0,114,186,0,0,0,218,18,101,120,116,101,110,115,105, + 111,110,95,115,117,102,102,105,120,101,115,114,32,1,0,0, + 114,127,0,0,0,114,39,1,0,0,114,113,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,32, + 32,32,114,7,0,0,0,114,207,0,0,0,126,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,67,0,0,0,115,8,0,0, + 0,124,0,97,0,100,0,83,0,114,69,0,0,0,41,1, + 114,158,0,0,0,41,1,218,17,95,98,111,111,116,115,116, + 114,97,112,95,109,111,100,117,108,101,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,137,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,67,0,0, + 0,115,50,0,0,0,116,0,124,0,131,1,1,0,116,1, + 131,0,125,1,116,2,106,3,160,4,116,5,106,6,124,1, + 142,0,103,1,161,1,1,0,116,2,106,7,160,8,116,9, + 161,1,1,0,100,1,83,0,41,2,122,41,73,110,115,116, + 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, + 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, + 101,110,116,115,46,78,41,10,114,111,1,0,0,114,207,0, + 0,0,114,16,0,0,0,114,80,1,0,0,114,190,0,0, + 0,114,91,1,0,0,114,103,1,0,0,218,9,109,101,116, + 97,95,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,32,32,114,7,0,0, + 0,218,8,95,105,110,115,116,97,108,108,142,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,0,114,0, + 0,0,0,41,1,84,41,85,114,151,0,0,0,114,158,0, + 0,0,114,186,0,0,0,114,91,0,0,0,114,16,0,0, + 0,114,99,0,0,0,114,183,0,0,0,114,26,0,0,0, + 114,230,0,0,0,90,2,110,116,114,19,0,0,0,114,214, + 0,0,0,90,5,112,111,115,105,120,114,51,0,0,0,218, + 3,97,108,108,114,59,0,0,0,114,136,0,0,0,114,57, + 0,0,0,114,62,0,0,0,90,20,95,112,97,116,104,115, + 101,112,115,95,119,105,116,104,95,99,111,108,111,110,114,29, + 0,0,0,90,37,95,67,65,83,69,95,73,78,83,69,78, + 83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,83, + 95,66,89,84,69,83,95,75,69,89,114,28,0,0,0,114, + 30,0,0,0,114,22,0,0,0,114,37,0,0,0,114,43, + 0,0,0,114,46,0,0,0,114,67,0,0,0,114,73,0, + 0,0,114,75,0,0,0,114,79,0,0,0,114,80,0,0, + 0,114,83,0,0,0,114,86,0,0,0,114,95,0,0,0, + 218,4,116,121,112,101,218,8,95,95,99,111,100,101,95,95, + 114,185,0,0,0,114,35,0,0,0,114,171,0,0,0,114, + 34,0,0,0,114,40,0,0,0,114,7,1,0,0,114,116, + 0,0,0,114,112,0,0,0,114,127,0,0,0,114,61,0, + 0,0,114,109,1,0,0,114,231,0,0,0,114,113,0,0, + 0,90,23,68,69,66,85,71,95,66,89,84,69,67,79,68, + 69,95,83,85,70,70,73,88,69,83,90,27,79,80,84,73, + 77,73,90,69,68,95,66,89,84,69,67,79,68,69,95,83, + 85,70,70,73,88,69,83,114,121,0,0,0,114,128,0,0, + 0,114,135,0,0,0,114,137,0,0,0,114,139,0,0,0, + 114,159,0,0,0,114,166,0,0,0,114,175,0,0,0,114, + 179,0,0,0,114,181,0,0,0,114,188,0,0,0,114,193, + 0,0,0,114,194,0,0,0,114,199,0,0,0,218,6,111, + 98,106,101,99,116,114,208,0,0,0,114,212,0,0,0,114, + 213,0,0,0,114,234,0,0,0,114,248,0,0,0,114,10, + 1,0,0,114,32,1,0,0,114,39,1,0,0,114,28,1, + 0,0,114,44,1,0,0,114,70,1,0,0,114,74,1,0, + 0,114,91,1,0,0,114,108,1,0,0,114,207,0,0,0, + 114,111,1,0,0,114,113,1,0,0,114,12,0,0,0,114, + 7,0,0,0,218,8,60,109,111,100,117,108,101,62,1,0, + 0,0,115,180,0,0,0,4,0,4,22,8,3,8,1,8, + 1,8,1,8,1,10,3,4,1,8,1,10,1,8,2,4, + 3,10,1,6,2,22,2,8,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, + 36,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,73,14,67,16,30,0,127,14, + 17,18,50,18,45,18,25,14,53,14,63,14,49,0,127,14, + 29,0,127,10,30,8,23,8,11,12,5,114,9,0,0,0, }; diff --git a/configure.ac b/configure.ac index 2f792aa60ee40f..11dd84f12c6692 100644 --- a/configure.ac +++ b/configure.ac @@ -128,21 +128,21 @@ VERSION=PYTHON_VERSION AC_SUBST(SOVERSION) SOVERSION=1.0 -# The later defininition of _XOPEN_SOURCE disables certain features +# The later definition of _XOPEN_SOURCE disables certain features # on Linux, so we need _GNU_SOURCE to re-enable them (makedev, tm_zone). AC_DEFINE(_GNU_SOURCE, 1, [Define on Linux to activate all library features]) -# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on NetBSD, so we need _NETBSD_SOURCE to re-enable # them. AC_DEFINE(_NETBSD_SOURCE, 1, [Define on NetBSD to activate all library features]) -# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on FreeBSD, so we need __BSD_VISIBLE to re-enable # them. AC_DEFINE(__BSD_VISIBLE, 1, [Define on FreeBSD to activate all library features]) -# The later defininition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables +# The later definition of _XOPEN_SOURCE and _POSIX_C_SOURCE disables # certain features on Mac OS X, so we need _DARWIN_C_SOURCE to re-enable # them. AC_DEFINE(_DARWIN_C_SOURCE, 1, [Define on Darwin to activate all library features]) From 6966890f9827ba6fbfc59e189753f6a5c68c5895 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sun, 13 Jun 2021 08:19:29 +0100 Subject: [PATCH 16/64] Fix a potential reference-counting bug in long_pow (GH-26690) --- Objects/longobject.c | 1 + 1 file changed, 1 insertion(+) diff --git a/Objects/longobject.c b/Objects/longobject.c index 5e29e9a7257093..d9127b31fd4867 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -4185,6 +4185,7 @@ long_pow(PyObject *v, PyObject *w, PyObject *x) goto Error; Py_DECREF(a); a = temp; + temp = NULL; } /* Reduce base by modulus in some cases: From d1a223332ee74d10ef96826ecfd5bff3267b2326 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sun, 13 Jun 2021 13:46:07 +0200 Subject: [PATCH 17/64] bpo-44389: Fix deprecation of OP_NO_TLSv1_3 (GH-26700) Signed-off-by: Christian Heimes --- Lib/test/test_ssl.py | 64 ++++++++++++++++--- .../2021-06-12-22-58-20.bpo-44389.WTRnoC.rst | 1 + Modules/_ssl.c | 2 +- 3 files changed, 58 insertions(+), 9 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-06-12-22-58-20.bpo-44389.WTRnoC.rst diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 31bc199e930a6c..6cea0ee9f1da53 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -580,6 +580,54 @@ def test_timeout(self): with test_wrap_socket(s) as ss: self.assertEqual(timeout, ss.gettimeout()) + def test_openssl111_deprecations(self): + options = [ + ssl.OP_NO_TLSv1, + ssl.OP_NO_TLSv1_1, + ssl.OP_NO_TLSv1_2, + ssl.OP_NO_TLSv1_3 + ] + protocols = [ + ssl.PROTOCOL_TLSv1, + ssl.PROTOCOL_TLSv1_1, + ssl.PROTOCOL_TLSv1_2, + ssl.PROTOCOL_TLS + ] + versions = [ + ssl.TLSVersion.SSLv3, + ssl.TLSVersion.TLSv1, + ssl.TLSVersion.TLSv1_1, + ] + + for option in options: + with self.subTest(option=option): + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + with self.assertWarns(DeprecationWarning) as cm: + ctx.options |= option + self.assertEqual( + 'ssl.OP_NO_SSL*/ssl.SSL_NO_TLS* options are deprecated', + str(cm.warning) + ) + + for protocol in protocols: + with self.subTest(protocol=protocol): + with self.assertWarns(DeprecationWarning) as cm: + ssl.SSLContext(protocol) + self.assertEqual( + f'{protocol!r} is deprecated', + str(cm.warning) + ) + + for version in versions: + with self.subTest(version=version): + ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + with self.assertWarns(DeprecationWarning) as cm: + ctx.minimum_version = version + self.assertEqual( + f'ssl.{version!r} is deprecated', + str(cm.warning) + ) + @ignore_deprecation def test_errors_sslwrap(self): sock = socket.socket() @@ -3067,7 +3115,7 @@ def test_dual_rsa_ecc(self): client_context.load_verify_locations(SIGNING_CA) # TODO: fix TLSv1.3 once SSLContext can restrict signature # algorithms. - client_context.options |= ssl.OP_NO_TLSv1_3 + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 # only ECDSA certs client_context.set_ciphers('ECDHE:ECDSA:!NULL:!aRSA') hostname = SIGNED_CERTFILE_ECC_HOSTNAME @@ -3806,7 +3854,7 @@ def test_do_handshake_enotconn(self): def test_no_shared_ciphers(self): client_context, server_context, hostname = testing_context() # OpenSSL enables all TLS 1.3 ciphers, enforce TLS 1.2 for test - client_context.options |= ssl.OP_NO_TLSv1_3 + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 # Force different suites on client and server client_context.set_ciphers("AES128") server_context.set_ciphers("AES256") @@ -4021,10 +4069,10 @@ def test_dh_params(self): # Check we can get a connection with ephemeral Diffie-Hellman client_context, server_context, hostname = testing_context() # test scenario needs TLS <= 1.2 - client_context.options |= ssl.OP_NO_TLSv1_3 + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 server_context.load_dh_params(DHFILE) server_context.set_ciphers("kEDH") - server_context.options |= ssl.OP_NO_TLSv1_3 + server_context.maximum_version = ssl.TLSVersion.TLSv1_2 stats = server_params_test(client_context, server_context, chatty=True, connectionchatty=True, sni_name=hostname) @@ -4270,7 +4318,7 @@ def test_sendfile(self): def test_session(self): client_context, server_context, hostname = testing_context() # TODO: sessions aren't compatible with TLSv1.3 yet - client_context.options |= ssl.OP_NO_TLSv1_3 + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 # first connection without session stats = server_params_test(client_context, server_context, @@ -4329,8 +4377,8 @@ def test_session_handling(self): client_context2, _, _ = testing_context() # TODO: session reuse does not work with TLSv1.3 - client_context.options |= ssl.OP_NO_TLSv1_3 - client_context2.options |= ssl.OP_NO_TLSv1_3 + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 + client_context2.maximum_version = ssl.TLSVersion.TLSv1_2 server = ThreadedEchoServer(context=server_context, chatty=False) with server: @@ -4754,7 +4802,7 @@ def msg_cb(conn, direction, version, content_type, msg_type, data): def test_msg_callback_tls12(self): client_context, server_context, hostname = testing_context() - client_context.options |= ssl.OP_NO_TLSv1_3 + client_context.maximum_version = ssl.TLSVersion.TLSv1_2 msg = [] diff --git a/Misc/NEWS.d/next/Library/2021-06-12-22-58-20.bpo-44389.WTRnoC.rst b/Misc/NEWS.d/next/Library/2021-06-12-22-58-20.bpo-44389.WTRnoC.rst new file mode 100644 index 00000000000000..e7e3b874899005 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-12-22-58-20.bpo-44389.WTRnoC.rst @@ -0,0 +1 @@ +Fix deprecation of :data:`ssl.OP_NO_TLSv1_3` diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 1080fa6cffbd96..26f31f8f4c5341 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3587,7 +3587,7 @@ set_options(PySSLContext *self, PyObject *arg, void *c) long new_opts, opts, set, clear; long opt_no = ( SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_TLSv1 | - SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2 + SSL_OP_NO_TLSv1_1 | SSL_OP_NO_TLSv1_2 | SSL_OP_NO_TLSv1_3 ); if (!PyArg_Parse(arg, "l", &new_opts)) From 67d241b9a06560a1b65dd857b07fed013f9aa668 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Mon, 14 Jun 2021 00:47:26 -0500 Subject: [PATCH 18/64] bpo-44310: Note that lru_cache keep references to both arguments and results (GH-26715) * Simplify the count_vowels example * Hits and misses are fetched while a lock is held * Add note that references are kept for arguments and return values * Clarify behavior when *typed* is false. --- Doc/library/functools.rst | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Doc/library/functools.rst b/Doc/library/functools.rst index e981bcdf6f2573..871c94afaf99ec 100644 --- a/Doc/library/functools.rst +++ b/Doc/library/functools.rst @@ -154,15 +154,16 @@ The :mod:`functools` module defines the following functions: @lru_cache def count_vowels(sentence): - sentence = sentence.casefold() - return sum(sentence.count(vowel) for vowel in 'aeiou') + return sum(sentence.count(vowel) for vowel in 'AEIOUaeiou') If *maxsize* is set to ``None``, the LRU feature is disabled and the cache can grow without bound. If *typed* is set to true, function arguments of different types will be - cached separately. For example, ``f(3)`` and ``f(3.0)`` will be treated - as distinct calls with distinct results. + cached separately. For example, ``f(3)`` and ``f(3.0)`` will always be + treated as distinct calls with distinct results. If *typed* is false, + the implementation will usually but not always regard them as equivalent + calls and only cache a single result. The wrapped function is instrumented with a :func:`cache_parameters` function that returns a new :class:`dict` showing the values for *maxsize* @@ -172,8 +173,7 @@ The :mod:`functools` module defines the following functions: To help measure the effectiveness of the cache and tune the *maxsize* parameter, the wrapped function is instrumented with a :func:`cache_info` function that returns a :term:`named tuple` showing *hits*, *misses*, - *maxsize* and *currsize*. In a multi-threaded environment, the hits - and misses are approximate. + *maxsize* and *currsize*. The decorator also provides a :func:`cache_clear` function for clearing or invalidating the cache. @@ -182,6 +182,9 @@ The :mod:`functools` module defines the following functions: :attr:`__wrapped__` attribute. This is useful for introspection, for bypassing the cache, or for rewrapping the function with a different cache. + The cache keeps references to the arguments and return values until they age + out of the cache or until the cache is cleared. + An `LRU (least recently used) cache `_ works best when the most recent calls are the best predictors of upcoming From 0208b06e7b90d39adcf817f0e8a394e73f3d579e Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Mon, 14 Jun 2021 11:04:09 +0100 Subject: [PATCH 19/64] bpo-44338: Port LOAD_GLOBAL to PEP 659 adaptive interpreter (GH-26638) * Add specializations of LOAD_GLOBAL. * Add more stats. * Remove old opcache; it is no longer used. * Add NEWS --- Include/cpython/code.h | 14 - Include/internal/pycore_code.h | 25 +- Include/opcode.h | 3 + Lib/opcode.py | 3 + .../2021-06-10-10-06-18.bpo-44338.c4Myr4.rst | 7 + Objects/codeobject.c | 74 +---- Python/ceval.c | 314 +++++------------- Python/opcode_targets.h | 6 +- Python/specialize.c | 100 +++++- 9 files changed, 209 insertions(+), 337 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-10-10-06-18.bpo-44338.c4Myr4.rst diff --git a/Include/cpython/code.h b/Include/cpython/code.h index f6e789dd4d8cfe..df79ddbc1b19a3 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -106,20 +106,6 @@ struct PyCodeObject { interpreter. */ union _cache_or_instruction *co_quickened; - /* Per opcodes just-in-time cache - * - * To reduce cache size, we use indirect mapping from opcode index to - * cache object: - * cache = co_opcache[co_opcache_map[next_instr - first_instr] - 1] - */ - - // co_opcache_map is indexed by (next_instr - first_instr). - // * 0 means there is no cache for this opcode. - // * n > 0 means there is cache in co_opcache[n-1]. - unsigned char *co_opcache_map; - _PyOpcache *co_opcache; - int co_opcache_flag; // used to determine when create a cache. - unsigned char co_opcache_size; // length of co_opcache. }; /* Masks for co_flags above */ diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index bfc2deb1b60424..098fbe47755c50 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -48,6 +48,11 @@ typedef struct { uint32_t dk_version_or_hint; } _PyLoadAttrCache; +typedef struct { + uint32_t module_keys_version; + uint32_t builtin_keys_version; +} _PyLoadGlobalCache; + /* Add specialized versions of entries to this union. * * Do not break the invariant: sizeof(SpecializedCacheEntry) == 8 @@ -62,6 +67,7 @@ typedef union { _PyEntryZero zero; _PyAdaptiveEntry adaptive; _PyLoadAttrCache load_attr; + _PyLoadGlobalCache load_global; } SpecializedCacheEntry; #define INSTRUCTIONS_PER_ENTRY (sizeof(SpecializedCacheEntry)/sizeof(_Py_CODEUNIT)) @@ -254,8 +260,6 @@ PyAPI_FUNC(PyCodeObject *) _PyCode_New(struct _PyCodeConstructor *); /* Private API */ -int _PyCode_InitOpcache(PyCodeObject *co); - /* Getters for internal PyCodeObject data. */ PyAPI_FUNC(PyObject *) _PyCode_GetVarnames(PyCodeObject *); PyAPI_FUNC(PyObject *) _PyCode_GetCellvars(PyCodeObject *); @@ -318,24 +322,25 @@ cache_backoff(_PyAdaptiveEntry *entry) { /* Specialization functions */ int _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, SpecializedCacheEntry *cache); +int _Py_Specialize_LoadGlobal(PyObject *globals, PyObject *builtins, _Py_CODEUNIT *instr, PyObject *name, SpecializedCacheEntry *cache); #define SPECIALIZATION_STATS 0 #if SPECIALIZATION_STATS -typedef struct _specialization_stats { +typedef struct _stats { uint64_t specialization_success; uint64_t specialization_failure; - uint64_t loadattr_hit; - uint64_t loadattr_deferred; - uint64_t loadattr_miss; - uint64_t loadattr_deopt; + uint64_t hit; + uint64_t deferred; + uint64_t miss; + uint64_t deopt; } SpecializationStats; -extern SpecializationStats _specialization_stats; -#define STAT_INC(name) _specialization_stats.name++ +extern SpecializationStats _specialization_stats[256]; +#define STAT_INC(opname, name) _specialization_stats[opname].name++ void _Py_PrintSpecializationStats(void); #else -#define STAT_INC(name) ((void)0) +#define STAT_INC(opname, name) ((void)0) #endif diff --git a/Include/opcode.h b/Include/opcode.h index 8f5be99cae0c1b..7f8376ff15ba95 100644 --- a/Include/opcode.h +++ b/Include/opcode.h @@ -142,6 +142,9 @@ extern "C" { #define LOAD_ATTR_WITH_HINT 14 #define LOAD_ATTR_SLOT 18 #define LOAD_ATTR_MODULE 21 +#define LOAD_GLOBAL_ADAPTIVE 36 +#define LOAD_GLOBAL_MODULE 38 +#define LOAD_GLOBAL_BUILTIN 39 #ifdef NEED_OPCODE_JUMP_TABLES static uint32_t _PyOpcode_RelativeJump[8] = { 0U, diff --git a/Lib/opcode.py b/Lib/opcode.py index 265759e60071ce..7e5916a4245256 100644 --- a/Lib/opcode.py +++ b/Lib/opcode.py @@ -226,4 +226,7 @@ def jabs_op(name, op): "LOAD_ATTR_WITH_HINT", "LOAD_ATTR_SLOT", "LOAD_ATTR_MODULE", + "LOAD_GLOBAL_ADAPTIVE", + "LOAD_GLOBAL_MODULE", + "LOAD_GLOBAL_BUILTIN", ] diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-06-10-10-06-18.bpo-44338.c4Myr4.rst b/Misc/NEWS.d/next/Core and Builtins/2021-06-10-10-06-18.bpo-44338.c4Myr4.rst new file mode 100644 index 00000000000000..beaa3e56334ba9 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-06-10-10-06-18.bpo-44338.c4Myr4.rst @@ -0,0 +1,7 @@ +Implement adaptive specialization for LOAD_GLOBAL + +Two specialized forms of LOAD_GLOBAL are added: + +* LOAD_GLOBAL_MODULE + +* LOAD_GLOBAL_BUILTIN diff --git a/Objects/codeobject.c b/Objects/codeobject.c index 701a37d7392fbe..e054c43a1cf93a 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -350,10 +350,7 @@ init_code(PyCodeObject *co, struct _PyCodeConstructor *con) /* not set */ co->co_weakreflist = NULL; co->co_extra = NULL; - co->co_opcache_map = NULL; - co->co_opcache = NULL; - co->co_opcache_flag = 0; - co->co_opcache_size = 0; + co->co_warmup = QUICKENING_INITIAL_WARMUP_VALUE; co->co_quickened = NULL; } @@ -912,55 +909,6 @@ new_linesiterator(PyCodeObject *code) return li; } - -/****************** - * the opcache - ******************/ - -int -_PyCode_InitOpcache(PyCodeObject *co) -{ - Py_ssize_t co_size = PyBytes_Size(co->co_code) / sizeof(_Py_CODEUNIT); - co->co_opcache_map = (unsigned char *)PyMem_Calloc(co_size, 1); - if (co->co_opcache_map == NULL) { - return -1; - } - - const _Py_CODEUNIT *opcodes = (const _Py_CODEUNIT*)PyBytes_AS_STRING(co->co_code); - Py_ssize_t opts = 0; - - for (Py_ssize_t i = 0; i < co_size;) { - unsigned char opcode = _Py_OPCODE(opcodes[i]); - i++; // 'i' is now aligned to (next_instr - first_instr) - - // TODO: LOAD_METHOD - if (opcode == LOAD_GLOBAL || opcode == LOAD_ATTR) { - opts++; - co->co_opcache_map[i] = (unsigned char)opts; - if (opts > 254) { - break; - } - } - } - - if (opts) { - co->co_opcache = (_PyOpcache *)PyMem_Calloc(opts, sizeof(_PyOpcache)); - if (co->co_opcache == NULL) { - PyMem_Free(co->co_opcache_map); - return -1; - } - } - else { - PyMem_Free(co->co_opcache_map); - co->co_opcache_map = NULL; - co->co_opcache = NULL; - } - - co->co_opcache_size = (unsigned char)opts; - return 0; -} - - /****************** * "extra" frame eval info (see PEP 523) ******************/ @@ -1207,15 +1155,6 @@ code_new_impl(PyTypeObject *type, int argcount, int posonlyargcount, static void code_dealloc(PyCodeObject *co) { - if (co->co_opcache != NULL) { - PyMem_Free(co->co_opcache); - } - if (co->co_opcache_map != NULL) { - PyMem_Free(co->co_opcache_map); - } - co->co_opcache_flag = 0; - co->co_opcache_size = 0; - if (co->co_extra != NULL) { PyInterpreterState *interp = _PyInterpreterState_GET(); _PyCodeObjectExtra *co_extra = co->co_extra; @@ -1442,12 +1381,11 @@ code_sizeof(PyCodeObject *co, PyObject *Py_UNUSED(args)) res += co->co_ncellvars * sizeof(Py_ssize_t); } - if (co->co_opcache != NULL) { - assert(co->co_opcache_map != NULL); - // co_opcache_map - res += PyBytes_GET_SIZE(co->co_code) / sizeof(_Py_CODEUNIT); - // co_opcache - res += co->co_opcache_size * sizeof(_PyOpcache); + if (co->co_quickened != NULL) { + Py_ssize_t count = co->co_quickened[0].entry.zero.cache_count; + count += (PyBytes_GET_SIZE(co->co_code)+sizeof(SpecializedCacheEntry)-1)/ + sizeof(SpecializedCacheEntry); + res += count * sizeof(SpecializedCacheEntry); } return PyLong_FromSsize_t(res); diff --git a/Python/ceval.c b/Python/ceval.c index c42404c692bb95..25d077cb26a235 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -13,7 +13,7 @@ #include "pycore_abstract.h" // _PyIndex_Check() #include "pycore_call.h" // _PyObject_FastCallDictTstate() #include "pycore_ceval.h" // _PyEval_SignalAsyncExc() -#include "pycore_code.h" // _PyCode_InitOpcache() +#include "pycore_code.h" #include "pycore_initconfig.h" // _PyStatus_OK() #include "pycore_object.h" // _PyObject_GC_TRACK() #include "pycore_moduleobject.h" @@ -109,7 +109,6 @@ static long dxp[256]; /* per opcode cache */ static int opcache_min_runs = 1024; /* create opcache when code executed this many times */ #define OPCODE_CACHE_MAX_TRIES 20 -#define OPCACHE_STATS 0 /* Enable stats */ // This function allows to deactivate the opcode cache. As different cache mechanisms may hold // references, this can mess with the reference leak detector functionality so the cache needs @@ -120,22 +119,6 @@ _PyEval_DeactivateOpCache(void) opcache_min_runs = 0; } -#if OPCACHE_STATS -static size_t opcache_code_objects = 0; -static size_t opcache_code_objects_extra_mem = 0; - -static size_t opcache_global_opts = 0; -static size_t opcache_global_hits = 0; -static size_t opcache_global_misses = 0; - -static size_t opcache_attr_opts = 0; -static size_t opcache_attr_hits = 0; -static size_t opcache_attr_misses = 0; -static size_t opcache_attr_deopts = 0; -static size_t opcache_attr_total = 0; -#endif - - #ifndef NDEBUG /* Ensure that tstate is valid: sanity check for PyEval_AcquireThread() and PyEval_RestoreThread(). Detect if tstate memory was freed. It can happen @@ -360,48 +343,8 @@ PyEval_InitThreads(void) void _PyEval_Fini(void) { -#if OPCACHE_STATS - fprintf(stderr, "-- Opcode cache number of objects = %zd\n", - opcache_code_objects); - - fprintf(stderr, "-- Opcode cache total extra mem = %zd\n", - opcache_code_objects_extra_mem); - - fprintf(stderr, "\n"); - - fprintf(stderr, "-- Opcode cache LOAD_GLOBAL hits = %zd (%d%%)\n", - opcache_global_hits, - (int) (100.0 * opcache_global_hits / - (opcache_global_hits + opcache_global_misses))); - - fprintf(stderr, "-- Opcode cache LOAD_GLOBAL misses = %zd (%d%%)\n", - opcache_global_misses, - (int) (100.0 * opcache_global_misses / - (opcache_global_hits + opcache_global_misses))); - - fprintf(stderr, "-- Opcode cache LOAD_GLOBAL opts = %zd\n", - opcache_global_opts); - - fprintf(stderr, "\n"); - - fprintf(stderr, "-- Opcode cache LOAD_ATTR hits = %zd (%d%%)\n", - opcache_attr_hits, - (int) (100.0 * opcache_attr_hits / - opcache_attr_total)); - - fprintf(stderr, "-- Opcode cache LOAD_ATTR misses = %zd (%d%%)\n", - opcache_attr_misses, - (int) (100.0 * opcache_attr_misses / - opcache_attr_total)); - - fprintf(stderr, "-- Opcode cache LOAD_ATTR opts = %zd\n", - opcache_attr_opts); - - fprintf(stderr, "-- Opcode cache LOAD_ATTR deopts = %zd\n", - opcache_attr_deopts); - - fprintf(stderr, "-- Opcode cache LOAD_ATTR total = %zd\n", - opcache_attr_total); +#if SPECIALIZATION_STATS + _Py_PrintSpecializationStats(); #endif } @@ -1448,108 +1391,11 @@ eval_frame_handle_pending(PyThreadState *tstate) GETLOCAL(i) = value; \ Py_XDECREF(tmp); } while (0) - /* macros for opcode cache */ -#define OPCACHE_CHECK() \ - do { \ - co_opcache = NULL; \ - if (co->co_opcache != NULL) { \ - unsigned char co_opcache_offset = \ - co->co_opcache_map[next_instr - first_instr]; \ - if (co_opcache_offset > 0) { \ - assert(co_opcache_offset <= co->co_opcache_size); \ - co_opcache = &co->co_opcache[co_opcache_offset - 1]; \ - assert(co_opcache != NULL); \ - } \ - } \ - } while (0) - -#define OPCACHE_DEOPT() \ - do { \ - if (co_opcache != NULL) { \ - co_opcache->optimized = -1; \ - unsigned char co_opcache_offset = \ - co->co_opcache_map[next_instr - first_instr]; \ - assert(co_opcache_offset <= co->co_opcache_size); \ - co->co_opcache_map[co_opcache_offset] = 0; \ - co_opcache = NULL; \ - } \ - } while (0) - -#define OPCACHE_DEOPT_LOAD_ATTR() \ - do { \ - if (co_opcache != NULL) { \ - OPCACHE_STAT_ATTR_DEOPT(); \ - OPCACHE_DEOPT(); \ - } \ - } while (0) - -#define OPCACHE_MAYBE_DEOPT_LOAD_ATTR() \ - do { \ - if (co_opcache != NULL && --co_opcache->optimized <= 0) { \ - OPCACHE_DEOPT_LOAD_ATTR(); \ - } \ - } while (0) - -#if OPCACHE_STATS - -#define OPCACHE_STAT_GLOBAL_HIT() \ - do { \ - if (co->co_opcache != NULL) opcache_global_hits++; \ - } while (0) - -#define OPCACHE_STAT_GLOBAL_MISS() \ - do { \ - if (co->co_opcache != NULL) opcache_global_misses++; \ - } while (0) - -#define OPCACHE_STAT_GLOBAL_OPT() \ - do { \ - if (co->co_opcache != NULL) opcache_global_opts++; \ - } while (0) - -#define OPCACHE_STAT_ATTR_HIT() \ - do { \ - if (co->co_opcache != NULL) opcache_attr_hits++; \ - } while (0) - -#define OPCACHE_STAT_ATTR_MISS() \ - do { \ - if (co->co_opcache != NULL) opcache_attr_misses++; \ - } while (0) - -#define OPCACHE_STAT_ATTR_OPT() \ - do { \ - if (co->co_opcache!= NULL) opcache_attr_opts++; \ - } while (0) - -#define OPCACHE_STAT_ATTR_DEOPT() \ - do { \ - if (co->co_opcache != NULL) opcache_attr_deopts++; \ - } while (0) - -#define OPCACHE_STAT_ATTR_TOTAL() \ - do { \ - if (co->co_opcache != NULL) opcache_attr_total++; \ - } while (0) - -#else /* OPCACHE_STATS */ - -#define OPCACHE_STAT_GLOBAL_HIT() -#define OPCACHE_STAT_GLOBAL_MISS() -#define OPCACHE_STAT_GLOBAL_OPT() - -#define OPCACHE_STAT_ATTR_HIT() -#define OPCACHE_STAT_ATTR_MISS() -#define OPCACHE_STAT_ATTR_OPT() -#define OPCACHE_STAT_ATTR_DEOPT() -#define OPCACHE_STAT_ATTR_TOTAL() - #define JUMP_TO_INSTRUCTION(op) goto PREDICT_ID(op) #define GET_CACHE() \ _GetSpecializedCacheEntryForInstruction(first_instr, INSTR_OFFSET(), oparg) -#endif #define DEOPT_IF(cond, instname) if (cond) { goto instname ## _miss; } @@ -1582,7 +1428,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) _Py_CODEUNIT *first_instr; PyObject *names; PyObject *consts; - _PyOpcache *co_opcache; #ifdef LLTRACE _Py_IDENTIFIER(__ltrace__); @@ -1690,21 +1535,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) f->f_stackdepth = -1; f->f_state = FRAME_EXECUTING; - if (co->co_opcache_flag < opcache_min_runs) { - co->co_opcache_flag++; - if (co->co_opcache_flag == opcache_min_runs) { - if (_PyCode_InitOpcache(co) < 0) { - goto exit_eval_frame; - } -#if OPCACHE_STATS - opcache_code_objects_extra_mem += - PyBytes_Size(co->co_code) / sizeof(_Py_CODEUNIT) + - sizeof(_PyOpcache) * co->co_opcache_size; - opcache_code_objects++; -#endif - } - } - #ifdef LLTRACE { int r = _PyDict_ContainsId(GLOBALS(), &PyId___ltrace__); @@ -2974,30 +2804,12 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) } case TARGET(LOAD_GLOBAL): { - PyObject *name; + PREDICTED(LOAD_GLOBAL); + PyObject *name = GETITEM(names, oparg); PyObject *v; if (PyDict_CheckExact(GLOBALS()) && PyDict_CheckExact(BUILTINS())) { - OPCACHE_CHECK(); - if (co_opcache != NULL && co_opcache->optimized > 0) { - _PyOpcache_LoadGlobal *lg = &co_opcache->u.lg; - - if (lg->globals_ver == - ((PyDictObject *)GLOBALS())->ma_version_tag - && lg->builtins_ver == - ((PyDictObject *)BUILTINS())->ma_version_tag) - { - PyObject *ptr = lg->ptr; - OPCACHE_STAT_GLOBAL_HIT(); - assert(ptr != NULL); - Py_INCREF(ptr); - PUSH(ptr); - DISPATCH(); - } - } - - name = GETITEM(names, oparg); v = _PyDict_LoadGlobal((PyDictObject *)GLOBALS(), (PyDictObject *)BUILTINS(), name); @@ -3010,25 +2822,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) } goto error; } - - if (co_opcache != NULL) { - _PyOpcache_LoadGlobal *lg = &co_opcache->u.lg; - - if (co_opcache->optimized == 0) { - /* Wasn't optimized before. */ - OPCACHE_STAT_GLOBAL_OPT(); - } else { - OPCACHE_STAT_GLOBAL_MISS(); - } - - co_opcache->optimized = 1; - lg->globals_ver = - ((PyDictObject *)GLOBALS())->ma_version_tag; - lg->builtins_ver = - ((PyDictObject *)BUILTINS())->ma_version_tag; - lg->ptr = v; /* borrowed */ - } - Py_INCREF(v); } else { @@ -3059,6 +2852,61 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DISPATCH(); } + case TARGET(LOAD_GLOBAL_ADAPTIVE): { + SpecializedCacheEntry *cache = GET_CACHE(); + if (cache->adaptive.counter == 0) { + PyObject *name = GETITEM(names, cache->adaptive.original_oparg); + next_instr--; + if (_Py_Specialize_LoadGlobal(GLOBALS(), BUILTINS(), next_instr, name, cache) < 0) { + goto error; + } + DISPATCH(); + } + else { + STAT_INC(LOAD_GLOBAL, deferred); + cache->adaptive.counter--; + oparg = cache->adaptive.original_oparg; + JUMP_TO_INSTRUCTION(LOAD_GLOBAL); + } + } + + case TARGET(LOAD_GLOBAL_MODULE): { + DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL); + PyDictObject *dict = (PyDictObject *)GLOBALS(); + SpecializedCacheEntry *caches = GET_CACHE(); + _PyAdaptiveEntry *cache0 = &caches[0].adaptive; + _PyLoadGlobalCache *cache1 = &caches[-1].load_global; + DEOPT_IF(dict->ma_keys->dk_version != cache1->module_keys_version, LOAD_GLOBAL); + PyDictKeyEntry *ep = DK_ENTRIES(dict->ma_keys) + cache0->index; + PyObject *res = ep->me_value; + DEOPT_IF(res == NULL, LOAD_GLOBAL); + record_cache_hit(cache0); + STAT_INC(LOAD_GLOBAL, hit); + Py_INCREF(res); + PUSH(res); + DISPATCH(); + } + + case TARGET(LOAD_GLOBAL_BUILTIN): { + DEOPT_IF(!PyDict_CheckExact(GLOBALS()), LOAD_GLOBAL); + DEOPT_IF(!PyDict_CheckExact(BUILTINS()), LOAD_GLOBAL); + PyDictObject *mdict = (PyDictObject *)GLOBALS(); + PyDictObject *bdict = (PyDictObject *)BUILTINS(); + SpecializedCacheEntry *caches = GET_CACHE(); + _PyAdaptiveEntry *cache0 = &caches[0].adaptive; + _PyLoadGlobalCache *cache1 = &caches[-1].load_global; + DEOPT_IF(mdict->ma_keys->dk_version != cache1->module_keys_version, LOAD_GLOBAL); + DEOPT_IF(bdict->ma_keys->dk_version != cache1->builtin_keys_version, LOAD_GLOBAL); + PyDictKeyEntry *ep = DK_ENTRIES(bdict->ma_keys) + cache0->index; + PyObject *res = ep->me_value; + DEOPT_IF(res == NULL, LOAD_GLOBAL); + record_cache_hit(cache0); + STAT_INC(LOAD_GLOBAL, hit); + Py_INCREF(res); + PUSH(res); + DISPATCH(); + } + case TARGET(DELETE_FAST): { PyObject *v = GETLOCAL(oparg); if (v != NULL) { @@ -3464,7 +3312,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DISPATCH(); } else { - STAT_INC(loadattr_deferred); + STAT_INC(LOAD_ATTR, deferred); cache->adaptive.counter--; oparg = cache->adaptive.original_oparg; JUMP_TO_INSTRUCTION(LOAD_ATTR); @@ -3487,9 +3335,9 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DEOPT_IF(dict->ma_keys->dk_version != cache1->dk_version_or_hint, LOAD_ATTR); res = dict->ma_values[cache0->index]; DEOPT_IF(res == NULL, LOAD_ATTR); - STAT_INC(loadattr_hit); + STAT_INC(LOAD_ATTR, hit); record_cache_hit(cache0); - STAT_INC(loadattr_hit); + STAT_INC(LOAD_ATTR, hit); Py_INCREF(res); SET_TOP(res); Py_DECREF(owner); @@ -3510,7 +3358,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) PyDictKeyEntry *ep = DK_ENTRIES(dict->ma_keys) + cache0->index; res = ep->me_value; DEOPT_IF(res == NULL, LOAD_ATTR); - STAT_INC(loadattr_hit); + STAT_INC(LOAD_ATTR, hit); record_cache_hit(cache0); Py_INCREF(res); SET_TOP(res); @@ -3538,7 +3386,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DEOPT_IF(ep->me_key != name, LOAD_ATTR); res = ep->me_value; DEOPT_IF(res == NULL, LOAD_ATTR); - STAT_INC(loadattr_hit); + STAT_INC(LOAD_ATTR, hit); record_cache_hit(cache0); Py_INCREF(res); SET_TOP(res); @@ -3558,7 +3406,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) char *addr = (char *)owner + cache0->index; res = *(PyObject **)addr; DEOPT_IF(res == NULL, LOAD_ATTR); - STAT_INC(loadattr_hit); + STAT_INC(LOAD_ATTR, hit); record_cache_hit(cache0); Py_INCREF(res); SET_TOP(res); @@ -4445,22 +4293,26 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) or goto error. */ Py_UNREACHABLE(); -/* Cache misses */ +/* Specialization misses */ -LOAD_ATTR_miss: - { - STAT_INC(loadattr_miss); - _PyAdaptiveEntry *cache = &GET_CACHE()->adaptive; - record_cache_miss(cache); - if (too_many_cache_misses(cache)) { - next_instr[-1] = _Py_MAKECODEUNIT(LOAD_ATTR_ADAPTIVE, _Py_OPARG(next_instr[-1])); - STAT_INC(loadattr_deopt); - cache_backoff(cache); - } - oparg = cache->original_oparg; - JUMP_TO_INSTRUCTION(LOAD_ATTR); +#define MISS_WITH_CACHE(opname) \ +opname ## _miss: \ + { \ + STAT_INC(opname, miss); \ + _PyAdaptiveEntry *cache = &GET_CACHE()->adaptive; \ + record_cache_miss(cache); \ + if (too_many_cache_misses(cache)) { \ + next_instr[-1] = _Py_MAKECODEUNIT(opname ## _ADAPTIVE, _Py_OPARG(next_instr[-1])); \ + STAT_INC(opname, deopt); \ + cache_backoff(cache); \ + } \ + oparg = cache->original_oparg; \ + JUMP_TO_INSTRUCTION(opname); \ } +MISS_WITH_CACHE(LOAD_ATTR) +MISS_WITH_CACHE(LOAD_GLOBAL) + error: /* Double-check exception status. */ #ifdef NDEBUG diff --git a/Python/opcode_targets.h b/Python/opcode_targets.h index 47beee7d59dbcc..ecc95dabf4693e 100644 --- a/Python/opcode_targets.h +++ b/Python/opcode_targets.h @@ -35,10 +35,10 @@ static void *opcode_targets[256] = { &&TARGET_MATCH_KEYS, &&TARGET_COPY_DICT_WITHOUT_KEYS, &&TARGET_PUSH_EXC_INFO, - &&_unknown_opcode, + &&TARGET_LOAD_GLOBAL_ADAPTIVE, &&TARGET_POP_EXCEPT_AND_RERAISE, - &&_unknown_opcode, - &&_unknown_opcode, + &&TARGET_LOAD_GLOBAL_MODULE, + &&TARGET_LOAD_GLOBAL_BUILTIN, &&_unknown_opcode, &&_unknown_opcode, &&_unknown_opcode, diff --git a/Python/specialize.c b/Python/specialize.c index d82122dfad6201..d98433bb231244 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -33,18 +33,27 @@ Py_ssize_t _Py_QuickenedCount = 0; #if SPECIALIZATION_STATS -SpecializationStats _specialization_stats = { 0 }; +SpecializationStats _specialization_stats[256] = { 0 }; + +#define PRINT_STAT(name, field) fprintf(stderr, " %s." #field " : %" PRIu64 "\n", name, stats->field); + +static void +print_stats(SpecializationStats *stats, const char *name) +{ + PRINT_STAT(name, specialization_success); + PRINT_STAT(name, specialization_failure); + PRINT_STAT(name, hit); + PRINT_STAT(name, deferred); + PRINT_STAT(name, miss); + PRINT_STAT(name, deopt); +} -#define PRINT_STAT(name) fprintf(stderr, #name " : %" PRIu64" \n", _specialization_stats.name); void _Py_PrintSpecializationStats(void) { - PRINT_STAT(specialization_success); - PRINT_STAT(specialization_failure); - PRINT_STAT(loadattr_hit); - PRINT_STAT(loadattr_deferred); - PRINT_STAT(loadattr_miss); - PRINT_STAT(loadattr_deopt); + printf("Specialization stats:\n"); + print_stats(&_specialization_stats[LOAD_ATTR], "load_attr"); + print_stats(&_specialization_stats[LOAD_GLOBAL], "load_global"); } #endif @@ -77,11 +86,13 @@ get_cache_count(SpecializedCacheOrInstruction *quickened) { Values of zero are ignored. */ static uint8_t adaptive_opcodes[256] = { [LOAD_ATTR] = LOAD_ATTR_ADAPTIVE, + [LOAD_GLOBAL] = LOAD_GLOBAL_ADAPTIVE, }; /* The number of cache entries required for a "family" of instructions. */ static uint8_t cache_requirements[256] = { - [LOAD_ATTR] = 2, + [LOAD_ATTR] = 2, /* _PyAdaptiveEntry and _PyLoadAttrCache */ + [LOAD_GLOBAL] = 2, /* _PyAdaptiveEntry and _PyLoadGlobalCache */ }; /* Return the oparg for the cache_offset and instruction index. @@ -357,14 +368,81 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, Sp } fail: - STAT_INC(specialization_failure); + STAT_INC(LOAD_ATTR, specialization_failure); assert(!PyErr_Occurred()); cache_backoff(cache0); return 0; success: - STAT_INC(specialization_success); + STAT_INC(LOAD_ATTR, specialization_success); assert(!PyErr_Occurred()); cache0->counter = saturating_start(); return 0; } + +int +_Py_Specialize_LoadGlobal( + PyObject *globals, PyObject *builtins, + _Py_CODEUNIT *instr, PyObject *name, + SpecializedCacheEntry *cache) +{ + _PyAdaptiveEntry *cache0 = &cache->adaptive; + _PyLoadGlobalCache *cache1 = &cache[-1].load_global; + assert(PyUnicode_CheckExact(name)); + if (!PyDict_CheckExact(globals)) { + goto fail; + } + if (((PyDictObject *)globals)->ma_keys->dk_kind != DICT_KEYS_UNICODE) { + goto fail; + } + PyObject *value = NULL; + Py_ssize_t index = _PyDict_GetItemHint((PyDictObject *)globals, name, -1, &value); + assert (index != DKIX_ERROR); + if (index != DKIX_EMPTY) { + if (index != (uint16_t)index) { + goto fail; + } + uint32_t keys_version = _PyDictKeys_GetVersionForCurrentState((PyDictObject *)globals); + if (keys_version == 0) { + goto fail; + } + cache1->module_keys_version = keys_version; + cache0->index = (uint16_t)index; + *instr = _Py_MAKECODEUNIT(LOAD_GLOBAL_MODULE, _Py_OPARG(*instr)); + goto success; + } + if (!PyDict_CheckExact(builtins)) { + goto fail; + } + if (((PyDictObject *)builtins)->ma_keys->dk_kind != DICT_KEYS_UNICODE) { + goto fail; + } + index = _PyDict_GetItemHint((PyDictObject *)builtins, name, -1, &value); + assert (index != DKIX_ERROR); + if (index != (uint16_t)index) { + goto fail; + } + uint32_t globals_version = _PyDictKeys_GetVersionForCurrentState((PyDictObject *)globals); + if (globals_version == 0) { + goto fail; + } + uint32_t builtins_version = _PyDictKeys_GetVersionForCurrentState((PyDictObject *)builtins); + if (builtins_version == 0) { + goto fail; + } + cache1->module_keys_version = globals_version; + cache1->builtin_keys_version = builtins_version; + cache0->index = (uint16_t)index; + *instr = _Py_MAKECODEUNIT(LOAD_GLOBAL_BUILTIN, _Py_OPARG(*instr)); + goto success; +fail: + STAT_INC(LOAD_GLOBAL, specialization_failure); + assert(!PyErr_Occurred()); + cache_backoff(cache0); + return 0; +success: + STAT_INC(LOAD_GLOBAL, specialization_success); + assert(!PyErr_Occurred()); + cache0->counter = saturating_start(); + return 0; +} From ad667a2d01c88fc8ea888af197f033c03017b85e Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Mon, 14 Jun 2021 13:38:16 +0100 Subject: [PATCH 20/64] Remove accidentally duplicated STAT_INC (GH-26718) --- Python/ceval.c | 1 - 1 file changed, 1 deletion(-) diff --git a/Python/ceval.c b/Python/ceval.c index 25d077cb26a235..79ec143f5ea327 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3337,7 +3337,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) DEOPT_IF(res == NULL, LOAD_ATTR); STAT_INC(LOAD_ATTR, hit); record_cache_hit(cache0); - STAT_INC(LOAD_ATTR, hit); Py_INCREF(res); SET_TOP(res); Py_DECREF(owner); From 6109bfac46a9eb151c4c4b9b87297ee0ab0223cf Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 14 Jun 2021 16:45:19 +0200 Subject: [PATCH 21/64] bpo-38291: Remove mention of typing.io and typing.re again (GH-26113) They were originally removed in GH-10173 per bpo-35089, but then readded in GH-21574. Cf. bpo-38291 for decision to remove. --- Doc/library/typing.rst | 12 ++++++++++-- .../2021-06-14-09-20-37.bpo-38291.VMYa_Q.rst | 2 ++ 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 Misc/NEWS.d/next/Documentation/2021-06-14-09-20-37.bpo-38291.VMYa_Q.rst diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst index ba79bb7ed75ff7..e9980a7745d694 100644 --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -1488,7 +1488,11 @@ Other concrete types Generic type ``IO[AnyStr]`` and its subclasses ``TextIO(IO[str])`` and ``BinaryIO(IO[bytes])`` represent the types of I/O streams such as returned by - :func:`open`. These types are also in the ``typing.io`` namespace. + :func:`open`. + + .. deprecated-removed:: 3.8 3.12 + These types are also in the ``typing.io`` namespace, which was + never supported by type checkers and will be removed. .. class:: Pattern Match @@ -1498,7 +1502,11 @@ Other concrete types :func:`re.match`. These types (and the corresponding functions) are generic in ``AnyStr`` and can be made specific by writing ``Pattern[str]``, ``Pattern[bytes]``, ``Match[str]``, or - ``Match[bytes]``. These types are also in the ``typing.re`` namespace. + ``Match[bytes]``. + + .. deprecated-removed:: 3.8 3.12 + These types are also in the ``typing.re`` namespace, which was + never supported by type checkers and will be removed. .. deprecated:: 3.9 Classes ``Pattern`` and ``Match`` from :mod:`re` now support ``[]``. diff --git a/Misc/NEWS.d/next/Documentation/2021-06-14-09-20-37.bpo-38291.VMYa_Q.rst b/Misc/NEWS.d/next/Documentation/2021-06-14-09-20-37.bpo-38291.VMYa_Q.rst new file mode 100644 index 00000000000000..23ce35eb176d9d --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-06-14-09-20-37.bpo-38291.VMYa_Q.rst @@ -0,0 +1,2 @@ +Mark ``typing.io`` and ``typing.re`` as deprecated since Python 3.8 in the +documentation. They were never properly supported by type checkers. From 101dc7ea62a765eeb4f8af62df0f4302dfbbe8e5 Mon Sep 17 00:00:00 2001 From: "Gabriele N. Tornetta" Date: Mon, 14 Jun 2021 15:49:05 +0100 Subject: [PATCH 22/64] Fix typo in lnotab_notes.txt (GH-26711) Thanks for your contribution @P403n1x87 --- Objects/lnotab_notes.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objects/lnotab_notes.txt b/Objects/lnotab_notes.txt index f482310a34dd3a..e52e437c65025e 100644 --- a/Objects/lnotab_notes.txt +++ b/Objects/lnotab_notes.txt @@ -67,7 +67,7 @@ def co_lines(code): table_iter = iter(code.internal_line_table): for sdelta, ldelta in table_iter: if ldelta == 0: # No change to line number, just accumulate changes to end - end += odelta + end += sdelta continue start = end end = start + sdelta From ed3d0b5d2cc12e33d0e73ea6fa3ce1369b262fb8 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Mon, 14 Jun 2021 17:46:11 +0100 Subject: [PATCH 23/64] bpo-44409: Fix error location in tokenizer errors that happen during initialization (GH-26712) --- Lib/test/test_exceptions.py | 1 + .../Core and Builtins/2021-06-13-23-12-18.bpo-44409.eW4LS-.rst | 2 ++ Parser/pegen.c | 1 + 3 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-13-23-12-18.bpo-44409.eW4LS-.rst diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 9cb5466a674d13..d444a122af9be7 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -246,6 +246,7 @@ def baz(): check("pass\npass\npass\n(1+)\npass\npass\npass", 4, 4) check("(1+)", 1, 4) check("[interesting\nfoo()\n", 1, 1) + check(b"\xef\xbb\xbf#coding: utf8\nprint('\xe6\x88\x91')\n", 0, -1) # Errors thrown by symtable.c check('x = [(yield i) for i in range(3)]', 1, 5) diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-06-13-23-12-18.bpo-44409.eW4LS-.rst b/Misc/NEWS.d/next/Core and Builtins/2021-06-13-23-12-18.bpo-44409.eW4LS-.rst new file mode 100644 index 00000000000000..0f204ed812b27a --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-06-13-23-12-18.bpo-44409.eW4LS-.rst @@ -0,0 +1,2 @@ +Fix error location information for tokenizer errors raised on initialization +of the tokenizer. Patch by Pablo Galindo. diff --git a/Parser/pegen.c b/Parser/pegen.c index 19412446b118ab..615047c1b6a007 100644 --- a/Parser/pegen.c +++ b/Parser/pegen.c @@ -283,6 +283,7 @@ static void raise_tokenizer_init_error(PyObject *filename) { if (!(PyErr_ExceptionMatches(PyExc_LookupError) + || PyErr_ExceptionMatches(PyExc_SyntaxError) || PyErr_ExceptionMatches(PyExc_ValueError) || PyErr_ExceptionMatches(PyExc_UnicodeDecodeError))) { return; From 44d2ad8d2fabfa934a39b3b0fad619033e7c0d97 Mon Sep 17 00:00:00 2001 From: andrei kulakov Date: Mon, 14 Jun 2021 22:42:46 -0400 Subject: [PATCH 24/64] Fix a typo in _make_class_unpicklable() docstring (GH-26729) --- Lib/enum.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/enum.py b/Lib/enum.py index 0c6d8c1eb0e544..49c46ea86dbacf 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -79,7 +79,7 @@ def _make_class_unpicklable(obj): """ Make the given obj un-picklable. - obj should be either a dictionary, on an Enum + obj should be either a dictionary, or an Enum """ def _break_on_call_reduce(self, proto): raise TypeError('%r cannot be pickled' % self) From 77b67cbaff06142f3b7c10641d555c6d113a9f5c Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Tue, 15 Jun 2021 13:01:42 +0100 Subject: [PATCH 25/64] Add extra stats for attribute misses (GH-26732) --- Include/internal/pycore_code.h | 5 ++ Python/specialize.c | 87 +++++++++++++++++++++++++++++++++- 2 files changed, 90 insertions(+), 2 deletions(-) diff --git a/Include/internal/pycore_code.h b/Include/internal/pycore_code.h index 098fbe47755c50..a471c20265cbf7 100644 --- a/Include/internal/pycore_code.h +++ b/Include/internal/pycore_code.h @@ -325,6 +325,8 @@ int _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name int _Py_Specialize_LoadGlobal(PyObject *globals, PyObject *builtins, _Py_CODEUNIT *instr, PyObject *name, SpecializedCacheEntry *cache); #define SPECIALIZATION_STATS 0 +#define SPECIALIZATION_STATS_DETAILED 0 + #if SPECIALIZATION_STATS typedef struct _stats { @@ -334,6 +336,9 @@ typedef struct _stats { uint64_t deferred; uint64_t miss; uint64_t deopt; +#if SPECIALIZATION_STATS_DETAILED + PyObject *miss_types; +#endif } SpecializationStats; extern SpecializationStats _specialization_stats[256]; diff --git a/Python/specialize.c b/Python/specialize.c index d98433bb231244..ca3dcdac4d0396 100644 --- a/Python/specialize.c +++ b/Python/specialize.c @@ -2,6 +2,7 @@ #include "Python.h" #include "pycore_code.h" #include "pycore_dict.h" +#include "pycore_long.h" #include "pycore_moduleobject.h" #include "opcode.h" #include "structmember.h" // struct PyMemberDef, T_OFFSET_EX @@ -46,6 +47,24 @@ print_stats(SpecializationStats *stats, const char *name) PRINT_STAT(name, deferred); PRINT_STAT(name, miss); PRINT_STAT(name, deopt); +#if SPECIALIZATION_STATS_DETAILED + if (stats->miss_types == NULL) { + return; + } + fprintf(stderr, " %s.fails:\n", name); + PyObject *key, *count; + Py_ssize_t pos = 0; + while (PyDict_Next(stats->miss_types, &pos, &key, &count)) { + PyObject *type = PyTuple_GetItem(key, 0); + PyObject *name = PyTuple_GetItem(key, 1); + PyObject *kind = PyTuple_GetItem(key, 2); + fprintf(stderr, " %s.", ((PyTypeObject *)type)->tp_name); + PyObject_Print(name, stderr, Py_PRINT_RAW); + fprintf(stderr, " ("); + PyObject_Print(kind, stderr, Py_PRINT_RAW); + fprintf(stderr, "): %ld\n", PyLong_AsLong(count)); + } +#endif } void @@ -56,6 +75,57 @@ _Py_PrintSpecializationStats(void) print_stats(&_specialization_stats[LOAD_GLOBAL], "load_global"); } +#if SPECIALIZATION_STATS_DETAILED +void +_Py_IncrementTypeCounter(int opcode, PyObject *type, PyObject *name, const char *kind) +{ + PyObject *counter = _specialization_stats[opcode].miss_types; + if (counter == NULL) { + _specialization_stats[opcode].miss_types = PyDict_New(); + counter = _specialization_stats[opcode].miss_types; + if (counter == NULL) { + return; + } + } + PyObject *key = NULL; + PyObject *kind_object = _PyUnicode_FromASCII(kind, strlen(kind)); + if (kind_object == NULL) { + PyErr_Clear(); + goto done; + } + key = PyTuple_Pack(3, type, name, kind_object); + if (key == NULL) { + PyErr_Clear(); + goto done; + } + PyObject *count = PyDict_GetItem(counter, key); + if (count == NULL) { + count = _PyLong_GetZero(); + if (PyDict_SetItem(counter, key, count) < 0) { + PyErr_Clear(); + goto done; + } + } + count = PyNumber_Add(count, _PyLong_GetOne()); + if (count == NULL) { + PyErr_Clear(); + goto done; + } + if (PyDict_SetItem(counter, key, count)) { + PyErr_Clear(); + } +done: + Py_XDECREF(kind_object); + Py_XDECREF(key); +} + +#define SPECIALIZATION_FAIL(opcode, type, attribute, kind) _Py_IncrementTypeCounter(opcode, (PyObject *)(type), attribute, kind) + +#endif +#endif + +#ifndef SPECIALIZATION_FAIL +#define SPECIALIZATION_FAIL(opcode, type, attribute, kind) ((void)0) #endif static SpecializedCacheOrInstruction * @@ -243,28 +313,34 @@ specialize_module_load_attr( _Py_IDENTIFIER(__getattr__); PyDictObject *dict = (PyDictObject *)m->md_dict; if (dict == NULL) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "no __dict__"); return -1; } if (dict->ma_keys->dk_kind != DICT_KEYS_UNICODE) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "non-string keys (or split)"); return -1; } getattr = _PyUnicode_FromId(&PyId___getattr__); /* borrowed */ if (getattr == NULL) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "module.__getattr__ overridden"); PyErr_Clear(); return -1; } Py_ssize_t index = _PyDict_GetItemHint(dict, getattr, -1, &value); assert(index != DKIX_ERROR); if (index != DKIX_EMPTY) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "module attribute not found"); return -1; } index = _PyDict_GetItemHint(dict, name, -1, &value); assert (index != DKIX_ERROR); if (index != (uint16_t)index) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "index out of range"); return -1; } uint32_t keys_version = _PyDictKeys_GetVersionForCurrentState(dict); if (keys_version == 0) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "no more key versions"); return -1; } cache1->dk_version_or_hint = keys_version; @@ -287,6 +363,7 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, Sp } PyTypeObject *type = Py_TYPE(owner); if (type->tp_getattro != PyObject_GenericGetAttr) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "__getattribute__ overridden"); goto fail; } if (type->tp_dict == NULL) { @@ -299,17 +376,19 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, Sp // We found an attribute with a data-like descriptor. PyTypeObject *dtype = Py_TYPE(descr); if (dtype != &PyMemberDescr_Type) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "not a member descriptor"); goto fail; } // It's a slot PyMemberDescrObject *member = (PyMemberDescrObject *)descr; struct PyMemberDef *dmem = member->d_member; if (dmem->type != T_OBJECT_EX) { - // It's a slot of a different type. We don't handle those. + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "non-object slot"); goto fail; } Py_ssize_t offset = dmem->offset; if (offset != (uint16_t)offset) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "offset out of range"); goto fail; } assert(offset > 0); @@ -320,11 +399,12 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, Sp } // No desciptor if (type->tp_dictoffset <= 0) { - // No dictionary, or computed offset dictionary + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "no dict or negative offset"); goto fail; } PyObject **dictptr = (PyObject **) ((char *)owner + type->tp_dictoffset); if (*dictptr == NULL || !PyDict_CheckExact(*dictptr)) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "no dict or not a dict"); goto fail; } // We found an instance with a __dict__. @@ -342,10 +422,12 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, Sp Py_ssize_t index = _Py_dict_lookup(dict, name, hash, &value); assert (index != DKIX_ERROR); if (index != (uint16_t)index) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "index out of range"); goto fail; } uint32_t keys_version = _PyDictKeys_GetVersionForCurrentState(dict); if (keys_version == 0) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "no more key versions"); goto fail; } cache1->dk_version_or_hint = keys_version; @@ -359,6 +441,7 @@ _Py_Specialize_LoadAttr(PyObject *owner, _Py_CODEUNIT *instr, PyObject *name, Sp Py_ssize_t hint = _PyDict_GetItemHint(dict, name, -1, &value); if (hint != (uint32_t)hint) { + SPECIALIZATION_FAIL(LOAD_ATTR, Py_TYPE(owner), name, "hint out of range"); goto fail; } cache1->dk_version_or_hint = (uint32_t)hint; From 1628fb8251cbf5df5aed0b68c41d0ff7cb3f6a71 Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Tue, 15 Jun 2021 14:47:34 +0200 Subject: [PATCH 26/64] bpo-42064: Move sqlite3 types to global state (GH-26537) * Move connection type to global state * Move cursor type to global state * Move prepare protocol type to global state * Move row type to global state * Move statement type to global state * ADD_TYPE takes a pointer * pysqlite_get_state is now static inline --- Modules/_sqlite/clinic/connection.c.h | 6 ++--- Modules/_sqlite/clinic/cursor.c.h | 8 +++---- Modules/_sqlite/clinic/module.c.h | 4 ++-- Modules/_sqlite/clinic/row.c.h | 8 +++---- Modules/_sqlite/connection.c | 24 +++++++++++-------- Modules/_sqlite/cursor.c | 19 ++++++++------- Modules/_sqlite/microprotocols.c | 6 ++--- Modules/_sqlite/module.c | 34 ++++++++++++++------------- Modules/_sqlite/module.h | 13 +++++++++- Modules/_sqlite/prepare_protocol.c | 8 +++---- Modules/_sqlite/row.c | 22 ++++++++++------- Modules/_sqlite/statement.c | 21 ++++++++++++----- 12 files changed, 103 insertions(+), 70 deletions(-) diff --git a/Modules/_sqlite/clinic/connection.c.h b/Modules/_sqlite/clinic/connection.c.h index f231ecc2ae78be..41104e23dfdee2 100644 --- a/Modules/_sqlite/clinic/connection.c.h +++ b/Modules/_sqlite/clinic/connection.c.h @@ -552,8 +552,8 @@ pysqlite_connection_backup(pysqlite_Connection *self, PyObject *const *args, Py_ if (!args) { goto exit; } - if (!PyObject_TypeCheck(args[0], pysqlite_ConnectionType)) { - _PyArg_BadArgument("backup", "argument 'target'", (pysqlite_ConnectionType)->tp_name, args[0]); + if (!PyObject_TypeCheck(args[0], clinic_state()->ConnectionType)) { + _PyArg_BadArgument("backup", "argument 'target'", (clinic_state()->ConnectionType)->tp_name, args[0]); goto exit; } target = (pysqlite_Connection *)args[0]; @@ -710,4 +710,4 @@ pysqlite_connection_exit(pysqlite_Connection *self, PyObject *const *args, Py_ss #ifndef PYSQLITE_CONNECTION_LOAD_EXTENSION_METHODDEF #define PYSQLITE_CONNECTION_LOAD_EXTENSION_METHODDEF #endif /* !defined(PYSQLITE_CONNECTION_LOAD_EXTENSION_METHODDEF) */ -/*[clinic end generated code: output=c1bf09db3bcd0105 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1ee2f6173f4acec3 input=a9049054013a1b77]*/ diff --git a/Modules/_sqlite/clinic/cursor.c.h b/Modules/_sqlite/clinic/cursor.c.h index 7a79d74818a2e2..b519094bf353fe 100644 --- a/Modules/_sqlite/clinic/cursor.c.h +++ b/Modules/_sqlite/clinic/cursor.c.h @@ -12,15 +12,15 @@ pysqlite_cursor_init(PyObject *self, PyObject *args, PyObject *kwargs) int return_value = -1; pysqlite_Connection *connection; - if (Py_IS_TYPE(self, pysqlite_CursorType) && + if (Py_IS_TYPE(self, clinic_state()->CursorType) && !_PyArg_NoKeywords("Cursor", kwargs)) { goto exit; } if (!_PyArg_CheckPositional("Cursor", PyTuple_GET_SIZE(args), 1, 1)) { goto exit; } - if (!PyObject_TypeCheck(PyTuple_GET_ITEM(args, 0), pysqlite_ConnectionType)) { - _PyArg_BadArgument("Cursor", "argument 1", (pysqlite_ConnectionType)->tp_name, PyTuple_GET_ITEM(args, 0)); + if (!PyObject_TypeCheck(PyTuple_GET_ITEM(args, 0), clinic_state()->ConnectionType)) { + _PyArg_BadArgument("Cursor", "argument 1", (clinic_state()->ConnectionType)->tp_name, PyTuple_GET_ITEM(args, 0)); goto exit; } connection = (pysqlite_Connection *)PyTuple_GET_ITEM(args, 0); @@ -259,4 +259,4 @@ pysqlite_cursor_close(pysqlite_Cursor *self, PyObject *Py_UNUSED(ignored)) { return pysqlite_cursor_close_impl(self); } -/*[clinic end generated code: output=6a2d4d49784aa686 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e3a502bb26aaefa5 input=a9049054013a1b77]*/ diff --git a/Modules/_sqlite/clinic/module.c.h b/Modules/_sqlite/clinic/module.c.h index fb1e1187b209f8..18557355061fa8 100644 --- a/Modules/_sqlite/clinic/module.c.h +++ b/Modules/_sqlite/clinic/module.c.h @@ -198,7 +198,7 @@ pysqlite_adapt(PyObject *module, PyObject *const *args, Py_ssize_t nargs) { PyObject *return_value = NULL; PyObject *obj; - PyObject *proto = (PyObject*)pysqlite_PrepareProtocolType; + PyObject *proto = (PyObject *)clinic_state()->PrepareProtocolType; PyObject *alt = NULL; if (!_PyArg_CheckPositional("adapt", nargs, 1, 3)) { @@ -219,4 +219,4 @@ pysqlite_adapt(PyObject *module, PyObject *const *args, Py_ssize_t nargs) exit: return return_value; } -/*[clinic end generated code: output=d87990f941c209fa input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e9c2442673289cab input=a9049054013a1b77]*/ diff --git a/Modules/_sqlite/clinic/row.c.h b/Modules/_sqlite/clinic/row.c.h index 7ff110940d0b61..310d62b8a7f49a 100644 --- a/Modules/_sqlite/clinic/row.c.h +++ b/Modules/_sqlite/clinic/row.c.h @@ -13,15 +13,15 @@ pysqlite_row_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) pysqlite_Cursor *cursor; PyObject *data; - if ((type == pysqlite_RowType) && + if ((type == clinic_state()->RowType) && !_PyArg_NoKeywords("Row", kwargs)) { goto exit; } if (!_PyArg_CheckPositional("Row", PyTuple_GET_SIZE(args), 2, 2)) { goto exit; } - if (!PyObject_TypeCheck(PyTuple_GET_ITEM(args, 0), pysqlite_CursorType)) { - _PyArg_BadArgument("Row", "argument 1", (pysqlite_CursorType)->tp_name, PyTuple_GET_ITEM(args, 0)); + if (!PyObject_TypeCheck(PyTuple_GET_ITEM(args, 0), clinic_state()->CursorType)) { + _PyArg_BadArgument("Row", "argument 1", (clinic_state()->CursorType)->tp_name, PyTuple_GET_ITEM(args, 0)); goto exit; } cursor = (pysqlite_Cursor *)PyTuple_GET_ITEM(args, 0); @@ -53,4 +53,4 @@ pysqlite_row_keys(pysqlite_Row *self, PyObject *Py_UNUSED(ignored)) { return pysqlite_row_keys_impl(self); } -/*[clinic end generated code: output=8d29220b9cde035d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0382771b4fc85f36 input=a9049054013a1b77]*/ diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 9199c347caab0d..915515c0a195a1 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -36,12 +36,15 @@ #define HAVE_TRACE_V2 #endif +#define clinic_state() (pysqlite_get_state(NULL)) #include "clinic/connection.c.h" +#undef clinic_state + /*[clinic input] module _sqlite3 -class _sqlite3.Connection "pysqlite_Connection *" "pysqlite_ConnectionType" +class _sqlite3.Connection "pysqlite_Connection *" "clinic_state()->ConnectionType" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=aa796073bd8f69db]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=67369db2faf80891]*/ _Py_IDENTIFIER(cursor); @@ -339,14 +342,15 @@ pysqlite_connection_cursor_impl(pysqlite_Connection *self, PyObject *factory) return NULL; } + pysqlite_state *state = pysqlite_get_state(NULL); if (factory == NULL) { - factory = (PyObject*)pysqlite_CursorType; + factory = (PyObject *)state->CursorType; } cursor = PyObject_CallOneArg(factory, (PyObject *)self); if (cursor == NULL) return NULL; - if (!PyObject_TypeCheck(cursor, pysqlite_CursorType)) { + if (!PyObject_TypeCheck(cursor, state->CursorType)) { PyErr_Format(PyExc_TypeError, "factory must return a cursor, not %.100s", Py_TYPE(cursor)->tp_name); @@ -1592,7 +1596,7 @@ pysqlite_connection_iterdump_impl(pysqlite_Connection *self) /*[clinic input] _sqlite3.Connection.backup as pysqlite_connection_backup - target: object(type='pysqlite_Connection *', subclass_of='pysqlite_ConnectionType') + target: object(type='pysqlite_Connection *', subclass_of='clinic_state()->ConnectionType') * pages: int = -1 progress: object = None @@ -1607,7 +1611,7 @@ pysqlite_connection_backup_impl(pysqlite_Connection *self, pysqlite_Connection *target, int pages, PyObject *progress, const char *name, double sleep) -/*[clinic end generated code: output=306a3e6a38c36334 input=30ae45fc420bfd3b]*/ +/*[clinic end generated code: output=306a3e6a38c36334 input=c759627ab1ad46ff]*/ { int rc; int sleep_ms = (int)(sleep * 1000.0); @@ -1914,14 +1918,14 @@ static PyType_Spec connection_spec = { .slots = connection_slots, }; -PyTypeObject *pysqlite_ConnectionType = NULL; - int pysqlite_connection_setup_types(PyObject *module) { - pysqlite_ConnectionType = (PyTypeObject *)PyType_FromModuleAndSpec(module, &connection_spec, NULL); - if (pysqlite_ConnectionType == NULL) { + PyObject *type = PyType_FromModuleAndSpec(module, &connection_spec, NULL); + if (type == NULL) { return -1; } + pysqlite_state *state = pysqlite_get_state(module); + state->ConnectionType = (PyTypeObject *)type; return 0; } diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index c2e8de5b6c0f00..8c8a347f46e57a 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -24,20 +24,23 @@ #include "cursor.h" #include "module.h" #include "util.h" + +#define clinic_state() (pysqlite_get_state(NULL)) #include "clinic/cursor.c.h" +#undef clinic_state /*[clinic input] module _sqlite3 -class _sqlite3.Cursor "pysqlite_Cursor *" "pysqlite_CursorType" +class _sqlite3.Cursor "pysqlite_Cursor *" "clinic_state()->CursorType" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=b2072d8db95411d5]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=3c5b8115c5cf30f1]*/ static const char errmsg_fetch_across_rollback[] = "Cursor needed to be reset because of commit/rollback and can no longer be fetched from."; /*[clinic input] _sqlite3.Cursor.__init__ as pysqlite_cursor_init - connection: object(type='pysqlite_Connection *', subclass_of='pysqlite_ConnectionType') + connection: object(type='pysqlite_Connection *', subclass_of='clinic_state()->ConnectionType') / [clinic start generated code]*/ @@ -45,7 +48,7 @@ _sqlite3.Cursor.__init__ as pysqlite_cursor_init static int pysqlite_cursor_init_impl(pysqlite_Cursor *self, pysqlite_Connection *connection) -/*[clinic end generated code: output=ac59dce49a809ca8 input=a8a4f75ac90999b2]*/ +/*[clinic end generated code: output=ac59dce49a809ca8 input=23d4265b534989fb]*/ { Py_INCREF(connection); Py_XSETREF(self->connection, connection); @@ -1079,14 +1082,14 @@ static PyType_Spec cursor_spec = { .slots = cursor_slots, }; -PyTypeObject *pysqlite_CursorType = NULL; - int pysqlite_cursor_setup_types(PyObject *module) { - pysqlite_CursorType = (PyTypeObject *)PyType_FromModuleAndSpec(module, &cursor_spec, NULL); - if (pysqlite_CursorType == NULL) { + PyObject *type = PyType_FromModuleAndSpec(module, &cursor_spec, NULL); + if (type == NULL) { return -1; } + pysqlite_state *state = pysqlite_get_state(module); + state->CursorType = (PyTypeObject *)type; return 0; } diff --git a/Modules/_sqlite/microprotocols.c b/Modules/_sqlite/microprotocols.c index e219a7239f8a7d..b2d6e7c427031f 100644 --- a/Modules/_sqlite/microprotocols.c +++ b/Modules/_sqlite/microprotocols.c @@ -58,8 +58,8 @@ pysqlite_microprotocols_add(PyTypeObject *type, PyObject *proto, PyObject *cast) PyObject* key; int rc; - if (proto == NULL) proto = (PyObject*)pysqlite_PrepareProtocolType; - + assert(type != NULL); + assert(proto != NULL); key = Py_BuildValue("(OO)", (PyObject*)type, proto); if (!key) { return -1; @@ -81,7 +81,7 @@ pysqlite_microprotocols_adapt(PyObject *obj, PyObject *proto, PyObject *alt) PyObject *adapter, *key, *adapted; /* we don't check for exact type conformance as specified in PEP 246 - because the pysqlite_PrepareProtocolType type is abstract and there is no + because the PrepareProtocolType type is abstract and there is no way to get a quotable object to be its instance */ /* look for an adapter in the registry */ diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index c60007e2059536..9587cbd4b9971c 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -32,7 +32,10 @@ #error "SQLite 3.7.15 or higher required" #endif +#define clinic_state() (pysqlite_get_state(NULL)) #include "clinic/module.c.h" +#undef clinic_state + /*[clinic input] module _sqlite3 [clinic start generated code]*/ @@ -57,12 +60,6 @@ int pysqlite_BaseTypeAdapted = 0; pysqlite_state pysqlite_global_state; -pysqlite_state * -pysqlite_get_state(PyObject *Py_UNUSED(module)) -{ - return &pysqlite_global_state; -} - static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* kwargs) { @@ -93,7 +90,8 @@ static PyObject* module_connect(PyObject* self, PyObject* args, PyObject* } if (factory == NULL) { - factory = (PyObject*)pysqlite_ConnectionType; + pysqlite_state *state = pysqlite_get_state(self); + factory = (PyObject *)state->ConnectionType; } return PyObject_Call(factory, args, kwargs); @@ -176,9 +174,12 @@ pysqlite_register_adapter_impl(PyObject *module, PyTypeObject *type, pysqlite_BaseTypeAdapted = 1; } - rc = pysqlite_microprotocols_add(type, (PyObject*)pysqlite_PrepareProtocolType, caster); - if (rc == -1) + pysqlite_state *state = pysqlite_get_state(NULL); + PyObject *protocol = (PyObject *)state->PrepareProtocolType; + rc = pysqlite_microprotocols_add(type, protocol, caster); + if (rc == -1) { return NULL; + } Py_RETURN_NONE; } @@ -240,7 +241,7 @@ pysqlite_enable_callback_trace_impl(PyObject *module, int enable) _sqlite3.adapt as pysqlite_adapt obj: object - proto: object(c_default='(PyObject*)pysqlite_PrepareProtocolType') = PrepareProtocolType + proto: object(c_default='(PyObject *)clinic_state()->PrepareProtocolType') = PrepareProtocolType alt: object = NULL / @@ -250,7 +251,7 @@ Adapt given object to given protocol. Non-standard. static PyObject * pysqlite_adapt_impl(PyObject *module, PyObject *obj, PyObject *proto, PyObject *alt) -/*[clinic end generated code: output=0c3927c5fcd23dd9 input=a58ab77fb5ae22dd]*/ +/*[clinic end generated code: output=0c3927c5fcd23dd9 input=c8995aeb25d0e542]*/ { return pysqlite_microprotocols_adapt(obj, proto, alt); } @@ -358,7 +359,7 @@ static struct PyModuleDef _sqlite3module = { #define ADD_TYPE(module, type) \ do { \ - if (PyModule_AddType(module, &type) < 0) { \ + if (PyModule_AddType(module, type) < 0) { \ goto error; \ } \ } while (0) @@ -392,6 +393,7 @@ PyMODINIT_FUNC PyInit__sqlite3(void) } module = PyModule_Create(&_sqlite3module); + pysqlite_state *state = pysqlite_get_state(module); if (!module || (pysqlite_row_setup_types(module) < 0) || @@ -403,10 +405,10 @@ PyMODINIT_FUNC PyInit__sqlite3(void) goto error; } - ADD_TYPE(module, *pysqlite_ConnectionType); - ADD_TYPE(module, *pysqlite_CursorType); - ADD_TYPE(module, *pysqlite_PrepareProtocolType); - ADD_TYPE(module, *pysqlite_RowType); + ADD_TYPE(module, state->ConnectionType); + ADD_TYPE(module, state->CursorType); + ADD_TYPE(module, state->PrepareProtocolType); + ADD_TYPE(module, state->RowType); /*** Create DB-API Exception hierarchy */ ADD_EXCEPTION(module, "Error", pysqlite_Error, PyExc_Exception); diff --git a/Modules/_sqlite/module.h b/Modules/_sqlite/module.h index a40e86e9c4da72..3f29035b5fe68a 100644 --- a/Modules/_sqlite/module.h +++ b/Modules/_sqlite/module.h @@ -31,9 +31,20 @@ typedef struct { PyObject *lru_cache; + PyTypeObject *ConnectionType; + PyTypeObject *CursorType; + PyTypeObject *PrepareProtocolType; + PyTypeObject *RowType; + PyTypeObject *StatementType; } pysqlite_state; -extern pysqlite_state *pysqlite_get_state(PyObject *module); +extern pysqlite_state pysqlite_global_state; + +static inline pysqlite_state * +pysqlite_get_state(PyObject *Py_UNUSED(module)) +{ + return &pysqlite_global_state; +} extern PyObject* pysqlite_Error; extern PyObject* pysqlite_Warning; diff --git a/Modules/_sqlite/prepare_protocol.c b/Modules/_sqlite/prepare_protocol.c index ece42f4df6f5ac..1f9d7b751d209b 100644 --- a/Modules/_sqlite/prepare_protocol.c +++ b/Modules/_sqlite/prepare_protocol.c @@ -60,14 +60,14 @@ static PyType_Spec type_spec = { .slots = type_slots, }; -PyTypeObject *pysqlite_PrepareProtocolType = NULL; - int pysqlite_prepare_protocol_setup_types(PyObject *module) { - pysqlite_PrepareProtocolType = (PyTypeObject *)PyType_FromModuleAndSpec(module, &type_spec, NULL); - if (pysqlite_PrepareProtocolType == NULL) { + PyObject *type = PyType_FromModuleAndSpec(module, &type_spec, NULL); + if (type == NULL) { return -1; } + pysqlite_state *state = pysqlite_get_state(module); + state->PrepareProtocolType = (PyTypeObject *)type; return 0; } diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c index 24722be49082cf..bf43dad4473aae 100644 --- a/Modules/_sqlite/row.c +++ b/Modules/_sqlite/row.c @@ -23,13 +23,16 @@ #include "row.h" #include "cursor.h" + +#define clinic_state() (pysqlite_get_state(NULL)) #include "clinic/row.c.h" +#undef clinic_state /*[clinic input] module _sqlite3 -class _sqlite3.Row "pysqlite_Row *" "pysqlite_RowType" +class _sqlite3.Row "pysqlite_Row *" "clinic_state()->RowType" [clinic start generated code]*/ -/*[clinic end generated code: output=da39a3ee5e6b4b0d input=384227da65f250fd]*/ +/*[clinic end generated code: output=da39a3ee5e6b4b0d input=966c53403d7f3a40]*/ static int row_clear(pysqlite_Row *self) @@ -62,7 +65,7 @@ pysqlite_row_dealloc(PyObject *self) @classmethod _sqlite3.Row.__new__ as pysqlite_row_new - cursor: object(type='pysqlite_Cursor *', subclass_of='pysqlite_CursorType') + cursor: object(type='pysqlite_Cursor *', subclass_of='clinic_state()->CursorType') data: object(subclass_of='&PyTuple_Type') / @@ -71,7 +74,7 @@ _sqlite3.Row.__new__ as pysqlite_row_new static PyObject * pysqlite_row_new_impl(PyTypeObject *type, pysqlite_Cursor *cursor, PyObject *data) -/*[clinic end generated code: output=10d58b09a819a4c1 input=f6cd7e6e0935828d]*/ +/*[clinic end generated code: output=10d58b09a819a4c1 input=b9e954ca31345dbf]*/ { pysqlite_Row *self; @@ -216,7 +219,8 @@ static PyObject* pysqlite_row_richcompare(pysqlite_Row *self, PyObject *_other, if (opid != Py_EQ && opid != Py_NE) Py_RETURN_NOTIMPLEMENTED; - if (PyObject_TypeCheck(_other, pysqlite_RowType)) { + pysqlite_state *state = pysqlite_get_state(NULL); + if (PyObject_TypeCheck(_other, state->RowType)) { pysqlite_Row *other = (pysqlite_Row *)_other; int eq = PyObject_RichCompareBool(self->description, other->description, Py_EQ); if (eq < 0) { @@ -258,14 +262,14 @@ static PyType_Spec row_spec = { .slots = row_slots, }; -PyTypeObject *pysqlite_RowType = NULL; - int pysqlite_row_setup_types(PyObject *module) { - pysqlite_RowType = (PyTypeObject *)PyType_FromModuleAndSpec(module, &row_spec, NULL); - if (pysqlite_RowType == NULL) { + PyObject *type = PyType_FromModuleAndSpec(module, &row_spec, NULL); + if (type == NULL) { return -1; } + pysqlite_state *state = pysqlite_get_state(module); + state->RowType = (PyTypeObject *)type; return 0; } diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index eca225820cd75e..89fe4bbec3ea43 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -110,8 +110,9 @@ pysqlite_statement_create(pysqlite_Connection *connection, PyObject *sql) break; } + pysqlite_state *state = pysqlite_get_state(NULL); pysqlite_Statement *self = PyObject_GC_New(pysqlite_Statement, - pysqlite_StatementType); + state->StatementType); if (self == NULL) { goto error; } @@ -223,6 +224,7 @@ static int _need_adapt(PyObject* obj) void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* parameters) { + pysqlite_state *state = pysqlite_get_state(NULL); PyObject* current_param; PyObject* adapted; const char* binding_name; @@ -271,7 +273,10 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para if (!_need_adapt(current_param)) { adapted = current_param; } else { - adapted = pysqlite_microprotocols_adapt(current_param, (PyObject*)pysqlite_PrepareProtocolType, current_param); + PyObject *protocol = (PyObject *)state->PrepareProtocolType; + adapted = pysqlite_microprotocols_adapt(current_param, + protocol, + current_param); Py_DECREF(current_param); if (!adapted) { return; @@ -322,7 +327,10 @@ void pysqlite_statement_bind_parameters(pysqlite_Statement* self, PyObject* para if (!_need_adapt(current_param)) { adapted = current_param; } else { - adapted = pysqlite_microprotocols_adapt(current_param, (PyObject*)pysqlite_PrepareProtocolType, current_param); + PyObject *protocol = (PyObject *)state->PrepareProtocolType; + adapted = pysqlite_microprotocols_adapt(current_param, + protocol, + current_param); Py_DECREF(current_param); if (!adapted) { return; @@ -497,14 +505,15 @@ static PyType_Spec stmt_spec = { .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, .slots = stmt_slots, }; -PyTypeObject *pysqlite_StatementType = NULL; int pysqlite_statement_setup_types(PyObject *module) { - pysqlite_StatementType = (PyTypeObject *)PyType_FromModuleAndSpec(module, &stmt_spec, NULL); - if (pysqlite_StatementType == NULL) { + PyObject *type = PyType_FromModuleAndSpec(module, &stmt_spec, NULL); + if (type == NULL) { return -1; } + pysqlite_state *state = pysqlite_get_state(module); + state->StatementType = (PyTypeObject *)type; return 0; } From c60a9c6b05b125c4be0310ff8c6e149c4eb4ca85 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 15 Jun 2021 15:09:24 +0200 Subject: [PATCH 27/64] bpo-42972: _thread.RLock implements the GH protocol (GH-26734) The _thread.RLock type now fully implement the GC protocol: add a traverse function and the Py_TPFLAGS_HAVE_GC flag. --- .../Library/2021-06-15-13-51-25.bpo-42972.UnyYo1.rst | 2 ++ Modules/_threadmodule.c | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2021-06-15-13-51-25.bpo-42972.UnyYo1.rst diff --git a/Misc/NEWS.d/next/Library/2021-06-15-13-51-25.bpo-42972.UnyYo1.rst b/Misc/NEWS.d/next/Library/2021-06-15-13-51-25.bpo-42972.UnyYo1.rst new file mode 100644 index 00000000000000..fbcc12c9f90a20 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-15-13-51-25.bpo-42972.UnyYo1.rst @@ -0,0 +1,2 @@ +The _thread.RLock type now fully implement the GC protocol: add a traverse +function and the :const:`Py_TPFLAGS_HAVE_GC` flag. Patch by Victor Stinner. diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index d4d5c0acff8677..3f7f1d23bc90da 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -327,6 +327,14 @@ typedef struct { PyObject *in_weakreflist; } rlockobject; +static int +rlock_traverse(rlockobject *self, visitproc visit, void *arg) +{ + Py_VISIT(Py_TYPE(self)); + return 0; +} + + static void rlock_dealloc(rlockobject *self) { @@ -579,13 +587,14 @@ static PyType_Slot rlock_type_slots[] = { {Py_tp_alloc, PyType_GenericAlloc}, {Py_tp_new, rlock_new}, {Py_tp_members, rlock_type_members}, + {Py_tp_traverse, rlock_traverse}, {0, 0}, }; static PyType_Spec rlock_type_spec = { .name = "_thread.RLock", .basicsize = sizeof(rlockobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, .slots = rlock_type_slots, }; From 1d63579070c366bb3ca3c5f94ac098255ec9e461 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 15 Jun 2021 16:14:24 +0200 Subject: [PATCH 28/64] bpo-44422: Fix threading.enumerate() reentrant call (GH-26727) The threading.enumerate() function now uses a reentrant lock to prevent a hang on reentrant call. --- Lib/threading.py | 9 ++++++--- .../Library/2021-06-14-23-28-17.bpo-44422.BlWOgv.rst | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-06-14-23-28-17.bpo-44422.BlWOgv.rst diff --git a/Lib/threading.py b/Lib/threading.py index 6c3d49c2d52679..766011fa0312b3 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -775,8 +775,11 @@ class BrokenBarrierError(RuntimeError): def _newname(name_template): return name_template % _counter() -# Active thread administration -_active_limbo_lock = _allocate_lock() +# Active thread administration. +# +# bpo-44422: Use a reentrant lock to allow reentrant calls to functions like +# threading.enumerate(). +_active_limbo_lock = RLock() _active = {} # maps thread id to Thread object _limbo = {} _dangling = WeakSet() @@ -1564,7 +1567,7 @@ def _after_fork(): # by another (non-forked) thread. http://bugs.python.org/issue874900 global _active_limbo_lock, _main_thread global _shutdown_locks_lock, _shutdown_locks - _active_limbo_lock = _allocate_lock() + _active_limbo_lock = RLock() # fork() only copied the current thread; clear references to others. new_active = {} diff --git a/Misc/NEWS.d/next/Library/2021-06-14-23-28-17.bpo-44422.BlWOgv.rst b/Misc/NEWS.d/next/Library/2021-06-14-23-28-17.bpo-44422.BlWOgv.rst new file mode 100644 index 00000000000000..09bace01fc7794 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-14-23-28-17.bpo-44422.BlWOgv.rst @@ -0,0 +1,3 @@ +The :func:`threading.enumerate` function now uses a reentrant lock to +prevent a hang on reentrant call. +Patch by Victor Stinner. From 3e45844340d869ff0833197730e851f2a2a282fb Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Tue, 15 Jun 2021 11:38:15 -0700 Subject: [PATCH 29/64] [Enum] improve test, add andrei kulakov to ACKS (GH-26726) --- Lib/test/test_enum.py | 23 +++++++++++++++++++++++ Misc/ACKS | 1 + 2 files changed, 24 insertions(+) diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 956b8347b1e1cb..4626c2435c1ab6 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -660,12 +660,35 @@ def __repr__(self): self.assertEqual(repr(MyEnum.A), '') # class SillyInt(HexInt): + __qualname__ = 'SillyInt' pass class MyOtherEnum(SillyInt, enum.Enum): + __qualname__ = 'MyOtherEnum' D = 4 E = 5 F = 6 self.assertIs(MyOtherEnum._member_type_, SillyInt) + globals()['SillyInt'] = SillyInt + globals()['MyOtherEnum'] = MyOtherEnum + test_pickle_dump_load(self.assertIs, MyOtherEnum.E) + test_pickle_dump_load(self.assertIs, MyOtherEnum) + # + # This did not work in 3.9, but does now with pickling by name + class UnBrokenInt(int): + __qualname__ = 'UnBrokenInt' + def __new__(cls, value): + return int.__new__(cls, value) + class MyUnBrokenEnum(UnBrokenInt, Enum): + __qualname__ = 'MyUnBrokenEnum' + G = 7 + H = 8 + I = 9 + self.assertIs(MyUnBrokenEnum._member_type_, UnBrokenInt) + self.assertIs(MyUnBrokenEnum(7), MyUnBrokenEnum.G) + globals()['UnBrokenInt'] = UnBrokenInt + globals()['MyUnBrokenEnum'] = MyUnBrokenEnum + test_pickle_dump_load(self.assertIs, MyUnBrokenEnum.I) + test_pickle_dump_load(self.assertIs, MyUnBrokenEnum) def test_too_many_data_types(self): with self.assertRaisesRegex(TypeError, 'too many data types'): diff --git a/Misc/ACKS b/Misc/ACKS index e8c99257ec611e..87de95b938c20e 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -970,6 +970,7 @@ Andrew Kuchling Jakub Kuczys Dave Kuhlman Jon Kuhn +Andrei Kulakov Ilya Kulakov Upendra Kumar Toshio Kuratomi From 3e2e824b55ea225a664048efd8178d06851c8c56 Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Tue, 15 Jun 2021 19:48:35 +0100 Subject: [PATCH 30/64] bpo-43475: Add what's new entry for NaN hash changes (GH-26725) --- Doc/whatsnew/3.10.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 249eb733a88bf8..9b9dd31a3beabf 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -836,6 +836,13 @@ Other Language Changes effectless under ``from __future__ import annotations``. (Contributed by Batuhan Taskaya in :issue:`42725`.) +* Hashes of NaN values of both :class:`float` type and + :class:`decimal.Decimal` type now depend on object identity. Formerly, they + always hashed to ``0`` even though NaN values are not equal to one another. + This caused potentially quadratic runtime behavior due to excessive hash + collisions when creating dictionaries and sets containing multiple NaNs. + (Contributed by Raymond Hettinger in :issue:`43475`.) + New Modules =========== From fc3ca199dcae375c63fadb2b1023173dcb16ea60 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Tue, 15 Jun 2021 16:35:25 -0600 Subject: [PATCH 31/64] bpo-43693: Eliminate unused "fast locals". (gh-26587) Currently, if an arg value escapes (into the closure for an inner function) we end up allocating two indices in the fast locals even though only one gets used. Additionally, using the lower index would be better in some cases, such as with no-arg `super()`. To address this, we update the compiler to fix the offsets so each variable only gets one "fast local". As a consequence, now some cell offsets are interspersed with the locals (only when an arg escapes to an inner function). https://bugs.python.org/issue43693 --- Include/cpython/code.h | 8 +- Include/internal/pycore_frame.h | 2 - Lib/importlib/_bootstrap_external.py | 3 +- Lib/test/test_dis.py | 42 +- .../2021-06-07-15-13-44.bpo-43693.c_zDeY.rst | 4 + Objects/codeobject.c | 110 +- Objects/frameobject.c | 91 +- Objects/typeobject.c | 32 +- Python/ceval.c | 24 +- Python/compile.c | 185 +- Python/importlib.h | 2891 +++++----- Python/importlib_external.h | 5007 ++++++++--------- 12 files changed, 4187 insertions(+), 4212 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2021-06-07-15-13-44.bpo-43693.c_zDeY.rst diff --git a/Include/cpython/code.h b/Include/cpython/code.h index df79ddbc1b19a3..5bf4c8c15dcce6 100644 --- a/Include/cpython/code.h +++ b/Include/cpython/code.h @@ -83,11 +83,11 @@ struct PyCodeObject { /* These fields are set with computed values on new code objects. */ - int *co_cell2arg; /* Maps cell vars which are arguments. */ // redundant values (derived from co_localsplusnames and co_localspluskinds) int co_nlocalsplus; /* number of local + cell + free variables */ int co_nlocals; /* number of local variables */ - int co_ncellvars; /* number of cell variables */ + int co_nplaincellvars; /* number of non-arg cell variables */ + int co_ncellvars; /* total number of cell variables */ int co_nfreevars; /* number of free variables */ // lazily-computed values PyObject *co_varnames; /* tuple of strings (local variable names) */ @@ -142,10 +142,6 @@ struct PyCodeObject { #define CO_FUTURE_GENERATOR_STOP 0x800000 #define CO_FUTURE_ANNOTATIONS 0x1000000 -/* This value is found in the co_cell2arg array when the associated cell - variable does not correspond to an argument. */ -#define CO_CELL_NOT_AN_ARG (-1) - /* This should be defined if a future statement modifies the syntax. For example, when a keyword is added. */ diff --git a/Include/internal/pycore_frame.h b/Include/internal/pycore_frame.h index 11c3a2c01e7e2f..44f58fb6948712 100644 --- a/Include/internal/pycore_frame.h +++ b/Include/internal/pycore_frame.h @@ -32,8 +32,6 @@ _PyFrame_GetBuiltins(PyFrameObject *f) int _PyFrame_TakeLocals(PyFrameObject *f); -PyAPI_FUNC(int) _PyFrame_OpAlreadyRan(PyFrameObject *f, int opcode, int oparg); - #ifdef __cplusplus } #endif diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py index 3cbbb80219cfcd..7bf19fe43d0a10 100644 --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -358,6 +358,7 @@ def _write_atomic(path, data, mode=0o666): # Python 3.11a1 3453 (add co_fastlocalnames and co_fastlocalkinds) # Python 3.11a1 3454 (compute cell offsets relative to locals bpo-43693) # Python 3.11a1 3455 (add MAKE_CELL bpo-43693) +# Python 3.11a1 3456 (interleave cell args bpo-43693) # # MAGIC must change whenever the bytecode emitted by the compiler may no @@ -367,7 +368,7 @@ def _write_atomic(path, data, mode=0o666): # Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array # in PC/launcher.c must also be updated. -MAGIC_NUMBER = (3455).to_bytes(2, 'little') + b'\r\n' +MAGIC_NUMBER = (3456).to_bytes(2, 'little') + b'\r\n' _RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c _PYCACHE = '__pycache__' diff --git a/Lib/test/test_dis.py b/Lib/test/test_dis.py index b81fcb551427a2..41dd9397cb004b 100644 --- a/Lib/test/test_dis.py +++ b/Lib/test/test_dis.py @@ -427,9 +427,9 @@ def foo(x): return foo dis_nested_0 = """\ - 0 MAKE_CELL 2 (y) + 0 MAKE_CELL 0 (y) -%3d 2 LOAD_CLOSURE 2 (y) +%3d 2 LOAD_CLOSURE 0 (y) 4 BUILD_TUPLE 1 6 LOAD_CONST 1 () 8 LOAD_CONST 2 ('_h..foo') @@ -446,14 +446,14 @@ def foo(x): dis_nested_1 = """%s Disassembly of : - 0 MAKE_CELL 1 (x) + 0 MAKE_CELL 0 (x) -%3d 2 LOAD_CLOSURE 1 (x) +%3d 2 LOAD_CLOSURE 0 (x) 4 BUILD_TUPLE 1 6 LOAD_CONST 1 ( at 0x..., file "%s", line %d>) 8 LOAD_CONST 2 ('_h..foo..') 10 MAKE_FUNCTION 8 (closure) - 12 LOAD_DEREF 2 (y) + 12 LOAD_DEREF 1 (y) 14 GET_ITER 16 CALL_FUNCTION 1 18 RETURN_VALUE @@ -966,19 +966,19 @@ def jumpy(): Instruction = dis.Instruction expected_opinfo_outer = [ - Instruction(opname='MAKE_CELL', opcode=135, arg=3, argval='a', argrepr='a', offset=0, starts_line=None, is_jump_target=False), - Instruction(opname='MAKE_CELL', opcode=135, arg=4, argval='b', argrepr='b', offset=2, starts_line=None, is_jump_target=False), + Instruction(opname='MAKE_CELL', opcode=135, arg=0, argval='a', argrepr='a', offset=0, starts_line=None, is_jump_target=False), + Instruction(opname='MAKE_CELL', opcode=135, arg=1, argval='b', argrepr='b', offset=2, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=8, argval=(3, 4), argrepr='(3, 4)', offset=4, starts_line=2, is_jump_target=False), - Instruction(opname='LOAD_CLOSURE', opcode=136, arg=3, argval='a', argrepr='a', offset=6, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CLOSURE', opcode=136, arg=4, argval='b', argrepr='b', offset=8, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CLOSURE', opcode=136, arg=0, argval='a', argrepr='a', offset=6, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CLOSURE', opcode=136, arg=1, argval='b', argrepr='b', offset=8, starts_line=None, is_jump_target=False), Instruction(opname='BUILD_TUPLE', opcode=102, arg=2, argval=2, argrepr='', offset=10, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=code_object_f, argrepr=repr(code_object_f), offset=12, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='outer..f', argrepr="'outer..f'", offset=14, starts_line=None, is_jump_target=False), Instruction(opname='MAKE_FUNCTION', opcode=132, arg=9, argval=9, argrepr='defaults, closure', offset=16, starts_line=None, is_jump_target=False), Instruction(opname='STORE_FAST', opcode=125, arg=2, argval='f', argrepr='f', offset=18, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=20, starts_line=7, is_jump_target=False), - Instruction(opname='LOAD_DEREF', opcode=137, arg=3, argval='a', argrepr='a', offset=22, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_DEREF', opcode=137, arg=4, argval='b', argrepr='b', offset=24, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_DEREF', opcode=137, arg=0, argval='a', argrepr='a', offset=22, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_DEREF', opcode=137, arg=1, argval='b', argrepr='b', offset=24, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval='', argrepr="''", offset=26, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=6, argval=1, argrepr='1', offset=28, starts_line=None, is_jump_target=False), Instruction(opname='BUILD_LIST', opcode=103, arg=0, argval=0, argrepr='', offset=30, starts_line=None, is_jump_target=False), @@ -991,23 +991,23 @@ def jumpy(): ] expected_opinfo_f = [ - Instruction(opname='MAKE_CELL', opcode=135, arg=3, argval='c', argrepr='c', offset=0, starts_line=None, is_jump_target=False), - Instruction(opname='MAKE_CELL', opcode=135, arg=4, argval='d', argrepr='d', offset=2, starts_line=None, is_jump_target=False), + Instruction(opname='MAKE_CELL', opcode=135, arg=0, argval='c', argrepr='c', offset=0, starts_line=None, is_jump_target=False), + Instruction(opname='MAKE_CELL', opcode=135, arg=1, argval='d', argrepr='d', offset=2, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=5, argval=(5, 6), argrepr='(5, 6)', offset=4, starts_line=3, is_jump_target=False), - Instruction(opname='LOAD_CLOSURE', opcode=136, arg=5, argval='a', argrepr='a', offset=6, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CLOSURE', opcode=136, arg=6, argval='b', argrepr='b', offset=8, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CLOSURE', opcode=136, arg=3, argval='c', argrepr='c', offset=10, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_CLOSURE', opcode=136, arg=4, argval='d', argrepr='d', offset=12, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CLOSURE', opcode=136, arg=3, argval='a', argrepr='a', offset=6, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CLOSURE', opcode=136, arg=4, argval='b', argrepr='b', offset=8, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CLOSURE', opcode=136, arg=0, argval='c', argrepr='c', offset=10, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_CLOSURE', opcode=136, arg=1, argval='d', argrepr='d', offset=12, starts_line=None, is_jump_target=False), Instruction(opname='BUILD_TUPLE', opcode=102, arg=4, argval=4, argrepr='', offset=14, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=3, argval=code_object_inner, argrepr=repr(code_object_inner), offset=16, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_CONST', opcode=100, arg=4, argval='outer..f..inner', argrepr="'outer..f..inner'", offset=18, starts_line=None, is_jump_target=False), Instruction(opname='MAKE_FUNCTION', opcode=132, arg=9, argval=9, argrepr='defaults, closure', offset=20, starts_line=None, is_jump_target=False), Instruction(opname='STORE_FAST', opcode=125, arg=2, argval='inner', argrepr='inner', offset=22, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_GLOBAL', opcode=116, arg=0, argval='print', argrepr='print', offset=24, starts_line=5, is_jump_target=False), - Instruction(opname='LOAD_DEREF', opcode=137, arg=5, argval='a', argrepr='a', offset=26, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_DEREF', opcode=137, arg=6, argval='b', argrepr='b', offset=28, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_DEREF', opcode=137, arg=3, argval='c', argrepr='c', offset=30, starts_line=None, is_jump_target=False), - Instruction(opname='LOAD_DEREF', opcode=137, arg=4, argval='d', argrepr='d', offset=32, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_DEREF', opcode=137, arg=3, argval='a', argrepr='a', offset=26, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_DEREF', opcode=137, arg=4, argval='b', argrepr='b', offset=28, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_DEREF', opcode=137, arg=0, argval='c', argrepr='c', offset=30, starts_line=None, is_jump_target=False), + Instruction(opname='LOAD_DEREF', opcode=137, arg=1, argval='d', argrepr='d', offset=32, starts_line=None, is_jump_target=False), Instruction(opname='CALL_FUNCTION', opcode=131, arg=4, argval=4, argrepr='', offset=34, starts_line=None, is_jump_target=False), Instruction(opname='POP_TOP', opcode=1, arg=None, argval=None, argrepr='', offset=36, starts_line=None, is_jump_target=False), Instruction(opname='LOAD_FAST', opcode=124, arg=2, argval='inner', argrepr='inner', offset=38, starts_line=6, is_jump_target=False), diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-06-07-15-13-44.bpo-43693.c_zDeY.rst b/Misc/NEWS.d/next/Core and Builtins/2021-06-07-15-13-44.bpo-43693.c_zDeY.rst new file mode 100644 index 00000000000000..c3db81072254b8 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-06-07-15-13-44.bpo-43693.c_zDeY.rst @@ -0,0 +1,4 @@ +Computation of the offsets of cell variables is done in the compiler instead +of at runtime. This reduces the overhead of handling cell and free +variables, especially in the case where a variable is both an argument and +cell variable. diff --git a/Objects/codeobject.c b/Objects/codeobject.c index e054c43a1cf93a..11a83d4a51228a 100644 --- a/Objects/codeobject.c +++ b/Objects/codeobject.c @@ -162,43 +162,28 @@ _Py_set_localsplus_info(int offset, PyObject *name, _PyLocalsPlusKind kind, Py_INCREF(name); PyTuple_SET_ITEM(names, offset, name); kinds[offset] = kind; - - if (kind == CO_FAST_CELL) { - // Cells can overlap with args, so mark those cases. - int nlocalsplus = (int)PyTuple_GET_SIZE(names); - for (int i = 0; i < nlocalsplus; i++) { - _PyLocalsPlusKind kind = kinds[i]; - if (kind && !(kind & CO_FAST_LOCAL)) { - // We've moved past the locals. - break; - } - PyObject *varname = PyTuple_GET_ITEM(names, i); - int cmp = PyUnicode_Compare(name, varname); - if (cmp == 0) { - kinds[i] |= CO_FAST_CELL; - break; - } - assert(cmp > 0 || !PyErr_Occurred()); - } - } } static void get_localsplus_counts(PyObject *names, _PyLocalsPlusKinds kinds, - int *pnlocals, int *pncellvars, + int *pnlocals, int *pnplaincellvars, int *pncellvars, int *pnfreevars) { int nlocals = 0; + int nplaincellvars = 0; int ncellvars = 0; int nfreevars = 0; - int nlocalsplus = Py_SAFE_DOWNCAST(PyTuple_GET_SIZE(names), - Py_ssize_t, int); + Py_ssize_t nlocalsplus = PyTuple_GET_SIZE(names); for (int i = 0; i < nlocalsplus; i++) { if (kinds[i] & CO_FAST_LOCAL) { nlocals += 1; + if (kinds[i] & CO_FAST_CELL) { + ncellvars += 1; + } } else if (kinds[i] & CO_FAST_CELL) { ncellvars += 1; + nplaincellvars += 1; } else if (kinds[i] & CO_FAST_FREE) { nfreevars += 1; @@ -207,6 +192,9 @@ get_localsplus_counts(PyObject *names, _PyLocalsPlusKinds kinds, if (pnlocals != NULL) { *pnlocals = nlocals; } + if (pnplaincellvars != NULL) { + *pnplaincellvars = nplaincellvars; + } if (pncellvars != NULL) { *pncellvars = ncellvars; } @@ -227,10 +215,6 @@ get_localsplus_names(PyCodeObject *co, _PyLocalsPlusKind kind, int num) if ((co->co_localspluskinds[offset] & kind) == 0) { continue; } - // For now there may be duplicates, which we ignore. - if (kind == CO_FAST_CELL && co->co_localspluskinds[offset] != kind) { - continue; - } assert(index < num); PyObject *name = PyTuple_GET_ITEM(co->co_localsplusnames, offset); Py_INCREF(name); @@ -283,7 +267,7 @@ _PyCode_Validate(struct _PyCodeConstructor *con) * here to avoid the possibility of overflow (however remote). */ int nlocals; get_localsplus_counts(con->localsplusnames, con->localspluskinds, - &nlocals, NULL, NULL); + &nlocals, NULL, NULL, NULL); int nplainlocals = nlocals - con->argcount - con->kwonlyargcount - @@ -301,9 +285,9 @@ static void init_code(PyCodeObject *co, struct _PyCodeConstructor *con) { int nlocalsplus = (int)PyTuple_GET_SIZE(con->localsplusnames); - int nlocals, ncellvars, nfreevars; + int nlocals, nplaincellvars, ncellvars, nfreevars; get_localsplus_counts(con->localsplusnames, con->localspluskinds, - &nlocals, &ncellvars, &nfreevars); + &nlocals, &nplaincellvars, &ncellvars, &nfreevars); Py_INCREF(con->filename); co->co_filename = con->filename; @@ -338,9 +322,9 @@ init_code(PyCodeObject *co, struct _PyCodeConstructor *con) co->co_exceptiontable = con->exceptiontable; /* derived values */ - co->co_cell2arg = NULL; // This will be set soon. co->co_nlocalsplus = nlocalsplus; co->co_nlocals = nlocals; + co->co_nplaincellvars = nplaincellvars; co->co_ncellvars = ncellvars; co->co_nfreevars = nfreevars; co->co_varnames = NULL; @@ -392,44 +376,6 @@ _PyCode_New(struct _PyCodeConstructor *con) co->co_flags &= ~CO_NOFREE; } - /* Create mapping between cells and arguments if needed. */ - if (co->co_ncellvars) { - int totalargs = co->co_argcount + - co->co_kwonlyargcount + - ((co->co_flags & CO_VARARGS) != 0) + - ((co->co_flags & CO_VARKEYWORDS) != 0); - assert(totalargs <= co->co_nlocals); - /* Find cells which are also arguments. */ - for (int i = 0; i < co->co_ncellvars; i++) { - PyObject *cellname = PyTuple_GET_ITEM(co->co_localsplusnames, - i + co->co_nlocals); - for (int j = 0; j < totalargs; j++) { - PyObject *argname = PyTuple_GET_ITEM(co->co_localsplusnames, j); - int cmp = PyUnicode_Compare(cellname, argname); - if (cmp == -1 && PyErr_Occurred()) { - Py_DECREF(co); - return NULL; - } - if (cmp == 0) { - if (co->co_cell2arg == NULL) { - co->co_cell2arg = PyMem_NEW(int, co->co_ncellvars); - if (co->co_cell2arg == NULL) { - Py_DECREF(co); - PyErr_NoMemory(); - return NULL; - } - for (int k = 0; k < co->co_ncellvars; k++) { - co->co_cell2arg[k] = CO_CELL_NOT_AN_ARG; - } - } - co->co_cell2arg[i] = j; - // Go to the next cell name. - break; - } - } - } - } - return co; } @@ -478,6 +424,23 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, } for (int i = 0; i < ncellvars; i++, offset++) { PyObject *name = PyTuple_GET_ITEM(cellvars, i); + int argoffset = -1; + for (int j = 0; j < nvarnames; j++) { + int cmp = PyUnicode_Compare(PyTuple_GET_ITEM(varnames, j), + name); + assert(!PyErr_Occurred()); + if (cmp == 0) { + argoffset = j; + break; + } + } + if (argoffset >= 0) { + // Merge the localsplus indices. + nlocalsplus -= 1; + offset -= 1; + localspluskinds[argoffset] |= CO_FAST_CELL; + continue; + } _Py_set_localsplus_info(offset, name, CO_FAST_CELL, localsplusnames, localspluskinds); } @@ -486,6 +449,11 @@ PyCode_NewWithPosOnlyArgs(int argcount, int posonlyargcount, int kwonlyargcount, _Py_set_localsplus_info(offset, name, CO_FAST_FREE, localsplusnames, localspluskinds); } + // If any cells were args then nlocalsplus will have shrunk. + // We don't bother resizing localspluskinds. + if (_PyTuple_Resize(&localsplusnames, nlocalsplus) < 0) { + goto error; + } struct _PyCodeConstructor con = { .filename = filename, @@ -1182,8 +1150,6 @@ code_dealloc(PyCodeObject *co) Py_XDECREF(co->co_name); Py_XDECREF(co->co_linetable); Py_XDECREF(co->co_exceptiontable); - if (co->co_cell2arg != NULL) - PyMem_Free(co->co_cell2arg); if (co->co_weakreflist != NULL) PyObject_ClearWeakRefs((PyObject*)co); if (co->co_quickened) { @@ -1377,10 +1343,6 @@ code_sizeof(PyCodeObject *co, PyObject *Py_UNUSED(args)) (co_extra->ce_size-1) * sizeof(co_extra->ce_extras[0]); } - if (co->co_cell2arg != NULL && co->co_cellvars != NULL) { - res += co->co_ncellvars * sizeof(Py_ssize_t); - } - if (co->co_quickened != NULL) { Py_ssize_t count = co->co_quickened[0].entry.zero.cache_count; count += (PyBytes_GET_SIZE(co->co_code)+sizeof(SpecializedCacheEntry)-1)/ diff --git a/Objects/frameobject.c b/Objects/frameobject.c index da56b551b85705..99afe06d81636a 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -918,7 +918,7 @@ PyFrame_New(PyThreadState *tstate, PyCodeObject *code, return f; } -int +static int _PyFrame_OpAlreadyRan(PyFrameObject *f, int opcode, int oparg) { const _Py_CODEUNIT *code = @@ -966,26 +966,9 @@ PyFrame_FastToLocalsWithError(PyFrameObject *f) continue; } - /* Some args are also cells. For now each of those variables - has two indices in the fast array, with both marked as cells - but only one marked as an arg. That one is always set - to NULL in _PyEval_MakeFrameVector() and the other index - gets the cell holding the arg value. So we ignore the - former here and will later use the cell for the variable. - */ - if (kind & CO_FAST_LOCAL && kind & CO_FAST_CELL) { - continue; - } - PyObject *name = PyTuple_GET_ITEM(co->co_localsplusnames, i); PyObject *value = fast[i]; if (f->f_state != FRAME_CLEARED) { - int cellargoffset = CO_CELL_NOT_AN_ARG; - if (kind & CO_FAST_CELL && co->co_cell2arg != NULL) { - assert(i - co->co_nlocals >= 0); - assert(i - co->co_nlocals < co->co_ncellvars); - cellargoffset = co->co_cell2arg[i - co->co_nlocals]; - } if (kind & CO_FAST_FREE) { // The cell was set by _PyEval_MakeFrameVector() from // the function's closure. @@ -1003,20 +986,10 @@ PyFrame_FastToLocalsWithError(PyFrameObject *f) // (likely) MAKE_CELL must have executed already. value = PyCell_GET(value); } - // (unlikely) Otherwise it must be an initial value set - // by an earlier call to PyFrame_FastToLocals(). - } - else { - // (unlikely) MAKE_CELL hasn't executed yet. - if (cellargoffset != CO_CELL_NOT_AN_ARG) { - // It is an arg that escapes into an inner - // function so we use the initial value that - // was already set by _PyEval_MakeFrameVector(). - // Normally the arg value would always be set. - // However, it can be NULL if it was deleted via - // PyFrame_LocalsToFast(). - value = fast[cellargoffset]; - } + // (likely) Otherwise it it is an arg (kind & CO_FAST_LOCAL), + // with the initial value set by _PyEval_MakeFrameVector()... + // (unlikely) ...or it was set to some initial value by + // an earlier call to PyFrame_LocalsToFast(). } } } @@ -1079,10 +1052,6 @@ PyFrame_LocalsToFast(PyFrameObject *f, int clear) if (kind & CO_FAST_FREE && !(co->co_flags & CO_OPTIMIZED)) { continue; } - /* Same test as in PyFrame_FastToLocals() above. */ - if (kind & CO_FAST_LOCAL && kind & CO_FAST_CELL) { - continue; - } PyObject *name = PyTuple_GET_ITEM(co->co_localsplusnames, i); PyObject *value = PyObject_GetItem(locals, name); /* We only care about NULLs if clear is true. */ @@ -1093,12 +1062,6 @@ PyFrame_LocalsToFast(PyFrameObject *f, int clear) } } PyObject *oldvalue = fast[i]; - int cellargoffset = CO_CELL_NOT_AN_ARG; - if (kind & CO_FAST_CELL && co->co_cell2arg != NULL) { - assert(i - co->co_nlocals >= 0); - assert(i - co->co_nlocals < co->co_ncellvars); - cellargoffset = co->co_cell2arg[i - co->co_nlocals]; - } PyObject *cell = NULL; if (kind == CO_FAST_FREE) { // The cell was set by _PyEval_MakeFrameVector() from @@ -1107,21 +1070,14 @@ PyFrame_LocalsToFast(PyFrameObject *f, int clear) cell = oldvalue; } else if (kind & CO_FAST_CELL && oldvalue != NULL) { - if (cellargoffset != CO_CELL_NOT_AN_ARG) { + /* Same test as in PyFrame_FastToLocals() above. */ + if (PyCell_Check(oldvalue) && + _PyFrame_OpAlreadyRan(f, MAKE_CELL, i)) { // (likely) MAKE_CELL must have executed already. - // It's the cell for an arg. - assert(PyCell_Check(oldvalue)); cell = oldvalue; } - else { - if (PyCell_Check(oldvalue) && - _PyFrame_OpAlreadyRan(f, MAKE_CELL, i)) { - // (likely) MAKE_CELL must have executed already. - cell = oldvalue; - } - // (unlikely) Otherwise, it must have been set to some - // initial value by an earlier call to PyFrame_LocalsToFast(). - } + // (unlikely) Otherwise, it must have been set to some + // initial value by an earlier call to PyFrame_LocalsToFast(). } if (cell != NULL) { oldvalue = PyCell_GET(cell); @@ -1131,30 +1087,9 @@ PyFrame_LocalsToFast(PyFrameObject *f, int clear) PyCell_SET(cell, value); } } - else { - int offset = i; - if (kind & CO_FAST_CELL) { - // (unlikely) MAKE_CELL hasn't executed yet. - // Note that there is no need to create the cell that - // MAKE_CELL would otherwise create later, since no - // *_DEREF ops can happen before MAKE_CELL has run. - if (cellargoffset != CO_CELL_NOT_AN_ARG) { - // It's the cell for an arg. - // Replace the initial value that was set by - // _PyEval_MakeFrameVector(). - // Normally the arg value would always be set. - // However, it can be NULL if it was deleted - // via an earlier PyFrame_LocalsToFast() call. - offset = cellargoffset; - oldvalue = fast[offset]; - } - // Otherwise set an initial value for MAKE_CELL to use - // when it runs later. - } - if (value != oldvalue) { - Py_XINCREF(value); - Py_XSETREF(fast[offset], value); - } + else if (value != oldvalue) { + Py_XINCREF(value); + Py_XSETREF(fast[i], value); } Py_XDECREF(value); } diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 4c7e5d4567f76c..170929f5d85079 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -11,7 +11,6 @@ #include "pycore_pystate.h" // _PyThreadState_GET() #include "pycore_unionobject.h" // _Py_Union(), _Py_union_type_or #include "frameobject.h" -#include "pycore_frame.h" // _PyFrame_OpAlreadyRan #include "opcode.h" // MAKE_CELL #include "structmember.h" // PyMemberDef @@ -8878,23 +8877,18 @@ super_init_without_args(PyFrameObject *f, PyCodeObject *co, return -1; } - PyObject *obj = f->f_localsptr[0]; - int i; - if (obj == NULL && co->co_cell2arg) { - /* The first argument might be a cell. */ - for (i = 0; i < co->co_ncellvars; i++) { - if (co->co_cell2arg[i] == 0) { - int celloffset = co->co_nlocals + i; - PyObject *cell = f->f_localsptr[celloffset]; - if (PyCell_Check(cell) && - _PyFrame_OpAlreadyRan(f, MAKE_CELL, celloffset)) { - obj = PyCell_GET(cell); - } - break; - } + PyObject *firstarg = f->f_localsptr[0]; + // The first argument might be a cell. + if (firstarg != NULL && (co->co_localspluskinds[0] & CO_FAST_CELL)) { + // "firstarg" is a cell here unless (very unlikely) super() + // was called from the C-API before the first MAKE_CELL op. + if (f->f_lasti >= 0) { + assert(_Py_OPCODE(*co->co_firstinstr) == MAKE_CELL); + assert(PyCell_Check(firstarg)); + firstarg = PyCell_GET(firstarg); } } - if (obj == NULL) { + if (firstarg == NULL) { PyErr_SetString(PyExc_RuntimeError, "super(): arg[0] deleted"); return -1; @@ -8902,9 +8896,9 @@ super_init_without_args(PyFrameObject *f, PyCodeObject *co, // Look for __class__ in the free vars. PyTypeObject *type = NULL; - i = co->co_nlocals + co->co_ncellvars; + int i = co->co_nlocals + co->co_nplaincellvars; for (; i < co->co_nlocalsplus; i++) { - assert(co->co_localspluskinds[i] & CO_FAST_FREE); + assert((co->co_localspluskinds[i] & CO_FAST_FREE) != 0); PyObject *name = PyTuple_GET_ITEM(co->co_localsplusnames, i); assert(PyUnicode_Check(name)); if (_PyUnicode_EqualToASCIIId(name, &PyId___class__)) { @@ -8936,7 +8930,7 @@ super_init_without_args(PyFrameObject *f, PyCodeObject *co, } *type_p = type; - *obj_p = obj; + *obj_p = firstarg; return 0; } diff --git a/Python/ceval.c b/Python/ceval.c index 79ec143f5ea327..a9b9aca0399035 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -2922,29 +2922,13 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) } case TARGET(MAKE_CELL): { + // "initial" is probably NULL but not if it's an arg (or set + // via PyFrame_LocalsToFast() before MAKE_CELL has run). PyObject *initial = GETLOCAL(oparg); - // Normally initial would be NULL. However, it - // might have been set to an initial value during - // a call to PyFrame_LocalsToFast(). PyObject *cell = PyCell_New(initial); if (cell == NULL) { goto error; } - /* If it is an arg then copy the arg into the cell. */ - if (initial == NULL && co->co_cell2arg != NULL) { - int argoffset = co->co_cell2arg[oparg - co->co_nlocals]; - if (argoffset != CO_CELL_NOT_AN_ARG) { - PyObject *arg = GETLOCAL(argoffset); - // It will have been set in initialize_locals() but - // may have been deleted PyFrame_LocalsToFast(). - if (arg != NULL) {; - Py_INCREF(arg); - PyCell_SET(cell, arg); - /* Clear the local copy. */ - SETLOCAL(argoffset, NULL); - } - } - } SETLOCAL(oparg, cell); DISPATCH(); } @@ -4915,7 +4899,7 @@ initialize_locals(PyThreadState *tstate, PyFrameConstructor *con, for (i = 0; i < co->co_nfreevars; ++i) { PyObject *o = PyTuple_GET_ITEM(con->fc_closure, i); Py_INCREF(o); - localsplus[co->co_nlocals + co->co_ncellvars + i] = o; + localsplus[co->co_nlocals + co->co_nplaincellvars + i] = o; } return 0; @@ -6244,7 +6228,7 @@ format_exc_unbound(PyThreadState *tstate, PyCodeObject *co, int oparg) if (_PyErr_Occurred(tstate)) return; name = PyTuple_GET_ITEM(co->co_localsplusnames, oparg); - if (oparg < co->co_ncellvars + co->co_nlocals) { + if (oparg < co->co_nplaincellvars + co->co_nlocals) { format_exc_check_arg(tstate, PyExc_UnboundLocalError, UNBOUNDLOCAL_ERROR_MSG, name); } else { diff --git a/Python/compile.c b/Python/compile.c index c97938adaafcf4..60777b0bf78633 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -21,6 +21,8 @@ * objects. */ +#include + #include "Python.h" #include "pycore_ast.h" // _PyAST_GetDocString() #include "pycore_compile.h" // _PyFuture_FromAST() @@ -2053,7 +2055,7 @@ compiler_make_closure(struct compiler *c, PyCodeObject *co, Py_ssize_t flags, qualname = co->co_name; if (co->co_nfreevars) { - int i = co->co_nlocals + co->co_ncellvars; + int i = co->co_nlocals + co->co_nplaincellvars; for (; i < co->co_nlocalsplus; ++i) { /* Bypass com_addop_varname because it will generate LOAD_DEREF but LOAD_CLOSURE is needed. @@ -7188,11 +7190,10 @@ extern void _Py_set_localsplus_info(int, PyObject *, _PyLocalsPlusKind, PyObject *, _PyLocalsPlusKinds); static void -compute_localsplus_info(struct compiler *c, +compute_localsplus_info(struct compiler *c, int nlocalsplus, PyObject *names, _PyLocalsPlusKinds kinds) { - int nlocalsplus = (int)PyTuple_GET_SIZE(names); - (void)nlocalsplus; // Avoid compiler errors for unused variable + assert(PyTuple_GET_SIZE(names) == nlocalsplus); PyObject *k, *v; Py_ssize_t pos = 0; @@ -7201,15 +7202,26 @@ compute_localsplus_info(struct compiler *c, assert(offset >= 0); assert(offset < nlocalsplus); // For now we do not distinguish arg kinds. - _Py_set_localsplus_info(offset, k, CO_FAST_LOCAL, names, kinds); + _PyLocalsPlusKind kind = CO_FAST_LOCAL; + if (PyDict_GetItem(c->u->u_cellvars, k) != NULL) { + kind |= CO_FAST_CELL; + } + _Py_set_localsplus_info(offset, k, kind, names, kinds); } int nlocals = (int)PyDict_GET_SIZE(c->u->u_varnames); + // This counter mirrors the fix done in fix_cell_offsets(). + int numdropped = 0; pos = 0; while (PyDict_Next(c->u->u_cellvars, &pos, &k, &v)) { + if (PyDict_GetItem(c->u->u_varnames, k) != NULL) { + // Skip cells that are already covered by locals. + numdropped += 1; + continue; + } int offset = (int)PyLong_AS_LONG(v); assert(offset >= 0); - offset += nlocals; + offset += nlocals - numdropped; assert(offset < nlocalsplus); _Py_set_localsplus_info(offset, k, CO_FAST_CELL, names, kinds); } @@ -7218,7 +7230,7 @@ compute_localsplus_info(struct compiler *c, while (PyDict_Next(c->u->u_freevars, &pos, &k, &v)) { int offset = (int)PyLong_AS_LONG(v); assert(offset >= 0); - offset += nlocals; + offset += nlocals - numdropped; assert(offset < nlocalsplus); _Py_set_localsplus_info(offset, k, CO_FAST_FREE, names, kinds); } @@ -7226,7 +7238,7 @@ compute_localsplus_info(struct compiler *c, static PyCodeObject * makecode(struct compiler *c, struct assembler *a, PyObject *constslist, - int maxdepth) + int maxdepth, int nlocalsplus) { PyCodeObject *co = NULL; PyObject *names = NULL; @@ -7264,15 +7276,6 @@ makecode(struct compiler *c, struct assembler *a, PyObject *constslist, assert(INT_MAX - posonlyargcount - posorkwargcount > 0); int kwonlyargcount = (int)c->u->u_kwonlyargcount; - Py_ssize_t nlocals = PyDict_GET_SIZE(c->u->u_varnames); - Py_ssize_t ncellvars = PyDict_GET_SIZE(c->u->u_cellvars); - Py_ssize_t nfreevars = PyDict_GET_SIZE(c->u->u_freevars); - assert(nlocals < INT_MAX); - assert(ncellvars < INT_MAX); - assert(nfreevars < INT_MAX); - assert(INT_MAX - nlocals - ncellvars - nfreevars > 0); - int nlocalsplus = (int)nlocals + (int)ncellvars + (int)nfreevars; - localsplusnames = PyTuple_New(nlocalsplus); if (localsplusnames == NULL) { goto error; @@ -7280,7 +7283,7 @@ makecode(struct compiler *c, struct assembler *a, PyObject *constslist, if (_PyCode_InitLocalsPlusKinds(nlocalsplus, &localspluskinds) < 0) { goto error; } - compute_localsplus_info(c, localsplusnames, localspluskinds); + compute_localsplus_info(c, nlocalsplus, localsplusnames, localspluskinds); struct _PyCodeConstructor con = { .filename = c->c_filename, @@ -7376,6 +7379,39 @@ optimize_cfg(struct compiler *c, struct assembler *a, PyObject *consts); static int ensure_exits_have_lineno(struct compiler *c); +static int * +build_cellfixedoffsets(struct compiler *c) +{ + int nlocals = (int)PyDict_GET_SIZE(c->u->u_varnames); + int ncellvars = (int)PyDict_GET_SIZE(c->u->u_cellvars); + int nfreevars = (int)PyDict_GET_SIZE(c->u->u_freevars); + + int noffsets = ncellvars + nfreevars; + int *fixed = PyMem_New(int, noffsets); + if (fixed == NULL) { + PyErr_NoMemory(); + return NULL; + } + for (int i = 0; i < noffsets; i++) { + fixed[i] = nlocals + i; + } + + PyObject *varname, *cellindex; + Py_ssize_t pos = 0; + while (PyDict_Next(c->u->u_cellvars, &pos, &varname, &cellindex)) { + PyObject *varindex = PyDict_GetItem(c->u->u_varnames, varname); + if (varindex != NULL) { + assert(PyLong_AS_LONG(cellindex) < INT_MAX); + assert(PyLong_AS_LONG(varindex) < INT_MAX); + int oldindex = (int)PyLong_AS_LONG(cellindex); + int argoffset = (int)PyLong_AS_LONG(varindex); + fixed[oldindex] = argoffset; + } + } + + return fixed; +} + static inline int insert_instruction(basicblock *block, int pos, struct instr *instr) { if (compiler_next_instr(block) < 0) { @@ -7389,7 +7425,9 @@ insert_instruction(basicblock *block, int pos, struct instr *instr) { } static int -insert_prefix_instructions(struct compiler *c, basicblock *entryblock) { +insert_prefix_instructions(struct compiler *c, basicblock *entryblock, + int *fixed) +{ int flags = compute_code_flags(c); if (flags < 0) { @@ -7397,21 +7435,38 @@ insert_prefix_instructions(struct compiler *c, basicblock *entryblock) { } /* Set up cells for any variable that escapes, to be put in a closure. */ - PyObject *k, *v; - Py_ssize_t pos = 0; - while (PyDict_Next(c->u->u_cellvars, &pos, &k, &v)) { - assert(PyLong_AS_LONG(v) < INT_MAX); - int cellindex = (int)PyLong_AS_LONG(v); - struct instr make_cell = { - .i_opcode = MAKE_CELL, - // This will get fixed in offset_derefs(). - .i_oparg = cellindex, - .i_lineno = -1, - .i_target = NULL, - }; - if (insert_instruction(entryblock, (int)(pos - 1), &make_cell) < 0) { + const int ncellvars = (int)PyDict_GET_SIZE(c->u->u_cellvars); + if (ncellvars) { + // c->u->u_cellvars has the cells out of order so we sort them + // before adding the MAKE_CELL instructions. Note that we + // adjust for arg cells, which come first. + const int nvars = ncellvars + (int)PyDict_GET_SIZE(c->u->u_varnames); + int *sorted = PyMem_RawCalloc(nvars, sizeof(int)); + if (sorted == NULL) { + PyErr_NoMemory(); return -1; } + for (int i = 0; i < ncellvars; i++) { + sorted[fixed[i]] = i + 1; + } + for (int i = 0, ncellsused = 0; ncellsused < ncellvars; i++) { + int oldindex = sorted[i] - 1; + if (oldindex == -1) { + continue; + } + struct instr make_cell = { + .i_opcode = MAKE_CELL, + // This will get fixed in offset_derefs(). + .i_oparg = oldindex, + .i_lineno = -1, + .i_target = NULL, + }; + if (insert_instruction(entryblock, ncellsused, &make_cell) < 0) { + return -1; + } + ncellsused += 1; + } + PyMem_RawFree(sorted); } /* Add the generator prefix instructions. */ @@ -7469,14 +7524,33 @@ guarantee_lineno_for_exits(struct assembler *a, int firstlineno) { } } -static void -fix_cell_offsets(struct compiler *c, basicblock *entryblock) +static int +fix_cell_offsets(struct compiler *c, basicblock *entryblock, int *fixedmap) { - assert(PyDict_GET_SIZE(c->u->u_varnames) < INT_MAX); int nlocals = (int)PyDict_GET_SIZE(c->u->u_varnames); + int ncellvars = (int)PyDict_GET_SIZE(c->u->u_cellvars); + int nfreevars = (int)PyDict_GET_SIZE(c->u->u_freevars); + int noffsets = ncellvars + nfreevars; + + // First deal with duplicates (arg cells). + int numdropped = 0; + for (int i = 0; i < noffsets ; i++) { + if (fixedmap[i] == i + nlocals) { + fixedmap[i] -= numdropped; + } + else { + // It was a duplicate (cell/arg). + numdropped += 1; + } + } + + // Then update offsets, either relative to locals or by cell2arg. for (basicblock *b = entryblock; b != NULL; b = b->b_next) { for (int i = 0; i < b->b_iused; i++) { struct instr *inst = &b->b_instr[i]; + // This is called before extended args are generated. + assert(inst->i_opcode != EXTENDED_ARG); + int oldoffset = inst->i_oparg; switch(inst->i_opcode) { case MAKE_CELL: case LOAD_CLOSURE: @@ -7484,10 +7558,15 @@ fix_cell_offsets(struct compiler *c, basicblock *entryblock) case STORE_DEREF: case DELETE_DEREF: case LOAD_CLASSDEREF: - inst->i_oparg += nlocals; + assert(oldoffset >= 0); + assert(oldoffset < noffsets); + assert(fixedmap[oldoffset] >= 0); + inst->i_oparg = fixedmap[oldoffset]; } } } + + return numdropped; } static PyCodeObject * @@ -7528,7 +7607,22 @@ assemble(struct compiler *c, int addNone) } assert(entryblock != NULL); - if (insert_prefix_instructions(c, entryblock)) { + assert(PyDict_GET_SIZE(c->u->u_varnames) < INT_MAX); + assert(PyDict_GET_SIZE(c->u->u_cellvars) < INT_MAX); + assert(PyDict_GET_SIZE(c->u->u_freevars) < INT_MAX); + int nlocals = (int)PyDict_GET_SIZE(c->u->u_varnames); + int ncellvars = (int)PyDict_GET_SIZE(c->u->u_cellvars); + int nfreevars = (int)PyDict_GET_SIZE(c->u->u_freevars); + assert(INT_MAX - nlocals - ncellvars > 0); + assert(INT_MAX - nlocals - ncellvars - nfreevars > 0); + int nlocalsplus = nlocals + ncellvars + nfreevars; + int *cellfixedoffsets = build_cellfixedoffsets(c); + if (cellfixedoffsets == NULL) { + goto error; + } + + // This must be called before fix_cell_offsets(). + if (insert_prefix_instructions(c, entryblock, cellfixedoffsets)) { goto error; } @@ -7545,7 +7639,13 @@ assemble(struct compiler *c, int addNone) a.a_entry = entryblock; a.a_nblocks = nblocks; - fix_cell_offsets(c, entryblock); + int numdropped = fix_cell_offsets(c, entryblock, cellfixedoffsets); + PyMem_Free(cellfixedoffsets); // At this point we're done with it. + cellfixedoffsets = NULL; + if (numdropped < 0) { + goto error; + } + nlocalsplus -= numdropped; consts = consts_dict_keys_inorder(c->u->u_consts); if (consts == NULL) { @@ -7586,10 +7686,10 @@ assemble(struct compiler *c, int addNone) } if (!assemble_exception_table(&a)) { - return 0; + goto error; } if (!assemble_line_range(&a)) { - return 0; + goto error; } if (_PyBytes_Resize(&a.a_lnotab, a.a_lnotab_off) < 0) { @@ -7610,10 +7710,13 @@ assemble(struct compiler *c, int addNone) goto error; } - co = makecode(c, &a, consts, maxdepth); + co = makecode(c, &a, consts, maxdepth, nlocalsplus); error: Py_XDECREF(consts); assemble_free(&a); + if (cellfixedoffsets != NULL) { + PyMem_Free(cellfixedoffsets); + } return co; } diff --git a/Python/importlib.h b/Python/importlib.h index 16ccf3076f23bb..cb94f016e8bb93 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -430,8 +430,8 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 103,101,244,0,0,0,115,10,0,0,0,12,2,10,1,8, 1,24,1,4,253,114,17,0,0,0,114,84,0,0,0,99, 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,243,28,0,0,0,135,2,136,2,102,1,100, - 1,100,2,132,8,125,1,116,0,124,1,137,2,131,2,1, + 3,0,0,0,243,28,0,0,0,135,0,136,0,102,1,100, + 1,100,2,132,8,125,1,116,0,124,1,137,0,131,2,1, 0,124,1,83,0,41,4,122,49,68,101,99,111,114,97,116, 111,114,32,116,111,32,118,101,114,105,102,121,32,116,104,101, 32,110,97,109,101,100,32,109,111,100,117,108,101,32,105,115, @@ -454,1456 +454,1455 @@ const unsigned char _Py_M__importlib_bootstrap[] = { 108,116,105,110,46,60,108,111,99,97,108,115,62,46,95,114, 101,113,117,105,114,101,115,95,98,117,105,108,116,105,110,95, 119,114,97,112,112,101,114,78,169,1,114,16,0,0,0,41, - 3,114,91,0,0,0,114,92,0,0,0,114,91,0,0,0, - 96,32,64,114,5,0,0,0,218,17,95,114,101,113,117,105, - 114,101,115,95,98,117,105,108,116,105,110,252,0,0,0,243, - 8,0,0,0,2,128,12,2,10,5,4,1,114,17,0,0, - 0,114,95,0,0,0,99,1,0,0,0,0,0,0,0,0, - 0,0,0,3,0,0,0,3,0,0,0,114,85,0,0,0, - 41,4,122,47,68,101,99,111,114,97,116,111,114,32,116,111, - 32,118,101,114,105,102,121,32,116,104,101,32,110,97,109,101, - 100,32,109,111,100,117,108,101,32,105,115,32,102,114,111,122, - 101,110,46,99,2,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,19,0,0,0,115,38,0,0,0,116,0,160, - 1,124,1,161,1,115,14,116,2,100,1,160,3,124,1,161, - 1,124,1,100,2,141,2,130,1,137,2,124,0,124,1,131, - 2,83,0,169,3,78,122,27,123,33,114,125,32,105,115,32, - 110,111,116,32,97,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,114,19,0,0,0,41,4,114,65,0,0,0,218, - 9,105,115,95,102,114,111,122,101,110,114,88,0,0,0,114, - 51,0,0,0,114,89,0,0,0,32,32,128,114,5,0,0, - 0,218,24,95,114,101,113,117,105,114,101,115,95,102,114,111, - 122,101,110,95,119,114,97,112,112,101,114,9,1,0,0,114, - 93,0,0,0,114,17,0,0,0,122,50,95,114,101,113,117, - 105,114,101,115,95,102,114,111,122,101,110,46,60,108,111,99, - 97,108,115,62,46,95,114,101,113,117,105,114,101,115,95,102, - 114,111,122,101,110,95,119,114,97,112,112,101,114,78,114,94, - 0,0,0,41,3,114,91,0,0,0,114,99,0,0,0,114, - 91,0,0,0,96,32,64,114,5,0,0,0,218,16,95,114, - 101,113,117,105,114,101,115,95,102,114,111,122,101,110,7,1, - 0,0,114,96,0,0,0,114,17,0,0,0,114,100,0,0, - 0,99,2,0,0,0,0,0,0,0,0,0,0,0,4,0, - 0,0,67,0,0,0,115,74,0,0,0,100,1,125,2,116, - 0,160,1,124,2,116,2,161,2,1,0,116,3,124,1,124, - 0,131,2,125,3,124,1,116,4,106,5,118,0,114,33,116, - 4,106,5,124,1,25,0,125,4,116,6,124,3,124,4,131, - 2,1,0,116,4,106,5,124,1,25,0,83,0,116,7,124, - 3,131,1,83,0,41,3,122,130,76,111,97,100,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,117, - 108,101,32,105,110,116,111,32,115,121,115,46,109,111,100,117, - 108,101,115,32,97,110,100,32,114,101,116,117,114,110,32,105, - 116,46,10,10,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,108,111,97,100,101,114,46,101, - 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, - 116,101,97,100,46,10,10,32,32,32,32,122,103,116,104,101, - 32,108,111,97,100,95,109,111,100,117,108,101,40,41,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, - 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, - 116,104,111,110,32,51,46,49,50,59,32,117,115,101,32,101, - 120,101,99,95,109,111,100,117,108,101,40,41,32,105,110,115, - 116,101,97,100,78,41,8,218,9,95,119,97,114,110,105,110, - 103,115,218,4,119,97,114,110,218,18,68,101,112,114,101,99, - 97,116,105,111,110,87,97,114,110,105,110,103,218,16,115,112, - 101,99,95,102,114,111,109,95,108,111,97,100,101,114,114,18, - 0,0,0,218,7,109,111,100,117,108,101,115,218,5,95,101, - 120,101,99,218,5,95,108,111,97,100,41,5,114,34,0,0, - 0,114,90,0,0,0,218,3,109,115,103,218,4,115,112,101, - 99,218,6,109,111,100,117,108,101,32,32,32,32,32,114,5, - 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,19,1,0,0,115,16,0,0,0,4, - 6,12,2,10,1,10,1,10,1,10,1,10,1,8,2,114, - 17,0,0,0,114,111,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,8,0,0,0,67,0,0,0,115,194, - 0,0,0,116,0,124,0,100,1,100,2,131,3,125,1,116, - 0,124,0,100,3,100,2,131,3,4,0,125,2,114,18,116, - 1,124,2,131,1,83,0,116,2,124,1,100,4,131,2,114, - 39,9,0,124,1,160,3,124,0,161,1,83,0,35,0,4, - 0,116,4,121,96,1,0,1,0,1,0,89,0,110,1,37, - 0,9,0,124,0,106,5,125,3,110,12,35,0,4,0,116, - 6,121,95,1,0,1,0,1,0,100,5,125,3,89,0,110, - 1,37,0,9,0,124,0,106,7,125,4,110,27,35,0,4, - 0,116,6,121,94,1,0,1,0,1,0,124,1,100,2,117, - 0,114,79,100,6,160,8,124,3,161,1,6,0,89,0,83, - 0,100,7,160,8,124,3,124,1,161,2,6,0,89,0,83, - 0,37,0,100,8,160,8,124,3,124,4,161,2,83,0,119, - 0,119,0,119,0,41,9,122,44,84,104,101,32,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,77, - 111,100,117,108,101,84,121,112,101,46,95,95,114,101,112,114, - 95,95,40,41,46,218,10,95,95,108,111,97,100,101,114,95, - 95,78,218,8,95,95,115,112,101,99,95,95,218,11,109,111, - 100,117,108,101,95,114,101,112,114,250,1,63,250,13,60,109, - 111,100,117,108,101,32,123,33,114,125,62,250,20,60,109,111, - 100,117,108,101,32,123,33,114,125,32,40,123,33,114,125,41, - 62,250,23,60,109,111,100,117,108,101,32,123,33,114,125,32, - 102,114,111,109,32,123,33,114,125,62,41,9,114,12,0,0, - 0,218,22,95,109,111,100,117,108,101,95,114,101,112,114,95, - 102,114,111,109,95,115,112,101,99,114,10,0,0,0,114,114, - 0,0,0,218,9,69,120,99,101,112,116,105,111,110,114,8, - 0,0,0,114,2,0,0,0,218,8,95,95,102,105,108,101, - 95,95,114,51,0,0,0,41,5,114,110,0,0,0,218,6, - 108,111,97,100,101,114,114,109,0,0,0,114,20,0,0,0, - 218,8,102,105,108,101,110,97,109,101,32,32,32,32,32,114, - 5,0,0,0,218,12,95,109,111,100,117,108,101,95,114,101, - 112,114,38,1,0,0,115,56,0,0,0,12,2,16,1,8, - 1,10,1,2,1,10,1,2,128,12,1,4,1,2,128,2, - 2,8,1,2,128,12,1,8,1,2,128,2,1,8,1,2, - 128,12,1,8,1,14,1,16,2,2,128,12,2,2,250,2, - 252,2,251,115,47,0,0,0,152,4,29,0,157,7,38,7, - 168,3,44,0,172,9,55,7,185,3,61,0,189,16,65,23, - 7,193,15,6,65,23,7,193,30,1,65,23,7,193,31,1, - 55,7,193,32,1,38,7,114,124,0,0,0,99,0,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,64,0,0, - 0,115,114,0,0,0,101,0,90,1,100,0,90,2,100,1, - 90,3,100,2,100,2,100,2,100,3,156,3,100,4,100,5, - 132,2,90,4,100,6,100,7,132,0,90,5,100,8,100,9, - 132,0,90,6,101,7,100,10,100,11,132,0,131,1,90,8, - 101,8,106,9,100,12,100,11,132,0,131,1,90,8,101,7, - 100,13,100,14,132,0,131,1,90,10,101,7,100,15,100,16, - 132,0,131,1,90,11,101,11,106,9,100,17,100,16,132,0, - 131,1,90,11,100,2,83,0,41,18,218,10,77,111,100,117, - 108,101,83,112,101,99,97,208,5,0,0,84,104,101,32,115, - 112,101,99,105,102,105,99,97,116,105,111,110,32,102,111,114, - 32,97,32,109,111,100,117,108,101,44,32,117,115,101,100,32, - 102,111,114,32,108,111,97,100,105,110,103,46,10,10,32,32, - 32,32,65,32,109,111,100,117,108,101,39,115,32,115,112,101, - 99,32,105,115,32,116,104,101,32,115,111,117,114,99,101,32, - 102,111,114,32,105,110,102,111,114,109,97,116,105,111,110,32, - 97,98,111,117,116,32,116,104,101,32,109,111,100,117,108,101, - 46,32,32,70,111,114,10,32,32,32,32,100,97,116,97,32, - 97,115,115,111,99,105,97,116,101,100,32,119,105,116,104,32, - 116,104,101,32,109,111,100,117,108,101,44,32,105,110,99,108, - 117,100,105,110,103,32,115,111,117,114,99,101,44,32,117,115, - 101,32,116,104,101,32,115,112,101,99,39,115,10,32,32,32, - 32,108,111,97,100,101,114,46,10,10,32,32,32,32,96,110, - 97,109,101,96,32,105,115,32,116,104,101,32,97,98,115,111, - 108,117,116,101,32,110,97,109,101,32,111,102,32,116,104,101, - 32,109,111,100,117,108,101,46,32,32,96,108,111,97,100,101, - 114,96,32,105,115,32,116,104,101,32,108,111,97,100,101,114, - 10,32,32,32,32,116,111,32,117,115,101,32,119,104,101,110, - 32,108,111,97,100,105,110,103,32,116,104,101,32,109,111,100, - 117,108,101,46,32,32,96,112,97,114,101,110,116,96,32,105, - 115,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104, - 101,10,32,32,32,32,112,97,99,107,97,103,101,32,116,104, - 101,32,109,111,100,117,108,101,32,105,115,32,105,110,46,32, - 32,84,104,101,32,112,97,114,101,110,116,32,105,115,32,100, - 101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32, - 110,97,109,101,46,10,10,32,32,32,32,96,105,115,95,112, - 97,99,107,97,103,101,96,32,100,101,116,101,114,109,105,110, - 101,115,32,105,102,32,116,104,101,32,109,111,100,117,108,101, - 32,105,115,32,99,111,110,115,105,100,101,114,101,100,32,97, - 32,112,97,99,107,97,103,101,32,111,114,10,32,32,32,32, - 110,111,116,46,32,32,79,110,32,109,111,100,117,108,101,115, - 32,116,104,105,115,32,105,115,32,114,101,102,108,101,99,116, - 101,100,32,98,121,32,116,104,101,32,96,95,95,112,97,116, - 104,95,95,96,32,97,116,116,114,105,98,117,116,101,46,10, - 10,32,32,32,32,96,111,114,105,103,105,110,96,32,105,115, - 32,116,104,101,32,115,112,101,99,105,102,105,99,32,108,111, - 99,97,116,105,111,110,32,117,115,101,100,32,98,121,32,116, - 104,101,32,108,111,97,100,101,114,32,102,114,111,109,32,119, - 104,105,99,104,32,116,111,10,32,32,32,32,108,111,97,100, - 32,116,104,101,32,109,111,100,117,108,101,44,32,105,102,32, - 116,104,97,116,32,105,110,102,111,114,109,97,116,105,111,110, - 32,105,115,32,97,118,97,105,108,97,98,108,101,46,32,32, - 87,104,101,110,32,102,105,108,101,110,97,109,101,32,105,115, - 10,32,32,32,32,115,101,116,44,32,111,114,105,103,105,110, - 32,119,105,108,108,32,109,97,116,99,104,46,10,10,32,32, - 32,32,96,104,97,115,95,108,111,99,97,116,105,111,110,96, - 32,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32, - 97,32,115,112,101,99,39,115,32,34,111,114,105,103,105,110, - 34,32,114,101,102,108,101,99,116,115,32,97,32,108,111,99, - 97,116,105,111,110,46,10,32,32,32,32,87,104,101,110,32, - 116,104,105,115,32,105,115,32,84,114,117,101,44,32,96,95, - 95,102,105,108,101,95,95,96,32,97,116,116,114,105,98,117, - 116,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, - 32,105,115,32,115,101,116,46,10,10,32,32,32,32,96,99, - 97,99,104,101,100,96,32,105,115,32,116,104,101,32,108,111, - 99,97,116,105,111,110,32,111,102,32,116,104,101,32,99,97, - 99,104,101,100,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,44,32,105,102,32,97,110,121,46,32,32,73,116,10, - 32,32,32,32,99,111,114,114,101,115,112,111,110,100,115,32, - 116,111,32,116,104,101,32,96,95,95,99,97,99,104,101,100, - 95,95,96,32,97,116,116,114,105,98,117,116,101,46,10,10, - 32,32,32,32,96,115,117,98,109,111,100,117,108,101,95,115, - 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,96, - 32,105,115,32,116,104,101,32,115,101,113,117,101,110,99,101, - 32,111,102,32,112,97,116,104,32,101,110,116,114,105,101,115, - 32,116,111,10,32,32,32,32,115,101,97,114,99,104,32,119, - 104,101,110,32,105,109,112,111,114,116,105,110,103,32,115,117, - 98,109,111,100,117,108,101,115,46,32,32,73,102,32,115,101, - 116,44,32,105,115,95,112,97,99,107,97,103,101,32,115,104, - 111,117,108,100,32,98,101,10,32,32,32,32,84,114,117,101, - 45,45,97,110,100,32,70,97,108,115,101,32,111,116,104,101, - 114,119,105,115,101,46,10,10,32,32,32,32,80,97,99,107, - 97,103,101,115,32,97,114,101,32,115,105,109,112,108,121,32, - 109,111,100,117,108,101,115,32,116,104,97,116,32,40,109,97, - 121,41,32,104,97,118,101,32,115,117,98,109,111,100,117,108, - 101,115,46,32,32,73,102,32,97,32,115,112,101,99,10,32, - 32,32,32,104,97,115,32,97,32,110,111,110,45,78,111,110, - 101,32,118,97,108,117,101,32,105,110,32,96,115,117,98,109, - 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, - 97,116,105,111,110,115,96,44,32,116,104,101,32,105,109,112, - 111,114,116,10,32,32,32,32,115,121,115,116,101,109,32,119, - 105,108,108,32,99,111,110,115,105,100,101,114,32,109,111,100, - 117,108,101,115,32,108,111,97,100,101,100,32,102,114,111,109, - 32,116,104,101,32,115,112,101,99,32,97,115,32,112,97,99, - 107,97,103,101,115,46,10,10,32,32,32,32,79,110,108,121, - 32,102,105,110,100,101,114,115,32,40,115,101,101,32,105,109, - 112,111,114,116,108,105,98,46,97,98,99,46,77,101,116,97, - 80,97,116,104,70,105,110,100,101,114,32,97,110,100,10,32, - 32,32,32,105,109,112,111,114,116,108,105,98,46,97,98,99, - 46,80,97,116,104,69,110,116,114,121,70,105,110,100,101,114, - 41,32,115,104,111,117,108,100,32,109,111,100,105,102,121,32, - 77,111,100,117,108,101,83,112,101,99,32,105,110,115,116,97, - 110,99,101,115,46,10,10,32,32,32,32,78,41,3,218,6, - 111,114,105,103,105,110,218,12,108,111,97,100,101,114,95,115, - 116,97,116,101,218,10,105,115,95,112,97,99,107,97,103,101, - 99,3,0,0,0,0,0,0,0,3,0,0,0,2,0,0, - 0,67,0,0,0,115,54,0,0,0,124,1,124,0,95,0, - 124,2,124,0,95,1,124,3,124,0,95,2,124,4,124,0, - 95,3,124,5,114,16,103,0,110,1,100,0,124,0,95,4, - 100,1,124,0,95,5,100,0,124,0,95,6,100,0,83,0, - 41,2,78,70,41,7,114,20,0,0,0,114,122,0,0,0, - 114,126,0,0,0,114,127,0,0,0,218,26,115,117,98,109, - 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, - 97,116,105,111,110,115,218,13,95,115,101,116,95,102,105,108, - 101,97,116,116,114,218,7,95,99,97,99,104,101,100,41,6, - 114,34,0,0,0,114,20,0,0,0,114,122,0,0,0,114, - 126,0,0,0,114,127,0,0,0,114,128,0,0,0,32,32, - 32,32,32,32,114,5,0,0,0,114,35,0,0,0,101,1, - 0,0,115,14,0,0,0,6,2,6,1,6,1,6,1,14, - 1,6,3,10,1,114,17,0,0,0,122,19,77,111,100,117, - 108,101,83,112,101,99,46,95,95,105,110,105,116,95,95,99, - 1,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0, - 67,0,0,0,115,102,0,0,0,100,1,160,0,124,0,106, - 1,161,1,100,2,160,0,124,0,106,2,161,1,103,2,125, - 1,124,0,106,3,100,0,117,1,114,26,124,1,160,4,100, - 3,160,0,124,0,106,3,161,1,161,1,1,0,124,0,106, - 5,100,0,117,1,114,40,124,1,160,4,100,4,160,0,124, - 0,106,5,161,1,161,1,1,0,100,5,160,0,124,0,106, - 6,106,7,100,6,160,8,124,1,161,1,161,2,83,0,41, - 7,78,122,9,110,97,109,101,61,123,33,114,125,122,11,108, - 111,97,100,101,114,61,123,33,114,125,122,11,111,114,105,103, - 105,110,61,123,33,114,125,122,29,115,117,98,109,111,100,117, + 2,114,91,0,0,0,114,92,0,0,0,96,32,114,5,0, + 0,0,218,17,95,114,101,113,117,105,114,101,115,95,98,117, + 105,108,116,105,110,252,0,0,0,243,8,0,0,0,2,128, + 12,2,10,5,4,1,114,17,0,0,0,114,95,0,0,0, + 99,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,114,85,0,0,0,41,4,122,47,68,101, + 99,111,114,97,116,111,114,32,116,111,32,118,101,114,105,102, + 121,32,116,104,101,32,110,97,109,101,100,32,109,111,100,117, + 108,101,32,105,115,32,102,114,111,122,101,110,46,99,2,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,19,0, + 0,0,115,38,0,0,0,116,0,160,1,124,1,161,1,115, + 14,116,2,100,1,160,3,124,1,161,1,124,1,100,2,141, + 2,130,1,137,2,124,0,124,1,131,2,83,0,169,3,78, + 122,27,123,33,114,125,32,105,115,32,110,111,116,32,97,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,114,19,0, + 0,0,41,4,114,65,0,0,0,218,9,105,115,95,102,114, + 111,122,101,110,114,88,0,0,0,114,51,0,0,0,114,89, + 0,0,0,32,32,128,114,5,0,0,0,218,24,95,114,101, + 113,117,105,114,101,115,95,102,114,111,122,101,110,95,119,114, + 97,112,112,101,114,9,1,0,0,114,93,0,0,0,114,17, + 0,0,0,122,50,95,114,101,113,117,105,114,101,115,95,102, + 114,111,122,101,110,46,60,108,111,99,97,108,115,62,46,95, + 114,101,113,117,105,114,101,115,95,102,114,111,122,101,110,95, + 119,114,97,112,112,101,114,78,114,94,0,0,0,41,2,114, + 91,0,0,0,114,99,0,0,0,96,32,114,5,0,0,0, + 218,16,95,114,101,113,117,105,114,101,115,95,102,114,111,122, + 101,110,7,1,0,0,114,96,0,0,0,114,17,0,0,0, + 114,100,0,0,0,99,2,0,0,0,0,0,0,0,0,0, + 0,0,4,0,0,0,67,0,0,0,115,74,0,0,0,100, + 1,125,2,116,0,160,1,124,2,116,2,161,2,1,0,116, + 3,124,1,124,0,131,2,125,3,124,1,116,4,106,5,118, + 0,114,33,116,4,106,5,124,1,25,0,125,4,116,6,124, + 3,124,4,131,2,1,0,116,4,106,5,124,1,25,0,83, + 0,116,7,124,3,131,1,83,0,41,3,122,130,76,111,97, + 100,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,117,108,101,32,105,110,116,111,32,115,121,115,46, + 109,111,100,117,108,101,115,32,97,110,100,32,114,101,116,117, + 114,110,32,105,116,46,10,10,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,108,111,97,100, + 101,114,46,101,120,101,99,95,109,111,100,117,108,101,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,122, + 103,116,104,101,32,108,111,97,100,95,109,111,100,117,108,101, + 40,41,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,32,97,110,100,32,115,108,97,116, + 101,100,32,102,111,114,32,114,101,109,111,118,97,108,32,105, + 110,32,80,121,116,104,111,110,32,51,46,49,50,59,32,117, + 115,101,32,101,120,101,99,95,109,111,100,117,108,101,40,41, + 32,105,110,115,116,101,97,100,78,41,8,218,9,95,119,97, + 114,110,105,110,103,115,218,4,119,97,114,110,218,18,68,101, + 112,114,101,99,97,116,105,111,110,87,97,114,110,105,110,103, + 218,16,115,112,101,99,95,102,114,111,109,95,108,111,97,100, + 101,114,114,18,0,0,0,218,7,109,111,100,117,108,101,115, + 218,5,95,101,120,101,99,218,5,95,108,111,97,100,41,5, + 114,34,0,0,0,114,90,0,0,0,218,3,109,115,103,218, + 4,115,112,101,99,218,6,109,111,100,117,108,101,32,32,32, + 32,32,114,5,0,0,0,218,17,95,108,111,97,100,95,109, + 111,100,117,108,101,95,115,104,105,109,19,1,0,0,115,16, + 0,0,0,4,6,12,2,10,1,10,1,10,1,10,1,10, + 1,8,2,114,17,0,0,0,114,111,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,8,0,0,0,67,0, + 0,0,115,194,0,0,0,116,0,124,0,100,1,100,2,131, + 3,125,1,116,0,124,0,100,3,100,2,131,3,4,0,125, + 2,114,18,116,1,124,2,131,1,83,0,116,2,124,1,100, + 4,131,2,114,39,9,0,124,1,160,3,124,0,161,1,83, + 0,35,0,4,0,116,4,121,96,1,0,1,0,1,0,89, + 0,110,1,37,0,9,0,124,0,106,5,125,3,110,12,35, + 0,4,0,116,6,121,95,1,0,1,0,1,0,100,5,125, + 3,89,0,110,1,37,0,9,0,124,0,106,7,125,4,110, + 27,35,0,4,0,116,6,121,94,1,0,1,0,1,0,124, + 1,100,2,117,0,114,79,100,6,160,8,124,3,161,1,6, + 0,89,0,83,0,100,7,160,8,124,3,124,1,161,2,6, + 0,89,0,83,0,37,0,100,8,160,8,124,3,124,4,161, + 2,83,0,119,0,119,0,119,0,41,9,122,44,84,104,101, + 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, + 111,102,32,77,111,100,117,108,101,84,121,112,101,46,95,95, + 114,101,112,114,95,95,40,41,46,218,10,95,95,108,111,97, + 100,101,114,95,95,78,218,8,95,95,115,112,101,99,95,95, + 218,11,109,111,100,117,108,101,95,114,101,112,114,250,1,63, + 250,13,60,109,111,100,117,108,101,32,123,33,114,125,62,250, + 20,60,109,111,100,117,108,101,32,123,33,114,125,32,40,123, + 33,114,125,41,62,250,23,60,109,111,100,117,108,101,32,123, + 33,114,125,32,102,114,111,109,32,123,33,114,125,62,41,9, + 114,12,0,0,0,218,22,95,109,111,100,117,108,101,95,114, + 101,112,114,95,102,114,111,109,95,115,112,101,99,114,10,0, + 0,0,114,114,0,0,0,218,9,69,120,99,101,112,116,105, + 111,110,114,8,0,0,0,114,2,0,0,0,218,8,95,95, + 102,105,108,101,95,95,114,51,0,0,0,41,5,114,110,0, + 0,0,218,6,108,111,97,100,101,114,114,109,0,0,0,114, + 20,0,0,0,218,8,102,105,108,101,110,97,109,101,32,32, + 32,32,32,114,5,0,0,0,218,12,95,109,111,100,117,108, + 101,95,114,101,112,114,38,1,0,0,115,56,0,0,0,12, + 2,16,1,8,1,10,1,2,1,10,1,2,128,12,1,4, + 1,2,128,2,2,8,1,2,128,12,1,8,1,2,128,2, + 1,8,1,2,128,12,1,8,1,14,1,16,2,2,128,12, + 2,2,250,2,252,2,251,115,47,0,0,0,152,4,29,0, + 157,7,38,7,168,3,44,0,172,9,55,7,185,3,61,0, + 189,16,65,23,7,193,15,6,65,23,7,193,30,1,65,23, + 7,193,31,1,55,7,193,32,1,38,7,114,124,0,0,0, + 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,64,0,0,0,115,114,0,0,0,101,0,90,1,100,0, + 90,2,100,1,90,3,100,2,100,2,100,2,100,3,156,3, + 100,4,100,5,132,2,90,4,100,6,100,7,132,0,90,5, + 100,8,100,9,132,0,90,6,101,7,100,10,100,11,132,0, + 131,1,90,8,101,8,106,9,100,12,100,11,132,0,131,1, + 90,8,101,7,100,13,100,14,132,0,131,1,90,10,101,7, + 100,15,100,16,132,0,131,1,90,11,101,11,106,9,100,17, + 100,16,132,0,131,1,90,11,100,2,83,0,41,18,218,10, + 77,111,100,117,108,101,83,112,101,99,97,208,5,0,0,84, + 104,101,32,115,112,101,99,105,102,105,99,97,116,105,111,110, + 32,102,111,114,32,97,32,109,111,100,117,108,101,44,32,117, + 115,101,100,32,102,111,114,32,108,111,97,100,105,110,103,46, + 10,10,32,32,32,32,65,32,109,111,100,117,108,101,39,115, + 32,115,112,101,99,32,105,115,32,116,104,101,32,115,111,117, + 114,99,101,32,102,111,114,32,105,110,102,111,114,109,97,116, + 105,111,110,32,97,98,111,117,116,32,116,104,101,32,109,111, + 100,117,108,101,46,32,32,70,111,114,10,32,32,32,32,100, + 97,116,97,32,97,115,115,111,99,105,97,116,101,100,32,119, + 105,116,104,32,116,104,101,32,109,111,100,117,108,101,44,32, + 105,110,99,108,117,100,105,110,103,32,115,111,117,114,99,101, + 44,32,117,115,101,32,116,104,101,32,115,112,101,99,39,115, + 10,32,32,32,32,108,111,97,100,101,114,46,10,10,32,32, + 32,32,96,110,97,109,101,96,32,105,115,32,116,104,101,32, + 97,98,115,111,108,117,116,101,32,110,97,109,101,32,111,102, + 32,116,104,101,32,109,111,100,117,108,101,46,32,32,96,108, + 111,97,100,101,114,96,32,105,115,32,116,104,101,32,108,111, + 97,100,101,114,10,32,32,32,32,116,111,32,117,115,101,32, + 119,104,101,110,32,108,111,97,100,105,110,103,32,116,104,101, + 32,109,111,100,117,108,101,46,32,32,96,112,97,114,101,110, + 116,96,32,105,115,32,116,104,101,32,110,97,109,101,32,111, + 102,32,116,104,101,10,32,32,32,32,112,97,99,107,97,103, + 101,32,116,104,101,32,109,111,100,117,108,101,32,105,115,32, + 105,110,46,32,32,84,104,101,32,112,97,114,101,110,116,32, + 105,115,32,100,101,114,105,118,101,100,32,102,114,111,109,32, + 116,104,101,32,110,97,109,101,46,10,10,32,32,32,32,96, + 105,115,95,112,97,99,107,97,103,101,96,32,100,101,116,101, + 114,109,105,110,101,115,32,105,102,32,116,104,101,32,109,111, + 100,117,108,101,32,105,115,32,99,111,110,115,105,100,101,114, + 101,100,32,97,32,112,97,99,107,97,103,101,32,111,114,10, + 32,32,32,32,110,111,116,46,32,32,79,110,32,109,111,100, + 117,108,101,115,32,116,104,105,115,32,105,115,32,114,101,102, + 108,101,99,116,101,100,32,98,121,32,116,104,101,32,96,95, + 95,112,97,116,104,95,95,96,32,97,116,116,114,105,98,117, + 116,101,46,10,10,32,32,32,32,96,111,114,105,103,105,110, + 96,32,105,115,32,116,104,101,32,115,112,101,99,105,102,105, + 99,32,108,111,99,97,116,105,111,110,32,117,115,101,100,32, + 98,121,32,116,104,101,32,108,111,97,100,101,114,32,102,114, + 111,109,32,119,104,105,99,104,32,116,111,10,32,32,32,32, + 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,44, + 32,105,102,32,116,104,97,116,32,105,110,102,111,114,109,97, + 116,105,111,110,32,105,115,32,97,118,97,105,108,97,98,108, + 101,46,32,32,87,104,101,110,32,102,105,108,101,110,97,109, + 101,32,105,115,10,32,32,32,32,115,101,116,44,32,111,114, + 105,103,105,110,32,119,105,108,108,32,109,97,116,99,104,46, + 10,10,32,32,32,32,96,104,97,115,95,108,111,99,97,116, + 105,111,110,96,32,105,110,100,105,99,97,116,101,115,32,116, + 104,97,116,32,97,32,115,112,101,99,39,115,32,34,111,114, + 105,103,105,110,34,32,114,101,102,108,101,99,116,115,32,97, + 32,108,111,99,97,116,105,111,110,46,10,32,32,32,32,87, + 104,101,110,32,116,104,105,115,32,105,115,32,84,114,117,101, + 44,32,96,95,95,102,105,108,101,95,95,96,32,97,116,116, + 114,105,98,117,116,101,32,111,102,32,116,104,101,32,109,111, + 100,117,108,101,32,105,115,32,115,101,116,46,10,10,32,32, + 32,32,96,99,97,99,104,101,100,96,32,105,115,32,116,104, + 101,32,108,111,99,97,116,105,111,110,32,111,102,32,116,104, + 101,32,99,97,99,104,101,100,32,98,121,116,101,99,111,100, + 101,32,102,105,108,101,44,32,105,102,32,97,110,121,46,32, + 32,73,116,10,32,32,32,32,99,111,114,114,101,115,112,111, + 110,100,115,32,116,111,32,116,104,101,32,96,95,95,99,97, + 99,104,101,100,95,95,96,32,97,116,116,114,105,98,117,116, + 101,46,10,10,32,32,32,32,96,115,117,98,109,111,100,117, 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, - 111,110,115,61,123,125,122,6,123,125,40,123,125,41,122,2, - 44,32,41,9,114,51,0,0,0,114,20,0,0,0,114,122, - 0,0,0,114,126,0,0,0,218,6,97,112,112,101,110,100, - 114,129,0,0,0,218,9,95,95,99,108,97,115,115,95,95, - 114,8,0,0,0,218,4,106,111,105,110,41,2,114,34,0, - 0,0,114,63,0,0,0,32,32,114,5,0,0,0,114,54, - 0,0,0,113,1,0,0,115,20,0,0,0,10,1,10,1, - 4,255,10,2,18,1,10,1,6,1,8,1,4,255,22,2, - 114,17,0,0,0,122,19,77,111,100,117,108,101,83,112,101, - 99,46,95,95,114,101,112,114,95,95,99,2,0,0,0,0, - 0,0,0,0,0,0,0,8,0,0,0,67,0,0,0,115, - 104,0,0,0,124,0,106,0,125,2,9,0,124,0,106,1, - 124,1,106,1,107,2,111,38,124,0,106,2,124,1,106,2, - 107,2,111,38,124,0,106,3,124,1,106,3,107,2,111,38, - 124,2,124,1,106,0,107,2,111,38,124,0,106,4,124,1, - 106,4,107,2,111,38,124,0,106,5,124,1,106,5,107,2, - 83,0,35,0,4,0,116,6,121,51,1,0,1,0,1,0, - 116,7,6,0,89,0,83,0,37,0,119,0,114,0,0,0, - 0,41,8,114,129,0,0,0,114,20,0,0,0,114,122,0, - 0,0,114,126,0,0,0,218,6,99,97,99,104,101,100,218, - 12,104,97,115,95,108,111,99,97,116,105,111,110,114,2,0, - 0,0,218,14,78,111,116,73,109,112,108,101,109,101,110,116, - 101,100,41,3,114,34,0,0,0,90,5,111,116,104,101,114, - 90,4,115,109,115,108,32,32,32,114,5,0,0,0,218,6, - 95,95,101,113,95,95,123,1,0,0,115,36,0,0,0,6, - 1,2,1,12,1,10,1,2,255,10,2,2,254,8,3,2, - 253,10,4,2,252,10,5,2,251,2,128,12,6,8,1,2, - 128,2,255,115,12,0,0,0,132,34,39,0,167,9,50,7, - 179,1,50,7,122,17,77,111,100,117,108,101,83,112,101,99, - 46,95,95,101,113,95,95,99,1,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,67,0,0,0,115,58,0,0, - 0,124,0,106,0,100,0,117,0,114,26,124,0,106,1,100, - 0,117,1,114,26,124,0,106,2,114,26,116,3,100,0,117, - 0,114,19,116,4,130,1,116,3,160,5,124,0,106,1,161, - 1,124,0,95,0,124,0,106,0,83,0,114,0,0,0,0, - 41,6,114,131,0,0,0,114,126,0,0,0,114,130,0,0, - 0,218,19,95,98,111,111,116,115,116,114,97,112,95,101,120, - 116,101,114,110,97,108,218,19,78,111,116,73,109,112,108,101, - 109,101,110,116,101,100,69,114,114,111,114,90,11,95,103,101, - 116,95,99,97,99,104,101,100,114,53,0,0,0,32,114,5, - 0,0,0,114,135,0,0,0,135,1,0,0,115,12,0,0, - 0,10,2,16,1,8,1,4,1,14,1,6,1,114,17,0, - 0,0,122,17,77,111,100,117,108,101,83,112,101,99,46,99, - 97,99,104,101,100,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,67,0,0,0,115,10,0,0,0,124, - 1,124,0,95,0,100,0,83,0,114,0,0,0,0,41,1, - 114,131,0,0,0,41,2,114,34,0,0,0,114,135,0,0, - 0,32,32,114,5,0,0,0,114,135,0,0,0,144,1,0, - 0,115,2,0,0,0,10,2,114,17,0,0,0,99,1,0, + 111,110,115,96,32,105,115,32,116,104,101,32,115,101,113,117, + 101,110,99,101,32,111,102,32,112,97,116,104,32,101,110,116, + 114,105,101,115,32,116,111,10,32,32,32,32,115,101,97,114, + 99,104,32,119,104,101,110,32,105,109,112,111,114,116,105,110, + 103,32,115,117,98,109,111,100,117,108,101,115,46,32,32,73, + 102,32,115,101,116,44,32,105,115,95,112,97,99,107,97,103, + 101,32,115,104,111,117,108,100,32,98,101,10,32,32,32,32, + 84,114,117,101,45,45,97,110,100,32,70,97,108,115,101,32, + 111,116,104,101,114,119,105,115,101,46,10,10,32,32,32,32, + 80,97,99,107,97,103,101,115,32,97,114,101,32,115,105,109, + 112,108,121,32,109,111,100,117,108,101,115,32,116,104,97,116, + 32,40,109,97,121,41,32,104,97,118,101,32,115,117,98,109, + 111,100,117,108,101,115,46,32,32,73,102,32,97,32,115,112, + 101,99,10,32,32,32,32,104,97,115,32,97,32,110,111,110, + 45,78,111,110,101,32,118,97,108,117,101,32,105,110,32,96, + 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, + 95,108,111,99,97,116,105,111,110,115,96,44,32,116,104,101, + 32,105,109,112,111,114,116,10,32,32,32,32,115,121,115,116, + 101,109,32,119,105,108,108,32,99,111,110,115,105,100,101,114, + 32,109,111,100,117,108,101,115,32,108,111,97,100,101,100,32, + 102,114,111,109,32,116,104,101,32,115,112,101,99,32,97,115, + 32,112,97,99,107,97,103,101,115,46,10,10,32,32,32,32, + 79,110,108,121,32,102,105,110,100,101,114,115,32,40,115,101, + 101,32,105,109,112,111,114,116,108,105,98,46,97,98,99,46, + 77,101,116,97,80,97,116,104,70,105,110,100,101,114,32,97, + 110,100,10,32,32,32,32,105,109,112,111,114,116,108,105,98, + 46,97,98,99,46,80,97,116,104,69,110,116,114,121,70,105, + 110,100,101,114,41,32,115,104,111,117,108,100,32,109,111,100, + 105,102,121,32,77,111,100,117,108,101,83,112,101,99,32,105, + 110,115,116,97,110,99,101,115,46,10,10,32,32,32,32,78, + 41,3,218,6,111,114,105,103,105,110,218,12,108,111,97,100, + 101,114,95,115,116,97,116,101,218,10,105,115,95,112,97,99, + 107,97,103,101,99,3,0,0,0,0,0,0,0,3,0,0, + 0,2,0,0,0,67,0,0,0,115,54,0,0,0,124,1, + 124,0,95,0,124,2,124,0,95,1,124,3,124,0,95,2, + 124,4,124,0,95,3,124,5,114,16,103,0,110,1,100,0, + 124,0,95,4,100,1,124,0,95,5,100,0,124,0,95,6, + 100,0,83,0,41,2,78,70,41,7,114,20,0,0,0,114, + 122,0,0,0,114,126,0,0,0,114,127,0,0,0,218,26, + 115,117,98,109,111,100,117,108,101,95,115,101,97,114,99,104, + 95,108,111,99,97,116,105,111,110,115,218,13,95,115,101,116, + 95,102,105,108,101,97,116,116,114,218,7,95,99,97,99,104, + 101,100,41,6,114,34,0,0,0,114,20,0,0,0,114,122, + 0,0,0,114,126,0,0,0,114,127,0,0,0,114,128,0, + 0,0,32,32,32,32,32,32,114,5,0,0,0,114,35,0, + 0,0,101,1,0,0,115,14,0,0,0,6,2,6,1,6, + 1,6,1,14,1,6,3,10,1,114,17,0,0,0,122,19, + 77,111,100,117,108,101,83,112,101,99,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,0,0,0,0, + 6,0,0,0,67,0,0,0,115,102,0,0,0,100,1,160, + 0,124,0,106,1,161,1,100,2,160,0,124,0,106,2,161, + 1,103,2,125,1,124,0,106,3,100,0,117,1,114,26,124, + 1,160,4,100,3,160,0,124,0,106,3,161,1,161,1,1, + 0,124,0,106,5,100,0,117,1,114,40,124,1,160,4,100, + 4,160,0,124,0,106,5,161,1,161,1,1,0,100,5,160, + 0,124,0,106,6,106,7,100,6,160,8,124,1,161,1,161, + 2,83,0,41,7,78,122,9,110,97,109,101,61,123,33,114, + 125,122,11,108,111,97,100,101,114,61,123,33,114,125,122,11, + 111,114,105,103,105,110,61,123,33,114,125,122,29,115,117,98, + 109,111,100,117,108,101,95,115,101,97,114,99,104,95,108,111, + 99,97,116,105,111,110,115,61,123,125,122,6,123,125,40,123, + 125,41,122,2,44,32,41,9,114,51,0,0,0,114,20,0, + 0,0,114,122,0,0,0,114,126,0,0,0,218,6,97,112, + 112,101,110,100,114,129,0,0,0,218,9,95,95,99,108,97, + 115,115,95,95,114,8,0,0,0,218,4,106,111,105,110,41, + 2,114,34,0,0,0,114,63,0,0,0,32,32,114,5,0, + 0,0,114,54,0,0,0,113,1,0,0,115,20,0,0,0, + 10,1,10,1,4,255,10,2,18,1,10,1,6,1,8,1, + 4,255,22,2,114,17,0,0,0,122,19,77,111,100,117,108, + 101,83,112,101,99,46,95,95,114,101,112,114,95,95,99,2, + 0,0,0,0,0,0,0,0,0,0,0,8,0,0,0,67, + 0,0,0,115,104,0,0,0,124,0,106,0,125,2,9,0, + 124,0,106,1,124,1,106,1,107,2,111,38,124,0,106,2, + 124,1,106,2,107,2,111,38,124,0,106,3,124,1,106,3, + 107,2,111,38,124,2,124,1,106,0,107,2,111,38,124,0, + 106,4,124,1,106,4,107,2,111,38,124,0,106,5,124,1, + 106,5,107,2,83,0,35,0,4,0,116,6,121,51,1,0, + 1,0,1,0,116,7,6,0,89,0,83,0,37,0,119,0, + 114,0,0,0,0,41,8,114,129,0,0,0,114,20,0,0, + 0,114,122,0,0,0,114,126,0,0,0,218,6,99,97,99, + 104,101,100,218,12,104,97,115,95,108,111,99,97,116,105,111, + 110,114,2,0,0,0,218,14,78,111,116,73,109,112,108,101, + 109,101,110,116,101,100,41,3,114,34,0,0,0,90,5,111, + 116,104,101,114,90,4,115,109,115,108,32,32,32,114,5,0, + 0,0,218,6,95,95,101,113,95,95,123,1,0,0,115,36, + 0,0,0,6,1,2,1,12,1,10,1,2,255,10,2,2, + 254,8,3,2,253,10,4,2,252,10,5,2,251,2,128,12, + 6,8,1,2,128,2,255,115,12,0,0,0,132,34,39,0, + 167,9,50,7,179,1,50,7,122,17,77,111,100,117,108,101, + 83,112,101,99,46,95,95,101,113,95,95,99,1,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,67,0,0,0, + 115,58,0,0,0,124,0,106,0,100,0,117,0,114,26,124, + 0,106,1,100,0,117,1,114,26,124,0,106,2,114,26,116, + 3,100,0,117,0,114,19,116,4,130,1,116,3,160,5,124, + 0,106,1,161,1,124,0,95,0,124,0,106,0,83,0,114, + 0,0,0,0,41,6,114,131,0,0,0,114,126,0,0,0, + 114,130,0,0,0,218,19,95,98,111,111,116,115,116,114,97, + 112,95,101,120,116,101,114,110,97,108,218,19,78,111,116,73, + 109,112,108,101,109,101,110,116,101,100,69,114,114,111,114,90, + 11,95,103,101,116,95,99,97,99,104,101,100,114,53,0,0, + 0,32,114,5,0,0,0,114,135,0,0,0,135,1,0,0, + 115,12,0,0,0,10,2,16,1,8,1,4,1,14,1,6, + 1,114,17,0,0,0,122,17,77,111,100,117,108,101,83,112, + 101,99,46,99,97,99,104,101,100,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,67,0,0,0,115,10, + 0,0,0,124,1,124,0,95,0,100,0,83,0,114,0,0, + 0,0,41,1,114,131,0,0,0,41,2,114,34,0,0,0, + 114,135,0,0,0,32,32,114,5,0,0,0,114,135,0,0, + 0,144,1,0,0,115,2,0,0,0,10,2,114,17,0,0, + 0,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,67,0,0,0,115,32,0,0,0,124,0,106,0,100, + 1,117,0,114,13,124,0,106,1,160,2,100,2,161,1,100, + 3,25,0,83,0,124,0,106,1,83,0,41,4,122,32,84, + 104,101,32,110,97,109,101,32,111,102,32,116,104,101,32,109, + 111,100,117,108,101,39,115,32,112,97,114,101,110,116,46,78, + 218,1,46,114,26,0,0,0,41,3,114,129,0,0,0,114, + 20,0,0,0,218,10,114,112,97,114,116,105,116,105,111,110, + 114,53,0,0,0,32,114,5,0,0,0,218,6,112,97,114, + 101,110,116,148,1,0,0,115,6,0,0,0,10,3,16,1, + 6,2,114,17,0,0,0,122,17,77,111,100,117,108,101,83, + 112,101,99,46,112,97,114,101,110,116,99,1,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,67,0,0,0,115, + 6,0,0,0,124,0,106,0,83,0,114,0,0,0,0,41, + 1,114,130,0,0,0,114,53,0,0,0,32,114,5,0,0, + 0,114,136,0,0,0,156,1,0,0,115,2,0,0,0,6, + 2,114,17,0,0,0,122,23,77,111,100,117,108,101,83,112, + 101,99,46,104,97,115,95,108,111,99,97,116,105,111,110,99, + 2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, + 67,0,0,0,115,14,0,0,0,116,0,124,1,131,1,124, + 0,95,1,100,0,83,0,114,0,0,0,0,41,2,218,4, + 98,111,111,108,114,130,0,0,0,41,2,114,34,0,0,0, + 218,5,118,97,108,117,101,32,32,114,5,0,0,0,114,136, + 0,0,0,160,1,0,0,115,2,0,0,0,14,2,114,17, + 0,0,0,41,12,114,8,0,0,0,114,7,0,0,0,114, + 1,0,0,0,114,9,0,0,0,114,35,0,0,0,114,54, + 0,0,0,114,138,0,0,0,218,8,112,114,111,112,101,114, + 116,121,114,135,0,0,0,218,6,115,101,116,116,101,114,114, + 143,0,0,0,114,136,0,0,0,114,23,0,0,0,114,5, + 0,0,0,114,125,0,0,0,64,1,0,0,115,34,0,0, + 0,8,0,4,1,4,36,2,1,12,255,8,12,8,10,2, + 12,10,1,4,8,10,1,2,3,10,1,2,7,10,1,4, + 3,14,1,114,17,0,0,0,114,125,0,0,0,169,2,114, + 126,0,0,0,114,128,0,0,0,99,2,0,0,0,0,0, + 0,0,2,0,0,0,8,0,0,0,67,0,0,0,115,152, + 0,0,0,116,0,124,1,100,1,131,2,114,37,116,1,100, + 2,117,0,114,11,116,2,130,1,116,1,106,3,125,4,124, + 3,100,2,117,0,114,24,124,4,124,0,124,1,100,3,141, + 2,83,0,124,3,114,28,103,0,110,1,100,2,125,5,124, + 4,124,0,124,1,124,5,100,4,141,3,83,0,124,3,100, + 2,117,0,114,67,116,0,124,1,100,5,131,2,114,65,9, + 0,124,1,160,4,124,0,161,1,125,3,110,14,35,0,4, + 0,116,5,121,75,1,0,1,0,1,0,100,2,125,3,89, + 0,110,3,37,0,100,6,125,3,116,6,124,0,124,1,124, + 2,124,3,100,7,141,4,83,0,119,0,41,8,122,53,82, + 101,116,117,114,110,32,97,32,109,111,100,117,108,101,32,115, + 112,101,99,32,98,97,115,101,100,32,111,110,32,118,97,114, + 105,111,117,115,32,108,111,97,100,101,114,32,109,101,116,104, + 111,100,115,46,90,12,103,101,116,95,102,105,108,101,110,97, + 109,101,78,41,1,114,122,0,0,0,41,2,114,122,0,0, + 0,114,129,0,0,0,114,128,0,0,0,70,114,148,0,0, + 0,41,7,114,10,0,0,0,114,139,0,0,0,114,140,0, + 0,0,218,23,115,112,101,99,95,102,114,111,109,95,102,105, + 108,101,95,108,111,99,97,116,105,111,110,114,128,0,0,0, + 114,88,0,0,0,114,125,0,0,0,41,6,114,20,0,0, + 0,114,122,0,0,0,114,126,0,0,0,114,128,0,0,0, + 114,149,0,0,0,90,6,115,101,97,114,99,104,32,32,32, + 32,32,32,114,5,0,0,0,114,104,0,0,0,165,1,0, + 0,115,42,0,0,0,10,2,8,1,4,1,6,1,8,2, + 12,1,12,1,6,1,2,1,6,255,8,3,10,1,2,1, + 12,1,2,128,12,1,8,1,2,128,4,3,16,2,2,250, + 115,15,0,0,0,175,5,53,0,181,9,65,0,7,193,11, + 1,65,0,7,114,104,0,0,0,99,3,0,0,0,0,0, + 0,0,0,0,0,0,8,0,0,0,67,0,0,0,115,50, + 1,0,0,9,0,124,0,106,0,125,3,110,10,35,0,4, + 0,116,1,121,152,1,0,1,0,1,0,89,0,110,7,37, + 0,124,3,100,0,117,1,114,21,124,3,83,0,124,0,106, + 2,125,4,124,1,100,0,117,0,114,43,9,0,124,0,106, + 3,125,1,110,10,35,0,4,0,116,1,121,151,1,0,1, + 0,1,0,89,0,110,1,37,0,9,0,124,0,106,4,125, + 5,110,12,35,0,4,0,116,1,121,150,1,0,1,0,1, + 0,100,0,125,5,89,0,110,1,37,0,124,2,100,0,117, + 0,114,87,124,5,100,0,117,0,114,85,9,0,124,1,106, + 5,125,2,110,14,35,0,4,0,116,1,121,149,1,0,1, + 0,1,0,100,0,125,2,89,0,110,3,37,0,124,5,125, + 2,9,0,124,0,106,6,125,6,110,12,35,0,4,0,116, + 1,121,148,1,0,1,0,1,0,100,0,125,6,89,0,110, + 1,37,0,9,0,116,7,124,0,106,8,131,1,125,7,110, + 12,35,0,4,0,116,1,121,147,1,0,1,0,1,0,100, + 0,125,7,89,0,110,1,37,0,116,9,124,4,124,1,124, + 2,100,1,141,3,125,3,124,5,100,0,117,0,114,136,100, + 2,110,1,100,3,124,3,95,10,124,6,124,3,95,11,124, + 7,124,3,95,12,124,3,83,0,119,0,119,0,119,0,119, + 0,119,0,119,0,41,4,78,169,1,114,126,0,0,0,70, + 84,41,13,114,113,0,0,0,114,2,0,0,0,114,8,0, + 0,0,114,112,0,0,0,114,121,0,0,0,218,7,95,79, + 82,73,71,73,78,218,10,95,95,99,97,99,104,101,100,95, + 95,218,4,108,105,115,116,218,8,95,95,112,97,116,104,95, + 95,114,125,0,0,0,114,130,0,0,0,114,135,0,0,0, + 114,129,0,0,0,41,8,114,110,0,0,0,114,122,0,0, + 0,114,126,0,0,0,114,109,0,0,0,114,20,0,0,0, + 90,8,108,111,99,97,116,105,111,110,114,135,0,0,0,114, + 129,0,0,0,32,32,32,32,32,32,32,32,114,5,0,0, + 0,218,17,95,115,112,101,99,95,102,114,111,109,95,109,111, + 100,117,108,101,191,1,0,0,115,108,0,0,0,2,2,8, + 1,2,128,12,1,4,1,2,128,8,2,4,1,6,2,8, + 1,2,1,8,1,2,128,12,1,4,2,2,128,2,1,8, + 1,2,128,12,1,8,1,2,128,8,1,8,1,2,1,8, + 1,2,128,12,1,8,1,2,128,4,2,2,1,8,1,2, + 128,12,1,8,1,2,128,2,1,12,1,2,128,12,1,8, + 1,2,128,14,2,18,1,6,1,6,1,4,1,2,249,2, + 252,2,250,2,250,2,251,2,246,115,93,0,0,0,129,3, + 5,0,133,7,14,7,157,3,33,0,161,7,42,7,172,3, + 48,0,176,9,59,7,193,5,3,65,9,0,193,9,9,65, + 20,7,193,24,3,65,28,0,193,28,9,65,39,7,193,41, + 5,65,47,0,193,47,9,65,58,7,194,19,1,65,58,7, + 194,20,1,65,39,7,194,21,1,65,20,7,194,22,1,59, + 7,194,23,1,42,7,194,24,1,14,7,114,155,0,0,0, + 70,169,1,218,8,111,118,101,114,114,105,100,101,99,2,0, + 0,0,0,0,0,0,1,0,0,0,8,0,0,0,67,0, + 0,0,115,204,1,0,0,124,2,115,10,116,0,124,1,100, + 1,100,0,131,3,100,0,117,0,114,26,9,0,124,0,106, + 1,124,1,95,2,110,10,35,0,4,0,116,3,121,229,1, + 0,1,0,1,0,89,0,110,1,37,0,124,2,115,36,116, + 0,124,1,100,2,100,0,131,3,100,0,117,0,114,87,124, + 0,106,4,125,3,124,3,100,0,117,0,114,72,124,0,106, + 5,100,0,117,1,114,72,116,6,100,0,117,0,114,54,116, + 7,130,1,116,6,106,8,125,4,124,4,160,9,124,4,161, + 1,125,3,124,0,106,5,124,3,95,10,124,3,124,0,95, + 4,100,0,124,1,95,11,9,0,124,3,124,1,95,12,110, + 10,35,0,4,0,116,3,121,228,1,0,1,0,1,0,89, + 0,110,1,37,0,124,2,115,97,116,0,124,1,100,3,100, + 0,131,3,100,0,117,0,114,113,9,0,124,0,106,13,124, + 1,95,14,110,10,35,0,4,0,116,3,121,227,1,0,1, + 0,1,0,89,0,110,1,37,0,9,0,124,0,124,1,95, + 15,110,10,35,0,4,0,116,3,121,226,1,0,1,0,1, + 0,89,0,110,1,37,0,124,2,115,138,116,0,124,1,100, + 4,100,0,131,3,100,0,117,0,114,159,124,0,106,5,100, + 0,117,1,114,159,9,0,124,0,106,5,124,1,95,16,110, + 10,35,0,4,0,116,3,121,225,1,0,1,0,1,0,89, + 0,110,1,37,0,124,0,106,17,114,221,124,2,115,172,116, + 0,124,1,100,5,100,0,131,3,100,0,117,0,114,188,9, + 0,124,0,106,18,124,1,95,11,110,10,35,0,4,0,116, + 3,121,224,1,0,1,0,1,0,89,0,110,1,37,0,124, + 2,115,198,116,0,124,1,100,6,100,0,131,3,100,0,117, + 0,114,221,124,0,106,19,100,0,117,1,114,221,9,0,124, + 0,106,19,124,1,95,20,124,1,83,0,35,0,4,0,116, + 3,121,223,1,0,1,0,1,0,89,0,124,1,83,0,37, + 0,124,1,83,0,119,0,119,0,119,0,119,0,119,0,119, + 0,119,0,41,7,78,114,8,0,0,0,114,112,0,0,0, + 218,11,95,95,112,97,99,107,97,103,101,95,95,114,154,0, + 0,0,114,121,0,0,0,114,152,0,0,0,41,21,114,12, + 0,0,0,114,20,0,0,0,114,8,0,0,0,114,2,0, + 0,0,114,122,0,0,0,114,129,0,0,0,114,139,0,0, + 0,114,140,0,0,0,218,16,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,218,7,95,95,110,101,119,95, + 95,90,5,95,112,97,116,104,114,121,0,0,0,114,112,0, + 0,0,114,143,0,0,0,114,158,0,0,0,114,113,0,0, + 0,114,154,0,0,0,114,136,0,0,0,114,126,0,0,0, + 114,135,0,0,0,114,152,0,0,0,41,5,114,109,0,0, + 0,114,110,0,0,0,114,157,0,0,0,114,122,0,0,0, + 114,159,0,0,0,32,32,32,32,32,114,5,0,0,0,218, + 18,95,105,110,105,116,95,109,111,100,117,108,101,95,97,116, + 116,114,115,236,1,0,0,115,142,0,0,0,20,4,2,1, + 10,1,2,128,12,1,4,1,2,128,20,2,6,1,8,1, + 10,2,8,1,4,1,6,1,10,2,8,1,6,1,6,11, + 2,1,8,1,2,128,12,1,4,1,2,128,20,2,2,1, + 10,1,2,128,12,1,4,1,2,128,2,2,8,1,2,128, + 12,1,4,1,2,128,20,2,10,1,2,1,10,1,2,128, + 12,1,4,1,2,128,6,2,20,1,2,1,10,1,2,128, + 12,1,4,1,2,128,20,2,10,1,2,1,8,1,4,3, + 2,128,12,254,2,1,4,1,2,128,4,0,2,254,2,249, + 2,249,2,249,2,251,2,250,2,228,115,121,0,0,0,139, + 4,16,0,144,7,25,7,193,9,3,65,13,0,193,13,7, + 65,22,7,193,34,4,65,39,0,193,39,7,65,48,7,193, + 50,3,65,54,0,193,54,7,65,63,7,194,16,4,66,21, + 0,194,21,7,66,30,7,194,45,4,66,50,0,194,50,7, + 66,59,7,195,12,4,67,18,0,195,18,7,67,28,7,195, + 31,1,67,28,7,195,32,1,66,59,7,195,33,1,66,30, + 7,195,34,1,65,63,7,195,35,1,65,48,7,195,36,1, + 65,22,7,195,37,1,25,7,114,161,0,0,0,99,1,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,67,0, - 0,0,115,32,0,0,0,124,0,106,0,100,1,117,0,114, - 13,124,0,106,1,160,2,100,2,161,1,100,3,25,0,83, - 0,124,0,106,1,83,0,41,4,122,32,84,104,101,32,110, - 97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,108, - 101,39,115,32,112,97,114,101,110,116,46,78,218,1,46,114, - 26,0,0,0,41,3,114,129,0,0,0,114,20,0,0,0, - 218,10,114,112,97,114,116,105,116,105,111,110,114,53,0,0, - 0,32,114,5,0,0,0,218,6,112,97,114,101,110,116,148, - 1,0,0,115,6,0,0,0,10,3,16,1,6,2,114,17, - 0,0,0,122,17,77,111,100,117,108,101,83,112,101,99,46, - 112,97,114,101,110,116,99,1,0,0,0,0,0,0,0,0, - 0,0,0,1,0,0,0,67,0,0,0,115,6,0,0,0, - 124,0,106,0,83,0,114,0,0,0,0,41,1,114,130,0, - 0,0,114,53,0,0,0,32,114,5,0,0,0,114,136,0, - 0,0,156,1,0,0,115,2,0,0,0,6,2,114,17,0, - 0,0,122,23,77,111,100,117,108,101,83,112,101,99,46,104, - 97,115,95,108,111,99,97,116,105,111,110,99,2,0,0,0, - 0,0,0,0,0,0,0,0,2,0,0,0,67,0,0,0, - 115,14,0,0,0,116,0,124,1,131,1,124,0,95,1,100, - 0,83,0,114,0,0,0,0,41,2,218,4,98,111,111,108, - 114,130,0,0,0,41,2,114,34,0,0,0,218,5,118,97, - 108,117,101,32,32,114,5,0,0,0,114,136,0,0,0,160, - 1,0,0,115,2,0,0,0,14,2,114,17,0,0,0,41, - 12,114,8,0,0,0,114,7,0,0,0,114,1,0,0,0, - 114,9,0,0,0,114,35,0,0,0,114,54,0,0,0,114, - 138,0,0,0,218,8,112,114,111,112,101,114,116,121,114,135, - 0,0,0,218,6,115,101,116,116,101,114,114,143,0,0,0, - 114,136,0,0,0,114,23,0,0,0,114,5,0,0,0,114, - 125,0,0,0,64,1,0,0,115,34,0,0,0,8,0,4, - 1,4,36,2,1,12,255,8,12,8,10,2,12,10,1,4, - 8,10,1,2,3,10,1,2,7,10,1,4,3,14,1,114, - 17,0,0,0,114,125,0,0,0,169,2,114,126,0,0,0, - 114,128,0,0,0,99,2,0,0,0,0,0,0,0,2,0, - 0,0,8,0,0,0,67,0,0,0,115,152,0,0,0,116, - 0,124,1,100,1,131,2,114,37,116,1,100,2,117,0,114, - 11,116,2,130,1,116,1,106,3,125,4,124,3,100,2,117, - 0,114,24,124,4,124,0,124,1,100,3,141,2,83,0,124, - 3,114,28,103,0,110,1,100,2,125,5,124,4,124,0,124, - 1,124,5,100,4,141,3,83,0,124,3,100,2,117,0,114, - 67,116,0,124,1,100,5,131,2,114,65,9,0,124,1,160, - 4,124,0,161,1,125,3,110,14,35,0,4,0,116,5,121, - 75,1,0,1,0,1,0,100,2,125,3,89,0,110,3,37, - 0,100,6,125,3,116,6,124,0,124,1,124,2,124,3,100, - 7,141,4,83,0,119,0,41,8,122,53,82,101,116,117,114, - 110,32,97,32,109,111,100,117,108,101,32,115,112,101,99,32, - 98,97,115,101,100,32,111,110,32,118,97,114,105,111,117,115, - 32,108,111,97,100,101,114,32,109,101,116,104,111,100,115,46, - 90,12,103,101,116,95,102,105,108,101,110,97,109,101,78,41, - 1,114,122,0,0,0,41,2,114,122,0,0,0,114,129,0, - 0,0,114,128,0,0,0,70,114,148,0,0,0,41,7,114, - 10,0,0,0,114,139,0,0,0,114,140,0,0,0,218,23, - 115,112,101,99,95,102,114,111,109,95,102,105,108,101,95,108, - 111,99,97,116,105,111,110,114,128,0,0,0,114,88,0,0, - 0,114,125,0,0,0,41,6,114,20,0,0,0,114,122,0, - 0,0,114,126,0,0,0,114,128,0,0,0,114,149,0,0, - 0,90,6,115,101,97,114,99,104,32,32,32,32,32,32,114, - 5,0,0,0,114,104,0,0,0,165,1,0,0,115,42,0, - 0,0,10,2,8,1,4,1,6,1,8,2,12,1,12,1, - 6,1,2,1,6,255,8,3,10,1,2,1,12,1,2,128, - 12,1,8,1,2,128,4,3,16,2,2,250,115,15,0,0, - 0,175,5,53,0,181,9,65,0,7,193,11,1,65,0,7, - 114,104,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,8,0,0,0,67,0,0,0,115,50,1,0,0,9, - 0,124,0,106,0,125,3,110,10,35,0,4,0,116,1,121, - 152,1,0,1,0,1,0,89,0,110,7,37,0,124,3,100, - 0,117,1,114,21,124,3,83,0,124,0,106,2,125,4,124, - 1,100,0,117,0,114,43,9,0,124,0,106,3,125,1,110, - 10,35,0,4,0,116,1,121,151,1,0,1,0,1,0,89, - 0,110,1,37,0,9,0,124,0,106,4,125,5,110,12,35, - 0,4,0,116,1,121,150,1,0,1,0,1,0,100,0,125, - 5,89,0,110,1,37,0,124,2,100,0,117,0,114,87,124, - 5,100,0,117,0,114,85,9,0,124,1,106,5,125,2,110, - 14,35,0,4,0,116,1,121,149,1,0,1,0,1,0,100, - 0,125,2,89,0,110,3,37,0,124,5,125,2,9,0,124, - 0,106,6,125,6,110,12,35,0,4,0,116,1,121,148,1, - 0,1,0,1,0,100,0,125,6,89,0,110,1,37,0,9, - 0,116,7,124,0,106,8,131,1,125,7,110,12,35,0,4, - 0,116,1,121,147,1,0,1,0,1,0,100,0,125,7,89, - 0,110,1,37,0,116,9,124,4,124,1,124,2,100,1,141, - 3,125,3,124,5,100,0,117,0,114,136,100,2,110,1,100, - 3,124,3,95,10,124,6,124,3,95,11,124,7,124,3,95, - 12,124,3,83,0,119,0,119,0,119,0,119,0,119,0,119, - 0,41,4,78,169,1,114,126,0,0,0,70,84,41,13,114, - 113,0,0,0,114,2,0,0,0,114,8,0,0,0,114,112, - 0,0,0,114,121,0,0,0,218,7,95,79,82,73,71,73, - 78,218,10,95,95,99,97,99,104,101,100,95,95,218,4,108, - 105,115,116,218,8,95,95,112,97,116,104,95,95,114,125,0, - 0,0,114,130,0,0,0,114,135,0,0,0,114,129,0,0, - 0,41,8,114,110,0,0,0,114,122,0,0,0,114,126,0, - 0,0,114,109,0,0,0,114,20,0,0,0,90,8,108,111, - 99,97,116,105,111,110,114,135,0,0,0,114,129,0,0,0, - 32,32,32,32,32,32,32,32,114,5,0,0,0,218,17,95, - 115,112,101,99,95,102,114,111,109,95,109,111,100,117,108,101, - 191,1,0,0,115,108,0,0,0,2,2,8,1,2,128,12, - 1,4,1,2,128,8,2,4,1,6,2,8,1,2,1,8, - 1,2,128,12,1,4,2,2,128,2,1,8,1,2,128,12, - 1,8,1,2,128,8,1,8,1,2,1,8,1,2,128,12, - 1,8,1,2,128,4,2,2,1,8,1,2,128,12,1,8, - 1,2,128,2,1,12,1,2,128,12,1,8,1,2,128,14, - 2,18,1,6,1,6,1,4,1,2,249,2,252,2,250,2, - 250,2,251,2,246,115,93,0,0,0,129,3,5,0,133,7, - 14,7,157,3,33,0,161,7,42,7,172,3,48,0,176,9, - 59,7,193,5,3,65,9,0,193,9,9,65,20,7,193,24, - 3,65,28,0,193,28,9,65,39,7,193,41,5,65,47,0, - 193,47,9,65,58,7,194,19,1,65,58,7,194,20,1,65, - 39,7,194,21,1,65,20,7,194,22,1,59,7,194,23,1, - 42,7,194,24,1,14,7,114,155,0,0,0,70,169,1,218, - 8,111,118,101,114,114,105,100,101,99,2,0,0,0,0,0, - 0,0,1,0,0,0,8,0,0,0,67,0,0,0,115,204, - 1,0,0,124,2,115,10,116,0,124,1,100,1,100,0,131, - 3,100,0,117,0,114,26,9,0,124,0,106,1,124,1,95, - 2,110,10,35,0,4,0,116,3,121,229,1,0,1,0,1, - 0,89,0,110,1,37,0,124,2,115,36,116,0,124,1,100, - 2,100,0,131,3,100,0,117,0,114,87,124,0,106,4,125, - 3,124,3,100,0,117,0,114,72,124,0,106,5,100,0,117, - 1,114,72,116,6,100,0,117,0,114,54,116,7,130,1,116, - 6,106,8,125,4,124,4,160,9,124,4,161,1,125,3,124, - 0,106,5,124,3,95,10,124,3,124,0,95,4,100,0,124, - 1,95,11,9,0,124,3,124,1,95,12,110,10,35,0,4, - 0,116,3,121,228,1,0,1,0,1,0,89,0,110,1,37, - 0,124,2,115,97,116,0,124,1,100,3,100,0,131,3,100, - 0,117,0,114,113,9,0,124,0,106,13,124,1,95,14,110, - 10,35,0,4,0,116,3,121,227,1,0,1,0,1,0,89, - 0,110,1,37,0,9,0,124,0,124,1,95,15,110,10,35, - 0,4,0,116,3,121,226,1,0,1,0,1,0,89,0,110, - 1,37,0,124,2,115,138,116,0,124,1,100,4,100,0,131, - 3,100,0,117,0,114,159,124,0,106,5,100,0,117,1,114, - 159,9,0,124,0,106,5,124,1,95,16,110,10,35,0,4, - 0,116,3,121,225,1,0,1,0,1,0,89,0,110,1,37, - 0,124,0,106,17,114,221,124,2,115,172,116,0,124,1,100, - 5,100,0,131,3,100,0,117,0,114,188,9,0,124,0,106, - 18,124,1,95,11,110,10,35,0,4,0,116,3,121,224,1, - 0,1,0,1,0,89,0,110,1,37,0,124,2,115,198,116, - 0,124,1,100,6,100,0,131,3,100,0,117,0,114,221,124, - 0,106,19,100,0,117,1,114,221,9,0,124,0,106,19,124, - 1,95,20,124,1,83,0,35,0,4,0,116,3,121,223,1, - 0,1,0,1,0,89,0,124,1,83,0,37,0,124,1,83, - 0,119,0,119,0,119,0,119,0,119,0,119,0,119,0,41, - 7,78,114,8,0,0,0,114,112,0,0,0,218,11,95,95, - 112,97,99,107,97,103,101,95,95,114,154,0,0,0,114,121, - 0,0,0,114,152,0,0,0,41,21,114,12,0,0,0,114, - 20,0,0,0,114,8,0,0,0,114,2,0,0,0,114,122, - 0,0,0,114,129,0,0,0,114,139,0,0,0,114,140,0, - 0,0,218,16,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,218,7,95,95,110,101,119,95,95,90,5,95, - 112,97,116,104,114,121,0,0,0,114,112,0,0,0,114,143, - 0,0,0,114,158,0,0,0,114,113,0,0,0,114,154,0, - 0,0,114,136,0,0,0,114,126,0,0,0,114,135,0,0, - 0,114,152,0,0,0,41,5,114,109,0,0,0,114,110,0, - 0,0,114,157,0,0,0,114,122,0,0,0,114,159,0,0, - 0,32,32,32,32,32,114,5,0,0,0,218,18,95,105,110, - 105,116,95,109,111,100,117,108,101,95,97,116,116,114,115,236, - 1,0,0,115,142,0,0,0,20,4,2,1,10,1,2,128, - 12,1,4,1,2,128,20,2,6,1,8,1,10,2,8,1, - 4,1,6,1,10,2,8,1,6,1,6,11,2,1,8,1, - 2,128,12,1,4,1,2,128,20,2,2,1,10,1,2,128, - 12,1,4,1,2,128,2,2,8,1,2,128,12,1,4,1, - 2,128,20,2,10,1,2,1,10,1,2,128,12,1,4,1, - 2,128,6,2,20,1,2,1,10,1,2,128,12,1,4,1, - 2,128,20,2,10,1,2,1,8,1,4,3,2,128,12,254, - 2,1,4,1,2,128,4,0,2,254,2,249,2,249,2,249, - 2,251,2,250,2,228,115,121,0,0,0,139,4,16,0,144, - 7,25,7,193,9,3,65,13,0,193,13,7,65,22,7,193, - 34,4,65,39,0,193,39,7,65,48,7,193,50,3,65,54, - 0,193,54,7,65,63,7,194,16,4,66,21,0,194,21,7, - 66,30,7,194,45,4,66,50,0,194,50,7,66,59,7,195, - 12,4,67,18,0,195,18,7,67,28,7,195,31,1,67,28, - 7,195,32,1,66,59,7,195,33,1,66,30,7,195,34,1, - 65,63,7,195,35,1,65,48,7,195,36,1,65,22,7,195, - 37,1,25,7,114,161,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,67,0,0,0,115,82, - 0,0,0,100,1,125,1,116,0,124,0,106,1,100,2,131, - 2,114,15,124,0,106,1,160,2,124,0,161,1,125,1,110, - 10,116,0,124,0,106,1,100,3,131,2,114,25,116,3,100, - 4,131,1,130,1,124,1,100,1,117,0,114,34,116,4,124, - 0,106,5,131,1,125,1,116,6,124,0,124,1,131,2,1, - 0,124,1,83,0,41,5,122,43,67,114,101,97,116,101,32, - 97,32,109,111,100,117,108,101,32,98,97,115,101,100,32,111, - 110,32,116,104,101,32,112,114,111,118,105,100,101,100,32,115, - 112,101,99,46,78,218,13,99,114,101,97,116,101,95,109,111, - 100,117,108,101,218,11,101,120,101,99,95,109,111,100,117,108, - 101,122,66,108,111,97,100,101,114,115,32,116,104,97,116,32, - 100,101,102,105,110,101,32,101,120,101,99,95,109,111,100,117, - 108,101,40,41,32,109,117,115,116,32,97,108,115,111,32,100, - 101,102,105,110,101,32,99,114,101,97,116,101,95,109,111,100, - 117,108,101,40,41,41,7,114,10,0,0,0,114,122,0,0, - 0,114,162,0,0,0,114,88,0,0,0,114,21,0,0,0, - 114,20,0,0,0,114,161,0,0,0,169,2,114,109,0,0, - 0,114,110,0,0,0,32,32,114,5,0,0,0,218,16,109, - 111,100,117,108,101,95,102,114,111,109,95,115,112,101,99,52, - 2,0,0,115,18,0,0,0,4,3,12,1,14,3,12,1, - 8,1,8,2,10,1,10,1,4,1,114,17,0,0,0,114, - 165,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,67,0,0,0,115,100,0,0,0,124,0, - 106,0,100,1,117,0,114,7,100,2,110,2,124,0,106,0, - 125,1,124,0,106,1,100,1,117,0,114,32,124,0,106,2, - 100,1,117,0,114,25,100,3,160,3,124,1,161,1,83,0, - 100,4,160,3,124,1,124,0,106,2,161,2,83,0,124,0, - 106,4,114,42,100,5,160,3,124,1,124,0,106,1,161,2, - 83,0,100,6,160,3,124,0,106,0,124,0,106,1,161,2, - 83,0,41,7,122,38,82,101,116,117,114,110,32,116,104,101, - 32,114,101,112,114,32,116,111,32,117,115,101,32,102,111,114, - 32,116,104,101,32,109,111,100,117,108,101,46,78,114,115,0, - 0,0,114,116,0,0,0,114,117,0,0,0,114,118,0,0, - 0,250,18,60,109,111,100,117,108,101,32,123,33,114,125,32, - 40,123,125,41,62,41,5,114,20,0,0,0,114,126,0,0, - 0,114,122,0,0,0,114,51,0,0,0,114,136,0,0,0, - 41,2,114,109,0,0,0,114,20,0,0,0,32,32,114,5, - 0,0,0,114,119,0,0,0,69,2,0,0,115,16,0,0, - 0,20,3,10,1,10,1,10,1,14,2,6,2,14,1,16, - 2,114,17,0,0,0,114,119,0,0,0,99,2,0,0,0, - 0,0,0,0,0,0,0,0,10,0,0,0,67,0,0,0, - 115,32,1,0,0,124,0,106,0,125,2,116,1,124,2,131, - 1,53,0,1,0,116,2,106,3,160,4,124,2,161,1,124, - 1,117,1,114,27,100,1,160,5,124,2,161,1,125,3,116, - 6,124,3,124,2,100,2,141,2,130,1,9,0,124,0,106, - 7,100,3,117,0,114,53,124,0,106,8,100,3,117,0,114, - 45,116,6,100,4,124,0,106,0,100,2,141,2,130,1,116, - 9,124,0,124,1,100,5,100,6,141,3,1,0,110,40,116, - 9,124,0,124,1,100,5,100,6,141,3,1,0,116,10,124, - 0,106,7,100,7,131,2,115,87,116,11,124,0,106,7,131, - 1,155,0,100,8,157,2,125,3,116,12,160,13,124,3,116, - 14,161,2,1,0,124,0,106,7,160,15,124,2,161,1,1, - 0,110,6,124,0,106,7,160,16,124,1,161,1,1,0,116, - 2,106,3,160,17,124,0,106,0,161,1,125,1,124,1,116, - 2,106,3,124,0,106,0,60,0,110,16,35,0,116,2,106, - 3,160,17,124,0,106,0,161,1,125,1,124,1,116,2,106, - 3,124,0,106,0,60,0,119,0,37,0,9,0,100,3,4, - 0,4,0,131,3,1,0,124,1,83,0,35,0,49,0,115, - 136,119,4,37,0,1,0,1,0,1,0,89,0,1,0,1, - 0,124,1,83,0,41,9,122,70,69,120,101,99,117,116,101, - 32,116,104,101,32,115,112,101,99,39,115,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,117,108,101,32,105,110,32, - 97,110,32,101,120,105,115,116,105,110,103,32,109,111,100,117, - 108,101,39,115,32,110,97,109,101,115,112,97,99,101,46,122, - 30,109,111,100,117,108,101,32,123,33,114,125,32,110,111,116, - 32,105,110,32,115,121,115,46,109,111,100,117,108,101,115,114, - 19,0,0,0,78,250,14,109,105,115,115,105,110,103,32,108, - 111,97,100,101,114,84,114,156,0,0,0,114,163,0,0,0, - 250,55,46,101,120,101,99,95,109,111,100,117,108,101,40,41, - 32,110,111,116,32,102,111,117,110,100,59,32,102,97,108,108, - 105,110,103,32,98,97,99,107,32,116,111,32,108,111,97,100, - 95,109,111,100,117,108,101,40,41,41,18,114,20,0,0,0, - 114,58,0,0,0,114,18,0,0,0,114,105,0,0,0,114, - 39,0,0,0,114,51,0,0,0,114,88,0,0,0,114,122, - 0,0,0,114,129,0,0,0,114,161,0,0,0,114,10,0, - 0,0,114,6,0,0,0,114,101,0,0,0,114,102,0,0, - 0,218,13,73,109,112,111,114,116,87,97,114,110,105,110,103, - 218,11,108,111,97,100,95,109,111,100,117,108,101,114,163,0, - 0,0,218,3,112,111,112,41,4,114,109,0,0,0,114,110, - 0,0,0,114,20,0,0,0,114,108,0,0,0,32,32,32, - 32,114,5,0,0,0,114,106,0,0,0,86,2,0,0,115, - 50,0,0,0,6,2,10,1,16,1,10,1,12,1,2,1, - 10,1,10,1,14,1,16,2,14,2,12,1,16,1,12,2, - 14,1,12,2,14,4,14,1,2,128,14,255,18,1,10,233, - 4,24,22,128,4,0,115,41,0,0,0,135,20,66,3,3, - 156,65,1,65,43,2,193,29,14,66,3,3,193,43,15,65, - 58,9,193,58,1,66,3,3,194,3,4,66,7,11,194,8, - 3,66,7,11,114,106,0,0,0,99,1,0,0,0,0,0, - 0,0,0,0,0,0,8,0,0,0,67,0,0,0,115,22, - 1,0,0,9,0,124,0,106,0,160,1,124,0,106,2,161, - 1,1,0,110,25,35,0,1,0,1,0,1,0,124,0,106, - 2,116,3,106,4,118,0,114,32,116,3,106,4,160,5,124, - 0,106,2,161,1,125,1,124,1,116,3,106,4,124,0,106, - 2,60,0,130,0,37,0,116,3,106,4,160,5,124,0,106, - 2,161,1,125,1,124,1,116,3,106,4,124,0,106,2,60, - 0,116,6,124,1,100,1,100,0,131,3,100,0,117,0,114, - 71,9,0,124,0,106,0,124,1,95,7,110,10,35,0,4, - 0,116,8,121,138,1,0,1,0,1,0,89,0,110,1,37, - 0,116,6,124,1,100,2,100,0,131,3,100,0,117,0,114, - 109,9,0,124,1,106,9,124,1,95,10,116,11,124,1,100, - 3,131,2,115,98,124,0,106,2,160,12,100,4,161,1,100, - 5,25,0,124,1,95,10,110,10,35,0,4,0,116,8,121, - 137,1,0,1,0,1,0,89,0,110,1,37,0,116,6,124, - 1,100,6,100,0,131,3,100,0,117,0,114,134,9,0,124, - 0,124,1,95,13,124,1,83,0,35,0,4,0,116,8,121, - 136,1,0,1,0,1,0,89,0,124,1,83,0,37,0,124, - 1,83,0,119,0,119,0,119,0,41,7,78,114,112,0,0, - 0,114,158,0,0,0,114,154,0,0,0,114,141,0,0,0, - 114,26,0,0,0,114,113,0,0,0,41,14,114,122,0,0, - 0,114,170,0,0,0,114,20,0,0,0,114,18,0,0,0, - 114,105,0,0,0,114,171,0,0,0,114,12,0,0,0,114, - 112,0,0,0,114,2,0,0,0,114,8,0,0,0,114,158, - 0,0,0,114,10,0,0,0,114,142,0,0,0,114,113,0, - 0,0,114,164,0,0,0,32,32,114,5,0,0,0,218,25, - 95,108,111,97,100,95,98,97,99,107,119,97,114,100,95,99, - 111,109,112,97,116,105,98,108,101,116,2,0,0,115,80,0, - 0,0,2,3,16,1,2,128,6,1,12,1,14,1,12,1, - 2,1,2,128,14,3,12,1,16,1,2,1,10,1,2,128, - 12,1,4,1,2,128,16,1,2,1,8,4,10,1,18,1, - 4,128,12,1,4,1,2,128,16,1,2,1,6,1,4,3, - 2,128,12,254,2,1,4,1,2,128,4,0,2,254,2,251, - 2,246,115,59,0,0,0,129,7,9,0,137,24,33,7,184, - 4,61,0,189,7,65,6,7,193,16,18,65,35,0,193,35, - 7,65,44,7,193,54,3,65,59,0,193,59,7,66,5,7, - 194,8,1,66,5,7,194,9,1,65,44,7,194,10,1,65, - 6,7,114,172,0,0,0,99,1,0,0,0,0,0,0,0, - 0,0,0,0,11,0,0,0,67,0,0,0,115,248,0,0, - 0,124,0,106,0,100,0,117,1,114,29,116,1,124,0,106, - 0,100,1,131,2,115,29,116,2,124,0,106,0,131,1,155, - 0,100,2,157,2,125,1,116,3,160,4,124,1,116,5,161, - 2,1,0,116,6,124,0,131,1,83,0,116,7,124,0,131, - 1,125,2,100,3,124,0,95,8,9,0,124,2,116,9,106, - 10,124,0,106,11,60,0,9,0,124,0,106,0,100,0,117, - 0,114,62,124,0,106,12,100,0,117,0,114,61,116,13,100, - 4,124,0,106,11,100,5,141,2,130,1,110,6,124,0,106, - 0,160,14,124,2,161,1,1,0,110,22,35,0,1,0,1, - 0,1,0,9,0,116,9,106,10,124,0,106,11,61,0,130, - 0,35,0,4,0,116,15,121,123,1,0,1,0,1,0,89, - 0,130,0,37,0,37,0,116,9,106,10,160,16,124,0,106, - 11,161,1,125,2,124,2,116,9,106,10,124,0,106,11,60, - 0,116,17,100,6,124,0,106,11,124,0,106,0,131,3,1, - 0,100,7,124,0,95,8,124,2,83,0,35,0,100,7,124, - 0,95,8,119,0,37,0,119,0,41,8,78,114,163,0,0, - 0,114,168,0,0,0,84,114,167,0,0,0,114,19,0,0, - 0,122,18,105,109,112,111,114,116,32,123,33,114,125,32,35, - 32,123,33,114,125,70,41,18,114,122,0,0,0,114,10,0, - 0,0,114,6,0,0,0,114,101,0,0,0,114,102,0,0, - 0,114,169,0,0,0,114,172,0,0,0,114,165,0,0,0, - 90,13,95,105,110,105,116,105,97,108,105,122,105,110,103,114, - 18,0,0,0,114,105,0,0,0,114,20,0,0,0,114,129, - 0,0,0,114,88,0,0,0,114,163,0,0,0,114,71,0, - 0,0,114,171,0,0,0,114,84,0,0,0,41,3,114,109, - 0,0,0,114,108,0,0,0,114,110,0,0,0,32,32,32, - 114,5,0,0,0,218,14,95,108,111,97,100,95,117,110,108, - 111,99,107,101,100,152,2,0,0,115,66,0,0,0,10,2, - 12,2,16,1,12,2,8,1,8,2,6,5,2,1,12,1, - 2,1,10,1,10,1,14,1,2,255,12,4,4,128,6,1, - 2,1,10,1,2,3,2,128,12,254,2,1,2,1,4,128, - 14,5,12,1,16,1,6,2,4,2,2,128,10,254,2,245, - 115,64,0,0,0,165,6,65,53,0,172,24,65,5,0,193, - 4,1,65,53,0,193,5,4,65,26,7,193,10,5,65,16, - 6,193,15,1,65,26,7,193,16,7,65,25,13,193,23,3, - 65,26,7,193,26,22,65,53,0,193,53,5,65,58,7,193, - 59,1,65,25,13,114,173,0,0,0,99,1,0,0,0,0, - 0,0,0,0,0,0,0,9,0,0,0,67,0,0,0,115, - 58,0,0,0,116,0,124,0,106,1,131,1,53,0,1,0, - 116,2,124,0,131,1,2,0,100,1,4,0,4,0,131,3, - 1,0,83,0,35,0,49,0,115,21,119,4,37,0,1,0, - 1,0,1,0,89,0,1,0,1,0,100,1,83,0,41,2, - 122,191,82,101,116,117,114,110,32,97,32,110,101,119,32,109, - 111,100,117,108,101,32,111,98,106,101,99,116,44,32,108,111, - 97,100,101,100,32,98,121,32,116,104,101,32,115,112,101,99, - 39,115,32,108,111,97,100,101,114,46,10,10,32,32,32,32, - 84,104,101,32,109,111,100,117,108,101,32,105,115,32,110,111, - 116,32,97,100,100,101,100,32,116,111,32,105,116,115,32,112, - 97,114,101,110,116,46,10,10,32,32,32,32,73,102,32,97, - 32,109,111,100,117,108,101,32,105,115,32,97,108,114,101,97, - 100,121,32,105,110,32,115,121,115,46,109,111,100,117,108,101, - 115,44,32,116,104,97,116,32,101,120,105,115,116,105,110,103, - 32,109,111,100,117,108,101,32,103,101,116,115,10,32,32,32, - 32,99,108,111,98,98,101,114,101,100,46,10,10,32,32,32, - 32,78,41,3,114,58,0,0,0,114,20,0,0,0,114,173, - 0,0,0,169,1,114,109,0,0,0,32,114,5,0,0,0, - 114,107,0,0,0,197,2,0,0,115,10,0,0,0,12,9, - 6,1,14,255,22,128,4,0,115,12,0,0,0,133,4,16, - 3,144,4,20,11,149,3,20,11,114,107,0,0,0,99,0, - 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,64, - 0,0,0,115,140,0,0,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,90,4,101,5,100,3,100,4,132,0, - 131,1,90,6,101,7,100,20,100,6,100,7,132,1,131,1, - 90,8,101,7,100,21,100,8,100,9,132,1,131,1,90,9, - 101,5,100,10,100,11,132,0,131,1,90,10,101,5,100,12, - 100,13,132,0,131,1,90,11,101,7,101,12,100,14,100,15, - 132,0,131,1,131,1,90,13,101,7,101,12,100,16,100,17, - 132,0,131,1,131,1,90,14,101,7,101,12,100,18,100,19, - 132,0,131,1,131,1,90,15,101,7,101,16,131,1,90,17, - 100,5,83,0,41,22,218,15,66,117,105,108,116,105,110,73, - 109,112,111,114,116,101,114,122,144,77,101,116,97,32,112,97, - 116,104,32,105,109,112,111,114,116,32,102,111,114,32,98,117, - 105,108,116,45,105,110,32,109,111,100,117,108,101,115,46,10, - 10,32,32,32,32,65,108,108,32,109,101,116,104,111,100,115, - 32,97,114,101,32,101,105,116,104,101,114,32,99,108,97,115, - 115,32,111,114,32,115,116,97,116,105,99,32,109,101,116,104, - 111,100,115,32,116,111,32,97,118,111,105,100,32,116,104,101, - 32,110,101,101,100,32,116,111,10,32,32,32,32,105,110,115, - 116,97,110,116,105,97,116,101,32,116,104,101,32,99,108,97, - 115,115,46,10,10,32,32,32,32,122,8,98,117,105,108,116, - 45,105,110,99,1,0,0,0,0,0,0,0,0,0,0,0, - 5,0,0,0,67,0,0,0,115,34,0,0,0,116,0,160, - 1,100,1,116,2,161,2,1,0,100,2,124,0,106,3,155, - 2,100,3,116,4,106,5,155,0,100,4,157,5,83,0,41, - 6,250,115,82,101,116,117,114,110,32,114,101,112,114,32,102, - 111,114,32,116,104,101,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,109,101,116,104, - 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 46,32,32,84,104,101,32,105,109,112,111,114,116,32,109,97, - 99,104,105,110,101,114,121,32,100,111,101,115,32,116,104,101, - 32,106,111,98,32,105,116,115,101,108,102,46,10,10,32,32, - 32,32,32,32,32,32,122,81,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,40,41,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, - 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, - 116,104,111,110,32,51,46,49,50,122,8,60,109,111,100,117, - 108,101,32,122,2,32,40,122,2,41,62,78,41,6,114,101, - 0,0,0,114,102,0,0,0,114,103,0,0,0,114,8,0, - 0,0,114,175,0,0,0,114,151,0,0,0,169,1,114,110, - 0,0,0,32,114,5,0,0,0,114,114,0,0,0,223,2, - 0,0,115,8,0,0,0,6,7,2,1,4,255,22,2,114, - 17,0,0,0,122,27,66,117,105,108,116,105,110,73,109,112, - 111,114,116,101,114,46,109,111,100,117,108,101,95,114,101,112, - 114,78,99,4,0,0,0,0,0,0,0,0,0,0,0,5, - 0,0,0,67,0,0,0,115,42,0,0,0,124,2,100,0, - 117,1,114,6,100,0,83,0,116,0,160,1,124,1,161,1, - 114,19,116,2,124,1,124,0,124,0,106,3,100,1,141,3, - 83,0,100,0,83,0,169,2,78,114,150,0,0,0,41,4, - 114,65,0,0,0,90,10,105,115,95,98,117,105,108,116,105, - 110,114,104,0,0,0,114,151,0,0,0,169,4,218,3,99, - 108,115,114,90,0,0,0,218,4,112,97,116,104,218,6,116, - 97,114,103,101,116,32,32,32,32,114,5,0,0,0,218,9, - 102,105,110,100,95,115,112,101,99,234,2,0,0,115,10,0, - 0,0,8,2,4,1,10,1,16,1,4,2,114,17,0,0, - 0,122,25,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,67,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,124,3, - 100,2,117,1,114,19,124,3,106,4,83,0,100,2,83,0, - 41,3,122,175,70,105,110,100,32,116,104,101,32,98,117,105, - 108,116,45,105,110,32,109,111,100,117,108,101,46,10,10,32, - 32,32,32,32,32,32,32,73,102,32,39,112,97,116,104,39, - 32,105,115,32,101,118,101,114,32,115,112,101,99,105,102,105, - 101,100,32,116,104,101,110,32,116,104,101,32,115,101,97,114, - 99,104,32,105,115,32,99,111,110,115,105,100,101,114,101,100, - 32,97,32,102,97,105,108,117,114,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,122,106,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, - 40,41,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 32,97,110,100,32,115,108,97,116,101,100,32,102,111,114,32, - 114,101,109,111,118,97,108,32,105,110,32,80,121,116,104,111, - 110,32,51,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, - 41,5,114,101,0,0,0,114,102,0,0,0,114,103,0,0, - 0,114,183,0,0,0,114,122,0,0,0,41,4,114,180,0, - 0,0,114,90,0,0,0,114,181,0,0,0,114,109,0,0, - 0,32,32,32,32,114,5,0,0,0,218,11,102,105,110,100, - 95,109,111,100,117,108,101,243,2,0,0,115,10,0,0,0, - 6,9,2,2,4,254,12,3,18,1,114,17,0,0,0,122, - 27,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, - 46,102,105,110,100,95,109,111,100,117,108,101,99,1,0,0, - 0,0,0,0,0,0,0,0,0,4,0,0,0,67,0,0, - 0,115,46,0,0,0,124,0,106,0,116,1,106,2,118,1, - 114,17,116,3,100,1,160,4,124,0,106,0,161,1,124,0, - 106,0,100,2,141,2,130,1,116,5,116,6,106,7,124,0, - 131,2,83,0,41,4,122,24,67,114,101,97,116,101,32,97, + 0,0,115,82,0,0,0,100,1,125,1,116,0,124,0,106, + 1,100,2,131,2,114,15,124,0,106,1,160,2,124,0,161, + 1,125,1,110,10,116,0,124,0,106,1,100,3,131,2,114, + 25,116,3,100,4,131,1,130,1,124,1,100,1,117,0,114, + 34,116,4,124,0,106,5,131,1,125,1,116,6,124,0,124, + 1,131,2,1,0,124,1,83,0,41,5,122,43,67,114,101, + 97,116,101,32,97,32,109,111,100,117,108,101,32,98,97,115, + 101,100,32,111,110,32,116,104,101,32,112,114,111,118,105,100, + 101,100,32,115,112,101,99,46,78,218,13,99,114,101,97,116, + 101,95,109,111,100,117,108,101,218,11,101,120,101,99,95,109, + 111,100,117,108,101,122,66,108,111,97,100,101,114,115,32,116, + 104,97,116,32,100,101,102,105,110,101,32,101,120,101,99,95, + 109,111,100,117,108,101,40,41,32,109,117,115,116,32,97,108, + 115,111,32,100,101,102,105,110,101,32,99,114,101,97,116,101, + 95,109,111,100,117,108,101,40,41,41,7,114,10,0,0,0, + 114,122,0,0,0,114,162,0,0,0,114,88,0,0,0,114, + 21,0,0,0,114,20,0,0,0,114,161,0,0,0,169,2, + 114,109,0,0,0,114,110,0,0,0,32,32,114,5,0,0, + 0,218,16,109,111,100,117,108,101,95,102,114,111,109,95,115, + 112,101,99,52,2,0,0,115,18,0,0,0,4,3,12,1, + 14,3,12,1,8,1,8,2,10,1,10,1,4,1,114,17, + 0,0,0,114,165,0,0,0,99,1,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,67,0,0,0,115,100,0, + 0,0,124,0,106,0,100,1,117,0,114,7,100,2,110,2, + 124,0,106,0,125,1,124,0,106,1,100,1,117,0,114,32, + 124,0,106,2,100,1,117,0,114,25,100,3,160,3,124,1, + 161,1,83,0,100,4,160,3,124,1,124,0,106,2,161,2, + 83,0,124,0,106,4,114,42,100,5,160,3,124,1,124,0, + 106,1,161,2,83,0,100,6,160,3,124,0,106,0,124,0, + 106,1,161,2,83,0,41,7,122,38,82,101,116,117,114,110, + 32,116,104,101,32,114,101,112,114,32,116,111,32,117,115,101, + 32,102,111,114,32,116,104,101,32,109,111,100,117,108,101,46, + 78,114,115,0,0,0,114,116,0,0,0,114,117,0,0,0, + 114,118,0,0,0,250,18,60,109,111,100,117,108,101,32,123, + 33,114,125,32,40,123,125,41,62,41,5,114,20,0,0,0, + 114,126,0,0,0,114,122,0,0,0,114,51,0,0,0,114, + 136,0,0,0,41,2,114,109,0,0,0,114,20,0,0,0, + 32,32,114,5,0,0,0,114,119,0,0,0,69,2,0,0, + 115,16,0,0,0,20,3,10,1,10,1,10,1,14,2,6, + 2,14,1,16,2,114,17,0,0,0,114,119,0,0,0,99, + 2,0,0,0,0,0,0,0,0,0,0,0,10,0,0,0, + 67,0,0,0,115,32,1,0,0,124,0,106,0,125,2,116, + 1,124,2,131,1,53,0,1,0,116,2,106,3,160,4,124, + 2,161,1,124,1,117,1,114,27,100,1,160,5,124,2,161, + 1,125,3,116,6,124,3,124,2,100,2,141,2,130,1,9, + 0,124,0,106,7,100,3,117,0,114,53,124,0,106,8,100, + 3,117,0,114,45,116,6,100,4,124,0,106,0,100,2,141, + 2,130,1,116,9,124,0,124,1,100,5,100,6,141,3,1, + 0,110,40,116,9,124,0,124,1,100,5,100,6,141,3,1, + 0,116,10,124,0,106,7,100,7,131,2,115,87,116,11,124, + 0,106,7,131,1,155,0,100,8,157,2,125,3,116,12,160, + 13,124,3,116,14,161,2,1,0,124,0,106,7,160,15,124, + 2,161,1,1,0,110,6,124,0,106,7,160,16,124,1,161, + 1,1,0,116,2,106,3,160,17,124,0,106,0,161,1,125, + 1,124,1,116,2,106,3,124,0,106,0,60,0,110,16,35, + 0,116,2,106,3,160,17,124,0,106,0,161,1,125,1,124, + 1,116,2,106,3,124,0,106,0,60,0,119,0,37,0,9, + 0,100,3,4,0,4,0,131,3,1,0,124,1,83,0,35, + 0,49,0,115,136,119,4,37,0,1,0,1,0,1,0,89, + 0,1,0,1,0,124,1,83,0,41,9,122,70,69,120,101, + 99,117,116,101,32,116,104,101,32,115,112,101,99,39,115,32, + 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, + 32,105,110,32,97,110,32,101,120,105,115,116,105,110,103,32, + 109,111,100,117,108,101,39,115,32,110,97,109,101,115,112,97, + 99,101,46,122,30,109,111,100,117,108,101,32,123,33,114,125, + 32,110,111,116,32,105,110,32,115,121,115,46,109,111,100,117, + 108,101,115,114,19,0,0,0,78,250,14,109,105,115,115,105, + 110,103,32,108,111,97,100,101,114,84,114,156,0,0,0,114, + 163,0,0,0,250,55,46,101,120,101,99,95,109,111,100,117, + 108,101,40,41,32,110,111,116,32,102,111,117,110,100,59,32, + 102,97,108,108,105,110,103,32,98,97,99,107,32,116,111,32, + 108,111,97,100,95,109,111,100,117,108,101,40,41,41,18,114, + 20,0,0,0,114,58,0,0,0,114,18,0,0,0,114,105, + 0,0,0,114,39,0,0,0,114,51,0,0,0,114,88,0, + 0,0,114,122,0,0,0,114,129,0,0,0,114,161,0,0, + 0,114,10,0,0,0,114,6,0,0,0,114,101,0,0,0, + 114,102,0,0,0,218,13,73,109,112,111,114,116,87,97,114, + 110,105,110,103,218,11,108,111,97,100,95,109,111,100,117,108, + 101,114,163,0,0,0,218,3,112,111,112,41,4,114,109,0, + 0,0,114,110,0,0,0,114,20,0,0,0,114,108,0,0, + 0,32,32,32,32,114,5,0,0,0,114,106,0,0,0,86, + 2,0,0,115,50,0,0,0,6,2,10,1,16,1,10,1, + 12,1,2,1,10,1,10,1,14,1,16,2,14,2,12,1, + 16,1,12,2,14,1,12,2,14,4,14,1,2,128,14,255, + 18,1,10,233,4,24,22,128,4,0,115,41,0,0,0,135, + 20,66,3,3,156,65,1,65,43,2,193,29,14,66,3,3, + 193,43,15,65,58,9,193,58,1,66,3,3,194,3,4,66, + 7,11,194,8,3,66,7,11,114,106,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,8,0,0,0,67,0, + 0,0,115,22,1,0,0,9,0,124,0,106,0,160,1,124, + 0,106,2,161,1,1,0,110,25,35,0,1,0,1,0,1, + 0,124,0,106,2,116,3,106,4,118,0,114,32,116,3,106, + 4,160,5,124,0,106,2,161,1,125,1,124,1,116,3,106, + 4,124,0,106,2,60,0,130,0,37,0,116,3,106,4,160, + 5,124,0,106,2,161,1,125,1,124,1,116,3,106,4,124, + 0,106,2,60,0,116,6,124,1,100,1,100,0,131,3,100, + 0,117,0,114,71,9,0,124,0,106,0,124,1,95,7,110, + 10,35,0,4,0,116,8,121,138,1,0,1,0,1,0,89, + 0,110,1,37,0,116,6,124,1,100,2,100,0,131,3,100, + 0,117,0,114,109,9,0,124,1,106,9,124,1,95,10,116, + 11,124,1,100,3,131,2,115,98,124,0,106,2,160,12,100, + 4,161,1,100,5,25,0,124,1,95,10,110,10,35,0,4, + 0,116,8,121,137,1,0,1,0,1,0,89,0,110,1,37, + 0,116,6,124,1,100,6,100,0,131,3,100,0,117,0,114, + 134,9,0,124,0,124,1,95,13,124,1,83,0,35,0,4, + 0,116,8,121,136,1,0,1,0,1,0,89,0,124,1,83, + 0,37,0,124,1,83,0,119,0,119,0,119,0,41,7,78, + 114,112,0,0,0,114,158,0,0,0,114,154,0,0,0,114, + 141,0,0,0,114,26,0,0,0,114,113,0,0,0,41,14, + 114,122,0,0,0,114,170,0,0,0,114,20,0,0,0,114, + 18,0,0,0,114,105,0,0,0,114,171,0,0,0,114,12, + 0,0,0,114,112,0,0,0,114,2,0,0,0,114,8,0, + 0,0,114,158,0,0,0,114,10,0,0,0,114,142,0,0, + 0,114,113,0,0,0,114,164,0,0,0,32,32,114,5,0, + 0,0,218,25,95,108,111,97,100,95,98,97,99,107,119,97, + 114,100,95,99,111,109,112,97,116,105,98,108,101,116,2,0, + 0,115,80,0,0,0,2,3,16,1,2,128,6,1,12,1, + 14,1,12,1,2,1,2,128,14,3,12,1,16,1,2,1, + 10,1,2,128,12,1,4,1,2,128,16,1,2,1,8,4, + 10,1,18,1,4,128,12,1,4,1,2,128,16,1,2,1, + 6,1,4,3,2,128,12,254,2,1,4,1,2,128,4,0, + 2,254,2,251,2,246,115,59,0,0,0,129,7,9,0,137, + 24,33,7,184,4,61,0,189,7,65,6,7,193,16,18,65, + 35,0,193,35,7,65,44,7,193,54,3,65,59,0,193,59, + 7,66,5,7,194,8,1,66,5,7,194,9,1,65,44,7, + 194,10,1,65,6,7,114,172,0,0,0,99,1,0,0,0, + 0,0,0,0,0,0,0,0,11,0,0,0,67,0,0,0, + 115,248,0,0,0,124,0,106,0,100,0,117,1,114,29,116, + 1,124,0,106,0,100,1,131,2,115,29,116,2,124,0,106, + 0,131,1,155,0,100,2,157,2,125,1,116,3,160,4,124, + 1,116,5,161,2,1,0,116,6,124,0,131,1,83,0,116, + 7,124,0,131,1,125,2,100,3,124,0,95,8,9,0,124, + 2,116,9,106,10,124,0,106,11,60,0,9,0,124,0,106, + 0,100,0,117,0,114,62,124,0,106,12,100,0,117,0,114, + 61,116,13,100,4,124,0,106,11,100,5,141,2,130,1,110, + 6,124,0,106,0,160,14,124,2,161,1,1,0,110,22,35, + 0,1,0,1,0,1,0,9,0,116,9,106,10,124,0,106, + 11,61,0,130,0,35,0,4,0,116,15,121,123,1,0,1, + 0,1,0,89,0,130,0,37,0,37,0,116,9,106,10,160, + 16,124,0,106,11,161,1,125,2,124,2,116,9,106,10,124, + 0,106,11,60,0,116,17,100,6,124,0,106,11,124,0,106, + 0,131,3,1,0,100,7,124,0,95,8,124,2,83,0,35, + 0,100,7,124,0,95,8,119,0,37,0,119,0,41,8,78, + 114,163,0,0,0,114,168,0,0,0,84,114,167,0,0,0, + 114,19,0,0,0,122,18,105,109,112,111,114,116,32,123,33, + 114,125,32,35,32,123,33,114,125,70,41,18,114,122,0,0, + 0,114,10,0,0,0,114,6,0,0,0,114,101,0,0,0, + 114,102,0,0,0,114,169,0,0,0,114,172,0,0,0,114, + 165,0,0,0,90,13,95,105,110,105,116,105,97,108,105,122, + 105,110,103,114,18,0,0,0,114,105,0,0,0,114,20,0, + 0,0,114,129,0,0,0,114,88,0,0,0,114,163,0,0, + 0,114,71,0,0,0,114,171,0,0,0,114,84,0,0,0, + 41,3,114,109,0,0,0,114,108,0,0,0,114,110,0,0, + 0,32,32,32,114,5,0,0,0,218,14,95,108,111,97,100, + 95,117,110,108,111,99,107,101,100,152,2,0,0,115,66,0, + 0,0,10,2,12,2,16,1,12,2,8,1,8,2,6,5, + 2,1,12,1,2,1,10,1,10,1,14,1,2,255,12,4, + 4,128,6,1,2,1,10,1,2,3,2,128,12,254,2,1, + 2,1,4,128,14,5,12,1,16,1,6,2,4,2,2,128, + 10,254,2,245,115,64,0,0,0,165,6,65,53,0,172,24, + 65,5,0,193,4,1,65,53,0,193,5,4,65,26,7,193, + 10,5,65,16,6,193,15,1,65,26,7,193,16,7,65,25, + 13,193,23,3,65,26,7,193,26,22,65,53,0,193,53,5, + 65,58,7,193,59,1,65,25,13,114,173,0,0,0,99,1, + 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,67, + 0,0,0,115,58,0,0,0,116,0,124,0,106,1,131,1, + 53,0,1,0,116,2,124,0,131,1,2,0,100,1,4,0, + 4,0,131,3,1,0,83,0,35,0,49,0,115,21,119,4, + 37,0,1,0,1,0,1,0,89,0,1,0,1,0,100,1, + 83,0,41,2,122,191,82,101,116,117,114,110,32,97,32,110, + 101,119,32,109,111,100,117,108,101,32,111,98,106,101,99,116, + 44,32,108,111,97,100,101,100,32,98,121,32,116,104,101,32, + 115,112,101,99,39,115,32,108,111,97,100,101,114,46,10,10, + 32,32,32,32,84,104,101,32,109,111,100,117,108,101,32,105, + 115,32,110,111,116,32,97,100,100,101,100,32,116,111,32,105, + 116,115,32,112,97,114,101,110,116,46,10,10,32,32,32,32, + 73,102,32,97,32,109,111,100,117,108,101,32,105,115,32,97, + 108,114,101,97,100,121,32,105,110,32,115,121,115,46,109,111, + 100,117,108,101,115,44,32,116,104,97,116,32,101,120,105,115, + 116,105,110,103,32,109,111,100,117,108,101,32,103,101,116,115, + 10,32,32,32,32,99,108,111,98,98,101,114,101,100,46,10, + 10,32,32,32,32,78,41,3,114,58,0,0,0,114,20,0, + 0,0,114,173,0,0,0,169,1,114,109,0,0,0,32,114, + 5,0,0,0,114,107,0,0,0,197,2,0,0,115,10,0, + 0,0,12,9,6,1,14,255,22,128,4,0,115,12,0,0, + 0,133,4,16,3,144,4,20,11,149,3,20,11,114,107,0, + 0,0,99,0,0,0,0,0,0,0,0,0,0,0,0,4, + 0,0,0,64,0,0,0,115,140,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,90,4,101,5,100,3, + 100,4,132,0,131,1,90,6,101,7,100,20,100,6,100,7, + 132,1,131,1,90,8,101,7,100,21,100,8,100,9,132,1, + 131,1,90,9,101,5,100,10,100,11,132,0,131,1,90,10, + 101,5,100,12,100,13,132,0,131,1,90,11,101,7,101,12, + 100,14,100,15,132,0,131,1,131,1,90,13,101,7,101,12, + 100,16,100,17,132,0,131,1,131,1,90,14,101,7,101,12, + 100,18,100,19,132,0,131,1,131,1,90,15,101,7,101,16, + 131,1,90,17,100,5,83,0,41,22,218,15,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,122,144,77,101,116, + 97,32,112,97,116,104,32,105,109,112,111,114,116,32,102,111, + 114,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,115,46,10,10,32,32,32,32,65,108,108,32,109,101,116, + 104,111,100,115,32,97,114,101,32,101,105,116,104,101,114,32, + 99,108,97,115,115,32,111,114,32,115,116,97,116,105,99,32, + 109,101,116,104,111,100,115,32,116,111,32,97,118,111,105,100, + 32,116,104,101,32,110,101,101,100,32,116,111,10,32,32,32, + 32,105,110,115,116,97,110,116,105,97,116,101,32,116,104,101, + 32,99,108,97,115,115,46,10,10,32,32,32,32,122,8,98, + 117,105,108,116,45,105,110,99,1,0,0,0,0,0,0,0, + 0,0,0,0,5,0,0,0,67,0,0,0,115,34,0,0, + 0,116,0,160,1,100,1,116,2,161,2,1,0,100,2,124, + 0,106,3,155,2,100,3,116,4,106,5,155,0,100,4,157, + 5,83,0,41,6,250,115,82,101,116,117,114,110,32,114,101, + 112,114,32,102,111,114,32,116,104,101,32,109,111,100,117,108, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,84,104,101,32,105,109,112,111,114, + 116,32,109,97,99,104,105,110,101,114,121,32,100,111,101,115, + 32,116,104,101,32,106,111,98,32,105,116,115,101,108,102,46, + 10,10,32,32,32,32,32,32,32,32,122,81,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,40,41,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,32,97,110,100,32,115,108,97,116, + 101,100,32,102,111,114,32,114,101,109,111,118,97,108,32,105, + 110,32,80,121,116,104,111,110,32,51,46,49,50,122,8,60, + 109,111,100,117,108,101,32,122,2,32,40,122,2,41,62,78, + 41,6,114,101,0,0,0,114,102,0,0,0,114,103,0,0, + 0,114,8,0,0,0,114,175,0,0,0,114,151,0,0,0, + 169,1,114,110,0,0,0,32,114,5,0,0,0,114,114,0, + 0,0,223,2,0,0,115,8,0,0,0,6,7,2,1,4, + 255,22,2,114,17,0,0,0,122,27,66,117,105,108,116,105, + 110,73,109,112,111,114,116,101,114,46,109,111,100,117,108,101, + 95,114,101,112,114,78,99,4,0,0,0,0,0,0,0,0, + 0,0,0,5,0,0,0,67,0,0,0,115,42,0,0,0, + 124,2,100,0,117,1,114,6,100,0,83,0,116,0,160,1, + 124,1,161,1,114,19,116,2,124,1,124,0,124,0,106,3, + 100,1,141,3,83,0,100,0,83,0,169,2,78,114,150,0, + 0,0,41,4,114,65,0,0,0,90,10,105,115,95,98,117, + 105,108,116,105,110,114,104,0,0,0,114,151,0,0,0,169, + 4,218,3,99,108,115,114,90,0,0,0,218,4,112,97,116, + 104,218,6,116,97,114,103,101,116,32,32,32,32,114,5,0, + 0,0,218,9,102,105,110,100,95,115,112,101,99,234,2,0, + 0,115,10,0,0,0,8,2,4,1,10,1,16,1,4,2, + 114,17,0,0,0,122,25,66,117,105,108,116,105,110,73,109, + 112,111,114,116,101,114,46,102,105,110,100,95,115,112,101,99, + 99,3,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,67,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,124,3,100,2,117,1,114,19,124,3,106,4,83,0, + 100,2,83,0,41,3,122,175,70,105,110,100,32,116,104,101, 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 114,86,0,0,0,114,19,0,0,0,78,41,8,114,20,0, - 0,0,114,18,0,0,0,114,87,0,0,0,114,88,0,0, - 0,114,51,0,0,0,114,75,0,0,0,114,65,0,0,0, - 90,14,99,114,101,97,116,101,95,98,117,105,108,116,105,110, - 114,174,0,0,0,32,114,5,0,0,0,114,162,0,0,0, - 2,3,0,0,115,10,0,0,0,12,3,12,1,4,1,6, - 255,12,2,114,17,0,0,0,122,29,66,117,105,108,116,105, - 110,73,109,112,111,114,116,101,114,46,99,114,101,97,116,101, - 95,109,111,100,117,108,101,99,1,0,0,0,0,0,0,0, - 0,0,0,0,3,0,0,0,67,0,0,0,115,16,0,0, - 0,116,0,116,1,106,2,124,0,131,2,1,0,100,1,83, - 0,41,2,122,22,69,120,101,99,32,97,32,98,117,105,108, - 116,45,105,110,32,109,111,100,117,108,101,78,41,3,114,75, - 0,0,0,114,65,0,0,0,90,12,101,120,101,99,95,98, - 117,105,108,116,105,110,114,177,0,0,0,32,114,5,0,0, - 0,114,163,0,0,0,10,3,0,0,115,2,0,0,0,16, - 3,114,17,0,0,0,122,27,66,117,105,108,116,105,110,73, - 109,112,111,114,116,101,114,46,101,120,101,99,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,0,0,0,0, - 1,0,0,0,67,0,0,0,243,4,0,0,0,100,1,83, - 0,41,2,122,57,82,101,116,117,114,110,32,78,111,110,101, - 32,97,115,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,101, - 32,99,111,100,101,32,111,98,106,101,99,116,115,46,78,114, - 23,0,0,0,169,2,114,180,0,0,0,114,90,0,0,0, - 32,32,114,5,0,0,0,218,8,103,101,116,95,99,111,100, - 101,15,3,0,0,243,2,0,0,0,4,4,114,17,0,0, - 0,122,24,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, - 0,0,0,0,0,0,0,0,1,0,0,0,67,0,0,0, - 114,185,0,0,0,41,2,122,56,82,101,116,117,114,110,32, + 46,10,10,32,32,32,32,32,32,32,32,73,102,32,39,112, + 97,116,104,39,32,105,115,32,101,118,101,114,32,115,112,101, + 99,105,102,105,101,100,32,116,104,101,110,32,116,104,101,32, + 115,101,97,114,99,104,32,105,115,32,99,111,110,115,105,100, + 101,114,101,100,32,97,32,102,97,105,108,117,114,101,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, + 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, + 32,32,32,32,32,32,32,122,106,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,40,41,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,32,97,110,100,32,115,108,97,116,101,100,32, + 102,111,114,32,114,101,109,111,118,97,108,32,105,110,32,80, + 121,116,104,111,110,32,51,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,41,5,114,101,0,0,0,114,102,0,0,0, + 114,103,0,0,0,114,183,0,0,0,114,122,0,0,0,41, + 4,114,180,0,0,0,114,90,0,0,0,114,181,0,0,0, + 114,109,0,0,0,32,32,32,32,114,5,0,0,0,218,11, + 102,105,110,100,95,109,111,100,117,108,101,243,2,0,0,115, + 10,0,0,0,6,9,2,2,4,254,12,3,18,1,114,17, + 0,0,0,122,27,66,117,105,108,116,105,110,73,109,112,111, + 114,116,101,114,46,102,105,110,100,95,109,111,100,117,108,101, + 99,1,0,0,0,0,0,0,0,0,0,0,0,4,0,0, + 0,67,0,0,0,115,46,0,0,0,124,0,106,0,116,1, + 106,2,118,1,114,17,116,3,100,1,160,4,124,0,106,0, + 161,1,124,0,106,0,100,2,141,2,130,1,116,5,116,6, + 106,7,124,0,131,2,83,0,41,4,122,24,67,114,101,97, + 116,101,32,97,32,98,117,105,108,116,45,105,110,32,109,111, + 100,117,108,101,114,86,0,0,0,114,19,0,0,0,78,41, + 8,114,20,0,0,0,114,18,0,0,0,114,87,0,0,0, + 114,88,0,0,0,114,51,0,0,0,114,75,0,0,0,114, + 65,0,0,0,90,14,99,114,101,97,116,101,95,98,117,105, + 108,116,105,110,114,174,0,0,0,32,114,5,0,0,0,114, + 162,0,0,0,2,3,0,0,115,10,0,0,0,12,3,12, + 1,4,1,6,255,12,2,114,17,0,0,0,122,29,66,117, + 105,108,116,105,110,73,109,112,111,114,116,101,114,46,99,114, + 101,97,116,101,95,109,111,100,117,108,101,99,1,0,0,0, + 0,0,0,0,0,0,0,0,3,0,0,0,67,0,0,0, + 115,16,0,0,0,116,0,116,1,106,2,124,0,131,2,1, + 0,100,1,83,0,41,2,122,22,69,120,101,99,32,97,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,78, + 41,3,114,75,0,0,0,114,65,0,0,0,90,12,101,120, + 101,99,95,98,117,105,108,116,105,110,114,177,0,0,0,32, + 114,5,0,0,0,114,163,0,0,0,10,3,0,0,115,2, + 0,0,0,16,3,114,17,0,0,0,122,27,66,117,105,108, + 116,105,110,73,109,112,111,114,116,101,114,46,101,120,101,99, + 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, + 0,0,0,0,1,0,0,0,67,0,0,0,243,4,0,0, + 0,100,1,83,0,41,2,122,57,82,101,116,117,114,110,32, 78,111,110,101,32,97,115,32,98,117,105,108,116,45,105,110, 32,109,111,100,117,108,101,115,32,100,111,32,110,111,116,32, - 104,97,118,101,32,115,111,117,114,99,101,32,99,111,100,101, - 46,78,114,23,0,0,0,114,186,0,0,0,32,32,114,5, - 0,0,0,218,10,103,101,116,95,115,111,117,114,99,101,21, - 3,0,0,114,188,0,0,0,114,17,0,0,0,122,26,66, - 117,105,108,116,105,110,73,109,112,111,114,116,101,114,46,103, - 101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,67,0,0,0,114,185, - 0,0,0,41,3,122,52,82,101,116,117,114,110,32,70,97, - 108,115,101,32,97,115,32,98,117,105,108,116,45,105,110,32, - 109,111,100,117,108,101,115,32,97,114,101,32,110,101,118,101, - 114,32,112,97,99,107,97,103,101,115,46,70,78,114,23,0, - 0,0,114,186,0,0,0,32,32,114,5,0,0,0,114,128, - 0,0,0,27,3,0,0,114,188,0,0,0,114,17,0,0, + 104,97,118,101,32,99,111,100,101,32,111,98,106,101,99,116, + 115,46,78,114,23,0,0,0,169,2,114,180,0,0,0,114, + 90,0,0,0,32,32,114,5,0,0,0,218,8,103,101,116, + 95,99,111,100,101,15,3,0,0,243,2,0,0,0,4,4, + 114,17,0,0,0,122,24,66,117,105,108,116,105,110,73,109, + 112,111,114,116,101,114,46,103,101,116,95,99,111,100,101,99, + 2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, + 67,0,0,0,114,185,0,0,0,41,2,122,56,82,101,116, + 117,114,110,32,78,111,110,101,32,97,115,32,98,117,105,108, + 116,45,105,110,32,109,111,100,117,108,101,115,32,100,111,32, + 110,111,116,32,104,97,118,101,32,115,111,117,114,99,101,32, + 99,111,100,101,46,78,114,23,0,0,0,114,186,0,0,0, + 32,32,114,5,0,0,0,218,10,103,101,116,95,115,111,117, + 114,99,101,21,3,0,0,114,188,0,0,0,114,17,0,0, 0,122,26,66,117,105,108,116,105,110,73,109,112,111,114,116, - 101,114,46,105,115,95,112,97,99,107,97,103,101,169,2,78, - 78,114,0,0,0,0,41,18,114,8,0,0,0,114,7,0, - 0,0,114,1,0,0,0,114,9,0,0,0,114,151,0,0, - 0,218,12,115,116,97,116,105,99,109,101,116,104,111,100,114, - 114,0,0,0,218,11,99,108,97,115,115,109,101,116,104,111, - 100,114,183,0,0,0,114,184,0,0,0,114,162,0,0,0, - 114,163,0,0,0,114,95,0,0,0,114,187,0,0,0,114, - 189,0,0,0,114,128,0,0,0,114,111,0,0,0,114,170, - 0,0,0,114,23,0,0,0,114,5,0,0,0,114,175,0, - 0,0,212,2,0,0,115,46,0,0,0,8,0,4,2,4, - 7,2,2,10,1,2,10,12,1,2,8,12,1,2,14,10, - 1,2,7,10,1,2,4,2,1,12,1,2,4,2,1,12, - 1,2,4,2,1,12,1,12,4,114,17,0,0,0,114,175, - 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,64,0,0,0,115,144,0,0,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,90,4,101,5,100, - 3,100,4,132,0,131,1,90,6,101,7,100,22,100,6,100, - 7,132,1,131,1,90,8,101,7,100,23,100,8,100,9,132, - 1,131,1,90,9,101,5,100,10,100,11,132,0,131,1,90, - 10,101,5,100,12,100,13,132,0,131,1,90,11,101,7,100, - 14,100,15,132,0,131,1,90,12,101,7,101,13,100,16,100, - 17,132,0,131,1,131,1,90,14,101,7,101,13,100,18,100, - 19,132,0,131,1,131,1,90,15,101,7,101,13,100,20,100, - 21,132,0,131,1,131,1,90,16,100,5,83,0,41,24,218, - 14,70,114,111,122,101,110,73,109,112,111,114,116,101,114,122, - 142,77,101,116,97,32,112,97,116,104,32,105,109,112,111,114, - 116,32,102,111,114,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,115,46,10,10,32,32,32,32,65,108,108,32,109, - 101,116,104,111,100,115,32,97,114,101,32,101,105,116,104,101, - 114,32,99,108,97,115,115,32,111,114,32,115,116,97,116,105, - 99,32,109,101,116,104,111,100,115,32,116,111,32,97,118,111, - 105,100,32,116,104,101,32,110,101,101,100,32,116,111,10,32, - 32,32,32,105,110,115,116,97,110,116,105,97,116,101,32,116, - 104,101,32,99,108,97,115,115,46,10,10,32,32,32,32,90, - 6,102,114,111,122,101,110,99,1,0,0,0,0,0,0,0, - 0,0,0,0,4,0,0,0,67,0,0,0,115,28,0,0, - 0,116,0,160,1,100,1,116,2,161,2,1,0,100,2,160, - 3,124,0,106,4,116,5,106,6,161,2,83,0,41,4,114, - 176,0,0,0,122,80,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, - 40,41,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 32,97,110,100,32,115,108,97,116,101,100,32,102,111,114,32, - 114,101,109,111,118,97,108,32,105,110,32,80,121,116,104,111, - 110,32,51,46,49,50,114,166,0,0,0,78,41,7,114,101, - 0,0,0,114,102,0,0,0,114,103,0,0,0,114,51,0, - 0,0,114,8,0,0,0,114,193,0,0,0,114,151,0,0, - 0,41,1,218,1,109,32,114,5,0,0,0,114,114,0,0, - 0,47,3,0,0,115,8,0,0,0,6,7,2,1,4,255, - 16,2,114,17,0,0,0,122,26,70,114,111,122,101,110,73, - 109,112,111,114,116,101,114,46,109,111,100,117,108,101,95,114, - 101,112,114,78,99,4,0,0,0,0,0,0,0,0,0,0, - 0,5,0,0,0,67,0,0,0,115,30,0,0,0,116,0, - 160,1,124,1,161,1,114,13,116,2,124,1,124,0,124,0, - 106,3,100,1,141,3,83,0,100,0,83,0,114,178,0,0, - 0,41,4,114,65,0,0,0,114,98,0,0,0,114,104,0, - 0,0,114,151,0,0,0,114,179,0,0,0,32,32,32,32, - 114,5,0,0,0,114,183,0,0,0,58,3,0,0,115,6, - 0,0,0,10,2,16,1,4,2,114,17,0,0,0,122,24, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,102, - 105,110,100,95,115,112,101,99,99,3,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,67,0,0,0,115,30,0, - 0,0,116,0,160,1,100,1,116,2,161,2,1,0,116,3, - 160,4,124,1,161,1,114,13,124,0,83,0,100,2,83,0, - 41,3,122,93,70,105,110,100,32,97,32,102,114,111,122,101, - 110,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,122,105,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,40,41,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, - 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, - 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, - 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,41,5,114, - 101,0,0,0,114,102,0,0,0,114,103,0,0,0,114,65, - 0,0,0,114,98,0,0,0,41,3,114,180,0,0,0,114, - 90,0,0,0,114,181,0,0,0,32,32,32,114,5,0,0, - 0,114,184,0,0,0,65,3,0,0,115,8,0,0,0,6, - 7,2,2,4,254,18,3,114,17,0,0,0,122,26,70,114, - 111,122,101,110,73,109,112,111,114,116,101,114,46,102,105,110, - 100,95,109,111,100,117,108,101,99,1,0,0,0,0,0,0, - 0,0,0,0,0,1,0,0,0,67,0,0,0,114,185,0, - 0,0,41,2,122,42,85,115,101,32,100,101,102,97,117,108, - 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, - 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, - 78,114,23,0,0,0,114,174,0,0,0,32,114,5,0,0, - 0,114,162,0,0,0,77,3,0,0,115,2,0,0,0,4, - 0,114,17,0,0,0,122,28,70,114,111,122,101,110,73,109, - 112,111,114,116,101,114,46,99,114,101,97,116,101,95,109,111, - 100,117,108,101,99,1,0,0,0,0,0,0,0,0,0,0, - 0,4,0,0,0,67,0,0,0,115,64,0,0,0,124,0, - 106,0,106,1,125,1,116,2,160,3,124,1,161,1,115,18, - 116,4,100,1,160,5,124,1,161,1,124,1,100,2,141,2, - 130,1,116,6,116,2,106,7,124,1,131,2,125,2,116,8, - 124,2,124,0,106,9,131,2,1,0,100,0,83,0,114,97, - 0,0,0,41,10,114,113,0,0,0,114,20,0,0,0,114, - 65,0,0,0,114,98,0,0,0,114,88,0,0,0,114,51, - 0,0,0,114,75,0,0,0,218,17,103,101,116,95,102,114, - 111,122,101,110,95,111,98,106,101,99,116,218,4,101,120,101, - 99,114,13,0,0,0,41,3,114,110,0,0,0,114,20,0, - 0,0,218,4,99,111,100,101,32,32,32,114,5,0,0,0, - 114,163,0,0,0,81,3,0,0,115,14,0,0,0,8,2, - 10,1,10,1,2,1,6,255,12,2,16,1,114,17,0,0, + 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,67,0, + 0,0,114,185,0,0,0,41,3,122,52,82,101,116,117,114, + 110,32,70,97,108,115,101,32,97,115,32,98,117,105,108,116, + 45,105,110,32,109,111,100,117,108,101,115,32,97,114,101,32, + 110,101,118,101,114,32,112,97,99,107,97,103,101,115,46,70, + 78,114,23,0,0,0,114,186,0,0,0,32,32,114,5,0, + 0,0,114,128,0,0,0,27,3,0,0,114,188,0,0,0, + 114,17,0,0,0,122,26,66,117,105,108,116,105,110,73,109, + 112,111,114,116,101,114,46,105,115,95,112,97,99,107,97,103, + 101,169,2,78,78,114,0,0,0,0,41,18,114,8,0,0, + 0,114,7,0,0,0,114,1,0,0,0,114,9,0,0,0, + 114,151,0,0,0,218,12,115,116,97,116,105,99,109,101,116, + 104,111,100,114,114,0,0,0,218,11,99,108,97,115,115,109, + 101,116,104,111,100,114,183,0,0,0,114,184,0,0,0,114, + 162,0,0,0,114,163,0,0,0,114,95,0,0,0,114,187, + 0,0,0,114,189,0,0,0,114,128,0,0,0,114,111,0, + 0,0,114,170,0,0,0,114,23,0,0,0,114,5,0,0, + 0,114,175,0,0,0,212,2,0,0,115,46,0,0,0,8, + 0,4,2,4,7,2,2,10,1,2,10,12,1,2,8,12, + 1,2,14,10,1,2,7,10,1,2,4,2,1,12,1,2, + 4,2,1,12,1,2,4,2,1,12,1,12,4,114,17,0, + 0,0,114,175,0,0,0,99,0,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,64,0,0,0,115,144,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,90, + 4,101,5,100,3,100,4,132,0,131,1,90,6,101,7,100, + 22,100,6,100,7,132,1,131,1,90,8,101,7,100,23,100, + 8,100,9,132,1,131,1,90,9,101,5,100,10,100,11,132, + 0,131,1,90,10,101,5,100,12,100,13,132,0,131,1,90, + 11,101,7,100,14,100,15,132,0,131,1,90,12,101,7,101, + 13,100,16,100,17,132,0,131,1,131,1,90,14,101,7,101, + 13,100,18,100,19,132,0,131,1,131,1,90,15,101,7,101, + 13,100,20,100,21,132,0,131,1,131,1,90,16,100,5,83, + 0,41,24,218,14,70,114,111,122,101,110,73,109,112,111,114, + 116,101,114,122,142,77,101,116,97,32,112,97,116,104,32,105, + 109,112,111,114,116,32,102,111,114,32,102,114,111,122,101,110, + 32,109,111,100,117,108,101,115,46,10,10,32,32,32,32,65, + 108,108,32,109,101,116,104,111,100,115,32,97,114,101,32,101, + 105,116,104,101,114,32,99,108,97,115,115,32,111,114,32,115, + 116,97,116,105,99,32,109,101,116,104,111,100,115,32,116,111, + 32,97,118,111,105,100,32,116,104,101,32,110,101,101,100,32, + 116,111,10,32,32,32,32,105,110,115,116,97,110,116,105,97, + 116,101,32,116,104,101,32,99,108,97,115,115,46,10,10,32, + 32,32,32,90,6,102,114,111,122,101,110,99,1,0,0,0, + 0,0,0,0,0,0,0,0,4,0,0,0,67,0,0,0, + 115,28,0,0,0,116,0,160,1,100,1,116,2,161,2,1, + 0,100,2,160,3,124,0,106,4,116,5,106,6,161,2,83, + 0,41,4,114,176,0,0,0,122,80,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,40,41,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,32,97,110,100,32,115,108,97,116,101,100,32, + 102,111,114,32,114,101,109,111,118,97,108,32,105,110,32,80, + 121,116,104,111,110,32,51,46,49,50,114,166,0,0,0,78, + 41,7,114,101,0,0,0,114,102,0,0,0,114,103,0,0, + 0,114,51,0,0,0,114,8,0,0,0,114,193,0,0,0, + 114,151,0,0,0,41,1,218,1,109,32,114,5,0,0,0, + 114,114,0,0,0,47,3,0,0,115,8,0,0,0,6,7, + 2,1,4,255,16,2,114,17,0,0,0,122,26,70,114,111, + 122,101,110,73,109,112,111,114,116,101,114,46,109,111,100,117, + 108,101,95,114,101,112,114,78,99,4,0,0,0,0,0,0, + 0,0,0,0,0,5,0,0,0,67,0,0,0,115,30,0, + 0,0,116,0,160,1,124,1,161,1,114,13,116,2,124,1, + 124,0,124,0,106,3,100,1,141,3,83,0,100,0,83,0, + 114,178,0,0,0,41,4,114,65,0,0,0,114,98,0,0, + 0,114,104,0,0,0,114,151,0,0,0,114,179,0,0,0, + 32,32,32,32,114,5,0,0,0,114,183,0,0,0,58,3, + 0,0,115,6,0,0,0,10,2,16,1,4,2,114,17,0, + 0,0,122,24,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,67,0,0, + 0,115,30,0,0,0,116,0,160,1,100,1,116,2,161,2, + 1,0,116,3,160,4,124,1,161,1,114,13,124,0,83,0, + 100,2,83,0,41,3,122,93,70,105,110,100,32,97,32,102, + 114,111,122,101,110,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, + 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, + 46,32,32,85,115,101,32,102,105,110,100,95,115,112,101,99, + 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, + 32,32,32,32,32,122,105,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,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, + 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, + 111,110,32,51,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,41,5,114,101,0,0,0,114,102,0,0,0,114,103,0, + 0,0,114,65,0,0,0,114,98,0,0,0,41,3,114,180, + 0,0,0,114,90,0,0,0,114,181,0,0,0,32,32,32, + 114,5,0,0,0,114,184,0,0,0,65,3,0,0,115,8, + 0,0,0,6,7,2,2,4,254,18,3,114,17,0,0,0, + 122,26,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,102,105,110,100,95,109,111,100,117,108,101,99,1,0,0, + 0,0,0,0,0,0,0,0,0,1,0,0,0,67,0,0, + 0,114,185,0,0,0,41,2,122,42,85,115,101,32,100,101, + 102,97,117,108,116,32,115,101,109,97,110,116,105,99,115,32, + 102,111,114,32,109,111,100,117,108,101,32,99,114,101,97,116, + 105,111,110,46,78,114,23,0,0,0,114,174,0,0,0,32, + 114,5,0,0,0,114,162,0,0,0,77,3,0,0,115,2, + 0,0,0,4,0,114,17,0,0,0,122,28,70,114,111,122, + 101,110,73,109,112,111,114,116,101,114,46,99,114,101,97,116, + 101,95,109,111,100,117,108,101,99,1,0,0,0,0,0,0, + 0,0,0,0,0,4,0,0,0,67,0,0,0,115,64,0, + 0,0,124,0,106,0,106,1,125,1,116,2,160,3,124,1, + 161,1,115,18,116,4,100,1,160,5,124,1,161,1,124,1, + 100,2,141,2,130,1,116,6,116,2,106,7,124,1,131,2, + 125,2,116,8,124,2,124,0,106,9,131,2,1,0,100,0, + 83,0,114,97,0,0,0,41,10,114,113,0,0,0,114,20, + 0,0,0,114,65,0,0,0,114,98,0,0,0,114,88,0, + 0,0,114,51,0,0,0,114,75,0,0,0,218,17,103,101, + 116,95,102,114,111,122,101,110,95,111,98,106,101,99,116,218, + 4,101,120,101,99,114,13,0,0,0,41,3,114,110,0,0, + 0,114,20,0,0,0,218,4,99,111,100,101,32,32,32,114, + 5,0,0,0,114,163,0,0,0,81,3,0,0,115,14,0, + 0,0,8,2,10,1,10,1,2,1,6,255,12,2,16,1, + 114,17,0,0,0,122,26,70,114,111,122,101,110,73,109,112, + 111,114,116,101,114,46,101,120,101,99,95,109,111,100,117,108, + 101,99,2,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,67,0,0,0,115,10,0,0,0,116,0,124,0,124, + 1,131,2,83,0,41,2,122,95,76,111,97,100,32,97,32, + 102,114,111,122,101,110,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, + 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, + 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, + 32,32,32,32,32,32,32,32,78,41,1,114,111,0,0,0, + 114,186,0,0,0,32,32,114,5,0,0,0,114,170,0,0, + 0,90,3,0,0,115,2,0,0,0,10,8,114,17,0,0, 0,122,26,70,114,111,122,101,110,73,109,112,111,114,116,101, - 114,46,101,120,101,99,95,109,111,100,117,108,101,99,2,0, + 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, 0,0,0,0,0,0,0,0,0,0,3,0,0,0,67,0, - 0,0,115,10,0,0,0,116,0,124,0,124,1,131,2,83, - 0,41,2,122,95,76,111,97,100,32,97,32,102,114,111,122, - 101,110,32,109,111,100,117,108,101,46,10,10,32,32,32,32, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, - 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,78,41,1,114,111,0,0,0,114,186,0,0, - 0,32,32,114,5,0,0,0,114,170,0,0,0,90,3,0, - 0,115,2,0,0,0,10,8,114,17,0,0,0,122,26,70, - 114,111,122,101,110,73,109,112,111,114,116,101,114,46,108,111, - 97,100,95,109,111,100,117,108,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,67,0,0,0,243,10, - 0,0,0,116,0,160,1,124,1,161,1,83,0,41,2,122, - 45,82,101,116,117,114,110,32,116,104,101,32,99,111,100,101, - 32,111,98,106,101,99,116,32,102,111,114,32,116,104,101,32, - 102,114,111,122,101,110,32,109,111,100,117,108,101,46,78,41, - 2,114,65,0,0,0,114,195,0,0,0,114,186,0,0,0, - 32,32,114,5,0,0,0,114,187,0,0,0,100,3,0,0, - 243,2,0,0,0,10,4,114,17,0,0,0,122,23,70,114, - 111,122,101,110,73,109,112,111,114,116,101,114,46,103,101,116, - 95,99,111,100,101,99,2,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,67,0,0,0,114,185,0,0,0,41, - 2,122,54,82,101,116,117,114,110,32,78,111,110,101,32,97, - 115,32,102,114,111,122,101,110,32,109,111,100,117,108,101,115, - 32,100,111,32,110,111,116,32,104,97,118,101,32,115,111,117, - 114,99,101,32,99,111,100,101,46,78,114,23,0,0,0,114, - 186,0,0,0,32,32,114,5,0,0,0,114,189,0,0,0, - 106,3,0,0,114,188,0,0,0,114,17,0,0,0,122,25, - 70,114,111,122,101,110,73,109,112,111,114,116,101,114,46,103, - 101,116,95,115,111,117,114,99,101,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,67,0,0,0,114,198, - 0,0,0,41,2,122,46,82,101,116,117,114,110,32,84,114, - 117,101,32,105,102,32,116,104,101,32,102,114,111,122,101,110, - 32,109,111,100,117,108,101,32,105,115,32,97,32,112,97,99, - 107,97,103,101,46,78,41,2,114,65,0,0,0,90,17,105, - 115,95,102,114,111,122,101,110,95,112,97,99,107,97,103,101, - 114,186,0,0,0,32,32,114,5,0,0,0,114,128,0,0, - 0,112,3,0,0,114,199,0,0,0,114,17,0,0,0,122, - 25,70,114,111,122,101,110,73,109,112,111,114,116,101,114,46, - 105,115,95,112,97,99,107,97,103,101,114,190,0,0,0,114, - 0,0,0,0,41,17,114,8,0,0,0,114,7,0,0,0, - 114,1,0,0,0,114,9,0,0,0,114,151,0,0,0,114, - 191,0,0,0,114,114,0,0,0,114,192,0,0,0,114,183, - 0,0,0,114,184,0,0,0,114,162,0,0,0,114,163,0, - 0,0,114,170,0,0,0,114,100,0,0,0,114,187,0,0, - 0,114,189,0,0,0,114,128,0,0,0,114,23,0,0,0, - 114,5,0,0,0,114,193,0,0,0,36,3,0,0,115,48, - 0,0,0,8,0,4,2,4,7,2,2,10,1,2,10,12, - 1,2,6,12,1,2,11,10,1,2,3,10,1,2,8,10, - 1,2,9,2,1,12,1,2,4,2,1,12,1,2,4,2, - 1,16,1,114,17,0,0,0,114,193,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,64,0, - 0,0,115,32,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,83,0,41,7,218,18,95,73,109,112,111, - 114,116,76,111,99,107,67,111,110,116,101,120,116,122,36,67, - 111,110,116,101,120,116,32,109,97,110,97,103,101,114,32,102, - 111,114,32,116,104,101,32,105,109,112,111,114,116,32,108,111, - 99,107,46,99,1,0,0,0,0,0,0,0,0,0,0,0, - 2,0,0,0,67,0,0,0,243,12,0,0,0,116,0,160, - 1,161,0,1,0,100,1,83,0,41,2,122,24,65,99,113, - 117,105,114,101,32,116,104,101,32,105,109,112,111,114,116,32, - 108,111,99,107,46,78,41,2,114,65,0,0,0,114,66,0, - 0,0,114,53,0,0,0,32,114,5,0,0,0,114,62,0, - 0,0,125,3,0,0,243,2,0,0,0,12,2,114,17,0, - 0,0,122,28,95,73,109,112,111,114,116,76,111,99,107,67, - 111,110,116,101,120,116,46,95,95,101,110,116,101,114,95,95, - 99,4,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,67,0,0,0,114,201,0,0,0,41,2,122,60,82,101, - 108,101,97,115,101,32,116,104,101,32,105,109,112,111,114,116, - 32,108,111,99,107,32,114,101,103,97,114,100,108,101,115,115, - 32,111,102,32,97,110,121,32,114,97,105,115,101,100,32,101, - 120,99,101,112,116,105,111,110,115,46,78,41,2,114,65,0, - 0,0,114,68,0,0,0,41,4,114,34,0,0,0,218,8, - 101,120,99,95,116,121,112,101,218,9,101,120,99,95,118,97, - 108,117,101,218,13,101,120,99,95,116,114,97,99,101,98,97, - 99,107,32,32,32,32,114,5,0,0,0,114,64,0,0,0, - 129,3,0,0,114,202,0,0,0,114,17,0,0,0,122,27, - 95,73,109,112,111,114,116,76,111,99,107,67,111,110,116,101, - 120,116,46,95,95,101,120,105,116,95,95,78,41,6,114,8, - 0,0,0,114,7,0,0,0,114,1,0,0,0,114,9,0, - 0,0,114,62,0,0,0,114,64,0,0,0,114,23,0,0, - 0,114,5,0,0,0,114,200,0,0,0,121,3,0,0,115, - 8,0,0,0,8,0,4,2,8,2,12,4,114,17,0,0, - 0,114,200,0,0,0,99,3,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,67,0,0,0,115,64,0,0,0, - 124,1,160,0,100,1,124,2,100,2,24,0,161,2,125,3, - 116,1,124,3,131,1,124,2,107,0,114,18,116,2,100,3, - 131,1,130,1,124,3,100,4,25,0,125,4,124,0,114,30, - 100,5,160,3,124,4,124,0,161,2,83,0,124,4,83,0, - 41,7,122,50,82,101,115,111,108,118,101,32,97,32,114,101, - 108,97,116,105,118,101,32,109,111,100,117,108,101,32,110,97, - 109,101,32,116,111,32,97,110,32,97,98,115,111,108,117,116, - 101,32,111,110,101,46,114,141,0,0,0,114,43,0,0,0, - 122,50,97,116,116,101,109,112,116,101,100,32,114,101,108,97, - 116,105,118,101,32,105,109,112,111,114,116,32,98,101,121,111, - 110,100,32,116,111,112,45,108,101,118,101,108,32,112,97,99, - 107,97,103,101,114,26,0,0,0,250,5,123,125,46,123,125, - 78,41,4,218,6,114,115,112,108,105,116,218,3,108,101,110, - 114,88,0,0,0,114,51,0,0,0,41,5,114,20,0,0, - 0,218,7,112,97,99,107,97,103,101,218,5,108,101,118,101, - 108,90,4,98,105,116,115,90,4,98,97,115,101,32,32,32, - 32,32,114,5,0,0,0,218,13,95,114,101,115,111,108,118, - 101,95,110,97,109,101,134,3,0,0,115,10,0,0,0,16, - 2,12,1,8,1,8,1,20,1,114,17,0,0,0,114,211, - 0,0,0,99,3,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,67,0,0,0,115,60,0,0,0,116,0,124, - 0,131,1,155,0,100,1,157,2,125,3,116,1,160,2,124, - 3,116,3,161,2,1,0,124,0,160,4,124,1,124,2,161, - 2,125,4,124,4,100,0,117,0,114,25,100,0,83,0,116, - 5,124,1,124,4,131,2,83,0,41,2,78,122,53,46,102, - 105,110,100,95,115,112,101,99,40,41,32,110,111,116,32,102, - 111,117,110,100,59,32,102,97,108,108,105,110,103,32,98,97, - 99,107,32,116,111,32,102,105,110,100,95,109,111,100,117,108, - 101,40,41,41,6,114,6,0,0,0,114,101,0,0,0,114, - 102,0,0,0,114,169,0,0,0,114,184,0,0,0,114,104, - 0,0,0,41,5,218,6,102,105,110,100,101,114,114,20,0, - 0,0,114,181,0,0,0,114,108,0,0,0,114,122,0,0, - 0,32,32,32,32,32,114,5,0,0,0,218,17,95,102,105, - 110,100,95,115,112,101,99,95,108,101,103,97,99,121,143,3, - 0,0,115,12,0,0,0,14,1,12,2,12,1,8,1,4, - 1,10,1,114,17,0,0,0,114,213,0,0,0,99,3,0, - 0,0,0,0,0,0,0,0,0,0,10,0,0,0,67,0, - 0,0,115,30,1,0,0,116,0,106,1,125,3,124,3,100, - 1,117,0,114,11,116,2,100,2,131,1,130,1,124,3,115, - 19,116,3,160,4,100,3,116,5,161,2,1,0,124,0,116, - 0,106,6,118,0,125,4,124,3,68,0,93,112,125,5,116, - 7,131,0,53,0,1,0,9,0,124,5,106,8,125,6,110, - 27,35,0,4,0,116,9,121,142,1,0,1,0,1,0,116, - 10,124,5,124,0,124,1,131,3,125,7,124,7,100,1,117, - 0,114,61,89,0,100,1,4,0,4,0,131,3,1,0,113, - 26,89,0,110,7,37,0,124,6,124,0,124,1,124,2,131, - 3,125,7,100,1,4,0,4,0,131,3,1,0,110,11,35, - 0,49,0,115,81,119,4,37,0,1,0,1,0,1,0,89, - 0,1,0,1,0,124,7,100,1,117,1,114,138,124,4,115, - 134,124,0,116,0,106,6,118,0,114,134,116,0,106,6,124, - 0,25,0,125,8,9,0,124,8,106,11,125,9,110,14,35, - 0,4,0,116,9,121,141,1,0,1,0,1,0,124,7,6, - 0,89,0,2,0,1,0,83,0,37,0,124,9,100,1,117, - 0,114,130,124,7,2,0,1,0,83,0,124,9,2,0,1, - 0,83,0,124,7,2,0,1,0,83,0,113,26,100,1,83, - 0,119,0,119,0,41,4,122,21,70,105,110,100,32,97,32, - 109,111,100,117,108,101,39,115,32,115,112,101,99,46,78,122, - 53,115,121,115,46,109,101,116,97,95,112,97,116,104,32,105, - 115,32,78,111,110,101,44,32,80,121,116,104,111,110,32,105, - 115,32,108,105,107,101,108,121,32,115,104,117,116,116,105,110, - 103,32,100,111,119,110,122,22,115,121,115,46,109,101,116,97, - 95,112,97,116,104,32,105,115,32,101,109,112,116,121,41,12, - 114,18,0,0,0,218,9,109,101,116,97,95,112,97,116,104, - 114,88,0,0,0,114,101,0,0,0,114,102,0,0,0,114, - 169,0,0,0,114,105,0,0,0,114,200,0,0,0,114,183, - 0,0,0,114,2,0,0,0,114,213,0,0,0,114,113,0, - 0,0,41,10,114,20,0,0,0,114,181,0,0,0,114,182, - 0,0,0,114,214,0,0,0,90,9,105,115,95,114,101,108, - 111,97,100,114,212,0,0,0,114,183,0,0,0,114,109,0, - 0,0,114,110,0,0,0,114,113,0,0,0,32,32,32,32, - 32,32,32,32,32,32,114,5,0,0,0,218,10,95,102,105, - 110,100,95,115,112,101,99,153,3,0,0,115,76,0,0,0, - 6,2,8,1,8,2,4,3,12,1,10,5,8,1,8,1, - 2,1,8,1,2,128,12,1,12,1,8,1,2,1,12,250, - 4,5,2,128,12,3,12,248,22,128,8,9,14,2,10,1, - 2,1,8,1,2,128,12,1,12,4,2,128,8,2,8,1, - 8,2,8,2,2,239,4,19,2,243,2,244,115,63,0,0, - 0,159,1,65,12,5,161,3,37,4,164,1,65,12,5,165, - 17,63,11,182,1,65,12,5,189,9,65,12,5,193,12,4, - 65,16,13,193,17,3,65,16,13,193,40,3,65,44,2,193, - 44,9,65,57,9,194,13,1,65,57,9,194,14,1,63,11, - 114,215,0,0,0,99,3,0,0,0,0,0,0,0,0,0, - 0,0,5,0,0,0,67,0,0,0,115,110,0,0,0,116, - 0,124,0,116,1,131,2,115,14,116,2,100,1,160,3,116, - 4,124,0,131,1,161,1,131,1,130,1,124,2,100,2,107, - 0,114,22,116,5,100,3,131,1,130,1,124,2,100,2,107, - 4,114,41,116,0,124,1,116,1,131,2,115,35,116,2,100, - 4,131,1,130,1,124,1,115,41,116,6,100,5,131,1,130, - 1,124,0,115,53,124,2,100,2,107,2,114,51,116,5,100, - 6,131,1,130,1,100,7,83,0,100,7,83,0,41,8,122, - 28,86,101,114,105,102,121,32,97,114,103,117,109,101,110,116, - 115,32,97,114,101,32,34,115,97,110,101,34,46,122,31,109, - 111,100,117,108,101,32,110,97,109,101,32,109,117,115,116,32, - 98,101,32,115,116,114,44,32,110,111,116,32,123,125,114,26, - 0,0,0,122,18,108,101,118,101,108,32,109,117,115,116,32, - 98,101,32,62,61,32,48,122,31,95,95,112,97,99,107,97, - 103,101,95,95,32,110,111,116,32,115,101,116,32,116,111,32, - 97,32,115,116,114,105,110,103,122,54,97,116,116,101,109,112, - 116,101,100,32,114,101,108,97,116,105,118,101,32,105,109,112, - 111,114,116,32,119,105,116,104,32,110,111,32,107,110,111,119, - 110,32,112,97,114,101,110,116,32,112,97,99,107,97,103,101, - 122,17,69,109,112,116,121,32,109,111,100,117,108,101,32,110, - 97,109,101,78,41,7,218,10,105,115,105,110,115,116,97,110, - 99,101,218,3,115,116,114,218,9,84,121,112,101,69,114,114, - 111,114,114,51,0,0,0,114,3,0,0,0,218,10,86,97, - 108,117,101,69,114,114,111,114,114,88,0,0,0,169,3,114, - 20,0,0,0,114,209,0,0,0,114,210,0,0,0,32,32, - 32,114,5,0,0,0,218,13,95,115,97,110,105,116,121,95, - 99,104,101,99,107,200,3,0,0,115,24,0,0,0,10,2, - 18,1,8,1,8,1,8,1,10,1,8,1,4,1,8,1, - 12,2,8,1,8,255,114,17,0,0,0,114,221,0,0,0, - 122,16,78,111,32,109,111,100,117,108,101,32,110,97,109,101, - 100,32,122,4,123,33,114,125,99,2,0,0,0,0,0,0, - 0,0,0,0,0,8,0,0,0,67,0,0,0,115,20,1, - 0,0,100,0,125,2,124,0,160,0,100,1,161,1,100,2, - 25,0,125,3,124,3,114,64,124,3,116,1,106,2,118,1, - 114,21,116,3,124,1,124,3,131,2,1,0,124,0,116,1, - 106,2,118,0,114,31,116,1,106,2,124,0,25,0,83,0, - 116,1,106,2,124,3,25,0,125,4,9,0,124,4,106,4, - 125,2,110,23,35,0,4,0,116,5,121,137,1,0,1,0, - 1,0,116,6,100,3,23,0,160,7,124,0,124,3,161,2, - 125,5,116,8,124,5,124,0,100,4,141,2,100,0,130,2, - 37,0,116,9,124,0,124,2,131,2,125,6,124,6,100,0, - 117,0,114,82,116,8,116,6,160,7,124,0,161,1,124,0, - 100,4,141,2,130,1,116,10,124,6,131,1,125,7,124,3, - 114,134,116,1,106,2,124,3,25,0,125,4,124,0,160,0, - 100,1,161,1,100,5,25,0,125,8,9,0,116,11,124,4, - 124,8,124,7,131,3,1,0,124,7,83,0,35,0,4,0, - 116,5,121,136,1,0,1,0,1,0,100,6,124,3,155,2, - 100,7,124,8,155,2,157,4,125,5,116,12,160,13,124,5, - 116,14,161,2,1,0,89,0,124,7,83,0,37,0,124,7, - 83,0,119,0,119,0,41,8,78,114,141,0,0,0,114,26, - 0,0,0,122,23,59,32,123,33,114,125,32,105,115,32,110, - 111,116,32,97,32,112,97,99,107,97,103,101,114,19,0,0, - 0,233,2,0,0,0,122,27,67,97,110,110,111,116,32,115, - 101,116,32,97,110,32,97,116,116,114,105,98,117,116,101,32, - 111,110,32,122,18,32,102,111,114,32,99,104,105,108,100,32, - 109,111,100,117,108,101,32,41,15,114,142,0,0,0,114,18, - 0,0,0,114,105,0,0,0,114,75,0,0,0,114,154,0, - 0,0,114,2,0,0,0,218,8,95,69,82,82,95,77,83, - 71,114,51,0,0,0,218,19,77,111,100,117,108,101,78,111, - 116,70,111,117,110,100,69,114,114,111,114,114,215,0,0,0, - 114,173,0,0,0,114,11,0,0,0,114,101,0,0,0,114, - 102,0,0,0,114,169,0,0,0,41,9,114,20,0,0,0, - 218,7,105,109,112,111,114,116,95,114,181,0,0,0,114,143, - 0,0,0,90,13,112,97,114,101,110,116,95,109,111,100,117, - 108,101,114,108,0,0,0,114,109,0,0,0,114,110,0,0, - 0,90,5,99,104,105,108,100,32,32,32,32,32,32,32,32, - 32,114,5,0,0,0,218,23,95,102,105,110,100,95,97,110, - 100,95,108,111,97,100,95,117,110,108,111,99,107,101,100,219, - 3,0,0,115,68,0,0,0,4,1,14,1,4,1,10,1, - 10,1,10,2,10,1,10,1,2,1,8,1,2,128,12,1, - 16,1,14,1,2,128,10,1,8,1,18,1,8,2,4,1, - 10,2,14,1,2,1,12,1,4,4,2,128,12,253,16,1, - 14,1,4,1,2,128,4,0,2,253,2,242,115,31,0,0, - 0,165,3,41,0,169,22,63,7,193,37,6,65,45,0,193, - 45,21,66,5,7,194,8,1,66,5,7,194,9,1,63,7, - 114,226,0,0,0,99,2,0,0,0,0,0,0,0,0,0, - 0,0,9,0,0,0,67,0,0,0,115,132,0,0,0,116, - 0,124,0,131,1,53,0,1,0,116,1,106,2,160,3,124, - 0,116,4,161,2,125,2,124,2,116,4,117,0,114,27,116, - 5,124,0,124,1,131,2,2,0,100,1,4,0,4,0,131, - 3,1,0,83,0,9,0,100,1,4,0,4,0,131,3,1, - 0,110,11,35,0,49,0,115,39,119,4,37,0,1,0,1, - 0,1,0,89,0,1,0,1,0,124,2,100,1,117,0,114, - 60,100,2,160,6,124,0,161,1,125,3,116,7,124,3,124, - 0,100,3,141,2,130,1,116,8,124,0,131,1,1,0,124, - 2,83,0,41,4,122,25,70,105,110,100,32,97,110,100,32, - 108,111,97,100,32,116,104,101,32,109,111,100,117,108,101,46, - 78,122,40,105,109,112,111,114,116,32,111,102,32,123,125,32, - 104,97,108,116,101,100,59,32,78,111,110,101,32,105,110,32, - 115,121,115,46,109,111,100,117,108,101,115,114,19,0,0,0, - 41,9,114,58,0,0,0,114,18,0,0,0,114,105,0,0, - 0,114,39,0,0,0,218,14,95,78,69,69,68,83,95,76, - 79,65,68,73,78,71,114,226,0,0,0,114,51,0,0,0, - 114,224,0,0,0,114,73,0,0,0,41,4,114,20,0,0, - 0,114,225,0,0,0,114,110,0,0,0,114,83,0,0,0, - 32,32,32,32,114,5,0,0,0,218,14,95,102,105,110,100, - 95,97,110,100,95,108,111,97,100,254,3,0,0,115,30,0, - 0,0,10,2,14,1,8,1,8,1,14,253,2,2,12,254, - 22,128,8,5,2,1,6,1,2,255,12,2,8,2,4,1, - 115,12,0,0,0,132,16,34,3,162,4,38,11,167,3,38, - 11,114,228,0,0,0,114,26,0,0,0,99,3,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,67,0,0,0, - 115,42,0,0,0,116,0,124,0,124,1,124,2,131,3,1, - 0,124,2,100,1,107,4,114,16,116,1,124,0,124,1,124, - 2,131,3,125,0,116,2,124,0,116,3,131,2,83,0,41, - 3,97,50,1,0,0,73,109,112,111,114,116,32,97,110,100, - 32,114,101,116,117,114,110,32,116,104,101,32,109,111,100,117, - 108,101,32,98,97,115,101,100,32,111,110,32,105,116,115,32, - 110,97,109,101,44,32,116,104,101,32,112,97,99,107,97,103, - 101,32,116,104,101,32,99,97,108,108,32,105,115,10,32,32, - 32,32,98,101,105,110,103,32,109,97,100,101,32,102,114,111, - 109,44,32,97,110,100,32,116,104,101,32,108,101,118,101,108, - 32,97,100,106,117,115,116,109,101,110,116,46,10,10,32,32, - 32,32,84,104,105,115,32,102,117,110,99,116,105,111,110,32, - 114,101,112,114,101,115,101,110,116,115,32,116,104,101,32,103, - 114,101,97,116,101,115,116,32,99,111,109,109,111,110,32,100, - 101,110,111,109,105,110,97,116,111,114,32,111,102,32,102,117, - 110,99,116,105,111,110,97,108,105,116,121,10,32,32,32,32, - 98,101,116,119,101,101,110,32,105,109,112,111,114,116,95,109, - 111,100,117,108,101,32,97,110,100,32,95,95,105,109,112,111, - 114,116,95,95,46,32,84,104,105,115,32,105,110,99,108,117, - 100,101,115,32,115,101,116,116,105,110,103,32,95,95,112,97, - 99,107,97,103,101,95,95,32,105,102,10,32,32,32,32,116, - 104,101,32,108,111,97,100,101,114,32,100,105,100,32,110,111, - 116,46,10,10,32,32,32,32,114,26,0,0,0,78,41,4, - 114,221,0,0,0,114,211,0,0,0,114,228,0,0,0,218, - 11,95,103,99,100,95,105,109,112,111,114,116,114,220,0,0, - 0,32,32,32,114,5,0,0,0,114,229,0,0,0,14,4, - 0,0,115,8,0,0,0,12,9,8,1,12,1,10,1,114, - 17,0,0,0,114,229,0,0,0,169,1,218,9,114,101,99, - 117,114,115,105,118,101,99,3,0,0,0,0,0,0,0,1, - 0,0,0,9,0,0,0,67,0,0,0,115,216,0,0,0, - 124,1,68,0,93,102,125,4,116,0,124,4,116,1,131,2, - 115,32,124,3,114,17,124,0,106,2,100,1,23,0,125,5, - 110,2,100,2,125,5,116,3,100,3,124,5,155,0,100,4, - 116,4,124,4,131,1,106,2,155,0,157,4,131,1,130,1, - 124,4,100,5,107,2,114,53,124,3,115,52,116,5,124,0, - 100,6,131,2,114,52,116,6,124,0,124,0,106,7,124,2, - 100,7,100,8,141,4,1,0,113,2,116,5,124,0,124,4, - 131,2,115,104,100,9,160,8,124,0,106,2,124,4,161,2, - 125,6,9,0,116,9,124,2,124,6,131,2,1,0,113,2, - 35,0,4,0,116,10,121,107,1,0,125,7,1,0,124,7, - 106,11,124,6,107,2,114,98,116,12,106,13,160,14,124,6, - 116,15,161,2,100,10,117,1,114,98,89,0,100,10,125,7, - 126,7,113,2,130,0,100,10,125,7,126,7,119,1,37,0, - 113,2,124,0,83,0,119,0,41,11,122,238,70,105,103,117, - 114,101,32,111,117,116,32,119,104,97,116,32,95,95,105,109, - 112,111,114,116,95,95,32,115,104,111,117,108,100,32,114,101, - 116,117,114,110,46,10,10,32,32,32,32,84,104,101,32,105, - 109,112,111,114,116,95,32,112,97,114,97,109,101,116,101,114, - 32,105,115,32,97,32,99,97,108,108,97,98,108,101,32,119, - 104,105,99,104,32,116,97,107,101,115,32,116,104,101,32,110, - 97,109,101,32,111,102,32,109,111,100,117,108,101,32,116,111, - 10,32,32,32,32,105,109,112,111,114,116,46,32,73,116,32, - 105,115,32,114,101,113,117,105,114,101,100,32,116,111,32,100, - 101,99,111,117,112,108,101,32,116,104,101,32,102,117,110,99, - 116,105,111,110,32,102,114,111,109,32,97,115,115,117,109,105, - 110,103,32,105,109,112,111,114,116,108,105,98,39,115,10,32, - 32,32,32,105,109,112,111,114,116,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,105,115,32,100,101,115,105, - 114,101,100,46,10,10,32,32,32,32,122,8,46,95,95,97, - 108,108,95,95,122,13,96,96,102,114,111,109,32,108,105,115, - 116,39,39,122,8,73,116,101,109,32,105,110,32,122,18,32, - 109,117,115,116,32,98,101,32,115,116,114,44,32,110,111,116, - 32,250,1,42,218,7,95,95,97,108,108,95,95,84,114,230, - 0,0,0,114,206,0,0,0,78,41,16,114,216,0,0,0, - 114,217,0,0,0,114,8,0,0,0,114,218,0,0,0,114, - 3,0,0,0,114,10,0,0,0,218,16,95,104,97,110,100, - 108,101,95,102,114,111,109,108,105,115,116,114,233,0,0,0, - 114,51,0,0,0,114,75,0,0,0,114,224,0,0,0,114, - 20,0,0,0,114,18,0,0,0,114,105,0,0,0,114,39, - 0,0,0,114,227,0,0,0,41,8,114,110,0,0,0,218, - 8,102,114,111,109,108,105,115,116,114,225,0,0,0,114,231, - 0,0,0,218,1,120,90,5,119,104,101,114,101,90,9,102, - 114,111,109,95,110,97,109,101,90,3,101,120,99,32,32,32, - 32,32,32,32,32,114,5,0,0,0,114,234,0,0,0,29, - 4,0,0,115,58,0,0,0,8,10,10,1,4,1,12,1, - 4,2,10,1,8,1,8,255,8,2,14,1,10,1,2,1, - 6,255,2,128,10,2,14,1,2,1,12,1,2,128,12,1, - 10,4,16,1,2,255,10,2,2,1,10,128,2,245,4,12, - 2,248,115,36,0,0,0,193,2,5,65,8,2,193,8,7, - 65,39,9,193,15,14,65,35,9,193,34,1,65,35,9,193, - 35,4,65,39,9,193,43,1,65,39,9,114,234,0,0,0, - 99,1,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,67,0,0,0,115,146,0,0,0,124,0,160,0,100,1, - 161,1,125,1,124,0,160,0,100,2,161,1,125,2,124,1, - 100,3,117,1,114,41,124,2,100,3,117,1,114,39,124,1, - 124,2,106,1,107,3,114,39,116,2,160,3,100,4,124,1, - 155,2,100,5,124,2,106,1,155,2,100,6,157,5,116,4, - 100,7,100,8,166,3,1,0,124,1,83,0,124,2,100,3, - 117,1,114,48,124,2,106,1,83,0,116,2,160,3,100,9, - 116,4,100,7,100,8,166,3,1,0,124,0,100,10,25,0, - 125,1,100,11,124,0,118,1,114,71,124,1,160,5,100,12, - 161,1,100,13,25,0,125,1,124,1,83,0,41,14,122,167, - 67,97,108,99,117,108,97,116,101,32,119,104,97,116,32,95, - 95,112,97,99,107,97,103,101,95,95,32,115,104,111,117,108, - 100,32,98,101,46,10,10,32,32,32,32,95,95,112,97,99, - 107,97,103,101,95,95,32,105,115,32,110,111,116,32,103,117, - 97,114,97,110,116,101,101,100,32,116,111,32,98,101,32,100, - 101,102,105,110,101,100,32,111,114,32,99,111,117,108,100,32, - 98,101,32,115,101,116,32,116,111,32,78,111,110,101,10,32, - 32,32,32,116,111,32,114,101,112,114,101,115,101,110,116,32, - 116,104,97,116,32,105,116,115,32,112,114,111,112,101,114,32, - 118,97,108,117,101,32,105,115,32,117,110,107,110,111,119,110, - 46,10,10,32,32,32,32,114,158,0,0,0,114,113,0,0, - 0,78,122,32,95,95,112,97,99,107,97,103,101,95,95,32, - 33,61,32,95,95,115,112,101,99,95,95,46,112,97,114,101, - 110,116,32,40,122,4,32,33,61,32,250,1,41,233,3,0, - 0,0,41,1,90,10,115,116,97,99,107,108,101,118,101,108, - 122,89,99,97,110,39,116,32,114,101,115,111,108,118,101,32, - 112,97,99,107,97,103,101,32,102,114,111,109,32,95,95,115, - 112,101,99,95,95,32,111,114,32,95,95,112,97,99,107,97, - 103,101,95,95,44,32,102,97,108,108,105,110,103,32,98,97, - 99,107,32,111,110,32,95,95,110,97,109,101,95,95,32,97, - 110,100,32,95,95,112,97,116,104,95,95,114,8,0,0,0, - 114,154,0,0,0,114,141,0,0,0,114,26,0,0,0,41, - 6,114,39,0,0,0,114,143,0,0,0,114,101,0,0,0, - 114,102,0,0,0,114,169,0,0,0,114,142,0,0,0,41, - 3,218,7,103,108,111,98,97,108,115,114,209,0,0,0,114, - 109,0,0,0,32,32,32,114,5,0,0,0,218,17,95,99, - 97,108,99,95,95,95,112,97,99,107,97,103,101,95,95,66, - 4,0,0,115,42,0,0,0,10,7,10,1,8,1,18,1, - 6,1,2,1,4,255,4,1,6,255,4,2,6,254,4,3, - 8,1,6,1,6,2,4,2,6,254,8,3,8,1,14,1, - 4,1,114,17,0,0,0,114,240,0,0,0,114,23,0,0, - 0,99,5,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,67,0,0,0,115,174,0,0,0,124,4,100,1,107, - 2,114,9,116,0,124,0,131,1,125,5,110,18,124,1,100, - 2,117,1,114,15,124,1,110,1,105,0,125,6,116,1,124, - 6,131,1,125,7,116,0,124,0,124,7,124,4,131,3,125, - 5,124,3,115,74,124,4,100,1,107,2,114,42,116,0,124, - 0,160,2,100,3,161,1,100,1,25,0,131,1,83,0,124, - 0,115,46,124,5,83,0,116,3,124,0,131,1,116,3,124, - 0,160,2,100,3,161,1,100,1,25,0,131,1,24,0,125, - 8,116,4,106,5,124,5,106,6,100,2,116,3,124,5,106, - 6,131,1,124,8,24,0,133,2,25,0,25,0,83,0,116, - 7,124,5,100,4,131,2,114,85,116,8,124,5,124,3,116, - 0,131,3,83,0,124,5,83,0,41,5,97,215,1,0,0, - 73,109,112,111,114,116,32,97,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,84,104,101,32,39,103,108,111,98,97, - 108,115,39,32,97,114,103,117,109,101,110,116,32,105,115,32, - 117,115,101,100,32,116,111,32,105,110,102,101,114,32,119,104, - 101,114,101,32,116,104,101,32,105,109,112,111,114,116,32,105, - 115,32,111,99,99,117,114,114,105,110,103,32,102,114,111,109, - 10,32,32,32,32,116,111,32,104,97,110,100,108,101,32,114, - 101,108,97,116,105,118,101,32,105,109,112,111,114,116,115,46, - 32,84,104,101,32,39,108,111,99,97,108,115,39,32,97,114, - 103,117,109,101,110,116,32,105,115,32,105,103,110,111,114,101, - 100,46,32,84,104,101,10,32,32,32,32,39,102,114,111,109, - 108,105,115,116,39,32,97,114,103,117,109,101,110,116,32,115, - 112,101,99,105,102,105,101,115,32,119,104,97,116,32,115,104, - 111,117,108,100,32,101,120,105,115,116,32,97,115,32,97,116, - 116,114,105,98,117,116,101,115,32,111,110,32,116,104,101,32, - 109,111,100,117,108,101,10,32,32,32,32,98,101,105,110,103, - 32,105,109,112,111,114,116,101,100,32,40,101,46,103,46,32, - 96,96,102,114,111,109,32,109,111,100,117,108,101,32,105,109, - 112,111,114,116,32,60,102,114,111,109,108,105,115,116,62,96, - 96,41,46,32,32,84,104,101,32,39,108,101,118,101,108,39, - 10,32,32,32,32,97,114,103,117,109,101,110,116,32,114,101, - 112,114,101,115,101,110,116,115,32,116,104,101,32,112,97,99, - 107,97,103,101,32,108,111,99,97,116,105,111,110,32,116,111, - 32,105,109,112,111,114,116,32,102,114,111,109,32,105,110,32, - 97,32,114,101,108,97,116,105,118,101,10,32,32,32,32,105, - 109,112,111,114,116,32,40,101,46,103,46,32,96,96,102,114, - 111,109,32,46,46,112,107,103,32,105,109,112,111,114,116,32, - 109,111,100,96,96,32,119,111,117,108,100,32,104,97,118,101, - 32,97,32,39,108,101,118,101,108,39,32,111,102,32,50,41, - 46,10,10,32,32,32,32,114,26,0,0,0,78,114,141,0, - 0,0,114,154,0,0,0,41,9,114,229,0,0,0,114,240, - 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,208, - 0,0,0,114,18,0,0,0,114,105,0,0,0,114,8,0, - 0,0,114,10,0,0,0,114,234,0,0,0,41,9,114,20, - 0,0,0,114,239,0,0,0,218,6,108,111,99,97,108,115, - 114,235,0,0,0,114,210,0,0,0,114,110,0,0,0,90, - 8,103,108,111,98,97,108,115,95,114,209,0,0,0,90,7, - 99,117,116,95,111,102,102,32,32,32,32,32,32,32,32,32, - 114,5,0,0,0,218,10,95,95,105,109,112,111,114,116,95, - 95,93,4,0,0,115,30,0,0,0,8,11,10,1,16,2, - 8,1,12,1,4,1,8,3,18,1,4,1,4,1,26,4, - 30,3,10,1,12,1,4,2,114,17,0,0,0,114,243,0, - 0,0,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,67,0,0,0,115,38,0,0,0,116,0,160,1, - 124,0,161,1,125,1,124,1,100,0,117,0,114,15,116,2, - 100,1,124,0,23,0,131,1,130,1,116,3,124,1,131,1, - 83,0,41,2,78,122,25,110,111,32,98,117,105,108,116,45, - 105,110,32,109,111,100,117,108,101,32,110,97,109,101,100,32, - 41,4,114,175,0,0,0,114,183,0,0,0,114,88,0,0, - 0,114,173,0,0,0,41,2,114,20,0,0,0,114,109,0, - 0,0,32,32,114,5,0,0,0,218,18,95,98,117,105,108, - 116,105,110,95,102,114,111,109,95,110,97,109,101,130,4,0, - 0,115,8,0,0,0,10,1,8,1,12,1,8,1,114,17, - 0,0,0,114,244,0,0,0,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,67,0,0,0,115,166,0, - 0,0,124,1,97,0,124,0,97,1,116,2,116,1,131,1, - 125,2,116,1,106,3,160,4,161,0,68,0,93,36,92,2, - 125,3,125,4,116,5,124,4,124,2,131,2,114,49,124,3, - 116,1,106,6,118,0,114,30,116,7,125,5,110,9,116,0, - 160,8,124,3,161,1,114,38,116,9,125,5,110,1,113,13, - 116,10,124,4,124,5,131,2,125,6,116,11,124,6,124,4, - 131,2,1,0,113,13,116,1,106,3,116,12,25,0,125,7, - 100,1,68,0,93,23,125,8,124,8,116,1,106,3,118,1, - 114,69,116,13,124,8,131,1,125,9,110,5,116,1,106,3, - 124,8,25,0,125,9,116,14,124,7,124,8,124,9,131,3, - 1,0,113,57,100,2,83,0,41,3,122,250,83,101,116,117, - 112,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, - 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,32, - 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, - 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116, - 104,101,109,10,32,32,32,32,105,110,116,111,32,116,104,101, - 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, - 101,46,10,10,32,32,32,32,65,115,32,115,121,115,32,105, - 115,32,110,101,101,100,101,100,32,102,111,114,32,115,121,115, - 46,109,111,100,117,108,101,115,32,97,99,99,101,115,115,32, - 97,110,100,32,95,105,109,112,32,105,115,32,110,101,101,100, - 101,100,32,116,111,32,108,111,97,100,32,98,117,105,108,116, - 45,105,110,10,32,32,32,32,109,111,100,117,108,101,115,44, - 32,116,104,111,115,101,32,116,119,111,32,109,111,100,117,108, - 101,115,32,109,117,115,116,32,98,101,32,101,120,112,108,105, - 99,105,116,108,121,32,112,97,115,115,101,100,32,105,110,46, - 10,10,32,32,32,32,41,3,114,27,0,0,0,114,101,0, - 0,0,114,72,0,0,0,78,41,15,114,65,0,0,0,114, - 18,0,0,0,114,3,0,0,0,114,105,0,0,0,218,5, - 105,116,101,109,115,114,216,0,0,0,114,87,0,0,0,114, - 175,0,0,0,114,98,0,0,0,114,193,0,0,0,114,155, - 0,0,0,114,161,0,0,0,114,8,0,0,0,114,244,0, - 0,0,114,11,0,0,0,41,10,218,10,115,121,115,95,109, - 111,100,117,108,101,218,11,95,105,109,112,95,109,111,100,117, - 108,101,90,11,109,111,100,117,108,101,95,116,121,112,101,114, - 20,0,0,0,114,110,0,0,0,114,122,0,0,0,114,109, - 0,0,0,90,11,115,101,108,102,95,109,111,100,117,108,101, - 90,12,98,117,105,108,116,105,110,95,110,97,109,101,90,14, - 98,117,105,108,116,105,110,95,109,111,100,117,108,101,32,32, - 32,32,32,32,32,32,32,32,114,5,0,0,0,218,6,95, - 115,101,116,117,112,137,4,0,0,115,40,0,0,0,4,9, - 4,1,8,3,18,1,10,1,10,1,6,1,10,1,6,1, - 2,2,10,1,10,1,2,128,10,3,8,1,10,1,10,1, - 10,2,14,1,4,251,114,17,0,0,0,114,248,0,0,0, - 99,2,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,67,0,0,0,115,38,0,0,0,116,0,124,0,124,1, - 131,2,1,0,116,1,106,2,160,3,116,4,161,1,1,0, - 116,1,106,2,160,3,116,5,161,1,1,0,100,1,83,0, - 41,2,122,48,73,110,115,116,97,108,108,32,105,109,112,111, - 114,116,101,114,115,32,102,111,114,32,98,117,105,108,116,105, - 110,32,97,110,100,32,102,114,111,122,101,110,32,109,111,100, - 117,108,101,115,78,41,6,114,248,0,0,0,114,18,0,0, - 0,114,214,0,0,0,114,132,0,0,0,114,175,0,0,0, - 114,193,0,0,0,41,2,114,246,0,0,0,114,247,0,0, - 0,32,32,114,5,0,0,0,218,8,95,105,110,115,116,97, - 108,108,172,4,0,0,115,6,0,0,0,10,2,12,2,16, - 1,114,17,0,0,0,114,249,0,0,0,99,0,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,67,0,0,0, - 115,32,0,0,0,100,1,100,2,108,0,125,0,124,0,97, - 1,124,0,160,2,116,3,106,4,116,5,25,0,161,1,1, - 0,100,2,83,0,41,3,122,57,73,110,115,116,97,108,108, - 32,105,109,112,111,114,116,101,114,115,32,116,104,97,116,32, - 114,101,113,117,105,114,101,32,101,120,116,101,114,110,97,108, - 32,102,105,108,101,115,121,115,116,101,109,32,97,99,99,101, - 115,115,114,26,0,0,0,78,41,6,218,26,95,102,114,111, - 122,101,110,95,105,109,112,111,114,116,108,105,98,95,101,120, - 116,101,114,110,97,108,114,139,0,0,0,114,249,0,0,0, - 114,18,0,0,0,114,105,0,0,0,114,8,0,0,0,41, - 1,114,250,0,0,0,32,114,5,0,0,0,218,27,95,105, - 110,115,116,97,108,108,95,101,120,116,101,114,110,97,108,95, - 105,109,112,111,114,116,101,114,115,180,4,0,0,115,6,0, - 0,0,8,3,4,1,20,1,114,17,0,0,0,114,251,0, - 0,0,114,190,0,0,0,114,0,0,0,0,114,25,0,0, - 0,41,4,78,78,114,23,0,0,0,114,26,0,0,0,41, - 54,114,9,0,0,0,114,6,0,0,0,114,27,0,0,0, - 114,101,0,0,0,114,72,0,0,0,114,139,0,0,0,114, - 16,0,0,0,114,21,0,0,0,114,67,0,0,0,114,38, - 0,0,0,114,48,0,0,0,114,22,0,0,0,114,24,0, - 0,0,114,56,0,0,0,114,58,0,0,0,114,61,0,0, - 0,114,73,0,0,0,114,75,0,0,0,114,84,0,0,0, - 114,95,0,0,0,114,100,0,0,0,114,111,0,0,0,114, - 124,0,0,0,114,125,0,0,0,114,104,0,0,0,114,155, - 0,0,0,114,161,0,0,0,114,165,0,0,0,114,119,0, - 0,0,114,106,0,0,0,114,172,0,0,0,114,173,0,0, - 0,114,107,0,0,0,114,175,0,0,0,114,193,0,0,0, - 114,200,0,0,0,114,211,0,0,0,114,213,0,0,0,114, - 215,0,0,0,114,221,0,0,0,90,15,95,69,82,82,95, - 77,83,71,95,80,82,69,70,73,88,114,223,0,0,0,114, - 226,0,0,0,218,6,111,98,106,101,99,116,114,227,0,0, - 0,114,228,0,0,0,114,229,0,0,0,114,234,0,0,0, - 114,240,0,0,0,114,243,0,0,0,114,244,0,0,0,114, - 248,0,0,0,114,249,0,0,0,114,251,0,0,0,114,23, - 0,0,0,114,5,0,0,0,218,8,60,109,111,100,117,108, - 101,62,1,0,0,0,115,104,0,0,0,4,0,8,22,4, - 9,4,1,4,1,4,3,8,3,8,8,4,8,4,2,16, - 3,14,4,14,77,14,21,8,16,8,37,8,17,14,11,8, - 8,8,11,8,12,8,19,14,26,16,101,10,26,14,45,8, - 72,8,17,8,17,8,30,8,36,8,45,14,15,14,80,14, - 85,8,13,8,9,10,10,8,47,4,16,8,1,8,2,6, - 32,8,3,10,16,14,15,8,37,10,27,8,37,8,7,8, - 35,12,8,114,17,0,0,0, + 0,0,243,10,0,0,0,116,0,160,1,124,1,161,1,83, + 0,41,2,122,45,82,101,116,117,114,110,32,116,104,101,32, + 99,111,100,101,32,111,98,106,101,99,116,32,102,111,114,32, + 116,104,101,32,102,114,111,122,101,110,32,109,111,100,117,108, + 101,46,78,41,2,114,65,0,0,0,114,195,0,0,0,114, + 186,0,0,0,32,32,114,5,0,0,0,114,187,0,0,0, + 100,3,0,0,243,2,0,0,0,10,4,114,17,0,0,0, + 122,23,70,114,111,122,101,110,73,109,112,111,114,116,101,114, + 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,67,0,0,0,114,185, + 0,0,0,41,2,122,54,82,101,116,117,114,110,32,78,111, + 110,101,32,97,115,32,102,114,111,122,101,110,32,109,111,100, + 117,108,101,115,32,100,111,32,110,111,116,32,104,97,118,101, + 32,115,111,117,114,99,101,32,99,111,100,101,46,78,114,23, + 0,0,0,114,186,0,0,0,32,32,114,5,0,0,0,114, + 189,0,0,0,106,3,0,0,114,188,0,0,0,114,17,0, + 0,0,122,25,70,114,111,122,101,110,73,109,112,111,114,116, + 101,114,46,103,101,116,95,115,111,117,114,99,101,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,67,0, + 0,0,114,198,0,0,0,41,2,122,46,82,101,116,117,114, + 110,32,84,114,117,101,32,105,102,32,116,104,101,32,102,114, + 111,122,101,110,32,109,111,100,117,108,101,32,105,115,32,97, + 32,112,97,99,107,97,103,101,46,78,41,2,114,65,0,0, + 0,90,17,105,115,95,102,114,111,122,101,110,95,112,97,99, + 107,97,103,101,114,186,0,0,0,32,32,114,5,0,0,0, + 114,128,0,0,0,112,3,0,0,114,199,0,0,0,114,17, + 0,0,0,122,25,70,114,111,122,101,110,73,109,112,111,114, + 116,101,114,46,105,115,95,112,97,99,107,97,103,101,114,190, + 0,0,0,114,0,0,0,0,41,17,114,8,0,0,0,114, + 7,0,0,0,114,1,0,0,0,114,9,0,0,0,114,151, + 0,0,0,114,191,0,0,0,114,114,0,0,0,114,192,0, + 0,0,114,183,0,0,0,114,184,0,0,0,114,162,0,0, + 0,114,163,0,0,0,114,170,0,0,0,114,100,0,0,0, + 114,187,0,0,0,114,189,0,0,0,114,128,0,0,0,114, + 23,0,0,0,114,5,0,0,0,114,193,0,0,0,36,3, + 0,0,115,48,0,0,0,8,0,4,2,4,7,2,2,10, + 1,2,10,12,1,2,6,12,1,2,11,10,1,2,3,10, + 1,2,8,10,1,2,9,2,1,12,1,2,4,2,1,12, + 1,2,4,2,1,16,1,114,17,0,0,0,114,193,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,2,0, + 0,0,64,0,0,0,115,32,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,100,6,83,0,41,7,218,18,95, + 73,109,112,111,114,116,76,111,99,107,67,111,110,116,101,120, + 116,122,36,67,111,110,116,101,120,116,32,109,97,110,97,103, + 101,114,32,102,111,114,32,116,104,101,32,105,109,112,111,114, + 116,32,108,111,99,107,46,99,1,0,0,0,0,0,0,0, + 0,0,0,0,2,0,0,0,67,0,0,0,243,12,0,0, + 0,116,0,160,1,161,0,1,0,100,1,83,0,41,2,122, + 24,65,99,113,117,105,114,101,32,116,104,101,32,105,109,112, + 111,114,116,32,108,111,99,107,46,78,41,2,114,65,0,0, + 0,114,66,0,0,0,114,53,0,0,0,32,114,5,0,0, + 0,114,62,0,0,0,125,3,0,0,243,2,0,0,0,12, + 2,114,17,0,0,0,122,28,95,73,109,112,111,114,116,76, + 111,99,107,67,111,110,116,101,120,116,46,95,95,101,110,116, + 101,114,95,95,99,4,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,67,0,0,0,114,201,0,0,0,41,2, + 122,60,82,101,108,101,97,115,101,32,116,104,101,32,105,109, + 112,111,114,116,32,108,111,99,107,32,114,101,103,97,114,100, + 108,101,115,115,32,111,102,32,97,110,121,32,114,97,105,115, + 101,100,32,101,120,99,101,112,116,105,111,110,115,46,78,41, + 2,114,65,0,0,0,114,68,0,0,0,41,4,114,34,0, + 0,0,218,8,101,120,99,95,116,121,112,101,218,9,101,120, + 99,95,118,97,108,117,101,218,13,101,120,99,95,116,114,97, + 99,101,98,97,99,107,32,32,32,32,114,5,0,0,0,114, + 64,0,0,0,129,3,0,0,114,202,0,0,0,114,17,0, + 0,0,122,27,95,73,109,112,111,114,116,76,111,99,107,67, + 111,110,116,101,120,116,46,95,95,101,120,105,116,95,95,78, + 41,6,114,8,0,0,0,114,7,0,0,0,114,1,0,0, + 0,114,9,0,0,0,114,62,0,0,0,114,64,0,0,0, + 114,23,0,0,0,114,5,0,0,0,114,200,0,0,0,121, + 3,0,0,115,8,0,0,0,8,0,4,2,8,2,12,4, + 114,17,0,0,0,114,200,0,0,0,99,3,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,67,0,0,0,115, + 64,0,0,0,124,1,160,0,100,1,124,2,100,2,24,0, + 161,2,125,3,116,1,124,3,131,1,124,2,107,0,114,18, + 116,2,100,3,131,1,130,1,124,3,100,4,25,0,125,4, + 124,0,114,30,100,5,160,3,124,4,124,0,161,2,83,0, + 124,4,83,0,41,7,122,50,82,101,115,111,108,118,101,32, + 97,32,114,101,108,97,116,105,118,101,32,109,111,100,117,108, + 101,32,110,97,109,101,32,116,111,32,97,110,32,97,98,115, + 111,108,117,116,101,32,111,110,101,46,114,141,0,0,0,114, + 43,0,0,0,122,50,97,116,116,101,109,112,116,101,100,32, + 114,101,108,97,116,105,118,101,32,105,109,112,111,114,116,32, + 98,101,121,111,110,100,32,116,111,112,45,108,101,118,101,108, + 32,112,97,99,107,97,103,101,114,26,0,0,0,250,5,123, + 125,46,123,125,78,41,4,218,6,114,115,112,108,105,116,218, + 3,108,101,110,114,88,0,0,0,114,51,0,0,0,41,5, + 114,20,0,0,0,218,7,112,97,99,107,97,103,101,218,5, + 108,101,118,101,108,90,4,98,105,116,115,90,4,98,97,115, + 101,32,32,32,32,32,114,5,0,0,0,218,13,95,114,101, + 115,111,108,118,101,95,110,97,109,101,134,3,0,0,115,10, + 0,0,0,16,2,12,1,8,1,8,1,20,1,114,17,0, + 0,0,114,211,0,0,0,99,3,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,67,0,0,0,115,60,0,0, + 0,116,0,124,0,131,1,155,0,100,1,157,2,125,3,116, + 1,160,2,124,3,116,3,161,2,1,0,124,0,160,4,124, + 1,124,2,161,2,125,4,124,4,100,0,117,0,114,25,100, + 0,83,0,116,5,124,1,124,4,131,2,83,0,41,2,78, + 122,53,46,102,105,110,100,95,115,112,101,99,40,41,32,110, + 111,116,32,102,111,117,110,100,59,32,102,97,108,108,105,110, + 103,32,98,97,99,107,32,116,111,32,102,105,110,100,95,109, + 111,100,117,108,101,40,41,41,6,114,6,0,0,0,114,101, + 0,0,0,114,102,0,0,0,114,169,0,0,0,114,184,0, + 0,0,114,104,0,0,0,41,5,218,6,102,105,110,100,101, + 114,114,20,0,0,0,114,181,0,0,0,114,108,0,0,0, + 114,122,0,0,0,32,32,32,32,32,114,5,0,0,0,218, + 17,95,102,105,110,100,95,115,112,101,99,95,108,101,103,97, + 99,121,143,3,0,0,115,12,0,0,0,14,1,12,2,12, + 1,8,1,4,1,10,1,114,17,0,0,0,114,213,0,0, + 0,99,3,0,0,0,0,0,0,0,0,0,0,0,10,0, + 0,0,67,0,0,0,115,30,1,0,0,116,0,106,1,125, + 3,124,3,100,1,117,0,114,11,116,2,100,2,131,1,130, + 1,124,3,115,19,116,3,160,4,100,3,116,5,161,2,1, + 0,124,0,116,0,106,6,118,0,125,4,124,3,68,0,93, + 112,125,5,116,7,131,0,53,0,1,0,9,0,124,5,106, + 8,125,6,110,27,35,0,4,0,116,9,121,142,1,0,1, + 0,1,0,116,10,124,5,124,0,124,1,131,3,125,7,124, + 7,100,1,117,0,114,61,89,0,100,1,4,0,4,0,131, + 3,1,0,113,26,89,0,110,7,37,0,124,6,124,0,124, + 1,124,2,131,3,125,7,100,1,4,0,4,0,131,3,1, + 0,110,11,35,0,49,0,115,81,119,4,37,0,1,0,1, + 0,1,0,89,0,1,0,1,0,124,7,100,1,117,1,114, + 138,124,4,115,134,124,0,116,0,106,6,118,0,114,134,116, + 0,106,6,124,0,25,0,125,8,9,0,124,8,106,11,125, + 9,110,14,35,0,4,0,116,9,121,141,1,0,1,0,1, + 0,124,7,6,0,89,0,2,0,1,0,83,0,37,0,124, + 9,100,1,117,0,114,130,124,7,2,0,1,0,83,0,124, + 9,2,0,1,0,83,0,124,7,2,0,1,0,83,0,113, + 26,100,1,83,0,119,0,119,0,41,4,122,21,70,105,110, + 100,32,97,32,109,111,100,117,108,101,39,115,32,115,112,101, + 99,46,78,122,53,115,121,115,46,109,101,116,97,95,112,97, + 116,104,32,105,115,32,78,111,110,101,44,32,80,121,116,104, + 111,110,32,105,115,32,108,105,107,101,108,121,32,115,104,117, + 116,116,105,110,103,32,100,111,119,110,122,22,115,121,115,46, + 109,101,116,97,95,112,97,116,104,32,105,115,32,101,109,112, + 116,121,41,12,114,18,0,0,0,218,9,109,101,116,97,95, + 112,97,116,104,114,88,0,0,0,114,101,0,0,0,114,102, + 0,0,0,114,169,0,0,0,114,105,0,0,0,114,200,0, + 0,0,114,183,0,0,0,114,2,0,0,0,114,213,0,0, + 0,114,113,0,0,0,41,10,114,20,0,0,0,114,181,0, + 0,0,114,182,0,0,0,114,214,0,0,0,90,9,105,115, + 95,114,101,108,111,97,100,114,212,0,0,0,114,183,0,0, + 0,114,109,0,0,0,114,110,0,0,0,114,113,0,0,0, + 32,32,32,32,32,32,32,32,32,32,114,5,0,0,0,218, + 10,95,102,105,110,100,95,115,112,101,99,153,3,0,0,115, + 76,0,0,0,6,2,8,1,8,2,4,3,12,1,10,5, + 8,1,8,1,2,1,8,1,2,128,12,1,12,1,8,1, + 2,1,12,250,4,5,2,128,12,3,12,248,22,128,8,9, + 14,2,10,1,2,1,8,1,2,128,12,1,12,4,2,128, + 8,2,8,1,8,2,8,2,2,239,4,19,2,243,2,244, + 115,63,0,0,0,159,1,65,12,5,161,3,37,4,164,1, + 65,12,5,165,17,63,11,182,1,65,12,5,189,9,65,12, + 5,193,12,4,65,16,13,193,17,3,65,16,13,193,40,3, + 65,44,2,193,44,9,65,57,9,194,13,1,65,57,9,194, + 14,1,63,11,114,215,0,0,0,99,3,0,0,0,0,0, + 0,0,0,0,0,0,5,0,0,0,67,0,0,0,115,110, + 0,0,0,116,0,124,0,116,1,131,2,115,14,116,2,100, + 1,160,3,116,4,124,0,131,1,161,1,131,1,130,1,124, + 2,100,2,107,0,114,22,116,5,100,3,131,1,130,1,124, + 2,100,2,107,4,114,41,116,0,124,1,116,1,131,2,115, + 35,116,2,100,4,131,1,130,1,124,1,115,41,116,6,100, + 5,131,1,130,1,124,0,115,53,124,2,100,2,107,2,114, + 51,116,5,100,6,131,1,130,1,100,7,83,0,100,7,83, + 0,41,8,122,28,86,101,114,105,102,121,32,97,114,103,117, + 109,101,110,116,115,32,97,114,101,32,34,115,97,110,101,34, + 46,122,31,109,111,100,117,108,101,32,110,97,109,101,32,109, + 117,115,116,32,98,101,32,115,116,114,44,32,110,111,116,32, + 123,125,114,26,0,0,0,122,18,108,101,118,101,108,32,109, + 117,115,116,32,98,101,32,62,61,32,48,122,31,95,95,112, + 97,99,107,97,103,101,95,95,32,110,111,116,32,115,101,116, + 32,116,111,32,97,32,115,116,114,105,110,103,122,54,97,116, + 116,101,109,112,116,101,100,32,114,101,108,97,116,105,118,101, + 32,105,109,112,111,114,116,32,119,105,116,104,32,110,111,32, + 107,110,111,119,110,32,112,97,114,101,110,116,32,112,97,99, + 107,97,103,101,122,17,69,109,112,116,121,32,109,111,100,117, + 108,101,32,110,97,109,101,78,41,7,218,10,105,115,105,110, + 115,116,97,110,99,101,218,3,115,116,114,218,9,84,121,112, + 101,69,114,114,111,114,114,51,0,0,0,114,3,0,0,0, + 218,10,86,97,108,117,101,69,114,114,111,114,114,88,0,0, + 0,169,3,114,20,0,0,0,114,209,0,0,0,114,210,0, + 0,0,32,32,32,114,5,0,0,0,218,13,95,115,97,110, + 105,116,121,95,99,104,101,99,107,200,3,0,0,115,24,0, + 0,0,10,2,18,1,8,1,8,1,8,1,10,1,8,1, + 4,1,8,1,12,2,8,1,8,255,114,17,0,0,0,114, + 221,0,0,0,122,16,78,111,32,109,111,100,117,108,101,32, + 110,97,109,101,100,32,122,4,123,33,114,125,99,2,0,0, + 0,0,0,0,0,0,0,0,0,8,0,0,0,67,0,0, + 0,115,20,1,0,0,100,0,125,2,124,0,160,0,100,1, + 161,1,100,2,25,0,125,3,124,3,114,64,124,3,116,1, + 106,2,118,1,114,21,116,3,124,1,124,3,131,2,1,0, + 124,0,116,1,106,2,118,0,114,31,116,1,106,2,124,0, + 25,0,83,0,116,1,106,2,124,3,25,0,125,4,9,0, + 124,4,106,4,125,2,110,23,35,0,4,0,116,5,121,137, + 1,0,1,0,1,0,116,6,100,3,23,0,160,7,124,0, + 124,3,161,2,125,5,116,8,124,5,124,0,100,4,141,2, + 100,0,130,2,37,0,116,9,124,0,124,2,131,2,125,6, + 124,6,100,0,117,0,114,82,116,8,116,6,160,7,124,0, + 161,1,124,0,100,4,141,2,130,1,116,10,124,6,131,1, + 125,7,124,3,114,134,116,1,106,2,124,3,25,0,125,4, + 124,0,160,0,100,1,161,1,100,5,25,0,125,8,9,0, + 116,11,124,4,124,8,124,7,131,3,1,0,124,7,83,0, + 35,0,4,0,116,5,121,136,1,0,1,0,1,0,100,6, + 124,3,155,2,100,7,124,8,155,2,157,4,125,5,116,12, + 160,13,124,5,116,14,161,2,1,0,89,0,124,7,83,0, + 37,0,124,7,83,0,119,0,119,0,41,8,78,114,141,0, + 0,0,114,26,0,0,0,122,23,59,32,123,33,114,125,32, + 105,115,32,110,111,116,32,97,32,112,97,99,107,97,103,101, + 114,19,0,0,0,233,2,0,0,0,122,27,67,97,110,110, + 111,116,32,115,101,116,32,97,110,32,97,116,116,114,105,98, + 117,116,101,32,111,110,32,122,18,32,102,111,114,32,99,104, + 105,108,100,32,109,111,100,117,108,101,32,41,15,114,142,0, + 0,0,114,18,0,0,0,114,105,0,0,0,114,75,0,0, + 0,114,154,0,0,0,114,2,0,0,0,218,8,95,69,82, + 82,95,77,83,71,114,51,0,0,0,218,19,77,111,100,117, + 108,101,78,111,116,70,111,117,110,100,69,114,114,111,114,114, + 215,0,0,0,114,173,0,0,0,114,11,0,0,0,114,101, + 0,0,0,114,102,0,0,0,114,169,0,0,0,41,9,114, + 20,0,0,0,218,7,105,109,112,111,114,116,95,114,181,0, + 0,0,114,143,0,0,0,90,13,112,97,114,101,110,116,95, + 109,111,100,117,108,101,114,108,0,0,0,114,109,0,0,0, + 114,110,0,0,0,90,5,99,104,105,108,100,32,32,32,32, + 32,32,32,32,32,114,5,0,0,0,218,23,95,102,105,110, + 100,95,97,110,100,95,108,111,97,100,95,117,110,108,111,99, + 107,101,100,219,3,0,0,115,68,0,0,0,4,1,14,1, + 4,1,10,1,10,1,10,2,10,1,10,1,2,1,8,1, + 2,128,12,1,16,1,14,1,2,128,10,1,8,1,18,1, + 8,2,4,1,10,2,14,1,2,1,12,1,4,4,2,128, + 12,253,16,1,14,1,4,1,2,128,4,0,2,253,2,242, + 115,31,0,0,0,165,3,41,0,169,22,63,7,193,37,6, + 65,45,0,193,45,21,66,5,7,194,8,1,66,5,7,194, + 9,1,63,7,114,226,0,0,0,99,2,0,0,0,0,0, + 0,0,0,0,0,0,9,0,0,0,67,0,0,0,115,132, + 0,0,0,116,0,124,0,131,1,53,0,1,0,116,1,106, + 2,160,3,124,0,116,4,161,2,125,2,124,2,116,4,117, + 0,114,27,116,5,124,0,124,1,131,2,2,0,100,1,4, + 0,4,0,131,3,1,0,83,0,9,0,100,1,4,0,4, + 0,131,3,1,0,110,11,35,0,49,0,115,39,119,4,37, + 0,1,0,1,0,1,0,89,0,1,0,1,0,124,2,100, + 1,117,0,114,60,100,2,160,6,124,0,161,1,125,3,116, + 7,124,3,124,0,100,3,141,2,130,1,116,8,124,0,131, + 1,1,0,124,2,83,0,41,4,122,25,70,105,110,100,32, + 97,110,100,32,108,111,97,100,32,116,104,101,32,109,111,100, + 117,108,101,46,78,122,40,105,109,112,111,114,116,32,111,102, + 32,123,125,32,104,97,108,116,101,100,59,32,78,111,110,101, + 32,105,110,32,115,121,115,46,109,111,100,117,108,101,115,114, + 19,0,0,0,41,9,114,58,0,0,0,114,18,0,0,0, + 114,105,0,0,0,114,39,0,0,0,218,14,95,78,69,69, + 68,83,95,76,79,65,68,73,78,71,114,226,0,0,0,114, + 51,0,0,0,114,224,0,0,0,114,73,0,0,0,41,4, + 114,20,0,0,0,114,225,0,0,0,114,110,0,0,0,114, + 83,0,0,0,32,32,32,32,114,5,0,0,0,218,14,95, + 102,105,110,100,95,97,110,100,95,108,111,97,100,254,3,0, + 0,115,30,0,0,0,10,2,14,1,8,1,8,1,14,253, + 2,2,12,254,22,128,8,5,2,1,6,1,2,255,12,2, + 8,2,4,1,115,12,0,0,0,132,16,34,3,162,4,38, + 11,167,3,38,11,114,228,0,0,0,114,26,0,0,0,99, + 3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 67,0,0,0,115,42,0,0,0,116,0,124,0,124,1,124, + 2,131,3,1,0,124,2,100,1,107,4,114,16,116,1,124, + 0,124,1,124,2,131,3,125,0,116,2,124,0,116,3,131, + 2,83,0,41,3,97,50,1,0,0,73,109,112,111,114,116, + 32,97,110,100,32,114,101,116,117,114,110,32,116,104,101,32, + 109,111,100,117,108,101,32,98,97,115,101,100,32,111,110,32, + 105,116,115,32,110,97,109,101,44,32,116,104,101,32,112,97, + 99,107,97,103,101,32,116,104,101,32,99,97,108,108,32,105, + 115,10,32,32,32,32,98,101,105,110,103,32,109,97,100,101, + 32,102,114,111,109,44,32,97,110,100,32,116,104,101,32,108, + 101,118,101,108,32,97,100,106,117,115,116,109,101,110,116,46, + 10,10,32,32,32,32,84,104,105,115,32,102,117,110,99,116, + 105,111,110,32,114,101,112,114,101,115,101,110,116,115,32,116, + 104,101,32,103,114,101,97,116,101,115,116,32,99,111,109,109, + 111,110,32,100,101,110,111,109,105,110,97,116,111,114,32,111, + 102,32,102,117,110,99,116,105,111,110,97,108,105,116,121,10, + 32,32,32,32,98,101,116,119,101,101,110,32,105,109,112,111, + 114,116,95,109,111,100,117,108,101,32,97,110,100,32,95,95, + 105,109,112,111,114,116,95,95,46,32,84,104,105,115,32,105, + 110,99,108,117,100,101,115,32,115,101,116,116,105,110,103,32, + 95,95,112,97,99,107,97,103,101,95,95,32,105,102,10,32, + 32,32,32,116,104,101,32,108,111,97,100,101,114,32,100,105, + 100,32,110,111,116,46,10,10,32,32,32,32,114,26,0,0, + 0,78,41,4,114,221,0,0,0,114,211,0,0,0,114,228, + 0,0,0,218,11,95,103,99,100,95,105,109,112,111,114,116, + 114,220,0,0,0,32,32,32,114,5,0,0,0,114,229,0, + 0,0,14,4,0,0,115,8,0,0,0,12,9,8,1,12, + 1,10,1,114,17,0,0,0,114,229,0,0,0,169,1,218, + 9,114,101,99,117,114,115,105,118,101,99,3,0,0,0,0, + 0,0,0,1,0,0,0,9,0,0,0,67,0,0,0,115, + 216,0,0,0,124,1,68,0,93,102,125,4,116,0,124,4, + 116,1,131,2,115,32,124,3,114,17,124,0,106,2,100,1, + 23,0,125,5,110,2,100,2,125,5,116,3,100,3,124,5, + 155,0,100,4,116,4,124,4,131,1,106,2,155,0,157,4, + 131,1,130,1,124,4,100,5,107,2,114,53,124,3,115,52, + 116,5,124,0,100,6,131,2,114,52,116,6,124,0,124,0, + 106,7,124,2,100,7,100,8,141,4,1,0,113,2,116,5, + 124,0,124,4,131,2,115,104,100,9,160,8,124,0,106,2, + 124,4,161,2,125,6,9,0,116,9,124,2,124,6,131,2, + 1,0,113,2,35,0,4,0,116,10,121,107,1,0,125,7, + 1,0,124,7,106,11,124,6,107,2,114,98,116,12,106,13, + 160,14,124,6,116,15,161,2,100,10,117,1,114,98,89,0, + 100,10,125,7,126,7,113,2,130,0,100,10,125,7,126,7, + 119,1,37,0,113,2,124,0,83,0,119,0,41,11,122,238, + 70,105,103,117,114,101,32,111,117,116,32,119,104,97,116,32, + 95,95,105,109,112,111,114,116,95,95,32,115,104,111,117,108, + 100,32,114,101,116,117,114,110,46,10,10,32,32,32,32,84, + 104,101,32,105,109,112,111,114,116,95,32,112,97,114,97,109, + 101,116,101,114,32,105,115,32,97,32,99,97,108,108,97,98, + 108,101,32,119,104,105,99,104,32,116,97,107,101,115,32,116, + 104,101,32,110,97,109,101,32,111,102,32,109,111,100,117,108, + 101,32,116,111,10,32,32,32,32,105,109,112,111,114,116,46, + 32,73,116,32,105,115,32,114,101,113,117,105,114,101,100,32, + 116,111,32,100,101,99,111,117,112,108,101,32,116,104,101,32, + 102,117,110,99,116,105,111,110,32,102,114,111,109,32,97,115, + 115,117,109,105,110,103,32,105,109,112,111,114,116,108,105,98, + 39,115,10,32,32,32,32,105,109,112,111,114,116,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,105,115,32, + 100,101,115,105,114,101,100,46,10,10,32,32,32,32,122,8, + 46,95,95,97,108,108,95,95,122,13,96,96,102,114,111,109, + 32,108,105,115,116,39,39,122,8,73,116,101,109,32,105,110, + 32,122,18,32,109,117,115,116,32,98,101,32,115,116,114,44, + 32,110,111,116,32,250,1,42,218,7,95,95,97,108,108,95, + 95,84,114,230,0,0,0,114,206,0,0,0,78,41,16,114, + 216,0,0,0,114,217,0,0,0,114,8,0,0,0,114,218, + 0,0,0,114,3,0,0,0,114,10,0,0,0,218,16,95, + 104,97,110,100,108,101,95,102,114,111,109,108,105,115,116,114, + 233,0,0,0,114,51,0,0,0,114,75,0,0,0,114,224, + 0,0,0,114,20,0,0,0,114,18,0,0,0,114,105,0, + 0,0,114,39,0,0,0,114,227,0,0,0,41,8,114,110, + 0,0,0,218,8,102,114,111,109,108,105,115,116,114,225,0, + 0,0,114,231,0,0,0,218,1,120,90,5,119,104,101,114, + 101,90,9,102,114,111,109,95,110,97,109,101,90,3,101,120, + 99,32,32,32,32,32,32,32,32,114,5,0,0,0,114,234, + 0,0,0,29,4,0,0,115,58,0,0,0,8,10,10,1, + 4,1,12,1,4,2,10,1,8,1,8,255,8,2,14,1, + 10,1,2,1,6,255,2,128,10,2,14,1,2,1,12,1, + 2,128,12,1,10,4,16,1,2,255,10,2,2,1,10,128, + 2,245,4,12,2,248,115,36,0,0,0,193,2,5,65,8, + 2,193,8,7,65,39,9,193,15,14,65,35,9,193,34,1, + 65,35,9,193,35,4,65,39,9,193,43,1,65,39,9,114, + 234,0,0,0,99,1,0,0,0,0,0,0,0,0,0,0, + 0,7,0,0,0,67,0,0,0,115,146,0,0,0,124,0, + 160,0,100,1,161,1,125,1,124,0,160,0,100,2,161,1, + 125,2,124,1,100,3,117,1,114,41,124,2,100,3,117,1, + 114,39,124,1,124,2,106,1,107,3,114,39,116,2,160,3, + 100,4,124,1,155,2,100,5,124,2,106,1,155,2,100,6, + 157,5,116,4,100,7,100,8,166,3,1,0,124,1,83,0, + 124,2,100,3,117,1,114,48,124,2,106,1,83,0,116,2, + 160,3,100,9,116,4,100,7,100,8,166,3,1,0,124,0, + 100,10,25,0,125,1,100,11,124,0,118,1,114,71,124,1, + 160,5,100,12,161,1,100,13,25,0,125,1,124,1,83,0, + 41,14,122,167,67,97,108,99,117,108,97,116,101,32,119,104, + 97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115, + 104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95, + 95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111, + 116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32, + 98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111, + 117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111, + 110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115, + 101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111, + 112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107, + 110,111,119,110,46,10,10,32,32,32,32,114,158,0,0,0, + 114,113,0,0,0,78,122,32,95,95,112,97,99,107,97,103, + 101,95,95,32,33,61,32,95,95,115,112,101,99,95,95,46, + 112,97,114,101,110,116,32,40,122,4,32,33,61,32,250,1, + 41,233,3,0,0,0,41,1,90,10,115,116,97,99,107,108, + 101,118,101,108,122,89,99,97,110,39,116,32,114,101,115,111, + 108,118,101,32,112,97,99,107,97,103,101,32,102,114,111,109, + 32,95,95,115,112,101,99,95,95,32,111,114,32,95,95,112, + 97,99,107,97,103,101,95,95,44,32,102,97,108,108,105,110, + 103,32,98,97,99,107,32,111,110,32,95,95,110,97,109,101, + 95,95,32,97,110,100,32,95,95,112,97,116,104,95,95,114, + 8,0,0,0,114,154,0,0,0,114,141,0,0,0,114,26, + 0,0,0,41,6,114,39,0,0,0,114,143,0,0,0,114, + 101,0,0,0,114,102,0,0,0,114,169,0,0,0,114,142, + 0,0,0,41,3,218,7,103,108,111,98,97,108,115,114,209, + 0,0,0,114,109,0,0,0,32,32,32,114,5,0,0,0, + 218,17,95,99,97,108,99,95,95,95,112,97,99,107,97,103, + 101,95,95,66,4,0,0,115,42,0,0,0,10,7,10,1, + 8,1,18,1,6,1,2,1,4,255,4,1,6,255,4,2, + 6,254,4,3,8,1,6,1,6,2,4,2,6,254,8,3, + 8,1,14,1,4,1,114,17,0,0,0,114,240,0,0,0, + 114,23,0,0,0,99,5,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,67,0,0,0,115,174,0,0,0,124, + 4,100,1,107,2,114,9,116,0,124,0,131,1,125,5,110, + 18,124,1,100,2,117,1,114,15,124,1,110,1,105,0,125, + 6,116,1,124,6,131,1,125,7,116,0,124,0,124,7,124, + 4,131,3,125,5,124,3,115,74,124,4,100,1,107,2,114, + 42,116,0,124,0,160,2,100,3,161,1,100,1,25,0,131, + 1,83,0,124,0,115,46,124,5,83,0,116,3,124,0,131, + 1,116,3,124,0,160,2,100,3,161,1,100,1,25,0,131, + 1,24,0,125,8,116,4,106,5,124,5,106,6,100,2,116, + 3,124,5,106,6,131,1,124,8,24,0,133,2,25,0,25, + 0,83,0,116,7,124,5,100,4,131,2,114,85,116,8,124, + 5,124,3,116,0,131,3,83,0,124,5,83,0,41,5,97, + 215,1,0,0,73,109,112,111,114,116,32,97,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,84,104,101,32,39,103, + 108,111,98,97,108,115,39,32,97,114,103,117,109,101,110,116, + 32,105,115,32,117,115,101,100,32,116,111,32,105,110,102,101, + 114,32,119,104,101,114,101,32,116,104,101,32,105,109,112,111, + 114,116,32,105,115,32,111,99,99,117,114,114,105,110,103,32, + 102,114,111,109,10,32,32,32,32,116,111,32,104,97,110,100, + 108,101,32,114,101,108,97,116,105,118,101,32,105,109,112,111, + 114,116,115,46,32,84,104,101,32,39,108,111,99,97,108,115, + 39,32,97,114,103,117,109,101,110,116,32,105,115,32,105,103, + 110,111,114,101,100,46,32,84,104,101,10,32,32,32,32,39, + 102,114,111,109,108,105,115,116,39,32,97,114,103,117,109,101, + 110,116,32,115,112,101,99,105,102,105,101,115,32,119,104,97, + 116,32,115,104,111,117,108,100,32,101,120,105,115,116,32,97, + 115,32,97,116,116,114,105,98,117,116,101,115,32,111,110,32, + 116,104,101,32,109,111,100,117,108,101,10,32,32,32,32,98, + 101,105,110,103,32,105,109,112,111,114,116,101,100,32,40,101, + 46,103,46,32,96,96,102,114,111,109,32,109,111,100,117,108, + 101,32,105,109,112,111,114,116,32,60,102,114,111,109,108,105, + 115,116,62,96,96,41,46,32,32,84,104,101,32,39,108,101, + 118,101,108,39,10,32,32,32,32,97,114,103,117,109,101,110, + 116,32,114,101,112,114,101,115,101,110,116,115,32,116,104,101, + 32,112,97,99,107,97,103,101,32,108,111,99,97,116,105,111, + 110,32,116,111,32,105,109,112,111,114,116,32,102,114,111,109, + 32,105,110,32,97,32,114,101,108,97,116,105,118,101,10,32, + 32,32,32,105,109,112,111,114,116,32,40,101,46,103,46,32, + 96,96,102,114,111,109,32,46,46,112,107,103,32,105,109,112, + 111,114,116,32,109,111,100,96,96,32,119,111,117,108,100,32, + 104,97,118,101,32,97,32,39,108,101,118,101,108,39,32,111, + 102,32,50,41,46,10,10,32,32,32,32,114,26,0,0,0, + 78,114,141,0,0,0,114,154,0,0,0,41,9,114,229,0, + 0,0,114,240,0,0,0,218,9,112,97,114,116,105,116,105, + 111,110,114,208,0,0,0,114,18,0,0,0,114,105,0,0, + 0,114,8,0,0,0,114,10,0,0,0,114,234,0,0,0, + 41,9,114,20,0,0,0,114,239,0,0,0,218,6,108,111, + 99,97,108,115,114,235,0,0,0,114,210,0,0,0,114,110, + 0,0,0,90,8,103,108,111,98,97,108,115,95,114,209,0, + 0,0,90,7,99,117,116,95,111,102,102,32,32,32,32,32, + 32,32,32,32,114,5,0,0,0,218,10,95,95,105,109,112, + 111,114,116,95,95,93,4,0,0,115,30,0,0,0,8,11, + 10,1,16,2,8,1,12,1,4,1,8,3,18,1,4,1, + 4,1,26,4,30,3,10,1,12,1,4,2,114,17,0,0, + 0,114,243,0,0,0,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, + 116,0,160,1,124,0,161,1,125,1,124,1,100,0,117,0, + 114,15,116,2,100,1,124,0,23,0,131,1,130,1,116,3, + 124,1,131,1,83,0,41,2,78,122,25,110,111,32,98,117, + 105,108,116,45,105,110,32,109,111,100,117,108,101,32,110,97, + 109,101,100,32,41,4,114,175,0,0,0,114,183,0,0,0, + 114,88,0,0,0,114,173,0,0,0,41,2,114,20,0,0, + 0,114,109,0,0,0,32,32,114,5,0,0,0,218,18,95, + 98,117,105,108,116,105,110,95,102,114,111,109,95,110,97,109, + 101,130,4,0,0,115,8,0,0,0,10,1,8,1,12,1, + 8,1,114,17,0,0,0,114,244,0,0,0,99,2,0,0, + 0,0,0,0,0,0,0,0,0,5,0,0,0,67,0,0, + 0,115,166,0,0,0,124,1,97,0,124,0,97,1,116,2, + 116,1,131,1,125,2,116,1,106,3,160,4,161,0,68,0, + 93,36,92,2,125,3,125,4,116,5,124,4,124,2,131,2, + 114,49,124,3,116,1,106,6,118,0,114,30,116,7,125,5, + 110,9,116,0,160,8,124,3,161,1,114,38,116,9,125,5, + 110,1,113,13,116,10,124,4,124,5,131,2,125,6,116,11, + 124,6,124,4,131,2,1,0,113,13,116,1,106,3,116,12, + 25,0,125,7,100,1,68,0,93,23,125,8,124,8,116,1, + 106,3,118,1,114,69,116,13,124,8,131,1,125,9,110,5, + 116,1,106,3,124,8,25,0,125,9,116,14,124,7,124,8, + 124,9,131,3,1,0,113,57,100,2,83,0,41,3,122,250, + 83,101,116,117,112,32,105,109,112,111,114,116,108,105,98,32, + 98,121,32,105,109,112,111,114,116,105,110,103,32,110,101,101, + 100,101,100,32,98,117,105,108,116,45,105,110,32,109,111,100, + 117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105, + 110,103,32,116,104,101,109,10,32,32,32,32,105,110,116,111, + 32,116,104,101,32,103,108,111,98,97,108,32,110,97,109,101, + 115,112,97,99,101,46,10,10,32,32,32,32,65,115,32,115, + 121,115,32,105,115,32,110,101,101,100,101,100,32,102,111,114, + 32,115,121,115,46,109,111,100,117,108,101,115,32,97,99,99, + 101,115,115,32,97,110,100,32,95,105,109,112,32,105,115,32, + 110,101,101,100,101,100,32,116,111,32,108,111,97,100,32,98, + 117,105,108,116,45,105,110,10,32,32,32,32,109,111,100,117, + 108,101,115,44,32,116,104,111,115,101,32,116,119,111,32,109, + 111,100,117,108,101,115,32,109,117,115,116,32,98,101,32,101, + 120,112,108,105,99,105,116,108,121,32,112,97,115,115,101,100, + 32,105,110,46,10,10,32,32,32,32,41,3,114,27,0,0, + 0,114,101,0,0,0,114,72,0,0,0,78,41,15,114,65, + 0,0,0,114,18,0,0,0,114,3,0,0,0,114,105,0, + 0,0,218,5,105,116,101,109,115,114,216,0,0,0,114,87, + 0,0,0,114,175,0,0,0,114,98,0,0,0,114,193,0, + 0,0,114,155,0,0,0,114,161,0,0,0,114,8,0,0, + 0,114,244,0,0,0,114,11,0,0,0,41,10,218,10,115, + 121,115,95,109,111,100,117,108,101,218,11,95,105,109,112,95, + 109,111,100,117,108,101,90,11,109,111,100,117,108,101,95,116, + 121,112,101,114,20,0,0,0,114,110,0,0,0,114,122,0, + 0,0,114,109,0,0,0,90,11,115,101,108,102,95,109,111, + 100,117,108,101,90,12,98,117,105,108,116,105,110,95,110,97, + 109,101,90,14,98,117,105,108,116,105,110,95,109,111,100,117, + 108,101,32,32,32,32,32,32,32,32,32,32,114,5,0,0, + 0,218,6,95,115,101,116,117,112,137,4,0,0,115,40,0, + 0,0,4,9,4,1,8,3,18,1,10,1,10,1,6,1, + 10,1,6,1,2,2,10,1,10,1,2,128,10,3,8,1, + 10,1,10,1,10,2,14,1,4,251,114,17,0,0,0,114, + 248,0,0,0,99,2,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,67,0,0,0,115,38,0,0,0,116,0, + 124,0,124,1,131,2,1,0,116,1,106,2,160,3,116,4, + 161,1,1,0,116,1,106,2,160,3,116,5,161,1,1,0, + 100,1,83,0,41,2,122,48,73,110,115,116,97,108,108,32, + 105,109,112,111,114,116,101,114,115,32,102,111,114,32,98,117, + 105,108,116,105,110,32,97,110,100,32,102,114,111,122,101,110, + 32,109,111,100,117,108,101,115,78,41,6,114,248,0,0,0, + 114,18,0,0,0,114,214,0,0,0,114,132,0,0,0,114, + 175,0,0,0,114,193,0,0,0,41,2,114,246,0,0,0, + 114,247,0,0,0,32,32,114,5,0,0,0,218,8,95,105, + 110,115,116,97,108,108,172,4,0,0,115,6,0,0,0,10, + 2,12,2,16,1,114,17,0,0,0,114,249,0,0,0,99, + 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 67,0,0,0,115,32,0,0,0,100,1,100,2,108,0,125, + 0,124,0,97,1,124,0,160,2,116,3,106,4,116,5,25, + 0,161,1,1,0,100,2,83,0,41,3,122,57,73,110,115, + 116,97,108,108,32,105,109,112,111,114,116,101,114,115,32,116, + 104,97,116,32,114,101,113,117,105,114,101,32,101,120,116,101, + 114,110,97,108,32,102,105,108,101,115,121,115,116,101,109,32, + 97,99,99,101,115,115,114,26,0,0,0,78,41,6,218,26, + 95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105, + 98,95,101,120,116,101,114,110,97,108,114,139,0,0,0,114, + 249,0,0,0,114,18,0,0,0,114,105,0,0,0,114,8, + 0,0,0,41,1,114,250,0,0,0,32,114,5,0,0,0, + 218,27,95,105,110,115,116,97,108,108,95,101,120,116,101,114, + 110,97,108,95,105,109,112,111,114,116,101,114,115,180,4,0, + 0,115,6,0,0,0,8,3,4,1,20,1,114,17,0,0, + 0,114,251,0,0,0,114,190,0,0,0,114,0,0,0,0, + 114,25,0,0,0,41,4,78,78,114,23,0,0,0,114,26, + 0,0,0,41,54,114,9,0,0,0,114,6,0,0,0,114, + 27,0,0,0,114,101,0,0,0,114,72,0,0,0,114,139, + 0,0,0,114,16,0,0,0,114,21,0,0,0,114,67,0, + 0,0,114,38,0,0,0,114,48,0,0,0,114,22,0,0, + 0,114,24,0,0,0,114,56,0,0,0,114,58,0,0,0, + 114,61,0,0,0,114,73,0,0,0,114,75,0,0,0,114, + 84,0,0,0,114,95,0,0,0,114,100,0,0,0,114,111, + 0,0,0,114,124,0,0,0,114,125,0,0,0,114,104,0, + 0,0,114,155,0,0,0,114,161,0,0,0,114,165,0,0, + 0,114,119,0,0,0,114,106,0,0,0,114,172,0,0,0, + 114,173,0,0,0,114,107,0,0,0,114,175,0,0,0,114, + 193,0,0,0,114,200,0,0,0,114,211,0,0,0,114,213, + 0,0,0,114,215,0,0,0,114,221,0,0,0,90,15,95, + 69,82,82,95,77,83,71,95,80,82,69,70,73,88,114,223, + 0,0,0,114,226,0,0,0,218,6,111,98,106,101,99,116, + 114,227,0,0,0,114,228,0,0,0,114,229,0,0,0,114, + 234,0,0,0,114,240,0,0,0,114,243,0,0,0,114,244, + 0,0,0,114,248,0,0,0,114,249,0,0,0,114,251,0, + 0,0,114,23,0,0,0,114,5,0,0,0,218,8,60,109, + 111,100,117,108,101,62,1,0,0,0,115,104,0,0,0,4, + 0,8,22,4,9,4,1,4,1,4,3,8,3,8,8,4, + 8,4,2,16,3,14,4,14,77,14,21,8,16,8,37,8, + 17,14,11,8,8,8,11,8,12,8,19,14,26,16,101,10, + 26,14,45,8,72,8,17,8,17,8,30,8,36,8,45,14, + 15,14,80,14,85,8,13,8,9,10,10,8,47,4,16,8, + 1,8,2,6,32,8,3,10,16,14,15,8,37,10,27,8, + 37,8,7,8,35,12,8,114,17,0,0,0, }; diff --git a/Python/importlib_external.h b/Python/importlib_external.h index 778cca1718bf84..e353132c55854f 100644 --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -223,10 +223,10 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 0,0,0,114,67,0,0,0,126,0,0,0,115,6,0,0, 0,10,2,2,1,8,255,114,9,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,68,0,0,0,135,2,116,0,136,2,102,1,100,1, + 0,115,68,0,0,0,135,0,116,0,136,0,102,1,100,1, 100,2,132,8,116,1,68,0,131,1,131,1,125,1,124,1, - 100,3,107,0,114,20,100,4,137,2,102,2,83,0,137,2, - 100,5,124,1,133,2,25,0,137,2,124,1,100,6,23,0, + 100,3,107,0,114,20,100,4,137,0,102,2,83,0,137,0, + 100,5,124,1,133,2,25,0,137,0,124,1,100,6,23,0, 100,5,133,2,25,0,102,2,83,0,41,7,122,32,82,101, 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, 46,112,97,116,104,46,115,112,108,105,116,40,41,46,99,1, @@ -240,1108 +240,1084 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 95,112,97,116,104,95,115,112,108,105,116,46,60,108,111,99, 97,108,115,62,46,60,103,101,110,101,120,112,114,62,114,0, 0,0,0,114,10,0,0,0,78,114,3,0,0,0,41,2, - 218,3,109,97,120,114,51,0,0,0,41,3,114,65,0,0, - 0,218,1,105,114,65,0,0,0,96,32,64,114,7,0,0, - 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, + 218,3,109,97,120,114,51,0,0,0,41,2,114,65,0,0, + 0,218,1,105,96,32,114,7,0,0,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,67,0,0,0,115,10,0,0,0,116, + 0,160,1,124,0,161,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,116,111,32,109,97,107, + 101,32,105,116,32,101,97,115,105,101,114,32,116,111,32,111, + 118,101,114,114,105,100,101,32,105,110,32,101,120,112,101,114, + 105,109,101,110,116,115,10,32,32,32,32,40,101,46,103,46, + 32,99,97,99,104,101,32,115,116,97,116,32,114,101,115,117, + 108,116,115,41,46,10,10,32,32,32,32,78,41,2,114,19, + 0,0,0,90,4,115,116,97,116,169,1,114,65,0,0,0, + 32,114,7,0,0,0,218,10,95,112,97,116,104,95,115,116, + 97,116,140,0,0,0,115,2,0,0,0,10,7,114,9,0, + 0,0,114,75,0,0,0,99,2,0,0,0,0,0,0,0, + 0,0,0,0,8,0,0,0,67,0,0,0,115,50,0,0, + 0,9,0,116,0,124,0,131,1,125,2,110,11,35,0,4, + 0,116,1,121,24,1,0,1,0,1,0,89,0,100,1,83, + 0,37,0,124,2,106,2,100,2,64,0,124,1,107,2,83, + 0,119,0,41,4,122,49,84,101,115,116,32,119,104,101,116, + 104,101,114,32,116,104,101,32,112,97,116,104,32,105,115,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, + 100,101,32,116,121,112,101,46,70,105,0,240,0,0,78,41, + 3,114,75,0,0,0,218,7,79,83,69,114,114,111,114,218, + 7,115,116,95,109,111,100,101,41,3,114,65,0,0,0,218, + 4,109,111,100,101,90,9,115,116,97,116,95,105,110,102,111, + 32,32,32,114,7,0,0,0,218,18,95,112,97,116,104,95, + 105,115,95,109,111,100,101,95,116,121,112,101,150,0,0,0, + 115,16,0,0,0,2,2,10,1,2,128,12,1,6,1,2, + 128,14,1,2,254,115,12,0,0,0,129,4,6,0,134,7, + 16,7,152,1,16,7,114,79,0,0,0,99,1,0,0,0, 0,0,0,0,0,0,0,0,3,0,0,0,67,0,0,0, - 115,10,0,0,0,116,0,160,1,124,0,161,1,83,0,41, - 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, - 116,111,32,109,97,107,101,32,105,116,32,101,97,115,105,101, - 114,32,116,111,32,111,118,101,114,114,105,100,101,32,105,110, - 32,101,120,112,101,114,105,109,101,110,116,115,10,32,32,32, - 32,40,101,46,103,46,32,99,97,99,104,101,32,115,116,97, - 116,32,114,101,115,117,108,116,115,41,46,10,10,32,32,32, - 32,78,41,2,114,19,0,0,0,90,4,115,116,97,116,169, - 1,114,65,0,0,0,32,114,7,0,0,0,218,10,95,112, - 97,116,104,95,115,116,97,116,140,0,0,0,115,2,0,0, - 0,10,7,114,9,0,0,0,114,75,0,0,0,99,2,0, - 0,0,0,0,0,0,0,0,0,0,8,0,0,0,67,0, - 0,0,115,50,0,0,0,9,0,116,0,124,0,131,1,125, - 2,110,11,35,0,4,0,116,1,121,24,1,0,1,0,1, - 0,89,0,100,1,83,0,37,0,124,2,106,2,100,2,64, - 0,124,1,107,2,83,0,119,0,41,4,122,49,84,101,115, - 116,32,119,104,101,116,104,101,114,32,116,104,101,32,112,97, - 116,104,32,105,115,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,109,111,100,101,32,116,121,112,101,46,70,105, - 0,240,0,0,78,41,3,114,75,0,0,0,218,7,79,83, - 69,114,114,111,114,218,7,115,116,95,109,111,100,101,41,3, - 114,65,0,0,0,218,4,109,111,100,101,90,9,115,116,97, - 116,95,105,110,102,111,32,32,32,114,7,0,0,0,218,18, - 95,112,97,116,104,95,105,115,95,109,111,100,101,95,116,121, - 112,101,150,0,0,0,115,16,0,0,0,2,2,10,1,2, - 128,12,1,6,1,2,128,14,1,2,254,115,12,0,0,0, - 129,4,6,0,134,7,16,7,152,1,16,7,114,79,0,0, - 0,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, - 0,0,67,0,0,0,115,10,0,0,0,116,0,124,0,100, - 1,131,2,83,0,41,3,122,31,82,101,112,108,97,99,101, - 109,101,110,116,32,102,111,114,32,111,115,46,112,97,116,104, - 46,105,115,102,105,108,101,46,105,0,128,0,0,78,41,1, - 114,79,0,0,0,114,74,0,0,0,32,114,7,0,0,0, - 218,12,95,112,97,116,104,95,105,115,102,105,108,101,159,0, - 0,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,67,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,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,0,218,6,103,101,116,99,119,100,114,79,0,0,0,114, - 74,0,0,0,32,114,7,0,0,0,218,11,95,112,97,116, - 104,95,105,115,100,105,114,164,0,0,0,115,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,67,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,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,82,101,112,108, - 97,99,101,109,101,110,116,32,102,111,114,32,111,115,46,112, - 97,116,104,46,105,115,97,98,115,46,70,114,0,0,0,0, - 114,2,0,0,0,114,1,0,0,0,114,3,0,0,0,122, - 2,92,92,78,41,6,114,19,0,0,0,114,56,0,0,0, - 218,7,114,101,112,108,97,99,101,114,4,0,0,0,114,27, - 0,0,0,114,58,0,0,0,41,2,114,65,0,0,0,114, - 64,0,0,0,32,32,114,7,0,0,0,218,11,95,112,97, - 116,104,95,105,115,97,98,115,172,0,0,0,115,8,0,0, - 0,4,2,4,1,22,1,32,1,114,9,0,0,0,114,86, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 3,0,0,0,67,0,0,0,115,10,0,0,0,124,0,160, - 0,116,1,161,1,83,0,41,2,114,84,0,0,0,78,41, - 2,114,27,0,0,0,114,51,0,0,0,114,74,0,0,0, - 32,114,7,0,0,0,114,86,0,0,0,180,0,0,0,114, - 81,0,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,67, - 0,0,0,115,178,0,0,0,100,1,160,0,124,0,116,1, - 124,0,131,1,161,2,125,3,116,2,160,3,124,3,116,2, - 106,4,116,2,106,5,66,0,116,2,106,6,66,0,124,2, - 100,2,64,0,161,3,125,4,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,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,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,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,32,116,111,32,119,114,105,116,101,32,100,97,116,97, - 32,116,111,32,97,32,112,97,116,104,32,97,116,111,109,105, - 99,97,108,108,121,46,10,32,32,32,32,66,101,32,112,114, - 101,112,97,114,101,100,32,116,111,32,104,97,110,100,108,101, - 32,97,32,70,105,108,101,69,120,105,115,116,115,69,114,114, - 111,114,32,105,102,32,99,111,110,99,117,114,114,101,110,116, - 32,119,114,105,116,105,110,103,32,111,102,32,116,104,101,10, - 32,32,32,32,116,101,109,112,111,114,97,114,121,32,102,105, - 108,101,32,105,115,32,97,116,116,101,109,112,116,101,100,46, - 250,5,123,125,46,123,125,114,87,0,0,0,90,2,119,98, - 78,41,13,218,6,102,111,114,109,97,116,218,2,105,100,114, - 19,0,0,0,90,4,111,112,101,110,90,6,79,95,69,88, - 67,76,90,7,79,95,67,82,69,65,84,90,8,79,95,87, - 82,79,78,76,89,218,3,95,105,111,218,6,70,105,108,101, - 73,79,218,5,119,114,105,116,101,114,85,0,0,0,114,76, - 0,0,0,90,6,117,110,108,105,110,107,41,6,114,65,0, - 0,0,114,42,0,0,0,114,78,0,0,0,90,8,112,97, - 116,104,95,116,109,112,90,2,102,100,218,4,102,105,108,101, - 32,32,32,32,32,32,114,7,0,0,0,218,13,95,119,114, - 105,116,101,95,97,116,111,109,105,99,185,0,0,0,115,44, - 0,0,0,16,5,6,1,22,1,4,255,2,2,14,3,10, - 1,12,255,22,128,16,2,2,128,12,1,2,1,10,1,2, - 3,2,128,12,254,2,1,2,1,4,128,2,254,2,253,115, - 69,0,0,0,153,6,62,0,159,6,43,3,165,6,62,0, - 171,4,47,11,175,1,62,0,176,3,47,11,179,9,62,0, - 190,7,65,22,7,193,6,5,65,12,6,193,11,1,65,22, - 7,193,12,7,65,21,13,193,19,3,65,22,7,193,23,1, - 65,21,13,193,24,1,65,22,7,114,95,0,0,0,105,127, - 13,0,0,114,45,0,0,0,114,33,0,0,0,115,2,0, - 0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,95, - 95,122,4,111,112,116,45,122,3,46,112,121,122,4,46,112, - 121,119,122,4,46,112,121,99,41,1,218,12,111,112,116,105, - 109,105,122,97,116,105,111,110,99,2,0,0,0,0,0,0, - 0,1,0,0,0,5,0,0,0,67,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,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,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,63,124,6,110,1, - 124,8,124,7,124,9,103,3,161,1,125,10,124,2,100,1, - 117,0,114,86,116,8,106,13,106,14,100,8,107,2,114,82, - 100,4,125,2,110,4,116,8,106,13,106,14,125,2,116,15, - 124,2,131,1,125,2,124,2,100,4,107,3,114,112,124,2, - 160,16,161,0,115,105,116,17,100,9,160,18,124,2,161,1, - 131,1,130,1,100,10,160,18,124,10,116,19,124,2,161,3, - 125,10,124,10,116,20,100,8,25,0,23,0,125,11,116,8, - 106,21,100,1,117,1,114,162,116,22,124,4,131,1,115,134, - 116,23,116,4,160,24,161,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,26,116,25,161,1, - 124,11,131,3,83,0,116,23,124,4,116,27,124,11,131,3, - 83,0,41,13,97,254,2,0,0,71,105,118,101,110,32,116, - 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, - 32,102,105,108,101,44,32,114,101,116,117,114,110,32,116,104, - 101,32,112,97,116,104,32,116,111,32,105,116,115,32,46,112, - 121,99,32,102,105,108,101,46,10,10,32,32,32,32,84,104, - 101,32,46,112,121,32,102,105,108,101,32,100,111,101,115,32, - 110,111,116,32,110,101,101,100,32,116,111,32,101,120,105,115, - 116,59,32,116,104,105,115,32,115,105,109,112,108,121,32,114, - 101,116,117,114,110,115,32,116,104,101,32,112,97,116,104,32, - 116,111,32,116,104,101,10,32,32,32,32,46,112,121,99,32, - 102,105,108,101,32,99,97,108,99,117,108,97,116,101,100,32, - 97,115,32,105,102,32,116,104,101,32,46,112,121,32,102,105, - 108,101,32,119,101,114,101,32,105,109,112,111,114,116,101,100, - 46,10,10,32,32,32,32,84,104,101,32,39,111,112,116,105, - 109,105,122,97,116,105,111,110,39,32,112,97,114,97,109,101, - 116,101,114,32,99,111,110,116,114,111,108,115,32,116,104,101, - 32,112,114,101,115,117,109,101,100,32,111,112,116,105,109,105, - 122,97,116,105,111,110,32,108,101,118,101,108,32,111,102,10, - 32,32,32,32,116,104,101,32,98,121,116,101,99,111,100,101, - 32,102,105,108,101,46,32,73,102,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,115,32,110,111,116,32, - 78,111,110,101,44,32,116,104,101,32,115,116,114,105,110,103, - 32,114,101,112,114,101,115,101,110,116,97,116,105,111,110,10, - 32,32,32,32,111,102,32,116,104,101,32,97,114,103,117,109, - 101,110,116,32,105,115,32,116,97,107,101,110,32,97,110,100, - 32,118,101,114,105,102,105,101,100,32,116,111,32,98,101,32, - 97,108,112,104,97,110,117,109,101,114,105,99,32,40,101,108, - 115,101,32,86,97,108,117,101,69,114,114,111,114,10,32,32, - 32,32,105,115,32,114,97,105,115,101,100,41,46,10,10,32, - 32,32,32,84,104,101,32,100,101,98,117,103,95,111,118,101, - 114,114,105,100,101,32,112,97,114,97,109,101,116,101,114,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,73, - 102,32,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,105,115,32,110,111,116,32,78,111,110,101,44,10,32,32, - 32,32,97,32,84,114,117,101,32,118,97,108,117,101,32,105, - 115,32,116,104,101,32,115,97,109,101,32,97,115,32,115,101, - 116,116,105,110,103,32,39,111,112,116,105,109,105,122,97,116, - 105,111,110,39,32,116,111,32,116,104,101,32,101,109,112,116, - 121,32,115,116,114,105,110,103,10,32,32,32,32,119,104,105, - 108,101,32,97,32,70,97,108,115,101,32,118,97,108,117,101, - 32,105,115,32,101,113,117,105,118,97,108,101,110,116,32,116, - 111,32,115,101,116,116,105,110,103,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,116,111,32,39,49,39,46, - 10,10,32,32,32,32,73,102,32,115,121,115,46,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, - 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, - 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, - 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 46,10,10,32,32,32,32,78,122,70,116,104,101,32,100,101, - 98,117,103,95,111,118,101,114,114,105,100,101,32,112,97,114, - 97,109,101,116,101,114,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,59,32,117,115,101,32,39,111,112,116,105,109, - 105,122,97,116,105,111,110,39,32,105,110,115,116,101,97,100, - 122,50,100,101,98,117,103,95,111,118,101,114,114,105,100,101, - 32,111,114,32,111,112,116,105,109,105,122,97,116,105,111,110, - 32,109,117,115,116,32,98,101,32,115,101,116,32,116,111,32, - 78,111,110,101,114,10,0,0,0,114,3,0,0,0,218,1, - 46,250,36,115,121,115,46,105,109,112,108,101,109,101,110,116, + 115,10,0,0,0,116,0,124,0,100,1,131,2,83,0,41, + 3,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, + 101,46,105,0,128,0,0,78,41,1,114,79,0,0,0,114, + 74,0,0,0,32,114,7,0,0,0,218,12,95,112,97,116, + 104,95,105,115,102,105,108,101,159,0,0,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,67,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,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,0,218,6,103,101, + 116,99,119,100,114,79,0,0,0,114,74,0,0,0,32,114, + 7,0,0,0,218,11,95,112,97,116,104,95,105,115,100,105, + 114,164,0,0,0,115,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,67,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,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,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,105,115, + 97,98,115,46,70,114,0,0,0,0,114,2,0,0,0,114, + 1,0,0,0,114,3,0,0,0,122,2,92,92,78,41,6, + 114,19,0,0,0,114,56,0,0,0,218,7,114,101,112,108, + 97,99,101,114,4,0,0,0,114,27,0,0,0,114,58,0, + 0,0,41,2,114,65,0,0,0,114,64,0,0,0,32,32, + 114,7,0,0,0,218,11,95,112,97,116,104,95,105,115,97, + 98,115,172,0,0,0,115,8,0,0,0,4,2,4,1,22, + 1,32,1,114,9,0,0,0,114,86,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,67,0, + 0,0,115,10,0,0,0,124,0,160,0,116,1,161,1,83, + 0,41,2,114,84,0,0,0,78,41,2,114,27,0,0,0, + 114,51,0,0,0,114,74,0,0,0,32,114,7,0,0,0, + 114,86,0,0,0,180,0,0,0,114,81,0,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,67,0,0,0,115,178,0, + 0,0,100,1,160,0,124,0,116,1,124,0,131,1,161,2, + 125,3,116,2,160,3,124,3,116,2,106,4,116,2,106,5, + 66,0,116,2,106,6,66,0,124,2,100,2,64,0,161,3, + 125,4,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,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,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,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,32,116,111,32, + 119,114,105,116,101,32,100,97,116,97,32,116,111,32,97,32, + 112,97,116,104,32,97,116,111,109,105,99,97,108,108,121,46, + 10,32,32,32,32,66,101,32,112,114,101,112,97,114,101,100, + 32,116,111,32,104,97,110,100,108,101,32,97,32,70,105,108, + 101,69,120,105,115,116,115,69,114,114,111,114,32,105,102,32, + 99,111,110,99,117,114,114,101,110,116,32,119,114,105,116,105, + 110,103,32,111,102,32,116,104,101,10,32,32,32,32,116,101, + 109,112,111,114,97,114,121,32,102,105,108,101,32,105,115,32, + 97,116,116,101,109,112,116,101,100,46,250,5,123,125,46,123, + 125,114,87,0,0,0,90,2,119,98,78,41,13,218,6,102, + 111,114,109,97,116,218,2,105,100,114,19,0,0,0,90,4, + 111,112,101,110,90,6,79,95,69,88,67,76,90,7,79,95, + 67,82,69,65,84,90,8,79,95,87,82,79,78,76,89,218, + 3,95,105,111,218,6,70,105,108,101,73,79,218,5,119,114, + 105,116,101,114,85,0,0,0,114,76,0,0,0,90,6,117, + 110,108,105,110,107,41,6,114,65,0,0,0,114,42,0,0, + 0,114,78,0,0,0,90,8,112,97,116,104,95,116,109,112, + 90,2,102,100,218,4,102,105,108,101,32,32,32,32,32,32, + 114,7,0,0,0,218,13,95,119,114,105,116,101,95,97,116, + 111,109,105,99,185,0,0,0,115,44,0,0,0,16,5,6, + 1,22,1,4,255,2,2,14,3,10,1,12,255,22,128,16, + 2,2,128,12,1,2,1,10,1,2,3,2,128,12,254,2, + 1,2,1,4,128,2,254,2,253,115,69,0,0,0,153,6, + 62,0,159,6,43,3,165,6,62,0,171,4,47,11,175,1, + 62,0,176,3,47,11,179,9,62,0,190,7,65,22,7,193, + 6,5,65,12,6,193,11,1,65,22,7,193,12,7,65,21, + 13,193,19,3,65,22,7,193,23,1,65,21,13,193,24,1, + 65,22,7,114,95,0,0,0,105,128,13,0,0,114,45,0, + 0,0,114,33,0,0,0,115,2,0,0,0,13,10,90,11, + 95,95,112,121,99,97,99,104,101,95,95,122,4,111,112,116, + 45,122,3,46,112,121,122,4,46,112,121,119,122,4,46,112, + 121,99,41,1,218,12,111,112,116,105,109,105,122,97,116,105, + 111,110,99,2,0,0,0,0,0,0,0,1,0,0,0,5, + 0,0,0,67,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,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,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,63,124,6,110,1,124,8,124,7,124,9, + 103,3,161,1,125,10,124,2,100,1,117,0,114,86,116,8, + 106,13,106,14,100,8,107,2,114,82,100,4,125,2,110,4, + 116,8,106,13,106,14,125,2,116,15,124,2,131,1,125,2, + 124,2,100,4,107,3,114,112,124,2,160,16,161,0,115,105, + 116,17,100,9,160,18,124,2,161,1,131,1,130,1,100,10, + 160,18,124,10,116,19,124,2,161,3,125,10,124,10,116,20, + 100,8,25,0,23,0,125,11,116,8,106,21,100,1,117,1, + 114,162,116,22,124,4,131,1,115,134,116,23,116,4,160,24, + 161,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,26,116,25,161,1,124,11,131,3,83,0, + 116,23,124,4,116,27,124,11,131,3,83,0,41,13,97,254, + 2,0,0,71,105,118,101,110,32,116,104,101,32,112,97,116, + 104,32,116,111,32,97,32,46,112,121,32,102,105,108,101,44, + 32,114,101,116,117,114,110,32,116,104,101,32,112,97,116,104, + 32,116,111,32,105,116,115,32,46,112,121,99,32,102,105,108, + 101,46,10,10,32,32,32,32,84,104,101,32,46,112,121,32, + 102,105,108,101,32,100,111,101,115,32,110,111,116,32,110,101, + 101,100,32,116,111,32,101,120,105,115,116,59,32,116,104,105, + 115,32,115,105,109,112,108,121,32,114,101,116,117,114,110,115, + 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, + 10,32,32,32,32,46,112,121,99,32,102,105,108,101,32,99, + 97,108,99,117,108,97,116,101,100,32,97,115,32,105,102,32, + 116,104,101,32,46,112,121,32,102,105,108,101,32,119,101,114, + 101,32,105,109,112,111,114,116,101,100,46,10,10,32,32,32, + 32,84,104,101,32,39,111,112,116,105,109,105,122,97,116,105, + 111,110,39,32,112,97,114,97,109,101,116,101,114,32,99,111, + 110,116,114,111,108,115,32,116,104,101,32,112,114,101,115,117, + 109,101,100,32,111,112,116,105,109,105,122,97,116,105,111,110, + 32,108,101,118,101,108,32,111,102,10,32,32,32,32,116,104, + 101,32,98,121,116,101,99,111,100,101,32,102,105,108,101,46, + 32,73,102,32,39,111,112,116,105,109,105,122,97,116,105,111, + 110,39,32,105,115,32,110,111,116,32,78,111,110,101,44,32, + 116,104,101,32,115,116,114,105,110,103,32,114,101,112,114,101, + 115,101,110,116,97,116,105,111,110,10,32,32,32,32,111,102, + 32,116,104,101,32,97,114,103,117,109,101,110,116,32,105,115, + 32,116,97,107,101,110,32,97,110,100,32,118,101,114,105,102, + 105,101,100,32,116,111,32,98,101,32,97,108,112,104,97,110, + 117,109,101,114,105,99,32,40,101,108,115,101,32,86,97,108, + 117,101,69,114,114,111,114,10,32,32,32,32,105,115,32,114, + 97,105,115,101,100,41,46,10,10,32,32,32,32,84,104,101, + 32,100,101,98,117,103,95,111,118,101,114,114,105,100,101,32, + 112,97,114,97,109,101,116,101,114,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,73,102,32,100,101,98,117, + 103,95,111,118,101,114,114,105,100,101,32,105,115,32,110,111, + 116,32,78,111,110,101,44,10,32,32,32,32,97,32,84,114, + 117,101,32,118,97,108,117,101,32,105,115,32,116,104,101,32, + 115,97,109,101,32,97,115,32,115,101,116,116,105,110,103,32, + 39,111,112,116,105,109,105,122,97,116,105,111,110,39,32,116, + 111,32,116,104,101,32,101,109,112,116,121,32,115,116,114,105, + 110,103,10,32,32,32,32,119,104,105,108,101,32,97,32,70, + 97,108,115,101,32,118,97,108,117,101,32,105,115,32,101,113, + 117,105,118,97,108,101,110,116,32,116,111,32,115,101,116,116, + 105,110,103,32,39,111,112,116,105,109,105,122,97,116,105,111, + 110,39,32,116,111,32,39,49,39,46,10,10,32,32,32,32, + 73,102,32,115,121,115,46,105,109,112,108,101,109,101,110,116, 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, - 105,115,32,78,111,110,101,114,0,0,0,0,122,24,123,33, - 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, - 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,114, - 11,0,0,0,114,45,0,0,0,41,28,218,9,95,119,97, - 114,110,105,110,103,115,218,4,119,97,114,110,218,18,68,101, - 112,114,101,99,97,116,105,111,110,87,97,114,110,105,110,103, - 218,9,84,121,112,101,69,114,114,111,114,114,19,0,0,0, - 218,6,102,115,112,97,116,104,114,73,0,0,0,218,10,114, - 112,97,114,116,105,116,105,111,110,114,16,0,0,0,218,14, - 105,109,112,108,101,109,101,110,116,97,116,105,111,110,218,9, - 99,97,99,104,101,95,116,97,103,218,19,78,111,116,73,109, - 112,108,101,109,101,110,116,101,100,69,114,114,111,114,114,62, - 0,0,0,114,17,0,0,0,218,8,111,112,116,105,109,105, - 122,101,218,3,115,116,114,218,7,105,115,97,108,110,117,109, - 218,10,86,97,108,117,101,69,114,114,111,114,114,89,0,0, - 0,218,4,95,79,80,84,218,17,66,89,84,69,67,79,68, - 69,95,83,85,70,70,73,88,69,83,218,14,112,121,99,97, - 99,104,101,95,112,114,101,102,105,120,114,86,0,0,0,114, - 67,0,0,0,114,82,0,0,0,114,51,0,0,0,218,6, - 108,115,116,114,105,112,218,8,95,80,89,67,65,67,72,69, - 41,12,114,65,0,0,0,90,14,100,101,98,117,103,95,111, - 118,101,114,114,105,100,101,114,96,0,0,0,218,7,109,101, - 115,115,97,103,101,218,4,104,101,97,100,114,66,0,0,0, - 90,4,98,97,115,101,114,6,0,0,0,218,4,114,101,115, - 116,90,3,116,97,103,90,15,97,108,109,111,115,116,95,102, - 105,108,101,110,97,109,101,218,8,102,105,108,101,110,97,109, - 101,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,130,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,8,1,8,1,14,1,14,1,12,1, - 10,1,8,9,14,1,24,5,12,1,2,4,4,1,8,1, - 2,1,4,253,12,5,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,67,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,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,23,0,161,1,114,51,124,1,116,12, - 124,4,131,1,100,1,133,2,25,0,125,1,100,4,125,3, - 124,3,115,72,116,6,124,1,131,1,92,2,125,1,125,5, - 124,5,116,13,107,3,114,72,116,14,116,13,155,0,100,5, - 124,0,155,2,157,3,131,1,130,1,124,2,160,15,100,6, - 161,1,125,6,124,6,100,7,118,1,114,88,116,14,100,8, - 124,2,155,2,157,2,131,1,130,1,124,6,100,9,107,2, - 114,132,124,2,160,16,100,6,100,10,161,2,100,11,25,0, - 125,7,124,7,160,10,116,17,161,1,115,112,116,14,100,12, - 116,17,155,2,157,2,131,1,130,1,124,7,116,12,116,17, - 131,1,100,1,133,2,25,0,125,8,124,8,160,18,161,0, - 115,132,116,14,100,13,124,7,155,2,100,14,157,3,131,1, - 130,1,124,2,160,19,100,6,161,1,100,15,25,0,125,9, - 116,20,124,1,124,9,116,21,100,15,25,0,23,0,131,2, - 83,0,41,16,97,110,1,0,0,71,105,118,101,110,32,116, - 104,101,32,112,97,116,104,32,116,111,32,97,32,46,112,121, - 99,46,32,102,105,108,101,44,32,114,101,116,117,114,110,32, - 116,104,101,32,112,97,116,104,32,116,111,32,105,116,115,32, - 46,112,121,32,102,105,108,101,46,10,10,32,32,32,32,84, - 104,101,32,46,112,121,99,32,102,105,108,101,32,100,111,101, - 115,32,110,111,116,32,110,101,101,100,32,116,111,32,101,120, - 105,115,116,59,32,116,104,105,115,32,115,105,109,112,108,121, - 32,114,101,116,117,114,110,115,32,116,104,101,32,112,97,116, - 104,32,116,111,10,32,32,32,32,116,104,101,32,46,112,121, - 32,102,105,108,101,32,99,97,108,99,117,108,97,116,101,100, - 32,116,111,32,99,111,114,114,101,115,112,111,110,100,32,116, - 111,32,116,104,101,32,46,112,121,99,32,102,105,108,101,46, - 32,32,73,102,32,112,97,116,104,32,100,111,101,115,10,32, - 32,32,32,110,111,116,32,99,111,110,102,111,114,109,32,116, - 111,32,80,69,80,32,51,49,52,55,47,52,56,56,32,102, - 111,114,109,97,116,44,32,86,97,108,117,101,69,114,114,111, - 114,32,119,105,108,108,32,98,101,32,114,97,105,115,101,100, - 46,32,73,102,10,32,32,32,32,115,121,115,46,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,46,99,97,99,104, - 101,95,116,97,103,32,105,115,32,78,111,110,101,32,116,104, - 101,110,32,78,111,116,73,109,112,108,101,109,101,110,116,101, - 100,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 46,10,10,32,32,32,32,78,114,98,0,0,0,70,84,122, - 31,32,110,111,116,32,98,111,116,116,111,109,45,108,101,118, - 101,108,32,100,105,114,101,99,116,111,114,121,32,105,110,32, - 114,97,0,0,0,62,2,0,0,0,114,45,0,0,0,233, - 3,0,0,0,122,29,101,120,112,101,99,116,101,100,32,111, - 110,108,121,32,50,32,111,114,32,51,32,100,111,116,115,32, - 105,110,32,114,122,0,0,0,114,45,0,0,0,233,254,255, - 255,255,122,53,111,112,116,105,109,105,122,97,116,105,111,110, - 32,112,111,114,116,105,111,110,32,111,102,32,102,105,108,101, - 110,97,109,101,32,100,111,101,115,32,110,111,116,32,115,116, - 97,114,116,32,119,105,116,104,32,122,19,111,112,116,105,109, - 105,122,97,116,105,111,110,32,108,101,118,101,108,32,122,29, - 32,105,115,32,110,111,116,32,97,110,32,97,108,112,104,97, - 110,117,109,101,114,105,99,32,118,97,108,117,101,114,0,0, - 0,0,41,22,114,16,0,0,0,114,105,0,0,0,114,106, - 0,0,0,114,107,0,0,0,114,19,0,0,0,114,103,0, - 0,0,114,73,0,0,0,114,114,0,0,0,114,50,0,0, - 0,114,51,0,0,0,114,27,0,0,0,114,59,0,0,0, - 114,4,0,0,0,114,116,0,0,0,114,111,0,0,0,218, - 5,99,111,117,110,116,218,6,114,115,112,108,105,116,114,112, - 0,0,0,114,110,0,0,0,218,9,112,97,114,116,105,116, - 105,111,110,114,67,0,0,0,218,15,83,79,85,82,67,69, - 95,83,85,70,70,73,88,69,83,41,10,114,65,0,0,0, - 114,118,0,0,0,90,16,112,121,99,97,99,104,101,95,102, - 105,108,101,110,97,109,101,90,23,102,111,117,110,100,95,105, - 110,95,112,121,99,97,99,104,101,95,112,114,101,102,105,120, - 90,13,115,116,114,105,112,112,101,100,95,112,97,116,104,90, - 7,112,121,99,97,99,104,101,90,9,100,111,116,95,99,111, - 117,110,116,114,96,0,0,0,90,9,111,112,116,95,108,101, - 118,101,108,90,13,98,97,115,101,95,102,105,108,101,110,97, - 109,101,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,201,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,8,1,16,1,14,2,18,1,114,9,0,0,0,114,128, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 9,0,0,0,67,0,0,0,115,126,0,0,0,116,0,124, - 0,131,1,100,1,107,2,114,8,100,2,83,0,124,0,160, - 1,100,3,161,1,92,3,125,1,125,2,125,3,124,1,114, - 28,124,3,160,2,161,0,100,4,100,5,133,2,25,0,100, - 6,107,3,114,30,124,0,83,0,9,0,116,3,124,0,131, - 1,125,4,110,18,35,0,4,0,116,4,116,5,102,2,121, - 62,1,0,1,0,1,0,124,0,100,2,100,5,133,2,25, - 0,125,4,89,0,110,1,37,0,116,6,124,4,131,1,114, - 60,124,4,83,0,124,0,83,0,119,0,41,7,122,188,67, - 111,110,118,101,114,116,32,97,32,98,121,116,101,99,111,100, - 101,32,102,105,108,101,32,112,97,116,104,32,116,111,32,97, - 32,115,111,117,114,99,101,32,112,97,116,104,32,40,105,102, - 32,112,111,115,115,105,98,108,101,41,46,10,10,32,32,32, - 32,84,104,105,115,32,102,117,110,99,116,105,111,110,32,101, - 120,105,115,116,115,32,112,117,114,101,108,121,32,102,111,114, - 32,98,97,99,107,119,97,114,100,115,45,99,111,109,112,97, - 116,105,98,105,108,105,116,121,32,102,111,114,10,32,32,32, - 32,80,121,73,109,112,111,114,116,95,69,120,101,99,67,111, - 100,101,77,111,100,117,108,101,87,105,116,104,70,105,108,101, - 110,97,109,101,115,40,41,32,105,110,32,116,104,101,32,67, - 32,65,80,73,46,10,10,32,32,32,32,114,0,0,0,0, - 78,114,97,0,0,0,233,253,255,255,255,233,255,255,255,255, - 90,2,112,121,41,7,114,4,0,0,0,114,104,0,0,0, - 218,5,108,111,119,101,114,114,128,0,0,0,114,107,0,0, - 0,114,111,0,0,0,114,80,0,0,0,41,5,218,13,98, - 121,116,101,99,111,100,101,95,112,97,116,104,114,119,0,0, - 0,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,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,241,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,135,0,0,0, + 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, + 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, + 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, + 32,78,122,70,116,104,101,32,100,101,98,117,103,95,111,118, + 101,114,114,105,100,101,32,112,97,114,97,109,101,116,101,114, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,59,32, + 117,115,101,32,39,111,112,116,105,109,105,122,97,116,105,111, + 110,39,32,105,110,115,116,101,97,100,122,50,100,101,98,117, + 103,95,111,118,101,114,114,105,100,101,32,111,114,32,111,112, + 116,105,109,105,122,97,116,105,111,110,32,109,117,115,116,32, + 98,101,32,115,101,116,32,116,111,32,78,111,110,101,114,10, + 0,0,0,114,3,0,0,0,218,1,46,250,36,115,121,115, + 46,105,109,112,108,101,109,101,110,116,97,116,105,111,110,46, + 99,97,99,104,101,95,116,97,103,32,105,115,32,78,111,110, + 101,114,0,0,0,0,122,24,123,33,114,125,32,105,115,32, + 110,111,116,32,97,108,112,104,97,110,117,109,101,114,105,99, + 122,7,123,125,46,123,125,123,125,114,11,0,0,0,114,45, + 0,0,0,41,28,218,9,95,119,97,114,110,105,110,103,115, + 218,4,119,97,114,110,218,18,68,101,112,114,101,99,97,116, + 105,111,110,87,97,114,110,105,110,103,218,9,84,121,112,101, + 69,114,114,111,114,114,19,0,0,0,218,6,102,115,112,97, + 116,104,114,73,0,0,0,218,10,114,112,97,114,116,105,116, + 105,111,110,114,16,0,0,0,218,14,105,109,112,108,101,109, + 101,110,116,97,116,105,111,110,218,9,99,97,99,104,101,95, + 116,97,103,218,19,78,111,116,73,109,112,108,101,109,101,110, + 116,101,100,69,114,114,111,114,114,62,0,0,0,114,17,0, + 0,0,218,8,111,112,116,105,109,105,122,101,218,3,115,116, + 114,218,7,105,115,97,108,110,117,109,218,10,86,97,108,117, + 101,69,114,114,111,114,114,89,0,0,0,218,4,95,79,80, + 84,218,17,66,89,84,69,67,79,68,69,95,83,85,70,70, + 73,88,69,83,218,14,112,121,99,97,99,104,101,95,112,114, + 101,102,105,120,114,86,0,0,0,114,67,0,0,0,114,82, + 0,0,0,114,51,0,0,0,218,6,108,115,116,114,105,112, + 218,8,95,80,89,67,65,67,72,69,41,12,114,65,0,0, + 0,90,14,100,101,98,117,103,95,111,118,101,114,114,105,100, + 101,114,96,0,0,0,218,7,109,101,115,115,97,103,101,218, + 4,104,101,97,100,114,66,0,0,0,90,4,98,97,115,101, + 114,6,0,0,0,218,4,114,101,115,116,90,3,116,97,103, + 90,15,97,108,109,111,115,116,95,102,105,108,101,110,97,109, + 101,218,8,102,105,108,101,110,97,109,101,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,131, + 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, + 8,1,8,1,14,1,14,1,12,1,10,1,8,9,14,1, + 24,5,12,1,2,4,4,1,8,1,2,1,4,253,12,5, + 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,67,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, + 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, + 23,0,161,1,114,51,124,1,116,12,124,4,131,1,100,1, + 133,2,25,0,125,1,100,4,125,3,124,3,115,72,116,6, + 124,1,131,1,92,2,125,1,125,5,124,5,116,13,107,3, + 114,72,116,14,116,13,155,0,100,5,124,0,155,2,157,3, + 131,1,130,1,124,2,160,15,100,6,161,1,125,6,124,6, + 100,7,118,1,114,88,116,14,100,8,124,2,155,2,157,2, + 131,1,130,1,124,6,100,9,107,2,114,132,124,2,160,16, + 100,6,100,10,161,2,100,11,25,0,125,7,124,7,160,10, + 116,17,161,1,115,112,116,14,100,12,116,17,155,2,157,2, + 131,1,130,1,124,7,116,12,116,17,131,1,100,1,133,2, + 25,0,125,8,124,8,160,18,161,0,115,132,116,14,100,13, + 124,7,155,2,100,14,157,3,131,1,130,1,124,2,160,19, + 100,6,161,1,100,15,25,0,125,9,116,20,124,1,124,9, + 116,21,100,15,25,0,23,0,131,2,83,0,41,16,97,110, + 1,0,0,71,105,118,101,110,32,116,104,101,32,112,97,116, + 104,32,116,111,32,97,32,46,112,121,99,46,32,102,105,108, + 101,44,32,114,101,116,117,114,110,32,116,104,101,32,112,97, + 116,104,32,116,111,32,105,116,115,32,46,112,121,32,102,105, + 108,101,46,10,10,32,32,32,32,84,104,101,32,46,112,121, + 99,32,102,105,108,101,32,100,111,101,115,32,110,111,116,32, + 110,101,101,100,32,116,111,32,101,120,105,115,116,59,32,116, + 104,105,115,32,115,105,109,112,108,121,32,114,101,116,117,114, + 110,115,32,116,104,101,32,112,97,116,104,32,116,111,10,32, + 32,32,32,116,104,101,32,46,112,121,32,102,105,108,101,32, + 99,97,108,99,117,108,97,116,101,100,32,116,111,32,99,111, + 114,114,101,115,112,111,110,100,32,116,111,32,116,104,101,32, + 46,112,121,99,32,102,105,108,101,46,32,32,73,102,32,112, + 97,116,104,32,100,111,101,115,10,32,32,32,32,110,111,116, + 32,99,111,110,102,111,114,109,32,116,111,32,80,69,80,32, + 51,49,52,55,47,52,56,56,32,102,111,114,109,97,116,44, + 32,86,97,108,117,101,69,114,114,111,114,32,119,105,108,108, + 32,98,101,32,114,97,105,115,101,100,46,32,73,102,10,32, + 32,32,32,115,121,115,46,105,109,112,108,101,109,101,110,116, + 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, + 105,115,32,78,111,110,101,32,116,104,101,110,32,78,111,116, + 73,109,112,108,101,109,101,110,116,101,100,69,114,114,111,114, + 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, + 32,78,114,98,0,0,0,70,84,122,31,32,110,111,116,32, + 98,111,116,116,111,109,45,108,101,118,101,108,32,100,105,114, + 101,99,116,111,114,121,32,105,110,32,114,97,0,0,0,62, + 2,0,0,0,114,45,0,0,0,233,3,0,0,0,122,29, + 101,120,112,101,99,116,101,100,32,111,110,108,121,32,50,32, + 111,114,32,51,32,100,111,116,115,32,105,110,32,114,122,0, + 0,0,114,45,0,0,0,233,254,255,255,255,122,53,111,112, + 116,105,109,105,122,97,116,105,111,110,32,112,111,114,116,105, + 111,110,32,111,102,32,102,105,108,101,110,97,109,101,32,100, + 111,101,115,32,110,111,116,32,115,116,97,114,116,32,119,105, + 116,104,32,122,19,111,112,116,105,109,105,122,97,116,105,111, + 110,32,108,101,118,101,108,32,122,29,32,105,115,32,110,111, + 116,32,97,110,32,97,108,112,104,97,110,117,109,101,114,105, + 99,32,118,97,108,117,101,114,0,0,0,0,41,22,114,16, + 0,0,0,114,105,0,0,0,114,106,0,0,0,114,107,0, + 0,0,114,19,0,0,0,114,103,0,0,0,114,73,0,0, + 0,114,114,0,0,0,114,50,0,0,0,114,51,0,0,0, + 114,27,0,0,0,114,59,0,0,0,114,4,0,0,0,114, + 116,0,0,0,114,111,0,0,0,218,5,99,111,117,110,116, + 218,6,114,115,112,108,105,116,114,112,0,0,0,114,110,0, + 0,0,218,9,112,97,114,116,105,116,105,111,110,114,67,0, + 0,0,218,15,83,79,85,82,67,69,95,83,85,70,70,73, + 88,69,83,41,10,114,65,0,0,0,114,118,0,0,0,90, + 16,112,121,99,97,99,104,101,95,102,105,108,101,110,97,109, + 101,90,23,102,111,117,110,100,95,105,110,95,112,121,99,97, + 99,104,101,95,112,114,101,102,105,120,90,13,115,116,114,105, + 112,112,101,100,95,112,97,116,104,90,7,112,121,99,97,99, + 104,101,90,9,100,111,116,95,99,111,117,110,116,114,96,0, + 0,0,90,9,111,112,116,95,108,101,118,101,108,90,13,98, + 97,115,101,95,102,105,108,101,110,97,109,101,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,202,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,8,1,16,1,14, + 2,18,1,114,9,0,0,0,114,128,0,0,0,99,1,0, + 0,0,0,0,0,0,0,0,0,0,9,0,0,0,67,0, + 0,0,115,126,0,0,0,116,0,124,0,131,1,100,1,107, + 2,114,8,100,2,83,0,124,0,160,1,100,3,161,1,92, + 3,125,1,125,2,125,3,124,1,114,28,124,3,160,2,161, + 0,100,4,100,5,133,2,25,0,100,6,107,3,114,30,124, + 0,83,0,9,0,116,3,124,0,131,1,125,4,110,18,35, + 0,4,0,116,4,116,5,102,2,121,62,1,0,1,0,1, + 0,124,0,100,2,100,5,133,2,25,0,125,4,89,0,110, + 1,37,0,116,6,124,4,131,1,114,60,124,4,83,0,124, + 0,83,0,119,0,41,7,122,188,67,111,110,118,101,114,116, + 32,97,32,98,121,116,101,99,111,100,101,32,102,105,108,101, + 32,112,97,116,104,32,116,111,32,97,32,115,111,117,114,99, + 101,32,112,97,116,104,32,40,105,102,32,112,111,115,115,105, + 98,108,101,41,46,10,10,32,32,32,32,84,104,105,115,32, + 102,117,110,99,116,105,111,110,32,101,120,105,115,116,115,32, + 112,117,114,101,108,121,32,102,111,114,32,98,97,99,107,119, + 97,114,100,115,45,99,111,109,112,97,116,105,98,105,108,105, + 116,121,32,102,111,114,10,32,32,32,32,80,121,73,109,112, + 111,114,116,95,69,120,101,99,67,111,100,101,77,111,100,117, + 108,101,87,105,116,104,70,105,108,101,110,97,109,101,115,40, + 41,32,105,110,32,116,104,101,32,67,32,65,80,73,46,10, + 10,32,32,32,32,114,0,0,0,0,78,114,97,0,0,0, + 233,253,255,255,255,233,255,255,255,255,90,2,112,121,41,7, + 114,4,0,0,0,114,104,0,0,0,218,5,108,111,119,101, + 114,114,128,0,0,0,114,107,0,0,0,114,111,0,0,0, + 114,80,0,0,0,41,5,218,13,98,121,116,101,99,111,100, + 101,95,112,97,116,104,114,119,0,0,0,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,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,242,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,135,0,0,0,99,1,0,0,0,0, + 0,0,0,0,0,0,0,8,0,0,0,67,0,0,0,115, + 70,0,0,0,124,0,160,0,116,1,116,2,131,1,161,1, + 114,23,9,0,116,3,124,0,131,1,83,0,35,0,4,0, + 116,4,121,34,1,0,1,0,1,0,89,0,100,0,83,0, + 37,0,124,0,160,0,116,1,116,5,131,1,161,1,114,32, + 124,0,83,0,100,0,83,0,119,0,114,69,0,0,0,41, + 6,114,58,0,0,0,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,32,114,7,0,0,0,218,11, + 95,103,101,116,95,99,97,99,104,101,100,5,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,1,0,0,0,0,0,0,0,0,0,0,0,8,0,0, - 0,67,0,0,0,115,70,0,0,0,124,0,160,0,116,1, - 116,2,131,1,161,1,114,23,9,0,116,3,124,0,131,1, - 83,0,35,0,4,0,116,4,121,34,1,0,1,0,1,0, - 89,0,100,0,83,0,37,0,124,0,160,0,116,1,116,5, - 131,1,161,1,114,32,124,0,83,0,100,0,83,0,119,0, - 114,69,0,0,0,41,6,114,58,0,0,0,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,32,114, - 7,0,0,0,218,11,95,103,101,116,95,99,97,99,104,101, - 100,4,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,1,0,0,0,0,0,0,0,0, - 0,0,0,8,0,0,0,67,0,0,0,115,52,0,0,0, - 9,0,116,0,124,0,131,1,106,1,125,1,110,12,35,0, - 4,0,116,2,121,25,1,0,1,0,1,0,100,1,125,1, - 89,0,110,1,37,0,124,1,100,2,79,0,125,1,124,1, - 83,0,119,0,41,4,122,51,67,97,108,99,117,108,97,116, - 101,32,116,104,101,32,109,111,100,101,32,112,101,114,109,105, - 115,115,105,111,110,115,32,102,111,114,32,97,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,46,114,87,0,0,0, - 233,128,0,0,0,78,41,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,32,32,114,7,0,0,0,218,10,95,99,97,108, - 99,95,109,111,100,101,16,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,0,0,4,0,0,0,3,0,0,0,115,54,0,0, - 0,135,3,100,6,136,3,102,1,100,2,100,3,132,9,125, - 1,116,0,100,1,117,1,114,16,116,0,106,1,125,2,110, - 4,100,4,100,5,132,0,125,2,124,2,124,1,137,3,131, - 2,1,0,124,1,83,0,41,7,122,252,68,101,99,111,114, - 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, - 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, - 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, - 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, - 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, - 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, - 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, - 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, - 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, - 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, - 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, - 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, - 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, - 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, - 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, - 0,0,0,0,0,5,0,0,0,31,0,0,0,115,76,0, - 0,0,124,1,100,0,117,0,114,8,124,0,106,0,125,1, - 110,18,124,0,106,0,124,1,107,3,114,26,116,1,100,1, - 124,0,106,0,155,1,100,2,124,1,155,1,157,4,124,1, - 100,3,141,2,130,1,137,4,124,0,124,1,103,2,124,2, - 162,1,82,0,105,0,124,3,164,1,142,1,83,0,41,4, - 78,122,11,108,111,97,100,101,114,32,102,111,114,32,122,15, - 32,99,97,110,110,111,116,32,104,97,110,100,108,101,32,169, - 1,218,4,110,97,109,101,41,2,114,141,0,0,0,218,11, - 73,109,112,111,114,116,69,114,114,111,114,41,5,218,4,115, - 101,108,102,114,141,0,0,0,218,4,97,114,103,115,218,6, - 107,119,97,114,103,115,218,6,109,101,116,104,111,100,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,36,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,109,101,95, - 119,114,97,112,112,101,114,99,2,0,0,0,0,0,0,0, - 0,0,0,0,7,0,0,0,83,0,0,0,115,56,0,0, - 0,100,1,68,0,93,16,125,2,116,0,124,1,124,2,131, - 2,114,18,116,1,124,0,124,2,116,2,124,1,124,2,131, - 2,131,3,1,0,113,2,124,0,106,3,160,4,124,1,106, - 3,161,1,1,0,100,0,83,0,41,2,78,41,4,218,10, - 95,95,109,111,100,117,108,101,95,95,218,8,95,95,110,97, - 109,101,95,95,218,12,95,95,113,117,97,108,110,97,109,101, - 95,95,218,7,95,95,100,111,99,95,95,41,5,218,7,104, - 97,115,97,116,116,114,218,7,115,101,116,97,116,116,114,218, - 7,103,101,116,97,116,116,114,218,8,95,95,100,105,99,116, - 95,95,218,6,117,112,100,97,116,101,41,3,90,3,110,101, - 119,90,3,111,108,100,114,85,0,0,0,32,32,32,114,7, - 0,0,0,218,5,95,119,114,97,112,49,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,4,114,146,0,0,0,114,147,0, - 0,0,114,157,0,0,0,114,146,0,0,0,96,32,32,64, - 114,7,0,0,0,218,11,95,99,104,101,99,107,95,110,97, - 109,101,28,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,67,0,0,0,115,72,0,0,0,116,0,160, - 1,100,1,116,2,161,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,84,114,121,32,116,111,32, - 102,105,110,100,32,97,32,108,111,97,100,101,114,32,102,111, - 114,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,117,108,101,32,98,121,32,100,101,108,101,103,97, - 116,105,110,103,32,116,111,10,32,32,32,32,115,101,108,102, - 46,102,105,110,100,95,108,111,97,100,101,114,40,41,46,10, - 10,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,105, - 110,32,102,97,118,111,114,32,111,102,32,102,105,110,100,101, - 114,46,102,105,110,100,95,115,112,101,99,40,41,46,10,10, - 32,32,32,32,122,90,102,105,110,100,95,109,111,100,117,108, - 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, - 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, - 111,110,32,51,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,122,44,78,111,116,32,105,109,112,111,114,116,105,110,103, - 32,100,105,114,101,99,116,111,114,121,32,123,125,58,32,109, - 105,115,115,105,110,103,32,95,95,105,110,105,116,95,95,114, - 0,0,0,0,41,7,114,99,0,0,0,114,100,0,0,0, - 114,101,0,0,0,218,11,102,105,110,100,95,108,111,97,100, - 101,114,114,4,0,0,0,114,89,0,0,0,218,13,73,109, - 112,111,114,116,87,97,114,110,105,110,103,41,5,114,143,0, - 0,0,218,8,102,117,108,108,110,97,109,101,218,6,108,111, - 97,100,101,114,218,8,112,111,114,116,105,111,110,115,218,3, - 109,115,103,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, - 59,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,67,0,0,0,115,166,0,0,0,124,0,100, - 1,100,2,133,2,25,0,125,3,124,3,116,0,107,3,114, - 32,100,3,124,1,155,2,100,4,124,3,155,2,157,4,125, - 4,116,1,160,2,100,5,124,4,161,2,1,0,116,3,124, - 4,102,1,105,0,124,2,164,1,142,1,130,1,116,4,124, - 0,131,1,100,6,107,0,114,53,100,7,124,1,155,2,157, - 2,125,4,116,1,160,2,100,5,124,4,161,2,1,0,116, - 5,124,4,131,1,130,1,116,6,124,0,100,2,100,8,133, - 2,25,0,131,1,125,5,124,5,100,9,64,0,114,81,100, - 10,124,5,155,2,100,11,124,1,155,2,157,4,125,4,116, - 3,124,4,102,1,105,0,124,2,164,1,142,1,130,1,124, - 5,83,0,41,12,97,84,2,0,0,80,101,114,102,111,114, - 109,32,98,97,115,105,99,32,118,97,108,105,100,105,116,121, - 32,99,104,101,99,107,105,110,103,32,111,102,32,97,32,112, - 121,99,32,104,101,97,100,101,114,32,97,110,100,32,114,101, - 116,117,114,110,32,116,104,101,32,102,108,97,103,115,32,102, - 105,101,108,100,44,10,32,32,32,32,119,104,105,99,104,32, - 100,101,116,101,114,109,105,110,101,115,32,104,111,119,32,116, - 104,101,32,112,121,99,32,115,104,111,117,108,100,32,98,101, - 32,102,117,114,116,104,101,114,32,118,97,108,105,100,97,116, - 101,100,32,97,103,97,105,110,115,116,32,116,104,101,32,115, - 111,117,114,99,101,46,10,10,32,32,32,32,42,100,97,116, - 97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,110, - 116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,105, - 108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,105, - 114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,101, - 10,32,32,32,32,114,101,113,117,105,114,101,100,44,32,116, - 104,111,117,103,104,46,41,10,10,32,32,32,32,42,110,97, - 109,101,42,32,105,115,32,116,104,101,32,110,97,109,101,32, - 111,102,32,116,104,101,32,109,111,100,117,108,101,32,98,101, - 105,110,103,32,105,109,112,111,114,116,101,100,46,32,73,116, - 32,105,115,32,117,115,101,100,32,102,111,114,32,108,111,103, - 103,105,110,103,46,10,10,32,32,32,32,42,101,120,99,95, - 100,101,116,97,105,108,115,42,32,105,115,32,97,32,100,105, - 99,116,105,111,110,97,114,121,32,112,97,115,115,101,100,32, - 116,111,32,73,109,112,111,114,116,69,114,114,111,114,32,105, - 102,32,105,116,32,114,97,105,115,101,100,32,102,111,114,10, - 32,32,32,32,105,109,112,114,111,118,101,100,32,100,101,98, - 117,103,103,105,110,103,46,10,10,32,32,32,32,73,109,112, - 111,114,116,69,114,114,111,114,32,105,115,32,114,97,105,115, - 101,100,32,119,104,101,110,32,116,104,101,32,109,97,103,105, - 99,32,110,117,109,98,101,114,32,105,115,32,105,110,99,111, - 114,114,101,99,116,32,111,114,32,119,104,101,110,32,116,104, - 101,32,102,108,97,103,115,10,32,32,32,32,102,105,101,108, - 100,32,105,115,32,105,110,118,97,108,105,100,46,32,69,79, - 70,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, - 32,119,104,101,110,32,116,104,101,32,100,97,116,97,32,105, - 115,32,102,111,117,110,100,32,116,111,32,98,101,32,116,114, - 117,110,99,97,116,101,100,46,10,10,32,32,32,32,78,114, - 32,0,0,0,122,20,98,97,100,32,109,97,103,105,99,32, - 110,117,109,98,101,114,32,105,110,32,122,2,58,32,250,2, - 123,125,233,16,0,0,0,122,40,114,101,97,99,104,101,100, - 32,69,79,70,32,119,104,105,108,101,32,114,101,97,100,105, - 110,103,32,112,121,99,32,104,101,97,100,101,114,32,111,102, - 32,233,8,0,0,0,233,252,255,255,255,122,14,105,110,118, - 97,108,105,100,32,102,108,97,103,115,32,122,4,32,105,110, - 32,41,7,218,12,77,65,71,73,67,95,78,85,77,66,69, - 82,114,158,0,0,0,218,16,95,118,101,114,98,111,115,101, - 95,109,101,115,115,97,103,101,114,142,0,0,0,114,4,0, - 0,0,218,8,69,79,70,69,114,114,111,114,114,43,0,0, - 0,41,6,114,42,0,0,0,114,141,0,0,0,218,11,101, - 120,99,95,100,101,116,97,105,108,115,90,5,109,97,103,105, - 99,114,117,0,0,0,114,17,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,79,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,0, - 0,4,0,0,0,67,0,0,0,115,124,0,0,0,116,0, - 124,0,100,1,100,2,133,2,25,0,131,1,124,1,100,3, - 64,0,107,3,114,31,100,4,124,3,155,2,157,2,125,5, - 116,1,160,2,100,5,124,5,161,2,1,0,116,3,124,5, - 102,1,105,0,124,4,164,1,142,1,130,1,124,2,100,6, - 117,1,114,60,116,0,124,0,100,2,100,7,133,2,25,0, - 131,1,124,2,100,3,64,0,107,3,114,58,116,3,100,4, - 124,3,155,2,157,2,102,1,105,0,124,4,164,1,142,1, - 130,1,100,6,83,0,100,6,83,0,41,8,97,7,2,0, - 0,86,97,108,105,100,97,116,101,32,97,32,112,121,99,32, - 97,103,97,105,110,115,116,32,116,104,101,32,115,111,117,114, - 99,101,32,108,97,115,116,45,109,111,100,105,102,105,101,100, - 32,116,105,109,101,46,10,10,32,32,32,32,42,100,97,116, - 97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,110, - 116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,105, - 108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,105, - 114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,101, - 10,32,32,32,32,114,101,113,117,105,114,101,100,46,41,10, - 10,32,32,32,32,42,115,111,117,114,99,101,95,109,116,105, - 109,101,42,32,105,115,32,116,104,101,32,108,97,115,116,32, - 109,111,100,105,102,105,101,100,32,116,105,109,101,115,116,97, - 109,112,32,111,102,32,116,104,101,32,115,111,117,114,99,101, - 32,102,105,108,101,46,10,10,32,32,32,32,42,115,111,117, - 114,99,101,95,115,105,122,101,42,32,105,115,32,78,111,110, - 101,32,111,114,32,116,104,101,32,115,105,122,101,32,111,102, - 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, - 32,105,110,32,98,121,116,101,115,46,10,10,32,32,32,32, - 42,110,97,109,101,42,32,105,115,32,116,104,101,32,110,97, - 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, - 32,98,101,105,110,103,32,105,109,112,111,114,116,101,100,46, - 32,73,116,32,105,115,32,117,115,101,100,32,102,111,114,32, - 108,111,103,103,105,110,103,46,10,10,32,32,32,32,42,101, - 120,99,95,100,101,116,97,105,108,115,42,32,105,115,32,97, - 32,100,105,99,116,105,111,110,97,114,121,32,112,97,115,115, - 101,100,32,116,111,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,102,32,105,116,32,114,97,105,115,101,100,32,102, - 111,114,10,32,32,32,32,105,109,112,114,111,118,101,100,32, - 100,101,98,117,103,103,105,110,103,46,10,10,32,32,32,32, - 65,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,32,105,102,32,116,104,101,32, - 98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,108, - 101,46,10,10,32,32,32,32,114,169,0,0,0,233,12,0, - 0,0,114,31,0,0,0,122,22,98,121,116,101,99,111,100, - 101,32,105,115,32,115,116,97,108,101,32,102,111,114,32,114, - 167,0,0,0,78,114,168,0,0,0,41,4,114,43,0,0, - 0,114,158,0,0,0,114,172,0,0,0,114,142,0,0,0, - 41,6,114,42,0,0,0,218,12,115,111,117,114,99,101,95, - 109,116,105,109,101,218,11,115,111,117,114,99,101,95,115,105, - 122,101,114,141,0,0,0,114,174,0,0,0,114,117,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,112,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,0,67,0,0,0,115, - 42,0,0,0,124,0,100,1,100,2,133,2,25,0,124,1, - 107,3,114,19,116,0,100,3,124,2,155,2,157,2,102,1, - 105,0,124,3,164,1,142,1,130,1,100,4,83,0,41,5, - 97,243,1,0,0,86,97,108,105,100,97,116,101,32,97,32, - 104,97,115,104,45,98,97,115,101,100,32,112,121,99,32,98, - 121,32,99,104,101,99,107,105,110,103,32,116,104,101,32,114, - 101,97,108,32,115,111,117,114,99,101,32,104,97,115,104,32, - 97,103,97,105,110,115,116,32,116,104,101,32,111,110,101,32, - 105,110,10,32,32,32,32,116,104,101,32,112,121,99,32,104, - 101,97,100,101,114,46,10,10,32,32,32,32,42,100,97,116, - 97,42,32,105,115,32,116,104,101,32,99,111,110,116,101,110, - 116,115,32,111,102,32,116,104,101,32,112,121,99,32,102,105, - 108,101,46,32,40,79,110,108,121,32,116,104,101,32,102,105, - 114,115,116,32,49,54,32,98,121,116,101,115,32,97,114,101, - 10,32,32,32,32,114,101,113,117,105,114,101,100,46,41,10, - 10,32,32,32,32,42,115,111,117,114,99,101,95,104,97,115, - 104,42,32,105,115,32,116,104,101,32,105,109,112,111,114,116, - 108,105,98,46,117,116,105,108,46,115,111,117,114,99,101,95, - 104,97,115,104,40,41,32,111,102,32,116,104,101,32,115,111, + 0,67,0,0,0,115,52,0,0,0,9,0,116,0,124,0, + 131,1,106,1,125,1,110,12,35,0,4,0,116,2,121,25, + 1,0,1,0,1,0,100,1,125,1,89,0,110,1,37,0, + 124,1,100,2,79,0,125,1,124,1,83,0,119,0,41,4, + 122,51,67,97,108,99,117,108,97,116,101,32,116,104,101,32, + 109,111,100,101,32,112,101,114,109,105,115,115,105,111,110,115, + 32,102,111,114,32,97,32,98,121,116,101,99,111,100,101,32, + 102,105,108,101,46,114,87,0,0,0,233,128,0,0,0,78, + 41,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,32,32,114, + 7,0,0,0,218,10,95,99,97,108,99,95,109,111,100,101, + 17,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,0,0,4,0, + 0,0,3,0,0,0,115,54,0,0,0,135,0,100,6,136, + 0,102,1,100,2,100,3,132,9,125,1,116,0,100,1,117, + 1,114,16,116,0,106,1,125,2,110,4,100,4,100,5,132, + 0,125,2,124,2,124,1,137,0,131,2,1,0,124,1,83, + 0,41,7,122,252,68,101,99,111,114,97,116,111,114,32,116, + 111,32,118,101,114,105,102,121,32,116,104,97,116,32,116,104, + 101,32,109,111,100,117,108,101,32,98,101,105,110,103,32,114, + 101,113,117,101,115,116,101,100,32,109,97,116,99,104,101,115, + 32,116,104,101,32,111,110,101,32,116,104,101,10,32,32,32, + 32,108,111,97,100,101,114,32,99,97,110,32,104,97,110,100, + 108,101,46,10,10,32,32,32,32,84,104,101,32,102,105,114, + 115,116,32,97,114,103,117,109,101,110,116,32,40,115,101,108, + 102,41,32,109,117,115,116,32,100,101,102,105,110,101,32,95, + 110,97,109,101,32,119,104,105,99,104,32,116,104,101,32,115, + 101,99,111,110,100,32,97,114,103,117,109,101,110,116,32,105, + 115,10,32,32,32,32,99,111,109,112,97,114,101,100,32,97, + 103,97,105,110,115,116,46,32,73,102,32,116,104,101,32,99, + 111,109,112,97,114,105,115,111,110,32,102,97,105,108,115,32, + 116,104,101,110,32,73,109,112,111,114,116,69,114,114,111,114, + 32,105,115,32,114,97,105,115,101,100,46,10,10,32,32,32, + 32,78,99,2,0,0,0,0,0,0,0,0,0,0,0,5, + 0,0,0,31,0,0,0,115,76,0,0,0,124,1,100,0, + 117,0,114,8,124,0,106,0,125,1,110,18,124,0,106,0, + 124,1,107,3,114,26,116,1,100,1,124,0,106,0,155,1, + 100,2,124,1,155,1,157,4,124,1,100,3,141,2,130,1, + 137,4,124,0,124,1,103,2,124,2,162,1,82,0,105,0, + 124,3,164,1,142,1,83,0,41,4,78,122,11,108,111,97, + 100,101,114,32,102,111,114,32,122,15,32,99,97,110,110,111, + 116,32,104,97,110,100,108,101,32,169,1,218,4,110,97,109, + 101,41,2,114,141,0,0,0,218,11,73,109,112,111,114,116, + 69,114,114,111,114,41,5,218,4,115,101,108,102,114,141,0, + 0,0,218,4,97,114,103,115,218,6,107,119,97,114,103,115, + 218,6,109,101,116,104,111,100,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,37,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,109,101,95,119,114,97,112,112,101, + 114,99,2,0,0,0,0,0,0,0,0,0,0,0,7,0, + 0,0,83,0,0,0,115,56,0,0,0,100,1,68,0,93, + 16,125,2,116,0,124,1,124,2,131,2,114,18,116,1,124, + 0,124,2,116,2,124,1,124,2,131,2,131,3,1,0,113, + 2,124,0,106,3,160,4,124,1,106,3,161,1,1,0,100, + 0,83,0,41,2,78,41,4,218,10,95,95,109,111,100,117, + 108,101,95,95,218,8,95,95,110,97,109,101,95,95,218,12, + 95,95,113,117,97,108,110,97,109,101,95,95,218,7,95,95, + 100,111,99,95,95,41,5,218,7,104,97,115,97,116,116,114, + 218,7,115,101,116,97,116,116,114,218,7,103,101,116,97,116, + 116,114,218,8,95,95,100,105,99,116,95,95,218,6,117,112, + 100,97,116,101,41,3,90,3,110,101,119,90,3,111,108,100, + 114,85,0,0,0,32,32,32,114,7,0,0,0,218,5,95, + 119,114,97,112,50,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,96,32,32,114,7,0,0,0,218,11,95,99,104,101,99, + 107,95,110,97,109,101,29,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,67,0,0,0,115,72,0,0, + 0,116,0,160,1,100,1,116,2,161,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,84,114,121, + 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, + 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, + 105,101,100,32,109,111,100,117,108,101,32,98,121,32,100,101, + 108,101,103,97,116,105,110,103,32,116,111,10,32,32,32,32, + 115,101,108,102,46,102,105,110,100,95,108,111,97,100,101,114, + 40,41,46,10,10,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,32,105,110,32,102,97,118,111,114,32,111,102,32,102, + 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,40, + 41,46,10,10,32,32,32,32,122,90,102,105,110,100,95,109, + 111,100,117,108,101,40,41,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, + 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, + 80,121,116,104,111,110,32,51,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,122,44,78,111,116,32,105,109,112,111,114, + 116,105,110,103,32,100,105,114,101,99,116,111,114,121,32,123, + 125,58,32,109,105,115,115,105,110,103,32,95,95,105,110,105, + 116,95,95,114,0,0,0,0,41,7,114,99,0,0,0,114, + 100,0,0,0,114,101,0,0,0,218,11,102,105,110,100,95, + 108,111,97,100,101,114,114,4,0,0,0,114,89,0,0,0, + 218,13,73,109,112,111,114,116,87,97,114,110,105,110,103,41, + 5,114,143,0,0,0,218,8,102,117,108,108,110,97,109,101, + 218,6,108,111,97,100,101,114,218,8,112,111,114,116,105,111, + 110,115,218,3,109,115,103,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,60,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,67,0,0,0,115,166,0,0, + 0,124,0,100,1,100,2,133,2,25,0,125,3,124,3,116, + 0,107,3,114,32,100,3,124,1,155,2,100,4,124,3,155, + 2,157,4,125,4,116,1,160,2,100,5,124,4,161,2,1, + 0,116,3,124,4,102,1,105,0,124,2,164,1,142,1,130, + 1,116,4,124,0,131,1,100,6,107,0,114,53,100,7,124, + 1,155,2,157,2,125,4,116,1,160,2,100,5,124,4,161, + 2,1,0,116,5,124,4,131,1,130,1,116,6,124,0,100, + 2,100,8,133,2,25,0,131,1,125,5,124,5,100,9,64, + 0,114,81,100,10,124,5,155,2,100,11,124,1,155,2,157, + 4,125,4,116,3,124,4,102,1,105,0,124,2,164,1,142, + 1,130,1,124,5,83,0,41,12,97,84,2,0,0,80,101, + 114,102,111,114,109,32,98,97,115,105,99,32,118,97,108,105, + 100,105,116,121,32,99,104,101,99,107,105,110,103,32,111,102, + 32,97,32,112,121,99,32,104,101,97,100,101,114,32,97,110, + 100,32,114,101,116,117,114,110,32,116,104,101,32,102,108,97, + 103,115,32,102,105,101,108,100,44,10,32,32,32,32,119,104, + 105,99,104,32,100,101,116,101,114,109,105,110,101,115,32,104, + 111,119,32,116,104,101,32,112,121,99,32,115,104,111,117,108, + 100,32,98,101,32,102,117,114,116,104,101,114,32,118,97,108, + 105,100,97,116,101,100,32,97,103,97,105,110,115,116,32,116, + 104,101,32,115,111,117,114,99,101,46,10,10,32,32,32,32, + 42,100,97,116,97,42,32,105,115,32,116,104,101,32,99,111, + 110,116,101,110,116,115,32,111,102,32,116,104,101,32,112,121, + 99,32,102,105,108,101,46,32,40,79,110,108,121,32,116,104, + 101,32,102,105,114,115,116,32,49,54,32,98,121,116,101,115, + 32,97,114,101,10,32,32,32,32,114,101,113,117,105,114,101, + 100,44,32,116,104,111,117,103,104,46,41,10,10,32,32,32, + 32,42,110,97,109,101,42,32,105,115,32,116,104,101,32,110, + 97,109,101,32,111,102,32,116,104,101,32,109,111,100,117,108, + 101,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, + 46,32,73,116,32,105,115,32,117,115,101,100,32,102,111,114, + 32,108,111,103,103,105,110,103,46,10,10,32,32,32,32,42, + 101,120,99,95,100,101,116,97,105,108,115,42,32,105,115,32, + 97,32,100,105,99,116,105,111,110,97,114,121,32,112,97,115, + 115,101,100,32,116,111,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,102,32,105,116,32,114,97,105,115,101,100,32, + 102,111,114,10,32,32,32,32,105,109,112,114,111,118,101,100, + 32,100,101,98,117,103,103,105,110,103,46,10,10,32,32,32, + 32,73,109,112,111,114,116,69,114,114,111,114,32,105,115,32, + 114,97,105,115,101,100,32,119,104,101,110,32,116,104,101,32, + 109,97,103,105,99,32,110,117,109,98,101,114,32,105,115,32, + 105,110,99,111,114,114,101,99,116,32,111,114,32,119,104,101, + 110,32,116,104,101,32,102,108,97,103,115,10,32,32,32,32, + 102,105,101,108,100,32,105,115,32,105,110,118,97,108,105,100, + 46,32,69,79,70,69,114,114,111,114,32,105,115,32,114,97, + 105,115,101,100,32,119,104,101,110,32,116,104,101,32,100,97, + 116,97,32,105,115,32,102,111,117,110,100,32,116,111,32,98, + 101,32,116,114,117,110,99,97,116,101,100,46,10,10,32,32, + 32,32,78,114,32,0,0,0,122,20,98,97,100,32,109,97, + 103,105,99,32,110,117,109,98,101,114,32,105,110,32,122,2, + 58,32,250,2,123,125,233,16,0,0,0,122,40,114,101,97, + 99,104,101,100,32,69,79,70,32,119,104,105,108,101,32,114, + 101,97,100,105,110,103,32,112,121,99,32,104,101,97,100,101, + 114,32,111,102,32,233,8,0,0,0,233,252,255,255,255,122, + 14,105,110,118,97,108,105,100,32,102,108,97,103,115,32,122, + 4,32,105,110,32,41,7,218,12,77,65,71,73,67,95,78, + 85,77,66,69,82,114,158,0,0,0,218,16,95,118,101,114, + 98,111,115,101,95,109,101,115,115,97,103,101,114,142,0,0, + 0,114,4,0,0,0,218,8,69,79,70,69,114,114,111,114, + 114,43,0,0,0,41,6,114,42,0,0,0,114,141,0,0, + 0,218,11,101,120,99,95,100,101,116,97,105,108,115,90,5, + 109,97,103,105,99,114,117,0,0,0,114,17,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,80,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,0,0,4,0,0,0,67,0,0,0,115,124,0, + 0,0,116,0,124,0,100,1,100,2,133,2,25,0,131,1, + 124,1,100,3,64,0,107,3,114,31,100,4,124,3,155,2, + 157,2,125,5,116,1,160,2,100,5,124,5,161,2,1,0, + 116,3,124,5,102,1,105,0,124,4,164,1,142,1,130,1, + 124,2,100,6,117,1,114,60,116,0,124,0,100,2,100,7, + 133,2,25,0,131,1,124,2,100,3,64,0,107,3,114,58, + 116,3,100,4,124,3,155,2,157,2,102,1,105,0,124,4, + 164,1,142,1,130,1,100,6,83,0,100,6,83,0,41,8, + 97,7,2,0,0,86,97,108,105,100,97,116,101,32,97,32, + 112,121,99,32,97,103,97,105,110,115,116,32,116,104,101,32, + 115,111,117,114,99,101,32,108,97,115,116,45,109,111,100,105, + 102,105,101,100,32,116,105,109,101,46,10,10,32,32,32,32, + 42,100,97,116,97,42,32,105,115,32,116,104,101,32,99,111, + 110,116,101,110,116,115,32,111,102,32,116,104,101,32,112,121, + 99,32,102,105,108,101,46,32,40,79,110,108,121,32,116,104, + 101,32,102,105,114,115,116,32,49,54,32,98,121,116,101,115, + 32,97,114,101,10,32,32,32,32,114,101,113,117,105,114,101, + 100,46,41,10,10,32,32,32,32,42,115,111,117,114,99,101, + 95,109,116,105,109,101,42,32,105,115,32,116,104,101,32,108, + 97,115,116,32,109,111,100,105,102,105,101,100,32,116,105,109, + 101,115,116,97,109,112,32,111,102,32,116,104,101,32,115,111, 117,114,99,101,32,102,105,108,101,46,10,10,32,32,32,32, - 42,110,97,109,101,42,32,105,115,32,116,104,101,32,110,97, - 109,101,32,111,102,32,116,104,101,32,109,111,100,117,108,101, - 32,98,101,105,110,103,32,105,109,112,111,114,116,101,100,46, - 32,73,116,32,105,115,32,117,115,101,100,32,102,111,114,32, - 108,111,103,103,105,110,103,46,10,10,32,32,32,32,42,101, - 120,99,95,100,101,116,97,105,108,115,42,32,105,115,32,97, - 32,100,105,99,116,105,111,110,97,114,121,32,112,97,115,115, - 101,100,32,116,111,32,73,109,112,111,114,116,69,114,114,111, - 114,32,105,102,32,105,116,32,114,97,105,115,101,100,32,102, - 111,114,10,32,32,32,32,105,109,112,114,111,118,101,100,32, - 100,101,98,117,103,103,105,110,103,46,10,10,32,32,32,32, - 65,110,32,73,109,112,111,114,116,69,114,114,111,114,32,105, - 115,32,114,97,105,115,101,100,32,105,102,32,116,104,101,32, - 98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,108, - 101,46,10,10,32,32,32,32,114,169,0,0,0,114,168,0, - 0,0,122,46,104,97,115,104,32,105,110,32,98,121,116,101, - 99,111,100,101,32,100,111,101,115,110,39,116,32,109,97,116, - 99,104,32,104,97,115,104,32,111,102,32,115,111,117,114,99, - 101,32,78,41,1,114,142,0,0,0,41,4,114,42,0,0, - 0,218,11,115,111,117,114,99,101,95,104,97,115,104,114,141, - 0,0,0,114,174,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,140,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,67,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,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,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,111,117,110,100,32,105,110,32,97,32,112, - 121,99,46,122,21,99,111,100,101,32,111,98,106,101,99,116, - 32,102,114,111,109,32,123,33,114,125,78,122,23,78,111,110, - 45,99,111,100,101,32,111,98,106,101,99,116,32,105,110,32, - 123,33,114,125,169,2,114,141,0,0,0,114,65,0,0,0, - 41,10,218,7,109,97,114,115,104,97,108,90,5,108,111,97, - 100,115,218,10,105,115,105,110,115,116,97,110,99,101,218,10, - 95,99,111,100,101,95,116,121,112,101,114,158,0,0,0,114, - 172,0,0,0,218,4,95,105,109,112,90,16,95,102,105,120, - 95,99,111,95,102,105,108,101,110,97,109,101,114,142,0,0, - 0,114,89,0,0,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,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,164, - 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,67,0,0,0,115,70,0,0,0,116,0, - 116,1,131,1,125,3,124,3,160,2,116,3,100,1,131,1, - 161,1,1,0,124,3,160,2,116,3,124,1,131,1,161,1, - 1,0,124,3,160,2,116,3,124,2,131,1,161,1,1,0, - 124,3,160,2,116,4,160,5,124,0,161,1,161,1,1,0, - 124,3,83,0,41,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, - 121,99,46,114,0,0,0,0,78,41,6,218,9,98,121,116, - 101,97,114,114,97,121,114,171,0,0,0,218,6,101,120,116, - 101,110,100,114,37,0,0,0,114,183,0,0,0,218,5,100, - 117,109,112,115,41,4,114,187,0,0,0,218,5,109,116,105, - 109,101,114,178,0,0,0,114,42,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,177,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,0,0,67,0, - 0,0,115,80,0,0,0,116,0,116,1,131,1,125,3,100, - 1,124,2,100,1,62,0,66,0,125,4,124,3,160,2,116, - 3,124,4,131,1,161,1,1,0,116,4,124,1,131,1,100, - 2,107,2,115,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,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,78,41,7,114,189, - 0,0,0,114,171,0,0,0,114,190,0,0,0,114,37,0, - 0,0,114,4,0,0,0,114,183,0,0,0,114,191,0,0, - 0,41,5,114,187,0,0,0,114,180,0,0,0,90,7,99, - 104,101,99,107,101,100,114,42,0,0,0,114,17,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,187,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,67, - 0,0,0,115,62,0,0,0,100,1,100,2,108,0,125,1, - 116,1,160,2,124,0,161,1,106,3,125,2,124,1,160,4, - 124,2,161,1,125,3,116,1,160,5,100,2,100,3,161,2, - 125,4,124,4,160,6,124,0,160,6,124,3,100,1,25,0, - 161,1,161,1,83,0,41,4,122,121,68,101,99,111,100,101, - 32,98,121,116,101,115,32,114,101,112,114,101,115,101,110,116, - 105,110,103,32,115,111,117,114,99,101,32,99,111,100,101,32, - 97,110,100,32,114,101,116,117,114,110,32,116,104,101,32,115, - 116,114,105,110,103,46,10,10,32,32,32,32,85,110,105,118, - 101,114,115,97,108,32,110,101,119,108,105,110,101,32,115,117, - 112,112,111,114,116,32,105,115,32,117,115,101,100,32,105,110, - 32,116,104,101,32,100,101,99,111,100,105,110,103,46,10,32, - 32,32,32,114,0,0,0,0,78,84,41,7,218,8,116,111, - 107,101,110,105,122,101,114,91,0,0,0,90,7,66,121,116, - 101,115,73,79,90,8,114,101,97,100,108,105,110,101,90,15, - 100,101,116,101,99,116,95,101,110,99,111,100,105,110,103,90, - 25,73,110,99,114,101,109,101,110,116,97,108,78,101,119,108, - 105,110,101,68,101,99,111,100,101,114,218,6,100,101,99,111, - 100,101,41,5,218,12,115,111,117,114,99,101,95,98,121,116, - 101,115,114,195,0,0,0,90,21,115,111,117,114,99,101,95, - 98,121,116,101,115,95,114,101,97,100,108,105,110,101,218,8, - 101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110, - 101,95,100,101,99,111,100,101,114,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,198,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,115,99,2,0,0,0,0,0,0,0,2,0,0,0,8, - 0,0,0,67,0,0,0,115,60,1,0,0,124,1,100,1, - 117,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,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,4,95,11,124,2,100,1,117,0,114,99,116,12,131,0, - 68,0,93,21,92,2,125,5,125,6,124,1,160,13,116,14, - 124,6,131,1,161,1,114,96,124,5,124,0,124,1,131,2, - 125,2,124,2,124,4,95,15,1,0,113,99,113,75,100,1, - 83,0,124,3,116,16,117,0,114,131,116,0,124,2,100,6, - 131,2,114,130,9,0,124,2,160,17,124,0,161,1,125,7, - 110,10,35,0,4,0,116,2,121,155,1,0,1,0,1,0, - 89,0,110,10,37,0,124,7,114,130,103,0,124,4,95,18, - 110,3,124,3,124,4,95,18,124,4,106,18,103,0,107,2, - 114,153,124,1,114,153,116,19,124,1,131,1,100,7,25,0, - 125,8,124,4,106,18,160,20,124,8,161,1,1,0,124,4, - 83,0,119,0,119,0,119,0,41,8,97,61,1,0,0,82, - 101,116,117,114,110,32,97,32,109,111,100,117,108,101,32,115, - 112,101,99,32,98,97,115,101,100,32,111,110,32,97,32,102, - 105,108,101,32,108,111,99,97,116,105,111,110,46,10,10,32, - 32,32,32,84,111,32,105,110,100,105,99,97,116,101,32,116, - 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,105, - 115,32,97,32,112,97,99,107,97,103,101,44,32,115,101,116, - 10,32,32,32,32,115,117,98,109,111,100,117,108,101,95,115, - 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,32, - 116,111,32,97,32,108,105,115,116,32,111,102,32,100,105,114, - 101,99,116,111,114,121,32,112,97,116,104,115,46,32,32,65, - 110,10,32,32,32,32,101,109,112,116,121,32,108,105,115,116, - 32,105,115,32,115,117,102,102,105,99,105,101,110,116,44,32, - 116,104,111,117,103,104,32,105,116,115,32,110,111,116,32,111, - 116,104,101,114,119,105,115,101,32,117,115,101,102,117,108,32, - 116,111,32,116,104,101,10,32,32,32,32,105,109,112,111,114, - 116,32,115,121,115,116,101,109,46,10,10,32,32,32,32,84, - 104,101,32,108,111,97,100,101,114,32,109,117,115,116,32,116, - 97,107,101,32,97,32,115,112,101,99,32,97,115,32,105,116, - 115,32,111,110,108,121,32,95,95,105,110,105,116,95,95,40, - 41,32,97,114,103,46,10,10,32,32,32,32,78,122,9,60, - 117,110,107,110,111,119,110,62,218,12,103,101,116,95,102,105, - 108,101,110,97,109,101,169,1,218,6,111,114,105,103,105,110, - 84,218,10,105,115,95,112,97,99,107,97,103,101,114,0,0, - 0,0,41,21,114,152,0,0,0,114,202,0,0,0,114,142, - 0,0,0,114,19,0,0,0,114,103,0,0,0,114,86,0, - 0,0,114,67,0,0,0,114,82,0,0,0,114,76,0,0, - 0,114,158,0,0,0,218,10,77,111,100,117,108,101,83,112, - 101,99,90,13,95,115,101,116,95,102,105,108,101,97,116,116, - 114,218,27,95,103,101,116,95,115,117,112,112,111,114,116,101, - 100,95,102,105,108,101,95,108,111,97,100,101,114,115,114,58, - 0,0,0,114,136,0,0,0,114,163,0,0,0,218,9,95, - 80,79,80,85,76,65,84,69,114,205,0,0,0,114,201,0, - 0,0,114,73,0,0,0,114,61,0,0,0,41,9,114,141, - 0,0,0,90,8,108,111,99,97,116,105,111,110,114,163,0, - 0,0,114,201,0,0,0,218,4,115,112,101,99,218,12,108, - 111,97,100,101,114,95,99,108,97,115,115,218,8,115,117,102, - 102,105,120,101,115,114,205,0,0,0,90,7,100,105,114,110, - 97,109,101,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,215,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,3,14,1,14, - 1,10,1,6,1,4,1,2,253,4,5,8,3,10,2,2, - 1,12,1,2,128,12,1,4,1,2,128,4,2,6,1,2, - 128,6,2,10,1,4,1,12,1,12,1,4,2,2,244,2, - 228,2,249,115,44,0,0,0,140,5,18,0,146,7,27,7, - 167,7,47,0,175,7,56,7,193,45,5,65,51,0,193,51, - 7,65,60,7,194,27,1,65,60,7,194,28,1,56,7,194, - 29,1,27,7,114,212,0,0,0,99,0,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,64,0,0,0,115,88, - 0,0,0,101,0,90,1,100,0,90,2,100,1,90,3,100, - 2,90,4,100,3,90,5,101,6,111,15,100,4,101,7,118, - 0,90,8,101,9,100,5,100,6,132,0,131,1,90,10,101, - 11,100,7,100,8,132,0,131,1,90,12,101,11,100,14,100, - 10,100,11,132,1,131,1,90,13,101,11,100,15,100,12,100, - 13,132,1,131,1,90,14,100,9,83,0,41,16,218,21,87, - 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, - 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, - 102,105,110,100,101,114,32,102,111,114,32,109,111,100,117,108, - 101,115,32,100,101,99,108,97,114,101,100,32,105,110,32,116, - 104,101,32,87,105,110,100,111,119,115,32,114,101,103,105,115, - 116,114,121,46,122,59,83,111,102,116,119,97,114,101,92,80, - 121,116,104,111,110,92,80,121,116,104,111,110,67,111,114,101, - 92,123,115,121,115,95,118,101,114,115,105,111,110,125,92,77, - 111,100,117,108,101,115,92,123,102,117,108,108,110,97,109,101, - 125,122,65,83,111,102,116,119,97,114,101,92,80,121,116,104, - 111,110,92,80,121,116,104,111,110,67,111,114,101,92,123,115, - 121,115,95,118,101,114,115,105,111,110,125,92,77,111,100,117, - 108,101,115,92,123,102,117,108,108,110,97,109,101,125,92,68, - 101,98,117,103,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,67,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,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,32,114,7,0,0,0,218,14,95,111,112,101,110, - 95,114,101,103,105,115,116,114,121,44,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,114,46,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,99,2,0,0,0,0,0,0,0, - 0,0,0,0,9,0,0,0,67,0,0,0,115,136,0,0, - 0,124,0,106,0,114,7,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,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,119,0,41,5,78,122,5,37,100, - 46,37,100,114,45,0,0,0,41,2,114,162,0,0,0,90, - 11,115,121,115,95,118,101,114,115,105,111,110,114,10,0,0, - 0,41,10,218,11,68,69,66,85,71,95,66,85,73,76,68, - 218,18,82,69,71,73,83,84,82,89,95,75,69,89,95,68, - 69,66,85,71,218,12,82,69,71,73,83,84,82,89,95,75, - 69,89,114,89,0,0,0,114,16,0,0,0,218,12,118,101, - 114,115,105,111,110,95,105,110,102,111,114,215,0,0,0,114, - 214,0,0,0,90,10,81,117,101,114,121,86,97,108,117,101, - 114,76,0,0,0,41,6,218,3,99,108,115,114,162,0,0, - 0,90,12,114,101,103,105,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,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,51,3,0,0,115,34,0,0,0,6,2,8,1,6,2, - 6,1,16,1,6,255,2,2,12,1,12,1,12,255,22,128, - 4,4,2,128,12,254,6,1,2,128,2,255,115,39,0,0, - 0,153,5,56,0,158,7,43,3,165,6,56,0,171,4,47, - 11,175,1,56,0,176,3,47,11,179,3,56,0,184,7,65, - 2,7,193,3,1,65,2,7,122,38,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, - 95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121, - 78,99,4,0,0,0,0,0,0,0,0,0,0,0,8,0, - 0,0,67,0,0,0,115,122,0,0,0,124,0,160,0,124, - 1,161,1,125,4,124,4,100,0,117,0,114,11,100,0,83, - 0,9,0,116,1,124,4,131,1,1,0,110,11,35,0,4, - 0,116,2,121,60,1,0,1,0,1,0,89,0,100,0,83, - 0,37,0,116,3,131,0,68,0,93,26,92,2,125,5,125, - 6,124,4,160,4,116,5,124,6,131,1,161,1,114,57,116, - 6,160,7,124,1,124,5,124,1,124,4,131,2,124,4,100, - 1,166,3,125,7,124,7,2,0,1,0,83,0,113,31,100, - 0,83,0,119,0,41,2,78,114,203,0,0,0,41,8,114, - 222,0,0,0,114,75,0,0,0,114,76,0,0,0,114,207, - 0,0,0,114,58,0,0,0,114,136,0,0,0,114,158,0, - 0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,111, - 97,100,101,114,41,8,114,220,0,0,0,114,162,0,0,0, - 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,32,32,32,32,32,32,32,32,114,7,0,0,0,218,9, - 102,105,110,100,95,115,112,101,99,66,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,0,0,140,4,17, - 0,145,7,27,7,188,1,27,7,122,31,87,105,110,100,111, - 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, - 46,102,105,110,100,95,115,112,101,99,99,3,0,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,67,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,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,114,101,103,105,115, - 116,114,121,46,10,10,32,32,32,32,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, - 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,32,32,32,32,122,112,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,40, - 41,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, - 97,110,100,32,115,108,97,116,101,100,32,102,111,114,32,114, - 101,109,111,118,97,108,32,105,110,32,80,121,116,104,111,110, - 32,51,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,169, - 5,114,99,0,0,0,114,100,0,0,0,114,101,0,0,0, - 114,225,0,0,0,114,163,0,0,0,169,4,114,220,0,0, - 0,114,162,0,0,0,114,65,0,0,0,114,209,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,82,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,2,78,78,114,69,0,0,0,41,15, - 114,149,0,0,0,114,148,0,0,0,114,150,0,0,0,114, - 151,0,0,0,114,218,0,0,0,114,217,0,0,0,218,11, - 95,77,83,95,87,73,78,68,79,87,83,218,18,69,88,84, - 69,78,83,73,79,78,95,83,85,70,70,73,88,69,83,114, - 216,0,0,0,218,12,115,116,97,116,105,99,109,101,116,104, - 111,100,114,215,0,0,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,7,0,0,0,114,213,0, - 0,0,32,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,0,0,0,64,0,0,0,115,48,0,0,0,101,0,90, - 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, - 4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,90, - 6,100,8,100,9,132,0,90,7,100,10,83,0,41,11,218, - 13,95,76,111,97,100,101,114,66,97,115,105,99,115,122,83, - 66,97,115,101,32,99,108,97,115,115,32,111,102,32,99,111, - 109,109,111,110,32,99,111,100,101,32,110,101,101,100,101,100, - 32,98,121,32,98,111,116,104,32,83,111,117,114,99,101,76, - 111,97,100,101,114,32,97,110,100,10,32,32,32,32,83,111, - 117,114,99,101,108,101,115,115,70,105,108,101,76,111,97,100, - 101,114,46,99,2,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,67,0,0,0,115,64,0,0,0,116,0,124, - 0,160,1,124,1,161,1,131,1,100,1,25,0,125,2,124, - 2,160,2,100,2,100,1,161,2,100,3,25,0,125,3,124, - 1,160,3,100,2,161,1,100,4,25,0,125,4,124,3,100, - 5,107,2,111,31,124,4,100,5,107,3,83,0,41,7,122, - 141,67,111,110,99,114,101,116,101,32,105,109,112,108,101,109, - 101,110,116,97,116,105,111,110,32,111,102,32,73,110,115,112, - 101,99,116,76,111,97,100,101,114,46,105,115,95,112,97,99, - 107,97,103,101,32,98,121,32,99,104,101,99,107,105,110,103, - 32,105,102,10,32,32,32,32,32,32,32,32,116,104,101,32, - 112,97,116,104,32,114,101,116,117,114,110,101,100,32,98,121, - 32,103,101,116,95,102,105,108,101,110,97,109,101,32,104,97, - 115,32,97,32,102,105,108,101,110,97,109,101,32,111,102,32, - 39,95,95,105,110,105,116,95,95,46,112,121,39,46,114,3, - 0,0,0,114,97,0,0,0,114,0,0,0,0,114,45,0, - 0,0,218,8,95,95,105,110,105,116,95,95,78,41,4,114, - 73,0,0,0,114,202,0,0,0,114,125,0,0,0,114,104, - 0,0,0,41,5,114,143,0,0,0,114,162,0,0,0,114, - 120,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,32,32, - 32,32,32,114,7,0,0,0,114,205,0,0,0,104,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,0,0,67,0, - 0,0,114,24,0,0,0,169,2,122,42,85,115,101,32,100, - 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, - 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, - 116,105,111,110,46,78,114,12,0,0,0,169,2,114,143,0, - 0,0,114,209,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,112,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, + 42,115,111,117,114,99,101,95,115,105,122,101,42,32,105,115, + 32,78,111,110,101,32,111,114,32,116,104,101,32,115,105,122, + 101,32,111,102,32,116,104,101,32,115,111,117,114,99,101,32, + 102,105,108,101,32,105,110,32,98,121,116,101,115,46,10,10, + 32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,104, + 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111, + 100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,114, + 116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,32, + 102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,32, + 32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,32, + 105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,32, + 112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,115, + 101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,111, + 118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,10, + 32,32,32,32,65,110,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,32,105,102,32, + 116,104,101,32,98,121,116,101,99,111,100,101,32,105,115,32, + 115,116,97,108,101,46,10,10,32,32,32,32,114,169,0,0, + 0,233,12,0,0,0,114,31,0,0,0,122,22,98,121,116, + 101,99,111,100,101,32,105,115,32,115,116,97,108,101,32,102, + 111,114,32,114,167,0,0,0,78,114,168,0,0,0,41,4, + 114,43,0,0,0,114,158,0,0,0,114,172,0,0,0,114, + 142,0,0,0,41,6,114,42,0,0,0,218,12,115,111,117, + 114,99,101,95,109,116,105,109,101,218,11,115,111,117,114,99, + 101,95,115,105,122,101,114,141,0,0,0,114,174,0,0,0, + 114,117,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,113,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,0,67, + 0,0,0,115,42,0,0,0,124,0,100,1,100,2,133,2, + 25,0,124,1,107,3,114,19,116,0,100,3,124,2,155,2, + 157,2,102,1,105,0,124,3,164,1,142,1,130,1,100,4, + 83,0,41,5,97,243,1,0,0,86,97,108,105,100,97,116, + 101,32,97,32,104,97,115,104,45,98,97,115,101,100,32,112, + 121,99,32,98,121,32,99,104,101,99,107,105,110,103,32,116, + 104,101,32,114,101,97,108,32,115,111,117,114,99,101,32,104, + 97,115,104,32,97,103,97,105,110,115,116,32,116,104,101,32, + 111,110,101,32,105,110,10,32,32,32,32,116,104,101,32,112, + 121,99,32,104,101,97,100,101,114,46,10,10,32,32,32,32, + 42,100,97,116,97,42,32,105,115,32,116,104,101,32,99,111, + 110,116,101,110,116,115,32,111,102,32,116,104,101,32,112,121, + 99,32,102,105,108,101,46,32,40,79,110,108,121,32,116,104, + 101,32,102,105,114,115,116,32,49,54,32,98,121,116,101,115, + 32,97,114,101,10,32,32,32,32,114,101,113,117,105,114,101, + 100,46,41,10,10,32,32,32,32,42,115,111,117,114,99,101, + 95,104,97,115,104,42,32,105,115,32,116,104,101,32,105,109, + 112,111,114,116,108,105,98,46,117,116,105,108,46,115,111,117, + 114,99,101,95,104,97,115,104,40,41,32,111,102,32,116,104, + 101,32,115,111,117,114,99,101,32,102,105,108,101,46,10,10, + 32,32,32,32,42,110,97,109,101,42,32,105,115,32,116,104, + 101,32,110,97,109,101,32,111,102,32,116,104,101,32,109,111, + 100,117,108,101,32,98,101,105,110,103,32,105,109,112,111,114, + 116,101,100,46,32,73,116,32,105,115,32,117,115,101,100,32, + 102,111,114,32,108,111,103,103,105,110,103,46,10,10,32,32, + 32,32,42,101,120,99,95,100,101,116,97,105,108,115,42,32, + 105,115,32,97,32,100,105,99,116,105,111,110,97,114,121,32, + 112,97,115,115,101,100,32,116,111,32,73,109,112,111,114,116, + 69,114,114,111,114,32,105,102,32,105,116,32,114,97,105,115, + 101,100,32,102,111,114,10,32,32,32,32,105,109,112,114,111, + 118,101,100,32,100,101,98,117,103,103,105,110,103,46,10,10, + 32,32,32,32,65,110,32,73,109,112,111,114,116,69,114,114, + 111,114,32,105,115,32,114,97,105,115,101,100,32,105,102,32, + 116,104,101,32,98,121,116,101,99,111,100,101,32,105,115,32, + 115,116,97,108,101,46,10,10,32,32,32,32,114,169,0,0, + 0,114,168,0,0,0,122,46,104,97,115,104,32,105,110,32, + 98,121,116,101,99,111,100,101,32,100,111,101,115,110,39,116, + 32,109,97,116,99,104,32,104,97,115,104,32,111,102,32,115, + 111,117,114,99,101,32,78,41,1,114,142,0,0,0,41,4, + 114,42,0,0,0,218,11,115,111,117,114,99,101,95,104,97, + 115,104,114,141,0,0,0,114,174,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,141,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,67,0,0,0,115, - 56,0,0,0,124,0,160,0,124,1,106,1,161,1,125,2, - 124,2,100,1,117,0,114,18,116,2,100,2,160,3,124,1, - 106,1,161,1,131,1,130,1,116,4,160,5,116,6,124,2, - 124,1,106,7,161,3,1,0,100,1,83,0,41,3,122,19, - 69,120,101,99,117,116,101,32,116,104,101,32,109,111,100,117, - 108,101,46,78,122,52,99,97,110,110,111,116,32,108,111,97, - 100,32,109,111,100,117,108,101,32,123,33,114,125,32,119,104, - 101,110,32,103,101,116,95,99,111,100,101,40,41,32,114,101, - 116,117,114,110,115,32,78,111,110,101,41,8,218,8,103,101, - 116,95,99,111,100,101,114,149,0,0,0,114,142,0,0,0, - 114,89,0,0,0,114,158,0,0,0,218,25,95,99,97,108, - 108,95,119,105,116,104,95,102,114,97,109,101,115,95,114,101, - 109,111,118,101,100,218,4,101,120,101,99,114,155,0,0,0, - 41,3,114,143,0,0,0,218,6,109,111,100,117,108,101,114, - 187,0,0,0,32,32,32,114,7,0,0,0,218,11,101,120, - 101,99,95,109,111,100,117,108,101,115,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, + 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,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,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,111,117,110,100,32,105,110, + 32,97,32,112,121,99,46,122,21,99,111,100,101,32,111,98, + 106,101,99,116,32,102,114,111,109,32,123,33,114,125,78,122, + 23,78,111,110,45,99,111,100,101,32,111,98,106,101,99,116, + 32,105,110,32,123,33,114,125,169,2,114,141,0,0,0,114, + 65,0,0,0,41,10,218,7,109,97,114,115,104,97,108,90, + 5,108,111,97,100,115,218,10,105,115,105,110,115,116,97,110, + 99,101,218,10,95,99,111,100,101,95,116,121,112,101,114,158, + 0,0,0,114,172,0,0,0,218,4,95,105,109,112,90,16, + 95,102,105,120,95,99,111,95,102,105,108,101,110,97,109,101, + 114,142,0,0,0,114,89,0,0,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,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,165,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,67,0,0,0,115,70,0, + 0,0,116,0,116,1,131,1,125,3,124,3,160,2,116,3, + 100,1,131,1,161,1,1,0,124,3,160,2,116,3,124,1, + 131,1,161,1,1,0,124,3,160,2,116,3,124,2,131,1, + 161,1,1,0,124,3,160,2,116,4,160,5,124,0,161,1, + 161,1,1,0,124,3,83,0,41,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,121,99,46,114,0,0,0,0,78,41,6,218, + 9,98,121,116,101,97,114,114,97,121,114,171,0,0,0,218, + 6,101,120,116,101,110,100,114,37,0,0,0,114,183,0,0, + 0,218,5,100,117,109,112,115,41,4,114,187,0,0,0,218, + 5,109,116,105,109,101,114,178,0,0,0,114,42,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,178,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, + 0,0,67,0,0,0,115,80,0,0,0,116,0,116,1,131, + 1,125,3,100,1,124,2,100,1,62,0,66,0,125,4,124, + 3,160,2,116,3,124,4,131,1,161,1,1,0,116,4,124, + 1,131,1,100,2,107,2,115,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,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,78, + 41,7,114,189,0,0,0,114,171,0,0,0,114,190,0,0, + 0,114,37,0,0,0,114,4,0,0,0,114,183,0,0,0, + 114,191,0,0,0,41,5,114,187,0,0,0,114,180,0,0, + 0,90,7,99,104,101,99,107,101,100,114,42,0,0,0,114, + 17,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,188,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,67,0,0,0,115,62,0,0,0,100,1,100,2, + 108,0,125,1,116,1,160,2,124,0,161,1,106,3,125,2, + 124,1,160,4,124,2,161,1,125,3,116,1,160,5,100,2, + 100,3,161,2,125,4,124,4,160,6,124,0,160,6,124,3, + 100,1,25,0,161,1,161,1,83,0,41,4,122,121,68,101, + 99,111,100,101,32,98,121,116,101,115,32,114,101,112,114,101, + 115,101,110,116,105,110,103,32,115,111,117,114,99,101,32,99, + 111,100,101,32,97,110,100,32,114,101,116,117,114,110,32,116, + 104,101,32,115,116,114,105,110,103,46,10,10,32,32,32,32, + 85,110,105,118,101,114,115,97,108,32,110,101,119,108,105,110, + 101,32,115,117,112,112,111,114,116,32,105,115,32,117,115,101, + 100,32,105,110,32,116,104,101,32,100,101,99,111,100,105,110, + 103,46,10,32,32,32,32,114,0,0,0,0,78,84,41,7, + 218,8,116,111,107,101,110,105,122,101,114,91,0,0,0,90, + 7,66,121,116,101,115,73,79,90,8,114,101,97,100,108,105, + 110,101,90,15,100,101,116,101,99,116,95,101,110,99,111,100, + 105,110,103,90,25,73,110,99,114,101,109,101,110,116,97,108, + 78,101,119,108,105,110,101,68,101,99,111,100,101,114,218,6, + 100,101,99,111,100,101,41,5,218,12,115,111,117,114,99,101, + 95,98,121,116,101,115,114,195,0,0,0,90,21,115,111,117, + 114,99,101,95,98,121,116,101,115,95,114,101,97,100,108,105, + 110,101,218,8,101,110,99,111,100,105,110,103,90,15,110,101, + 119,108,105,110,101,95,100,101,99,111,100,101,114,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,199,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,115,99,2,0,0,0,0,0,0,0,2, + 0,0,0,8,0,0,0,67,0,0,0,115,60,1,0,0, + 124,1,100,1,117,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,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,4,95,11,124,2,100,1,117,0,114,99, + 116,12,131,0,68,0,93,21,92,2,125,5,125,6,124,1, + 160,13,116,14,124,6,131,1,161,1,114,96,124,5,124,0, + 124,1,131,2,125,2,124,2,124,4,95,15,1,0,113,99, + 113,75,100,1,83,0,124,3,116,16,117,0,114,131,116,0, + 124,2,100,6,131,2,114,130,9,0,124,2,160,17,124,0, + 161,1,125,7,110,10,35,0,4,0,116,2,121,155,1,0, + 1,0,1,0,89,0,110,10,37,0,124,7,114,130,103,0, + 124,4,95,18,110,3,124,3,124,4,95,18,124,4,106,18, + 103,0,107,2,114,153,124,1,114,153,116,19,124,1,131,1, + 100,7,25,0,125,8,124,4,106,18,160,20,124,8,161,1, + 1,0,124,4,83,0,119,0,119,0,119,0,41,8,97,61, + 1,0,0,82,101,116,117,114,110,32,97,32,109,111,100,117, + 108,101,32,115,112,101,99,32,98,97,115,101,100,32,111,110, + 32,97,32,102,105,108,101,32,108,111,99,97,116,105,111,110, + 46,10,10,32,32,32,32,84,111,32,105,110,100,105,99,97, + 116,101,32,116,104,97,116,32,116,104,101,32,109,111,100,117, + 108,101,32,105,115,32,97,32,112,97,99,107,97,103,101,44, + 32,115,101,116,10,32,32,32,32,115,117,98,109,111,100,117, + 108,101,95,115,101,97,114,99,104,95,108,111,99,97,116,105, + 111,110,115,32,116,111,32,97,32,108,105,115,116,32,111,102, + 32,100,105,114,101,99,116,111,114,121,32,112,97,116,104,115, + 46,32,32,65,110,10,32,32,32,32,101,109,112,116,121,32, + 108,105,115,116,32,105,115,32,115,117,102,102,105,99,105,101, + 110,116,44,32,116,104,111,117,103,104,32,105,116,115,32,110, + 111,116,32,111,116,104,101,114,119,105,115,101,32,117,115,101, + 102,117,108,32,116,111,32,116,104,101,10,32,32,32,32,105, + 109,112,111,114,116,32,115,121,115,116,101,109,46,10,10,32, + 32,32,32,84,104,101,32,108,111,97,100,101,114,32,109,117, + 115,116,32,116,97,107,101,32,97,32,115,112,101,99,32,97, + 115,32,105,116,115,32,111,110,108,121,32,95,95,105,110,105, + 116,95,95,40,41,32,97,114,103,46,10,10,32,32,32,32, + 78,122,9,60,117,110,107,110,111,119,110,62,218,12,103,101, + 116,95,102,105,108,101,110,97,109,101,169,1,218,6,111,114, + 105,103,105,110,84,218,10,105,115,95,112,97,99,107,97,103, + 101,114,0,0,0,0,41,21,114,152,0,0,0,114,202,0, + 0,0,114,142,0,0,0,114,19,0,0,0,114,103,0,0, + 0,114,86,0,0,0,114,67,0,0,0,114,82,0,0,0, + 114,76,0,0,0,114,158,0,0,0,218,10,77,111,100,117, + 108,101,83,112,101,99,90,13,95,115,101,116,95,102,105,108, + 101,97,116,116,114,218,27,95,103,101,116,95,115,117,112,112, + 111,114,116,101,100,95,102,105,108,101,95,108,111,97,100,101, + 114,115,114,58,0,0,0,114,136,0,0,0,114,163,0,0, + 0,218,9,95,80,79,80,85,76,65,84,69,114,205,0,0, + 0,114,201,0,0,0,114,73,0,0,0,114,61,0,0,0, + 41,9,114,141,0,0,0,90,8,108,111,99,97,116,105,111, + 110,114,163,0,0,0,114,201,0,0,0,218,4,115,112,101, + 99,218,12,108,111,97,100,101,114,95,99,108,97,115,115,218, + 8,115,117,102,102,105,120,101,115,114,205,0,0,0,90,7, + 100,105,114,110,97,109,101,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,216,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, + 3,14,1,14,1,10,1,6,1,4,1,2,253,4,5,8, + 3,10,2,2,1,12,1,2,128,12,1,4,1,2,128,4, + 2,6,1,2,128,6,2,10,1,4,1,12,1,12,1,4, + 2,2,244,2,228,2,249,115,44,0,0,0,140,5,18,0, + 146,7,27,7,167,7,47,0,175,7,56,7,193,45,5,65, + 51,0,193,51,7,65,60,7,194,27,1,65,60,7,194,28, + 1,56,7,194,29,1,27,7,114,212,0,0,0,99,0,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,64,0, + 0,0,115,88,0,0,0,101,0,90,1,100,0,90,2,100, + 1,90,3,100,2,90,4,100,3,90,5,101,6,111,15,100, + 4,101,7,118,0,90,8,101,9,100,5,100,6,132,0,131, + 1,90,10,101,11,100,7,100,8,132,0,131,1,90,12,101, + 11,100,14,100,10,100,11,132,1,131,1,90,13,101,11,100, + 15,100,12,100,13,132,1,131,1,90,14,100,9,83,0,41, + 16,218,21,87,105,110,100,111,119,115,82,101,103,105,115,116, + 114,121,70,105,110,100,101,114,122,62,77,101,116,97,32,112, + 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,109, + 111,100,117,108,101,115,32,100,101,99,108,97,114,101,100,32, + 105,110,32,116,104,101,32,87,105,110,100,111,119,115,32,114, + 101,103,105,115,116,114,121,46,122,59,83,111,102,116,119,97, + 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, + 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, + 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, + 110,97,109,101,125,122,65,83,111,102,116,119,97,114,101,92, + 80,121,116,104,111,110,92,80,121,116,104,111,110,67,111,114, + 101,92,123,115,121,115,95,118,101,114,115,105,111,110,125,92, + 77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109, + 101,125,92,68,101,98,117,103,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,67,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,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,32,114,7,0,0,0,218,14,95, + 111,112,101,110,95,114,101,103,105,115,116,114,121,45,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,114,46,95,111,112, + 101,110,95,114,101,103,105,115,116,114,121,99,2,0,0,0, + 0,0,0,0,0,0,0,0,9,0,0,0,67,0,0,0, + 115,136,0,0,0,124,0,106,0,114,7,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,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,119,0,41,5,78, + 122,5,37,100,46,37,100,114,45,0,0,0,41,2,114,162, + 0,0,0,90,11,115,121,115,95,118,101,114,115,105,111,110, + 114,10,0,0,0,41,10,218,11,68,69,66,85,71,95,66, + 85,73,76,68,218,18,82,69,71,73,83,84,82,89,95,75, + 69,89,95,68,69,66,85,71,218,12,82,69,71,73,83,84, + 82,89,95,75,69,89,114,89,0,0,0,114,16,0,0,0, + 218,12,118,101,114,115,105,111,110,95,105,110,102,111,114,215, + 0,0,0,114,214,0,0,0,90,10,81,117,101,114,121,86, + 97,108,117,101,114,76,0,0,0,41,6,218,3,99,108,115, + 114,162,0,0,0,90,12,114,101,103,105,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,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,52,3,0,0,115,34,0,0,0,6,2, + 8,1,6,2,6,1,16,1,6,255,2,2,12,1,12,1, + 12,255,22,128,4,4,2,128,12,254,6,1,2,128,2,255, + 115,39,0,0,0,153,5,56,0,158,7,43,3,165,6,56, + 0,171,4,47,11,175,1,56,0,176,3,47,11,179,3,56, + 0,184,7,65,2,7,193,3,1,65,2,7,122,38,87,105, + 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, + 100,101,114,46,95,115,101,97,114,99,104,95,114,101,103,105, + 115,116,114,121,78,99,4,0,0,0,0,0,0,0,0,0, + 0,0,8,0,0,0,67,0,0,0,115,122,0,0,0,124, + 0,160,0,124,1,161,1,125,4,124,4,100,0,117,0,114, + 11,100,0,83,0,9,0,116,1,124,4,131,1,1,0,110, + 11,35,0,4,0,116,2,121,60,1,0,1,0,1,0,89, + 0,100,0,83,0,37,0,116,3,131,0,68,0,93,26,92, + 2,125,5,125,6,124,4,160,4,116,5,124,6,131,1,161, + 1,114,57,116,6,160,7,124,1,124,5,124,1,124,4,131, + 2,124,4,100,1,166,3,125,7,124,7,2,0,1,0,83, + 0,113,31,100,0,83,0,119,0,41,2,78,114,203,0,0, + 0,41,8,114,222,0,0,0,114,75,0,0,0,114,76,0, + 0,0,114,207,0,0,0,114,58,0,0,0,114,136,0,0, + 0,114,158,0,0,0,218,16,115,112,101,99,95,102,114,111, + 109,95,108,111,97,100,101,114,41,8,114,220,0,0,0,114, + 162,0,0,0,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,32,32,32,32,32,32,32,32,114,7,0, + 0,0,218,9,102,105,110,100,95,115,112,101,99,67,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,0, + 0,140,4,17,0,145,7,27,7,188,1,27,7,122,31,87, + 105,110,100,111,119,115,82,101,103,105,115,116,114,121,70,105, + 110,100,101,114,46,102,105,110,100,95,115,112,101,99,99,3, 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,67, - 0,0,0,115,12,0,0,0,116,0,160,1,124,0,124,1, - 161,2,83,0,41,2,122,26,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,78,41,2,114,158,0,0,0,218,17,95,108,111,97, - 100,95,109,111,100,117,108,101,95,115,104,105,109,169,2,114, - 143,0,0,0,114,162,0,0,0,32,32,114,7,0,0,0, - 218,11,108,111,97,100,95,109,111,100,117,108,101,123,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,7,0,0,0,114,234,0, - 0,0,99,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,64,0,0,0,115,74,0,0,0,101,0,90,1,100, - 0,90,2,100,1,100,2,132,0,90,3,100,3,100,4,132, - 0,90,4,100,5,100,6,132,0,90,5,100,7,100,8,132, - 0,90,6,100,9,100,10,132,0,90,7,100,11,100,12,156, - 1,100,13,100,14,132,2,90,8,100,15,100,16,132,0,90, - 9,100,17,83,0,41,18,218,12,83,111,117,114,99,101,76, - 111,97,100,101,114,99,2,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,116, - 0,130,1,41,2,122,165,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,116,104,97,116,32,114,101,116,117, - 114,110,115,32,116,104,101,32,109,111,100,105,102,105,99,97, - 116,105,111,110,32,116,105,109,101,32,40,97,110,32,105,110, - 116,41,32,102,111,114,32,116,104,101,10,32,32,32,32,32, - 32,32,32,115,112,101,99,105,102,105,101,100,32,112,97,116, - 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32, - 32,32,32,32,82,97,105,115,101,115,32,79,83,69,114,114, - 111,114,32,119,104,101,110,32,116,104,101,32,112,97,116,104, - 32,99,97,110,110,111,116,32,98,101,32,104,97,110,100,108, - 101,100,46,10,32,32,32,32,32,32,32,32,78,41,1,114, - 76,0,0,0,169,2,114,143,0,0,0,114,65,0,0,0, - 32,32,114,7,0,0,0,218,10,112,97,116,104,95,109,116, - 105,109,101,131,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,67,0,0, - 0,115,14,0,0,0,100,1,124,0,160,0,124,1,161,1, - 105,1,83,0,41,3,97,158,1,0,0,79,112,116,105,111, - 110,97,108,32,109,101,116,104,111,100,32,114,101,116,117,114, - 110,105,110,103,32,97,32,109,101,116,97,100,97,116,97,32, - 100,105,99,116,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,10,32,32,32,32,32,32,32,32,112, - 97,116,104,32,40,97,32,115,116,114,41,46,10,10,32,32, - 32,32,32,32,32,32,80,111,115,115,105,98,108,101,32,107, - 101,121,115,58,10,32,32,32,32,32,32,32,32,45,32,39, - 109,116,105,109,101,39,32,40,109,97,110,100,97,116,111,114, - 121,41,32,105,115,32,116,104,101,32,110,117,109,101,114,105, - 99,32,116,105,109,101,115,116,97,109,112,32,111,102,32,108, - 97,115,116,32,115,111,117,114,99,101,10,32,32,32,32,32, - 32,32,32,32,32,99,111,100,101,32,109,111,100,105,102,105, - 99,97,116,105,111,110,59,10,32,32,32,32,32,32,32,32, - 45,32,39,115,105,122,101,39,32,40,111,112,116,105,111,110, - 97,108,41,32,105,115,32,116,104,101,32,115,105,122,101,32, - 105,110,32,98,121,116,101,115,32,111,102,32,116,104,101,32, - 115,111,117,114,99,101,32,99,111,100,101,46,10,10,32,32, - 32,32,32,32,32,32,73,109,112,108,101,109,101,110,116,105, - 110,103,32,116,104,105,115,32,109,101,116,104,111,100,32,97, - 108,108,111,119,115,32,116,104,101,32,108,111,97,100,101,114, - 32,116,111,32,114,101,97,100,32,98,121,116,101,99,111,100, - 101,32,102,105,108,101,115,46,10,32,32,32,32,32,32,32, - 32,82,97,105,115,101,115,32,79,83,69,114,114,111,114,32, - 119,104,101,110,32,116,104,101,32,112,97,116,104,32,99,97, - 110,110,111,116,32,98,101,32,104,97,110,100,108,101,100,46, - 10,32,32,32,32,32,32,32,32,114,192,0,0,0,78,41, - 1,114,250,0,0,0,114,249,0,0,0,32,32,114,7,0, - 0,0,218,10,112,97,116,104,95,115,116,97,116,115,139,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,67,0,0,0,115,12,0,0, - 0,124,0,160,0,124,2,124,3,161,2,83,0,41,2,122, - 228,79,112,116,105,111,110,97,108,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,119,114,105,116,101,115,32,100,97, - 116,97,32,40,98,121,116,101,115,41,32,116,111,32,97,32, - 102,105,108,101,32,112,97,116,104,32,40,97,32,115,116,114, - 41,46,10,10,32,32,32,32,32,32,32,32,73,109,112,108, - 101,109,101,110,116,105,110,103,32,116,104,105,115,32,109,101, - 116,104,111,100,32,97,108,108,111,119,115,32,102,111,114,32, - 116,104,101,32,119,114,105,116,105,110,103,32,111,102,32,98, - 121,116,101,99,111,100,101,32,102,105,108,101,115,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,115,111,117,114, - 99,101,32,112,97,116,104,32,105,115,32,110,101,101,100,101, - 100,32,105,110,32,111,114,100,101,114,32,116,111,32,99,111, - 114,114,101,99,116,108,121,32,116,114,97,110,115,102,101,114, - 32,112,101,114,109,105,115,115,105,111,110,115,10,32,32,32, - 32,32,32,32,32,78,41,1,218,8,115,101,116,95,100,97, - 116,97,41,4,114,143,0,0,0,114,134,0,0,0,90,10, - 99,97,99,104,101,95,112,97,116,104,114,42,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,153,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,67,0,0,0,114,24,0,0, - 0,41,2,122,150,79,112,116,105,111,110,97,108,32,109,101, + 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, + 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,114, + 101,103,105,115,116,114,121,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 122,112,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,40,41,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,32,97,110,100,32,115,108,97,116,101,100,32,102, + 111,114,32,114,101,109,111,118,97,108,32,105,110,32,80,121, + 116,104,111,110,32,51,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,169,5,114,99,0,0,0,114,100,0,0,0,114, + 101,0,0,0,114,225,0,0,0,114,163,0,0,0,169,4, + 114,220,0,0,0,114,162,0,0,0,114,65,0,0,0,114, + 209,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,83,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,2,78,78,114,69,0, + 0,0,41,15,114,149,0,0,0,114,148,0,0,0,114,150, + 0,0,0,114,151,0,0,0,114,218,0,0,0,114,217,0, + 0,0,218,11,95,77,83,95,87,73,78,68,79,87,83,218, + 18,69,88,84,69,78,83,73,79,78,95,83,85,70,70,73, + 88,69,83,114,216,0,0,0,218,12,115,116,97,116,105,99, + 109,101,116,104,111,100,114,215,0,0,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,7,0,0, + 0,114,213,0,0,0,33,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,0,0,0,64,0,0,0,115,48,0,0, + 0,101,0,90,1,100,0,90,2,100,1,90,3,100,2,100, + 3,132,0,90,4,100,4,100,5,132,0,90,5,100,6,100, + 7,132,0,90,6,100,8,100,9,132,0,90,7,100,10,83, + 0,41,11,218,13,95,76,111,97,100,101,114,66,97,115,105, + 99,115,122,83,66,97,115,101,32,99,108,97,115,115,32,111, + 102,32,99,111,109,109,111,110,32,99,111,100,101,32,110,101, + 101,100,101,100,32,98,121,32,98,111,116,104,32,83,111,117, + 114,99,101,76,111,97,100,101,114,32,97,110,100,10,32,32, + 32,32,83,111,117,114,99,101,108,101,115,115,70,105,108,101, + 76,111,97,100,101,114,46,99,2,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,67,0,0,0,115,64,0,0, + 0,116,0,124,0,160,1,124,1,161,1,131,1,100,1,25, + 0,125,2,124,2,160,2,100,2,100,1,161,2,100,3,25, + 0,125,3,124,1,160,3,100,2,161,1,100,4,25,0,125, + 4,124,3,100,5,107,2,111,31,124,4,100,5,107,3,83, + 0,41,7,122,141,67,111,110,99,114,101,116,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 73,110,115,112,101,99,116,76,111,97,100,101,114,46,105,115, + 95,112,97,99,107,97,103,101,32,98,121,32,99,104,101,99, + 107,105,110,103,32,105,102,10,32,32,32,32,32,32,32,32, + 116,104,101,32,112,97,116,104,32,114,101,116,117,114,110,101, + 100,32,98,121,32,103,101,116,95,102,105,108,101,110,97,109, + 101,32,104,97,115,32,97,32,102,105,108,101,110,97,109,101, + 32,111,102,32,39,95,95,105,110,105,116,95,95,46,112,121, + 39,46,114,3,0,0,0,114,97,0,0,0,114,0,0,0, + 0,114,45,0,0,0,218,8,95,95,105,110,105,116,95,95, + 78,41,4,114,73,0,0,0,114,202,0,0,0,114,125,0, + 0,0,114,104,0,0,0,41,5,114,143,0,0,0,114,162, + 0,0,0,114,120,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,32,32,32,32,32,114,7,0,0,0,114,205,0,0, + 0,105,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, + 0,0,67,0,0,0,114,24,0,0,0,169,2,122,42,85, + 115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,110, + 116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,32, + 99,114,101,97,116,105,111,110,46,78,114,12,0,0,0,169, + 2,114,143,0,0,0,114,209,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,113,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,5,0,0,0,67, + 0,0,0,115,56,0,0,0,124,0,160,0,124,1,106,1, + 161,1,125,2,124,2,100,1,117,0,114,18,116,2,100,2, + 160,3,124,1,106,1,161,1,131,1,130,1,116,4,160,5, + 116,6,124,2,124,1,106,7,161,3,1,0,100,1,83,0, + 41,3,122,19,69,120,101,99,117,116,101,32,116,104,101,32, + 109,111,100,117,108,101,46,78,122,52,99,97,110,110,111,116, + 32,108,111,97,100,32,109,111,100,117,108,101,32,123,33,114, + 125,32,119,104,101,110,32,103,101,116,95,99,111,100,101,40, + 41,32,114,101,116,117,114,110,115,32,78,111,110,101,41,8, + 218,8,103,101,116,95,99,111,100,101,114,149,0,0,0,114, + 142,0,0,0,114,89,0,0,0,114,158,0,0,0,218,25, + 95,99,97,108,108,95,119,105,116,104,95,102,114,97,109,101, + 115,95,114,101,109,111,118,101,100,218,4,101,120,101,99,114, + 155,0,0,0,41,3,114,143,0,0,0,218,6,109,111,100, + 117,108,101,114,187,0,0,0,32,32,32,114,7,0,0,0, + 218,11,101,120,101,99,95,109,111,100,117,108,101,116,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,0,0,0,0,0,0,0,0,0,4, + 0,0,0,67,0,0,0,115,12,0,0,0,116,0,160,1, + 124,0,124,1,161,2,83,0,41,2,122,26,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,78,41,2,114,158,0,0,0,218,17, + 95,108,111,97,100,95,109,111,100,117,108,101,95,115,104,105, + 109,169,2,114,143,0,0,0,114,162,0,0,0,32,32,114, + 7,0,0,0,218,11,108,111,97,100,95,109,111,100,117,108, + 101,124,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,7,0,0, + 0,114,234,0,0,0,100,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,64,0,0,0,115,74,0,0,0,101, + 0,90,1,100,0,90,2,100,1,100,2,132,0,90,3,100, + 3,100,4,132,0,90,4,100,5,100,6,132,0,90,5,100, + 7,100,8,132,0,90,6,100,9,100,10,132,0,90,7,100, + 11,100,12,156,1,100,13,100,14,132,2,90,8,100,15,100, + 16,132,0,90,9,100,17,83,0,41,18,218,12,83,111,117, + 114,99,101,76,111,97,100,101,114,99,2,0,0,0,0,0, + 0,0,0,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,116,0,130,1,41,2,122,165,79,112,116,105,111, + 110,97,108,32,109,101,116,104,111,100,32,116,104,97,116,32, + 114,101,116,117,114,110,115,32,116,104,101,32,109,111,100,105, + 102,105,99,97,116,105,111,110,32,116,105,109,101,32,40,97, + 110,32,105,110,116,41,32,102,111,114,32,116,104,101,10,32, + 32,32,32,32,32,32,32,115,112,101,99,105,102,105,101,100, + 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, + 32,32,32,32,32,32,32,32,82,97,105,115,101,115,32,79, + 83,69,114,114,111,114,32,119,104,101,110,32,116,104,101,32, + 112,97,116,104,32,99,97,110,110,111,116,32,98,101,32,104, + 97,110,100,108,101,100,46,10,32,32,32,32,32,32,32,32, + 78,41,1,114,76,0,0,0,169,2,114,143,0,0,0,114, + 65,0,0,0,32,32,114,7,0,0,0,218,10,112,97,116, + 104,95,109,116,105,109,101,132,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,67,0,0,0,115,14,0,0,0,100,1,124,0,160,0, + 124,1,161,1,105,1,83,0,41,3,97,158,1,0,0,79, + 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,114, + 101,116,117,114,110,105,110,103,32,97,32,109,101,116,97,100, + 97,116,97,32,100,105,99,116,32,102,111,114,32,116,104,101, + 32,115,112,101,99,105,102,105,101,100,10,32,32,32,32,32, + 32,32,32,112,97,116,104,32,40,97,32,115,116,114,41,46, + 10,10,32,32,32,32,32,32,32,32,80,111,115,115,105,98, + 108,101,32,107,101,121,115,58,10,32,32,32,32,32,32,32, + 32,45,32,39,109,116,105,109,101,39,32,40,109,97,110,100, + 97,116,111,114,121,41,32,105,115,32,116,104,101,32,110,117, + 109,101,114,105,99,32,116,105,109,101,115,116,97,109,112,32, + 111,102,32,108,97,115,116,32,115,111,117,114,99,101,10,32, + 32,32,32,32,32,32,32,32,32,99,111,100,101,32,109,111, + 100,105,102,105,99,97,116,105,111,110,59,10,32,32,32,32, + 32,32,32,32,45,32,39,115,105,122,101,39,32,40,111,112, + 116,105,111,110,97,108,41,32,105,115,32,116,104,101,32,115, + 105,122,101,32,105,110,32,98,121,116,101,115,32,111,102,32, + 116,104,101,32,115,111,117,114,99,101,32,99,111,100,101,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,116,104,101,32,108,111, + 97,100,101,114,32,116,111,32,114,101,97,100,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,32,32,32, + 32,32,32,32,32,82,97,105,115,101,115,32,79,83,69,114, + 114,111,114,32,119,104,101,110,32,116,104,101,32,112,97,116, + 104,32,99,97,110,110,111,116,32,98,101,32,104,97,110,100, + 108,101,100,46,10,32,32,32,32,32,32,32,32,114,192,0, + 0,0,78,41,1,114,250,0,0,0,114,249,0,0,0,32, + 32,114,7,0,0,0,218,10,112,97,116,104,95,115,116,97, + 116,115,140,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,67,0,0,0, + 115,12,0,0,0,124,0,160,0,124,2,124,3,161,2,83, + 0,41,2,122,228,79,112,116,105,111,110,97,108,32,109,101, 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, @@ -1350,1420 +1326,1443 @@ const unsigned char _Py_M__importlib_bootstrap_external[] = { 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 115,46,10,32,32,32,32,32,32,32,32,78,114,12,0,0, - 0,41,3,114,143,0,0,0,114,65,0,0,0,114,42,0, - 0,0,32,32,32,114,7,0,0,0,114,252,0,0,0,163, - 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,0,67,0,0,0,115,70,0,0,0,124,0, - 160,0,124,1,161,1,125,2,9,0,124,0,160,1,124,2, - 161,1,125,3,116,4,124,3,131,1,83,0,35,0,4,0, - 116,2,121,34,1,0,125,4,1,0,116,3,100,1,124,1, - 100,2,141,2,124,4,130,2,100,3,125,4,126,4,119,1, - 37,0,119,0,41,4,122,52,67,111,110,99,114,101,116,101, + 115,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, + 115,111,117,114,99,101,32,112,97,116,104,32,105,115,32,110, + 101,101,100,101,100,32,105,110,32,111,114,100,101,114,32,116, + 111,32,99,111,114,114,101,99,116,108,121,32,116,114,97,110, + 115,102,101,114,32,112,101,114,109,105,115,115,105,111,110,115, + 10,32,32,32,32,32,32,32,32,78,41,1,218,8,115,101, + 116,95,100,97,116,97,41,4,114,143,0,0,0,114,134,0, + 0,0,90,10,99,97,99,104,101,95,112,97,116,104,114,42, + 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,154,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,67,0,0,0, + 114,24,0,0,0,41,2,122,150,79,112,116,105,111,110,97, + 108,32,109,101,116,104,111,100,32,119,104,105,99,104,32,119, + 114,105,116,101,115,32,100,97,116,97,32,40,98,121,116,101, + 115,41,32,116,111,32,97,32,102,105,108,101,32,112,97,116, + 104,32,40,97,32,115,116,114,41,46,10,10,32,32,32,32, + 32,32,32,32,73,109,112,108,101,109,101,110,116,105,110,103, + 32,116,104,105,115,32,109,101,116,104,111,100,32,97,108,108, + 111,119,115,32,102,111,114,32,116,104,101,32,119,114,105,116, + 105,110,103,32,111,102,32,98,121,116,101,99,111,100,101,32, + 102,105,108,101,115,46,10,32,32,32,32,32,32,32,32,78, + 114,12,0,0,0,41,3,114,143,0,0,0,114,65,0,0, + 0,114,42,0,0,0,32,32,32,114,7,0,0,0,114,252, + 0,0,0,164,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,0,67,0,0,0,115,70,0, + 0,0,124,0,160,0,124,1,161,1,125,2,9,0,124,0, + 160,1,124,2,161,1,125,3,116,4,124,3,131,1,83,0, + 35,0,4,0,116,2,121,34,1,0,125,4,1,0,116,3, + 100,1,124,1,100,2,141,2,124,4,130,2,100,3,125,4, + 126,4,119,1,37,0,119,0,41,4,122,52,67,111,110,99, + 114,101,116,101,32,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,32,111,102,32,73,110,115,112,101,99,116,76,111, + 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,46, + 122,39,115,111,117,114,99,101,32,110,111,116,32,97,118,97, + 105,108,97,98,108,101,32,116,104,114,111,117,103,104,32,103, + 101,116,95,100,97,116,97,40,41,114,140,0,0,0,78,41, + 5,114,202,0,0,0,218,8,103,101,116,95,100,97,116,97, + 114,76,0,0,0,114,142,0,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,32,32,32,32,32,114, + 7,0,0,0,218,10,103,101,116,95,115,111,117,114,99,101, + 171,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,7,157,4,33,7,162,1,33,7,122,23,83,111, + 117,114,99,101,76,111,97,100,101,114,46,103,101,116,95,115, + 111,117,114,99,101,114,130,0,0,0,41,1,218,9,95,111, + 112,116,105,109,105,122,101,99,3,0,0,0,0,0,0,0, + 1,0,0,0,9,0,0,0,67,0,0,0,115,22,0,0, + 0,116,0,160,1,116,2,124,1,124,2,100,1,100,2,124, + 3,100,3,166,6,83,0,41,5,122,130,82,101,116,117,114, + 110,32,116,104,101,32,99,111,100,101,32,111,98,106,101,99, + 116,32,99,111,109,112,105,108,101,100,32,102,114,111,109,32, + 115,111,117,114,99,101,46,10,10,32,32,32,32,32,32,32, + 32,84,104,101,32,39,100,97,116,97,39,32,97,114,103,117, + 109,101,110,116,32,99,97,110,32,98,101,32,97,110,121,32, + 111,98,106,101,99,116,32,116,121,112,101,32,116,104,97,116, + 32,99,111,109,112,105,108,101,40,41,32,115,117,112,112,111, + 114,116,115,46,10,32,32,32,32,32,32,32,32,114,242,0, + 0,0,84,41,2,218,12,100,111,110,116,95,105,110,104,101, + 114,105,116,114,108,0,0,0,78,41,3,114,158,0,0,0, + 114,241,0,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,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,181,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,99,2, + 0,0,0,0,0,0,0,0,0,0,0,9,0,0,0,67, + 0,0,0,115,28,2,0,0,124,0,160,0,124,1,161,1, + 125,2,100,1,125,3,100,1,125,4,100,1,125,5,100,2, + 125,6,100,3,125,7,9,0,116,1,124,2,131,1,125,8, + 110,13,35,0,4,0,116,2,144,1,121,13,1,0,1,0, + 1,0,100,1,125,8,89,0,110,147,37,0,9,0,124,0, + 160,3,124,2,161,1,125,9,110,11,35,0,4,0,116,4, + 144,1,121,12,1,0,1,0,1,0,89,0,110,129,37,0, + 116,5,124,9,100,4,25,0,131,1,125,3,9,0,124,0, + 160,6,124,8,161,1,125,10,110,11,35,0,4,0,116,4, + 144,1,121,11,1,0,1,0,1,0,89,0,110,105,37,0, + 124,1,124,8,100,5,156,2,125,11,9,0,116,7,124,10, + 124,1,124,11,131,3,125,12,116,8,124,10,131,1,100,6, + 100,1,133,2,25,0,125,13,124,12,100,7,64,0,100,8, + 107,3,125,6,124,6,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,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,110,16, + 37,0,116,17,160,18,100,13,124,8,124,2,161,3,1,0, + 116,19,124,13,124,1,124,8,124,2,100,14,141,4,83,0, + 124,4,100,1,117,0,114,189,124,0,160,6,124,2,161,1, + 125,4,124,0,160,20,124,4,124,2,161,2,125,14,116,17, + 160,18,100,15,124,2,161,2,1,0,116,21,106,22,144,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,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,35,0, + 4,0,116,2,144,1,121,9,1,0,1,0,1,0,89,0, + 124,14,83,0,37,0,124,14,83,0,119,0,119,0,119,0, + 119,0,119,0,41,16,122,190,67,111,110,99,114,101,116,101, 32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32, 111,102,32,73,110,115,112,101,99,116,76,111,97,100,101,114, - 46,103,101,116,95,115,111,117,114,99,101,46,122,39,115,111, - 117,114,99,101,32,110,111,116,32,97,118,97,105,108,97,98, - 108,101,32,116,104,114,111,117,103,104,32,103,101,116,95,100, - 97,116,97,40,41,114,140,0,0,0,78,41,5,114,202,0, - 0,0,218,8,103,101,116,95,100,97,116,97,114,76,0,0, - 0,114,142,0,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,32,32,32,32,32,114,7,0,0,0, - 218,10,103,101,116,95,115,111,117,114,99,101,170,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,7, - 157,4,33,7,162,1,33,7,122,23,83,111,117,114,99,101, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,114,130,0,0,0,41,1,218,9,95,111,112,116,105,109, - 105,122,101,99,3,0,0,0,0,0,0,0,1,0,0,0, - 9,0,0,0,67,0,0,0,115,22,0,0,0,116,0,160, - 1,116,2,124,1,124,2,100,1,100,2,124,3,100,3,166, - 6,83,0,41,5,122,130,82,101,116,117,114,110,32,116,104, - 101,32,99,111,100,101,32,111,98,106,101,99,116,32,99,111, - 109,112,105,108,101,100,32,102,114,111,109,32,115,111,117,114, - 99,101,46,10,10,32,32,32,32,32,32,32,32,84,104,101, - 32,39,100,97,116,97,39,32,97,114,103,117,109,101,110,116, - 32,99,97,110,32,98,101,32,97,110,121,32,111,98,106,101, - 99,116,32,116,121,112,101,32,116,104,97,116,32,99,111,109, - 112,105,108,101,40,41,32,115,117,112,112,111,114,116,115,46, - 10,32,32,32,32,32,32,32,32,114,242,0,0,0,84,41, - 2,218,12,100,111,110,116,95,105,110,104,101,114,105,116,114, - 108,0,0,0,78,41,3,114,158,0,0,0,114,241,0,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, - 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,180,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,99,2,0,0,0,0, - 0,0,0,0,0,0,0,9,0,0,0,67,0,0,0,115, - 28,2,0,0,124,0,160,0,124,1,161,1,125,2,100,1, - 125,3,100,1,125,4,100,1,125,5,100,2,125,6,100,3, - 125,7,9,0,116,1,124,2,131,1,125,8,110,13,35,0, - 4,0,116,2,144,1,121,13,1,0,1,0,1,0,100,1, - 125,8,89,0,110,147,37,0,9,0,124,0,160,3,124,2, - 161,1,125,9,110,11,35,0,4,0,116,4,144,1,121,12, - 1,0,1,0,1,0,89,0,110,129,37,0,116,5,124,9, - 100,4,25,0,131,1,125,3,9,0,124,0,160,6,124,8, - 161,1,125,10,110,11,35,0,4,0,116,4,144,1,121,11, - 1,0,1,0,1,0,89,0,110,105,37,0,124,1,124,8, - 100,5,156,2,125,11,9,0,116,7,124,10,124,1,124,11, - 131,3,125,12,116,8,124,10,131,1,100,6,100,1,133,2, - 25,0,125,13,124,12,100,7,64,0,100,8,107,3,125,6, - 124,6,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,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,110,16,37,0,116,17, - 160,18,100,13,124,8,124,2,161,3,1,0,116,19,124,13, - 124,1,124,8,124,2,100,14,141,4,83,0,124,4,100,1, - 117,0,114,189,124,0,160,6,124,2,161,1,125,4,124,0, - 160,20,124,4,124,2,161,2,125,14,116,17,160,18,100,15, - 124,2,161,2,1,0,116,21,106,22,144,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,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,35,0,4,0,116,2, - 144,1,121,9,1,0,1,0,1,0,89,0,124,14,83,0, - 37,0,124,14,83,0,119,0,119,0,119,0,119,0,119,0, - 41,16,122,190,67,111,110,99,114,101,116,101,32,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,73, - 110,115,112,101,99,116,76,111,97,100,101,114,46,103,101,116, - 95,99,111,100,101,46,10,10,32,32,32,32,32,32,32,32, - 82,101,97,100,105,110,103,32,111,102,32,98,121,116,101,99, - 111,100,101,32,114,101,113,117,105,114,101,115,32,112,97,116, - 104,95,115,116,97,116,115,32,116,111,32,98,101,32,105,109, - 112,108,101,109,101,110,116,101,100,46,32,84,111,32,119,114, - 105,116,101,10,32,32,32,32,32,32,32,32,98,121,116,101, - 99,111,100,101,44,32,115,101,116,95,100,97,116,97,32,109, - 117,115,116,32,97,108,115,111,32,98,101,32,105,109,112,108, - 101,109,101,110,116,101,100,46,10,10,32,32,32,32,32,32, - 32,32,78,70,84,114,192,0,0,0,114,182,0,0,0,114, - 168,0,0,0,114,3,0,0,0,114,0,0,0,0,114,45, - 0,0,0,90,5,110,101,118,101,114,90,6,97,108,119,97, - 121,115,218,4,115,105,122,101,122,13,123,125,32,109,97,116, - 99,104,101,115,32,123,125,41,3,114,141,0,0,0,114,132, - 0,0,0,114,134,0,0,0,122,19,99,111,100,101,32,111, - 98,106,101,99,116,32,102,114,111,109,32,123,125,41,27,114, - 202,0,0,0,114,121,0,0,0,114,107,0,0,0,114,251, - 0,0,0,114,76,0,0,0,114,34,0,0,0,114,254,0, - 0,0,114,175,0,0,0,218,10,109,101,109,111,114,121,118, - 105,101,119,114,186,0,0,0,90,21,99,104,101,99,107,95, - 104,97,115,104,95,98,97,115,101,100,95,112,121,99,115,114, - 180,0,0,0,218,17,95,82,65,87,95,77,65,71,73,67, - 95,78,85,77,66,69,82,114,181,0,0,0,114,179,0,0, - 0,114,142,0,0,0,114,173,0,0,0,114,158,0,0,0, - 114,172,0,0,0,114,188,0,0,0,114,4,1,0,0,114, - 16,0,0,0,218,19,100,111,110,116,95,119,114,105,116,101, - 95,98,121,116,101,99,111,100,101,114,194,0,0,0,114,193, - 0,0,0,114,4,0,0,0,114,253,0,0,0,41,15,114, - 143,0,0,0,114,162,0,0,0,114,134,0,0,0,114,177, - 0,0,0,114,197,0,0,0,114,180,0,0,0,90,10,104, - 97,115,104,95,98,97,115,101,100,90,12,99,104,101,99,107, - 95,115,111,117,114,99,101,114,132,0,0,0,218,2,115,116, - 114,42,0,0,0,114,174,0,0,0,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,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,188,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,128,14,1,4,1,2,128,2,3,2,1, - 6,254,2,4,12,1,16,1,12,1,4,1,12,1,10,1, - 2,1,2,255,8,2,2,254,10,3,4,1,2,1,2,1, - 4,254,8,4,2,1,4,255,2,128,2,3,2,1,2,1, - 6,1,2,1,2,1,4,251,4,128,18,7,4,1,2,128, - 8,2,2,1,4,255,6,2,2,1,2,1,6,254,8,3, - 10,1,12,1,12,1,18,1,6,1,4,255,4,2,8,1, - 10,1,14,1,6,2,6,1,4,255,2,2,14,1,4,3, - 2,128,14,254,2,1,4,1,2,128,4,0,2,254,2,233, - 2,225,2,250,2,251,115,80,0,0,0,144,4,21,0,149, - 10,33,7,163,5,41,0,169,8,51,7,187,5,65,1,0, - 193,1,8,65,11,7,193,18,65,5,66,24,0,194,24,10, - 66,36,7,195,50,7,67,59,0,195,59,8,68,6,7,196, - 9,1,68,6,7,196,10,1,66,36,7,196,11,1,65,11, - 7,196,12,1,51,7,196,13,1,33,7,122,21,83,111,117, - 114,99,101,76,111,97,100,101,114,46,103,101,116,95,99,111, - 100,101,78,41,10,114,149,0,0,0,114,148,0,0,0,114, - 150,0,0,0,114,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,7,0,0, - 0,114,248,0,0,0,129,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, - 0,0,0,135,0,101,0,90,1,100,0,90,2,100,1,90, - 3,100,2,100,3,132,0,90,4,100,4,100,5,132,0,90, - 5,100,6,100,7,132,0,90,6,101,7,136,0,102,1,100, - 8,100,9,132,8,131,1,90,8,101,7,100,10,100,11,132, - 0,131,1,90,9,100,12,100,13,132,0,90,10,101,7,100, - 14,100,15,132,0,131,1,90,11,136,0,4,0,90,12,83, - 0,41,16,218,10,70,105,108,101,76,111,97,100,101,114,122, - 103,66,97,115,101,32,102,105,108,101,32,108,111,97,100,101, - 114,32,99,108,97,115,115,32,119,104,105,99,104,32,105,109, - 112,108,101,109,101,110,116,115,32,116,104,101,32,108,111,97, - 100,101,114,32,112,114,111,116,111,99,111,108,32,109,101,116, - 104,111,100,115,32,116,104,97,116,10,32,32,32,32,114,101, - 113,117,105,114,101,32,102,105,108,101,32,115,121,115,116,101, - 109,32,117,115,97,103,101,46,99,3,0,0,0,0,0,0, - 0,0,0,0,0,2,0,0,0,67,0,0,0,115,16,0, - 0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,1, - 83,0,41,2,122,75,67,97,99,104,101,32,116,104,101,32, - 109,111,100,117,108,101,32,110,97,109,101,32,97,110,100,32, - 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, - 102,105,108,101,32,102,111,117,110,100,32,98,121,32,116,104, - 101,10,32,32,32,32,32,32,32,32,102,105,110,100,101,114, - 46,78,114,182,0,0,0,41,3,114,143,0,0,0,114,162, - 0,0,0,114,65,0,0,0,32,32,32,114,7,0,0,0, - 114,235,0,0,0,22,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, + 46,103,101,116,95,99,111,100,101,46,10,10,32,32,32,32, + 32,32,32,32,82,101,97,100,105,110,103,32,111,102,32,98, + 121,116,101,99,111,100,101,32,114,101,113,117,105,114,101,115, + 32,112,97,116,104,95,115,116,97,116,115,32,116,111,32,98, + 101,32,105,109,112,108,101,109,101,110,116,101,100,46,32,84, + 111,32,119,114,105,116,101,10,32,32,32,32,32,32,32,32, + 98,121,116,101,99,111,100,101,44,32,115,101,116,95,100,97, + 116,97,32,109,117,115,116,32,97,108,115,111,32,98,101,32, + 105,109,112,108,101,109,101,110,116,101,100,46,10,10,32,32, + 32,32,32,32,32,32,78,70,84,114,192,0,0,0,114,182, + 0,0,0,114,168,0,0,0,114,3,0,0,0,114,0,0, + 0,0,114,45,0,0,0,90,5,110,101,118,101,114,90,6, + 97,108,119,97,121,115,218,4,115,105,122,101,122,13,123,125, + 32,109,97,116,99,104,101,115,32,123,125,41,3,114,141,0, + 0,0,114,132,0,0,0,114,134,0,0,0,122,19,99,111, + 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, + 125,41,27,114,202,0,0,0,114,121,0,0,0,114,107,0, + 0,0,114,251,0,0,0,114,76,0,0,0,114,34,0,0, + 0,114,254,0,0,0,114,175,0,0,0,218,10,109,101,109, + 111,114,121,118,105,101,119,114,186,0,0,0,90,21,99,104, + 101,99,107,95,104,97,115,104,95,98,97,115,101,100,95,112, + 121,99,115,114,180,0,0,0,218,17,95,82,65,87,95,77, + 65,71,73,67,95,78,85,77,66,69,82,114,181,0,0,0, + 114,179,0,0,0,114,142,0,0,0,114,173,0,0,0,114, + 158,0,0,0,114,172,0,0,0,114,188,0,0,0,114,4, + 1,0,0,114,16,0,0,0,218,19,100,111,110,116,95,119, + 114,105,116,101,95,98,121,116,101,99,111,100,101,114,194,0, + 0,0,114,193,0,0,0,114,4,0,0,0,114,253,0,0, + 0,41,15,114,143,0,0,0,114,162,0,0,0,114,134,0, + 0,0,114,177,0,0,0,114,197,0,0,0,114,180,0,0, + 0,90,10,104,97,115,104,95,98,97,115,101,100,90,12,99, + 104,101,99,107,95,115,111,117,114,99,101,114,132,0,0,0, + 218,2,115,116,114,42,0,0,0,114,174,0,0,0,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,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,189,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,128,14,1,4,1,2,128, + 2,3,2,1,6,254,2,4,12,1,16,1,12,1,4,1, + 12,1,10,1,2,1,2,255,8,2,2,254,10,3,4,1, + 2,1,2,1,4,254,8,4,2,1,4,255,2,128,2,3, + 2,1,2,1,6,1,2,1,2,1,4,251,4,128,18,7, + 4,1,2,128,8,2,2,1,4,255,6,2,2,1,2,1, + 6,254,8,3,10,1,12,1,12,1,18,1,6,1,4,255, + 4,2,8,1,10,1,14,1,6,2,6,1,4,255,2,2, + 14,1,4,3,2,128,14,254,2,1,4,1,2,128,4,0, + 2,254,2,233,2,225,2,250,2,251,115,80,0,0,0,144, + 4,21,0,149,10,33,7,163,5,41,0,169,8,51,7,187, + 5,65,1,0,193,1,8,65,11,7,193,18,65,5,66,24, + 0,194,24,10,66,36,7,195,50,7,67,59,0,195,59,8, + 68,6,7,196,9,1,68,6,7,196,10,1,66,36,7,196, + 11,1,65,11,7,196,12,1,51,7,196,13,1,33,7,122, + 21,83,111,117,114,99,101,76,111,97,100,101,114,46,103,101, + 116,95,99,111,100,101,78,41,10,114,149,0,0,0,114,148, + 0,0,0,114,150,0,0,0,114,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,7,0,0,0,114,248,0,0,0,130,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,0,0,0,135,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,100,3,132,0,90,4,100,4,100, + 5,132,0,90,5,100,6,100,7,132,0,90,6,101,7,136, + 0,102,1,100,8,100,9,132,8,131,1,90,8,101,7,100, + 10,100,11,132,0,131,1,90,9,100,12,100,13,132,0,90, + 10,101,7,100,14,100,15,132,0,131,1,90,11,136,0,4, + 0,90,12,83,0,41,16,218,10,70,105,108,101,76,111,97, + 100,101,114,122,103,66,97,115,101,32,102,105,108,101,32,108, + 111,97,100,101,114,32,99,108,97,115,115,32,119,104,105,99, + 104,32,105,109,112,108,101,109,101,110,116,115,32,116,104,101, + 32,108,111,97,100,101,114,32,112,114,111,116,111,99,111,108, + 32,109,101,116,104,111,100,115,32,116,104,97,116,10,32,32, + 32,32,114,101,113,117,105,114,101,32,102,105,108,101,32,115, + 121,115,116,101,109,32,117,115,97,103,101,46,99,3,0,0, 0,0,0,0,0,0,0,0,0,2,0,0,0,67,0,0, - 0,243,24,0,0,0,124,0,106,0,124,1,106,0,107,2, - 111,11,124,0,106,1,124,1,106,1,107,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,32,32,114,7,0,0,0,218,6,95,95,101,113, - 95,95,28,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,3,0,0,0,67,0,0,0,243,20, - 0,0,0,116,0,124,0,106,1,131,1,116,0,124,0,106, - 2,131,1,65,0,83,0,114,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,32,114,7,0,0,0,218,8,95,95,104, - 97,115,104,95,95,32,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,0,0,0,116,0,116,1,124,0,131,2,160,2,124,1, - 161,1,83,0,41,2,122,100,76,111,97,100,32,97,32,109, - 111,100,117,108,101,32,102,114,111,109,32,97,32,102,105,108, - 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, - 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, - 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, - 100,46,10,10,32,32,32,32,32,32,32,32,78,41,3,218, - 5,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,32,32,128,114,7,0,0,0,114,247,0,0,0,35,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,67,0,0,0,243,6,0,0,0, - 124,0,106,0,83,0,169,2,122,58,82,101,116,117,114,110, - 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, - 32,115,111,117,114,99,101,32,102,105,108,101,32,97,115,32, - 102,111,117,110,100,32,98,121,32,116,104,101,32,102,105,110, - 100,101,114,46,78,114,74,0,0,0,114,246,0,0,0,32, - 32,114,7,0,0,0,114,202,0,0,0,47,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,67,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,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,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,3,122,39,82,101,116,117,114,110, - 32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112, - 97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115, - 46,78,218,1,114,41,8,114,184,0,0,0,114,248,0,0, - 0,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,114,91,0,0,0,90,9,111,112,101, - 110,95,99,111,100,101,114,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,32,32,32,114,7,0,0,0,114, - 254,0,0,0,52,4,0,0,115,22,0,0,0,14,2,16, - 1,6,1,14,255,22,128,4,0,14,3,6,1,14,255,22, - 128,4,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,70,105,108,101,76,111,97,100,101,114,46,103,101,116, - 95,100,97,116,97,99,2,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,67,0,0,0,115,20,0,0,0,100, - 1,100,2,108,0,109,1,125,2,1,0,124,2,124,0,131, - 1,83,0,41,3,78,114,0,0,0,0,41,1,218,10,70, - 105,108,101,82,101,97,100,101,114,41,2,218,17,105,109,112, - 111,114,116,108,105,98,46,114,101,97,100,101,114,115,114,29, - 1,0,0,41,3,114,143,0,0,0,114,243,0,0,0,114, - 29,1,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,61,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,0,0,114, - 150,0,0,0,114,151,0,0,0,114,235,0,0,0,114,15, - 1,0,0,114,21,1,0,0,114,159,0,0,0,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,64,114,7,0,0,0,114,10,1, - 0,0,17,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,0,0,3,0,0,0,64,0, - 0,0,115,46,0,0,0,101,0,90,1,100,0,90,2,100, - 1,90,3,100,2,100,3,132,0,90,4,100,4,100,5,132, - 0,90,5,100,6,100,7,156,1,100,8,100,9,132,2,90, - 6,100,10,83,0,41,11,218,16,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,122,62,67,111,110,99,114, - 101,116,101,32,105,109,112,108,101,109,101,110,116,97,116,105, - 111,110,32,111,102,32,83,111,117,114,99,101,76,111,97,100, - 101,114,32,117,115,105,110,103,32,116,104,101,32,102,105,108, - 101,32,115,121,115,116,101,109,46,99,2,0,0,0,0,0, - 0,0,0,0,0,0,3,0,0,0,67,0,0,0,115,22, - 0,0,0,116,0,124,1,131,1,125,2,124,2,106,1,124, - 2,106,2,100,1,156,2,83,0,41,3,122,33,82,101,116, - 117,114,110,32,116,104,101,32,109,101,116,97,100,97,116,97, - 32,102,111,114,32,116,104,101,32,112,97,116,104,46,41,2, - 114,192,0,0,0,114,5,1,0,0,78,41,3,114,75,0, - 0,0,218,8,115,116,95,109,116,105,109,101,90,7,115,116, - 95,115,105,122,101,41,3,114,143,0,0,0,114,65,0,0, - 0,114,9,1,0,0,32,32,32,114,7,0,0,0,114,251, - 0,0,0,71,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,67,0,0,0,115,24,0,0,0,116,0,124,1, - 131,1,125,4,124,0,160,1,124,2,124,3,124,4,100,1, - 166,3,83,0,41,2,78,169,1,218,5,95,109,111,100,101, - 41,2,114,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,32,32,32,32,32,114,7,0,0, - 0,114,253,0,0,0,76,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,0,114, - 34,1,0,0,99,3,0,0,0,0,0,0,0,1,0,0, - 0,9,0,0,0,67,0,0,0,115,250,0,0,0,116,0, - 124,1,131,1,92,2,125,4,125,5,103,0,125,6,124,4, - 114,31,116,1,124,4,131,1,115,31,116,0,124,4,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,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,100,2, - 125,8,126,8,1,0,100,2,83,0,100,2,125,8,126,8, - 119,1,37,0,9,0,116,11,124,1,124,2,124,3,131,3, - 1,0,116,9,160,10,100,3,124,1,161,2,1,0,100,2, - 83,0,35,0,4,0,116,8,121,123,1,0,125,8,1,0, - 116,9,160,10,100,1,124,1,124,8,161,3,1,0,89,0, - 100,2,125,8,126,8,100,2,83,0,100,2,125,8,126,8, - 119,1,37,0,119,0,119,0,41,4,122,27,87,114,105,116, - 101,32,98,121,116,101,115,32,100,97,116,97,32,116,111,32, - 97,32,102,105,108,101,46,122,27,99,111,117,108,100,32,110, - 111,116,32,99,114,101,97,116,101,32,123,33,114,125,58,32, - 123,33,114,125,78,122,12,99,114,101,97,116,101,100,32,123, - 33,114,125,41,12,114,73,0,0,0,114,83,0,0,0,114, - 61,0,0,0,218,8,114,101,118,101,114,115,101,100,114,67, - 0,0,0,114,19,0,0,0,90,5,109,107,100,105,114,218, - 15,70,105,108,101,69,120,105,115,116,115,69,114,114,111,114, - 114,76,0,0,0,114,158,0,0,0,114,172,0,0,0,114, - 95,0,0,0,41,9,114,143,0,0,0,114,65,0,0,0, - 114,42,0,0,0,114,35,1,0,0,218,6,112,97,114,101, - 110,116,114,120,0,0,0,114,63,0,0,0,114,68,0,0, - 0,114,255,0,0,0,32,32,32,32,32,32,32,32,32,114, - 7,0,0,0,114,252,0,0,0,81,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,128,2,254,2,247,115,62, - 0,0,0,171,5,49,2,177,7,65,18,9,186,6,65,18, - 9,193,0,7,65,14,9,193,14,4,65,18,9,193,20,12, - 65,34,0,193,34,7,65,58,7,193,41,7,65,54,7,193, - 54,4,65,58,7,193,59,1,65,58,7,193,60,1,65,18, - 9,122,25,83,111,117,114,99,101,70,105,108,101,76,111,97, - 100,101,114,46,115,101,116,95,100,97,116,97,78,41,7,114, - 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,7,0,0,0,114,32,1,0, - 0,67,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,64, - 0,0,0,115,32,0,0,0,101,0,90,1,100,0,90,2, - 100,1,90,3,100,2,100,3,132,0,90,4,100,4,100,5, - 132,0,90,5,100,6,83,0,41,7,218,20,83,111,117,114, - 99,101,108,101,115,115,70,105,108,101,76,111,97,100,101,114, - 122,45,76,111,97,100,101,114,32,119,104,105,99,104,32,104, - 97,110,100,108,101,115,32,115,111,117,114,99,101,108,101,115, - 115,32,102,105,108,101,32,105,109,112,111,114,116,115,46,99, - 2,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 67,0,0,0,115,68,0,0,0,124,0,160,0,124,1,161, - 1,125,2,124,0,160,1,124,2,161,1,125,3,124,1,124, - 2,100,1,156,2,125,4,116,2,124,3,124,1,124,4,131, - 3,1,0,116,3,116,4,124,3,131,1,100,2,100,0,133, - 2,25,0,124,1,124,2,100,3,141,3,83,0,41,4,78, - 114,182,0,0,0,114,168,0,0,0,41,2,114,141,0,0, - 0,114,132,0,0,0,41,5,114,202,0,0,0,114,254,0, - 0,0,114,175,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,32,32,32,32, - 32,114,7,0,0,0,114,240,0,0,0,116,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,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,67, - 0,0,0,114,24,0,0,0,41,2,122,39,82,101,116,117, - 114,110,32,78,111,110,101,32,97,115,32,116,104,101,114,101, - 32,105,115,32,110,111,32,115,111,117,114,99,101,32,99,111, - 100,101,46,78,114,12,0,0,0,114,246,0,0,0,32,32, - 114,7,0,0,0,114,0,1,0,0,132,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, - 7,0,0,0,114,39,1,0,0,112,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,64,0,0,0,115,92,0,0,0,101,0, - 90,1,100,0,90,2,100,1,90,3,100,2,100,3,132,0, - 90,4,100,4,100,5,132,0,90,5,100,6,100,7,132,0, - 90,6,100,8,100,9,132,0,90,7,100,10,100,11,132,0, - 90,8,100,12,100,13,132,0,90,9,100,14,100,15,132,0, - 90,10,100,16,100,17,132,0,90,11,101,12,100,18,100,19, - 132,0,131,1,90,13,100,20,83,0,41,21,114,28,1,0, - 0,122,93,76,111,97,100,101,114,32,102,111,114,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,46, - 10,10,32,32,32,32,84,104,101,32,99,111,110,115,116,114, - 117,99,116,111,114,32,105,115,32,100,101,115,105,103,110,101, - 100,32,116,111,32,119,111,114,107,32,119,105,116,104,32,70, - 105,108,101,70,105,110,100,101,114,46,10,10,32,32,32,32, - 99,3,0,0,0,0,0,0,0,0,0,0,0,2,0,0, - 0,67,0,0,0,115,16,0,0,0,124,1,124,0,95,0, - 124,2,124,0,95,1,100,0,83,0,114,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,32,32,32,114,7,0,0,0,114,235,0, - 0,0,145,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,67,0,0,0,114,11,1,0,0,114,69,0,0, - 0,114,12,1,0,0,114,14,1,0,0,32,32,114,7,0, - 0,0,114,15,1,0,0,149,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,67,0,0,0,114,17,1,0,0,114,69,0,0,0, - 114,18,1,0,0,114,20,1,0,0,32,114,7,0,0,0, - 114,21,1,0,0,153,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,0,0,0,0,0,0,0,0,5,0, - 0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,116, - 2,106,3,124,1,161,2,125,2,116,0,160,4,100,1,124, - 1,106,5,124,0,106,6,161,3,1,0,124,2,83,0,41, - 3,122,40,67,114,101,97,116,101,32,97,110,32,117,110,105, - 110,105,116,105,97,108,105,122,101,100,32,101,120,116,101,110, - 115,105,111,110,32,109,111,100,117,108,101,122,38,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, - 114,125,32,108,111,97,100,101,100,32,102,114,111,109,32,123, - 33,114,125,78,41,7,114,158,0,0,0,114,241,0,0,0, - 114,186,0,0,0,90,14,99,114,101,97,116,101,95,100,121, - 110,97,109,105,99,114,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,32,32,32,114,7,0,0,0,114,238,0, - 0,0,156,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,99,2,0,0,0,0,0,0,0,0,0,0,0,5,0, - 0,0,67,0,0,0,115,36,0,0,0,116,0,160,1,116, - 2,106,3,124,1,161,2,1,0,116,0,160,4,100,1,124, - 0,106,5,124,0,106,6,161,3,1,0,100,2,83,0,41, - 3,122,30,73,110,105,116,105,97,108,105,122,101,32,97,110, - 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,122,40,101,120,116,101,110,115,105,111,110,32,109,111,100, - 117,108,101,32,123,33,114,125,32,101,120,101,99,117,116,101, - 100,32,102,114,111,109,32,123,33,114,125,78,41,7,114,158, - 0,0,0,114,241,0,0,0,114,186,0,0,0,90,12,101, - 120,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,32,32,114,7,0,0,0,114,244,0, - 0,0,164,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,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,115,38, - 0,0,0,135,2,116,0,124,0,106,1,131,1,100,1,25, - 0,138,2,116,2,136,2,102,1,100,2,100,3,132,8,116, - 3,68,0,131,1,131,1,83,0,41,5,122,49,82,101,116, - 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, - 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,3, - 0,0,0,99,1,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,51,0,0,0,115,28,0,0,0,129,0,124, - 0,93,9,125,1,137,2,100,0,124,1,23,0,107,2,86, - 0,1,0,113,2,100,1,83,0,41,2,114,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, - 32,32,128,114,7,0,0,0,114,8,0,0,0,173,4,0, - 0,115,6,0,0,0,6,128,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,99,97,108,115,62,46,60,103,101,110,101, - 120,112,114,62,78,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,32,32,64,114, - 7,0,0,0,114,205,0,0,0,170,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, - 101,99,2,0,0,0,0,0,0,0,0,0,0,0,1,0, - 0,0,67,0,0,0,114,24,0,0,0,41,2,122,63,82, - 101,116,117,114,110,32,78,111,110,101,32,97,115,32,97,110, - 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,32,99,97,110,110,111,116,32,99,114,101,97,116,101,32, - 97,32,99,111,100,101,32,111,98,106,101,99,116,46,78,114, - 12,0,0,0,114,246,0,0,0,32,32,114,7,0,0,0, - 114,240,0,0,0,176,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,0,0,0,1,0, - 0,0,67,0,0,0,114,24,0,0,0,41,2,122,53,82, - 101,116,117,114,110,32,78,111,110,101,32,97,115,32,101,120, - 116,101,110,115,105,111,110,32,109,111,100,117,108,101,115,32, - 104,97,118,101,32,110,111,32,115,111,117,114,99,101,32,99, - 111,100,101,46,78,114,12,0,0,0,114,246,0,0,0,32, - 32,114,7,0,0,0,114,0,1,0,0,180,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,67,0,0,0,114,24, - 1,0,0,114,25,1,0,0,114,74,0,0,0,114,246,0, - 0,0,32,32,114,7,0,0,0,114,202,0,0,0,184,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,114,149,0,0,0,114,148,0,0,0,114,150,0,0,0, - 114,151,0,0,0,114,235,0,0,0,114,15,1,0,0,114, - 21,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,7,0,0, - 0,114,28,1,0,0,137,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,0,0,2,0, - 0,0,64,0,0,0,115,104,0,0,0,101,0,90,1,100, - 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, - 4,100,5,132,0,90,5,100,6,100,7,132,0,90,6,100, - 8,100,9,132,0,90,7,100,10,100,11,132,0,90,8,100, - 12,100,13,132,0,90,9,100,14,100,15,132,0,90,10,100, - 16,100,17,132,0,90,11,100,18,100,19,132,0,90,12,100, - 20,100,21,132,0,90,13,100,22,100,23,132,0,90,14,100, - 24,83,0,41,25,218,14,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,97,38,1,0,0,82,101,112,114,101,115, - 101,110,116,115,32,97,32,110,97,109,101,115,112,97,99,101, - 32,112,97,99,107,97,103,101,39,115,32,112,97,116,104,46, - 32,32,73,116,32,117,115,101,115,32,116,104,101,32,109,111, - 100,117,108,101,32,110,97,109,101,10,32,32,32,32,116,111, - 32,102,105,110,100,32,105,116,115,32,112,97,114,101,110,116, - 32,109,111,100,117,108,101,44,32,97,110,100,32,102,114,111, - 109,32,116,104,101,114,101,32,105,116,32,108,111,111,107,115, - 32,117,112,32,116,104,101,32,112,97,114,101,110,116,39,115, - 10,32,32,32,32,95,95,112,97,116,104,95,95,46,32,32, - 87,104,101,110,32,116,104,105,115,32,99,104,97,110,103,101, - 115,44,32,116,104,101,32,109,111,100,117,108,101,39,115,32, - 111,119,110,32,112,97,116,104,32,105,115,32,114,101,99,111, - 109,112,117,116,101,100,44,10,32,32,32,32,117,115,105,110, - 103,32,112,97,116,104,95,102,105,110,100,101,114,46,32,32, - 70,111,114,32,116,111,112,45,108,101,118,101,108,32,109,111, - 100,117,108,101,115,44,32,116,104,101,32,112,97,114,101,110, - 116,32,109,111,100,117,108,101,39,115,32,112,97,116,104,10, - 32,32,32,32,105,115,32,115,121,115,46,112,97,116,104,46, - 99,4,0,0,0,0,0,0,0,0,0,0,0,3,0,0, - 0,67,0,0,0,115,36,0,0,0,124,1,124,0,95,0, - 124,2,124,0,95,1,116,2,124,0,160,3,161,0,131,1, - 124,0,95,4,124,3,124,0,95,5,100,0,83,0,114,69, - 0,0,0,41,6,218,5,95,110,97,109,101,218,5,95,112, - 97,116,104,114,136,0,0,0,218,16,95,103,101,116,95,112, - 97,114,101,110,116,95,112,97,116,104,218,17,95,108,97,115, - 116,95,112,97,114,101,110,116,95,112,97,116,104,218,12,95, - 112,97,116,104,95,102,105,110,100,101,114,169,4,114,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,32,32,32,32,114,7,0, - 0,0,114,235,0,0,0,197,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,67,0,0,0,115,38,0,0,0, - 124,0,106,0,160,1,100,1,161,1,92,3,125,1,125,2, - 125,3,124,2,100,2,107,2,114,15,100,3,83,0,124,1, - 100,4,102,2,83,0,41,6,122,62,82,101,116,117,114,110, - 115,32,97,32,116,117,112,108,101,32,111,102,32,40,112,97, - 114,101,110,116,45,109,111,100,117,108,101,45,110,97,109,101, - 44,32,112,97,114,101,110,116,45,112,97,116,104,45,97,116, - 116,114,45,110,97,109,101,41,114,97,0,0,0,114,10,0, - 0,0,41,2,114,16,0,0,0,114,65,0,0,0,90,8, - 95,95,112,97,116,104,95,95,78,41,2,114,45,1,0,0, - 114,104,0,0,0,41,4,114,143,0,0,0,114,38,1,0, - 0,218,3,100,111,116,90,2,109,101,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,203,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,116,104,95,110,97,109,101,115,99,1,0,0,0,0, - 0,0,0,0,0,0,0,3,0,0,0,67,0,0,0,115, - 28,0,0,0,124,0,160,0,161,0,92,2,125,1,125,2, - 116,1,116,2,106,3,124,1,25,0,124,2,131,2,83,0, - 114,69,0,0,0,41,4,114,52,1,0,0,114,154,0,0, - 0,114,16,0,0,0,218,7,109,111,100,117,108,101,115,41, - 3,114,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,32,32,32,114,7,0, - 0,0,114,47,1,0,0,213,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,0,0,0, - 0,0,0,0,0,0,0,4,0,0,0,67,0,0,0,115, - 80,0,0,0,116,0,124,0,160,1,161,0,131,1,125,1, - 124,1,124,0,106,2,107,3,114,37,124,0,160,3,124,0, - 106,4,124,1,161,2,125,2,124,2,100,0,117,1,114,34, - 124,2,106,5,100,0,117,0,114,34,124,2,106,6,114,34, - 124,2,106,6,124,0,95,7,124,1,124,0,95,2,124,0, - 106,7,83,0,114,69,0,0,0,41,8,114,136,0,0,0, - 114,47,1,0,0,114,48,1,0,0,114,49,1,0,0,114, - 45,1,0,0,114,163,0,0,0,114,201,0,0,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,32,32,32,114, - 7,0,0,0,218,12,95,114,101,99,97,108,99,117,108,97, - 116,101,217,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,117,108,97,116,101,99,1,0, + 0,115,16,0,0,0,124,1,124,0,95,0,124,2,124,0, + 95,1,100,1,83,0,41,2,122,75,67,97,99,104,101,32, + 116,104,101,32,109,111,100,117,108,101,32,110,97,109,101,32, + 97,110,100,32,116,104,101,32,112,97,116,104,32,116,111,32, + 116,104,101,32,102,105,108,101,32,102,111,117,110,100,32,98, + 121,32,116,104,101,10,32,32,32,32,32,32,32,32,102,105, + 110,100,101,114,46,78,114,182,0,0,0,41,3,114,143,0, + 0,0,114,162,0,0,0,114,65,0,0,0,32,32,32,114, + 7,0,0,0,114,235,0,0,0,23,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,0, + 0,67,0,0,0,243,24,0,0,0,124,0,106,0,124,1, + 106,0,107,2,111,11,124,0,106,1,124,1,106,1,107,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,32,32,114,7,0,0,0,218,6, + 95,95,101,113,95,95,29,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,3,0,0,0,67,0, - 0,0,243,12,0,0,0,116,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,32,114,7,0,0,0, - 218,8,95,95,105,116,101,114,95,95,230,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,0,67,0,0,0,115,12,0,0,0,124,0,160, - 0,161,0,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,32,32,114,7,0,0,0,218,11,95,95,103,101, - 116,105,116,101,109,95,95,233,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,3,0, - 0,0,67,0,0,0,115,14,0,0,0,124,2,124,0,106, - 0,124,1,60,0,100,0,83,0,114,69,0,0,0,41,1, - 114,46,1,0,0,41,3,114,143,0,0,0,114,60,1,0, - 0,114,65,0,0,0,32,32,32,114,7,0,0,0,218,11, - 95,95,115,101,116,105,116,101,109,95,95,236,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,67,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,32,114,7,0,0,0,218,7,95, - 95,108,101,110,95,95,239,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,67,0,0, - 0,243,12,0,0,0,100,1,160,0,124,0,106,1,161,1, - 83,0,41,2,78,122,20,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,40,123,33,114,125,41,41,2,114,89,0, - 0,0,114,46,1,0,0,114,20,1,0,0,32,114,7,0, - 0,0,218,8,95,95,114,101,112,114,95,95,242,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,0, - 3,0,0,0,67,0,0,0,115,12,0,0,0,124,1,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, - 32,32,114,7,0,0,0,218,12,95,95,99,111,110,116,97, - 105,110,115,95,95,245,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,0,0,0,3,0,0, - 0,67,0,0,0,115,16,0,0,0,124,0,106,0,160,1, - 124,1,161,1,1,0,100,0,83,0,114,69,0,0,0,41, - 2,114,46,1,0,0,114,61,0,0,0,114,66,1,0,0, - 32,32,114,7,0,0,0,114,61,0,0,0,248,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,114,151,0,0,0,114,235,0,0,0,114, - 52,1,0,0,114,47,1,0,0,114,54,1,0,0,114,57, - 1,0,0,114,61,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,7,0,0,0,114,44,1,0,0, - 190,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,64,0, - 0,0,115,88,0,0,0,101,0,90,1,100,0,90,2,100, - 1,100,2,132,0,90,3,101,4,100,3,100,4,132,0,131, - 1,90,5,100,5,100,6,132,0,90,6,100,7,100,8,132, - 0,90,7,100,9,100,10,132,0,90,8,100,11,100,12,132, - 0,90,9,100,13,100,14,132,0,90,10,100,15,100,16,132, - 0,90,11,100,17,100,18,132,0,90,12,100,19,83,0,41, - 20,218,16,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,99,4,0,0,0,0,0,0,0,0,0,0,0, - 4,0,0,0,67,0,0,0,115,18,0,0,0,116,0,124, - 1,124,2,124,3,131,3,124,0,95,1,100,0,83,0,114, - 69,0,0,0,41,2,114,44,1,0,0,114,46,1,0,0, - 114,50,1,0,0,32,32,32,32,114,7,0,0,0,114,235, - 0,0,0,254,4,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,67, - 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,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,101,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,84,104,101,32,105,109,112,111,114,116,32,109, - 97,99,104,105,110,101,114,121,32,100,111,101,115,32,116,104, - 101,32,106,111,98,32,105,116,115,101,108,102,46,10,10,32, - 32,32,32,32,32,32,32,122,82,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,40,41,32,105,115,32,100,101,112,114,101, - 99,97,116,101,100,32,97,110,100,32,115,108,97,116,101,100, - 32,102,111,114,32,114,101,109,111,118,97,108,32,105,110,32, - 80,121,116,104,111,110,32,51,46,49,50,122,25,60,109,111, - 100,117,108,101,32,123,33,114,125,32,40,110,97,109,101,115, - 112,97,99,101,41,62,78,41,5,114,99,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,32,114,7,0,0,0,218, - 11,109,111,100,117,108,101,95,114,101,112,114,1,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,67,0,0,0,114,24,0,0,0,41,2,78,84,114,12, - 0,0,0,114,246,0,0,0,32,32,114,7,0,0,0,114, - 205,0,0,0,12,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,67,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,32,32,114, - 7,0,0,0,114,0,1,0,0,15,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,0,0,0,0, - 0,6,0,0,0,67,0,0,0,115,16,0,0,0,116,0, - 100,1,100,2,100,3,100,4,100,5,141,4,83,0,41,6, - 78,114,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,32,32,114,7,0,0,0, - 114,240,0,0,0,18,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,67, - 0,0,0,114,24,0,0,0,114,236,0,0,0,114,12,0, - 0,0,114,237,0,0,0,32,32,114,7,0,0,0,114,238, - 0,0,0,21,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,67,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,32,32, - 114,7,0,0,0,114,244,0,0,0,24,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,0,0,0, - 0,0,0,4,0,0,0,67,0,0,0,115,26,0,0,0, - 116,0,160,1,100,1,124,0,106,2,161,2,1,0,116,0, - 160,3,124,0,124,1,161,2,83,0,41,3,122,98,76,111, - 97,100,32,97,32,110,97,109,101,115,112,97,99,101,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,32,32,32,32, + 0,0,243,20,0,0,0,116,0,124,0,106,1,131,1,116, + 0,124,0,106,2,131,1,65,0,83,0,114,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,32,114,7,0,0,0,218, + 8,95,95,104,97,115,104,95,95,33,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,0,0,0,116,0,116,1,124,0,131,2, + 160,2,124,1,161,1,83,0,41,2,122,100,76,111,97,100, + 32,97,32,109,111,100,117,108,101,32,102,114,111,109,32,97, + 32,102,105,108,101,46,10,10,32,32,32,32,32,32,32,32, 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 122,38,110,97,109,101,115,112,97,99,101,32,109,111,100,117, - 108,101,32,108,111,97,100,101,100,32,119,105,116,104,32,112, - 97,116,104,32,123,33,114,125,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,32,32,114,7,0,0,0,114,247,0,0,0, - 27,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,0,0,0,0,0,0,0,0, - 0,2,0,0,0,67,0,0,0,115,22,0,0,0,100,1, - 100,2,108,0,109,1,125,2,1,0,124,2,124,0,106,2, - 131,1,83,0,41,3,78,114,0,0,0,0,41,1,218,15, - 78,97,109,101,115,112,97,99,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,32,32,32,114,7,0,0,0,114,31,1,0,0,39,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,100,101,114,78,41,13,114,149,0,0,0,114,148, - 0,0,0,114,150,0,0,0,114,235,0,0,0,114,232,0, - 0,0,114,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, - 7,0,0,0,114,70,1,0,0,253,4,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,0,4, - 0,0,0,64,0,0,0,115,118,0,0,0,101,0,90,1, - 100,0,90,2,100,1,90,3,101,4,100,2,100,3,132,0, - 131,1,90,5,101,4,100,4,100,5,132,0,131,1,90,6, - 101,7,100,6,100,7,132,0,131,1,90,8,101,7,100,8, - 100,9,132,0,131,1,90,9,101,7,100,19,100,11,100,12, - 132,1,131,1,90,10,101,7,100,20,100,13,100,14,132,1, - 131,1,90,11,101,7,100,19,100,15,100,16,132,1,131,1, - 90,12,101,4,100,17,100,18,132,0,131,1,90,13,100,10, - 83,0,41,21,218,10,80,97,116,104,70,105,110,100,101,114, - 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, - 101,114,32,102,111,114,32,115,121,115,46,112,97,116,104,32, - 97,110,100,32,112,97,99,107,97,103,101,32,95,95,112,97, - 116,104,95,95,32,97,116,116,114,105,98,117,116,101,115,46, - 99,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, - 0,67,0,0,0,115,64,0,0,0,116,0,116,1,106,2, - 160,3,161,0,131,1,68,0,93,22,92,2,125,0,125,1, - 124,1,100,1,117,0,114,20,116,1,106,2,124,0,61,0, - 113,7,116,4,124,1,100,2,131,2,114,29,124,1,160,5, - 161,0,1,0,113,7,100,1,83,0,41,3,122,125,67,97, - 108,108,32,116,104,101,32,105,110,118,97,108,105,100,97,116, - 101,95,99,97,99,104,101,115,40,41,32,109,101,116,104,111, - 100,32,111,110,32,97,108,108,32,112,97,116,104,32,101,110, - 116,114,121,32,102,105,110,100,101,114,115,10,32,32,32,32, - 32,32,32,32,115,116,111,114,101,100,32,105,110,32,115,121, - 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,115,32,40,119,104,101,114,101,32,105,109, - 112,108,101,109,101,110,116,101,100,41,46,78,218,17,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,41, - 6,218,4,108,105,115,116,114,16,0,0,0,218,19,112,97, - 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, - 101,218,5,105,116,101,109,115,114,152,0,0,0,114,75,1, - 0,0,41,2,114,141,0,0,0,218,6,102,105,110,100,101, - 114,32,32,114,7,0,0,0,114,75,1,0,0,50,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,67,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,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,32,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,32,102,111,114,32,97,32,102, - 105,110,100,101,114,32,102,111,114,32,39,112,97,116,104,39, - 46,78,122,23,115,121,115,46,112,97,116,104,95,104,111,111, - 107,115,32,105,115,32,101,109,112,116,121,41,6,114,16,0, - 0,0,218,10,112,97,116,104,95,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,32, - 32,114,7,0,0,0,218,11,95,112,97,116,104,95,104,111, - 111,107,115,60,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,67,0,0,0, - 115,104,0,0,0,124,1,100,1,107,2,114,21,9,0,116, - 0,160,1,161,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,5,121,50,1,0,1,0,1,0,124,0,160, - 6,124,1,161,1,125,2,124,2,116,3,106,4,124,1,60, - 0,89,0,124,2,83,0,37,0,119,0,119,0,41,3,122, - 210,71,101,116,32,116,104,101,32,102,105,110,100,101,114,32, - 102,111,114,32,116,104,101,32,112,97,116,104,32,101,110,116, - 114,121,32,102,114,111,109,32,115,121,115,46,112,97,116,104, - 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,46, - 10,10,32,32,32,32,32,32,32,32,73,102,32,116,104,101, - 32,112,97,116,104,32,101,110,116,114,121,32,105,115,32,110, - 111,116,32,105,110,32,116,104,101,32,99,97,99,104,101,44, - 32,102,105,110,100,32,116,104,101,32,97,112,112,114,111,112, - 114,105,97,116,101,32,102,105,110,100,101,114,10,32,32,32, - 32,32,32,32,32,97,110,100,32,99,97,99,104,101,32,105, - 116,46,32,73,102,32,110,111,32,102,105,110,100,101,114,32, - 105,115,32,97,118,97,105,108,97,98,108,101,44,32,115,116, - 111,114,101,32,78,111,110,101,46,10,10,32,32,32,32,32, - 32,32,32,114,10,0,0,0,78,41,7,114,19,0,0,0, - 114,82,0,0,0,218,17,70,105,108,101,78,111,116,70,111, - 117,110,100,69,114,114,111,114,114,16,0,0,0,114,77,1, - 0,0,218,8,75,101,121,69,114,114,111,114,114,81,1,0, - 0,41,3,114,220,0,0,0,114,65,0,0,0,114,79,1, - 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, - 73,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,17, - 49,7,178,1,49,7,179,1,20,7,122,31,80,97,116,104, - 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, - 0,0,0,0,0,0,0,0,4,0,0,0,67,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,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,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,41, - 4,78,114,160,0,0,0,122,53,46,102,105,110,100,95,115, - 112,101,99,40,41,32,110,111,116,32,102,111,117,110,100,59, - 32,102,97,108,108,105,110,103,32,98,97,99,107,32,116,111, - 32,102,105,110,100,95,108,111,97,100,101,114,40,41,122,53, - 46,102,105,110,100,95,115,112,101,99,40,41,32,110,111,116, - 32,102,111,117,110,100,59,32,102,97,108,108,105,110,103,32, - 98,97,99,107,32,116,111,32,102,105,110,100,95,109,111,100, - 117,108,101,40,41,41,11,114,152,0,0,0,114,158,0,0, - 0,90,12,95,111,98,106,101,99,116,95,110,97,109,101,114, - 99,0,0,0,114,100,0,0,0,114,161,0,0,0,114,160, - 0,0,0,114,228,0,0,0,114,223,0,0,0,114,206,0, - 0,0,114,201,0,0,0,41,7,114,220,0,0,0,114,162, - 0,0,0,114,79,1,0,0,114,165,0,0,0,114,163,0, - 0,0,114,164,0,0,0,114,209,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,95,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,95,115,112,101,99,78, - 99,4,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,67,0,0,0,115,166,0,0,0,103,0,125,4,124,2, - 68,0,93,67,125,5,116,0,124,5,116,1,116,2,102,2, - 131,2,115,14,113,4,124,0,160,3,124,5,161,1,125,6, - 124,6,100,1,117,1,114,71,116,4,124,6,100,2,131,2, - 114,35,124,6,160,5,124,1,124,3,161,2,125,7,110,6, - 124,0,160,6,124,1,124,6,161,2,125,7,124,7,100,1, - 117,0,114,46,113,4,124,7,106,7,100,1,117,1,114,55, - 124,7,2,0,1,0,83,0,124,7,106,8,125,8,124,8, - 100,1,117,0,114,66,116,9,100,3,131,1,130,1,124,4, - 160,10,124,8,161,1,1,0,113,4,116,11,160,12,124,1, - 100,1,161,2,125,7,124,4,124,7,95,8,124,7,83,0, - 41,4,122,63,70,105,110,100,32,116,104,101,32,108,111,97, - 100,101,114,32,111,114,32,110,97,109,101,115,112,97,99,101, - 95,112,97,116,104,32,102,111,114,32,116,104,105,115,32,109, - 111,100,117,108,101,47,112,97,99,107,97,103,101,32,110,97, - 109,101,46,78,114,225,0,0,0,122,19,115,112,101,99,32, - 109,105,115,115,105,110,103,32,108,111,97,100,101,114,41,13, - 114,184,0,0,0,114,109,0,0,0,218,5,98,121,116,101, - 115,114,84,1,0,0,114,152,0,0,0,114,225,0,0,0, - 114,85,1,0,0,114,163,0,0,0,114,201,0,0,0,114, - 142,0,0,0,114,190,0,0,0,114,158,0,0,0,114,206, - 0,0,0,41,9,114,220,0,0,0,114,162,0,0,0,114, - 65,0,0,0,114,224,0,0,0,218,14,110,97,109,101,115, - 112,97,99,101,95,112,97,116,104,90,5,101,110,116,114,121, - 114,79,1,0,0,114,209,0,0,0,114,164,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,116,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,104,70,105,110,100,101,114,46,95,103,101, - 116,95,115,112,101,99,99,4,0,0,0,0,0,0,0,0, - 0,0,0,5,0,0,0,67,0,0,0,115,94,0,0,0, - 124,2,100,1,117,0,114,7,116,0,106,1,125,2,124,0, - 160,2,124,1,124,2,124,3,161,3,125,4,124,4,100,1, - 117,0,114,20,100,1,83,0,124,4,106,3,100,1,117,0, - 114,45,124,4,106,4,125,5,124,5,114,43,100,1,124,4, - 95,5,116,6,124,1,124,5,124,0,106,2,131,3,124,4, - 95,4,124,4,83,0,100,1,83,0,124,4,83,0,41,2, - 122,141,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 115,112,101,99,32,102,111,114,32,39,102,117,108,108,110,97, - 109,101,39,32,111,110,32,115,121,115,46,112,97,116,104,32, - 111,114,32,39,112,97,116,104,39,46,10,10,32,32,32,32, - 32,32,32,32,84,104,101,32,115,101,97,114,99,104,32,105, - 115,32,98,97,115,101,100,32,111,110,32,115,121,115,46,112, - 97,116,104,95,104,111,111,107,115,32,97,110,100,32,115,121, - 115,46,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,46,10,32,32,32,32,32,32,32,32,78, - 41,7,114,16,0,0,0,114,65,0,0,0,114,88,1,0, - 0,114,163,0,0,0,114,201,0,0,0,114,204,0,0,0, - 114,44,1,0,0,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,32,32,32,32,32,32,114,7,0,0,0, - 114,225,0,0,0,148,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,67,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,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, - 115,46,112,97,116,104,32,111,114,32,39,112,97,116,104,39, - 32,98,97,115,101,100,32,111,110,32,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,32,97,110,100,10,32,32,32, - 32,32,32,32,32,115,121,115,46,112,97,116,104,95,105,109, - 112,111,114,116,101,114,95,99,97,99,104,101,46,10,10,32, - 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, - 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 46,32,32,85,115,101,32,102,105,110,100,95,115,112,101,99, - 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, - 32,32,32,32,32,122,101,80,97,116,104,70,105,110,100,101, - 114,46,102,105,110,100,95,109,111,100,117,108,101,40,41,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,32,97,110, - 100,32,115,108,97,116,101,100,32,102,111,114,32,114,101,109, - 111,118,97,108,32,105,110,32,80,121,116,104,111,110,32,51, - 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,32,32,32,32,114,7,0,0,0, - 114,228,0,0,0,172,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,0,0,0,0,0, - 0,0,0,0,0,0,4,0,0,0,79,0,0,0,115,28, + 78,41,3,218,5,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,32,32,128,114,7,0,0,0,114,247,0, + 0,0,36,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,67,0,0,0,243, + 6,0,0,0,124,0,106,0,83,0,169,2,122,58,82,101, + 116,117,114,110,32,116,104,101,32,112,97,116,104,32,116,111, + 32,116,104,101,32,115,111,117,114,99,101,32,102,105,108,101, + 32,97,115,32,102,111,117,110,100,32,98,121,32,116,104,101, + 32,102,105,110,100,101,114,46,78,114,74,0,0,0,114,246, + 0,0,0,32,32,114,7,0,0,0,114,202,0,0,0,48, + 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,67,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,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,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,3,122,39,82,101, + 116,117,114,110,32,116,104,101,32,100,97,116,97,32,102,114, + 111,109,32,112,97,116,104,32,97,115,32,114,97,119,32,98, + 121,116,101,115,46,78,218,1,114,41,8,114,184,0,0,0, + 114,248,0,0,0,218,19,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,114,91,0,0,0,90, + 9,111,112,101,110,95,99,111,100,101,114,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,32,32,32,114,7, + 0,0,0,114,254,0,0,0,53,4,0,0,115,22,0,0, + 0,14,2,16,1,6,1,14,255,22,128,4,0,14,3,6, + 1,14,255,22,128,4,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,70,105,108,101,76,111,97,100,101,114, + 46,103,101,116,95,100,97,116,97,99,2,0,0,0,0,0, + 0,0,0,0,0,0,2,0,0,0,67,0,0,0,115,20, 0,0,0,100,1,100,2,108,0,109,1,125,2,1,0,124, - 2,106,2,124,0,105,0,124,1,164,1,142,1,83,0,41, - 4,97,32,1,0,0,10,32,32,32,32,32,32,32,32,70, - 105,110,100,32,100,105,115,116,114,105,98,117,116,105,111,110, - 115,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, - 114,110,32,97,110,32,105,116,101,114,97,98,108,101,32,111, - 102,32,97,108,108,32,68,105,115,116,114,105,98,117,116,105, - 111,110,32,105,110,115,116,97,110,99,101,115,32,99,97,112, - 97,98,108,101,32,111,102,10,32,32,32,32,32,32,32,32, - 108,111,97,100,105,110,103,32,116,104,101,32,109,101,116,97, - 100,97,116,97,32,102,111,114,32,112,97,99,107,97,103,101, - 115,32,109,97,116,99,104,105,110,103,32,96,96,99,111,110, - 116,101,120,116,46,110,97,109,101,96,96,10,32,32,32,32, - 32,32,32,32,40,111,114,32,97,108,108,32,110,97,109,101, - 115,32,105,102,32,96,96,78,111,110,101,96,96,32,105,110, - 100,105,99,97,116,101,100,41,32,97,108,111,110,103,32,116, - 104,101,32,112,97,116,104,115,32,105,110,32,116,104,101,32, - 108,105,115,116,10,32,32,32,32,32,32,32,32,111,102,32, - 100,105,114,101,99,116,111,114,105,101,115,32,96,96,99,111, - 110,116,101,120,116,46,112,97,116,104,96,96,46,10,32,32, - 32,32,32,32,32,32,114,0,0,0,0,41,1,218,18,77, - 101,116,97,100,97,116,97,80,97,116,104,70,105,110,100,101, - 114,78,41,3,90,18,105,109,112,111,114,116,108,105,98,46, - 109,101,116,97,100,97,116,97,114,89,1,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,32,32,32,114,7,0,0,0,114,90,1,0,0,188, - 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,229,0,0,0,41,14,114,149,0,0, - 0,114,148,0,0,0,114,150,0,0,0,114,151,0,0,0, - 114,232,0,0,0,114,75,1,0,0,114,81,1,0,0,114, - 233,0,0,0,114,84,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,7,0,0,0,114,74,1,0, - 0,46,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,0,0,0,0,3,0,0,0,64,0,0,0,115,90,0, + 2,124,0,131,1,83,0,41,3,78,114,0,0,0,0,41, + 1,218,10,70,105,108,101,82,101,97,100,101,114,41,2,218, + 17,105,109,112,111,114,116,108,105,98,46,114,101,97,100,101, + 114,115,114,29,1,0,0,41,3,114,143,0,0,0,114,243, + 0,0,0,114,29,1,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,62,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,0,0,114,150,0,0,0,114,151,0,0,0,114,235,0, + 0,0,114,15,1,0,0,114,21,1,0,0,114,159,0,0, + 0,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,64,114,7,0,0, + 0,114,10,1,0,0,18,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,0,0,3,0, + 0,0,64,0,0,0,115,46,0,0,0,101,0,90,1,100, + 0,90,2,100,1,90,3,100,2,100,3,132,0,90,4,100, + 4,100,5,132,0,90,5,100,6,100,7,156,1,100,8,100, + 9,132,2,90,6,100,10,83,0,41,11,218,16,83,111,117, + 114,99,101,70,105,108,101,76,111,97,100,101,114,122,62,67, + 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, + 116,97,116,105,111,110,32,111,102,32,83,111,117,114,99,101, + 76,111,97,100,101,114,32,117,115,105,110,103,32,116,104,101, + 32,102,105,108,101,32,115,121,115,116,101,109,46,99,2,0, + 0,0,0,0,0,0,0,0,0,0,3,0,0,0,67,0, + 0,0,115,22,0,0,0,116,0,124,1,131,1,125,2,124, + 2,106,1,124,2,106,2,100,1,156,2,83,0,41,3,122, + 33,82,101,116,117,114,110,32,116,104,101,32,109,101,116,97, + 100,97,116,97,32,102,111,114,32,116,104,101,32,112,97,116, + 104,46,41,2,114,192,0,0,0,114,5,1,0,0,78,41, + 3,114,75,0,0,0,218,8,115,116,95,109,116,105,109,101, + 90,7,115,116,95,115,105,122,101,41,3,114,143,0,0,0, + 114,65,0,0,0,114,9,1,0,0,32,32,32,114,7,0, + 0,0,114,251,0,0,0,72,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,67,0,0,0,115,24,0,0,0, + 116,0,124,1,131,1,125,4,124,0,160,1,124,2,124,3, + 124,4,100,1,166,3,83,0,41,2,78,169,1,218,5,95, + 109,111,100,101,41,2,114,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,32,32,32,32,32, + 114,7,0,0,0,114,253,0,0,0,77,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,0,114,34,1,0,0,99,3,0,0,0,0,0,0, + 0,1,0,0,0,9,0,0,0,67,0,0,0,115,250,0, + 0,0,116,0,124,1,131,1,92,2,125,4,125,5,103,0, + 125,6,124,4,114,31,116,1,124,4,131,1,115,31,116,0, + 124,4,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,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,100,2,125,8,126,8,1,0,100,2,83,0,100,2, + 125,8,126,8,119,1,37,0,9,0,116,11,124,1,124,2, + 124,3,131,3,1,0,116,9,160,10,100,3,124,1,161,2, + 1,0,100,2,83,0,35,0,4,0,116,8,121,123,1,0, + 125,8,1,0,116,9,160,10,100,1,124,1,124,8,161,3, + 1,0,89,0,100,2,125,8,126,8,100,2,83,0,100,2, + 125,8,126,8,119,1,37,0,119,0,119,0,41,4,122,27, + 87,114,105,116,101,32,98,121,116,101,115,32,100,97,116,97, + 32,116,111,32,97,32,102,105,108,101,46,122,27,99,111,117, + 108,100,32,110,111,116,32,99,114,101,97,116,101,32,123,33, + 114,125,58,32,123,33,114,125,78,122,12,99,114,101,97,116, + 101,100,32,123,33,114,125,41,12,114,73,0,0,0,114,83, + 0,0,0,114,61,0,0,0,218,8,114,101,118,101,114,115, + 101,100,114,67,0,0,0,114,19,0,0,0,90,5,109,107, + 100,105,114,218,15,70,105,108,101,69,120,105,115,116,115,69, + 114,114,111,114,114,76,0,0,0,114,158,0,0,0,114,172, + 0,0,0,114,95,0,0,0,41,9,114,143,0,0,0,114, + 65,0,0,0,114,42,0,0,0,114,35,1,0,0,218,6, + 112,97,114,101,110,116,114,120,0,0,0,114,63,0,0,0, + 114,68,0,0,0,114,255,0,0,0,32,32,32,32,32,32, + 32,32,32,114,7,0,0,0,114,252,0,0,0,82,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,128,2,254, + 2,247,115,62,0,0,0,171,5,49,2,177,7,65,18,9, + 186,6,65,18,9,193,0,7,65,14,9,193,14,4,65,18, + 9,193,20,12,65,34,0,193,34,7,65,58,7,193,41,7, + 65,54,7,193,54,4,65,58,7,193,59,1,65,58,7,193, + 60,1,65,18,9,122,25,83,111,117,114,99,101,70,105,108, + 101,76,111,97,100,101,114,46,115,101,116,95,100,97,116,97, + 78,41,7,114,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,7,0,0,0, + 114,32,1,0,0,68,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,64,0,0,0,115,32,0,0,0,101,0,90,1, + 100,0,90,2,100,1,90,3,100,2,100,3,132,0,90,4, + 100,4,100,5,132,0,90,5,100,6,83,0,41,7,218,20, + 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, + 97,100,101,114,122,45,76,111,97,100,101,114,32,119,104,105, + 99,104,32,104,97,110,100,108,101,115,32,115,111,117,114,99, + 101,108,101,115,115,32,102,105,108,101,32,105,109,112,111,114, + 116,115,46,99,2,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,67,0,0,0,115,68,0,0,0,124,0,160, + 0,124,1,161,1,125,2,124,0,160,1,124,2,161,1,125, + 3,124,1,124,2,100,1,156,2,125,4,116,2,124,3,124, + 1,124,4,131,3,1,0,116,3,116,4,124,3,131,1,100, + 2,100,0,133,2,25,0,124,1,124,2,100,3,141,3,83, + 0,41,4,78,114,182,0,0,0,114,168,0,0,0,41,2, + 114,141,0,0,0,114,132,0,0,0,41,5,114,202,0,0, + 0,114,254,0,0,0,114,175,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, + 32,32,32,32,32,114,7,0,0,0,114,240,0,0,0,117, + 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,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,67,0,0,0,114,24,0,0,0,41,2,122,39, + 82,101,116,117,114,110,32,78,111,110,101,32,97,115,32,116, + 104,101,114,101,32,105,115,32,110,111,32,115,111,117,114,99, + 101,32,99,111,100,101,46,78,114,12,0,0,0,114,246,0, + 0,0,32,32,114,7,0,0,0,114,0,1,0,0,133,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,7,0,0,0,114,39,1,0,0,113,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,64,0,0,0,115,92,0, 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, - 100,3,132,0,90,4,100,4,100,5,132,0,90,5,101,6, - 90,7,100,6,100,7,132,0,90,8,100,8,100,9,132,0, - 90,9,100,19,100,11,100,12,132,1,90,10,100,13,100,14, - 132,0,90,11,101,12,100,15,100,16,132,0,131,1,90,13, - 100,17,100,18,132,0,90,14,100,10,83,0,41,20,218,10, - 70,105,108,101,70,105,110,100,101,114,122,172,70,105,108,101, - 45,98,97,115,101,100,32,102,105,110,100,101,114,46,10,10, - 32,32,32,32,73,110,116,101,114,97,99,116,105,111,110,115, - 32,119,105,116,104,32,116,104,101,32,102,105,108,101,32,115, - 121,115,116,101,109,32,97,114,101,32,99,97,99,104,101,100, - 32,102,111,114,32,112,101,114,102,111,114,109,97,110,99,101, - 44,32,98,101,105,110,103,10,32,32,32,32,114,101,102,114, - 101,115,104,101,100,32,119,104,101,110,32,116,104,101,32,100, - 105,114,101,99,116,111,114,121,32,116,104,101,32,102,105,110, - 100,101,114,32,105,115,32,104,97,110,100,108,105,110,103,32, - 104,97,115,32,98,101,101,110,32,109,111,100,105,102,105,101, - 100,46,10,10,32,32,32,32,99,2,0,0,0,0,0,0, - 0,0,0,0,0,6,0,0,0,7,0,0,0,115,114,0, - 0,0,135,5,103,0,125,3,124,2,68,0,93,16,92,2, - 138,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,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,101,32,119,105,116,104,32,116,104,101,32,112,97,116,104, - 32,116,111,32,115,101,97,114,99,104,32,111,110,32,97,110, - 100,32,97,32,118,97,114,105,97,98,108,101,32,110,117,109, - 98,101,114,32,111,102,10,32,32,32,32,32,32,32,32,50, - 45,116,117,112,108,101,115,32,99,111,110,116,97,105,110,105, - 110,103,32,116,104,101,32,108,111,97,100,101,114,32,97,110, - 100,32,116,104,101,32,102,105,108,101,32,115,117,102,102,105, - 120,101,115,32,116,104,101,32,108,111,97,100,101,114,10,32, - 32,32,32,32,32,32,32,114,101,99,111,103,110,105,122,101, - 115,46,99,1,0,0,0,0,0,0,0,0,0,0,0,3, - 0,0,0,51,0,0,0,115,24,0,0,0,129,0,124,0, - 93,7,125,1,124,1,137,2,102,2,86,0,1,0,113,2, - 100,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,32, - 32,128,114,7,0,0,0,114,8,0,0,0,217,5,0,0, - 115,4,0,0,0,6,128,18,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,130,0,0,0, - 78,41,11,114,190,0,0,0,218,8,95,108,111,97,100,101, - 114,115,114,65,0,0,0,114,86,0,0,0,114,67,0,0, - 0,114,19,0,0,0,114,82,0,0,0,218,11,95,112,97, - 116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,95, - 112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,108, - 97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,41, - 6,114,143,0,0,0,114,65,0,0,0,218,14,108,111,97, - 100,101,114,95,100,101,116,97,105,108,115,90,7,108,111,97, - 100,101,114,115,114,211,0,0,0,114,163,0,0,0,32,32, - 32,32,32,64,114,7,0,0,0,114,235,0,0,0,211,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,99,1,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,67,0,0,0,115,10,0,0, - 0,100,1,124,0,95,0,100,2,83,0,41,3,122,31,73, - 110,118,97,108,105,100,97,116,101,32,116,104,101,32,100,105, - 114,101,99,116,111,114,121,32,109,116,105,109,101,46,114,130, - 0,0,0,78,41,1,114,93,1,0,0,114,20,1,0,0, - 32,114,7,0,0,0,114,75,1,0,0,227,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,67,0,0,0,115,54,0,0, + 100,3,132,0,90,4,100,4,100,5,132,0,90,5,100,6, + 100,7,132,0,90,6,100,8,100,9,132,0,90,7,100,10, + 100,11,132,0,90,8,100,12,100,13,132,0,90,9,100,14, + 100,15,132,0,90,10,100,16,100,17,132,0,90,11,101,12, + 100,18,100,19,132,0,131,1,90,13,100,20,83,0,41,21, + 114,28,1,0,0,122,93,76,111,97,100,101,114,32,102,111, + 114,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,115,46,10,10,32,32,32,32,84,104,101,32,99,111, + 110,115,116,114,117,99,116,111,114,32,105,115,32,100,101,115, + 105,103,110,101,100,32,116,111,32,119,111,114,107,32,119,105, + 116,104,32,70,105,108,101,70,105,110,100,101,114,46,10,10, + 32,32,32,32,99,3,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,67,0,0,0,115,16,0,0,0,124,1, + 124,0,95,0,124,2,124,0,95,1,100,0,83,0,114,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,32,32,32,114,7,0,0, + 0,114,235,0,0,0,146,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,67,0,0,0,114,11,1,0,0, + 114,69,0,0,0,114,12,1,0,0,114,14,1,0,0,32, + 32,114,7,0,0,0,114,15,1,0,0,150,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,67,0,0,0,114,17,1,0,0,114, + 69,0,0,0,114,18,1,0,0,114,20,1,0,0,32,114, + 7,0,0,0,114,21,1,0,0,154,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,0,0,0,0,0,0, + 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, + 0,160,1,116,2,106,3,124,1,161,2,125,2,116,0,160, + 4,100,1,124,1,106,5,124,0,106,6,161,3,1,0,124, + 2,83,0,41,3,122,40,67,114,101,97,116,101,32,97,110, + 32,117,110,105,110,105,116,105,97,108,105,122,101,100,32,101, + 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,122, + 38,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,123,33,114,125,32,108,111,97,100,101,100,32,102,114, + 111,109,32,123,33,114,125,78,41,7,114,158,0,0,0,114, + 241,0,0,0,114,186,0,0,0,90,14,99,114,101,97,116, + 101,95,100,121,110,97,109,105,99,114,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,32,32,32,114,7,0,0, + 0,114,238,0,0,0,157,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,99,2,0,0,0,0,0,0,0,0,0, + 0,0,5,0,0,0,67,0,0,0,115,36,0,0,0,116, + 0,160,1,116,2,106,3,124,1,161,2,1,0,116,0,160, + 4,100,1,124,0,106,5,124,0,106,6,161,3,1,0,100, + 2,83,0,41,3,122,30,73,110,105,116,105,97,108,105,122, + 101,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,122,40,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,32,123,33,114,125,32,101,120,101, + 99,117,116,101,100,32,102,114,111,109,32,123,33,114,125,78, + 41,7,114,158,0,0,0,114,241,0,0,0,114,186,0,0, + 0,90,12,101,120,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,32,32,114,7,0,0, + 0,114,244,0,0,0,165,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, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,115,38,0,0,0,135,2,116,0,124,0,106,1,131, + 1,100,1,25,0,138,2,116,2,136,2,102,1,100,2,100, + 3,132,8,116,3,68,0,131,1,131,1,83,0,41,5,122, + 49,82,101,116,117,114,110,32,84,114,117,101,32,105,102,32, + 116,104,101,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,32,105,115,32,97,32,112,97,99,107,97,103, + 101,46,114,3,0,0,0,99,1,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,51,0,0,0,115,28,0,0, + 0,129,0,124,0,93,9,125,1,137,2,100,0,124,1,23, + 0,107,2,86,0,1,0,113,2,100,1,83,0,41,2,114, + 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,32,32,128,114,7,0,0,0,114,8,0,0, + 0,174,4,0,0,115,6,0,0,0,6,128,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,99,97,108,115,62,46,60, + 103,101,110,101,120,112,114,62,78,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, + 32,32,64,114,7,0,0,0,114,205,0,0,0,171,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,101,99,2,0,0,0,0,0,0,0,0,0, + 0,0,1,0,0,0,67,0,0,0,114,24,0,0,0,41, + 2,122,63,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,97,110,32,101,120,116,101,110,115,105,111,110,32,109, + 111,100,117,108,101,32,99,97,110,110,111,116,32,99,114,101, + 97,116,101,32,97,32,99,111,100,101,32,111,98,106,101,99, + 116,46,78,114,12,0,0,0,114,246,0,0,0,32,32,114, + 7,0,0,0,114,240,0,0,0,177,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,0, + 0,0,1,0,0,0,67,0,0,0,114,24,0,0,0,41, + 2,122,53,82,101,116,117,114,110,32,78,111,110,101,32,97, + 115,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,115,32,104,97,118,101,32,110,111,32,115,111,117,114, + 99,101,32,99,111,100,101,46,78,114,12,0,0,0,114,246, + 0,0,0,32,32,114,7,0,0,0,114,0,1,0,0,181, + 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,67,0, + 0,0,114,24,1,0,0,114,25,1,0,0,114,74,0,0, + 0,114,246,0,0,0,32,32,114,7,0,0,0,114,202,0, + 0,0,185,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,114,149,0,0,0,114,148,0,0,0,114, + 150,0,0,0,114,151,0,0,0,114,235,0,0,0,114,15, + 1,0,0,114,21,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,7,0,0,0,114,28,1,0,0,138,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, + 0,0,2,0,0,0,64,0,0,0,115,104,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,100,2,100,3,132, + 0,90,4,100,4,100,5,132,0,90,5,100,6,100,7,132, + 0,90,6,100,8,100,9,132,0,90,7,100,10,100,11,132, + 0,90,8,100,12,100,13,132,0,90,9,100,14,100,15,132, + 0,90,10,100,16,100,17,132,0,90,11,100,18,100,19,132, + 0,90,12,100,20,100,21,132,0,90,13,100,22,100,23,132, + 0,90,14,100,24,83,0,41,25,218,14,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,97,38,1,0,0,82,101, + 112,114,101,115,101,110,116,115,32,97,32,110,97,109,101,115, + 112,97,99,101,32,112,97,99,107,97,103,101,39,115,32,112, + 97,116,104,46,32,32,73,116,32,117,115,101,115,32,116,104, + 101,32,109,111,100,117,108,101,32,110,97,109,101,10,32,32, + 32,32,116,111,32,102,105,110,100,32,105,116,115,32,112,97, + 114,101,110,116,32,109,111,100,117,108,101,44,32,97,110,100, + 32,102,114,111,109,32,116,104,101,114,101,32,105,116,32,108, + 111,111,107,115,32,117,112,32,116,104,101,32,112,97,114,101, + 110,116,39,115,10,32,32,32,32,95,95,112,97,116,104,95, + 95,46,32,32,87,104,101,110,32,116,104,105,115,32,99,104, + 97,110,103,101,115,44,32,116,104,101,32,109,111,100,117,108, + 101,39,115,32,111,119,110,32,112,97,116,104,32,105,115,32, + 114,101,99,111,109,112,117,116,101,100,44,10,32,32,32,32, + 117,115,105,110,103,32,112,97,116,104,95,102,105,110,100,101, + 114,46,32,32,70,111,114,32,116,111,112,45,108,101,118,101, + 108,32,109,111,100,117,108,101,115,44,32,116,104,101,32,112, + 97,114,101,110,116,32,109,111,100,117,108,101,39,115,32,112, + 97,116,104,10,32,32,32,32,105,115,32,115,121,115,46,112, + 97,116,104,46,99,4,0,0,0,0,0,0,0,0,0,0, + 0,3,0,0,0,67,0,0,0,115,36,0,0,0,124,1, + 124,0,95,0,124,2,124,0,95,1,116,2,124,0,160,3, + 161,0,131,1,124,0,95,4,124,3,124,0,95,5,100,0, + 83,0,114,69,0,0,0,41,6,218,5,95,110,97,109,101, + 218,5,95,112,97,116,104,114,136,0,0,0,218,16,95,103, + 101,116,95,112,97,114,101,110,116,95,112,97,116,104,218,17, + 95,108,97,115,116,95,112,97,114,101,110,116,95,112,97,116, + 104,218,12,95,112,97,116,104,95,102,105,110,100,101,114,169, + 4,114,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,32,32,32, + 32,114,7,0,0,0,114,235,0,0,0,198,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,67,0,0,0,115, + 38,0,0,0,124,0,106,0,160,1,100,1,161,1,92,3, + 125,1,125,2,125,3,124,2,100,2,107,2,114,15,100,3, + 83,0,124,1,100,4,102,2,83,0,41,6,122,62,82,101, + 116,117,114,110,115,32,97,32,116,117,112,108,101,32,111,102, + 32,40,112,97,114,101,110,116,45,109,111,100,117,108,101,45, + 110,97,109,101,44,32,112,97,114,101,110,116,45,112,97,116, + 104,45,97,116,116,114,45,110,97,109,101,41,114,97,0,0, + 0,114,10,0,0,0,41,2,114,16,0,0,0,114,65,0, + 0,0,90,8,95,95,112,97,116,104,95,95,78,41,2,114, + 45,1,0,0,114,104,0,0,0,41,4,114,143,0,0,0, + 114,38,1,0,0,218,3,100,111,116,90,2,109,101,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, + 204,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,116,104,95,110,97,109,101,115,99,1, + 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,67, + 0,0,0,115,28,0,0,0,124,0,160,0,161,0,92,2, + 125,1,125,2,116,1,116,2,106,3,124,1,25,0,124,2, + 131,2,83,0,114,69,0,0,0,41,4,114,52,1,0,0, + 114,154,0,0,0,114,16,0,0,0,218,7,109,111,100,117, + 108,101,115,41,3,114,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,32,32, + 32,114,7,0,0,0,114,47,1,0,0,214,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,0,0,0,0,0,0,0,0,0,0,4,0,0,0,67, + 0,0,0,115,80,0,0,0,116,0,124,0,160,1,161,0, + 131,1,125,1,124,1,124,0,106,2,107,3,114,37,124,0, + 160,3,124,0,106,4,124,1,161,2,125,2,124,2,100,0, + 117,1,114,34,124,2,106,5,100,0,117,0,114,34,124,2, + 106,6,114,34,124,2,106,6,124,0,95,7,124,1,124,0, + 95,2,124,0,106,7,83,0,114,69,0,0,0,41,8,114, + 136,0,0,0,114,47,1,0,0,114,48,1,0,0,114,49, + 1,0,0,114,45,1,0,0,114,163,0,0,0,114,201,0, + 0,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, + 32,32,32,114,7,0,0,0,218,12,95,114,101,99,97,108, + 99,117,108,97,116,101,218,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,117,108,97,116, + 101,99,1,0,0,0,0,0,0,0,0,0,0,0,3,0, + 0,0,67,0,0,0,243,12,0,0,0,116,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,32,114, + 7,0,0,0,218,8,95,95,105,116,101,114,95,95,231,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,0,67,0,0,0,115,12,0,0, + 0,124,0,160,0,161,0,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,32,32,114,7,0,0,0,218,11, + 95,95,103,101,116,105,116,101,109,95,95,234,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,3,0,0,0,67,0,0,0,115,14,0,0,0,124, + 2,124,0,106,0,124,1,60,0,100,0,83,0,114,69,0, + 0,0,41,1,114,46,1,0,0,41,3,114,143,0,0,0, + 114,60,1,0,0,114,65,0,0,0,32,32,32,114,7,0, + 0,0,218,11,95,95,115,101,116,105,116,101,109,95,95,237, + 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,67,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,32,114,7,0,0, + 0,218,7,95,95,108,101,110,95,95,240,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,67,0,0,0,243,12,0,0,0,100,1,160,0,124,0, + 106,1,161,1,83,0,41,2,78,122,20,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,40,123,33,114,125,41,41, + 2,114,89,0,0,0,114,46,1,0,0,114,20,1,0,0, + 32,114,7,0,0,0,218,8,95,95,114,101,112,114,95,95, + 243,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,0,3,0,0,0,67,0,0,0,115,12,0,0, + 0,124,1,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,32,32,114,7,0,0,0,218,12,95,95,99, + 111,110,116,97,105,110,115,95,95,246,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,0,0, + 0,3,0,0,0,67,0,0,0,115,16,0,0,0,124,0, + 106,0,160,1,124,1,161,1,1,0,100,0,83,0,114,69, + 0,0,0,41,2,114,46,1,0,0,114,61,0,0,0,114, + 66,1,0,0,32,32,114,7,0,0,0,114,61,0,0,0, + 249,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,114,151,0,0,0,114,235, + 0,0,0,114,52,1,0,0,114,47,1,0,0,114,54,1, + 0,0,114,57,1,0,0,114,61,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,7,0,0,0,114, + 44,1,0,0,191,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,64,0,0,0,115,88,0,0,0,101,0,90,1,100, + 0,90,2,100,1,100,2,132,0,90,3,101,4,100,3,100, + 4,132,0,131,1,90,5,100,5,100,6,132,0,90,6,100, + 7,100,8,132,0,90,7,100,9,100,10,132,0,90,8,100, + 11,100,12,132,0,90,9,100,13,100,14,132,0,90,10,100, + 15,100,16,132,0,90,11,100,17,100,18,132,0,90,12,100, + 19,83,0,41,20,218,16,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,99,4,0,0,0,0,0,0,0, + 0,0,0,0,4,0,0,0,67,0,0,0,115,18,0,0, + 0,116,0,124,1,124,2,124,3,131,3,124,0,95,1,100, + 0,83,0,114,69,0,0,0,41,2,114,44,1,0,0,114, + 46,1,0,0,114,50,1,0,0,32,32,32,32,114,7,0, + 0,0,114,235,0,0,0,255,4,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,67,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,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,101, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,84,104,101,32,105,109,112,111, + 114,116,32,109,97,99,104,105,110,101,114,121,32,100,111,101, + 115,32,116,104,101,32,106,111,98,32,105,116,115,101,108,102, + 46,10,10,32,32,32,32,32,32,32,32,122,82,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,40,41,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,32,97,110,100,32,115,108, + 97,116,101,100,32,102,111,114,32,114,101,109,111,118,97,108, + 32,105,110,32,80,121,116,104,111,110,32,51,46,49,50,122, + 25,60,109,111,100,117,108,101,32,123,33,114,125,32,40,110, + 97,109,101,115,112,97,99,101,41,62,78,41,5,114,99,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,32,114,7, + 0,0,0,218,11,109,111,100,117,108,101,95,114,101,112,114, + 2,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,67,0,0,0,114,24,0,0,0,41,2, + 78,84,114,12,0,0,0,114,246,0,0,0,32,32,114,7, + 0,0,0,114,205,0,0,0,13,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,67,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,32,32,114,7,0,0,0,114,0,1,0,0,16,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, + 0,0,0,0,0,6,0,0,0,67,0,0,0,115,16,0, + 0,0,116,0,100,1,100,2,100,3,100,4,100,5,141,4, + 83,0,41,6,78,114,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,32,32,114, + 7,0,0,0,114,240,0,0,0,19,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,67,0,0,0,114,24,0,0,0,114,236,0,0, + 0,114,12,0,0,0,114,237,0,0,0,32,32,114,7,0, + 0,0,114,238,0,0,0,22,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,67,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,32,32,114,7,0,0,0,114,244,0,0,0,25,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,0,0,0,0,0,0,4,0,0,0,67,0,0,0,115, + 26,0,0,0,116,0,160,1,100,1,124,0,106,2,161,2, + 1,0,116,0,160,3,124,0,124,1,161,2,83,0,41,3, + 122,98,76,111,97,100,32,97,32,110,97,109,101,115,112,97, + 99,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,122,38,110,97,109,101,115,112,97,99,101,32, + 109,111,100,117,108,101,32,108,111,97,100,101,100,32,119,105, + 116,104,32,112,97,116,104,32,123,33,114,125,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,32,32,114,7,0,0,0,114, + 247,0,0,0,28,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,0,0,0,0, + 0,0,0,0,0,2,0,0,0,67,0,0,0,115,22,0, + 0,0,100,1,100,2,108,0,109,1,125,2,1,0,124,2, + 124,0,106,2,131,1,83,0,41,3,78,114,0,0,0,0, + 41,1,218,15,78,97,109,101,115,112,97,99,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,32,32,32,114,7,0,0,0,114,31,1, + 0,0,40,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,100,101,114,78,41,13,114,149,0, + 0,0,114,148,0,0,0,114,150,0,0,0,114,235,0,0, + 0,114,232,0,0,0,114,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,7,0,0,0,114,70,1,0,0,254,4,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,0,4,0,0,0,64,0,0,0,115,118,0,0,0, + 101,0,90,1,100,0,90,2,100,1,90,3,101,4,100,2, + 100,3,132,0,131,1,90,5,101,4,100,4,100,5,132,0, + 131,1,90,6,101,7,100,6,100,7,132,0,131,1,90,8, + 101,7,100,8,100,9,132,0,131,1,90,9,101,7,100,19, + 100,11,100,12,132,1,131,1,90,10,101,7,100,20,100,13, + 100,14,132,1,131,1,90,11,101,7,100,19,100,15,100,16, + 132,1,131,1,90,12,101,4,100,17,100,18,132,0,131,1, + 90,13,100,10,83,0,41,21,218,10,80,97,116,104,70,105, + 110,100,101,114,122,62,77,101,116,97,32,112,97,116,104,32, + 102,105,110,100,101,114,32,102,111,114,32,115,121,115,46,112, + 97,116,104,32,97,110,100,32,112,97,99,107,97,103,101,32, + 95,95,112,97,116,104,95,95,32,97,116,116,114,105,98,117, + 116,101,115,46,99,0,0,0,0,0,0,0,0,0,0,0, + 0,4,0,0,0,67,0,0,0,115,64,0,0,0,116,0, + 116,1,106,2,160,3,161,0,131,1,68,0,93,22,92,2, + 125,0,125,1,124,1,100,1,117,0,114,20,116,1,106,2, + 124,0,61,0,113,7,116,4,124,1,100,2,131,2,114,29, + 124,1,160,5,161,0,1,0,113,7,100,1,83,0,41,3, + 122,125,67,97,108,108,32,116,104,101,32,105,110,118,97,108, + 105,100,97,116,101,95,99,97,99,104,101,115,40,41,32,109, + 101,116,104,111,100,32,111,110,32,97,108,108,32,112,97,116, + 104,32,101,110,116,114,121,32,102,105,110,100,101,114,115,10, + 32,32,32,32,32,32,32,32,115,116,111,114,101,100,32,105, + 110,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,115,32,40,119,104,101,114, + 101,32,105,109,112,108,101,109,101,110,116,101,100,41,46,78, + 218,17,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,41,6,218,4,108,105,115,116,114,16,0,0,0, + 218,19,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,218,5,105,116,101,109,115,114,152,0,0, + 0,114,75,1,0,0,41,2,114,141,0,0,0,218,6,102, + 105,110,100,101,114,32,32,114,7,0,0,0,114,75,1,0, + 0,51,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,67,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,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,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,102,111,114, + 32,97,32,102,105,110,100,101,114,32,102,111,114,32,39,112, + 97,116,104,39,46,78,122,23,115,121,115,46,112,97,116,104, + 95,104,111,111,107,115,32,105,115,32,101,109,112,116,121,41, + 6,114,16,0,0,0,218,10,112,97,116,104,95,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,32,32,114,7,0,0,0,218,11,95,112,97,116, + 104,95,104,111,111,107,115,61,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, + 67,0,0,0,115,104,0,0,0,124,1,100,1,107,2,114, + 21,9,0,116,0,160,1,161,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,5,121,50,1,0,1,0,1, + 0,124,0,160,6,124,1,161,1,125,2,124,2,116,3,106, + 4,124,1,60,0,89,0,124,2,83,0,37,0,119,0,119, + 0,41,3,122,210,71,101,116,32,116,104,101,32,102,105,110, + 100,101,114,32,102,111,114,32,116,104,101,32,112,97,116,104, + 32,101,110,116,114,121,32,102,114,111,109,32,115,121,115,46, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,46,10,10,32,32,32,32,32,32,32,32,73,102, + 32,116,104,101,32,112,97,116,104,32,101,110,116,114,121,32, + 105,115,32,110,111,116,32,105,110,32,116,104,101,32,99,97, + 99,104,101,44,32,102,105,110,100,32,116,104,101,32,97,112, + 112,114,111,112,114,105,97,116,101,32,102,105,110,100,101,114, + 10,32,32,32,32,32,32,32,32,97,110,100,32,99,97,99, + 104,101,32,105,116,46,32,73,102,32,110,111,32,102,105,110, + 100,101,114,32,105,115,32,97,118,97,105,108,97,98,108,101, + 44,32,115,116,111,114,101,32,78,111,110,101,46,10,10,32, + 32,32,32,32,32,32,32,114,10,0,0,0,78,41,7,114, + 19,0,0,0,114,82,0,0,0,218,17,70,105,108,101,78, + 111,116,70,111,117,110,100,69,114,114,111,114,114,16,0,0, + 0,114,77,1,0,0,218,8,75,101,121,69,114,114,111,114, + 114,81,1,0,0,41,3,114,220,0,0,0,114,65,0,0, + 0,114,79,1,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,74,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,17,49,7,178,1,49,7,179,1,20,7,122,31, + 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, + 95,105,109,112,111,114,116,101,114,95,99,97,99,104,101,99, + 3,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, + 67,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,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,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,41,4,78,114,160,0,0,0,122,53,46,102,105, + 110,100,95,115,112,101,99,40,41,32,110,111,116,32,102,111, + 117,110,100,59,32,102,97,108,108,105,110,103,32,98,97,99, + 107,32,116,111,32,102,105,110,100,95,108,111,97,100,101,114, + 40,41,122,53,46,102,105,110,100,95,115,112,101,99,40,41, + 32,110,111,116,32,102,111,117,110,100,59,32,102,97,108,108, + 105,110,103,32,98,97,99,107,32,116,111,32,102,105,110,100, + 95,109,111,100,117,108,101,40,41,41,11,114,152,0,0,0, + 114,158,0,0,0,90,12,95,111,98,106,101,99,116,95,110, + 97,109,101,114,99,0,0,0,114,100,0,0,0,114,161,0, + 0,0,114,160,0,0,0,114,228,0,0,0,114,223,0,0, + 0,114,206,0,0,0,114,201,0,0,0,41,7,114,220,0, + 0,0,114,162,0,0,0,114,79,1,0,0,114,165,0,0, + 0,114,163,0,0,0,114,164,0,0,0,114,209,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,96,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,95,115, + 112,101,99,78,99,4,0,0,0,0,0,0,0,0,0,0, + 0,5,0,0,0,67,0,0,0,115,166,0,0,0,103,0, + 125,4,124,2,68,0,93,67,125,5,116,0,124,5,116,1, + 116,2,102,2,131,2,115,14,113,4,124,0,160,3,124,5, + 161,1,125,6,124,6,100,1,117,1,114,71,116,4,124,6, + 100,2,131,2,114,35,124,6,160,5,124,1,124,3,161,2, + 125,7,110,6,124,0,160,6,124,1,124,6,161,2,125,7, + 124,7,100,1,117,0,114,46,113,4,124,7,106,7,100,1, + 117,1,114,55,124,7,2,0,1,0,83,0,124,7,106,8, + 125,8,124,8,100,1,117,0,114,66,116,9,100,3,131,1, + 130,1,124,4,160,10,124,8,161,1,1,0,113,4,116,11, + 160,12,124,1,100,1,161,2,125,7,124,4,124,7,95,8, + 124,7,83,0,41,4,122,63,70,105,110,100,32,116,104,101, + 32,108,111,97,100,101,114,32,111,114,32,110,97,109,101,115, + 112,97,99,101,95,112,97,116,104,32,102,111,114,32,116,104, + 105,115,32,109,111,100,117,108,101,47,112,97,99,107,97,103, + 101,32,110,97,109,101,46,78,114,225,0,0,0,122,19,115, + 112,101,99,32,109,105,115,115,105,110,103,32,108,111,97,100, + 101,114,41,13,114,184,0,0,0,114,109,0,0,0,218,5, + 98,121,116,101,115,114,84,1,0,0,114,152,0,0,0,114, + 225,0,0,0,114,85,1,0,0,114,163,0,0,0,114,201, + 0,0,0,114,142,0,0,0,114,190,0,0,0,114,158,0, + 0,0,114,206,0,0,0,41,9,114,220,0,0,0,114,162, + 0,0,0,114,65,0,0,0,114,224,0,0,0,218,14,110, + 97,109,101,115,112,97,99,101,95,112,97,116,104,90,5,101, + 110,116,114,121,114,79,1,0,0,114,209,0,0,0,114,164, + 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,117,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,104,70,105,110,100,101,114, + 46,95,103,101,116,95,115,112,101,99,99,4,0,0,0,0, + 0,0,0,0,0,0,0,5,0,0,0,67,0,0,0,115, + 94,0,0,0,124,2,100,1,117,0,114,7,116,0,106,1, + 125,2,124,0,160,2,124,1,124,2,124,3,161,3,125,4, + 124,4,100,1,117,0,114,20,100,1,83,0,124,4,106,3, + 100,1,117,0,114,45,124,4,106,4,125,5,124,5,114,43, + 100,1,124,4,95,5,116,6,124,1,124,5,124,0,106,2, + 131,3,124,4,95,4,124,4,83,0,100,1,83,0,124,4, + 83,0,41,2,122,141,84,114,121,32,116,111,32,102,105,110, + 100,32,97,32,115,112,101,99,32,102,111,114,32,39,102,117, + 108,108,110,97,109,101,39,32,111,110,32,115,121,115,46,112, + 97,116,104,32,111,114,32,39,112,97,116,104,39,46,10,10, + 32,32,32,32,32,32,32,32,84,104,101,32,115,101,97,114, + 99,104,32,105,115,32,98,97,115,101,100,32,111,110,32,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,97,110, + 100,32,115,121,115,46,112,97,116,104,95,105,109,112,111,114, + 116,101,114,95,99,97,99,104,101,46,10,32,32,32,32,32, + 32,32,32,78,41,7,114,16,0,0,0,114,65,0,0,0, + 114,88,1,0,0,114,163,0,0,0,114,201,0,0,0,114, + 204,0,0,0,114,44,1,0,0,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,32,32,32,32,32,32,114, + 7,0,0,0,114,225,0,0,0,149,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,67,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,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,102,105,110,100,32,97,32,108,111,97,100,101,114,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, - 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, - 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, - 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, - 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, - 114,116,105,111,110,115,41,46,10,10,32,32,32,32,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, - 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 122,101,70,105,108,101,70,105,110,100,101,114,46,102,105,110, - 100,95,108,111,97,100,101,114,40,41,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,32,97,110,100,32,115,108,97, - 116,101,100,32,102,111,114,32,114,101,109,111,118,97,108,32, - 105,110,32,80,121,116,104,111,110,32,51,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,41,6,114,99,0,0,0,114, - 100,0,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,32,32,32,114,7,0,0, - 0,114,160,0,0,0,233,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,0,0,0, - 0,0,0,0,0,0,0,6,0,0,0,67,0,0,0,115, - 26,0,0,0,124,1,124,2,124,3,131,2,125,6,116,0, - 124,2,124,3,124,6,124,4,100,1,141,4,83,0,41,2, - 78,114,200,0,0,0,41,1,114,212,0,0,0,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,32,32,32,32,32,32,32,114,7,0,0,0,114, - 88,1,0,0,248,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,67,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,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,0,114,56,124,0,106,10,125, - 6,124,4,160,11,161,0,125,7,110,5,124,0,106,12,125, - 6,124,4,125,7,124,7,124,6,118,0,114,108,116,13,124, - 0,106,2,124,4,131,2,125,8,124,0,106,14,68,0,93, - 29,92,2,125,9,125,10,100,5,124,9,23,0,125,11,116, - 13,124,8,124,11,131,2,125,12,116,15,124,12,131,1,114, - 103,124,0,160,16,124,10,124,1,124,12,124,8,103,1,124, - 2,161,5,2,0,1,0,83,0,113,74,116,17,124,8,131, - 1,125,3,124,0,106,14,68,0,93,55,92,2,125,9,125, - 10,9,0,116,13,124,0,106,2,124,4,124,9,23,0,131, - 2,125,12,110,12,35,0,4,0,116,18,121,189,1,0,1, - 0,1,0,89,0,1,0,100,6,83,0,37,0,116,19,160, - 20,100,7,124,12,100,3,100,8,166,3,1,0,124,7,124, - 9,23,0,124,6,118,0,114,166,116,15,124,12,131,1,114, - 166,124,0,160,16,124,10,124,1,124,12,100,6,124,2,161, - 5,2,0,1,0,83,0,113,111,124,3,114,187,116,19,160, - 20,100,9,124,8,161,2,1,0,116,19,160,21,124,1,100, - 6,161,2,125,13,124,8,103,1,124,13,95,22,124,13,83, - 0,100,6,83,0,119,0,119,0,41,10,122,111,84,114,121, - 32,116,111,32,102,105,110,100,32,97,32,115,112,101,99,32, - 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, - 100,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, - 32,32,32,82,101,116,117,114,110,115,32,116,104,101,32,109, - 97,116,99,104,105,110,103,32,115,112,101,99,44,32,111,114, - 32,78,111,110,101,32,105,102,32,110,111,116,32,102,111,117, - 110,100,46,10,32,32,32,32,32,32,32,32,70,114,97,0, - 0,0,114,45,0,0,0,114,130,0,0,0,114,235,0,0, - 0,78,122,9,116,114,121,105,110,103,32,123,125,41,1,90, - 9,118,101,114,98,111,115,105,116,121,122,25,112,111,115,115, - 105,98,108,101,32,110,97,109,101,115,112,97,99,101,32,102, - 111,114,32,123,125,41,23,114,104,0,0,0,114,75,0,0, - 0,114,65,0,0,0,114,19,0,0,0,114,82,0,0,0, - 114,33,1,0,0,114,76,0,0,0,114,93,1,0,0,218, - 11,95,102,105,108,108,95,99,97,99,104,101,114,22,0,0, - 0,114,96,1,0,0,114,131,0,0,0,114,95,1,0,0, - 114,67,0,0,0,114,92,1,0,0,114,80,0,0,0,114, - 88,1,0,0,114,83,0,0,0,114,111,0,0,0,114,158, - 0,0,0,114,172,0,0,0,114,206,0,0,0,114,201,0, - 0,0,41,14,114,143,0,0,0,114,162,0,0,0,114,224, - 0,0,0,90,12,105,115,95,110,97,109,101,115,112,97,99, - 101,90,11,116,97,105,108,95,109,111,100,117,108,101,114,192, - 0,0,0,90,5,99,97,99,104,101,90,12,99,97,99,104, - 101,95,109,111,100,117,108,101,90,9,98,97,115,101,95,112, - 97,116,104,114,41,1,0,0,114,210,0,0,0,90,13,105, - 110,105,116,95,102,105,108,101,110,97,109,101,90,9,102,117, - 108,108,95,112,97,116,104,114,209,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,253,5,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,18,1,2,128,12,1,8,1,2,128,16,1,12, - 1,8,1,10,1,4,1,8,255,2,128,4,2,12,1,12, - 1,8,1,4,1,4,1,2,244,2,228,115,31,0,0,0, - 138,10,21,0,149,9,32,7,193,52,8,65,61,2,193,61, - 7,66,8,9,194,61,1,66,8,9,194,62,1,32,7,122, - 20,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, - 95,115,112,101,99,99,1,0,0,0,0,0,0,0,0,0, - 0,0,10,0,0,0,67,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,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,131,0,125,3,124,2,68,0,93,28,125,4,124, - 4,160,12,100,2,161,1,92,3,125,5,125,6,125,7,124, - 6,114,67,100,3,160,13,124,5,124,7,160,14,161,0,161, - 2,125,8,110,2,124,5,125,8,124,3,160,15,124,8,161, - 1,1,0,113,46,124,3,124,0,95,11,116,7,106,8,160, - 9,116,16,161,1,114,94,100,4,100,5,132,0,124,2,68, - 0,131,1,124,0,95,17,100,6,83,0,100,6,83,0,119, - 0,41,7,122,68,70,105,108,108,32,116,104,101,32,99,97, - 99,104,101,32,111,102,32,112,111,116,101,110,116,105,97,108, - 32,109,111,100,117,108,101,115,32,97,110,100,32,112,97,99, - 107,97,103,101,115,32,102,111,114,32,116,104,105,115,32,100, - 105,114,101,99,116,111,114,121,46,114,15,0,0,0,114,97, - 0,0,0,114,88,0,0,0,99,1,0,0,0,0,0,0, - 0,0,0,0,0,4,0,0,0,83,0,0,0,115,20,0, - 0,0,104,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,32,32,114, - 7,0,0,0,114,14,0,0,0,77,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,116,99, - 111,109,112,62,78,41,18,114,65,0,0,0,114,19,0,0, - 0,90,7,108,105,115,116,100,105,114,114,82,0,0,0,114, - 82,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, - 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, - 116,111,114,121,69,114,114,111,114,114,16,0,0,0,114,26, - 0,0,0,114,27,0,0,0,114,94,1,0,0,114,95,1, - 0,0,114,126,0,0,0,114,89,0,0,0,114,131,0,0, - 0,218,3,97,100,100,114,28,0,0,0,114,96,1,0,0, - 41,9,114,143,0,0,0,114,65,0,0,0,90,8,99,111, - 110,116,101,110,116,115,90,21,108,111,119,101,114,95,115,117, - 102,102,105,120,95,99,111,110,116,101,110,116,115,114,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,32,32,32,32,32, - 32,32,32,32,114,7,0,0,0,114,98,1,0,0,48,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,0,142,12,28,7,193,32, - 1,28,7,122,22,70,105,108,101,70,105,110,100,101,114,46, - 95,102,105,108,108,95,99,97,99,104,101,99,1,0,0,0, - 0,0,0,0,0,0,0,0,3,0,0,0,7,0,0,0, - 115,22,0,0,0,135,3,135,4,136,3,136,4,102,2,100, - 1,100,2,132,8,125,2,124,2,83,0,41,4,97,20,1, - 0,0,65,32,99,108,97,115,115,32,109,101,116,104,111,100, - 32,119,104,105,99,104,32,114,101,116,117,114,110,115,32,97, - 32,99,108,111,115,117,114,101,32,116,111,32,117,115,101,32, - 111,110,32,115,121,115,46,112,97,116,104,95,104,111,111,107, - 10,32,32,32,32,32,32,32,32,119,104,105,99,104,32,119, - 105,108,108,32,114,101,116,117,114,110,32,97,110,32,105,110, - 115,116,97,110,99,101,32,117,115,105,110,103,32,116,104,101, - 32,115,112,101,99,105,102,105,101,100,32,108,111,97,100,101, - 114,115,32,97,110,100,32,116,104,101,32,112,97,116,104,10, - 32,32,32,32,32,32,32,32,99,97,108,108,101,100,32,111, - 110,32,116,104,101,32,99,108,111,115,117,114,101,46,10,10, - 32,32,32,32,32,32,32,32,73,102,32,116,104,101,32,112, - 97,116,104,32,99,97,108,108,101,100,32,111,110,32,116,104, - 101,32,99,108,111,115,117,114,101,32,105,115,32,110,111,116, - 32,97,32,100,105,114,101,99,116,111,114,121,44,32,73,109, - 112,111,114,116,69,114,114,111,114,32,105,115,10,32,32,32, - 32,32,32,32,32,114,97,105,115,101,100,46,10,10,32,32, - 32,32,32,32,32,32,99,1,0,0,0,0,0,0,0,0, - 0,0,0,4,0,0,0,19,0,0,0,115,36,0,0,0, - 116,0,124,0,131,1,115,10,116,1,100,1,124,0,100,2, - 141,2,130,1,137,1,124,0,103,1,137,2,162,1,82,0, - 142,0,83,0,41,4,122,45,80,97,116,104,32,104,111,111, - 107,32,102,111,114,32,105,109,112,111,114,116,108,105,98,46, - 109,97,99,104,105,110,101,114,121,46,70,105,108,101,70,105, - 110,100,101,114,46,122,30,111,110,108,121,32,100,105,114,101, - 99,116,111,114,105,101,115,32,97,114,101,32,115,117,112,112, - 111,114,116,101,100,114,74,0,0,0,78,41,2,114,83,0, - 0,0,114,142,0,0,0,41,3,114,65,0,0,0,114,220, - 0,0,0,114,97,1,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,89,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,111,111,107,95,102,111,114,95,70,105,108,101, - 70,105,110,100,101,114,78,114,12,0,0,0,41,5,114,220, - 0,0,0,114,97,1,0,0,114,102,1,0,0,114,220,0, - 0,0,114,97,1,0,0,96,96,32,64,64,114,7,0,0, - 0,218,9,112,97,116,104,95,104,111,111,107,79,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,67,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,32,114,7,0,0,0,114,65,1,0, - 0,97,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,150,0,0,0,114,151,0,0,0,114, - 235,0,0,0,114,75,1,0,0,114,166,0,0,0,114,228, - 0,0,0,114,160,0,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,7,0,0,0, - 114,91,1,0,0,202,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,67,0,0,0,115,146,0,0,0,124,0,160,0,100,1, - 161,1,125,4,124,0,160,0,100,2,161,1,125,5,124,4, - 115,33,124,5,114,18,124,5,106,1,125,4,110,15,124,2, - 124,3,107,2,114,28,116,2,124,1,124,2,131,2,125,4, - 110,5,116,3,124,1,124,2,131,2,125,4,124,5,115,42, - 116,4,124,1,124,2,124,4,100,3,141,3,125,5,9,0, - 124,5,124,0,100,2,60,0,124,4,124,0,100,1,60,0, - 124,2,124,0,100,4,60,0,124,3,124,0,100,5,60,0, - 100,0,83,0,35,0,4,0,116,5,121,72,1,0,1,0, - 1,0,89,0,100,0,83,0,37,0,119,0,41,6,78,218, - 10,95,95,108,111,97,100,101,114,95,95,218,8,95,95,115, - 112,101,99,95,95,41,1,114,163,0,0,0,90,8,95,95, - 102,105,108,101,95,95,90,10,95,95,99,97,99,104,101,100, - 95,95,41,6,218,3,103,101,116,114,163,0,0,0,114,39, - 1,0,0,114,32,1,0,0,114,212,0,0,0,218,9,69, - 120,99,101,112,116,105,111,110,41,6,90,2,110,115,114,141, - 0,0,0,90,8,112,97,116,104,110,97,109,101,90,9,99, - 112,97,116,104,110,97,109,101,114,163,0,0,0,114,209,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,103,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,67,0,0,0,115,38,0,0, - 0,116,0,116,1,160,2,161,0,102,2,125,0,116,3,116, - 4,102,2,125,1,116,5,116,6,102,2,125,2,124,0,124, - 1,124,2,103,3,83,0,41,2,122,95,82,101,116,117,114, - 110,115,32,97,32,108,105,115,116,32,111,102,32,102,105,108, - 101,45,98,97,115,101,100,32,109,111,100,117,108,101,32,108, - 111,97,100,101,114,115,46,10,10,32,32,32,32,69,97,99, - 104,32,105,116,101,109,32,105,115,32,97,32,116,117,112,108, - 101,32,40,108,111,97,100,101,114,44,32,115,117,102,102,105, - 120,101,115,41,46,10,32,32,32,32,78,41,7,114,28,1, - 0,0,114,186,0,0,0,218,18,101,120,116,101,110,115,105, - 111,110,95,115,117,102,102,105,120,101,115,114,32,1,0,0, - 114,127,0,0,0,114,39,1,0,0,114,113,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,32, - 32,32,114,7,0,0,0,114,207,0,0,0,126,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,67,0,0,0,115,8,0,0, - 0,124,0,97,0,100,0,83,0,114,69,0,0,0,41,1, - 114,158,0,0,0,41,1,218,17,95,98,111,111,116,115,116, - 114,97,112,95,109,111,100,117,108,101,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,137,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,67,0,0, - 0,115,50,0,0,0,116,0,124,0,131,1,1,0,116,1, - 131,0,125,1,116,2,106,3,160,4,116,5,106,6,124,1, - 142,0,103,1,161,1,1,0,116,2,106,7,160,8,116,9, - 161,1,1,0,100,1,83,0,41,2,122,41,73,110,115,116, - 97,108,108,32,116,104,101,32,112,97,116,104,45,98,97,115, - 101,100,32,105,109,112,111,114,116,32,99,111,109,112,111,110, - 101,110,116,115,46,78,41,10,114,111,1,0,0,114,207,0, - 0,0,114,16,0,0,0,114,80,1,0,0,114,190,0,0, - 0,114,91,1,0,0,114,103,1,0,0,218,9,109,101,116, - 97,95,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,32,32,114,7,0,0, - 0,218,8,95,105,110,115,116,97,108,108,142,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,0,114,0, - 0,0,0,41,1,84,41,85,114,151,0,0,0,114,158,0, - 0,0,114,186,0,0,0,114,91,0,0,0,114,16,0,0, - 0,114,99,0,0,0,114,183,0,0,0,114,26,0,0,0, - 114,230,0,0,0,90,2,110,116,114,19,0,0,0,114,214, - 0,0,0,90,5,112,111,115,105,120,114,51,0,0,0,218, - 3,97,108,108,114,59,0,0,0,114,136,0,0,0,114,57, - 0,0,0,114,62,0,0,0,90,20,95,112,97,116,104,115, - 101,112,115,95,119,105,116,104,95,99,111,108,111,110,114,29, - 0,0,0,90,37,95,67,65,83,69,95,73,78,83,69,78, - 83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,83, - 95,66,89,84,69,83,95,75,69,89,114,28,0,0,0,114, - 30,0,0,0,114,22,0,0,0,114,37,0,0,0,114,43, - 0,0,0,114,46,0,0,0,114,67,0,0,0,114,73,0, - 0,0,114,75,0,0,0,114,79,0,0,0,114,80,0,0, - 0,114,83,0,0,0,114,86,0,0,0,114,95,0,0,0, - 218,4,116,121,112,101,218,8,95,95,99,111,100,101,95,95, - 114,185,0,0,0,114,35,0,0,0,114,171,0,0,0,114, - 34,0,0,0,114,40,0,0,0,114,7,1,0,0,114,116, - 0,0,0,114,112,0,0,0,114,127,0,0,0,114,61,0, - 0,0,114,109,1,0,0,114,231,0,0,0,114,113,0,0, - 0,90,23,68,69,66,85,71,95,66,89,84,69,67,79,68, - 69,95,83,85,70,70,73,88,69,83,90,27,79,80,84,73, - 77,73,90,69,68,95,66,89,84,69,67,79,68,69,95,83, - 85,70,70,73,88,69,83,114,121,0,0,0,114,128,0,0, - 0,114,135,0,0,0,114,137,0,0,0,114,139,0,0,0, - 114,159,0,0,0,114,166,0,0,0,114,175,0,0,0,114, - 179,0,0,0,114,181,0,0,0,114,188,0,0,0,114,193, - 0,0,0,114,194,0,0,0,114,199,0,0,0,218,6,111, - 98,106,101,99,116,114,208,0,0,0,114,212,0,0,0,114, - 213,0,0,0,114,234,0,0,0,114,248,0,0,0,114,10, - 1,0,0,114,32,1,0,0,114,39,1,0,0,114,28,1, - 0,0,114,44,1,0,0,114,70,1,0,0,114,74,1,0, - 0,114,91,1,0,0,114,108,1,0,0,114,207,0,0,0, - 114,111,1,0,0,114,113,1,0,0,114,12,0,0,0,114, - 7,0,0,0,218,8,60,109,111,100,117,108,101,62,1,0, - 0,0,115,180,0,0,0,4,0,4,22,8,3,8,1,8, - 1,8,1,8,1,10,3,4,1,8,1,10,1,8,2,4, - 3,10,1,6,2,22,2,8,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, - 36,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,73,14,67,16,30,0,127,14, - 17,18,50,18,45,18,25,14,53,14,63,14,49,0,127,14, - 29,0,127,10,30,8,23,8,11,12,5,114,9,0,0,0, + 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,115,46,112,97,116,104,32,111,114,32,39,112, + 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, + 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,122,101,80,97,116,104,70, + 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, + 101,40,41,32,105,115,32,100,101,112,114,101,99,97,116,101, + 100,32,97,110,100,32,115,108,97,116,101,100,32,102,111,114, + 32,114,101,109,111,118,97,108,32,105,110,32,80,121,116,104, + 111,110,32,51,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,32,32,32,32,114, + 7,0,0,0,114,228,0,0,0,173,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,0, + 0,0,0,0,0,0,0,0,0,0,4,0,0,0,79,0, + 0,0,115,28,0,0,0,100,1,100,2,108,0,109,1,125, + 2,1,0,124,2,106,2,124,0,105,0,124,1,164,1,142, + 1,83,0,41,4,97,32,1,0,0,10,32,32,32,32,32, + 32,32,32,70,105,110,100,32,100,105,115,116,114,105,98,117, + 116,105,111,110,115,46,10,10,32,32,32,32,32,32,32,32, + 82,101,116,117,114,110,32,97,110,32,105,116,101,114,97,98, + 108,101,32,111,102,32,97,108,108,32,68,105,115,116,114,105, + 98,117,116,105,111,110,32,105,110,115,116,97,110,99,101,115, + 32,99,97,112,97,98,108,101,32,111,102,10,32,32,32,32, + 32,32,32,32,108,111,97,100,105,110,103,32,116,104,101,32, + 109,101,116,97,100,97,116,97,32,102,111,114,32,112,97,99, + 107,97,103,101,115,32,109,97,116,99,104,105,110,103,32,96, + 96,99,111,110,116,101,120,116,46,110,97,109,101,96,96,10, + 32,32,32,32,32,32,32,32,40,111,114,32,97,108,108,32, + 110,97,109,101,115,32,105,102,32,96,96,78,111,110,101,96, + 96,32,105,110,100,105,99,97,116,101,100,41,32,97,108,111, + 110,103,32,116,104,101,32,112,97,116,104,115,32,105,110,32, + 116,104,101,32,108,105,115,116,10,32,32,32,32,32,32,32, + 32,111,102,32,100,105,114,101,99,116,111,114,105,101,115,32, + 96,96,99,111,110,116,101,120,116,46,112,97,116,104,96,96, + 46,10,32,32,32,32,32,32,32,32,114,0,0,0,0,41, + 1,218,18,77,101,116,97,100,97,116,97,80,97,116,104,70, + 105,110,100,101,114,78,41,3,90,18,105,109,112,111,114,116, + 108,105,98,46,109,101,116,97,100,97,116,97,114,89,1,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,32,32,32,114,7,0,0,0,114,90, + 1,0,0,189,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,229,0,0,0,41,14, + 114,149,0,0,0,114,148,0,0,0,114,150,0,0,0,114, + 151,0,0,0,114,232,0,0,0,114,75,1,0,0,114,81, + 1,0,0,114,233,0,0,0,114,84,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,7,0,0,0, + 114,74,1,0,0,47,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,0,0,0,0,3,0,0,0,64,0,0, + 0,115,90,0,0,0,101,0,90,1,100,0,90,2,100,1, + 90,3,100,2,100,3,132,0,90,4,100,4,100,5,132,0, + 90,5,101,6,90,7,100,6,100,7,132,0,90,8,100,8, + 100,9,132,0,90,9,100,19,100,11,100,12,132,1,90,10, + 100,13,100,14,132,0,90,11,101,12,100,15,100,16,132,0, + 131,1,90,13,100,17,100,18,132,0,90,14,100,10,83,0, + 41,20,218,10,70,105,108,101,70,105,110,100,101,114,122,172, + 70,105,108,101,45,98,97,115,101,100,32,102,105,110,100,101, + 114,46,10,10,32,32,32,32,73,110,116,101,114,97,99,116, + 105,111,110,115,32,119,105,116,104,32,116,104,101,32,102,105, + 108,101,32,115,121,115,116,101,109,32,97,114,101,32,99,97, + 99,104,101,100,32,102,111,114,32,112,101,114,102,111,114,109, + 97,110,99,101,44,32,98,101,105,110,103,10,32,32,32,32, + 114,101,102,114,101,115,104,101,100,32,119,104,101,110,32,116, + 104,101,32,100,105,114,101,99,116,111,114,121,32,116,104,101, + 32,102,105,110,100,101,114,32,105,115,32,104,97,110,100,108, + 105,110,103,32,104,97,115,32,98,101,101,110,32,109,111,100, + 105,102,105,101,100,46,10,10,32,32,32,32,99,2,0,0, + 0,0,0,0,0,0,0,0,0,6,0,0,0,7,0,0, + 0,115,114,0,0,0,135,5,103,0,125,3,124,2,68,0, + 93,16,92,2,138,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,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,101,32,119,105,116,104,32,116,104,101,32, + 112,97,116,104,32,116,111,32,115,101,97,114,99,104,32,111, + 110,32,97,110,100,32,97,32,118,97,114,105,97,98,108,101, + 32,110,117,109,98,101,114,32,111,102,10,32,32,32,32,32, + 32,32,32,50,45,116,117,112,108,101,115,32,99,111,110,116, + 97,105,110,105,110,103,32,116,104,101,32,108,111,97,100,101, + 114,32,97,110,100,32,116,104,101,32,102,105,108,101,32,115, + 117,102,102,105,120,101,115,32,116,104,101,32,108,111,97,100, + 101,114,10,32,32,32,32,32,32,32,32,114,101,99,111,103, + 110,105,122,101,115,46,99,1,0,0,0,0,0,0,0,0, + 0,0,0,3,0,0,0,51,0,0,0,115,24,0,0,0, + 129,0,124,0,93,7,125,1,124,1,137,2,102,2,86,0, + 1,0,113,2,100,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,32,32,128,114,7,0,0,0,114,8,0,0,0, + 218,5,0,0,115,4,0,0,0,6,128,18,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, + 130,0,0,0,78,41,11,114,190,0,0,0,218,8,95,108, + 111,97,100,101,114,115,114,65,0,0,0,114,86,0,0,0, + 114,67,0,0,0,114,19,0,0,0,114,82,0,0,0,218, + 11,95,112,97,116,104,95,109,116,105,109,101,218,3,115,101, + 116,218,11,95,112,97,116,104,95,99,97,99,104,101,218,19, + 95,114,101,108,97,120,101,100,95,112,97,116,104,95,99,97, + 99,104,101,41,6,114,143,0,0,0,114,65,0,0,0,218, + 14,108,111,97,100,101,114,95,100,101,116,97,105,108,115,90, + 7,108,111,97,100,101,114,115,114,211,0,0,0,114,163,0, + 0,0,32,32,32,32,32,64,114,7,0,0,0,114,235,0, + 0,0,212,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,99,1,0,0,0, + 0,0,0,0,0,0,0,0,2,0,0,0,67,0,0,0, + 115,10,0,0,0,100,1,124,0,95,0,100,2,83,0,41, + 3,122,31,73,110,118,97,108,105,100,97,116,101,32,116,104, + 101,32,100,105,114,101,99,116,111,114,121,32,109,116,105,109, + 101,46,114,130,0,0,0,78,41,1,114,93,1,0,0,114, + 20,1,0,0,32,114,7,0,0,0,114,75,1,0,0,228, + 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,67,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,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,102,105,110,100,32,97,32,108,111,97, + 100,101,114,32,102,111,114,32,116,104,101,32,115,112,101,99, + 105,102,105,101,100,32,109,111,100,117,108,101,44,32,111,114, + 32,116,104,101,32,110,97,109,101,115,112,97,99,101,10,32, + 32,32,32,32,32,32,32,112,97,99,107,97,103,101,32,112, + 111,114,116,105,111,110,115,46,32,82,101,116,117,114,110,115, + 32,40,108,111,97,100,101,114,44,32,108,105,115,116,45,111, + 102,45,112,111,114,116,105,111,110,115,41,46,10,10,32,32, + 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, + 32,32,85,115,101,32,102,105,110,100,95,115,112,101,99,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,122,101,70,105,108,101,70,105,110,100,101,114, + 46,102,105,110,100,95,108,111,97,100,101,114,40,41,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, + 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, + 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,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,41,6,114,99, + 0,0,0,114,100,0,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,32,32,32, + 114,7,0,0,0,114,160,0,0,0,234,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,0,0,0,0,0,0,0,0,0,0,6,0,0,0,67, + 0,0,0,115,26,0,0,0,124,1,124,2,124,3,131,2, + 125,6,116,0,124,2,124,3,124,6,124,4,100,1,141,4, + 83,0,41,2,78,114,200,0,0,0,41,1,114,212,0,0, + 0,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,32,32,32,32,32,32,32,114,7, + 0,0,0,114,88,1,0,0,249,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,67,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,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,0,114,56,124, + 0,106,10,125,6,124,4,160,11,161,0,125,7,110,5,124, + 0,106,12,125,6,124,4,125,7,124,7,124,6,118,0,114, + 108,116,13,124,0,106,2,124,4,131,2,125,8,124,0,106, + 14,68,0,93,29,92,2,125,9,125,10,100,5,124,9,23, + 0,125,11,116,13,124,8,124,11,131,2,125,12,116,15,124, + 12,131,1,114,103,124,0,160,16,124,10,124,1,124,12,124, + 8,103,1,124,2,161,5,2,0,1,0,83,0,113,74,116, + 17,124,8,131,1,125,3,124,0,106,14,68,0,93,55,92, + 2,125,9,125,10,9,0,116,13,124,0,106,2,124,4,124, + 9,23,0,131,2,125,12,110,12,35,0,4,0,116,18,121, + 189,1,0,1,0,1,0,89,0,1,0,100,6,83,0,37, + 0,116,19,160,20,100,7,124,12,100,3,100,8,166,3,1, + 0,124,7,124,9,23,0,124,6,118,0,114,166,116,15,124, + 12,131,1,114,166,124,0,160,16,124,10,124,1,124,12,100, + 6,124,2,161,5,2,0,1,0,83,0,113,111,124,3,114, + 187,116,19,160,20,100,9,124,8,161,2,1,0,116,19,160, + 21,124,1,100,6,161,2,125,13,124,8,103,1,124,13,95, + 22,124,13,83,0,100,6,83,0,119,0,119,0,41,10,122, + 111,84,114,121,32,116,111,32,102,105,110,100,32,97,32,115, + 112,101,99,32,102,111,114,32,116,104,101,32,115,112,101,99, + 105,102,105,101,100,32,109,111,100,117,108,101,46,10,10,32, + 32,32,32,32,32,32,32,82,101,116,117,114,110,115,32,116, + 104,101,32,109,97,116,99,104,105,110,103,32,115,112,101,99, + 44,32,111,114,32,78,111,110,101,32,105,102,32,110,111,116, + 32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32, + 70,114,97,0,0,0,114,45,0,0,0,114,130,0,0,0, + 114,235,0,0,0,78,122,9,116,114,121,105,110,103,32,123, + 125,41,1,90,9,118,101,114,98,111,115,105,116,121,122,25, + 112,111,115,115,105,98,108,101,32,110,97,109,101,115,112,97, + 99,101,32,102,111,114,32,123,125,41,23,114,104,0,0,0, + 114,75,0,0,0,114,65,0,0,0,114,19,0,0,0,114, + 82,0,0,0,114,33,1,0,0,114,76,0,0,0,114,93, + 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101, + 114,22,0,0,0,114,96,1,0,0,114,131,0,0,0,114, + 95,1,0,0,114,67,0,0,0,114,92,1,0,0,114,80, + 0,0,0,114,88,1,0,0,114,83,0,0,0,114,111,0, + 0,0,114,158,0,0,0,114,172,0,0,0,114,206,0,0, + 0,114,201,0,0,0,41,14,114,143,0,0,0,114,162,0, + 0,0,114,224,0,0,0,90,12,105,115,95,110,97,109,101, + 115,112,97,99,101,90,11,116,97,105,108,95,109,111,100,117, + 108,101,114,192,0,0,0,90,5,99,97,99,104,101,90,12, + 99,97,99,104,101,95,109,111,100,117,108,101,90,9,98,97, + 115,101,95,112,97,116,104,114,41,1,0,0,114,210,0,0, + 0,90,13,105,110,105,116,95,102,105,108,101,110,97,109,101, + 90,9,102,117,108,108,95,112,97,116,104,114,209,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,254,5,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,18,1,2,128,12,1,8,1,2, + 128,16,1,12,1,8,1,10,1,4,1,8,255,2,128,4, + 2,12,1,12,1,8,1,4,1,4,1,2,244,2,228,115, + 31,0,0,0,138,10,21,0,149,9,32,7,193,52,8,65, + 61,2,193,61,7,66,8,9,194,61,1,66,8,9,194,62, + 1,32,7,122,20,70,105,108,101,70,105,110,100,101,114,46, + 102,105,110,100,95,115,112,101,99,99,1,0,0,0,0,0, + 0,0,0,0,0,0,10,0,0,0,67,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,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,131,0,125,3,124,2,68,0,93, + 28,125,4,124,4,160,12,100,2,161,1,92,3,125,5,125, + 6,125,7,124,6,114,67,100,3,160,13,124,5,124,7,160, + 14,161,0,161,2,125,8,110,2,124,5,125,8,124,3,160, + 15,124,8,161,1,1,0,113,46,124,3,124,0,95,11,116, + 7,106,8,160,9,116,16,161,1,114,94,100,4,100,5,132, + 0,124,2,68,0,131,1,124,0,95,17,100,6,83,0,100, + 6,83,0,119,0,41,7,122,68,70,105,108,108,32,116,104, + 101,32,99,97,99,104,101,32,111,102,32,112,111,116,101,110, + 116,105,97,108,32,109,111,100,117,108,101,115,32,97,110,100, + 32,112,97,99,107,97,103,101,115,32,102,111,114,32,116,104, + 105,115,32,100,105,114,101,99,116,111,114,121,46,114,15,0, + 0,0,114,97,0,0,0,114,88,0,0,0,99,1,0,0, + 0,0,0,0,0,0,0,0,0,4,0,0,0,83,0,0, + 0,115,20,0,0,0,104,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,32,32,114,7,0,0,0,114,14,0,0,0,78,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,116,99,111,109,112,62,78,41,18,114,65,0,0,0, + 114,19,0,0,0,90,7,108,105,115,116,100,105,114,114,82, + 0,0,0,114,82,1,0,0,218,15,80,101,114,109,105,115, + 115,105,111,110,69,114,114,111,114,218,18,78,111,116,65,68, + 105,114,101,99,116,111,114,121,69,114,114,111,114,114,16,0, + 0,0,114,26,0,0,0,114,27,0,0,0,114,94,1,0, + 0,114,95,1,0,0,114,126,0,0,0,114,89,0,0,0, + 114,131,0,0,0,218,3,97,100,100,114,28,0,0,0,114, + 96,1,0,0,41,9,114,143,0,0,0,114,65,0,0,0, + 90,8,99,111,110,116,101,110,116,115,90,21,108,111,119,101, + 114,95,115,117,102,102,105,120,95,99,111,110,116,101,110,116, + 115,114,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,32, + 32,32,32,32,32,32,32,32,114,7,0,0,0,114,98,1, + 0,0,49,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,0,142,12, + 28,7,193,32,1,28,7,122,22,70,105,108,101,70,105,110, + 100,101,114,46,95,102,105,108,108,95,99,97,99,104,101,99, + 1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0, + 7,0,0,0,115,22,0,0,0,135,0,135,1,136,0,136, + 1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41, + 4,97,20,1,0,0,65,32,99,108,97,115,115,32,109,101, + 116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,114, + 110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,32, + 117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,95, + 104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,105, + 99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,97, + 110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,103, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,108, + 111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,112, + 97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,108, + 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, + 101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116, + 104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,111, + 110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,115, + 32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121, + 44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, + 10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,46, + 10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,0, + 0,0,0,0,0,0,0,4,0,0,0,19,0,0,0,115, + 36,0,0,0,116,0,124,0,131,1,115,10,116,1,100,1, + 124,0,100,2,141,2,130,1,137,1,124,0,103,1,137,2, + 162,1,82,0,142,0,83,0,41,4,122,45,80,97,116,104, + 32,104,111,111,107,32,102,111,114,32,105,109,112,111,114,116, + 108,105,98,46,109,97,99,104,105,110,101,114,121,46,70,105, + 108,101,70,105,110,100,101,114,46,122,30,111,110,108,121,32, + 100,105,114,101,99,116,111,114,105,101,115,32,97,114,101,32, + 115,117,112,112,111,114,116,101,100,114,74,0,0,0,78,41, + 2,114,83,0,0,0,114,142,0,0,0,41,3,114,65,0, + 0,0,114,220,0,0,0,114,97,1,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,90,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,111,111,107,95,102,111,114,95, + 70,105,108,101,70,105,110,100,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,96,96,32,114,7,0,0,0,218,9,112,97,116,104,95, + 104,111,111,107,80,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,67, + 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,32,114, + 7,0,0,0,114,65,1,0,0,98,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,150,0, + 0,0,114,151,0,0,0,114,235,0,0,0,114,75,1,0, + 0,114,166,0,0,0,114,228,0,0,0,114,160,0,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,7,0,0,0,114,91,1,0,0,203,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,67,0,0,0,115,146,0, + 0,0,124,0,160,0,100,1,161,1,125,4,124,0,160,0, + 100,2,161,1,125,5,124,4,115,33,124,5,114,18,124,5, + 106,1,125,4,110,15,124,2,124,3,107,2,114,28,116,2, + 124,1,124,2,131,2,125,4,110,5,116,3,124,1,124,2, + 131,2,125,4,124,5,115,42,116,4,124,1,124,2,124,4, + 100,3,141,3,125,5,9,0,124,5,124,0,100,2,60,0, + 124,4,124,0,100,1,60,0,124,2,124,0,100,4,60,0, + 124,3,124,0,100,5,60,0,100,0,83,0,35,0,4,0, + 116,5,121,72,1,0,1,0,1,0,89,0,100,0,83,0, + 37,0,119,0,41,6,78,218,10,95,95,108,111,97,100,101, + 114,95,95,218,8,95,95,115,112,101,99,95,95,41,1,114, + 163,0,0,0,90,8,95,95,102,105,108,101,95,95,90,10, + 95,95,99,97,99,104,101,100,95,95,41,6,218,3,103,101, + 116,114,163,0,0,0,114,39,1,0,0,114,32,1,0,0, + 114,212,0,0,0,218,9,69,120,99,101,112,116,105,111,110, + 41,6,90,2,110,115,114,141,0,0,0,90,8,112,97,116, + 104,110,97,109,101,90,9,99,112,97,116,104,110,97,109,101, + 114,163,0,0,0,114,209,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,104,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, + 67,0,0,0,115,38,0,0,0,116,0,116,1,160,2,161, + 0,102,2,125,0,116,3,116,4,102,2,125,1,116,5,116, + 6,102,2,125,2,124,0,124,1,124,2,103,3,83,0,41, + 2,122,95,82,101,116,117,114,110,115,32,97,32,108,105,115, + 116,32,111,102,32,102,105,108,101,45,98,97,115,101,100,32, + 109,111,100,117,108,101,32,108,111,97,100,101,114,115,46,10, + 10,32,32,32,32,69,97,99,104,32,105,116,101,109,32,105, + 115,32,97,32,116,117,112,108,101,32,40,108,111,97,100,101, + 114,44,32,115,117,102,102,105,120,101,115,41,46,10,32,32, + 32,32,78,41,7,114,28,1,0,0,114,186,0,0,0,218, + 18,101,120,116,101,110,115,105,111,110,95,115,117,102,102,105, + 120,101,115,114,32,1,0,0,114,127,0,0,0,114,39,1, + 0,0,114,113,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,32,32,32,114,7,0,0,0,114, + 207,0,0,0,127,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, + 67,0,0,0,115,8,0,0,0,124,0,97,0,100,0,83, + 0,114,69,0,0,0,41,1,114,158,0,0,0,41,1,218, + 17,95,98,111,111,116,115,116,114,97,112,95,109,111,100,117, + 108,101,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,138, + 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,67,0,0,0,115,50,0,0,0,116,0, + 124,0,131,1,1,0,116,1,131,0,125,1,116,2,106,3, + 160,4,116,5,106,6,124,1,142,0,103,1,161,1,1,0, + 116,2,106,7,160,8,116,9,161,1,1,0,100,1,83,0, + 41,2,122,41,73,110,115,116,97,108,108,32,116,104,101,32, + 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114, + 116,32,99,111,109,112,111,110,101,110,116,115,46,78,41,10, + 114,111,1,0,0,114,207,0,0,0,114,16,0,0,0,114, + 80,1,0,0,114,190,0,0,0,114,91,1,0,0,114,103, + 1,0,0,218,9,109,101,116,97,95,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,32,32,114,7,0,0,0,218,8,95,105,110,115,116, + 97,108,108,143,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,0,114,0,0,0,0,41,1,84,41,85, + 114,151,0,0,0,114,158,0,0,0,114,186,0,0,0,114, + 91,0,0,0,114,16,0,0,0,114,99,0,0,0,114,183, + 0,0,0,114,26,0,0,0,114,230,0,0,0,90,2,110, + 116,114,19,0,0,0,114,214,0,0,0,90,5,112,111,115, + 105,120,114,51,0,0,0,218,3,97,108,108,114,59,0,0, + 0,114,136,0,0,0,114,57,0,0,0,114,62,0,0,0, + 90,20,95,112,97,116,104,115,101,112,115,95,119,105,116,104, + 95,99,111,108,111,110,114,29,0,0,0,90,37,95,67,65, + 83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,80, + 76,65,84,70,79,82,77,83,95,66,89,84,69,83,95,75, + 69,89,114,28,0,0,0,114,30,0,0,0,114,22,0,0, + 0,114,37,0,0,0,114,43,0,0,0,114,46,0,0,0, + 114,67,0,0,0,114,73,0,0,0,114,75,0,0,0,114, + 79,0,0,0,114,80,0,0,0,114,83,0,0,0,114,86, + 0,0,0,114,95,0,0,0,218,4,116,121,112,101,218,8, + 95,95,99,111,100,101,95,95,114,185,0,0,0,114,35,0, + 0,0,114,171,0,0,0,114,34,0,0,0,114,40,0,0, + 0,114,7,1,0,0,114,116,0,0,0,114,112,0,0,0, + 114,127,0,0,0,114,61,0,0,0,114,109,1,0,0,114, + 231,0,0,0,114,113,0,0,0,90,23,68,69,66,85,71, + 95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,88, + 69,83,90,27,79,80,84,73,77,73,90,69,68,95,66,89, + 84,69,67,79,68,69,95,83,85,70,70,73,88,69,83,114, + 121,0,0,0,114,128,0,0,0,114,135,0,0,0,114,137, + 0,0,0,114,139,0,0,0,114,159,0,0,0,114,166,0, + 0,0,114,175,0,0,0,114,179,0,0,0,114,181,0,0, + 0,114,188,0,0,0,114,193,0,0,0,114,194,0,0,0, + 114,199,0,0,0,218,6,111,98,106,101,99,116,114,208,0, + 0,0,114,212,0,0,0,114,213,0,0,0,114,234,0,0, + 0,114,248,0,0,0,114,10,1,0,0,114,32,1,0,0, + 114,39,1,0,0,114,28,1,0,0,114,44,1,0,0,114, + 70,1,0,0,114,74,1,0,0,114,91,1,0,0,114,108, + 1,0,0,114,207,0,0,0,114,111,1,0,0,114,113,1, + 0,0,114,12,0,0,0,114,7,0,0,0,218,8,60,109, + 111,100,117,108,101,62,1,0,0,0,115,180,0,0,0,4, + 0,4,22,8,3,8,1,8,1,8,1,8,1,10,3,4, + 1,8,1,10,1,8,2,4,3,10,1,6,2,22,2,8, + 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,37,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, + 73,14,67,16,30,0,127,14,17,18,50,18,45,18,25,14, + 53,14,63,14,49,0,127,14,29,0,127,10,30,8,23,8, + 11,12,5,114,9,0,0,0, }; From 949a2b726533ca1840bf0ca7b5efe3f043c4b798 Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Tue, 15 Jun 2021 18:51:19 -0700 Subject: [PATCH 32/64] bpo-44342: [Enum] sync current docs to 3.10 (GH-26750) --- Doc/library/enum.rst | 2 +- Lib/enum.py | 2 +- Lib/test/test_enum.py | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index e1263f1a0372dd..d53e3405e531ff 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -576,7 +576,7 @@ Data Types ... NEON = 31 Traceback (most recent call last): ... - ValueError: invalid Flag 'Color': 'WHITE' is missing a named flag for value 8; 'NEON' is missing named flags for values 8, 16 + ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details] .. note:: diff --git a/Lib/enum.py b/Lib/enum.py index 49c46ea86dbacf..90777988dd041d 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -1637,7 +1637,7 @@ def __call__(self, enumeration): else: value = 'combined values of 0x%x' % missing_value raise ValueError( - 'invalid Flag %r: %s %s [use `enum.show_flag_values(value)` for details]' + 'invalid Flag %r: %s %s [use enum.show_flag_values(value) for details]' % (cls_name, alias, value) ) return enumeration diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index 4626c2435c1ab6..c4c458e6bfc4ef 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -3614,7 +3614,7 @@ class Bizarre(Flag): self.assertEqual(Bizarre.d.value, 6) with self.assertRaisesRegex( ValueError, - "invalid Flag 'Bizarre': aliases b and d are missing combined values of 0x3 .use `enum.show_flag_values.value.` for details.", + "invalid Flag 'Bizarre': aliases b and d are missing combined values of 0x3 .use enum.show_flag_values.value. for details.", ): @verify(NAMED_FLAGS) class Bizarre(Flag): @@ -3633,7 +3633,7 @@ class Bizarre(IntFlag): self.assertEqual(Bizarre.d.value, 6) with self.assertRaisesRegex( ValueError, - "invalid Flag 'Bizarre': alias d is missing value 0x2 .use `enum.show_flag_values.value.` for details.", + "invalid Flag 'Bizarre': alias d is missing value 0x2 .use enum.show_flag_values.value. for details.", ): @verify(NAMED_FLAGS) class Bizarre(IntFlag): From b7f3aca6a97629df951eafb0f0b3ed59c366aa4a Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Wed, 16 Jun 2021 11:22:36 +0200 Subject: [PATCH 33/64] bpo-43795: Don't list private names in the limited API (GH-26740) * Remove struct _node from the stable ABI list This struct was removed along with the old parser in Python 3.9 (PEP 617) * Stable ABI list: Use the public name "PyFrameObject" rather than "_frame" * Ensure limited API doesn't contain private names Names prefixed by an underscore are private by definition. * Add a blurb --- Doc/data/stable_abi.dat | 3 +-- .../C API/2021-06-15-16-28-18.bpo-43795.fy0AXK.rst | 3 +++ Misc/stable_abi.txt | 4 +--- Tools/scripts/stable_abi.py | 12 ++++++++++++ 4 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 Misc/NEWS.d/next/C API/2021-06-15-16-28-18.bpo-43795.fy0AXK.rst diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 50207ac91ec8a8..5f4955bb35bcbf 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -272,6 +272,7 @@ function,PyFloat_GetInfo,3.2, function,PyFloat_GetMax,3.2, function,PyFloat_GetMin,3.2, var,PyFloat_Type,3.2, +type,PyFrameObject,3.2, function,PyFrame_GetCode,3.10, function,PyFrame_GetLineNumber,3.10, function,PyFrozenSet_New,3.2, @@ -825,8 +826,6 @@ function,Py_XNewRef,3.10, type,Py_intptr_t,3.2, type,Py_ssize_t,3.2, type,Py_uintptr_t,3.2, -type,_frame,3.2, -type,_node,3.2, type,allocfunc,3.2, type,binaryfunc,3.2, type,descrgetfunc,3.2, diff --git a/Misc/NEWS.d/next/C API/2021-06-15-16-28-18.bpo-43795.fy0AXK.rst b/Misc/NEWS.d/next/C API/2021-06-15-16-28-18.bpo-43795.fy0AXK.rst new file mode 100644 index 00000000000000..8d029a04579086 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2021-06-15-16-28-18.bpo-43795.fy0AXK.rst @@ -0,0 +1,3 @@ +The list in :ref:`stable-abi-list` now shows the public name +:c:struct:`PyFrameObject` rather than ``_frame``. The non-existing +entry ``_node`` no longer appears in the list. diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index adee1a9fe73035..168e81db42d05a 100644 --- a/Misc/stable_abi.txt +++ b/Misc/stable_abi.txt @@ -38,12 +38,10 @@ struct PyThreadState added 3.2 struct PyInterpreterState added 3.2 -struct _frame +struct PyFrameObject added 3.2 struct symtable added 3.2 -struct _node - added 3.2 struct PyWeakReference added 3.2 struct PyLongObject diff --git a/Tools/scripts/stable_abi.py b/Tools/scripts/stable_abi.py index 2ba5b66cd1258b..b7fd2c8583ba70 100755 --- a/Tools/scripts/stable_abi.py +++ b/Tools/scripts/stable_abi.py @@ -492,6 +492,16 @@ def gcc_get_limited_api_definitions(headers): ) return stable_data | stable_exported_data | stable_functions +def check_private_names(manifest): + """Ensure limited API doesn't contain private names + + Names prefixed by an underscore are private by definition. + """ + for name, item in manifest.contents.items(): + if name.startswith('_') and not item.abi_only: + raise ValueError( + f'`{name}` is private (underscore-prefixed) and should be ' + + 'removed from the stable ABI list or or marked `abi_only`') def main(): parser = argparse.ArgumentParser( @@ -557,6 +567,8 @@ def main(): with args.file.open() as file: manifest = parse_manifest(file) + check_private_names(manifest) + # Remember results of all actions (as booleans). # At the end we'll check that at least one action was run, # and also fail if any are false. From 8fc6dd357706406da23589f7726518c3b35431db Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 16 Jun 2021 11:41:17 +0200 Subject: [PATCH 34/64] bpo-44422: threading.Thread reuses the _delete() method (GH-26741) The _bootstrap_inner() method of threading.Thread now reuses its _delete() method rather than accessing _active() directly. It became possible since _active_limbo_lock became reentrant. Moreover, it no longer ignores any exception when deleting the thread from the _active dictionary. --- Lib/threading.py | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Lib/threading.py b/Lib/threading.py index 766011fa0312b3..c2b94a5045514f 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -1010,13 +1010,7 @@ def _bootstrap_inner(self): except: self._invoke_excepthook(self) finally: - with _active_limbo_lock: - try: - # We don't call self._delete() because it also - # grabs _active_limbo_lock. - del _active[get_ident()] - except: - pass + self._delete() def _stop(self): # After calling ._stop(), .is_alive() returns False and .join() returns From 66eab7afb38317059fc63dffcb9d43da9fe45bd2 Mon Sep 17 00:00:00 2001 From: Sergey Fedoseev Date: Wed, 16 Jun 2021 18:04:38 +0500 Subject: [PATCH 35/64] bpo-38211: Clean up type_init() (GH-16257) 1. Remove conditions already checked by assert() 2. Remove object_init() call that effectively creates an empty tuple and checks that this tuple is empty --- Objects/typeobject.c | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c index 170929f5d85079..fbe3d165a60971 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -2428,41 +2428,26 @@ valid_identifier(PyObject *s) return 1; } -/* Forward */ -static int -object_init(PyObject *self, PyObject *args, PyObject *kwds); - static int type_init(PyObject *cls, PyObject *args, PyObject *kwds) { - int res; - assert(args != NULL && PyTuple_Check(args)); assert(kwds == NULL || PyDict_Check(kwds)); - if (kwds != NULL && PyTuple_Check(args) && PyTuple_GET_SIZE(args) == 1 && - PyDict_Check(kwds) && PyDict_GET_SIZE(kwds) != 0) { + if (kwds != NULL && PyTuple_GET_SIZE(args) == 1 && + PyDict_GET_SIZE(kwds) != 0) { PyErr_SetString(PyExc_TypeError, "type.__init__() takes no keyword arguments"); return -1; } - if (args != NULL && PyTuple_Check(args) && - (PyTuple_GET_SIZE(args) != 1 && PyTuple_GET_SIZE(args) != 3)) { + if ((PyTuple_GET_SIZE(args) != 1 && PyTuple_GET_SIZE(args) != 3)) { PyErr_SetString(PyExc_TypeError, "type.__init__() takes 1 or 3 arguments"); return -1; } - /* Call object.__init__(self) now. */ - /* XXX Could call super(type, cls).__init__() but what's the point? */ - args = PyTuple_GetSlice(args, 0, 0); - if (args == NULL) { - return -1; - } - res = object_init(cls, args, NULL); - Py_DECREF(args); - return res; + return 0; } unsigned long From e78f506abf8041bec78543da46ca28904b12987b Mon Sep 17 00:00:00 2001 From: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com> Date: Wed, 16 Jun 2021 22:12:25 +0800 Subject: [PATCH 36/64] bpo-44392: Add Py_GenericAlias to C API docs (GH-26724) Also fix stable ABI type definitions --- Doc/c-api/concrete.rst | 1 + Doc/c-api/typehints.rst | 47 +++++++++++++++++++ Doc/data/stable_abi.dat | 2 +- .../2021-06-16-18-09-49.bpo-44392.6RF1Sc.rst | 2 + Misc/stable_abi.txt | 2 +- PC/python3dll.c | 2 +- 6 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 Doc/c-api/typehints.rst create mode 100644 Misc/NEWS.d/next/Documentation/2021-06-16-18-09-49.bpo-44392.6RF1Sc.rst diff --git a/Doc/c-api/concrete.rst b/Doc/c-api/concrete.rst index c1d9fa1b41a3fe..84224dcca523b9 100644 --- a/Doc/c-api/concrete.rst +++ b/Doc/c-api/concrete.rst @@ -115,3 +115,4 @@ Other Objects coro.rst contextvars.rst datetime.rst + typehints.rst diff --git a/Doc/c-api/typehints.rst b/Doc/c-api/typehints.rst new file mode 100644 index 00000000000000..dfda96a47243bd --- /dev/null +++ b/Doc/c-api/typehints.rst @@ -0,0 +1,47 @@ +.. highlight:: c + +.. _typehintobjects: + +Objects for Type Hinting +------------------------ + +Various built-in types for type hinting are provided. Currently, +two types exist -- :ref:`GenericAlias ` and +:ref:`Union `. Only ``GenericAlias`` is exposed to C. + +.. c:function:: PyObject* Py_GenericAlias(PyObject *origin, PyObject *args) + + Create a :ref:`GenericAlias ` object. + Equivalent to calling the Python class + :class:`types.GenericAlias`. The *origin* and *args* arguments set the + ``GenericAlias``\ 's ``__origin__`` and ``__args__`` attributes respectively. + *origin* should be a :c:type:`PyTypeObject*`, and *args* can be a + :c:type:`PyTupleObject*` or any ``PyObject*``. If *args* passed is + not a tuple, a 1-tuple is automatically constructed and ``__args__`` is set + to ``(args,)``. + Minimal checking is done for the arguments, so the function will succeed even + if *origin* is not a type. + The ``GenericAlias``\ 's ``__parameters__`` attribute is constructed lazily + from ``__args__``. On failure, an exception is raised and ``NULL`` is + returned. + + Here's an example of how to make an extension type generic:: + + ... + static PyMethodDef my_obj_methods[] = { + // Other methods. + ... + {"__class_getitem__", (PyCFunction)Py_GenericAlias, METH_O|METH_CLASS, "See PEP 585"} + ... + } + + .. seealso:: The data model method :meth:`__class_getitem__`. + + .. versionadded:: 3.9 + +.. c:var:: PyTypeObject Py_GenericAliasType + + The C type of the object returned by :c:func:`Py_GenericAlias`. Equivalent to + :class:`types.GenericAlias` in Python. + + .. versionadded:: 3.9 diff --git a/Doc/data/stable_abi.dat b/Doc/data/stable_abi.dat index 5f4955bb35bcbf..e373e2314a6517 100644 --- a/Doc/data/stable_abi.dat +++ b/Doc/data/stable_abi.dat @@ -785,7 +785,7 @@ var,Py_FileSystemDefaultEncoding,3.2, function,Py_Finalize,3.2, function,Py_FinalizeEx,3.6, function,Py_GenericAlias,3.9, -function,Py_GenericAliasType,3.9, +var,Py_GenericAliasType,3.9, function,Py_GetBuildInfo,3.2, function,Py_GetCompiler,3.2, function,Py_GetCopyright,3.2, diff --git a/Misc/NEWS.d/next/Documentation/2021-06-16-18-09-49.bpo-44392.6RF1Sc.rst b/Misc/NEWS.d/next/Documentation/2021-06-16-18-09-49.bpo-44392.6RF1Sc.rst new file mode 100644 index 00000000000000..ac197f22929d14 --- /dev/null +++ b/Misc/NEWS.d/next/Documentation/2021-06-16-18-09-49.bpo-44392.6RF1Sc.rst @@ -0,0 +1,2 @@ +Added a new section in the C API documentation for types used in type +hinting. Documented ``Py_GenericAlias`` and ``Py_GenericAliasType``. diff --git a/Misc/stable_abi.txt b/Misc/stable_abi.txt index 168e81db42d05a..24c71d12e3ba75 100644 --- a/Misc/stable_abi.txt +++ b/Misc/stable_abi.txt @@ -2043,7 +2043,7 @@ function Py_LeaveRecursiveCall added 3.9 function Py_GenericAlias added 3.9 -function Py_GenericAliasType +data Py_GenericAliasType added 3.9 function PyCMethod_New added 3.9 # Windows: 3.10 & 3.9.2 -- https://bugs.python.org/issue43155 diff --git a/PC/python3dll.c b/PC/python3dll.c index be85f27e72ac81..378669c27f0544 100755 --- a/PC/python3dll.c +++ b/PC/python3dll.c @@ -56,7 +56,6 @@ EXPORT_FUNC(Py_FatalError) EXPORT_FUNC(Py_Finalize) EXPORT_FUNC(Py_FinalizeEx) EXPORT_FUNC(Py_GenericAlias) -EXPORT_FUNC(Py_GenericAliasType) EXPORT_FUNC(Py_GetArgcArgv) EXPORT_FUNC(Py_GetBuildInfo) EXPORT_FUNC(Py_GetCompiler) @@ -722,6 +721,7 @@ EXPORT_DATA(_PyWeakref_ProxyType) EXPORT_DATA(_PyWeakref_RefType) EXPORT_DATA(Py_FileSystemDefaultEncodeErrors) EXPORT_DATA(Py_FileSystemDefaultEncoding) +EXPORT_DATA(Py_GenericAliasType) EXPORT_DATA(Py_HasFileSystemDefaultEncoding) EXPORT_DATA(Py_UTF8Mode) EXPORT_DATA(PyBaseObject_Type) From 66c976dcaa065c442646ad49efeb29b97daf0f0c Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Wed, 16 Jun 2021 18:43:49 +0100 Subject: [PATCH 37/64] bpo-44426: Use of 'complex' as a C variable name confuses Sphinx; change it to 'num'. (GH-26744) --- Doc/c-api/complex.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/c-api/complex.rst b/Doc/c-api/complex.rst index e2ea766b3a32a7..c25894681bca35 100644 --- a/Doc/c-api/complex.rst +++ b/Doc/c-api/complex.rst @@ -46,9 +46,9 @@ pointers. This is consistent throughout the API. :c:type:`Py_complex` representation. -.. c:function:: Py_complex _Py_c_neg(Py_complex complex) +.. c:function:: Py_complex _Py_c_neg(Py_complex num) - Return the negation of the complex number *complex*, using the C + Return the negation of the complex number *num*, using the C :c:type:`Py_complex` representation. From 439482a04f812d1daf3b49cee99dfa62fd8d99f5 Mon Sep 17 00:00:00 2001 From: Joe Date: Thu, 17 Jun 2021 17:39:57 +0800 Subject: [PATCH 38/64] bpo-44389: Fix typo in ssl deprecation warning message (GH-26754) `ssl.SSL_NO_TLS` should be `ssl.OP_NO_TLS`. --- Lib/test/test_ssl.py | 2 +- Modules/_ssl.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 6cea0ee9f1da53..cee97a83020b8d 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -605,7 +605,7 @@ def test_openssl111_deprecations(self): with self.assertWarns(DeprecationWarning) as cm: ctx.options |= option self.assertEqual( - 'ssl.OP_NO_SSL*/ssl.SSL_NO_TLS* options are deprecated', + 'ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are deprecated', str(cm.warning) ) diff --git a/Modules/_ssl.c b/Modules/_ssl.c index 26f31f8f4c5341..ad5269d7b07b63 100644 --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3597,7 +3597,7 @@ set_options(PySSLContext *self, PyObject *arg, void *c) set = ~opts & new_opts; if ((set & opt_no) != 0) { - if (_ssl_deprecated("ssl.OP_NO_SSL*/ssl.SSL_NO_TLS* options are " + if (_ssl_deprecated("ssl.OP_NO_SSL*/ssl.OP_NO_TLS* options are " "deprecated", 2) < 0) { return -1; } From 76bed3ac2ed5d46c29dc6529696852f622b7e37b Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Thu, 17 Jun 2021 12:06:09 +0200 Subject: [PATCH 39/64] bpo-43908: Make heap types converted during 3.10 alpha immutable (GH-26351) * Make functools types immutable * Multibyte codec types are now immutable * pyexpat.xmlparser is now immutable * array.arrayiterator is now immutable * _thread types are now immutable * _csv types are now immutable * _queue.SimpleQueue is now immutable * mmap.mmap is now immutable * unicodedata.UCD is now immutable * sqlite3 types are now immutable * _lsprof.Profiler is now immutable * _overlapped.Overlapped is now immutable * _operator types are now immutable * winapi__overlapped.Overlapped is now immutable * _lzma types are now immutable * _bz2 types are now immutable * _dbm.dbm and _gdbm.gdbm are now immutable --- Modules/_bz2module.c | 4 ++-- Modules/_csv.c | 9 ++++++--- Modules/_dbmmodule.c | 2 +- Modules/_functoolsmodule.c | 10 ++++++---- Modules/_gdbmmodule.c | 2 +- Modules/_lsprof.c | 3 ++- Modules/_lzmamodule.c | 4 ++-- Modules/_operator.c | 9 ++++++--- Modules/_queuemodule.c | 3 ++- Modules/_sqlite/connection.c | 3 ++- Modules/_sqlite/cursor.c | 3 ++- Modules/_sqlite/prepare_protocol.c | 3 ++- Modules/_sqlite/row.c | 3 ++- Modules/_sqlite/statement.c | 3 ++- Modules/_threadmodule.c | 11 +++++++---- Modules/_winapi.c | 2 +- Modules/arraymodule.c | 2 +- Modules/cjkcodecs/multibytecodec.c | 14 +++++++++----- Modules/mmapmodule.c | 3 ++- Modules/overlapped.c | 2 +- Modules/pyexpat.c | 2 +- Modules/unicodedata.c | 2 +- 22 files changed, 61 insertions(+), 38 deletions(-) diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index d75bb32d2fc5eb..798e9efc628f05 100644 --- a/Modules/_bz2module.c +++ b/Modules/_bz2module.c @@ -422,7 +422,7 @@ static PyType_Spec bz2_compressor_type_spec = { // bz2_compressor_type_spec does not have Py_TPFLAGS_BASETYPE flag // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. - .flags = Py_TPFLAGS_DEFAULT, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE), .slots = bz2_compressor_type_slots, }; @@ -766,7 +766,7 @@ static PyType_Spec bz2_decompressor_type_spec = { // bz2_decompressor_type_spec does not have Py_TPFLAGS_BASETYPE flag // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. - .flags = Py_TPFLAGS_DEFAULT, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE), .slots = bz2_decompressor_type_slots, }; diff --git a/Modules/_csv.c b/Modules/_csv.c index a213734f508068..78855b871352c5 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -537,7 +537,8 @@ static PyType_Slot Dialect_Type_slots[] = { PyType_Spec Dialect_Type_spec = { .name = "_csv.Dialect", .basicsize = sizeof(DialectObj), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = Dialect_Type_slots, }; @@ -958,7 +959,8 @@ static PyType_Slot Reader_Type_slots[] = { PyType_Spec Reader_Type_spec = { .name = "_csv.reader", .basicsize = sizeof(ReaderObj), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = Reader_Type_slots }; @@ -1382,7 +1384,8 @@ static PyType_Slot Writer_Type_slots[] = { PyType_Spec Writer_Type_spec = { .name = "_csv.writer", .basicsize = sizeof(WriterObj), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = Writer_Type_slots, }; diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c index 2b4d071b3d1ae1..3fe97eff1586bc 100644 --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -423,7 +423,7 @@ static PyType_Spec dbmtype_spec = { // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | - Py_TPFLAGS_HAVE_GC), + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = dbmtype_spec_slots, }; diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c index 218a8d16ac32d9..fa1452168094b9 100644 --- a/Modules/_functoolsmodule.c +++ b/Modules/_functoolsmodule.c @@ -491,7 +491,8 @@ static PyType_Spec partial_type_spec = { .name = "functools.partial", .basicsize = sizeof(partialobject), .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_VECTORCALL, + Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_VECTORCALL | + Py_TPFLAGS_IMMUTABLETYPE, .slots = partial_type_slots }; @@ -559,7 +560,7 @@ static PyType_Spec keyobject_type_spec = { .name = "functools.KeyWrapper", .basicsize = sizeof(keyobject), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | - Py_TPFLAGS_HAVE_GC), + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = keyobject_type_slots }; @@ -781,7 +782,8 @@ static PyType_Slot lru_list_elem_type_slots[] = { static PyType_Spec lru_list_elem_type_spec = { .name = "functools._lru_list_elem", .basicsize = sizeof(lru_list_elem), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | + Py_TPFLAGS_IMMUTABLETYPE, .slots = lru_list_elem_type_slots }; @@ -1417,7 +1419,7 @@ static PyType_Spec lru_cache_type_spec = { .name = "functools._lru_cache_wrapper", .basicsize = sizeof(lru_cache_object), .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_METHOD_DESCRIPTOR, + Py_TPFLAGS_METHOD_DESCRIPTOR | Py_TPFLAGS_IMMUTABLETYPE, .slots = lru_cache_type_slots }; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c index 98bfa6ab996119..8a8c6e78259ccd 100644 --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -581,7 +581,7 @@ static PyType_Spec gdbmtype_spec = { // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | - Py_TPFLAGS_HAVE_GC), + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = gdbmtype_spec_slots, }; diff --git a/Modules/_lsprof.c b/Modules/_lsprof.c index a0e6afa844086a..703067cc743a55 100644 --- a/Modules/_lsprof.c +++ b/Modules/_lsprof.c @@ -812,7 +812,8 @@ static PyType_Slot _lsprof_profiler_type_spec_slots[] = { static PyType_Spec _lsprof_profiler_type_spec = { .name = "_lsprof.Profiler", .basicsize = sizeof(ProfilerObject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = _lsprof_profiler_type_spec_slots, }; diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c index 2f80bf0496bb3f..915c0c918f6443 100644 --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -915,7 +915,7 @@ static PyType_Spec lzma_compressor_type_spec = { // lzma_compressor_type_spec does not have Py_TPFLAGS_BASETYPE flag // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. - .flags = Py_TPFLAGS_DEFAULT, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE), .slots = lzma_compressor_type_slots, }; @@ -1359,7 +1359,7 @@ static PyType_Spec lzma_decompressor_type_spec = { // lzma_decompressor_type_spec does not have Py_TPFLAGS_BASETYPE flag // which prevents to create a subclass. // So calling PyType_GetModuleState() in this file is always safe. - .flags = Py_TPFLAGS_DEFAULT, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE), .slots = lzma_decompressor_type_slots, }; diff --git a/Modules/_operator.c b/Modules/_operator.c index 5bd5a3bcb9bfe8..d5e092e2f82f00 100644 --- a/Modules/_operator.c +++ b/Modules/_operator.c @@ -1133,7 +1133,8 @@ static PyType_Spec itemgetter_type_spec = { .name = "operator.itemgetter", .basicsize = sizeof(itemgetterobject), .itemsize = 0, - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = itemgetter_type_slots, }; @@ -1464,7 +1465,8 @@ static PyType_Spec attrgetter_type_spec = { .name = "operator.attrgetter", .basicsize = sizeof(attrgetterobject), .itemsize = 0, - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = attrgetter_type_slots, }; @@ -1719,7 +1721,8 @@ static PyType_Spec methodcaller_type_spec = { .name = "operator.methodcaller", .basicsize = sizeof(methodcallerobject), .itemsize = 0, - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = methodcaller_type_slots, }; diff --git a/Modules/_queuemodule.c b/Modules/_queuemodule.c index 5e0f38f387abc8..a124255a72cae2 100644 --- a/Modules/_queuemodule.c +++ b/Modules/_queuemodule.c @@ -380,7 +380,8 @@ static PyType_Slot simplequeue_slots[] = { static PyType_Spec simplequeue_spec = { .name = "_queue.SimpleQueue", .basicsize = sizeof(simplequeueobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = simplequeue_slots, }; diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 915515c0a195a1..e1eef587c4464e 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -1914,7 +1914,8 @@ static PyType_Slot connection_slots[] = { static PyType_Spec connection_spec = { .name = MODULE_NAME ".Connection", .basicsize = sizeof(pysqlite_Connection), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = connection_slots, }; diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index 8c8a347f46e57a..8e7d65faa2851e 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -1078,7 +1078,8 @@ static PyType_Slot cursor_slots[] = { static PyType_Spec cursor_spec = { .name = MODULE_NAME ".Cursor", .basicsize = sizeof(pysqlite_Cursor), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = cursor_slots, }; diff --git a/Modules/_sqlite/prepare_protocol.c b/Modules/_sqlite/prepare_protocol.c index 1f9d7b751d209b..cefb46e390ad6b 100644 --- a/Modules/_sqlite/prepare_protocol.c +++ b/Modules/_sqlite/prepare_protocol.c @@ -56,7 +56,8 @@ static PyType_Slot type_slots[] = { static PyType_Spec type_spec = { .name = MODULE_NAME ".PrepareProtocol", .basicsize = sizeof(pysqlite_PrepareProtocol), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = type_slots, }; diff --git a/Modules/_sqlite/row.c b/Modules/_sqlite/row.c index bf43dad4473aae..d2f9bdd00b670a 100644 --- a/Modules/_sqlite/row.c +++ b/Modules/_sqlite/row.c @@ -258,7 +258,8 @@ static PyType_Slot row_slots[] = { static PyType_Spec row_spec = { .name = MODULE_NAME ".Row", .basicsize = sizeof(pysqlite_Row), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = row_slots, }; diff --git a/Modules/_sqlite/statement.c b/Modules/_sqlite/statement.c index 89fe4bbec3ea43..3960b21c859435 100644 --- a/Modules/_sqlite/statement.c +++ b/Modules/_sqlite/statement.c @@ -502,7 +502,8 @@ static PyType_Slot stmt_slots[] = { static PyType_Spec stmt_spec = { .name = MODULE_NAME ".Statement", .basicsize = sizeof(pysqlite_Statement), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = stmt_slots, }; diff --git a/Modules/_threadmodule.c b/Modules/_threadmodule.c index 3f7f1d23bc90da..bee69f2099c0e8 100644 --- a/Modules/_threadmodule.c +++ b/Modules/_threadmodule.c @@ -313,7 +313,7 @@ static PyType_Spec lock_type_spec = { .name = "_thread.lock", .basicsize = sizeof(lockobject), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_DISALLOW_INSTANTIATION), + Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE), .slots = lock_type_slots, }; @@ -594,7 +594,8 @@ static PyType_Slot rlock_type_slots[] = { static PyType_Spec rlock_type_spec = { .name = "_thread.RLock", .basicsize = sizeof(rlockobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = rlock_type_slots, }; @@ -693,7 +694,8 @@ static PyType_Slot local_dummy_type_slots[] = { static PyType_Spec local_dummy_type_spec = { .name = "_thread._localdummy", .basicsize = sizeof(localdummyobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | + Py_TPFLAGS_IMMUTABLETYPE), .slots = local_dummy_type_slots, }; @@ -977,7 +979,8 @@ static PyType_Slot local_type_slots[] = { static PyType_Spec local_type_spec = { .name = "_thread._local", .basicsize = sizeof(localobject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC | + Py_TPFLAGS_IMMUTABLETYPE), .slots = local_type_slots, }; diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 2c034628e34e94..1b85d7dd7ee97f 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -348,7 +348,7 @@ static PyType_Spec winapi_overlapped_type_spec = { .name = "_winapi.Overlapped", .basicsize = sizeof(OverlappedObject), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | - Py_TPFLAGS_HAVE_GC), + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = winapi_overlapped_type_slots, }; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 30fb7c972438b6..1d9d4cd591afa6 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -2997,7 +2997,7 @@ static PyType_Spec arrayiter_spec = { .name = "array.arrayiterator", .basicsize = sizeof(arrayiterobject), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_DISALLOW_INSTANTIATION), + Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE), .slots = arrayiter_slots, }; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index cb7182ff21fbcd..ba558d0dbf2f1d 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -749,7 +749,7 @@ static PyType_Spec multibytecodec_spec = { .name = MODULE_NAME ".MultibyteCodec", .basicsize = sizeof(MultibyteCodecObject), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_DISALLOW_INSTANTIATION), + Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE), .slots = multibytecodec_slots, }; @@ -1111,7 +1111,8 @@ static PyType_Slot encoder_slots[] = { static PyType_Spec encoder_spec = { .name = MODULE_NAME ".MultibyteIncrementalEncoder", .basicsize = sizeof(MultibyteIncrementalEncoderObject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_IMMUTABLETYPE), .slots = encoder_slots, }; @@ -1384,7 +1385,8 @@ static PyType_Slot decoder_slots[] = { static PyType_Spec decoder_spec = { .name = MODULE_NAME ".MultibyteIncrementalDecoder", .basicsize = sizeof(MultibyteIncrementalDecoderObject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_IMMUTABLETYPE), .slots = decoder_slots, }; @@ -1705,7 +1707,8 @@ static PyType_Slot reader_slots[] = { static PyType_Spec reader_spec = { .name = MODULE_NAME ".MultibyteStreamReader", .basicsize = sizeof(MultibyteStreamReaderObject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_IMMUTABLETYPE), .slots = reader_slots, }; @@ -1925,7 +1928,8 @@ static PyType_Slot writer_slots[] = { static PyType_Spec writer_spec = { .name = MODULE_NAME ".MultibyteStreamWriter", .basicsize = sizeof(MultibyteStreamWriterObject), - .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_IMMUTABLETYPE), .slots = writer_slots, }; diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c index 8327ba677ecce7..6397b0d4b81095 100644 --- a/Modules/mmapmodule.c +++ b/Modules/mmapmodule.c @@ -1121,7 +1121,8 @@ static PyType_Slot mmap_object_slots[] = { static PyType_Spec mmap_object_spec = { .name = "mmap.mmap", .basicsize = sizeof(mmap_object), - .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC), + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = mmap_object_slots, }; diff --git a/Modules/overlapped.c b/Modules/overlapped.c index 38dd98f084849e..7c4570896bc591 100644 --- a/Modules/overlapped.c +++ b/Modules/overlapped.c @@ -1876,7 +1876,7 @@ static PyType_Slot overlapped_type_slots[] = { static PyType_Spec overlapped_type_spec = { .name = "_overlapped.Overlapped", .basicsize = sizeof(OverlappedObject), - .flags = Py_TPFLAGS_DEFAULT, + .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE), .slots = overlapped_type_slots }; diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c index 9b04df36f5201a..ec684638ead118 100644 --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1504,7 +1504,7 @@ static PyType_Spec _xml_parse_type_spec = { .name = "pyexpat.xmlparser", .basicsize = sizeof(xmlparseobject), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | - Py_TPFLAGS_DISALLOW_INSTANTIATION), + Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE), .slots = _xml_parse_type_spec_slots, }; diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c index a4b8193fbc2300..26ac68bdca6483 100644 --- a/Modules/unicodedata.c +++ b/Modules/unicodedata.c @@ -1465,7 +1465,7 @@ static PyType_Spec ucd_type_spec = { .name = "unicodedata.UCD", .basicsize = sizeof(PreviousDBVersion), .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | - Py_TPFLAGS_HAVE_GC), + Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_IMMUTABLETYPE), .slots = ucd_type_slots }; From f44686624d2aad90e4089ce635955f11abc5121d Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Thu, 17 Jun 2021 16:29:15 +0100 Subject: [PATCH 40/64] Do not clear globals or builtins when calling clear() on a frame object. Reverts behavior to that of 3.10 and earlier. (GH-26768) --- Lib/test/test_frame.py | 13 +++++++++++++ Objects/frameobject.c | 9 ++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_frame.py b/Lib/test/test_frame.py index 7ac37b6937502e..a715e725a7e45b 100644 --- a/Lib/test/test_frame.py +++ b/Lib/test/test_frame.py @@ -45,6 +45,19 @@ class C: # The reference was released by .clear() self.assertIs(None, wr()) + def test_clear_does_not_clear_specials(self): + class C: + pass + c = C() + exc = self.outer(c=c) + del c + f = exc.__traceback__.tb_frame + f.clear() + self.assertIsNot(f.f_code, None) + self.assertIsNot(f.f_locals, None) + self.assertIsNot(f.f_builtins, None) + self.assertIsNot(f.f_globals, None) + def test_clear_generator(self): endly = False def g(): diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 99afe06d81636a..5057313870c60b 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -612,7 +612,7 @@ frame_dealloc(PyFrameObject *f) Py_TRASHCAN_SAFE_BEGIN(f) PyCodeObject *co = f->f_code; - /* Kill all local variables */ + /* Kill all local variables including specials. */ if (f->f_localsptr) { for (int i = 0; i < co->co_nlocalsplus+FRAME_SPECIALS_SIZE; i++) { Py_CLEAR(f->f_localsptr[i]); @@ -683,11 +683,10 @@ frame_tp_clear(PyFrameObject *f) f->f_state = FRAME_CLEARED; Py_CLEAR(f->f_trace); - + PyCodeObject *co = f->f_code; /* locals */ - PyObject **localsplus = f->f_localsptr; - for (Py_ssize_t i = frame_nslots(f); --i >= 0; ++localsplus) { - Py_CLEAR(*localsplus); + for (int i = 0; i < co->co_nlocalsplus; i++) { + Py_CLEAR(f->f_localsptr[i]); } /* stack */ From 301039159ca9a3747c9ce3f735eff1e10dfce67c Mon Sep 17 00:00:00 2001 From: Irit Katriel <1055913+iritkatriel@users.noreply.github.com> Date: Thu, 17 Jun 2021 17:14:30 +0100 Subject: [PATCH 41/64] =?UTF-8?q?bpo-43024:=20improve=20signature=20(in=20?= =?UTF-8?q?help,=20etc)=20for=20functions=20taking=20sent=E2=80=A6=20(GH-2?= =?UTF-8?q?4331)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …inel defaults --- Lib/test/test_traceback.py | 16 ++++++++++++++++ Lib/traceback.py | 5 ++++- .../2021-01-25-21-24-55.bpo-43024.vAUrIi.rst | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2021-01-25-21-24-55.bpo-43024.vAUrIi.rst diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index e9df1ce9c79c08..78b2851d384942 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -4,6 +4,7 @@ from io import StringIO import linecache import sys +import inspect import unittest import re from test import support @@ -255,6 +256,21 @@ def test_exception_is_None(self): self.assertEqual( traceback.format_exception_only(None, None), [NONE_EXC_STRING]) + def test_signatures(self): + self.assertEqual( + str(inspect.signature(traceback.print_exception)), + ('(exc, /, value=, tb=, ' + 'limit=None, file=None, chain=True)')) + + self.assertEqual( + str(inspect.signature(traceback.format_exception)), + ('(exc, /, value=, tb=, limit=None, ' + 'chain=True)')) + + self.assertEqual( + str(inspect.signature(traceback.format_exception_only)), + '(exc, /, value=)') + class TracebackFormatTests(unittest.TestCase): diff --git a/Lib/traceback.py b/Lib/traceback.py index e19745df6def65..b4c7641addec77 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -84,8 +84,11 @@ def extract_tb(tb, limit=None): "another exception occurred:\n\n") -_sentinel = object() +class _Sentinel: + def __repr__(self): + return "" +_sentinel = _Sentinel() def _parse_value_tb(exc, value, tb): if (value is _sentinel) != (tb is _sentinel): diff --git a/Misc/NEWS.d/next/Library/2021-01-25-21-24-55.bpo-43024.vAUrIi.rst b/Misc/NEWS.d/next/Library/2021-01-25-21-24-55.bpo-43024.vAUrIi.rst new file mode 100644 index 00000000000000..56596ce3c2a978 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-01-25-21-24-55.bpo-43024.vAUrIi.rst @@ -0,0 +1 @@ +Improve the help signature of :func:`traceback.print_exception`, :func:`traceback.format_exception` and :func:`traceback.format_exception_only`. From 6e231c097da1032cebb829de2ebd158681df2a6b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Thu, 17 Jun 2021 15:39:42 -0500 Subject: [PATCH 42/64] bpo-44310: Add a FAQ entry for caching method calls (GH-26731) --- Doc/faq/programming.rst | 97 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index 921357d8fcdd2c..a519275040491d 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1826,6 +1826,103 @@ For example, here is the implementation of return True return False +How do I cache method calls? +---------------------------- + +The two principal tools for caching methods are +:func:`functools.cached_property` and :func:`functools.lru_cache`. The +former stores results at the instance level and the latter at the class +level. + +The *cached_property* approach only works with methods that do not take +any arguments. It does not create a reference to the instance. The +cached method result will be kept only as long as the instance is alive. + +The advantage is that when an instance is not longer used, the cached +method result will be released right away. The disadvantage is that if +instances accumulate, so too will the accumulated method results. They +can grow without bound. + +The *lru_cache* approach works with methods that have hashable +arguments. It creates a reference to the instance unless special +efforts are made to pass in weak references. + +The advantage of the least recently used algorithm is that the cache is +bounded by the specified *maxsize*. The disadvantage is that instances +are kept alive until they age out of the cache or until the cache is +cleared. + +To avoid keeping an instance alive, it can be wrapped a weak reference +proxy. That allows an instance to be freed prior aging out of the LRU +cache. That said, the weak reference technique is rarely needed. It is +only helpful when the instances hold large amounts of data and the +normal aging-out process isn't fast enough. And even though the +instance is released early, the cache still keeps references to the +other method arguments and to the result of the method call. + +This example shows the various techniques:: + + class Weather: + "Lookup weather information on a government website" + + def __init__(self, station_id): + self._station_id = station_id + # The _station_id is private and immutable + + def current_temperature(self): + "Latest hourly observation" + # Do not cache this because old results + # can be out of date. + + @cached_property + def location(self): + "Return the longitude/latitude coordinates of the station" + # Result only depends on the station_id + + @lru_cache(maxsize=20) + def historic_rainfall(self, date, units='mm'): + "Rainfall on a given date" + # Depends on the station_id, date, and units. + + def climate(self, category='average_temperature'): + "List of daily average temperatures for a full year" + return self._climate(weakref.proxy(self), category) + + @staticmethod + @lru_cache(maxsize=10) + def _climate(self_proxy, category): + # Depends on a weak reference to the instance + # and on the category parameter. + +The above example assumes that the *station_id* never changes. If the +relevant instance attributes are mutable, the *cached_property* approach +can't be made to work because it cannot detect changes to the +attributes. + +The *lru_cache* approach can be made to work, but the class needs to define the +*__eq__* and *__hash__* methods so the cache can detect relevant attribute +updates:: + + class Weather: + "Example with a mutable station identifier" + + def __init__(self, station_id): + self.station_id = station_id + + def change_station(self, station_id): + self.station_id = station_id + + def __eq__(self, other): + return self.station_id == other.station_id + + def __hash__(self): + return hash(self.station_id) + + @lru_cache(maxsize=20) + def historic_rainfall(self, date, units='cm'): + 'Rainfall on a given date' + # Depends on the station_id, date, and units. + Modules ======= From 9ad9fd7f8c0db6259b19cc31ff8e1762c0fe3d84 Mon Sep 17 00:00:00 2001 From: Mark Shannon Date: Fri, 18 Jun 2021 11:00:29 +0100 Subject: [PATCH 43/64] bpo-44032: Move pointer to code object from frame-object to frame specials array. (GH-26771) --- Include/cpython/frameobject.h | 1 - Include/internal/pycore_frame.h | 10 ++++++++- Lib/test/test_sys.py | 2 +- Objects/frameobject.c | 39 +++++++++++++++++++-------------- Python/ceval.c | 23 +++++++++---------- Tools/gdb/libpython.py | 25 +++++++++++---------- 6 files changed, 59 insertions(+), 41 deletions(-) diff --git a/Include/cpython/frameobject.h b/Include/cpython/frameobject.h index fc20bc2ff89b0c..2bf458cab35451 100644 --- a/Include/cpython/frameobject.h +++ b/Include/cpython/frameobject.h @@ -22,7 +22,6 @@ typedef signed char PyFrameState; struct _frame { PyObject_HEAD struct _frame *f_back; /* previous frame, or NULL */ - PyCodeObject *f_code; /* code segment */ PyObject **f_valuestack; /* points after the last local */ PyObject *f_trace; /* Trace function */ /* Borrowed reference to a generator, or NULL */ diff --git a/Include/internal/pycore_frame.h b/Include/internal/pycore_frame.h index 44f58fb6948712..e30e3c89bfb62b 100644 --- a/Include/internal/pycore_frame.h +++ b/Include/internal/pycore_frame.h @@ -8,7 +8,8 @@ enum { FRAME_SPECIALS_GLOBALS_OFFSET = 0, FRAME_SPECIALS_BUILTINS_OFFSET = 1, FRAME_SPECIALS_LOCALS_OFFSET = 2, - FRAME_SPECIALS_SIZE = 3 + FRAME_SPECIALS_CODE_OFFSET = 3, + FRAME_SPECIALS_SIZE = 4 }; static inline PyObject ** @@ -30,6 +31,13 @@ _PyFrame_GetBuiltins(PyFrameObject *f) return _PyFrame_Specials(f)[FRAME_SPECIALS_BUILTINS_OFFSET]; } +/* Returns a *borrowed* reference. */ +static inline PyCodeObject * +_PyFrame_GetCode(PyFrameObject *f) +{ + return (PyCodeObject *)_PyFrame_Specials(f)[FRAME_SPECIALS_CODE_OFFSET]; +} + int _PyFrame_TakeLocals(PyFrameObject *f); #ifdef __cplusplus diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py index 40fb721f3fa595..a549d44c5210fc 100644 --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -1275,7 +1275,7 @@ class C(object): pass # frame import inspect x = inspect.currentframe() - check(x, size('5P3i4cP')) + check(x, size('4P3i4cP')) # function def func(): pass check(func, size('14P')) diff --git a/Objects/frameobject.c b/Objects/frameobject.c index 5057313870c60b..f9090d8cb14d27 100644 --- a/Objects/frameobject.c +++ b/Objects/frameobject.c @@ -46,7 +46,7 @@ PyFrame_GetLineNumber(PyFrameObject *f) return f->f_lineno; } else { - return PyCode_Addr2Line(f->f_code, f->f_lasti*2); + return PyCode_Addr2Line(_PyFrame_GetCode(f), f->f_lasti*2); } } @@ -472,7 +472,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore } new_lineno = (int)l_new_lineno; - if (new_lineno < f->f_code->co_firstlineno) { + if (new_lineno < _PyFrame_GetCode(f)->co_firstlineno) { PyErr_Format(PyExc_ValueError, "line %d comes before the current code block", new_lineno); @@ -481,8 +481,8 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore /* PyCode_NewWithPosOnlyArgs limits co_code to be under INT_MAX so this * should never overflow. */ - int len = (int)(PyBytes_GET_SIZE(f->f_code->co_code) / sizeof(_Py_CODEUNIT)); - int *lines = marklines(f->f_code, len); + int len = (int)(PyBytes_GET_SIZE(_PyFrame_GetCode(f)->co_code) / sizeof(_Py_CODEUNIT)); + int *lines = marklines(_PyFrame_GetCode(f), len); if (lines == NULL) { return -1; } @@ -496,7 +496,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore return -1; } - int64_t *stacks = mark_stacks(f->f_code, len); + int64_t *stacks = mark_stacks(_PyFrame_GetCode(f), len); if (stacks == NULL) { PyMem_Free(lines); return -1; @@ -610,11 +610,17 @@ frame_dealloc(PyFrameObject *f) } Py_TRASHCAN_SAFE_BEGIN(f) - PyCodeObject *co = f->f_code; + PyCodeObject *co = NULL; /* Kill all local variables including specials. */ if (f->f_localsptr) { - for (int i = 0; i < co->co_nlocalsplus+FRAME_SPECIALS_SIZE; i++) { + /* Don't clear code object until the end */ + co = _PyFrame_GetCode(f); + PyObject **specials = _PyFrame_Specials(f); + Py_CLEAR(specials[FRAME_SPECIALS_GLOBALS_OFFSET]); + Py_CLEAR(specials[FRAME_SPECIALS_BUILTINS_OFFSET]); + Py_CLEAR(specials[FRAME_SPECIALS_LOCALS_OFFSET]); + for (int i = 0; i < co->co_nlocalsplus; i++) { Py_CLEAR(f->f_localsptr[i]); } /* Free items on stack */ @@ -625,6 +631,7 @@ frame_dealloc(PyFrameObject *f) PyMem_Free(f->f_localsptr); f->f_own_locals_memory = 0; } + f->f_localsptr = NULL; } f->f_stackdepth = 0; Py_XDECREF(f->f_back); @@ -643,7 +650,7 @@ frame_dealloc(PyFrameObject *f) PyObject_GC_Del(f); } - Py_DECREF(co); + Py_XDECREF(co); Py_TRASHCAN_SAFE_END(f) } @@ -683,7 +690,7 @@ frame_tp_clear(PyFrameObject *f) f->f_state = FRAME_CLEARED; Py_CLEAR(f->f_trace); - PyCodeObject *co = f->f_code; + PyCodeObject *co = _PyFrame_GetCode(f); /* locals */ for (int i = 0; i < co->co_nlocalsplus; i++) { Py_CLEAR(f->f_localsptr[i]); @@ -722,7 +729,7 @@ frame_sizeof(PyFrameObject *f, PyObject *Py_UNUSED(ignored)) Py_ssize_t res; res = sizeof(PyFrameObject); if (f->f_own_locals_memory) { - PyCodeObject *code = f->f_code; + PyCodeObject *code = _PyFrame_GetCode(f); res += (code->co_nlocalsplus+code->co_stacksize) * sizeof(PyObject *); } return PyLong_FromSsize_t(res); @@ -735,7 +742,7 @@ static PyObject * frame_repr(PyFrameObject *f) { int lineno = PyFrame_GetLineNumber(f); - PyCodeObject *code = f->f_code; + PyCodeObject *code = _PyFrame_GetCode(f); return PyUnicode_FromFormat( "", f, code->co_filename, lineno, code->co_name); @@ -876,7 +883,7 @@ _PyFrame_New_NoTrack(PyThreadState *tstate, PyFrameConstructor *con, PyObject *l PyObject **specials = f->f_localsptr + code->co_nlocalsplus; f->f_valuestack = specials + FRAME_SPECIALS_SIZE; f->f_back = (PyFrameObject*)Py_XNewRef(tstate->frame); - f->f_code = (PyCodeObject *)Py_NewRef(con->fc_code); + specials[FRAME_SPECIALS_CODE_OFFSET] = Py_NewRef(con->fc_code); specials[FRAME_SPECIALS_BUILTINS_OFFSET] = Py_NewRef(con->fc_builtins); specials[FRAME_SPECIALS_GLOBALS_OFFSET] = Py_NewRef(con->fc_globals); specials[FRAME_SPECIALS_LOCALS_OFFSET] = Py_XNewRef(locals); @@ -921,7 +928,7 @@ static int _PyFrame_OpAlreadyRan(PyFrameObject *f, int opcode, int oparg) { const _Py_CODEUNIT *code = - (const _Py_CODEUNIT *)PyBytes_AS_STRING(f->f_code->co_code); + (const _Py_CODEUNIT *)PyBytes_AS_STRING(_PyFrame_GetCode(f)->co_code); for (int i = 0; i < f->f_lasti; i++) { if (_Py_OPCODE(code[i]) == opcode && _Py_OPARG(code[i]) == oparg) { return 1; @@ -948,7 +955,7 @@ PyFrame_FastToLocalsWithError(PyFrameObject *f) if (locals == NULL) return -1; } - co = f->f_code; + co = _PyFrame_GetCode(f); fast = f->f_localsptr; for (int i = 0; i < co->co_nlocalsplus; i++) { _PyLocalsPlusKind kind = co->co_localspluskinds[i]; @@ -1041,7 +1048,7 @@ PyFrame_LocalsToFast(PyFrameObject *f, int clear) if (locals == NULL) return; fast = f->f_localsptr; - co = f->f_code; + co = _PyFrame_GetCode(f); PyErr_Fetch(&error_type, &error_value, &error_traceback); for (int i = 0; i < co->co_nlocalsplus; i++) { @@ -1134,7 +1141,7 @@ PyCodeObject * PyFrame_GetCode(PyFrameObject *frame) { assert(frame != NULL); - PyCodeObject *code = frame->f_code; + PyCodeObject *code = _PyFrame_GetCode(frame); assert(code != NULL); Py_INCREF(code); return code; diff --git a/Python/ceval.c b/Python/ceval.c index a9b9aca0399035..699cd865faa1be 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1451,7 +1451,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, PyFrameObject *f, int throwflag) /* push frame */ tstate->frame = f; specials = f->f_valuestack - FRAME_SPECIALS_SIZE; - co = f->f_code; + co = (PyCodeObject *)specials[FRAME_SPECIALS_CODE_OFFSET]; if (cframe.use_tracing) { if (tstate->c_tracefunc != NULL) { @@ -5388,9 +5388,10 @@ call_trace_protected(Py_tracefunc func, PyObject *obj, static void initialize_trace_info(PyTraceInfo *trace_info, PyFrameObject *frame) { - if (trace_info->code != frame->f_code) { - trace_info->code = frame->f_code; - _PyCode_InitAddressRange(frame->f_code, &trace_info->bounds); + PyCodeObject *code = _PyFrame_GetCode(frame); + if (trace_info->code != code) { + trace_info->code = code; + _PyCode_InitAddressRange(code, &trace_info->bounds); } } @@ -5405,7 +5406,7 @@ call_trace(Py_tracefunc func, PyObject *obj, tstate->tracing++; tstate->cframe->use_tracing = 0; if (frame->f_lasti < 0) { - frame->f_lineno = frame->f_code->co_firstlineno; + frame->f_lineno = _PyFrame_GetCode(frame)->co_firstlineno; } else { initialize_trace_info(&tstate->trace_info, frame); @@ -5684,7 +5685,7 @@ PyEval_MergeCompilerFlags(PyCompilerFlags *cf) int result = cf->cf_flags != 0; if (current_frame != NULL) { - const int codeflags = current_frame->f_code->co_flags; + const int codeflags = _PyFrame_GetCode(current_frame)->co_flags; const int compilerflags = codeflags & PyCF_MASK; if (compilerflags) { result = 1; @@ -6289,7 +6290,7 @@ unicode_concatenate(PyThreadState *tstate, PyObject *v, PyObject *w, } case STORE_NAME: { - PyObject *names = f->f_code->co_names; + PyObject *names = _PyFrame_GetCode(f)->co_names; PyObject *name = GETITEM(names, oparg); PyObject *locals = f->f_valuestack[ FRAME_SPECIALS_LOCALS_OFFSET-FRAME_SPECIALS_SIZE]; @@ -6376,7 +6377,7 @@ dtrace_function_entry(PyFrameObject *f) const char *funcname; int lineno; - PyCodeObject *code = f->f_code; + PyCodeObject *code = _PyFrame_GetCode(f); filename = PyUnicode_AsUTF8(code->co_filename); funcname = PyUnicode_AsUTF8(code->co_name); lineno = PyFrame_GetLineNumber(f); @@ -6391,7 +6392,7 @@ dtrace_function_return(PyFrameObject *f) const char *funcname; int lineno; - PyCodeObject *code = f->f_code; + PyCodeObject *code = _PyFrame_GetCode(f); filename = PyUnicode_AsUTF8(code->co_filename); funcname = PyUnicode_AsUTF8(code->co_name); lineno = PyFrame_GetLineNumber(f); @@ -6418,10 +6419,10 @@ maybe_dtrace_line(PyFrameObject *frame, if (line != frame->f_lineno || frame->f_lasti < instr_prev) { if (line != -1) { frame->f_lineno = line; - co_filename = PyUnicode_AsUTF8(frame->f_code->co_filename); + co_filename = PyUnicode_AsUTF8(_PyFrame_GetCode(frame)->co_filename); if (!co_filename) co_filename = "?"; - co_name = PyUnicode_AsUTF8(frame->f_code->co_name); + co_name = PyUnicode_AsUTF8(_PyFrame_GetCode(frame)->co_name); if (!co_name) co_name = "?"; PyDTrace_LINE(co_filename, co_name, line); diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index 756b52c3c57a61..0198500265be41 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -856,6 +856,8 @@ def proxyval(self, visited): FRAME_SPECIALS_GLOBAL_OFFSET = 0 FRAME_SPECIALS_BUILTINS_OFFSET = 1 +FRAME_SPECIALS_CODE_OFFSET = 3 +FRAME_SPECIALS_SIZE = 4 class PyFrameObjectPtr(PyObjectPtr): _typename = 'PyFrameObject' @@ -864,7 +866,7 @@ def __init__(self, gdbval, cast_to=None): PyObjectPtr.__init__(self, gdbval, cast_to) if not self.is_optimized_out(): - self.co = PyCodeObjectPtr.from_pyobject_ptr(self.field('f_code')) + self.co = self._f_code() self.co_name = self.co.pyop_field('co_name') self.co_filename = self.co.pyop_field('co_filename') @@ -890,11 +892,18 @@ def iter_locals(self): pyop_name = PyObjectPtr.from_pyobject_ptr(self.co_localsplusnames[i]) yield (pyop_name, pyop_value) + def _f_specials(self, index, cls=PyObjectPtr): + f_valuestack = self.field('f_valuestack') + return cls.from_pyobject_ptr(f_valuestack[index - FRAME_SPECIALS_SIZE]) + def _f_globals(self): - f_localsplus = self.field('f_localsptr') - nlocalsplus = int_from_int(self.co.field('co_nlocalsplus')) - index = nlocalsplus + FRAME_SPECIALS_GLOBAL_OFFSET - return PyObjectPtr.from_pyobject_ptr(f_localsplus[index]) + return self._f_specials(FRAME_SPECIALS_GLOBAL_OFFSET) + + def _f_builtins(self): + return self._f_specials(FRAME_SPECIALS_BUILTINS_OFFSET) + + def _f_code(self): + return self._f_specials(FRAME_SPECIALS_CODE_OFFSET, PyCodeObjectPtr) def iter_globals(self): ''' @@ -907,12 +916,6 @@ def iter_globals(self): pyop_globals = self._f_globals() return pyop_globals.iteritems() - def _f_builtins(self): - f_localsplus = self.field('f_localsptr') - nlocalsplus = int_from_int(self.co.field('co_nlocalsplus')) - index = nlocalsplus + FRAME_SPECIALS_BUILTINS_OFFSET - return PyObjectPtr.from_pyobject_ptr(f_localsplus[index]) - def iter_builtins(self): ''' Yield a sequence of (name,value) pairs of PyObjectPtr instances, for From 95aa9d60b688a9d98bef41c2e9987c8dccb93e5d Mon Sep 17 00:00:00 2001 From: Brandt Bucher Date: Fri, 18 Jun 2021 10:18:14 -0700 Subject: [PATCH 44/64] Reorganize the pattern matching suite (GH-26661) --- Lib/test/test_patma.py | 1161 +++++++++++++++++++--------------------- 1 file changed, 555 insertions(+), 606 deletions(-) diff --git a/Lib/test/test_patma.py b/Lib/test/test_patma.py index 084d0879f17645..91b1f7e2aa4c73 100644 --- a/Lib/test/test_patma.py +++ b/Lib/test/test_patma.py @@ -1,23 +1,9 @@ import array import collections -import contextlib import dataclasses import enum import inspect import unittest -import warnings - - -def no_perf(f): - f.no_perf = None - return f - - -@dataclasses.dataclass -class MyClass: - x: int - y: str - __match_args__ = ("x", "y") @dataclasses.dataclass @@ -26,11 +12,58 @@ class Point: y: int -class TestPatma(unittest.TestCase): +class TestCompiler(unittest.TestCase): - def assert_syntax_error(self, code: str): - with self.assertRaises(SyntaxError): - compile(inspect.cleandoc(code), "", "exec") + def test_refleaks(self): + # Hunting for leaks using -R doesn't catch leaks in the compiler itself, + # just the code under test. This test ensures that if there are leaks in + # the pattern compiler, those runs will fail: + with open(__file__) as file: + compile(file.read(), __file__, "exec") + + +class TestInheritance(unittest.TestCase): + + def test_multiple_inheritance(self): + class C: + pass + class S1(collections.UserList, collections.abc.Mapping): + pass + class S2(C, collections.UserList, collections.abc.Mapping): + pass + class S3(list, C, collections.abc.Mapping): + pass + class S4(collections.UserList, dict, C): + pass + class M1(collections.UserDict, collections.abc.Sequence): + pass + class M2(C, collections.UserDict, collections.abc.Sequence): + pass + class M3(collections.UserDict, C, list): + pass + class M4(dict, collections.abc.Sequence, C): + pass + def f(x): + match x: + case []: + return "seq" + case {}: + return "map" + def g(x): + match x: + case {}: + return "map" + case []: + return "seq" + for Seq in (S1, S2, S3, S4): + self.assertEqual(f(Seq()), "seq") + self.assertEqual(g(Seq()), "seq") + for Map in (M1, M2, M3, M4): + self.assertEqual(f(Map()), "map") + self.assertEqual(g(Map()), "map") + + +class TestPatma(unittest.TestCase): def test_patma_000(self): match 0: @@ -1701,7 +1734,6 @@ def http_error(status): self.assertIs(http_error("400"), None) self.assertIs(http_error(401 | 403 | 404), None) # 407 - @no_perf def test_patma_176(self): def whereis(point): match point: @@ -1714,13 +1746,12 @@ def whereis(point): case (x, y): return f"X={x}, Y={y}" case _: - raise ValueError("Not a point") + return "Not a point" self.assertEqual(whereis((0, 0)), "Origin") self.assertEqual(whereis((0, -1.0)), "Y=-1.0") self.assertEqual(whereis(("X", 0)), "X=X") self.assertEqual(whereis((None, 1j)), "X=None, Y=1j") - with self.assertRaises(ValueError): - whereis(42) + self.assertEqual(whereis(42), "Not a point") def test_patma_177(self): def whereis(point): @@ -2179,11 +2210,11 @@ def f(w): def test_patma_212(self): def f(w): match w: - case MyClass(int(xx), y="hello"): + case Point(int(xx), y="hello"): out = locals() del out["w"] return out - self.assertEqual(f(MyClass(42, "hello")), {"xx": 42}) + self.assertEqual(f(Point(42, "hello")), {"xx": 42}) def test_patma_213(self): def f(w): @@ -2225,99 +2256,35 @@ def f(): return locals() self.assertEqual(set(f()), {"abc"}) - @no_perf def test_patma_218(self): - self.assert_syntax_error(""" - match ...: - case "a" | a: - pass - """) - - @no_perf - def test_patma_219(self): - self.assert_syntax_error(""" - match ...: - case a | "a": - pass - """) - - def test_patma_220(self): def f(): match ..., ...: case a, b: return locals() self.assertEqual(set(f()), {"a", "b"}) - @no_perf - def test_patma_221(self): - self.assert_syntax_error(""" - match ...: - case a, a: - pass - """) - - def test_patma_222(self): + def test_patma_219(self): def f(): match {"k": ..., "l": ...}: case {"k": a, "l": b}: return locals() self.assertEqual(set(f()), {"a", "b"}) - @no_perf - def test_patma_223(self): - self.assert_syntax_error(""" - match ...: - case {"k": a, "l": a}: - pass - """) - - def test_patma_224(self): + def test_patma_220(self): def f(): - match MyClass(..., ...): - case MyClass(x, y=y): + match Point(..., ...): + case Point(x, y=y): return locals() self.assertEqual(set(f()), {"x", "y"}) - @no_perf - def test_patma_225(self): - self.assert_syntax_error(""" - match ...: - case MyClass(x, x): - pass - """) - - @no_perf - def test_patma_226(self): - self.assert_syntax_error(""" - match ...: - case MyClass(x=x, y=x): - pass - """) - - @no_perf - def test_patma_227(self): - self.assert_syntax_error(""" - match ...: - case MyClass(x, y=x): - pass - """) - - def test_patma_228(self): + def test_patma_221(self): def f(): match ...: case b as a: return locals() self.assertEqual(set(f()), {"a", "b"}) - @no_perf - def test_patma_229(self): - self.assert_syntax_error(""" - match ...: - case a as a: - pass - """) - - def test_patma_230(self): + def test_patma_222(self): def f(x): match x: case _: @@ -2327,7 +2294,7 @@ def f(x): self.assertEqual(f(2), 0) self.assertEqual(f(3), 0) - def test_patma_231(self): + def test_patma_223(self): def f(x): match x: case 0: @@ -2337,7 +2304,7 @@ def f(x): self.assertIs(f(2), None) self.assertIs(f(3), None) - def test_patma_232(self): + def test_patma_224(self): def f(x): match x: case 0: @@ -2349,7 +2316,7 @@ def f(x): self.assertEqual(f(2), 1) self.assertEqual(f(3), 1) - def test_patma_233(self): + def test_patma_225(self): def f(x): match x: case 0: @@ -2361,7 +2328,7 @@ def f(x): self.assertIs(f(2), None) self.assertIs(f(3), None) - def test_patma_234(self): + def test_patma_226(self): def f(x): match x: case 0: @@ -2375,7 +2342,7 @@ def f(x): self.assertEqual(f(2), 2) self.assertEqual(f(3), 2) - def test_patma_235(self): + def test_patma_227(self): def f(x): match x: case 0: @@ -2389,275 +2356,77 @@ def f(x): self.assertEqual(f(2), 2) self.assertIs(f(3), None) - @no_perf - def test_patma_236(self): - self.assert_syntax_error(""" - match ...: - case {**rest, "key": value}: - pass - """) - - @no_perf - def test_patma_237(self): - self.assert_syntax_error(""" - match ...: - case {"first": first, **rest, "last": last}: - pass - """) + def test_patma_228(self): + match(): + case(): + x = 0 + self.assertEqual(x, 0) - @no_perf - def test_patma_238(self): - self.assert_syntax_error(""" - match ...: - case *a, b, *c, d, *e: - pass - """) + def test_patma_229(self): + x = 0 + match(x): + case(x): + y = 0 + self.assertEqual(x, 0) + self.assertEqual(y, 0) - @no_perf - def test_patma_239(self): - self.assert_syntax_error(""" - match ...: - case a, *b, c, *d, e: - pass - """) + def test_patma_230(self): + x = 0 + match x: + case False: + y = 0 + case 0: + y = 1 + self.assertEqual(x, 0) + self.assertEqual(y, 1) - @no_perf - def test_patma_240(self): - self.assert_syntax_error(""" - match ...: - case 0+0: - pass - """) + def test_patma_231(self): + x = 1 + match x: + case True: + y = 0 + case 1: + y = 1 + self.assertEqual(x, 1) + self.assertEqual(y, 1) - @no_perf - def test_patma_241(self): - self.assert_syntax_error(""" - match ...: - case f"": - pass - """) + def test_patma_232(self): + class Eq: + def __eq__(self, other): + return True + x = eq = Eq() + y = None + match x: + case None: + y = 0 + self.assertIs(x, eq) + self.assertEqual(y, None) - @no_perf - def test_patma_242(self): - self.assert_syntax_error(""" - match ...: - case f"{x}": - pass - """) + def test_patma_233(self): + x = False + match x: + case False: + y = 0 + self.assertIs(x, False) + self.assertEqual(y, 0) - @no_perf - def test_patma_243(self): - self.assert_syntax_error(""" - match 42: - case x: - pass - case y: - pass - """) + def test_patma_234(self): + x = True + match x: + case True: + y = 0 + self.assertIs(x, True) + self.assertEqual(y, 0) - @no_perf - def test_patma_244(self): - self.assert_syntax_error(""" - match ...: - case {**_}: - pass - """) + def test_patma_235(self): + x = None + match x: + case None: + y = 0 + self.assertIs(x, None) + self.assertEqual(y, 0) - @no_perf - def test_patma_245(self): - self.assert_syntax_error(""" - match ...: - case 42 as _: - pass - """) - - @no_perf - def test_patma_246(self): - class Class: - __match_args__ = None - x = Class() - y = z = None - with self.assertRaises(TypeError): - match x: - case Class(y): - z = 0 - self.assertIs(y, None) - self.assertIs(z, None) - - @no_perf - def test_patma_247(self): - class Class: - __match_args__ = "XYZ" - x = Class() - y = z = None - with self.assertRaises(TypeError): - match x: - case Class(y): - z = 0 - self.assertIs(y, None) - self.assertIs(z, None) - - @no_perf - def test_patma_248(self): - class Class: - __match_args__ = (None,) - x = Class() - y = z = None - with self.assertRaises(TypeError): - match x: - case Class(y): - z = 0 - self.assertIs(y, None) - self.assertIs(z, None) - - @no_perf - def test_patma_249(self): - class Class: - __match_args__ = () - x = Class() - y = z = None - with self.assertRaises(TypeError): - match x: - case Class(y): - z = 0 - self.assertIs(y, None) - self.assertIs(z, None) - - @no_perf - def test_patma_250(self): - self.assert_syntax_error(""" - match ...: - case Class(a=_, a=_): - pass - """) - - @no_perf - def test_patma_251(self): - x = {"a": 0, "b": 1} - w = y = z = None - with self.assertRaises(ValueError): - match x: - case {"a": y, "a": z}: - w = 0 - self.assertIs(w, None) - self.assertIs(y, None) - self.assertIs(z, None) - - @no_perf - def test_patma_252(self): - class Keys: - KEY = "a" - x = {"a": 0, "b": 1} - w = y = z = None - with self.assertRaises(ValueError): - match x: - case {Keys.KEY: y, "a": z}: - w = 0 - self.assertIs(w, None) - self.assertIs(y, None) - self.assertIs(z, None) - - @no_perf - def test_patma_253(self): - class Class: - __match_args__ = ("a", "a") - a = None - x = Class() - w = y = z = None - with self.assertRaises(TypeError): - match x: - case Class(y, z): - w = 0 - self.assertIs(w, None) - self.assertIs(y, None) - self.assertIs(z, None) - - @no_perf - def test_patma_254(self): - class Class: - __match_args__ = ("a",) - a = None - x = Class() - w = y = z = None - with self.assertRaises(TypeError): - match x: - case Class(y, a=z): - w = 0 - self.assertIs(w, None) - self.assertIs(y, None) - self.assertIs(z, None) - - def test_patma_255(self): - match(): - case(): - x = 0 - self.assertEqual(x, 0) - - def test_patma_256(self): - x = 0 - match(x): - case(x): - y = 0 - self.assertEqual(x, 0) - self.assertEqual(y, 0) - - def test_patma_257(self): - x = 0 - match x: - case False: - y = 0 - case 0: - y = 1 - self.assertEqual(x, 0) - self.assertEqual(y, 1) - - def test_patma_258(self): - x = 1 - match x: - case True: - y = 0 - case 1: - y = 1 - self.assertEqual(x, 1) - self.assertEqual(y, 1) - - def test_patma_259(self): - class Eq: - def __eq__(self, other): - return True - x = eq = Eq() - y = None - match x: - case None: - y = 0 - self.assertIs(x, eq) - self.assertEqual(y, None) - - def test_patma_260(self): - x = False - match x: - case False: - y = 0 - self.assertIs(x, False) - self.assertEqual(y, 0) - - def test_patma_261(self): - x = True - match x: - case True: - y = 0 - self.assertIs(x, True) - self.assertEqual(y, 0) - - def test_patma_262(self): - x = None - match x: - case None: - y = 0 - self.assertIs(x, None) - self.assertEqual(y, 0) - - def test_patma_263(self): + def test_patma_236(self): x = 0 match x: case (0 as w) as z: @@ -2667,7 +2436,7 @@ def test_patma_263(self): self.assertEqual(y, 0) self.assertEqual(z, 0) - def test_patma_264(self): + def test_patma_237(self): x = 0 match x: case (0 as w) as z: @@ -2677,7 +2446,7 @@ def test_patma_264(self): self.assertEqual(y, 0) self.assertEqual(z, 0) - def test_patma_265(self): + def test_patma_238(self): x = ((0, 1), (2, 3)) match x: case ((a as b, c as d) as e) as w, ((f as g, h) as i) as z: @@ -2696,87 +2465,7 @@ def test_patma_265(self): self.assertEqual(y, 0) self.assertEqual(z, (2, 3)) - @no_perf - def test_patma_266(self): - self.assert_syntax_error(""" - match ...: - case _ | _: - pass - """) - - @no_perf - def test_patma_267(self): - self.assert_syntax_error(""" - match ...: - case (_ as x) | [x]: - pass - """) - - - @no_perf - def test_patma_268(self): - self.assert_syntax_error(""" - match ...: - case _ | _ if condition(): - pass - """) - - - @no_perf - def test_patma_269(self): - self.assert_syntax_error(""" - match ...: - case x | [_ as x] if x: - pass - """) - - @no_perf - def test_patma_270(self): - self.assert_syntax_error(""" - match ...: - case _: - pass - case None: - pass - """) - - @no_perf - def test_patma_271(self): - self.assert_syntax_error(""" - match ...: - case x: - pass - case [x] if x: - pass - """) - - @no_perf - def test_patma_272(self): - self.assert_syntax_error(""" - match ...: - case x: - pass - case _: - pass - """) - - @no_perf - def test_patma_273(self): - self.assert_syntax_error(""" - match ...: - case (None | _) | _: - pass - """) - - @no_perf - def test_patma_274(self): - self.assert_syntax_error(""" - match ...: - case _ | (True | False): - pass - """) - - def test_patma_275(self): + def test_patma_239(self): x = collections.UserDict({0: 1, 2: 3}) match x: case {2: 3}: @@ -2784,7 +2473,7 @@ def test_patma_275(self): self.assertEqual(x, {0: 1, 2: 3}) self.assertEqual(y, 0) - def test_patma_276(self): + def test_patma_240(self): x = collections.UserDict({0: 1, 2: 3}) match x: case {2: 3, **z}: @@ -2793,7 +2482,7 @@ def test_patma_276(self): self.assertEqual(y, 0) self.assertEqual(z, {0: 1}) - def test_patma_277(self): + def test_patma_241(self): x = [[{0: 0}]] match x: case list([({-0-0j: int(real=0+0j, imag=0-0j) | (1) as z},)]): @@ -2802,7 +2491,7 @@ def test_patma_277(self): self.assertEqual(y, 0) self.assertEqual(z, 0) - def test_patma_278(self): + def test_patma_242(self): x = range(3) match x: case [y, *_, z]: @@ -2812,7 +2501,7 @@ def test_patma_278(self): self.assertEqual(y, 0) self.assertEqual(z, 2) - def test_patma_279(self): + def test_patma_243(self): x = range(3) match x: case [_, *_, y]: @@ -2821,7 +2510,7 @@ def test_patma_279(self): self.assertEqual(y, 2) self.assertEqual(z, 0) - def test_patma_280(self): + def test_patma_244(self): x = range(3) match x: case [*_, y]: @@ -2830,228 +2519,488 @@ def test_patma_280(self): self.assertEqual(y, 2) self.assertEqual(z, 0) - @no_perf - def test_patma_281(self): - x = range(10) - y = None - with self.assertRaises(TypeError): - match x: - case range(10): - y = 0 - self.assertEqual(x, range(10)) - self.assertIs(y, None) + def test_patma_245(self): + x = {"y": 1} + match x: + case {"y": (0 as y) | (1 as y)}: + z = 0 + self.assertEqual(x, {"y": 1}) + self.assertEqual(y, 1) + self.assertEqual(z, 0) - @no_perf - def test_patma_282(self): - class Class: - __match_args__ = ["spam", "eggs"] - spam = 0 - eggs = 1 - x = Class() - w = y = z = None - with self.assertRaises(TypeError): + def test_patma_246(self): + def f(x): match x: - case Class(y, z): + case ((a, b, c, d, e, f, g, h, i, 9) | + (h, g, i, a, b, d, e, c, f, 10) | + (g, b, a, c, d, -5, e, h, i, f) | + (-1, d, f, b, g, e, i, a, h, c)): w = 0 - self.assertIs(w, None) - self.assertIs(y, None) - self.assertIs(z, None) + out = locals() + del out["x"] + return out + alts = [ + dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0), + dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0), + dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0), + dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0), + dict(), + ] + self.assertEqual(f(range(10)), alts[0]) + self.assertEqual(f(range(1, 11)), alts[1]) + self.assertEqual(f(range(0, -10, -1)), alts[2]) + self.assertEqual(f(range(-1, -11, -1)), alts[3]) + self.assertEqual(f(range(10, 20)), alts[4]) + + def test_patma_247(self): + def f(x): + match x: + case [y, (a, b, c, d, e, f, g, h, i, 9) | + (h, g, i, a, b, d, e, c, f, 10) | + (g, b, a, c, d, -5, e, h, i, f) | + (-1, d, f, b, g, e, i, a, h, c), z]: + w = 0 + out = locals() + del out["x"] + return out + alts = [ + dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0, y=False, z=True), + dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0, y=False, z=True), + dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0, y=False, z=True), + dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0, y=False, z=True), + dict(), + ] + self.assertEqual(f((False, range(10), True)), alts[0]) + self.assertEqual(f((False, range(1, 11), True)), alts[1]) + self.assertEqual(f((False, range(0, -10, -1), True)), alts[2]) + self.assertEqual(f((False, range(-1, -11, -1), True)), alts[3]) + self.assertEqual(f((False, range(10, 20), True)), alts[4]) - @no_perf - def test_patma_283(self): + +class TestSyntaxErrors(unittest.TestCase): + + def assert_syntax_error(self, code: str): + with self.assertRaises(SyntaxError): + compile(inspect.cleandoc(code), "", "exec") + + def test_alternative_patterns_bind_different_names_0(self): + self.assert_syntax_error(""" + match ...: + case "a" | a: + pass + """) + + def test_alternative_patterns_bind_different_names_1(self): + self.assert_syntax_error(""" + match ...: + case [a, [b] | [c] | [d]]: + pass + """) + + + def test_attribute_name_repeated_in_class_pattern(self): + self.assert_syntax_error(""" + match ...: + case Class(a=_, a=_): + pass + """) + + def test_imaginary_number_required_in_complex_literal_0(self): + self.assert_syntax_error(""" + match ...: + case 0+0: + pass + """) + + def test_imaginary_number_required_in_complex_literal_1(self): self.assert_syntax_error(""" match ...: case {0+0: _}: pass """) - @no_perf - def test_patma_284(self): + def test_invalid_syntax_0(self): + self.assert_syntax_error(""" + match ...: + case {**rest, "key": value}: + pass + """) + + def test_invalid_syntax_1(self): + self.assert_syntax_error(""" + match ...: + case {"first": first, **rest, "last": last}: + pass + """) + + def test_invalid_syntax_2(self): + self.assert_syntax_error(""" + match ...: + case {**_}: + pass + """) + + def test_invalid_syntax_3(self): + self.assert_syntax_error(""" + match ...: + case 42 as _: + pass + """) + + def test_mapping_pattern_keys_may_only_match_literals_and_attribute_lookups(self): self.assert_syntax_error(""" match ...: case {f"": _}: pass """) - @no_perf - def test_patma_285(self): + def test_multiple_assignments_to_name_in_pattern_0(self): + self.assert_syntax_error(""" + match ...: + case a, a: + pass + """) + + def test_multiple_assignments_to_name_in_pattern_1(self): + self.assert_syntax_error(""" + match ...: + case {"k": a, "l": a}: + pass + """) + + def test_multiple_assignments_to_name_in_pattern_2(self): + self.assert_syntax_error(""" + match ...: + case MyClass(x, x): + pass + """) + + def test_multiple_assignments_to_name_in_pattern_3(self): + self.assert_syntax_error(""" + match ...: + case MyClass(x=x, y=x): + pass + """) + + def test_multiple_assignments_to_name_in_pattern_4(self): + self.assert_syntax_error(""" + match ...: + case MyClass(x, y=x): + pass + """) + + def test_multiple_assignments_to_name_in_pattern_5(self): + self.assert_syntax_error(""" + match ...: + case a as a: + pass + """) + + def test_multiple_starred_names_in_sequence_pattern_0(self): + self.assert_syntax_error(""" + match ...: + case *a, b, *c, d, *e: + pass + """) + + def test_multiple_starred_names_in_sequence_pattern_1(self): + self.assert_syntax_error(""" + match ...: + case a, *b, c, *d, e: + pass + """) + + def test_name_capture_makes_remaining_patterns_unreachable_0(self): + self.assert_syntax_error(""" + match ...: + case a | "a": + pass + """) + + def test_name_capture_makes_remaining_patterns_unreachable_1(self): + self.assert_syntax_error(""" + match 42: + case x: + pass + case y: + pass + """) + + def test_name_capture_makes_remaining_patterns_unreachable_2(self): + self.assert_syntax_error(""" + match ...: + case x | [_ as x] if x: + pass + """) + + def test_name_capture_makes_remaining_patterns_unreachable_3(self): + self.assert_syntax_error(""" + match ...: + case x: + pass + case [x] if x: + pass + """) + + def test_name_capture_makes_remaining_patterns_unreachable_4(self): + self.assert_syntax_error(""" + match ...: + case x: + pass + case _: + pass + """) + + def test_patterns_may_only_match_literals_and_attribute_lookups_0(self): + self.assert_syntax_error(""" + match ...: + case f"": + pass + """) + + def test_patterns_may_only_match_literals_and_attribute_lookups_1(self): + self.assert_syntax_error(""" + match ...: + case f"{x}": + pass + """) + + def test_real_number_required_in_complex_literal_0(self): self.assert_syntax_error(""" match ...: case 0j+0: pass """) - @no_perf - def test_patma_286(self): + def test_real_number_required_in_complex_literal_1(self): self.assert_syntax_error(""" match ...: case 0j+0j: pass """) - @no_perf - def test_patma_287(self): + def test_real_number_required_in_complex_literal_2(self): self.assert_syntax_error(""" match ...: case {0j+0: _}: pass """) - @no_perf - def test_patma_288(self): + def test_real_number_required_in_complex_literal_3(self): self.assert_syntax_error(""" match ...: case {0j+0j: _}: pass """) - def test_patma_289(self): - x = {"y": 1} - match x: - case {"y": (0 as y) | (1 as y)}: - z = 0 - self.assertEqual(x, {"y": 1}) - self.assertEqual(y, 1) - self.assertEqual(z, 0) + def test_wildcard_makes_remaining_patterns_unreachable_0(self): + self.assert_syntax_error(""" + match ...: + case _ | _: + pass + """) - @no_perf - def test_patma_290(self): + def test_wildcard_makes_remaining_patterns_unreachable_1(self): self.assert_syntax_error(""" match ...: - case [a, [b] | [c] | [d]]: + case (_ as x) | [x]: pass """) - @no_perf - def test_patma_291(self): - # Hunting for leaks using -R doesn't catch leaks in the compiler itself, - # just the code under test. This test ensures that if there are leaks in - # the pattern compiler, those runs will fail: - with open(__file__) as file: - compile(file.read(), __file__, "exec") + def test_wildcard_makes_remaining_patterns_unreachable_2(self): + self.assert_syntax_error(""" + match ...: + case _ | _ if condition(): + pass + """) - def test_patma_292(self): - def f(x): + def test_wildcard_makes_remaining_patterns_unreachable_3(self): + self.assert_syntax_error(""" + match ...: + case _: + pass + case None: + pass + """) + + def test_wildcard_makes_remaining_patterns_unreachable_4(self): + self.assert_syntax_error(""" + match ...: + case (None | _) | _: + pass + """) + + def test_wildcard_makes_remaining_patterns_unreachable_5(self): + self.assert_syntax_error(""" + match ...: + case _ | (True | False): + pass + """) + + +class TestTypeErrors(unittest.TestCase): + + def test_accepts_positional_subpatterns_0(self): + class Class: + __match_args__ = () + x = Class() + y = z = None + with self.assertRaises(TypeError): match x: - case ((a, b, c, d, e, f, g, h, i, 9) | - (h, g, i, a, b, d, e, c, f, 10) | - (g, b, a, c, d, -5, e, h, i, f) | - (-1, d, f, b, g, e, i, a, h, c)): + case Class(y): + z = 0 + self.assertIs(y, None) + self.assertIs(z, None) + + def test_accepts_positional_subpatterns_1(self): + x = range(10) + y = None + with self.assertRaises(TypeError): + match x: + case range(10): + y = 0 + self.assertEqual(x, range(10)) + self.assertIs(y, None) + + def test_got_multiple_subpatterns_for_attribute_0(self): + class Class: + __match_args__ = ("a", "a") + a = None + x = Class() + w = y = z = None + with self.assertRaises(TypeError): + match x: + case Class(y, z): w = 0 - out = locals() - del out["x"] - return out - alts = [ - dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0), - dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0), - dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0), - dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0), - dict(), - ] - self.assertEqual(f(range(10)), alts[0]) - self.assertEqual(f(range(1, 11)), alts[1]) - self.assertEqual(f(range(0, -10, -1)), alts[2]) - self.assertEqual(f(range(-1, -11, -1)), alts[3]) - self.assertEqual(f(range(10, 20)), alts[4]) + self.assertIs(w, None) + self.assertIs(y, None) + self.assertIs(z, None) - def test_patma_293(self): - def f(x): + def test_got_multiple_subpatterns_for_attribute_1(self): + class Class: + __match_args__ = ("a",) + a = None + x = Class() + w = y = z = None + with self.assertRaises(TypeError): match x: - case [y, (a, b, c, d, e, f, g, h, i, 9) | - (h, g, i, a, b, d, e, c, f, 10) | - (g, b, a, c, d, -5, e, h, i, f) | - (-1, d, f, b, g, e, i, a, h, c), z]: + case Class(y, a=z): w = 0 - out = locals() - del out["x"] - return out - alts = [ - dict(a=0, b=1, c=2, d=3, e=4, f=5, g=6, h=7, i=8, w=0, y=False, z=True), - dict(h=1, g=2, i=3, a=4, b=5, d=6, e=7, c=8, f=9, w=0, y=False, z=True), - dict(g=0, b=-1, a=-2, c=-3, d=-4, e=-6, h=-7, i=-8, f=-9, w=0, y=False, z=True), - dict(d=-2, f=-3, b=-4, g=-5, e=-6, i=-7, a=-8, h=-9, c=-10, w=0, y=False, z=True), - dict(), - ] - self.assertEqual(f((False, range(10), True)), alts[0]) - self.assertEqual(f((False, range(1, 11), True)), alts[1]) - self.assertEqual(f((False, range(0, -10, -1), True)), alts[2]) - self.assertEqual(f((False, range(-1, -11, -1), True)), alts[3]) - self.assertEqual(f((False, range(10, 20), True)), alts[4]) + self.assertIs(w, None) + self.assertIs(y, None) + self.assertIs(z, None) + def test_match_args_elements_must_be_strings(self): + class Class: + __match_args__ = (None,) + x = Class() + y = z = None + with self.assertRaises(TypeError): + match x: + case Class(y): + z = 0 + self.assertIs(y, None) + self.assertIs(z, None) -class TestInheritance(unittest.TestCase): + def test_match_args_must_be_a_tuple_0(self): + class Class: + __match_args__ = None + x = Class() + y = z = None + with self.assertRaises(TypeError): + match x: + case Class(y): + z = 0 + self.assertIs(y, None) + self.assertIs(z, None) - def test_multiple_inheritance(self): - class C: - pass - class S1(collections.UserList, collections.abc.Mapping): - pass - class S2(C, collections.UserList, collections.abc.Mapping): - pass - class S3(list, C, collections.abc.Mapping): - pass - class S4(collections.UserList, dict, C): - pass - class M1(collections.UserDict, collections.abc.Sequence): - pass - class M2(C, collections.UserDict, collections.abc.Sequence): - pass - class M3(collections.UserDict, C, list): - pass - class M4(dict, collections.abc.Sequence, C): - pass - def f(x): + def test_match_args_must_be_a_tuple_1(self): + class Class: + __match_args__ = "XYZ" + x = Class() + y = z = None + with self.assertRaises(TypeError): match x: - case []: - return "seq" - case {}: - return "map" - def g(x): + case Class(y): + z = 0 + self.assertIs(y, None) + self.assertIs(z, None) + + def test_match_args_must_be_a_tuple_2(self): + class Class: + __match_args__ = ["spam", "eggs"] + spam = 0 + eggs = 1 + x = Class() + w = y = z = None + with self.assertRaises(TypeError): match x: - case {}: - return "map" - case []: - return "seq" - for Seq in (S1, S2, S3, S4): - self.assertEqual(f(Seq()), "seq") - self.assertEqual(g(Seq()), "seq") - for Map in (M1, M2, M3, M4): - self.assertEqual(f(Map()), "map") - self.assertEqual(g(Map()), "map") + case Class(y, z): + w = 0 + self.assertIs(w, None) + self.assertIs(y, None) + self.assertIs(z, None) + + +class TestValueErrors(unittest.TestCase): + def test_mapping_pattern_checks_duplicate_key_0(self): + x = {"a": 0, "b": 1} + w = y = z = None + with self.assertRaises(ValueError): + match x: + case {"a": y, "a": z}: + w = 0 + self.assertIs(w, None) + self.assertIs(y, None) + self.assertIs(z, None) -class PerfPatma(TestPatma): + def test_mapping_pattern_checks_duplicate_key_1(self): + class Keys: + KEY = "a" + x = {"a": 0, "b": 1} + w = y = z = None + with self.assertRaises(ValueError): + match x: + case {Keys.KEY: y, "a": z}: + w = 0 + self.assertIs(w, None) + self.assertIs(y, None) + self.assertIs(z, None) - def assertEqual(*_, **__): - pass - def assertIs(*_, **__): - pass +if __name__ == "__main__": + """ + # From inside environment using this Python, with pyperf installed: + sudo $(which pyperf) system tune && \ + $(which python) -m test.test_patma --rigorous; \ + sudo $(which pyperf) system reset + """ + import pyperf - def assertRaises(*_, **__): - assert False, "this test should be decorated with @no_perf!" - def assertWarns(*_, **__): - assert False, "this test should be decorated with @no_perf!" + class PerfPatma(TestPatma): - def run_perf(self): - attrs = vars(TestPatma).items() - tests = [ - attr for name, attr in attrs - if name.startswith("test_") and not hasattr(attr, "no_perf") - ] - for _ in range(1 << 8): - for test in tests: - test(self) + def assertEqual(*_, **__): + pass + + def assertIs(*_, **__): + pass + + def assertRaises(*_, **__): + assert False, "this test should be a method of a different class!" - @staticmethod - def setUpClass(): - raise unittest.SkipTest("performance testing") + def run_perf(self, count): + tests = [] + for attr in vars(TestPatma): + if attr.startswith("test_"): + tests.append(getattr(self, attr)) + tests *= count + start = pyperf.perf_counter() + for test in tests: + test() + return pyperf.perf_counter() - start -""" -# From inside venv pointing to this Python, with pyperf installed: -sudo $(which python) -m pyperf system tune && \ - $(which python) -m pyperf timeit --rigorous --setup "from test.test_patma import PerfPatma; p = PerfPatma()" "p.run_perf()"; \ -sudo $(which python) -m pyperf system reset -""" + runner = pyperf.Runner() + runner.bench_time_func("patma", PerfPatma().run_perf) From d8088292b53f836c86435548e0e6c9512431d8b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Fri, 18 Jun 2021 22:02:45 +0200 Subject: [PATCH 45/64] bpo-44451: Reset DeprecationWarning filters in test_importlib.test_entry_points_by_index (GH-26784) This avoids the following error if DeprecationWarnings are ignored. ====================================================================== ERROR: test_entry_points_by_index (test.test_importlib.test_metadata_api.APITests) Prior versions of Distribution.entry_points would return a ---------------------------------------------------------------------- Traceback (most recent call last): File "/builddir/build/BUILD/Python-3.10.0b3/Lib/test/test_importlib/test_metadata_api.py", line 145, in test_entry_points_by_index expected = next(iter(caught)) StopIteration ---------------------------------------------------------------------- Ran 1402 tests in 2.125s FAILED (errors=1, skipped=18, expected failures=1) --- Lib/test/test_importlib/test_metadata_api.py | 1 + .../NEWS.d/next/Tests/2021-06-18-15-19-35.bpo-44451.aj5pqE.rst | 3 +++ 2 files changed, 4 insertions(+) create mode 100644 Misc/NEWS.d/next/Tests/2021-06-18-15-19-35.bpo-44451.aj5pqE.rst diff --git a/Lib/test/test_importlib/test_metadata_api.py b/Lib/test/test_importlib/test_metadata_api.py index 3506493463d82e..2bfc44b18eedb4 100644 --- a/Lib/test/test_importlib/test_metadata_api.py +++ b/Lib/test/test_importlib/test_metadata_api.py @@ -139,6 +139,7 @@ def test_entry_points_by_index(self): """ eps = distribution('distinfo-pkg').entry_points with warnings.catch_warnings(record=True) as caught: + warnings.filterwarnings("default", category=DeprecationWarning) eps[0] # check warning diff --git a/Misc/NEWS.d/next/Tests/2021-06-18-15-19-35.bpo-44451.aj5pqE.rst b/Misc/NEWS.d/next/Tests/2021-06-18-15-19-35.bpo-44451.aj5pqE.rst new file mode 100644 index 00000000000000..0f635cfe18d141 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2021-06-18-15-19-35.bpo-44451.aj5pqE.rst @@ -0,0 +1,3 @@ +Reset ``DeprecationWarning`` filters in +``test.test_importlib.test_metadata_api.APITests.test_entry_points_by_index`` +to avoid ``StopIteration`` error if ``DeprecationWarnings`` are ignored. From f3dd96aef3508772b736600d904abb37f96b4ab6 Mon Sep 17 00:00:00 2001 From: Ethan Furman Date: Fri, 18 Jun 2021 13:15:46 -0700 Subject: [PATCH 46/64] bpo-43945: [Enum] reduce scope of new format() behavior (GH-26752) * [Enum] reduce scope of new format behavior Instead of treating all Enums the same for format(), only user mixed-in enums will be affected. In other words, IntEnum and IntFlag will not be changing the format() behavior, due to the requirement that they be drop-in replacements of existing integer constants. If a user creates their own integer-based enum, then the new behavior will apply: class Grades(int, Enum): A = 5 B = 4 C = 3 D = 2 F = 0 Now: format(Grades.B) -> DeprecationWarning and '4' 3.12: -> no warning, and 'B' --- Doc/library/enum.rst | 33 ++++++- Lib/asyncio/unix_events.py | 4 +- Lib/enum.py | 34 ++++++- Lib/test/test_enum.py | 179 +++++++++++++++++++++++++++++++---- Lib/test/test_httpservers.py | 4 +- 5 files changed, 225 insertions(+), 29 deletions(-) diff --git a/Doc/library/enum.rst b/Doc/library/enum.rst index d53e3405e531ff..89ce94b9f048c9 100644 --- a/Doc/library/enum.rst +++ b/Doc/library/enum.rst @@ -22,7 +22,7 @@ * :ref:`Advanced Tutorial ` * :ref:`Enum Cookbook ` ----------------- +--------------- An enumeration: @@ -58,6 +58,7 @@ are not normal Python classes. See :attr:`Color.RED` is ``RED``, the value of :attr:`Color.BLUE` is ``3``, etc.) +--------------- Module Contents --------------- @@ -73,12 +74,12 @@ Module Contents :class:`IntEnum` Base class for creating enumerated constants that are also - subclasses of :class:`int`. + subclasses of :class:`int`. (`Notes`_) :class:`StrEnum` Base class for creating enumerated constants that are also - subclasses of :class:`str`. + subclasses of :class:`str`. (`Notes`_) :class:`Flag` @@ -89,7 +90,7 @@ Module Contents Base class for creating enumerated constants that can be combined using the bitwise operators without losing their :class:`IntFlag` membership. - :class:`IntFlag` members are also subclasses of :class:`int`. + :class:`IntFlag` members are also subclasses of :class:`int`. (`Notes`_) :class:`EnumCheck` @@ -132,6 +133,7 @@ Module Contents .. versionadded:: 3.6 ``Flag``, ``IntFlag``, ``auto`` .. versionadded:: 3.10 ``StrEnum``, ``EnumCheck``, ``FlagBoundary`` +--------------- Data Types ---------- @@ -647,6 +649,7 @@ Data Types .. versionadded:: 3.10 +--------------- Utilites and Decorators ----------------------- @@ -710,3 +713,25 @@ Utilites and Decorators on the decorated enumeration. .. versionadded:: 3.10 + +--------------- + +Notes +----- + +:class:`IntEnum`, :class:`StrEnum`, and :class:`IntFlag` + + These three enum types are designed to be drop-in replacements for existing + integer- and string-based values; as such, they have extra limitations: + + - ``format()`` will use the value of the enum member, unless ``__str__`` + has been overridden + + - ``StrEnum.__str__`` uses the value and not the name of the enum member + + If you do not need/want those limitations, you can create your own base + class by mixing in the ``int`` or ``str`` type yourself:: + + >>> from enum import Enum + >>> class MyIntEnum(int, Enum): + ... pass diff --git a/Lib/asyncio/unix_events.py b/Lib/asyncio/unix_events.py index a55b3a375fa22d..e4f445e95026b5 100644 --- a/Lib/asyncio/unix_events.py +++ b/Lib/asyncio/unix_events.py @@ -126,7 +126,7 @@ def add_signal_handler(self, sig, callback, *args): logger.info('set_wakeup_fd(-1) failed: %s', nexc) if exc.errno == errno.EINVAL: - raise RuntimeError(f'sig {sig:d} cannot be caught') + raise RuntimeError(f'sig {sig} cannot be caught') else: raise @@ -160,7 +160,7 @@ def remove_signal_handler(self, sig): signal.signal(sig, handler) except OSError as exc: if exc.errno == errno.EINVAL: - raise RuntimeError(f'sig {sig:d} cannot be caught') + raise RuntimeError(f'sig {sig} cannot be caught') else: raise diff --git a/Lib/enum.py b/Lib/enum.py index 90777988dd041d..84e3cc17bbc531 100644 --- a/Lib/enum.py +++ b/Lib/enum.py @@ -993,9 +993,9 @@ def __format__(self, format_spec): # mixed-in Enums should use the mixed-in type's __format__, otherwise # we can get strange results with the Enum name showing up instead of # the value - + # # pure Enum branch, or branch with __str__ explicitly overridden - str_overridden = type(self).__str__ not in (Enum.__str__, Flag.__str__) + str_overridden = type(self).__str__ not in (Enum.__str__, IntEnum.__str__, Flag.__str__) if self._member_type_ is object or str_overridden: cls = str val = str(self) @@ -1005,7 +1005,7 @@ def __format__(self, format_spec): import warnings warnings.warn( "in 3.12 format() will use the enum member, not the enum member's value;\n" - "use a format specifier, such as :d for an IntEnum member, to maintain " + "use a format specifier, such as :d for an integer-based Enum, to maintain " "the current display", DeprecationWarning, stacklevel=2, @@ -1044,6 +1044,22 @@ class IntEnum(int, Enum): Enum where members are also (and must be) ints """ + def __str__(self): + return "%s" % (self._name_, ) + + def __format__(self, format_spec): + """ + Returns format using actual value unless __str__ has been overridden. + """ + str_overridden = type(self).__str__ != IntEnum.__str__ + if str_overridden: + cls = str + val = str(self) + else: + cls = self._member_type_ + val = self._value_ + return cls.__format__(val, format_spec) + class StrEnum(str, Enum): """ @@ -1072,6 +1088,8 @@ def __new__(cls, *values): __str__ = str.__str__ + __format__ = str.__format__ + def _generate_next_value_(name, start, count, last_values): """ Return the lower-cased version of the member name. @@ -1300,6 +1318,16 @@ class IntFlag(int, Flag, boundary=EJECT): Support for integer-based Flags """ + def __format__(self, format_spec): + """ + Returns format using actual value unless __str__ has been overridden. + """ + str_overridden = type(self).__str__ != Flag.__str__ + value = self + if not str_overridden: + value = self._value_ + return int.__format__(value, format_spec) + def __or__(self, other): if isinstance(other, self.__class__): other = other._value_ diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py index c4c458e6bfc4ef..0267ff5684c0d4 100644 --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -557,16 +557,27 @@ def __format__(self, spec): 'mixin-format is still using member.value', ) def test_mixin_format_warning(self): - with self.assertWarns(DeprecationWarning): - self.assertEqual(f'{self.Grades.B}', 'Grades.B') + class Grades(int, Enum): + A = 5 + B = 4 + C = 3 + D = 2 + F = 0 + self.assertEqual(f'{self.Grades.B}', 'B') @unittest.skipIf( python_version >= (3, 12), 'mixin-format now uses member instead of member.value', ) def test_mixin_format_warning(self): + class Grades(int, Enum): + A = 5 + B = 4 + C = 3 + D = 2 + F = 0 with self.assertWarns(DeprecationWarning): - self.assertEqual(f'{self.Grades.B}', '4') + self.assertEqual(f'{Grades.B}', '4') def assertFormatIsValue(self, spec, member): if python_version < (3, 12) and (not spec or spec in ('{}','{:}')): @@ -599,7 +610,12 @@ def test_format_enum_float(self): self.assertFormatIsValue('{:f}', Konstants.TAU) def test_format_enum_int(self): - Grades = self.Grades + class Grades(int, Enum): + A = 5 + B = 4 + C = 3 + D = 2 + F = 0 self.assertFormatIsValue('{}', Grades.C) self.assertFormatIsValue('{:}', Grades.C) self.assertFormatIsValue('{:20}', Grades.C) @@ -2236,8 +2252,10 @@ class GoodStrEnum(StrEnum): four = b'4', 'latin1', 'strict' self.assertEqual(GoodStrEnum.one, '1') self.assertEqual(str(GoodStrEnum.one), '1') + self.assertEqual('{}'.format(GoodStrEnum.one), '1') self.assertEqual(GoodStrEnum.one, str(GoodStrEnum.one)) self.assertEqual(GoodStrEnum.one, '{}'.format(GoodStrEnum.one)) + self.assertEqual(repr(GoodStrEnum.one), 'GoodStrEnum.one') # class DumbMixin: def __str__(self): @@ -2287,6 +2305,132 @@ class ThirdFailedStrEnum(StrEnum): one = '1' two = b'2', 'ascii', 9 + @unittest.skipIf( + python_version >= (3, 12), + 'mixin-format now uses member instead of member.value', + ) + def test_custom_strenum_with_warning(self): + class CustomStrEnum(str, Enum): + pass + class OkayEnum(CustomStrEnum): + one = '1' + two = '2' + three = b'3', 'ascii' + four = b'4', 'latin1', 'strict' + self.assertEqual(OkayEnum.one, '1') + self.assertEqual(str(OkayEnum.one), 'one') + with self.assertWarns(DeprecationWarning): + self.assertEqual('{}'.format(OkayEnum.one), '1') + self.assertEqual(OkayEnum.one, '{}'.format(OkayEnum.one)) + self.assertEqual(repr(OkayEnum.one), 'OkayEnum.one') + # + class DumbMixin: + def __str__(self): + return "don't do this" + class DumbStrEnum(DumbMixin, CustomStrEnum): + five = '5' + six = '6' + seven = '7' + self.assertEqual(DumbStrEnum.seven, '7') + self.assertEqual(str(DumbStrEnum.seven), "don't do this") + # + class EnumMixin(Enum): + def hello(self): + print('hello from %s' % (self, )) + class HelloEnum(EnumMixin, CustomStrEnum): + eight = '8' + self.assertEqual(HelloEnum.eight, '8') + self.assertEqual(str(HelloEnum.eight), 'eight') + # + class GoodbyeMixin: + def goodbye(self): + print('%s wishes you a fond farewell') + class GoodbyeEnum(GoodbyeMixin, EnumMixin, CustomStrEnum): + nine = '9' + self.assertEqual(GoodbyeEnum.nine, '9') + self.assertEqual(str(GoodbyeEnum.nine), 'nine') + # + class FirstFailedStrEnum(CustomStrEnum): + one = 1 # this will become '1' + two = '2' + class SecondFailedStrEnum(CustomStrEnum): + one = '1' + two = 2, # this will become '2' + three = '3' + class ThirdFailedStrEnum(CustomStrEnum): + one = '1' + two = 2 # this will become '2' + with self.assertRaisesRegex(TypeError, '.encoding. must be str, not '): + class ThirdFailedStrEnum(CustomStrEnum): + one = '1' + two = b'2', sys.getdefaultencoding + with self.assertRaisesRegex(TypeError, '.errors. must be str, not '): + class ThirdFailedStrEnum(CustomStrEnum): + one = '1' + two = b'2', 'ascii', 9 + + @unittest.skipIf( + python_version < (3, 12), + 'mixin-format currently uses member.value', + ) + def test_custom_strenum(self): + class CustomStrEnum(str, Enum): + pass + class OkayEnum(CustomStrEnum): + one = '1' + two = '2' + three = b'3', 'ascii' + four = b'4', 'latin1', 'strict' + self.assertEqual(OkayEnum.one, '1') + self.assertEqual(str(OkayEnum.one), 'one') + self.assertEqual('{}'.format(OkayEnum.one), 'one') + self.assertEqual(repr(OkayEnum.one), 'OkayEnum.one') + # + class DumbMixin: + def __str__(self): + return "don't do this" + class DumbStrEnum(DumbMixin, CustomStrEnum): + five = '5' + six = '6' + seven = '7' + self.assertEqual(DumbStrEnum.seven, '7') + self.assertEqual(str(DumbStrEnum.seven), "don't do this") + # + class EnumMixin(Enum): + def hello(self): + print('hello from %s' % (self, )) + class HelloEnum(EnumMixin, CustomStrEnum): + eight = '8' + self.assertEqual(HelloEnum.eight, '8') + self.assertEqual(str(HelloEnum.eight), 'eight') + # + class GoodbyeMixin: + def goodbye(self): + print('%s wishes you a fond farewell') + class GoodbyeEnum(GoodbyeMixin, EnumMixin, CustomStrEnum): + nine = '9' + self.assertEqual(GoodbyeEnum.nine, '9') + self.assertEqual(str(GoodbyeEnum.nine), 'nine') + # + class FirstFailedStrEnum(CustomStrEnum): + one = 1 # this will become '1' + two = '2' + class SecondFailedStrEnum(CustomStrEnum): + one = '1' + two = 2, # this will become '2' + three = '3' + class ThirdFailedStrEnum(CustomStrEnum): + one = '1' + two = 2 # this will become '2' + with self.assertRaisesRegex(TypeError, '.encoding. must be str, not '): + class ThirdFailedStrEnum(CustomStrEnum): + one = '1' + two = b'2', sys.getdefaultencoding + with self.assertRaisesRegex(TypeError, '.errors. must be str, not '): + class ThirdFailedStrEnum(CustomStrEnum): + one = '1' + two = b'2', 'ascii', 9 + def test_missing_value_error(self): with self.assertRaisesRegex(TypeError, "_value_ not set in __new__"): class Combined(str, Enum): @@ -3080,15 +3224,19 @@ def test_repr(self): self.assertEqual(repr(~(Open.WO | Open.CE)), 'Open.RW') self.assertEqual(repr(Open(~4)), '-5') - @unittest.skipUnless( - python_version < (3, 12), - 'mixin-format now uses member instead of member.value', - ) def test_format(self): - with self.assertWarns(DeprecationWarning): - Perm = self.Perm - self.assertEqual(format(Perm.R, ''), '4') - self.assertEqual(format(Perm.R | Perm.X, ''), '5') + Perm = self.Perm + self.assertEqual(format(Perm.R, ''), '4') + self.assertEqual(format(Perm.R | Perm.X, ''), '5') + # + class NewPerm(IntFlag): + R = 1 << 2 + W = 1 << 1 + X = 1 << 0 + def __str__(self): + return self._name_ + self.assertEqual(format(NewPerm.R, ''), 'R') + self.assertEqual(format(NewPerm.R | Perm.X, ''), 'R|X') def test_or(self): Perm = self.Perm @@ -3979,10 +4127,6 @@ def test_convert_raise(self): ('test.test_enum', '__main__')[__name__=='__main__'], filter=lambda x: x.startswith('CONVERT_TEST_')) - @unittest.skipUnless( - python_version < (3, 12), - 'mixin-format now uses member instead of member.value', - ) def test_convert_repr_and_str(self): module = ('test.test_enum', '__main__')[__name__=='__main__'] test_type = enum.IntEnum._convert_( @@ -3991,8 +4135,7 @@ def test_convert_repr_and_str(self): filter=lambda x: x.startswith('CONVERT_STRING_TEST_')) self.assertEqual(repr(test_type.CONVERT_STRING_TEST_NAME_A), '%s.CONVERT_STRING_TEST_NAME_A' % module) self.assertEqual(str(test_type.CONVERT_STRING_TEST_NAME_A), 'CONVERT_STRING_TEST_NAME_A') - with self.assertWarns(DeprecationWarning): - self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5') + self.assertEqual(format(test_type.CONVERT_STRING_TEST_NAME_A), '5') # global names for StrEnum._convert_ test CONVERT_STR_TEST_2 = 'goodbye' diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py index cb0a3aa9e40451..aeea020d2416d2 100644 --- a/Lib/test/test_httpservers.py +++ b/Lib/test/test_httpservers.py @@ -259,7 +259,7 @@ def test_send_error(self): for code in (HTTPStatus.NO_CONTENT, HTTPStatus.NOT_MODIFIED, HTTPStatus.PROCESSING, HTTPStatus.RESET_CONTENT, HTTPStatus.SWITCHING_PROTOCOLS): - self.con.request('SEND_ERROR', '/{:d}'.format(code)) + self.con.request('SEND_ERROR', '/{}'.format(code)) res = self.con.getresponse() self.assertEqual(code, res.status) self.assertEqual(None, res.getheader('Content-Length')) @@ -276,7 +276,7 @@ def test_head_via_send_error(self): for code in (HTTPStatus.OK, HTTPStatus.NO_CONTENT, HTTPStatus.NOT_MODIFIED, HTTPStatus.RESET_CONTENT, HTTPStatus.SWITCHING_PROTOCOLS): - self.con.request('HEAD', '/{:d}'.format(code)) + self.con.request('HEAD', '/{}'.format(code)) res = self.con.getresponse() self.assertEqual(code, res.status) if code == HTTPStatus.OK: From d4b87bc4d477430004db96196f837cd624977490 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Fri, 18 Jun 2021 23:08:38 +0100 Subject: [PATCH 47/64] Add a note about NameError/AttributeError suggestions with custom error functions (GH-26794) --- Doc/whatsnew/3.10.rst | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst index 9b9dd31a3beabf..c45925756ffa86 100644 --- a/Doc/whatsnew/3.10.rst +++ b/Doc/whatsnew/3.10.rst @@ -345,6 +345,11 @@ raised from: (Contributed by Pablo Galindo in :issue:`38530`.) + .. warning:: + Notice this won't work if :c:func:`PyErr_Display` is not called to display the error + which can happen if some other custom error display function is used. This is a common + scenario in some REPLs like IPython. + NameErrors ~~~~~~~~~~ @@ -362,6 +367,12 @@ was raised from: (Contributed by Pablo Galindo in :issue:`38530`.) + .. warning:: + Notice this won't work if :c:func:`PyErr_Display` is not called to display the error, + which can happen if some other custom error display function is used. This is a common + scenario in some REPLs like IPython. + + PEP 626: Precise line numbers for debugging and other tools ----------------------------------------------------------- From 32fd669559fefe1034a86cd85f29cc5b5ec90108 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Fri, 18 Jun 2021 19:19:32 -0500 Subject: [PATCH 48/64] Remove dubious suggestion (GH-26789) Remove the weakref example. If a new instance is created and the same arguments are passes, it raises a ReferenceError. --- Doc/faq/programming.rst | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/Doc/faq/programming.rst b/Doc/faq/programming.rst index a519275040491d..af4b489fc8a483 100644 --- a/Doc/faq/programming.rst +++ b/Doc/faq/programming.rst @@ -1852,14 +1852,6 @@ bounded by the specified *maxsize*. The disadvantage is that instances are kept alive until they age out of the cache or until the cache is cleared. -To avoid keeping an instance alive, it can be wrapped a weak reference -proxy. That allows an instance to be freed prior aging out of the LRU -cache. That said, the weak reference technique is rarely needed. It is -only helpful when the instances hold large amounts of data and the -normal aging-out process isn't fast enough. And even though the -instance is released early, the cache still keeps references to the -other method arguments and to the result of the method call. - This example shows the various techniques:: class Weather: @@ -1884,16 +1876,6 @@ This example shows the various techniques:: "Rainfall on a given date" # Depends on the station_id, date, and units. - def climate(self, category='average_temperature'): - "List of daily average temperatures for a full year" - return self._climate(weakref.proxy(self), category) - - @staticmethod - @lru_cache(maxsize=10) - def _climate(self_proxy, category): - # Depends on a weak reference to the instance - # and on the category parameter. - The above example assumes that the *station_id* never changes. If the relevant instance attributes are mutable, the *cached_property* approach can't be made to work because it cannot detect changes to the From df719d44f772895d30a66e1065dab236a452e391 Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Sat, 19 Jun 2021 11:08:41 +0200 Subject: [PATCH 49/64] bpo-38820: Test with OpenSSL 3.0.0-beta1 (GH-26769) Signed-off-by: Christian Heimes --- .github/workflows/build.yml | 2 +- Tools/ssl/multissltests.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00506bdf1af392..1140c86dfa665d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -179,7 +179,7 @@ jobs: strategy: fail-fast: false matrix: - openssl_ver: [1.1.1k, 3.0.0-alpha17] + openssl_ver: [1.1.1k, 3.0.0-beta1] env: OPENSSL_VER: ${{ matrix.openssl_ver }} MULTISSL_DIR: ${{ github.workspace }}/multissl diff --git a/Tools/ssl/multissltests.py b/Tools/ssl/multissltests.py index ec7c0661f7595f..25ce2faffacfc3 100755 --- a/Tools/ssl/multissltests.py +++ b/Tools/ssl/multissltests.py @@ -48,7 +48,7 @@ OPENSSL_RECENT_VERSIONS = [ "1.1.1k", - "3.0.0-alpha17" + "3.0.0-beta1" ] LIBRESSL_OLD_VERSIONS = [ From 0cf3409c1cc6ac576267bd8cce85b781efc82b16 Mon Sep 17 00:00:00 2001 From: Steve Dower Date: Sat, 19 Jun 2021 13:45:16 +0100 Subject: [PATCH 50/64] bpo-43298: Improved error message when building without the Windows SDK installed (GH-26800) --- .../2021-06-19-11-50-03.bpo-43298.9ircMb.rst | 1 + PCbuild/python.props | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 Misc/NEWS.d/next/Build/2021-06-19-11-50-03.bpo-43298.9ircMb.rst diff --git a/Misc/NEWS.d/next/Build/2021-06-19-11-50-03.bpo-43298.9ircMb.rst b/Misc/NEWS.d/next/Build/2021-06-19-11-50-03.bpo-43298.9ircMb.rst new file mode 100644 index 00000000000000..3bdc24b147a3ef --- /dev/null +++ b/Misc/NEWS.d/next/Build/2021-06-19-11-50-03.bpo-43298.9ircMb.rst @@ -0,0 +1 @@ +Improved error message when building without a Windows SDK installed. diff --git a/PCbuild/python.props b/PCbuild/python.props index 419d5ebe84c2d1..4a56d50b8b7655 100644 --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -108,9 +108,18 @@ 10.0.10586.0 - $(_RegistryVersion) + $(_RegistryVersion) - + + + + <_Message>Failed to locate a Windows SDK installation. + <_Message>$(_Message) If the build fails, please use the Visual Studio Installer to install the Windows SDK. + <_Message>$(_Message) (Ignore the version number specified in the error message and select the latest.) + + + + $(DefaultWindowsSDKVersion) @@ -175,7 +184,7 @@ 11 12 - + $(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber) $(MajorVersionNumber).$(MinorVersionNumber).$(MicroVersionNumber)$(ReleaseLevelName) From 07f631d0caecca6e8621e0686d7f20bcfb48319e Mon Sep 17 00:00:00 2001 From: Mark Dickinson Date: Sat, 19 Jun 2021 15:32:24 +0100 Subject: [PATCH 51/64] bpo-44426: Fix use of the C keyword 'default' as a variable name (GH-26798) --- Doc/c-api/object.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst index 42e3340acb79a0..70cff69dc16c14 100644 --- a/Doc/c-api/object.rst +++ b/Doc/c-api/object.rst @@ -311,12 +311,12 @@ Object Protocol returned. This is the equivalent to the Python expression ``len(o)``. -.. c:function:: Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t default) +.. c:function:: Py_ssize_t PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue) Return an estimated length for the object *o*. First try to return its actual length, then an estimate using :meth:`~object.__length_hint__`, and finally return the default value. On error return ``-1``. This is the - equivalent to the Python expression ``operator.length_hint(o, default)``. + equivalent to the Python expression ``operator.length_hint(o, defaultvalue)``. .. versionadded:: 3.4 From d03578329f6d7131be1baaeac54a0d4fa613e31f Mon Sep 17 00:00:00 2001 From: jdevries3133 <58614260+jdevries3133@users.noreply.github.com> Date: Sat, 19 Jun 2021 21:56:53 -0400 Subject: [PATCH 52/64] commit suggested change from @terryjreedy Co-authored-by: Terry Jan Reedy --- Doc/library/shutil.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 234321809897f6..3db2578b253cac 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -230,7 +230,7 @@ Directory and files operations dirs_exist_ok=False) Recursively copy an entire directory tree rooted at *src* to a directory - named *dst* and return the destination directory. + named *dst* and return the destination directory. Make all intermediate directories needed to contain *dst*. Permissions and times of directories are copied with :func:`copystat`, individual files are copied using :func:`~shutil.copy2`. From a1f767cfc50e5a62aa82a3b7e6b88f8d69b3c9cb Mon Sep 17 00:00:00 2001 From: jdevries3133 <58614260+jdevries3133@users.noreply.github.com> Date: Sat, 19 Jun 2021 21:57:07 -0400 Subject: [PATCH 53/64] commit suggested change from @terryjreedy Co-authored-by: Terry Jan Reedy --- Doc/library/shutil.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 3db2578b253cac..25d31cd4f8427a 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -265,9 +265,7 @@ Directory and files operations that supports the same signature (like :func:`~shutil.copy`) can be used. If *dirs_exist_ok* is false (the default) and *dst* already exists, a - :exc:`FileExistsError` is raised. If *dirs_exist_ok* is true, *dst* as well - as any parent directory in the path to *dst* will be created if they do - not exist already. + :exc:`FileExistsError` is raised. .. audit-event:: shutil.copytree src,dst shutil.copytree From 7151b4601be65ba9f0512aedab4e41c9f75a6f84 Mon Sep 17 00:00:00 2001 From: jdevries3133 <58614260+jdevries3133@users.noreply.github.com> Date: Sat, 19 Jun 2021 21:57:15 -0400 Subject: [PATCH 54/64] commit suggested change from @terryjreedy Co-authored-by: Terry Jan Reedy --- Lib/shutil.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Lib/shutil.py b/Lib/shutil.py index ebc8a07cca741a..d910ef51d80f9d 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -509,6 +509,7 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False): """Recursively copy a directory tree and return the destination directory. + Make all intermediate directories needed to contain *dst*. If exception(s) occur, an Error is raised with a list of reasons. If the optional symlinks flag is true, symbolic links in the From a0a46be8ae76f4e671e69c7a984af5bb9c572d5e Mon Sep 17 00:00:00 2001 From: jdevries3133 <58614260+jdevries3133@users.noreply.github.com> Date: Sat, 19 Jun 2021 21:57:23 -0400 Subject: [PATCH 55/64] commit suggested change from @terryjreedy Co-authored-by: Terry Jan Reedy --- Lib/shutil.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Lib/shutil.py b/Lib/shutil.py index d910ef51d80f9d..33da9003e80f80 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -541,9 +541,7 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, function that supports the same signature (like copy()) can be used. If dirs_exist_ok is false (the default) and dst already exists, a - FileExistsError is raised. If dirs_exist_ok is true, dst as well as any - parent directory in the path to dst will be created if they do not exist - already. + FileExistsError is raised. """ sys.audit("shutil.copytree", src, dst) with os.scandir(src) as itr: From e02e998731fa62462325aad803b6dfa8f7b7e34f Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Sat, 19 Jun 2021 19:31:18 +0200 Subject: [PATCH 56/64] bpo-38291: DeprecationWarning when importing typing.{io,re} (#26719) --- Lib/importlib/resources.py | 3 +- Lib/test/test_typing.py | 29 +++++++++++-------- Lib/typing.py | 18 ++++++++++-- .../2021-06-14-14-19-11.bpo-38291.ee4cSX.rst | 1 + 4 files changed, 35 insertions(+), 16 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-06-14-14-19-11.bpo-38291.ee4cSX.rst diff --git a/Lib/importlib/resources.py b/Lib/importlib/resources.py index 8a98663ff8e6d5..bb5c354d9f00ab 100644 --- a/Lib/importlib/resources.py +++ b/Lib/importlib/resources.py @@ -11,8 +11,7 @@ from pathlib import Path from types import ModuleType from typing import ContextManager, Iterable, Union -from typing import cast -from typing.io import BinaryIO, TextIO +from typing import cast, BinaryIO, TextIO from collections.abc import Sequence from functools import singledispatch diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py index 79c5c3a9104075..06df3e23264cb2 100644 --- a/Lib/test/test_typing.py +++ b/Lib/test/test_typing.py @@ -3,6 +3,7 @@ import pickle import re import sys +import warnings from unittest import TestCase, main, skipUnless, skip from copy import copy, deepcopy @@ -1976,7 +1977,7 @@ def test_weakref_all(self): T = TypeVar('T') things = [Any, Union[T, int], Callable[..., T], Tuple[Any, Any], Optional[List[int]], typing.Mapping[int, str], - typing.re.Match[bytes], typing.Iterable['whatever']] + typing.Match[bytes], typing.Iterable['whatever']] for t in things: self.assertEqual(weakref.ref(t)(), t) @@ -3996,12 +3997,14 @@ def stuff(a: BinaryIO) -> bytes: self.assertEqual(a.__parameters__, ()) def test_io_submodule(self): - from typing.io import IO, TextIO, BinaryIO, __all__, __name__ - self.assertIs(IO, typing.IO) - self.assertIs(TextIO, typing.TextIO) - self.assertIs(BinaryIO, typing.BinaryIO) - self.assertEqual(set(__all__), set(['IO', 'TextIO', 'BinaryIO'])) - self.assertEqual(__name__, 'typing.io') + with warnings.catch_warnings(record=True) as w: + from typing.io import IO, TextIO, BinaryIO, __all__, __name__ + self.assertIs(IO, typing.IO) + self.assertIs(TextIO, typing.TextIO) + self.assertIs(BinaryIO, typing.BinaryIO) + self.assertEqual(set(__all__), set(['IO', 'TextIO', 'BinaryIO'])) + self.assertEqual(__name__, 'typing.io') + self.assertEqual(len(w), 1) class RETests(BaseTestCase): @@ -4048,11 +4051,13 @@ def test_repr(self): self.assertEqual(repr(Match[bytes]), 'typing.Match[bytes]') def test_re_submodule(self): - from typing.re import Match, Pattern, __all__, __name__ - self.assertIs(Match, typing.Match) - self.assertIs(Pattern, typing.Pattern) - self.assertEqual(set(__all__), set(['Match', 'Pattern'])) - self.assertEqual(__name__, 'typing.re') + with warnings.catch_warnings(record=True) as w: + from typing.re import Match, Pattern, __all__, __name__ + self.assertIs(Match, typing.Match) + self.assertIs(Pattern, typing.Pattern) + self.assertEqual(set(__all__), set(['Match', 'Pattern'])) + self.assertEqual(__name__, 'typing.re') + self.assertEqual(len(w), 1) def test_cannot_subclass(self): with self.assertRaises(TypeError) as ex: diff --git a/Lib/typing.py b/Lib/typing.py index 8fadb571f41dc2..00a0df591cbfcc 100644 --- a/Lib/typing.py +++ b/Lib/typing.py @@ -28,6 +28,7 @@ import re as stdlib_re # Avoid confusion with the re we export. import sys import types +import warnings from types import WrapperDescriptorType, MethodWrapperType, MethodDescriptorType, GenericAlias # Please keep __all__ alphabetized within each category. @@ -2512,7 +2513,20 @@ def __enter__(self) -> 'TextIO': pass -class io: +class _DeprecatedType(type): + def __getattribute__(cls, name): + if name != "__dict__" and name in cls.__dict__: + warnings.warn( + f"{cls.__name__} is deprecated, import directly " + f"from typing instead. {cls.__name__} will be removed " + "in Python 3.12.", + DeprecationWarning, + stacklevel=2, + ) + return super().__getattribute__(name) + + +class io(metaclass=_DeprecatedType): """Wrapper namespace for IO generic classes.""" __all__ = ['IO', 'TextIO', 'BinaryIO'] @@ -2527,7 +2541,7 @@ class io: Pattern = _alias(stdlib_re.Pattern, 1) Match = _alias(stdlib_re.Match, 1) -class re: +class re(metaclass=_DeprecatedType): """Wrapper namespace for re type aliases.""" __all__ = ['Pattern', 'Match'] diff --git a/Misc/NEWS.d/next/Library/2021-06-14-14-19-11.bpo-38291.ee4cSX.rst b/Misc/NEWS.d/next/Library/2021-06-14-14-19-11.bpo-38291.ee4cSX.rst new file mode 100644 index 00000000000000..7fb891dd4bc0c9 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-14-14-19-11.bpo-38291.ee4cSX.rst @@ -0,0 +1 @@ +Importing typing.io or typing.re now prints a `DeprecationWarning`. From 82ae9d6f11282ccbb8897062cac6ab93e72acd97 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Sat, 19 Jun 2021 22:02:51 -0400 Subject: [PATCH 57/64] bpo-44347: fix spelling --- Doc/library/shutil.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 25d31cd4f8427a..277d7855d4a717 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -276,7 +276,7 @@ Directory and files operations .. versionchanged:: 3.2 Added the *copy_function* argument to be able to provide a custom copy function. - Added the *ignore_dangling_symlinks* argument to silent dangling symlinks + Added the *ignore_dangling_symlinks* argument to silence dangling symlinks errors when *symlinks* is false. .. versionchanged:: 3.8 From b2d7cc054a5c55f9401526996c1534bc24c409d3 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Mon, 21 Jun 2021 12:21:07 -0400 Subject: [PATCH 58/64] bpo-44347: add note to further clarify edge case --- Doc/library/shutil.rst | 37 +++++++++++++++++-- .../2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst | 4 +- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 277d7855d4a717..6f2b8bb5e082dc 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -230,7 +230,8 @@ Directory and files operations dirs_exist_ok=False) Recursively copy an entire directory tree rooted at *src* to a directory - named *dst* and return the destination directory. Make all intermediate directories needed to contain *dst*. + named *dst* and return the destination directory. All intermediate + directories needed to contain *dst* will also be created. Permissions and times of directories are copied with :func:`copystat`, individual files are copied using :func:`~shutil.copy2`. @@ -264,8 +265,38 @@ Directory and files operations as arguments. By default, :func:`~shutil.copy2` is used, but any function that supports the same signature (like :func:`~shutil.copy`) can be used. - If *dirs_exist_ok* is false (the default) and *dst* already exists, a - :exc:`FileExistsError` is raised. + If *dirs_exist_ok* is true, existing directories along the path to *dst* + will be overwritten. If *dirs_exist_ok* is false (the default) and *dst* + already exists, a :exc:`FileExistsError` is raised. + + .. note:: + + *dirs_exist_ok* specifically refers to whether *already existing* + directories should be overwritten. However, the copytree function will + always create paths if they do not exist. For example, consider the + following file tree:: + + root + |-- source + | |-- foo.txt + | |-- bar + | |-- baz.txt + | |-- buzz.py + | + |-- neighbor + |-- cat.png + + Calling :func:`shutil.copytree` like this:: + + shutil.copytree('source', 'these/all/do/not/exist/yet') + + Will create all those intermediary folders, even if *dirs_exist_ok* is + false. + + However, this would cause a :exc:`FileExistsError`, because it represents + an attempt to overwrite ``neighbor/cat.png``:: + + shutil.copytree('source', 'neighbor') .. audit-event:: shutil.copytree src,dst shutil.copytree diff --git a/Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst b/Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst index f155c8f16a101b..c024fcb34e3439 100644 --- a/Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst +++ b/Misc/NEWS.d/next/Documentation/2020-06-10-16-55-55.bpo-44347.Fjvuw7.rst @@ -1,2 +1,2 @@ -Clarify the meaning of *dirs_exist_ok*, a kwarg passed to the shutil.copytree -function. +Clarify the meaning of *dirs_exist_ok*, a kwarg passed to the +:func:`shutil.copytree` function. From a07b32440c6a1ffcdf0326c8fdba9e65cbbe9ad0 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Mon, 21 Jun 2021 12:26:47 -0400 Subject: [PATCH 59/64] bpo-44347: (small fix) remove redundant line from example --- Doc/library/shutil.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 6f2b8bb5e082dc..648dd1372ea1a0 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -276,7 +276,6 @@ Directory and files operations always create paths if they do not exist. For example, consider the following file tree:: - root |-- source | |-- foo.txt | |-- bar From 48f30eed942a5db06430e82c2d17eec4b58fb546 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Mon, 21 Jun 2021 13:13:17 -0400 Subject: [PATCH 60/64] bpo-44347: highlight relationship to os.makedirs --- Doc/library/shutil.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 648dd1372ea1a0..565032f994367f 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -267,7 +267,8 @@ Directory and files operations If *dirs_exist_ok* is true, existing directories along the path to *dst* will be overwritten. If *dirs_exist_ok* is false (the default) and *dst* - already exists, a :exc:`FileExistsError` is raised. + already exists, a :exc:`FileExistsError` is raised. Internally, this + parameter is passed directly to :func:`os.makedirs`. .. note:: From 5b8366ae97bb048515950c75a38e4515c60525d6 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Thu, 1 Jul 2021 11:29:41 -0400 Subject: [PATCH 61/64] small rewording fix --- Doc/library/shutil.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 565032f994367f..cfc43050791df3 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -293,8 +293,8 @@ Directory and files operations Will create all those intermediary folders, even if *dirs_exist_ok* is false. - However, this would cause a :exc:`FileExistsError`, because it represents - an attempt to overwrite ``neighbor/cat.png``:: + However, the following will cause a :exc:`FileExistsError`, because it + represents an attempt to overwrite ``neighbor/cat.png``:: shutil.copytree('source', 'neighbor') From 8303dc5e25209cc1e35a283b0b2b3fa522339983 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Fri, 8 Apr 2022 17:56:53 -0400 Subject: [PATCH 62/64] revise old changes * remove the note which is excessive * remove all changes to `Lib/shutil.py`, pending approval of the new docs, I'll re-add revisions to shutil.copytree's docstring. * revise first paragraph --- Doc/library/shutil.rst | 43 +++++++++--------------------------------- Lib/shutil.py | 4 ---- 2 files changed, 9 insertions(+), 38 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 79e6ac287ef54d..339aebc4d1cd6d 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -230,8 +230,9 @@ Directory and files operations dirs_exist_ok=False) Recursively copy an entire directory tree rooted at *src* to a directory - named *dst* and return the destination directory. All intermediate - directories needed to contain *dst* will also be created. + named *dst* and return the destination directory. All intermediate + directories needed to contain *dst* will also be created by default (see + kwarg *dirs_exist_ok*). Permissions and times of directories are copied with :func:`copystat`, individual files are copied using :func:`~shutil.copy2`. @@ -265,38 +266,12 @@ Directory and files operations as arguments. By default, :func:`~shutil.copy2` is used, but any function that supports the same signature (like :func:`~shutil.copy`) can be used. - If *dirs_exist_ok* is true, existing directories along the path to *dst* - will be overwritten. If *dirs_exist_ok* is false (the default) and *dst* - already exists, a :exc:`FileExistsError` is raised. Internally, this - parameter is passed directly to :func:`os.makedirs`. - - .. note:: - - *dirs_exist_ok* specifically refers to whether *already existing* - directories should be overwritten. However, the copytree function will - always create paths if they do not exist. For example, consider the - following file tree:: - - |-- source - | |-- foo.txt - | |-- bar - | |-- baz.txt - | |-- buzz.py - | - |-- neighbor - |-- cat.png - - Calling :func:`shutil.copytree` like this:: - - shutil.copytree('source', 'these/all/do/not/exist/yet') - - Will create all those intermediary folders, even if *dirs_exist_ok* is - false. - - However, the following will cause a :exc:`FileExistsError`, because it - represents an attempt to overwrite ``neighbor/cat.png``:: - - shutil.copytree('source', 'neighbor') + If *dirs_exist_ok* is false (the default) and *dst* already exists, a + :exc:`FileExistsError` is raised. If *dirs_exist_ok* is true, the copying + operation will continue if it encounters existing directories, and files + within the *dst* tree will be overwritten by corresponding files from the + *src* tree. Internally, this parameter is passed directly to + :func:`os.makedirs`. .. audit-event:: shutil.copytree src,dst shutil.copytree diff --git a/Lib/shutil.py b/Lib/shutil.py index d33b18e45d9e96..5c5a4a99b259cc 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -518,7 +518,6 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False): """Recursively copy a directory tree and return the destination directory. - Make all intermediate directories needed to contain *dst*. If exception(s) occur, an Error is raised with a list of reasons. If the optional symlinks flag is true, symbolic links in the @@ -548,9 +547,6 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, to copy each file. It will be called with the source path and the destination path as arguments. By default, copy2() is used, but any function that supports the same signature (like copy()) can be used. - - If dirs_exist_ok is false (the default) and dst already exists, a - FileExistsError is raised. """ sys.audit("shutil.copytree", src, dst) with os.scandir(src) as itr: From c169b1d3d2d67e9be37a95b3843896b0bd3070d9 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Sat, 9 Apr 2022 19:14:26 -0400 Subject: [PATCH 63/64] apply @JelleZijlstra's feedback --- Doc/library/shutil.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Doc/library/shutil.rst b/Doc/library/shutil.rst index 339aebc4d1cd6d..75ffb79d535c81 100644 --- a/Doc/library/shutil.rst +++ b/Doc/library/shutil.rst @@ -231,8 +231,7 @@ Directory and files operations Recursively copy an entire directory tree rooted at *src* to a directory named *dst* and return the destination directory. All intermediate - directories needed to contain *dst* will also be created by default (see - kwarg *dirs_exist_ok*). + directories needed to contain *dst* will also be created by default. Permissions and times of directories are copied with :func:`copystat`, individual files are copied using :func:`~shutil.copy2`. @@ -270,8 +269,7 @@ Directory and files operations :exc:`FileExistsError` is raised. If *dirs_exist_ok* is true, the copying operation will continue if it encounters existing directories, and files within the *dst* tree will be overwritten by corresponding files from the - *src* tree. Internally, this parameter is passed directly to - :func:`os.makedirs`. + *src* tree. .. audit-event:: shutil.copytree src,dst shutil.copytree From ac3f837dd38be9534c20befb46d8ed1ac7dcf4f5 Mon Sep 17 00:00:00 2001 From: Jack DeVries Date: Sun, 10 Apr 2022 11:30:33 -0400 Subject: [PATCH 64/64] update docstring --- Lib/shutil.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Lib/shutil.py b/Lib/shutil.py index 5c5a4a99b259cc..de82453aa56e1a 100644 --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -547,6 +547,12 @@ def copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, to copy each file. It will be called with the source path and the destination path as arguments. By default, copy2() is used, but any function that supports the same signature (like copy()) can be used. + + If dirs_exist_ok is false (the default) and `dst` already exists, a + `FileExistsError` is raised. If `dirs_exist_ok` is true, the copying + operation will continue if it encounters existing directories, and files + within the `dst` tree will be overwritten by corresponding files from the + `src` tree. """ sys.audit("shutil.copytree", src, dst) with os.scandir(src) as itr: