From solipsis at pitrou.net Fri Jul 1 04:55:20 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Fri, 01 Jul 2016 08:55:20 +0000 Subject: [Python-checkins] Daily reference leaks (8d7bde14d7a4): sum=9 Message-ID: <20160701085520.31827.53953.20FEE27D@psf.io> results for 8d7bde14d7a4 on branch "default" -------------------------------------------- test_asyncio leaked [0, 3, 0] memory blocks, sum=3 test_collections leaked [0, 4, -4] memory blocks, sum=0 test_functools leaked [0, 3, 1] memory blocks, sum=4 test_typing leaked [2, 0, 0] references, sum=2 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogZrcQS3', '--timeout', '7200'] From python-checkins at python.org Fri Jul 1 05:10:24 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 01 Jul 2016 09:10:24 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Fix_typo_in_whatsnew/3=2E6?= =?utf-8?q?=2Erst?= Message-ID: <20160701091020.411.56546.D2325929@psf.io> https://hg.python.org/cpython/rev/83b1f672cd6e changeset: 102237:83b1f672cd6e user: Berker Peksag date: Fri Jul 01 12:12:19 2016 +0300 summary: Fix typo in whatsnew/3.6.rst files: Doc/whatsnew/3.6.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -560,7 +560,7 @@ * :c:func:`PyArg_ParseTupleAndKeywords` now supports :ref:`positional-only parameters `. Positional-only parameters are defined by empty names. - (Contributed by Serhit Storchaka in :issue:`26282`). + (Contributed by Serhiy Storchaka in :issue:`26282`). Deprecated -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 1 05:15:48 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 01 Jul 2016 09:15:48 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDMw?= =?utf-8?q?=3A_Fix_typos=2C_patch_by_scop=2E?= Message-ID: <20160701091547.31583.59993.F862ABC7@psf.io> https://hg.python.org/cpython/rev/ab6129af2a5c changeset: 102238:ab6129af2a5c branch: 3.5 parent: 102235:4fc0154ec84a user: Berker Peksag date: Fri Jul 01 12:17:05 2016 +0300 summary: Issue #27430: Fix typos, patch by scop. files: Doc/whatsnew/3.2.rst | 2 +- Lib/smtplib.py | 2 +- Lib/unittest/test/test_case.py | 2 +- Misc/NEWS | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst --- a/Doc/whatsnew/3.2.rst +++ b/Doc/whatsnew/3.2.rst @@ -2666,7 +2666,7 @@ * The :class:`xml.etree.ElementTree` class now raises an :exc:`xml.etree.ElementTree.ParseError` when a parse fails. Previously it - raised a :exc:`xml.parsers.expat.ExpatError`. + raised an :exc:`xml.parsers.expat.ExpatError`. * The new, longer :func:`str` value on floats may break doctests which rely on the old output format. diff --git a/Lib/smtplib.py b/Lib/smtplib.py --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -900,7 +900,7 @@ the recipient addresses contain non-ASCII and the server advertises the SMTPUTF8 capability, the policy is cloned with utf8 set to True for the serialization, and SMTPUTF8 and BODY=8BITMIME are asserted on the send. - If the server does not support SMTPUTF8, an SMPTNotSupported error is + If the server does not support SMTPUTF8, an SMTPNotSupported error is raised. Otherwise the generator is called without modifying the policy. diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -339,7 +339,7 @@ self._check_call_order__subtests(result, events, expected) def test_run_call_order__subtests_legacy(self): - # With a legacy result object (without a addSubTest method), + # With a legacy result object (without an addSubTest method), # text execution stops after the first subtest failure. events = [] result = LegacyLoggingResult(events) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -240,7 +240,7 @@ - Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. -- Fix TLS stripping vulnerability in smptlib, CVE-2016-0772. Reported by Team +- Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team Oststrom - Issue #21386: Implement missing IPv4Address.is_global property. It was -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 1 05:15:50 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 01 Jul 2016 09:15:50 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327430=3A_Merge_from_3=2E5?= Message-ID: <20160701091547.10816.96158.CD9D4CB9@psf.io> https://hg.python.org/cpython/rev/97b22fe37af1 changeset: 102239:97b22fe37af1 parent: 102237:83b1f672cd6e parent: 102238:ab6129af2a5c user: Berker Peksag date: Fri Jul 01 12:17:45 2016 +0300 summary: Issue #27430: Merge from 3.5 files: Doc/whatsnew/3.2.rst | 2 +- Lib/smtplib.py | 2 +- Lib/unittest/test/test_case.py | 2 +- Misc/NEWS | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst --- a/Doc/whatsnew/3.2.rst +++ b/Doc/whatsnew/3.2.rst @@ -2666,7 +2666,7 @@ * The :class:`xml.etree.ElementTree` class now raises an :exc:`xml.etree.ElementTree.ParseError` when a parse fails. Previously it - raised a :exc:`xml.parsers.expat.ExpatError`. + raised an :exc:`xml.parsers.expat.ExpatError`. * The new, longer :func:`str` value on floats may break doctests which rely on the old output format. diff --git a/Lib/smtplib.py b/Lib/smtplib.py --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -900,7 +900,7 @@ the recipient addresses contain non-ASCII and the server advertises the SMTPUTF8 capability, the policy is cloned with utf8 set to True for the serialization, and SMTPUTF8 and BODY=8BITMIME are asserted on the send. - If the server does not support SMTPUTF8, an SMPTNotSupported error is + If the server does not support SMTPUTF8, an SMTPNotSupported error is raised. Otherwise the generator is called without modifying the policy. diff --git a/Lib/unittest/test/test_case.py b/Lib/unittest/test/test_case.py --- a/Lib/unittest/test/test_case.py +++ b/Lib/unittest/test/test_case.py @@ -339,7 +339,7 @@ self._check_call_order__subtests(result, events, expected) def test_run_call_order__subtests_legacy(self): - # With a legacy result object (without a addSubTest method), + # With a legacy result object (without an addSubTest method), # text execution stops after the first subtest failure. events = [] result = LegacyLoggingResult(events) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -193,7 +193,7 @@ - Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. -- Fix TLS stripping vulnerability in smptlib, CVE-2016-0772. Reported by Team +- Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team Oststrom - Issue #21386: Implement missing IPv4Address.is_global property. It was -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 1 05:31:27 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 01 Jul 2016 09:31:27 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDMx?= =?utf-8?q?=3A_Update_default_protocol_version_in_shelve=2EShelf=28=29_doc?= =?utf-8?q?umentation?= Message-ID: <20160701093127.41583.14285.5028C167@psf.io> https://hg.python.org/cpython/rev/b2c3837f7833 changeset: 102240:b2c3837f7833 branch: 3.5 parent: 102238:ab6129af2a5c user: Berker Peksag date: Fri Jul 01 12:33:00 2016 +0300 summary: Issue #27431: Update default protocol version in shelve.Shelf() documentation shelve.open() documentation was updated in f351fb7ea179. files: Doc/library/shelve.rst | 2 +- Lib/test/test_shelve.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletions(-) diff --git a/Doc/library/shelve.rst b/Doc/library/shelve.rst --- a/Doc/library/shelve.rst +++ b/Doc/library/shelve.rst @@ -108,7 +108,7 @@ A subclass of :class:`collections.abc.MutableMapping` which stores pickled values in the *dict* object. - By default, version 0 pickles are used to serialize values. The version of the + By default, version 3 pickles are used to serialize values. The version of the pickle protocol can be specified with the *protocol* parameter. See the :mod:`pickle` documentation for a discussion of the pickle protocols. diff --git a/Lib/test/test_shelve.py b/Lib/test/test_shelve.py --- a/Lib/test/test_shelve.py +++ b/Lib/test/test_shelve.py @@ -162,6 +162,10 @@ else: self.fail('Closed shelf should not find a key') + def test_default_protocol(self): + with shelve.Shelf({}) as s: + self.assertEqual(s._protocol, 3) + from test import mapping_tests class TestShelveBase(mapping_tests.BasicTestMappingProtocol): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 1 05:31:27 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 01 Jul 2016 09:31:27 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327431=3A_Merge_from_3=2E5?= Message-ID: <20160701093127.11349.4073.D37B9CF9@psf.io> https://hg.python.org/cpython/rev/908b801f8a62 changeset: 102241:908b801f8a62 parent: 102239:97b22fe37af1 parent: 102240:b2c3837f7833 user: Berker Peksag date: Fri Jul 01 12:33:25 2016 +0300 summary: Issue #27431: Merge from 3.5 files: Doc/library/shelve.rst | 2 +- Lib/test/test_shelve.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletions(-) diff --git a/Doc/library/shelve.rst b/Doc/library/shelve.rst --- a/Doc/library/shelve.rst +++ b/Doc/library/shelve.rst @@ -108,7 +108,7 @@ A subclass of :class:`collections.abc.MutableMapping` which stores pickled values in the *dict* object. - By default, version 0 pickles are used to serialize values. The version of the + By default, version 3 pickles are used to serialize values. The version of the pickle protocol can be specified with the *protocol* parameter. See the :mod:`pickle` documentation for a discussion of the pickle protocols. diff --git a/Lib/test/test_shelve.py b/Lib/test/test_shelve.py --- a/Lib/test/test_shelve.py +++ b/Lib/test/test_shelve.py @@ -162,6 +162,10 @@ else: self.fail('Closed shelf should not find a key') + def test_default_protocol(self): + with shelve.Shelf({}) as s: + self.assertEqual(s._protocol, 3) + from test import mapping_tests class TestShelveBase(mapping_tests.BasicTestMappingProtocol): -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Fri Jul 1 07:50:27 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 1 Jul 2016 12:50:27 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-01 Message-ID: Results for project Python default, build date 2016-07-01 02:02:56 +0000 commit: 8d7bde14d7a4 previous commit: 4ea79767ff75 revision date: 2016-06-30 18:43:19 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.17% 0.18% 11.08% 12.93% :-| pybench 0.10% -0.04% 1.49% 8.08% :-( regex_v8 2.65% 0.10% -2.40% 3.36% :-| nbody 0.09% 0.23% -0.65% 9.96% :-| json_dump_v2 0.26% 0.46% -1.01% 8.75% :-| normal_startup 0.84% -0.14% 1.33% 5.59% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-01/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Fri Jul 1 07:51:03 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 1 Jul 2016 12:51:03 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-01 Message-ID: <532df8c4-bad4-4bcc-9882-ff68aa5afd55@irsmsx104.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-01 02:47:08 +0000 commit: 8f1d3ebdbc56 previous commit: ccec979392d7 revision date: 2016-06-30 10:58:58 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.12% -0.08% 4.61% 5.39% :-) pybench 0.20% -0.08% 5.78% 4.86% :-( regex_v8 0.49% -0.02% -2.43% 10.89% :-) nbody 0.05% 0.04% 8.99% 4.55% :-| json_dump_v2 0.37% -0.79% 1.71% 11.31% :-( normal_startup 1.74% -0.05% -5.78% 1.76% :-) ssbench 0.18% 0.33% 2.33% 1.78% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-01/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Fri Jul 1 10:23:08 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Fri, 01 Jul 2016 14:23:08 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327007=3A_The_from?= =?utf-8?q?hex=28=29_class_methods_of_bytes_and_bytearray_subclasses?= Message-ID: <20160701142307.31626.37820.AD3EAE07@psf.io> https://hg.python.org/cpython/rev/62375fd21de8 changeset: 102242:62375fd21de8 user: Serhiy Storchaka date: Fri Jul 01 17:22:31 2016 +0300 summary: Issue #27007: The fromhex() class methods of bytes and bytearray subclasses now return an instance of corresponding subclass. files: Lib/test/test_bytes.py | 27 +++++++++++++++++- Misc/NEWS | 6 ++++ Objects/bytearrayobject.c | 12 +++++-- Objects/bytesobject.c | 7 ++++- Objects/clinic/bytearrayobject.c.h | 8 ++-- 5 files changed, 50 insertions(+), 10 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1589,7 +1589,32 @@ self.assertEqual(type(a), type(b)) self.assertEqual(type(a.y), type(b.y)) - test_fromhex = BaseBytesTest.test_fromhex + def test_fromhex(self): + b = self.type2test.fromhex('1a2B30') + self.assertEqual(b, b'\x1a\x2b\x30') + self.assertIs(type(b), self.type2test) + + class B1(self.basetype): + def __new__(cls, value): + me = self.basetype.__new__(cls, value) + me.foo = 'bar' + return me + + b = B1.fromhex('1a2B30') + self.assertEqual(b, b'\x1a\x2b\x30') + self.assertIs(type(b), B1) + self.assertEqual(b.foo, 'bar') + + class B2(self.basetype): + def __init__(me, *args, **kwargs): + if self.basetype is not bytes: + self.basetype.__init__(me, *args, **kwargs) + me.foo = 'bar' + + b = B2.fromhex('1a2B30') + self.assertEqual(b, b'\x1a\x2b\x30') + self.assertIs(type(b), B2) + self.assertEqual(b.foo, 'bar') class ByteArraySubclass(bytearray): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -7,6 +7,12 @@ *Release date: XXXX-XX-XX* +Core and Builtins +----------------- + +- Issue #27007: The fromhex() class methods of bytes and bytearray subclasses + now return an instance of corresponding subclass. + Library ------- diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1968,7 +1968,6 @@ @classmethod bytearray.fromhex - cls: self(type="PyObject*") string: unicode / @@ -1979,10 +1978,15 @@ [clinic start generated code]*/ static PyObject * -bytearray_fromhex_impl(PyObject*cls, PyObject *string) -/*[clinic end generated code: output=df3da60129b3700c input=907bbd2d34d9367a]*/ +bytearray_fromhex_impl(PyTypeObject *type, PyObject *string) +/*[clinic end generated code: output=8f0f0b6d30fb3ba0 input=f033a16d1fb21f48]*/ { - return _PyBytes_FromHex(string, 1); + PyObject *result = _PyBytes_FromHex(string, type == &PyByteArray_Type); + if (type != &PyByteArray_Type && result != NULL) { + Py_SETREF(result, PyObject_CallFunctionObjArgs((PyObject *)type, + result, NULL)); + } + return result; } PyDoc_STRVAR(hex__doc__, diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -2303,7 +2303,12 @@ bytes_fromhex_impl(PyTypeObject *type, PyObject *string) /*[clinic end generated code: output=0973acc63661bb2e input=bf4d1c361670acd3]*/ { - return _PyBytes_FromHex(string, 0); + PyObject *result = _PyBytes_FromHex(string, 0); + if (type != &PyBytes_Type && result != NULL) { + Py_SETREF(result, PyObject_CallFunctionObjArgs((PyObject *)type, + result, NULL)); + } + return result; } PyObject* diff --git a/Objects/clinic/bytearrayobject.c.h b/Objects/clinic/bytearrayobject.c.h --- a/Objects/clinic/bytearrayobject.c.h +++ b/Objects/clinic/bytearrayobject.c.h @@ -636,10 +636,10 @@ {"fromhex", (PyCFunction)bytearray_fromhex, METH_O|METH_CLASS, bytearray_fromhex__doc__}, static PyObject * -bytearray_fromhex_impl(PyObject*cls, PyObject *string); +bytearray_fromhex_impl(PyTypeObject *type, PyObject *string); static PyObject * -bytearray_fromhex(PyTypeObject *cls, PyObject *arg) +bytearray_fromhex(PyTypeObject *type, PyObject *arg) { PyObject *return_value = NULL; PyObject *string; @@ -647,7 +647,7 @@ if (!PyArg_Parse(arg, "U:fromhex", &string)) { goto exit; } - return_value = bytearray_fromhex_impl((PyObject*)cls, string); + return_value = bytearray_fromhex_impl(type, string); exit: return return_value; @@ -716,4 +716,4 @@ { return bytearray_sizeof_impl(self); } -/*[clinic end generated code: output=044a6c26a836bcfe input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a32f183ebef159cc input=a9049054013a1b77]*/ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 1 10:57:47 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Fri, 01 Jul 2016 14:57:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2326765=3A_Moved_wr?= =?utf-8?q?appers_for_bytes_and_bytearray_methods_to_common_header?= Message-ID: <20160701145747.25864.67639.6084C06F@psf.io> https://hg.python.org/cpython/rev/b0087e17cd5e changeset: 102243:b0087e17cd5e user: Serhiy Storchaka date: Fri Jul 01 17:57:30 2016 +0300 summary: Issue #26765: Moved wrappers for bytes and bytearray methods to common header file. files: Objects/bytearrayobject.c | 79 ++---------------- Objects/bytesobject.c | 82 ++----------------- Objects/stringlib/transmogrify.h | 54 +++++++++++++ 3 files changed, 77 insertions(+), 138 deletions(-) diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1097,18 +1097,6 @@ #include "stringlib/transmogrify.h" -static PyObject * -bytearray_find(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_find(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_count(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_count(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - /*[clinic input] bytearray.clear @@ -1138,42 +1126,6 @@ PyByteArray_GET_SIZE(self)); } -static PyObject * -bytearray_index(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_index(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_rfind(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_rfind(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_rindex(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_rindex(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static int -bytearray_contains(PyObject *self, PyObject *arg) -{ - return _Py_bytes_contains(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), arg); -} - -static PyObject * -bytearray_startswith(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_startswith(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - -static PyObject * -bytearray_endswith(PyByteArrayObject *self, PyObject *args) -{ - return _Py_bytes_endswith(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); -} - /*[clinic input] bytearray.translate @@ -1329,8 +1281,8 @@ /*[clinic end generated code: output=d39884c4dc59412a input=aa379d988637c7fb]*/ { return stringlib_replace((PyObject *)self, - (const char *)old->buf, old->len, - (const char *)new->buf, new->len, count); + old->buf, old->len, + new->buf, new->len, count); } /*[clinic input] @@ -1996,14 +1948,6 @@ Example: bytearray([0xb9, 0x01, 0xef]).hex() -> 'b901ef'."); static PyObject * -bytearray_hex(PyBytesObject *self) -{ - char* argbuf = PyByteArray_AS_STRING(self); - Py_ssize_t arglen = PyByteArray_GET_SIZE(self); - return _Py_strhex(argbuf, arglen); -} - -static PyObject * _common_reduce(PyByteArrayObject *self, int proto) { PyObject *dict; @@ -2091,7 +2035,7 @@ 0, /* sq_slice */ (ssizeobjargproc)bytearray_setitem, /* sq_ass_item */ 0, /* sq_ass_slice */ - (objobjproc)bytearray_contains, /* sq_contains */ + (objobjproc)stringlib_contains, /* sq_contains */ (binaryfunc)bytearray_iconcat, /* sq_inplace_concat */ (ssizeargfunc)bytearray_irepeat, /* sq_inplace_repeat */ }; @@ -2119,19 +2063,19 @@ {"center", (PyCFunction)stringlib_center, METH_VARARGS, _Py_center__doc__}, BYTEARRAY_CLEAR_METHODDEF BYTEARRAY_COPY_METHODDEF - {"count", (PyCFunction)bytearray_count, METH_VARARGS, + {"count", (PyCFunction)stringlib_method_count, METH_VARARGS, _Py_count__doc__}, BYTEARRAY_DECODE_METHODDEF - {"endswith", (PyCFunction)bytearray_endswith, METH_VARARGS, + {"endswith", (PyCFunction)stringlib_endswith, METH_VARARGS, _Py_endswith__doc__}, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS | METH_KEYWORDS, _Py_expandtabs__doc__}, BYTEARRAY_EXTEND_METHODDEF - {"find", (PyCFunction)bytearray_find, METH_VARARGS, + {"find", (PyCFunction)stringlib_method_find, METH_VARARGS, _Py_find__doc__}, BYTEARRAY_FROMHEX_METHODDEF - {"hex", (PyCFunction)bytearray_hex, METH_NOARGS, hex__doc__}, - {"index", (PyCFunction)bytearray_index, METH_VARARGS, _Py_index__doc__}, + {"hex", (PyCFunction)stringlib_hex, METH_NOARGS, hex__doc__}, + {"index", (PyCFunction)stringlib_index, METH_VARARGS, _Py_index__doc__}, BYTEARRAY_INSERT_METHODDEF {"isalnum", (PyCFunction)stringlib_isalnum, METH_NOARGS, _Py_isalnum__doc__}, @@ -2157,15 +2101,16 @@ BYTEARRAY_REMOVE_METHODDEF BYTEARRAY_REPLACE_METHODDEF BYTEARRAY_REVERSE_METHODDEF - {"rfind", (PyCFunction)bytearray_rfind, METH_VARARGS, _Py_rfind__doc__}, - {"rindex", (PyCFunction)bytearray_rindex, METH_VARARGS, _Py_rindex__doc__}, + {"rfind", (PyCFunction)stringlib_method_rfind, METH_VARARGS, + _Py_rfind__doc__}, + {"rindex", (PyCFunction)stringlib_rindex, METH_VARARGS, _Py_rindex__doc__}, {"rjust", (PyCFunction)stringlib_rjust, METH_VARARGS, _Py_rjust__doc__}, BYTEARRAY_RPARTITION_METHODDEF BYTEARRAY_RSPLIT_METHODDEF BYTEARRAY_RSTRIP_METHODDEF BYTEARRAY_SPLIT_METHODDEF BYTEARRAY_SPLITLINES_METHODDEF - {"startswith", (PyCFunction)bytearray_startswith, METH_VARARGS , + {"startswith", (PyCFunction)stringlib_startswith, METH_VARARGS, _Py_startswith__doc__}, BYTEARRAY_STRIP_METHODDEF {"swapcase", (PyCFunction)stringlib_swapcase, METH_NOARGS, diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -1485,12 +1485,6 @@ return (PyObject *) op; } -static int -bytes_contains(PyObject *self, PyObject *arg) -{ - return _Py_bytes_contains(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), arg); -} - static PyObject * bytes_item(PyBytesObject *a, Py_ssize_t i) { @@ -1701,7 +1695,7 @@ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ - (objobjproc)bytes_contains /*sq_contains*/ + (objobjproc)stringlib_contains /*sq_contains*/ }; static PyMappingMethods bytes_as_mapping = { @@ -1873,32 +1867,6 @@ return bytes_join((PyBytesObject*)sep, x); } -static PyObject * -bytes_find(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_find(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - -static PyObject * -bytes_index(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_index(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - -static PyObject * -bytes_rfind(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_rfind(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - -static PyObject * -bytes_rindex(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_rindex(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - Py_LOCAL_INLINE(PyObject *) do_xstrip(PyBytesObject *self, int striptype, PyObject *sepobj) @@ -2035,13 +2003,6 @@ } -static PyObject * -bytes_count(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_count(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - /*[clinic input] bytes.translate @@ -2228,19 +2189,6 @@ /** End DALKE **/ -static PyObject * -bytes_startswith(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_startswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - -static PyObject * -bytes_endswith(PyBytesObject *self, PyObject *args) -{ - return _Py_bytes_endswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); -} - - /*[clinic input] bytes.decode @@ -2395,14 +2343,6 @@ Example: b'\\xb9\\x01\\xef'.hex() -> 'b901ef'."); static PyObject * -bytes_hex(PyBytesObject *self) -{ - char* argbuf = PyBytes_AS_STRING(self); - Py_ssize_t arglen = PyBytes_GET_SIZE(self); - return _Py_strhex(argbuf, arglen); -} - -static PyObject * bytes_getnewargs(PyBytesObject *v) { return Py_BuildValue("(y#)", v->ob_sval, Py_SIZE(v)); @@ -2414,20 +2354,19 @@ {"__getnewargs__", (PyCFunction)bytes_getnewargs, METH_NOARGS}, {"capitalize", (PyCFunction)stringlib_capitalize, METH_NOARGS, _Py_capitalize__doc__}, - {"center", (PyCFunction)stringlib_center, METH_VARARGS, - _Py_center__doc__}, - {"count", (PyCFunction)bytes_count, METH_VARARGS, + {"center", (PyCFunction)stringlib_center, METH_VARARGS, _Py_center__doc__}, + {"count", (PyCFunction)stringlib_method_count, METH_VARARGS, _Py_count__doc__}, BYTES_DECODE_METHODDEF - {"endswith", (PyCFunction)bytes_endswith, METH_VARARGS, + {"endswith", (PyCFunction)stringlib_endswith, METH_VARARGS, _Py_endswith__doc__}, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS | METH_KEYWORDS, _Py_expandtabs__doc__}, - {"find", (PyCFunction)bytes_find, METH_VARARGS, + {"find", (PyCFunction)stringlib_method_find, METH_VARARGS, _Py_find__doc__}, BYTES_FROMHEX_METHODDEF - {"hex", (PyCFunction)bytes_hex, METH_NOARGS, hex__doc__}, - {"index", (PyCFunction)bytes_index, METH_VARARGS, _Py_index__doc__}, + {"hex", (PyCFunction)stringlib_hex, METH_NOARGS, hex__doc__}, + {"index", (PyCFunction)stringlib_index, METH_VARARGS, _Py_index__doc__}, {"isalnum", (PyCFunction)stringlib_isalnum, METH_NOARGS, _Py_isalnum__doc__}, {"isalpha", (PyCFunction)stringlib_isalpha, METH_NOARGS, @@ -2449,15 +2388,16 @@ BYTES_MAKETRANS_METHODDEF BYTES_PARTITION_METHODDEF BYTES_REPLACE_METHODDEF - {"rfind", (PyCFunction)bytes_rfind, METH_VARARGS, _Py_rfind__doc__}, - {"rindex", (PyCFunction)bytes_rindex, METH_VARARGS, _Py_rindex__doc__}, + {"rfind", (PyCFunction)stringlib_method_rfind, METH_VARARGS, + _Py_rfind__doc__}, + {"rindex", (PyCFunction)stringlib_rindex, METH_VARARGS, _Py_rindex__doc__}, {"rjust", (PyCFunction)stringlib_rjust, METH_VARARGS, _Py_rjust__doc__}, BYTES_RPARTITION_METHODDEF BYTES_RSPLIT_METHODDEF BYTES_RSTRIP_METHODDEF BYTES_SPLIT_METHODDEF BYTES_SPLITLINES_METHODDEF - {"startswith", (PyCFunction)bytes_startswith, METH_VARARGS, + {"startswith", (PyCFunction)stringlib_startswith, METH_VARARGS, _Py_startswith__doc__}, BYTES_STRIP_METHODDEF {"swapcase", (PyCFunction)stringlib_swapcase, METH_NOARGS, diff --git a/Objects/stringlib/transmogrify.h b/Objects/stringlib/transmogrify.h --- a/Objects/stringlib/transmogrify.h +++ b/Objects/stringlib/transmogrify.h @@ -2,6 +2,60 @@ # error "transmogrify.h only compatible with byte-wise strings" #endif +Py_LOCAL(PyObject *) +stringlib_method_find(PyObject *self, PyObject *args) +{ + return _Py_bytes_find(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_index(PyObject *self, PyObject *args) +{ + return _Py_bytes_index(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_method_rfind(PyObject *self, PyObject *args) +{ + return _Py_bytes_rfind(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_rindex(PyObject *self, PyObject *args) +{ + return _Py_bytes_rindex(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_method_count(PyObject *self, PyObject *args) +{ + return _Py_bytes_count(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(int) +stringlib_contains(PyObject *self, PyObject *arg) +{ + return _Py_bytes_contains(STRINGLIB_STR(self), STRINGLIB_LEN(self), arg); +} + +Py_LOCAL(PyObject *) +stringlib_startswith(PyObject *self, PyObject *args) +{ + return _Py_bytes_startswith(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_endswith(PyObject *self, PyObject *args) +{ + return _Py_bytes_endswith(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); +} + +Py_LOCAL(PyObject *) +stringlib_hex(PyObject *self) +{ + return _Py_strhex(STRINGLIB_STR(self), STRINGLIB_LEN(self)); +} + /* the more complicated methods. parts of these should be pulled out into the shared code in bytes_methods.c to cut down on duplicate code bloat. */ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 1 16:35:15 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Fri, 01 Jul 2016 20:35:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzIzOTA4?= =?utf-8?q?=3A_os_functions=2C_open=28=29_and_the_io=2EFileIO_constructor_?= =?utf-8?q?now_reject?= Message-ID: <20160701203514.25733.96353.0DF694EB@psf.io> https://hg.python.org/cpython/rev/30099abdb3a4 changeset: 102244:30099abdb3a4 branch: 2.7 parent: 102232:8f1d3ebdbc56 user: Serhiy Storchaka date: Fri Jul 01 23:34:44 2016 +0300 summary: Issue #23908: os functions, open() and the io.FileIO constructor now reject unicode paths with embedded null character on Windows instead of silently truncate them. files: Lib/test/test_fileio.py | 5 + Lib/test/test_getargs2.py | 2 +- Lib/test/test_io.py | 9 ++ Lib/test/test_posix.py | 38 +++++++++++ Misc/NEWS | 4 + Modules/_io/fileio.c | 15 ++++- Modules/posixmodule.c | 87 ++++++++++---------------- Objects/fileobject.c | 3 +- Python/getargs.c | 19 +++++- 9 files changed, 125 insertions(+), 57 deletions(-) diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py --- a/Lib/test/test_fileio.py +++ b/Lib/test/test_fileio.py @@ -361,6 +361,11 @@ finally: os.unlink(TESTFN) + def testConstructorHandlesNULChars(self): + fn_with_NUL = 'foo\0bar' + self.assertRaises(TypeError, _FileIO, fn_with_NUL, 'w') + self.assertRaises(TypeError, _FileIO, fn_with_NUL.encode('ascii'), 'w') + def testInvalidFd(self): self.assertRaises(ValueError, _FileIO, -10) self.assertRaises(OSError, _FileIO, make_bad_fd()) diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py --- a/Lib/test/test_getargs2.py +++ b/Lib/test/test_getargs2.py @@ -779,7 +779,7 @@ def test_u(self): from _testcapi import getargs_u self.assertEqual(getargs_u(u'abc\xe9'), u'abc\xe9') - self.assertEqual(getargs_u(u'nul:\0'), u'nul:') + self.assertRaises(TypeError, getargs_u, u'nul:\0') self.assertRaises(TypeError, getargs_u, 'bytes') self.assertRaises(TypeError, getargs_u, bytearray('bytearray')) self.assertRaises(TypeError, getargs_u, memoryview('memoryview')) diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -349,6 +349,15 @@ self.assertRaises(IOError, fp.write, "blah") self.assertRaises(IOError, fp.writelines, ["blah\n"]) + def test_open_handles_NUL_chars(self): + fn_with_NUL = 'foo\0bar' + self.assertRaises(TypeError, self.open, fn_with_NUL, 'w') + + bytes_fn = fn_with_NUL.encode('ascii') + with warnings.catch_warnings(): + warnings.simplefilter("ignore", DeprecationWarning) + self.assertRaises(TypeError, self.open, bytes_fn, 'w') + def test_raw_file_io(self): with self.open(support.TESTFN, "wb", buffering=0) as f: self.assertEqual(f.readable(), False) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -577,6 +577,44 @@ set([int(x) for x in groups.split()]), set(posix.getgroups() + [posix.getegid()])) + @test_support.requires_unicode + def test_path_with_null_unicode(self): + fn = test_support.TESTFN_UNICODE + fn_with_NUL = fn + u'\0' + self.addCleanup(test_support.unlink, fn) + test_support.unlink(fn) + fd = None + try: + with self.assertRaises(TypeError): + fd = os.open(fn_with_NUL, os.O_WRONLY | os.O_CREAT) # raises + finally: + if fd is not None: + os.close(fd) + self.assertFalse(os.path.exists(fn)) + self.assertRaises(TypeError, os.mkdir, fn_with_NUL) + self.assertFalse(os.path.exists(fn)) + open(fn, 'wb').close() + self.assertRaises(TypeError, os.stat, fn_with_NUL) + + def test_path_with_null_byte(self): + fn = test_support.TESTFN + fn_with_NUL = fn + '\0' + self.addCleanup(test_support.unlink, fn) + test_support.unlink(fn) + fd = None + try: + with self.assertRaises(TypeError): + fd = os.open(fn_with_NUL, os.O_WRONLY | os.O_CREAT) # raises + finally: + if fd is not None: + os.close(fd) + self.assertFalse(os.path.exists(fn)) + self.assertRaises(TypeError, os.mkdir, fn_with_NUL) + self.assertFalse(os.path.exists(fn)) + open(fn, 'wb').close() + self.assertRaises(TypeError, os.stat, fn_with_NUL) + + class PosixGroupsTester(unittest.TestCase): def setUp(self): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,10 @@ Core and Builtins ----------------- +- Issue #23908: os functions, open() and the io.FileIO constructor now reject + unicode paths with embedded null character on Windows instead of silently + truncate them. + Library ------- diff --git a/Modules/_io/fileio.c b/Modules/_io/fileio.c --- a/Modules/_io/fileio.c +++ b/Modules/_io/fileio.c @@ -224,8 +224,13 @@ } #ifdef MS_WINDOWS - if (PyUnicode_Check(nameobj)) + if (PyUnicode_Check(nameobj)) { widename = PyUnicode_AS_UNICODE(nameobj); + if (wcslen(widename) != (size_t)PyUnicode_GET_SIZE(nameobj)) { + PyErr_SetString(PyExc_TypeError, "embedded NUL character"); + return -1; + } + } if (widename == NULL) #endif if (fd < 0) @@ -234,6 +239,10 @@ Py_ssize_t namelen; if (PyObject_AsCharBuffer(nameobj, &name, &namelen) < 0) return -1; + if (strlen(name) != (size_t)namelen) { + PyErr_SetString(PyExc_TypeError, "embedded NUL character"); + return -1; + } } else { PyObject *u = PyUnicode_FromObject(nameobj); @@ -252,6 +261,10 @@ goto error; } name = PyBytes_AS_STRING(stringobj); + if (strlen(name) != (size_t)PyBytes_GET_SIZE(stringobj)) { + PyErr_SetString(PyExc_TypeError, "embedded NUL character"); + goto error; + } } } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -1646,13 +1646,9 @@ PyObject *result; #ifdef MS_WINDOWS - PyUnicodeObject *po; - if (PyArg_ParseTuple(args, wformat, &po)) { - Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po); - + Py_UNICODE *wpath; + if (PyArg_ParseTuple(args, wformat, &wpath)) { Py_BEGIN_ALLOW_THREADS - /* PyUnicode_AS_UNICODE result OK without - thread lock as it is a simple dereference. */ res = wstatfunc(wpath, &st); Py_END_ALLOW_THREADS @@ -1706,12 +1702,10 @@ #ifdef MS_WINDOWS DWORD attr; - PyUnicodeObject *po; - if (PyArg_ParseTuple(args, "Ui:access", &po, &mode)) { + Py_UNICODE *wpath; + if (PyArg_ParseTuple(args, "ui:access", &wpath, &mode)) { Py_BEGIN_ALLOW_THREADS - /* PyUnicode_AS_UNICODE OK without thread lock as - it is a simple dereference. */ - attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po)); + attr = GetFileAttributesW(wpath); Py_END_ALLOW_THREADS goto finish; } @@ -1858,23 +1852,22 @@ int res; #ifdef MS_WINDOWS DWORD attr; - PyUnicodeObject *po; - if (PyArg_ParseTuple(args, "Ui|:chmod", &po, &i)) { + Py_UNICODE *wpath; + if (PyArg_ParseTuple(args, "ui|:chmod", &wpath, &i)) { Py_BEGIN_ALLOW_THREADS - attr = GetFileAttributesW(PyUnicode_AS_UNICODE(po)); + attr = GetFileAttributesW(wpath); if (attr != 0xFFFFFFFF) { if (i & _S_IWRITE) attr &= ~FILE_ATTRIBUTE_READONLY; else attr |= FILE_ATTRIBUTE_READONLY; - res = SetFileAttributesW(PyUnicode_AS_UNICODE(po), attr); + res = SetFileAttributesW(wpath, attr); } else res = 0; Py_END_ALLOW_THREADS if (!res) - return win32_error_unicode("chmod", - PyUnicode_AS_UNICODE(po)); + return win32_error_unicode("chmod", wpath); Py_INCREF(Py_None); return Py_None; } @@ -2300,18 +2293,18 @@ char *bufptr = namebuf; Py_ssize_t len = sizeof(namebuf)-5; /* only claim to have space for MAX_PATH */ - PyObject *po; - if (PyArg_ParseTuple(args, "U:listdir", &po)) { + Py_UNICODE *wpath; + if (PyArg_ParseTuple(args, "u:listdir", &wpath)) { WIN32_FIND_DATAW wFileData; Py_UNICODE *wnamebuf; /* Overallocate for \\*.*\0 */ - len = PyUnicode_GET_SIZE(po); + len = wcslen(wpath); wnamebuf = malloc((len + 5) * sizeof(wchar_t)); if (!wnamebuf) { PyErr_NoMemory(); return NULL; } - wcscpy(wnamebuf, PyUnicode_AS_UNICODE(po)); + wcscpy(wnamebuf, wpath); if (len > 0) { Py_UNICODE wch = wnamebuf[len-1]; if (wch != L'/' && wch != L'\\' && wch != L':') @@ -2615,9 +2608,8 @@ char outbuf[MAX_PATH*2]; char *temp; - PyUnicodeObject *po; - if (PyArg_ParseTuple(args, "U|:_getfullpathname", &po)) { - Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po); + Py_UNICODE *wpath; + if (PyArg_ParseTuple(args, "u|:_getfullpathname", &wpath)) { Py_UNICODE woutbuf[MAX_PATH*2], *woutbufp = woutbuf; Py_UNICODE *wtemp; DWORD result; @@ -2670,15 +2662,13 @@ int mode = 0777; #ifdef MS_WINDOWS - PyUnicodeObject *po; - if (PyArg_ParseTuple(args, "U|i:mkdir", &po, &mode)) { + Py_UNICODE *wpath; + if (PyArg_ParseTuple(args, "u|i:mkdir", &wpath, &mode)) { Py_BEGIN_ALLOW_THREADS - /* PyUnicode_AS_UNICODE OK without thread lock as - it is a simple dereference. */ - res = CreateDirectoryW(PyUnicode_AS_UNICODE(po), NULL); + res = CreateDirectoryW(wpath, NULL); Py_END_ALLOW_THREADS if (!res) - return win32_error_unicode("mkdir", PyUnicode_AS_UNICODE(po)); + return win32_error_unicode("mkdir", wpath); Py_INCREF(Py_None); return Py_None; } @@ -2689,8 +2679,6 @@ Py_FileSystemDefaultEncoding, &path, &mode)) return NULL; Py_BEGIN_ALLOW_THREADS - /* PyUnicode_AS_UNICODE OK without thread lock as - it is a simple dereference. */ res = CreateDirectoryA(path, NULL); Py_END_ALLOW_THREADS if (!res) { @@ -2833,7 +2821,7 @@ posix_stat(PyObject *self, PyObject *args) { #ifdef MS_WINDOWS - return posix_do_stat(self, args, "et:stat", STAT, "U:stat", win32_wstat); + return posix_do_stat(self, args, "et:stat", STAT, "u:stat", win32_wstat); #else return posix_do_stat(self, args, "et:stat", STAT, NULL, NULL); #endif @@ -2969,7 +2957,6 @@ { #ifdef MS_WINDOWS PyObject *arg; - PyUnicodeObject *obwpath; wchar_t *wpath = NULL; char *apath = NULL; HANDLE hFile; @@ -2978,8 +2965,7 @@ FILETIME atime, mtime; PyObject *result = NULL; - if (PyArg_ParseTuple(args, "UO|:utime", &obwpath, &arg)) { - wpath = PyUnicode_AS_UNICODE(obwpath); + if (PyArg_ParseTuple(args, "uO|:utime", &wpath, &arg)) { Py_BEGIN_ALLOW_THREADS hFile = CreateFileW(wpath, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, @@ -4440,14 +4426,11 @@ static PyObject * posix__isdir(PyObject *self, PyObject *args) { - PyObject *opath; char *path; - PyUnicodeObject *po; + Py_UNICODE *wpath; DWORD attributes; - if (PyArg_ParseTuple(args, "U|:_isdir", &po)) { - Py_UNICODE *wpath = PyUnicode_AS_UNICODE(po); - + if (PyArg_ParseTuple(args, "u|:_isdir", &wpath)) { attributes = GetFileAttributesW(wpath); if (attributes == INVALID_FILE_ATTRIBUTES) Py_RETURN_FALSE; @@ -6326,7 +6309,7 @@ return posix_do_stat(self, args, "et:lstat", lstat, NULL, NULL); #else /* !HAVE_LSTAT */ #ifdef MS_WINDOWS - return posix_do_stat(self, args, "et:lstat", STAT, "U:lstat", win32_wstat); + return posix_do_stat(self, args, "et:lstat", STAT, "u:lstat", win32_wstat); #else return posix_do_stat(self, args, "et:lstat", STAT, NULL, NULL); #endif @@ -6600,12 +6583,10 @@ int fd; #ifdef MS_WINDOWS - PyUnicodeObject *po; - if (PyArg_ParseTuple(args, "Ui|i:mkdir", &po, &flag, &mode)) { + Py_UNICODE *wpath; + if (PyArg_ParseTuple(args, "ui|i:mkdir", &wpath, &flag, &mode)) { Py_BEGIN_ALLOW_THREADS - /* PyUnicode_AS_UNICODE OK without thread - lock as it is a simple dereference. */ - fd = _wopen(PyUnicode_AS_UNICODE(po), flag, mode); + fd = _wopen(wpath, flag, mode); Py_END_ALLOW_THREADS if (fd < 0) return posix_error(); @@ -8662,12 +8643,13 @@ win32_startfile(PyObject *self, PyObject *args) { char *filepath; + Py_UNICODE *wpath; char *operation = NULL; HINSTANCE rc; - PyObject *unipath, *woperation = NULL; - if (!PyArg_ParseTuple(args, "U|s:startfile", - &unipath, &operation)) { + PyObject *woperation = NULL; + if (!PyArg_ParseTuple(args, "u|s:startfile", + &wpath, &operation)) { PyErr_Clear(); goto normal; } @@ -8684,14 +8666,13 @@ Py_BEGIN_ALLOW_THREADS rc = ShellExecuteW((HWND)0, woperation ? PyUnicode_AS_UNICODE(woperation) : 0, - PyUnicode_AS_UNICODE(unipath), + wpath, NULL, NULL, SW_SHOWNORMAL); Py_END_ALLOW_THREADS Py_XDECREF(woperation); if (rc <= (HINSTANCE)32) { - PyObject *errval = win32_error_unicode("startfile", - PyUnicode_AS_UNICODE(unipath)); + PyObject *errval = win32_error_unicode("startfile", wpath); return errval; } Py_INCREF(Py_None); diff --git a/Objects/fileobject.c b/Objects/fileobject.c --- a/Objects/fileobject.c +++ b/Objects/fileobject.c @@ -2394,7 +2394,8 @@ #ifdef MS_WINDOWS if (PyArg_ParseTupleAndKeywords(args, kwds, "U|si:file", - kwlist, &po, &mode, &bufsize)) { + kwlist, &po, &mode, &bufsize) && + wcslen(PyUnicode_AS_UNICODE(po)) == (size_t)PyUnicode_GET_SIZE(po)) { wideargument = 1; if (fill_file_fields(foself, NULL, po, mode, fclose) == NULL) diff --git a/Python/getargs.c b/Python/getargs.c --- a/Python/getargs.c +++ b/Python/getargs.c @@ -576,6 +576,17 @@ return 0; } +#ifdef Py_USING_UNICODE +static size_t +_ustrlen(Py_UNICODE *u) +{ + size_t i = 0; + Py_UNICODE *v = u; + while (*v != 0) { i++; v++; } + return i; +} +#endif + /* Convert a non-tuple argument. Return NULL if conversion went OK, or a string with a message describing the failure. The message is formatted as "must be , not ". @@ -1202,8 +1213,14 @@ format++; } else { Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **); - if (PyUnicode_Check(arg)) + if (PyUnicode_Check(arg)) { *p = PyUnicode_AS_UNICODE(arg); + if (_ustrlen(*p) != (size_t)PyUnicode_GET_SIZE(arg)) { + return converterr( + "unicode without null characters", + arg, msgbuf, bufsize); + } + } else return converterr("unicode", arg, msgbuf, bufsize); } -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Sat Jul 2 04:50:33 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sat, 02 Jul 2016 08:50:33 +0000 Subject: [Python-checkins] Daily reference leaks (b0087e17cd5e): sum=4 Message-ID: <20160702085032.10925.57998.F73E476E@psf.io> results for b0087e17cd5e on branch "default" -------------------------------------------- test_collections leaked [0, 4, -4] memory blocks, sum=0 test_functools leaked [0, 3, 1] memory blocks, sum=4 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogNaciZe', '--timeout', '7200'] From python-checkins at python.org Sun Jul 3 03:55:48 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 07:55:48 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_Fixed_a_test_f?= =?utf-8?q?or_issue23908_with_C_locale=2E?= Message-ID: <20160703075538.31663.23011.D8A15620@psf.io> https://hg.python.org/cpython/rev/b0e8a2e7c361 changeset: 102245:b0e8a2e7c361 branch: 2.7 user: Serhiy Storchaka date: Sun Jul 03 10:53:39 2016 +0300 summary: Fixed a test for issue23908 with C locale. files: Lib/test/test_posix.py | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py --- a/Lib/test/test_posix.py +++ b/Lib/test/test_posix.py @@ -580,6 +580,10 @@ @test_support.requires_unicode def test_path_with_null_unicode(self): fn = test_support.TESTFN_UNICODE + try: + fn.encode(test_support.TESTFN_ENCODING) + except (UnicodeError, TypeError): + self.skipTest("Requires unicode filenames support") fn_with_NUL = fn + u'\0' self.addCleanup(test_support.unlink, fn) test_support.unlink(fn) -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Sun Jul 3 04:51:14 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sun, 03 Jul 2016 08:51:14 +0000 Subject: [Python-checkins] Daily reference leaks (b0087e17cd5e): sum=3 Message-ID: <20160703085110.507.46396.410F9367@psf.io> results for b0087e17cd5e on branch "default" -------------------------------------------- test_collections leaked [2, 0, 0] references, sum=2 test_collections leaked [1, 0, -4] memory blocks, sum=-3 test_functools leaked [0, 3, 1] memory blocks, sum=4 test_multiprocessing_forkserver leaked [-2, 2, 0] memory blocks, sum=0 test_multiprocessing_spawn leaked [0, -2, 2] memory blocks, sum=0 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogGQhzyt', '--timeout', '7200'] From python-checkins at python.org Sun Jul 3 06:27:47 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 10:27:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2326765=3A_Fixed_pa?= =?utf-8?q?rsing_Py=5Fssize=5Ft_arguments_on_32-bit_Windows=2E?= Message-ID: <20160703102747.31464.54762.D8017056@psf.io> https://hg.python.org/cpython/rev/0638047c0c36 changeset: 102246:0638047c0c36 parent: 102243:b0087e17cd5e user: Serhiy Storchaka date: Sun Jul 03 13:26:52 2016 +0300 summary: Issue #26765: Fixed parsing Py_ssize_t arguments on 32-bit Windows. files: Objects/bytes_methods.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Objects/bytes_methods.c b/Objects/bytes_methods.c --- a/Objects/bytes_methods.c +++ b/Objects/bytes_methods.c @@ -1,3 +1,4 @@ +#define PY_SSIZE_T_CLEAN #include "Python.h" #include "bytes_methods.h" -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 3 06:58:15 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 10:58:15 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Backed_out_changeset_b0087?= =?utf-8?q?e17cd5e_=28issue_=2326765=29?= Message-ID: <20160703105809.9539.21361.C7AA84FB@psf.io> https://hg.python.org/cpython/rev/6c4c0a23fabb changeset: 102247:6c4c0a23fabb user: Serhiy Storchaka date: Sun Jul 03 13:57:48 2016 +0300 summary: Backed out changeset b0087e17cd5e (issue #26765) For unknown reasons it perhaps caused a crash on 32-bit Windows (issue #). files: Objects/bytearrayobject.c | 79 ++++++++++++++++-- Objects/bytesobject.c | 82 +++++++++++++++++-- Objects/stringlib/transmogrify.h | 54 ------------- 3 files changed, 138 insertions(+), 77 deletions(-) diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1097,6 +1097,18 @@ #include "stringlib/transmogrify.h" +static PyObject * +bytearray_find(PyByteArrayObject *self, PyObject *args) +{ + return _Py_bytes_find(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); +} + +static PyObject * +bytearray_count(PyByteArrayObject *self, PyObject *args) +{ + return _Py_bytes_count(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); +} + /*[clinic input] bytearray.clear @@ -1126,6 +1138,42 @@ PyByteArray_GET_SIZE(self)); } +static PyObject * +bytearray_index(PyByteArrayObject *self, PyObject *args) +{ + return _Py_bytes_index(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); +} + +static PyObject * +bytearray_rfind(PyByteArrayObject *self, PyObject *args) +{ + return _Py_bytes_rfind(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); +} + +static PyObject * +bytearray_rindex(PyByteArrayObject *self, PyObject *args) +{ + return _Py_bytes_rindex(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); +} + +static int +bytearray_contains(PyObject *self, PyObject *arg) +{ + return _Py_bytes_contains(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), arg); +} + +static PyObject * +bytearray_startswith(PyByteArrayObject *self, PyObject *args) +{ + return _Py_bytes_startswith(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); +} + +static PyObject * +bytearray_endswith(PyByteArrayObject *self, PyObject *args) +{ + return _Py_bytes_endswith(PyByteArray_AS_STRING(self), PyByteArray_GET_SIZE(self), args); +} + /*[clinic input] bytearray.translate @@ -1281,8 +1329,8 @@ /*[clinic end generated code: output=d39884c4dc59412a input=aa379d988637c7fb]*/ { return stringlib_replace((PyObject *)self, - old->buf, old->len, - new->buf, new->len, count); + (const char *)old->buf, old->len, + (const char *)new->buf, new->len, count); } /*[clinic input] @@ -1948,6 +1996,14 @@ Example: bytearray([0xb9, 0x01, 0xef]).hex() -> 'b901ef'."); static PyObject * +bytearray_hex(PyBytesObject *self) +{ + char* argbuf = PyByteArray_AS_STRING(self); + Py_ssize_t arglen = PyByteArray_GET_SIZE(self); + return _Py_strhex(argbuf, arglen); +} + +static PyObject * _common_reduce(PyByteArrayObject *self, int proto) { PyObject *dict; @@ -2035,7 +2091,7 @@ 0, /* sq_slice */ (ssizeobjargproc)bytearray_setitem, /* sq_ass_item */ 0, /* sq_ass_slice */ - (objobjproc)stringlib_contains, /* sq_contains */ + (objobjproc)bytearray_contains, /* sq_contains */ (binaryfunc)bytearray_iconcat, /* sq_inplace_concat */ (ssizeargfunc)bytearray_irepeat, /* sq_inplace_repeat */ }; @@ -2063,19 +2119,19 @@ {"center", (PyCFunction)stringlib_center, METH_VARARGS, _Py_center__doc__}, BYTEARRAY_CLEAR_METHODDEF BYTEARRAY_COPY_METHODDEF - {"count", (PyCFunction)stringlib_method_count, METH_VARARGS, + {"count", (PyCFunction)bytearray_count, METH_VARARGS, _Py_count__doc__}, BYTEARRAY_DECODE_METHODDEF - {"endswith", (PyCFunction)stringlib_endswith, METH_VARARGS, + {"endswith", (PyCFunction)bytearray_endswith, METH_VARARGS, _Py_endswith__doc__}, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS | METH_KEYWORDS, _Py_expandtabs__doc__}, BYTEARRAY_EXTEND_METHODDEF - {"find", (PyCFunction)stringlib_method_find, METH_VARARGS, + {"find", (PyCFunction)bytearray_find, METH_VARARGS, _Py_find__doc__}, BYTEARRAY_FROMHEX_METHODDEF - {"hex", (PyCFunction)stringlib_hex, METH_NOARGS, hex__doc__}, - {"index", (PyCFunction)stringlib_index, METH_VARARGS, _Py_index__doc__}, + {"hex", (PyCFunction)bytearray_hex, METH_NOARGS, hex__doc__}, + {"index", (PyCFunction)bytearray_index, METH_VARARGS, _Py_index__doc__}, BYTEARRAY_INSERT_METHODDEF {"isalnum", (PyCFunction)stringlib_isalnum, METH_NOARGS, _Py_isalnum__doc__}, @@ -2101,16 +2157,15 @@ BYTEARRAY_REMOVE_METHODDEF BYTEARRAY_REPLACE_METHODDEF BYTEARRAY_REVERSE_METHODDEF - {"rfind", (PyCFunction)stringlib_method_rfind, METH_VARARGS, - _Py_rfind__doc__}, - {"rindex", (PyCFunction)stringlib_rindex, METH_VARARGS, _Py_rindex__doc__}, + {"rfind", (PyCFunction)bytearray_rfind, METH_VARARGS, _Py_rfind__doc__}, + {"rindex", (PyCFunction)bytearray_rindex, METH_VARARGS, _Py_rindex__doc__}, {"rjust", (PyCFunction)stringlib_rjust, METH_VARARGS, _Py_rjust__doc__}, BYTEARRAY_RPARTITION_METHODDEF BYTEARRAY_RSPLIT_METHODDEF BYTEARRAY_RSTRIP_METHODDEF BYTEARRAY_SPLIT_METHODDEF BYTEARRAY_SPLITLINES_METHODDEF - {"startswith", (PyCFunction)stringlib_startswith, METH_VARARGS, + {"startswith", (PyCFunction)bytearray_startswith, METH_VARARGS , _Py_startswith__doc__}, BYTEARRAY_STRIP_METHODDEF {"swapcase", (PyCFunction)stringlib_swapcase, METH_NOARGS, diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -1485,6 +1485,12 @@ return (PyObject *) op; } +static int +bytes_contains(PyObject *self, PyObject *arg) +{ + return _Py_bytes_contains(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), arg); +} + static PyObject * bytes_item(PyBytesObject *a, Py_ssize_t i) { @@ -1695,7 +1701,7 @@ 0, /*sq_slice*/ 0, /*sq_ass_item*/ 0, /*sq_ass_slice*/ - (objobjproc)stringlib_contains /*sq_contains*/ + (objobjproc)bytes_contains /*sq_contains*/ }; static PyMappingMethods bytes_as_mapping = { @@ -1867,6 +1873,32 @@ return bytes_join((PyBytesObject*)sep, x); } +static PyObject * +bytes_find(PyBytesObject *self, PyObject *args) +{ + return _Py_bytes_find(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); +} + +static PyObject * +bytes_index(PyBytesObject *self, PyObject *args) +{ + return _Py_bytes_index(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); +} + + +static PyObject * +bytes_rfind(PyBytesObject *self, PyObject *args) +{ + return _Py_bytes_rfind(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); +} + + +static PyObject * +bytes_rindex(PyBytesObject *self, PyObject *args) +{ + return _Py_bytes_rindex(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); +} + Py_LOCAL_INLINE(PyObject *) do_xstrip(PyBytesObject *self, int striptype, PyObject *sepobj) @@ -2003,6 +2035,13 @@ } +static PyObject * +bytes_count(PyBytesObject *self, PyObject *args) +{ + return _Py_bytes_count(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); +} + + /*[clinic input] bytes.translate @@ -2189,6 +2228,19 @@ /** End DALKE **/ +static PyObject * +bytes_startswith(PyBytesObject *self, PyObject *args) +{ + return _Py_bytes_startswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); +} + +static PyObject * +bytes_endswith(PyBytesObject *self, PyObject *args) +{ + return _Py_bytes_endswith(PyBytes_AS_STRING(self), PyBytes_GET_SIZE(self), args); +} + + /*[clinic input] bytes.decode @@ -2343,6 +2395,14 @@ Example: b'\\xb9\\x01\\xef'.hex() -> 'b901ef'."); static PyObject * +bytes_hex(PyBytesObject *self) +{ + char* argbuf = PyBytes_AS_STRING(self); + Py_ssize_t arglen = PyBytes_GET_SIZE(self); + return _Py_strhex(argbuf, arglen); +} + +static PyObject * bytes_getnewargs(PyBytesObject *v) { return Py_BuildValue("(y#)", v->ob_sval, Py_SIZE(v)); @@ -2354,19 +2414,20 @@ {"__getnewargs__", (PyCFunction)bytes_getnewargs, METH_NOARGS}, {"capitalize", (PyCFunction)stringlib_capitalize, METH_NOARGS, _Py_capitalize__doc__}, - {"center", (PyCFunction)stringlib_center, METH_VARARGS, _Py_center__doc__}, - {"count", (PyCFunction)stringlib_method_count, METH_VARARGS, + {"center", (PyCFunction)stringlib_center, METH_VARARGS, + _Py_center__doc__}, + {"count", (PyCFunction)bytes_count, METH_VARARGS, _Py_count__doc__}, BYTES_DECODE_METHODDEF - {"endswith", (PyCFunction)stringlib_endswith, METH_VARARGS, + {"endswith", (PyCFunction)bytes_endswith, METH_VARARGS, _Py_endswith__doc__}, {"expandtabs", (PyCFunction)stringlib_expandtabs, METH_VARARGS | METH_KEYWORDS, _Py_expandtabs__doc__}, - {"find", (PyCFunction)stringlib_method_find, METH_VARARGS, + {"find", (PyCFunction)bytes_find, METH_VARARGS, _Py_find__doc__}, BYTES_FROMHEX_METHODDEF - {"hex", (PyCFunction)stringlib_hex, METH_NOARGS, hex__doc__}, - {"index", (PyCFunction)stringlib_index, METH_VARARGS, _Py_index__doc__}, + {"hex", (PyCFunction)bytes_hex, METH_NOARGS, hex__doc__}, + {"index", (PyCFunction)bytes_index, METH_VARARGS, _Py_index__doc__}, {"isalnum", (PyCFunction)stringlib_isalnum, METH_NOARGS, _Py_isalnum__doc__}, {"isalpha", (PyCFunction)stringlib_isalpha, METH_NOARGS, @@ -2388,16 +2449,15 @@ BYTES_MAKETRANS_METHODDEF BYTES_PARTITION_METHODDEF BYTES_REPLACE_METHODDEF - {"rfind", (PyCFunction)stringlib_method_rfind, METH_VARARGS, - _Py_rfind__doc__}, - {"rindex", (PyCFunction)stringlib_rindex, METH_VARARGS, _Py_rindex__doc__}, + {"rfind", (PyCFunction)bytes_rfind, METH_VARARGS, _Py_rfind__doc__}, + {"rindex", (PyCFunction)bytes_rindex, METH_VARARGS, _Py_rindex__doc__}, {"rjust", (PyCFunction)stringlib_rjust, METH_VARARGS, _Py_rjust__doc__}, BYTES_RPARTITION_METHODDEF BYTES_RSPLIT_METHODDEF BYTES_RSTRIP_METHODDEF BYTES_SPLIT_METHODDEF BYTES_SPLITLINES_METHODDEF - {"startswith", (PyCFunction)stringlib_startswith, METH_VARARGS, + {"startswith", (PyCFunction)bytes_startswith, METH_VARARGS, _Py_startswith__doc__}, BYTES_STRIP_METHODDEF {"swapcase", (PyCFunction)stringlib_swapcase, METH_NOARGS, diff --git a/Objects/stringlib/transmogrify.h b/Objects/stringlib/transmogrify.h --- a/Objects/stringlib/transmogrify.h +++ b/Objects/stringlib/transmogrify.h @@ -2,60 +2,6 @@ # error "transmogrify.h only compatible with byte-wise strings" #endif -Py_LOCAL(PyObject *) -stringlib_method_find(PyObject *self, PyObject *args) -{ - return _Py_bytes_find(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); -} - -Py_LOCAL(PyObject *) -stringlib_index(PyObject *self, PyObject *args) -{ - return _Py_bytes_index(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); -} - -Py_LOCAL(PyObject *) -stringlib_method_rfind(PyObject *self, PyObject *args) -{ - return _Py_bytes_rfind(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); -} - -Py_LOCAL(PyObject *) -stringlib_rindex(PyObject *self, PyObject *args) -{ - return _Py_bytes_rindex(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); -} - -Py_LOCAL(PyObject *) -stringlib_method_count(PyObject *self, PyObject *args) -{ - return _Py_bytes_count(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); -} - -Py_LOCAL(int) -stringlib_contains(PyObject *self, PyObject *arg) -{ - return _Py_bytes_contains(STRINGLIB_STR(self), STRINGLIB_LEN(self), arg); -} - -Py_LOCAL(PyObject *) -stringlib_startswith(PyObject *self, PyObject *args) -{ - return _Py_bytes_startswith(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); -} - -Py_LOCAL(PyObject *) -stringlib_endswith(PyObject *self, PyObject *args) -{ - return _Py_bytes_endswith(STRINGLIB_STR(self), STRINGLIB_LEN(self), args); -} - -Py_LOCAL(PyObject *) -stringlib_hex(PyObject *self) -{ - return _Py_strhex(STRINGLIB_STR(self), STRINGLIB_LEN(self)); -} - /* the more complicated methods. parts of these should be pulled out into the shared code in bytes_methods.c to cut down on duplicate code bloat. */ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 3 07:42:40 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 11:42:40 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogSXNzdWUgIzI3NDQzOiBfX2xlbmd0aF9oaW50X18oKSBvZiBieXRlYXJy?= =?utf-8?q?ay_itearator_no_longer_return?= Message-ID: <20160703114240.11009.15680.7A9D7541@psf.io> https://hg.python.org/cpython/rev/03192909160d changeset: 102249:03192909160d parent: 102247:6c4c0a23fabb parent: 102248:6b084bb6c38b user: Serhiy Storchaka date: Sun Jul 03 14:42:17 2016 +0300 summary: Issue #27443: __length_hint__() of bytearray itearator no longer return negative integer for resized bytearray. files: Lib/test/test_bytes.py | 10 ++++++++++ Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 6 +++++- 3 files changed, 18 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1328,6 +1328,16 @@ test_exhausted_iterator = test.list_tests.CommonTest.test_exhausted_iterator + def test_iterator_length_hint(self): + # Issue 27443: __length_hint__ can return negative integer + ba = bytearray(b'ab') + it = iter(ba) + next(it) + ba.clear() + # Shouldn't raise an error + self.assertEqual(list(it), []) + + class AssortedBytesTest(unittest.TestCase): # # Test various combinations of bytes and bytearray diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27443: __length_hint__() of bytearray itearator no longer return + negative integer for resized bytearray. + - Issue #27007: The fromhex() class methods of bytes and bytearray subclasses now return an instance of corresponding subclass. diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -2303,8 +2303,12 @@ bytearrayiter_length_hint(bytesiterobject *it) { Py_ssize_t len = 0; - if (it->it_seq) + if (it->it_seq) { len = PyByteArray_GET_SIZE(it->it_seq) - it->it_index; + if (len < 0) { + len = 0; + } + } return PyLong_FromSsize_t(len); } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 3 07:42:40 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 11:42:40 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDQz?= =?utf-8?q?=3A_=5F=5Flength=5Fhint=5F=5F=28=29_of_bytearray_itearator_no_l?= =?utf-8?q?onger_return?= Message-ID: <20160703114240.25992.60280.21F79B34@psf.io> https://hg.python.org/cpython/rev/6b084bb6c38b changeset: 102248:6b084bb6c38b branch: 3.5 parent: 102240:b2c3837f7833 user: Serhiy Storchaka date: Sun Jul 03 14:41:36 2016 +0300 summary: Issue #27443: __length_hint__() of bytearray itearator no longer return negative integer for resized bytearray. files: Lib/test/test_bytes.py | 10 ++++++++++ Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 6 +++++- 3 files changed, 18 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -1233,6 +1233,16 @@ test_exhausted_iterator = test.list_tests.CommonTest.test_exhausted_iterator + def test_iterator_length_hint(self): + # Issue 27443: __length_hint__ can return negative integer + ba = bytearray(b'ab') + it = iter(ba) + next(it) + ba.clear() + # Shouldn't raise an error + self.assertEqual(list(it), []) + + class AssortedBytesTest(unittest.TestCase): # # Test various combinations of bytes and bytearray diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27443: __length_hint__() of bytearray itearator no longer return + negative integer for resized bytearray. + Library ------- diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -3192,8 +3192,12 @@ bytearrayiter_length_hint(bytesiterobject *it) { Py_ssize_t len = 0; - if (it->it_seq) + if (it->it_seq) { len = PyByteArray_GET_SIZE(it->it_seq) - it->it_index; + if (len < 0) { + len = 0; + } + } return PyLong_FromSsize_t(len); } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 3 14:04:19 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 18:04:19 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2323034=3A_The_outp?= =?utf-8?q?ut_of_a_special_Python_build_with_defined_COUNT=5FALLOCS=2C?= Message-ID: <20160703180419.882.97997.0ABB49AE@psf.io> https://hg.python.org/cpython/rev/cd911e06bf6c changeset: 102250:cd911e06bf6c user: Serhiy Storchaka date: Sun Jul 03 21:03:53 2016 +0300 summary: Issue #23034: The output of a special Python build with defined COUNT_ALLOCS, SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It can be re-enabled using the "-X showalloccount" option. It now outputs to stderr instead of stdout. files: Doc/using/cmdline.rst | 5 +++++ Doc/whatsnew/3.6.rst | 10 ++++++++++ Misc/NEWS | 5 +++++ Objects/listobject.c | 10 ++++++++++ Objects/object.c | 9 +++++++++ Objects/tupleobject.c | 10 ++++++++++ Python/pylifecycle.c | 2 +- 7 files changed, 50 insertions(+), 1 deletions(-) diff --git a/Doc/using/cmdline.rst b/Doc/using/cmdline.rst --- a/Doc/using/cmdline.rst +++ b/Doc/using/cmdline.rst @@ -397,6 +397,8 @@ stored in a traceback of a trace. Use ``-X tracemalloc=NFRAME`` to start tracing with a traceback limit of *NFRAME* frames. See the :func:`tracemalloc.start` for more information. + * ``-X showalloccount`` to enable the output of the total count of allocated + objects for each type (only works when built with ``COUNT_ALLOCS`` defined); It also allows passing arbitrary values and retrieving them through the :data:`sys._xoptions` dictionary. @@ -410,6 +412,9 @@ .. versionadded:: 3.4 The ``-X showrefcount`` and ``-X tracemalloc`` options. + .. versionadded:: 3.6 + The ``-X showalloccount`` option. + Options you shouldn't use ~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -646,6 +646,16 @@ This section lists previously described changes and other bugfixes that may require changes to your code. +Changes in 'python' Command Behavior +------------------------------------ + +* The output of a special Python build with defined ``COUNT_ALLOCS``, + ``SHOW_ALLOC_COUNT`` or ``SHOW_TRACK_COUNT`` macros is now off by + default. It can be re-enabled using the ``-X showalloccount`` option. + It now outputs to ``stderr`` instead of ``stdout``. + (Contributed by Serhiy Storchaka in :issue:`23034`.) + + Changes in the Python API ------------------------- diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,11 @@ Core and Builtins ----------------- +- Issue #23034: The output of a special Python build with defined COUNT_ALLOCS, + SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It can + be re-enabled using the "-X showalloccount" option. It now outputs to stderr + instead of stdout. + - Issue #27443: __length_hint__() of bytearray itearator no longer return negative integer for resized bytearray. diff --git a/Objects/listobject.c b/Objects/listobject.c --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -82,6 +82,16 @@ static void show_alloc(void) { + PyObject *xoptions, *value; + _Py_IDENTIFIER(showalloccount); + + xoptions = PySys_GetXOptions(); + if (xoptions == NULL) + return; + value = _PyDict_GetItemId(xoptions, &PyId_showalloccount); + if (value != Py_True) + return; + fprintf(stderr, "List allocations: %" PY_FORMAT_SIZE_T "d\n", count_alloc); fprintf(stderr, "List reuse through freelist: %" PY_FORMAT_SIZE_T diff --git a/Objects/object.c b/Objects/object.c --- a/Objects/object.c +++ b/Objects/object.c @@ -109,6 +109,15 @@ dump_counts(FILE* f) { PyTypeObject *tp; + PyObject *xoptions, *value; + _Py_IDENTIFIER(showalloccount); + + xoptions = PySys_GetXOptions(); + if (xoptions == NULL) + return; + value = _PyDict_GetItemId(xoptions, &PyId_showalloccount); + if (value != Py_True) + return; for (tp = type_list; tp; tp = tp->tp_next) fprintf(f, "%s alloc'd: %" PY_FORMAT_SIZE_T "d, " diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -36,6 +36,16 @@ static void show_track(void) { + PyObject *xoptions, *value; + _Py_IDENTIFIER(showalloccount); + + xoptions = PySys_GetXOptions(); + if (xoptions == NULL) + return; + value = _PyDict_GetItemId(xoptions, &PyId_showalloccount); + if (value != Py_True) + return; + fprintf(stderr, "Tuples created: %" PY_FORMAT_SIZE_T "d\n", count_tracked + count_untracked); fprintf(stderr, "Tuples tracked by the GC: %" PY_FORMAT_SIZE_T diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -626,7 +626,7 @@ /* Debugging stuff */ #ifdef COUNT_ALLOCS - dump_counts(stdout); + dump_counts(stderr); #endif /* dump hash stats */ _PyHash_Fini(); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 3 15:31:13 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 19:31:13 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2319527=3A_Fixed_tests_with_defined_COUNT=5FALLOC?= =?utf-8?q?S=2E?= Message-ID: <20160703193113.11194.74560.1D000848@psf.io> https://hg.python.org/cpython/rev/e7d84ecdd37d changeset: 102252:e7d84ecdd37d parent: 102250:cd911e06bf6c parent: 102251:5abf6cdcac4d user: Serhiy Storchaka date: Sun Jul 03 22:30:49 2016 +0300 summary: Issue #19527: Fixed tests with defined COUNT_ALLOCS. files: Lib/test/support/__init__.py | 3 +++ Lib/test/test_gc.py | 7 +++++-- Lib/test/test_io.py | 2 ++ Lib/test/test_logging.py | 1 + Lib/test/test_module.py | 4 +++- Lib/test/test_regrtest.py | 3 +++ Lib/test/test_sys.py | 8 ++++++-- Lib/test/test_threading.py | 4 +++- Lib/test/test_traceback.py | 1 + Lib/test/test_warnings/__init__.py | 1 + Lib/test/test_weakref.py | 1 + 11 files changed, 29 insertions(+), 6 deletions(-) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2071,6 +2071,9 @@ stderr = re.sub(br"\[\d+ refs, \d+ blocks\]\r?\n?", b"", stderr).strip() return stderr +requires_type_collecting = unittest.skipIf(hasattr(sys, 'getcounts'), + 'types are immortal if COUNT_ALLOCS is defined') + def args_from_interpreter_flags(): """Return a list of command-line arguments reproducing the current settings in sys.flags and sys.warnoptions.""" diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -1,7 +1,7 @@ import unittest from test.support import (verbose, refcount_test, run_unittest, - strip_python_stderr, cpython_only, start_threads, - temp_dir) + strip_python_stderr, cpython_only, start_threads, + temp_dir, requires_type_collecting) from test.support.script_helper import assert_python_ok, make_script import sys @@ -118,6 +118,7 @@ del a self.assertNotEqual(gc.collect(), 0) + @requires_type_collecting def test_newinstance(self): class A(object): pass @@ -678,6 +679,7 @@ stderr = run_command(code % "gc.DEBUG_SAVEALL") self.assertNotIn(b"uncollectable objects at shutdown", stderr) + @requires_type_collecting def test_gc_main_module_at_shutdown(self): # Create a reference cycle through the __main__ module and check # it gets collected at interpreter shutdown. @@ -691,6 +693,7 @@ rc, out, err = assert_python_ok('-c', code) self.assertEqual(out.strip(), b'__del__ called') + @requires_type_collecting def test_gc_ordinary_module_at_shutdown(self): # Same as above, but with a non-__main__ module. with temp_dir() as script_dir: diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -3165,6 +3165,7 @@ """.format(iomod=iomod, kwargs=kwargs) return assert_python_ok("-c", code) + @support.requires_type_collecting def test_create_at_shutdown_without_encoding(self): rc, out, err = self._check_create_at_shutdown() if err: @@ -3174,6 +3175,7 @@ else: self.assertEqual("ok", out.decode().strip()) + @support.requires_type_collecting def test_create_at_shutdown_with_encoding(self): rc, out, err = self._check_create_at_shutdown(encoding='utf-8', errors='strict') diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -3389,6 +3389,7 @@ logging.setLoggerClass(logging.Logger) self.assertEqual(logging.getLoggerClass(), logging.Logger) + @support.requires_type_collecting def test_logging_at_shutdown(self): # Issue #20037 code = """if 1: diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -1,7 +1,7 @@ # Test the module type import unittest import weakref -from test.support import gc_collect +from test.support import gc_collect, requires_type_collecting from test.support.script_helper import assert_python_ok import sys @@ -101,6 +101,7 @@ gc_collect() self.assertEqual(f().__dict__["bar"], 4) + @requires_type_collecting def test_clear_dict_in_ref_cycle(self): destroyed = [] m = ModuleType("foo") @@ -214,6 +215,7 @@ self.assertEqual(r[-len(ends_with):], ends_with, '{!r} does not end with {!r}'.format(r, ends_with)) + @requires_type_collecting def test_module_finalization_at_shutdown(self): # Module globals and builtins should still be available during shutdown rc, out, err = assert_python_ok("-c", "from test import final_a") diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -763,6 +763,9 @@ with open(filename) as fp: reflog = fp.read() + if hasattr(sys, 'getcounts'): + # Types are immportal if COUNT_ALLOCS is defined + reflog = reflog.splitlines(True)[-1] self.assertEqual(reflog, line2) def test_list_tests(self): diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -803,6 +803,7 @@ c = sys.getallocatedblocks() self.assertIn(c, range(b - 50, b + 50)) + @test.support.requires_type_collecting def test_is_finalizing(self): self.assertIs(sys.is_finalizing(), False) # Don't use the atexit module because _Py_Finalizing is only set @@ -1083,9 +1084,12 @@ check((1,2,3), vsize('') + 3*self.P) # type # static type: PyTypeObject - s = vsize('P2n15Pl4Pn9Pn11PIP') + fmt = 'P2n15Pl4Pn9Pn11PIP' + if hasattr(sys, 'getcounts'): + fmt += '3n2P' + s = vsize(fmt) check(int, s) - s = vsize('P2n15Pl4Pn9Pn11PIP' # PyTypeObject + s = vsize(fmt + # PyTypeObject '3P' # PyAsyncMethods '36P' # PyNumberMethods '3P' # PyMappingMethods diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -3,7 +3,8 @@ """ import test.support -from test.support import verbose, import_module, cpython_only +from test.support import (verbose, import_module, cpython_only, + requires_type_collecting) from test.support.script_helper import assert_python_ok, assert_python_failure import random @@ -987,6 +988,7 @@ self.assertIn("ZeroDivisionError", err) self.assertNotIn("Unhandled exception", err) + @requires_type_collecting def test_print_exception_stderr_is_none_1(self): script = r"""if True: import sys diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -178,6 +178,7 @@ # Issue #18960: coding spec should have no effect do_test("x=0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5) + @support.requires_type_collecting def test_print_traceback_at_exit(self): # Issue #22599: Ensure that it is possible to use the traceback module # to display an exception at Python exit diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -1035,6 +1035,7 @@ class FinalizationTest(unittest.TestCase): + @support.requires_type_collecting def test_finalization(self): # Issue #19421: warnings.warn() should not crash # during Python finalization diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -589,6 +589,7 @@ del c1, c2, C, D gc.collect() + @support.requires_type_collecting def test_callback_in_cycle_resurrection(self): import gc -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 3 15:31:13 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 03 Jul 2016 19:31:13 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzE5NTI3?= =?utf-8?q?=3A_Fixed_tests_with_defined_COUNT=5FALLOCS=2E?= Message-ID: <20160703193113.1956.15636.3AE6B419@psf.io> https://hg.python.org/cpython/rev/5abf6cdcac4d changeset: 102251:5abf6cdcac4d branch: 3.5 parent: 102248:6b084bb6c38b user: Serhiy Storchaka date: Sun Jul 03 22:27:26 2016 +0300 summary: Issue #19527: Fixed tests with defined COUNT_ALLOCS. files: Lib/test/support/__init__.py | 3 +++ Lib/test/test_gc.py | 7 +++++-- Lib/test/test_io.py | 2 ++ Lib/test/test_logging.py | 1 + Lib/test/test_module.py | 4 +++- Lib/test/test_sys.py | 8 ++++++-- Lib/test/test_threading.py | 4 +++- Lib/test/test_traceback.py | 1 + Lib/test/test_warnings/__init__.py | 1 + Lib/test/test_weakref.py | 1 + 10 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -2069,6 +2069,9 @@ stderr = re.sub(br"\[\d+ refs, \d+ blocks\]\r?\n?", b"", stderr).strip() return stderr +requires_type_collecting = unittest.skipIf(hasattr(sys, 'getcounts'), + 'types are immortal if COUNT_ALLOCS is defined') + def args_from_interpreter_flags(): """Return a list of command-line arguments reproducing the current settings in sys.flags and sys.warnoptions.""" diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py --- a/Lib/test/test_gc.py +++ b/Lib/test/test_gc.py @@ -1,7 +1,7 @@ import unittest from test.support import (verbose, refcount_test, run_unittest, - strip_python_stderr, cpython_only, start_threads, - temp_dir) + strip_python_stderr, cpython_only, start_threads, + temp_dir, requires_type_collecting) from test.support.script_helper import assert_python_ok, make_script import sys @@ -118,6 +118,7 @@ del a self.assertNotEqual(gc.collect(), 0) + @requires_type_collecting def test_newinstance(self): class A(object): pass @@ -678,6 +679,7 @@ stderr = run_command(code % "gc.DEBUG_SAVEALL") self.assertNotIn(b"uncollectable objects at shutdown", stderr) + @requires_type_collecting def test_gc_main_module_at_shutdown(self): # Create a reference cycle through the __main__ module and check # it gets collected at interpreter shutdown. @@ -692,6 +694,7 @@ rc, out, err = assert_python_ok('-c', code) self.assertEqual(out.strip(), b'__del__ called') + @requires_type_collecting def test_gc_ordinary_module_at_shutdown(self): # Same as above, but with a non-__main__ module. with temp_dir() as script_dir: diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -3135,6 +3135,7 @@ """.format(iomod=iomod, kwargs=kwargs) return assert_python_ok("-c", code) + @support.requires_type_collecting def test_create_at_shutdown_without_encoding(self): rc, out, err = self._check_create_at_shutdown() if err: @@ -3144,6 +3145,7 @@ else: self.assertEqual("ok", out.decode().strip()) + @support.requires_type_collecting def test_create_at_shutdown_with_encoding(self): rc, out, err = self._check_create_at_shutdown(encoding='utf-8', errors='strict') diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -3389,6 +3389,7 @@ logging.setLoggerClass(logging.Logger) self.assertEqual(logging.getLoggerClass(), logging.Logger) + @support.requires_type_collecting def test_logging_at_shutdown(self): # Issue #20037 code = """if 1: diff --git a/Lib/test/test_module.py b/Lib/test/test_module.py --- a/Lib/test/test_module.py +++ b/Lib/test/test_module.py @@ -1,7 +1,7 @@ # Test the module type import unittest import weakref -from test.support import gc_collect +from test.support import gc_collect, requires_type_collecting from test.support.script_helper import assert_python_ok import sys @@ -101,6 +101,7 @@ gc_collect() self.assertEqual(f().__dict__["bar"], 4) + @requires_type_collecting def test_clear_dict_in_ref_cycle(self): destroyed = [] m = ModuleType("foo") @@ -214,6 +215,7 @@ self.assertEqual(r[-len(ends_with):], ends_with, '{!r} does not end with {!r}'.format(r, ends_with)) + @requires_type_collecting def test_module_finalization_at_shutdown(self): # Module globals and builtins should still be available during shutdown rc, out, err = assert_python_ok("-c", "from test import final_a") diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py --- a/Lib/test/test_sys.py +++ b/Lib/test/test_sys.py @@ -803,6 +803,7 @@ c = sys.getallocatedblocks() self.assertIn(c, range(b - 50, b + 50)) + @test.support.requires_type_collecting def test_is_finalizing(self): self.assertIs(sys.is_finalizing(), False) # Don't use the atexit module because _Py_Finalizing is only set @@ -1083,9 +1084,12 @@ check((1,2,3), vsize('') + 3*self.P) # type # static type: PyTypeObject - s = vsize('P2n15Pl4Pn9Pn11PIP') + fmt = 'P2n15Pl4Pn9Pn11PIP' + if hasattr(sys, 'getcounts'): + fmt += '3n2P' + s = vsize(fmt) check(int, s) - s = vsize('P2n15Pl4Pn9Pn11PIP' # PyTypeObject + s = vsize(fmt + # PyTypeObject '3P' # PyAsyncMethods '36P' # PyNumberMethods '3P' # PyMappingMethods diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -3,7 +3,8 @@ """ import test.support -from test.support import verbose, strip_python_stderr, import_module, cpython_only +from test.support import (verbose, import_module, cpython_only, + requires_type_collecting) from test.support.script_helper import assert_python_ok, assert_python_failure import random @@ -987,6 +988,7 @@ self.assertIn("ZeroDivisionError", err) self.assertNotIn("Unhandled exception", err) + @requires_type_collecting def test_print_exception_stderr_is_none_1(self): script = r"""if True: import sys diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -178,6 +178,7 @@ # Issue #18960: coding spec should has no effect do_test("0\n# coding: GBK\n", "h\xe9 ho", 'utf-8', 5) + @support.requires_type_collecting def test_print_traceback_at_exit(self): # Issue #22599: Ensure that it is possible to use the traceback module # to display an exception at Python exit diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -990,6 +990,7 @@ class FinalizationTest(unittest.TestCase): + @support.requires_type_collecting def test_finalization(self): # Issue #19421: warnings.warn() should not crash # during Python finalization diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -589,6 +589,7 @@ del c1, c2, C, D gc.collect() + @support.requires_type_collecting def test_callback_in_cycle_resurrection(self): import gc -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 3 19:11:30 2016 From: python-checkins at python.org (terry.reedy) Date: Sun, 03 Jul 2016 23:11:30 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_27437=3A_Add_query?= =?utf-8?q?=2EModuleName_and_use_it_for_file_=3D=3E_Load_Module=2E?= Message-ID: <20160703231130.10835.15734.CC1D204D@psf.io> https://hg.python.org/cpython/rev/78a3d3700233 changeset: 102253:78a3d3700233 user: Terry Jan Reedy date: Sun Jul 03 19:11:13 2016 -0400 summary: Issue 27437: Add query.ModuleName and use it for file => Load Module. Users can now edit bad entries instead of starting over. files: Lib/idlelib/README.txt | 6 +- Lib/idlelib/editor.py | 58 ++----- Lib/idlelib/idle_test/htest.py | 5 +- Lib/idlelib/idle_test/test_query.py | 110 +++++++++++++-- Lib/idlelib/query.py | 83 +++++++++-- 5 files changed, 185 insertions(+), 77 deletions(-) diff --git a/Lib/idlelib/README.txt b/Lib/idlelib/README.txt --- a/Lib/idlelib/README.txt +++ b/Lib/idlelib/README.txt @@ -41,7 +41,6 @@ configdialog.py # Display user configuration dialogs. config_help.py # Specify help source in configdialog. config_key.py # Change keybindings. -config_sec.py # Spefify user config section name dynoption.py # Define mutable OptionMenu widget (nim). debugobj.py # Define class used in stackviewer. debugobj_r.py # Communicate objects between processes with rpc (nim). @@ -66,6 +65,7 @@ percolator.py # Manage delegator stack (nim). pyparse.py # Give information on code indentation pyshell.py # Start IDLE, manage shell, complete editor window +query.py # Query user for informtion redirector.py # Intercept widget subcommands (for percolator) (nim). replace.py # Search and replace pattern in text. rpc.py # Commuicate between idle and user processes (nim). @@ -192,8 +192,8 @@ Configure IDLE # eEW.config_dialog, configdialog (tabs in the dialog) Font tab # config-main.def - Highlight tab # config_sec, config-highlight.def - Keys tab # config_key, configconfig_secg-keus.def + Highlight tab # query, config-highlight.def + Keys tab # query, config_key, config_keys.def General tab # config_help, config-main.def Extensions tab # config-extensions.def, corresponding .py --- diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -14,6 +14,7 @@ import webbrowser from idlelib.multicall import MultiCallCreator +from idlelib import query from idlelib import windows from idlelib import search from idlelib import grep @@ -573,46 +574,27 @@ text.see("insert") def open_module(self, event=None): - # XXX Shouldn't this be in IOBinding? + """Get module name from user and open it. + + Return module path or None for calls by open_class_browser + when latter is not invoked in named editor window. + """ + # XXX This, open_class_browser, and open_path_browser + # would fit better in iomenu.IOBinding. try: - name = self.text.get("sel.first", "sel.last") + name = self.text.get("sel.first", "sel.last").strip() except TclError: - name = "" - else: - name = name.strip() - name = tkSimpleDialog.askstring("Module", - "Enter the name of a Python module\n" - "to search on sys.path and open:", - parent=self.text, initialvalue=name) - if name: - name = name.strip() - if not name: - return - # XXX Ought to insert current file's directory in front of path - try: - spec = importlib.util.find_spec(name) - except (ValueError, ImportError) as msg: - tkMessageBox.showerror("Import error", str(msg), parent=self.text) - return - if spec is None: - tkMessageBox.showerror("Import error", "module not found", - parent=self.text) - return - if not isinstance(spec.loader, importlib.abc.SourceLoader): - tkMessageBox.showerror("Import error", "not a source-based module", - parent=self.text) - return - try: - file_path = spec.loader.get_filename(name) - except AttributeError: - tkMessageBox.showerror("Import error", - "loader does not support get_filename", - parent=self.text) - return - if self.flist: - self.flist.open(file_path) - else: - self.io.loadfile(file_path) + name = '' + file_path = query.ModuleName( + self.text, "Open Module", + "Enter the name of a Python module\n" + "to search on sys.path and open:", + name).result + if file_path is not None: + if self.flist: + self.flist.open(file_path) + else: + self.io.loadfile(file_path) return file_path def open_class_browser(self, event=None): diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py --- a/Lib/idlelib/idle_test/htest.py +++ b/Lib/idlelib/idle_test/htest.py @@ -235,8 +235,9 @@ Query_spec = { 'file': 'query', - 'kwds': {'title':'Query', - 'message':'Enter something', + 'kwds': {'title': 'Query', + 'message': 'Enter something', + 'text0': 'Go', '_htest': True}, 'msg': "Enter with or [Ok]. Print valid entry to Shell\n" "Blank line, after stripping, is ignored\n" diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py --- a/Lib/idlelib/idle_test/test_query.py +++ b/Lib/idlelib/idle_test/test_query.py @@ -8,8 +8,8 @@ from unittest import mock from idlelib.idle_test.mock_tk import Var, Mbox_func from idlelib import query -Query, SectionName = query.Query, query.SectionName +Query = query.Query class Dummy_Query: # Mock for testing the following methods Query entry_ok = Query.entry_ok @@ -23,7 +23,7 @@ self.destroyed = True # entry_ok calls modal messagebox.showerror if entry is not ok. -# Mock showerrer returns, so don't need to click to continue. +# Mock showerrer so don't need to click to continue. orig_showerror = query.showerror showerror = Mbox_func() # Instance has __call__ method. @@ -46,7 +46,7 @@ dialog = self.dialog Equal = self.assertEqual dialog.entry.set(' ') - Equal(dialog.entry_ok(), '') + Equal(dialog.entry_ok(), None) Equal((dialog.result, dialog.destroyed), (None, False)) Equal(showerror.title, 'Entry Error') self.assertIn('Blank', showerror.message) @@ -74,44 +74,41 @@ class Dummy_SectionName: - # Mock for testing the following method of Section_Name - entry_ok = SectionName.entry_ok - # Attributes, constant or variable, needed for tests + entry_ok = query.SectionName.entry_ok # Test override. used_names = ['used'] entry = Var() class SectionNameTest(unittest.TestCase): dialog = Dummy_SectionName() - def setUp(self): showerror.title = None - def test_blank_name(self): + def test_blank_section_name(self): dialog = self.dialog Equal = self.assertEqual dialog.entry.set(' ') - Equal(dialog.entry_ok(), '') + Equal(dialog.entry_ok(), None) Equal(showerror.title, 'Name Error') self.assertIn('No', showerror.message) - def test_used_name(self): + def test_used_section_name(self): dialog = self.dialog Equal = self.assertEqual dialog.entry.set('used') - Equal(self.dialog.entry_ok(), '') + Equal(self.dialog.entry_ok(), None) Equal(showerror.title, 'Name Error') self.assertIn('use', showerror.message) - def test_long_name(self): + def test_long_section_name(self): dialog = self.dialog Equal = self.assertEqual dialog.entry.set('good'*8) - Equal(self.dialog.entry_ok(), '') + Equal(self.dialog.entry_ok(), None) Equal(showerror.title, 'Name Error') self.assertIn('too long', showerror.message) - def test_good_entry(self): + def test_good_section_name(self): dialog = self.dialog Equal = self.assertEqual dialog.entry.set(' good ') @@ -119,13 +116,56 @@ Equal(showerror.title, None) +class Dummy_ModuleName: + entry_ok = query.ModuleName.entry_ok # Test override + text0 = '' + entry = Var() + +class ModuleNameTest(unittest.TestCase): + dialog = Dummy_ModuleName() + + def setUp(self): + showerror.title = None + + def test_blank_module_name(self): + dialog = self.dialog + Equal = self.assertEqual + dialog.entry.set(' ') + Equal(dialog.entry_ok(), None) + Equal(showerror.title, 'Name Error') + self.assertIn('No', showerror.message) + + def test_bogus_module_name(self): + dialog = self.dialog + Equal = self.assertEqual + dialog.entry.set('__name_xyz123_should_not_exist__') + Equal(self.dialog.entry_ok(), None) + Equal(showerror.title, 'Import Error') + self.assertIn('not found', showerror.message) + + def test_c_source_name(self): + dialog = self.dialog + Equal = self.assertEqual + dialog.entry.set('itertools') + Equal(self.dialog.entry_ok(), None) + Equal(showerror.title, 'Import Error') + self.assertIn('source-based', showerror.message) + + def test_good_module_name(self): + dialog = self.dialog + Equal = self.assertEqual + dialog.entry.set('idlelib') + self.assertTrue(dialog.entry_ok().endswith('__init__.py')) + Equal(showerror.title, None) + + class QueryGuiTest(unittest.TestCase): @classmethod def setUpClass(cls): requires('gui') - cls.root = Tk() - cls.dialog = Query(cls.root, 'TEST', 'test', _utest=True) + cls.root = root = Tk() + cls.dialog = Query(root, 'TEST', 'test', _utest=True) cls.dialog.destroy = mock.Mock() @classmethod @@ -160,5 +200,43 @@ self.assertTrue(dialog.destroy.called) +class SectionnameGuiTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + + def test_click_section_name(self): + root = Tk() + dialog = query.SectionName(root, 'T', 't', {'abc'}, _utest=True) + Equal = self.assertEqual + Equal(dialog.used_names, {'abc'}) + dialog.entry.insert(0, 'okay') + dialog.button_ok.invoke() + Equal(dialog.result, 'okay') + del dialog + root.destroy() + del root + + +class ModulenameGuiTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + + def test_click_module_name(self): + root = Tk() + dialog = query.ModuleName(root, 'T', 't', 'idlelib', _utest=True) + Equal = self.assertEqual + Equal(dialog.text0, 'idlelib') + Equal(dialog.entry.get(), 'idlelib') + dialog.button_ok.invoke() + self.assertTrue(dialog.result.endswith('__init__.py')) + del dialog + root.destroy() + del root + + if __name__ == '__main__': unittest.main(verbosity=2, exit=False) diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py --- a/Lib/idlelib/query.py +++ b/Lib/idlelib/query.py @@ -15,7 +15,8 @@ # of configSectionNameDialog.py (temporarily config_sec.py) into # generic and specific parts. -from tkinter import FALSE, TRUE, Toplevel +import importlib +from tkinter import Toplevel, StringVar from tkinter.messagebox import showerror from tkinter.ttk import Frame, Button, Entry, Label @@ -24,20 +25,22 @@ For this base class, accept any non-blank string. """ - def __init__(self, parent, title, message, - *, _htest=False, _utest=False): # Call from override. + def __init__(self, parent, title, message, text0='', + *, _htest=False, _utest=False): """Create popup, do not return until tk widget destroyed. - Additional subclass init must be done before calling this. + Additional subclass init must be done before calling this + unless _utest=True is passed to suppress wait_window(). title - string, title of popup dialog message - string, informational message to display + text0 - initial value for entry _htest - bool, change box location when running htest _utest - bool, leave window hidden and not modal """ Toplevel.__init__(self, parent) self.configure(borderwidth=5) - self.resizable(height=FALSE, width=FALSE) + self.resizable(height=False, width=False) self.title(title) self.transient(parent) self.grab_set() @@ -45,6 +48,7 @@ self.protocol("WM_DELETE_WINDOW", self.cancel) self.parent = parent self.message = message + self.text0 = text0 self.create_widgets() self.update_idletasks() #needs to be done here so that the winfo_reqwidth is valid @@ -62,31 +66,34 @@ self.wait_window() def create_widgets(self): # Call from override, if any. + # Bind widgets needed for entry_ok or unittest to self. frame = Frame(self, borderwidth=2, relief='sunken', ) label = Label(frame, anchor='w', justify='left', text=self.message) - self.entry = Entry(frame, width=30) # Bind name for entry_ok. + self.entryvar = StringVar(self, self.text0) + self.entry = Entry(frame, width=30, textvariable=self.entryvar) self.entry.focus_set() - buttons = Frame(self) # Bind buttons for invoke in unittest. + buttons = Frame(self) self.button_ok = Button(buttons, text='Ok', width=8, command=self.ok) self.button_cancel = Button(buttons, text='Cancel', width=8, command=self.cancel) - frame.pack(side='top', expand=TRUE, fill='both') + frame.pack(side='top', expand=True, fill='both') label.pack(padx=5, pady=5) self.entry.pack(padx=5, pady=5) buttons.pack(side='bottom') self.button_ok.pack(side='left', padx=5) self.button_cancel.pack(side='right', padx=5) - def entry_ok(self): # Usually replace. - "Check that entry not blank." + def entry_ok(self): # Example: usually replace. + "Return non-blank entry or None." entry = self.entry.get().strip() if not entry: showerror(title='Entry Error', message='Blank line.', parent=self) + return return entry def ok(self, event=None): # Do not replace. @@ -95,7 +102,7 @@ Otherwise leave dialog open for user to correct entry or cancel. ''' entry = self.entry_ok() - if entry: + if entry is not None: self.result = entry self.destroy() else: @@ -114,32 +121,72 @@ def __init__(self, parent, title, message, used_names, *, _htest=False, _utest=False): "used_names - collection of strings already in use" - self.used_names = used_names Query.__init__(self, parent, title, message, _htest=_htest, _utest=_utest) - # This call does ot return until tk widget is destroyed. def entry_ok(self): - '''Stripping entered name, check that it is a sensible - ConfigParser file section name. Return it if it is, '' if not. - ''' + "Return sensible ConfigParser section name or None." name = self.entry.get().strip() if not name: showerror(title='Name Error', message='No name specified.', parent=self) + return elif len(name)>30: showerror(title='Name Error', message='Name too long. It should be no more than '+ '30 characters.', parent=self) - name = '' + return elif name in self.used_names: showerror(title='Name Error', message='This name is already in use.', parent=self) - name = '' + return return name +class ModuleName(Query): + "Get a module name for Open Module menu entry." + # Used in open_module (editor.EditorWindow until move to iobinding). + + def __init__(self, parent, title, message, text0='', + *, _htest=False, _utest=False): + """text0 - name selected in text before Open Module invoked" + """ + Query.__init__(self, parent, title, message, text0=text0, + _htest=_htest, _utest=_utest) + + def entry_ok(self): + "Return entered module name as file path or None." + # Moved here from Editor_Window.load_module 2016 July. + name = self.entry.get().strip() + if not name: + showerror(title='Name Error', + message='No name specified.', parent=self) + return + # XXX Ought to insert current file's directory in front of path + try: + spec = importlib.util.find_spec(name) + except (ValueError, ImportError) as msg: + showerror("Import Error", str(msg), parent=self) + return + if spec is None: + showerror("Import Error", "module not found", + parent=self) + return + if not isinstance(spec.loader, importlib.abc.SourceLoader): + showerror("Import Error", "not a source-based module", + parent=self) + return + try: + file_path = spec.loader.get_filename(name) + except AttributeError: + showerror("Import Error", + "loader does not support get_filename", + parent=self) + return + return file_path + + if __name__ == '__main__': import unittest unittest.main('idlelib.idle_test.test_query', verbosity=2, exit=False) -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Mon Jul 4 04:54:54 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Mon, 04 Jul 2016 08:54:54 +0000 Subject: [Python-checkins] Daily reference leaks (78a3d3700233): sum=7 Message-ID: <20160704085454.83075.45663.8A81ADDD@psf.io> results for 78a3d3700233 on branch "default" -------------------------------------------- test_asyncio leaked [0, 3, 0] memory blocks, sum=3 test_collections leaked [0, -4, 4] memory blocks, sum=0 test_functools leaked [0, 3, 1] memory blocks, sum=4 test_multiprocessing_spawn leaked [0, -2, 2] memory blocks, sum=0 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflog_o17i6', '--timeout', '7200'] From lp_benchmark_robot at intel.com Mon Jul 4 06:56:19 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 4 Jul 2016 11:56:19 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-04 Message-ID: <8778e001-766b-4e55-ad3e-5ac46b60231a@irsmsx103.ger.corp.intel.com> Results for project Python default, build date 2016-07-04 02:03:04 +0000 commit: 78a3d3700233 previous commit: 8d7bde14d7a4 revision date: 2016-07-03 23:11:13 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.19% 0.52% 11.54% 13.92% :-| pybench 0.07% 0.04% 1.53% 8.61% :-( regex_v8 2.56% -0.38% -2.79% 7.00% :-| nbody 0.10% -0.86% -1.51% 13.29% :-| json_dump_v2 0.24% -0.71% -1.73% 10.15% :-| normal_startup 0.91% 0.08% 1.10% 5.62% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-04/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Mon Jul 4 06:58:00 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 4 Jul 2016 11:58:00 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python 2.7 2016-07-04 Message-ID: <7d279375-538b-43b1-83c2-d02c0f81eae9@irsmsx103.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-04 02:47:20 +0000 commit: b0e8a2e7c361 previous commit: 8f1d3ebdbc56 revision date: 2016-07-03 07:53:39 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.13% -0.91% 3.74% 6.45% :-) pybench 0.21% -0.20% 5.60% 4.79% :-( regex_v8 0.50% -0.16% -2.60% 10.28% :-) nbody 0.05% 0.34% 9.30% 0.56% :-| json_dump_v2 0.32% -1.00% 0.72% 13.02% :-( normal_startup 1.62% -0.05% -5.83% 1.67% :-) ssbench 0.21% -0.08% 2.25% 1.28% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-2-7-2016-07-04/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From solipsis at pitrou.net Tue Jul 5 04:53:29 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Tue, 05 Jul 2016 08:53:29 +0000 Subject: [Python-checkins] Daily reference leaks (78a3d3700233): sum=3 Message-ID: <20160705085329.31086.49148.1EF13494@psf.io> results for 78a3d3700233 on branch "default" -------------------------------------------- test_asyncio leaked [0, 0, 3] memory blocks, sum=3 test_collections leaked [0, -4, 0] memory blocks, sum=-4 test_functools leaked [0, 3, 1] memory blocks, sum=4 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogaFR3LM', '--timeout', '7200'] From lp_benchmark_robot at intel.com Tue Jul 5 05:40:25 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 5 Jul 2016 10:40:25 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-05 Message-ID: <8adc3a06-b85b-4097-844b-b230039338bb@irsmsx103.ger.corp.intel.com> No new revisions. Here are the previous results: Results for project Python default, build date 2016-07-05 02:03:08 +0000 commit: 78a3d3700233 previous commit: 8d7bde14d7a4 revision date: 2016-07-03 23:11:13 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.19% 0.52% 11.54% 13.92% :-| pybench 0.07% 0.04% 1.53% 8.61% :-( regex_v8 2.56% -0.38% -2.79% 7.00% :-| nbody 0.10% -0.86% -1.51% 13.29% :-| json_dump_v2 0.24% -0.71% -1.73% 10.15% :-| normal_startup 0.91% 0.08% 1.10% 5.62% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-05/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Tue Jul 5 05:41:27 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 5 Jul 2016 10:41:27 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python 2.7 2016-07-05 Message-ID: <7c3eb836-3052-47ed-9444-b026279caa83@irsmsx103.ger.corp.intel.com> No new revisions. Here are the previous results: Results for project Python 2.7, build date 2016-07-05 02:05:15 +0000 commit: b0e8a2e7c361 previous commit: 8f1d3ebdbc56 revision date: 2016-07-03 07:53:39 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.13% -0.91% 3.74% 6.45% :-) pybench 0.21% -0.20% 5.60% 4.79% :-( regex_v8 0.50% -0.16% -2.60% 10.28% :-) nbody 0.05% 0.34% 9.30% 0.56% :-| json_dump_v2 0.32% -1.00% 0.72% 13.02% :-( normal_startup 1.62% -0.05% -5.83% 1.67% :-) ssbench 0.21% -0.08% 2.25% 1.28% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-2-7-2016-07-05/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Tue Jul 5 10:06:37 2016 From: python-checkins at python.org (berker.peksag) Date: Tue, 05 Jul 2016 14:06:37 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Add_versionadd?= =?utf-8?q?ed_to_PyDict=5FSetDefault_documentation?= Message-ID: <20160705140631.11087.37218.0E911375@psf.io> https://hg.python.org/cpython/rev/e0d9d275dd4e changeset: 102254:e0d9d275dd4e branch: 3.5 parent: 102251:5abf6cdcac4d user: Berker Peksag date: Tue Jul 05 17:08:29 2016 +0300 summary: Add versionadded to PyDict_SetDefault documentation It was added for Python 3.4 in a0b750ea3397. files: Doc/c-api/dict.rst | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Doc/c-api/dict.rst b/Doc/c-api/dict.rst --- a/Doc/c-api/dict.rst +++ b/Doc/c-api/dict.rst @@ -118,6 +118,7 @@ is returned. This function evaluates the hash function of *key* only once, instead of evaluating it independently for the lookup and the insertion. + .. versionadded:: 3.4 .. c:function:: PyObject* PyDict_Items(PyObject *p) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 5 10:06:41 2016 From: python-checkins at python.org (berker.peksag) Date: Tue, 05 Jul 2016 14:06:41 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_from_3=2E5?= Message-ID: <20160705140632.72077.43188.BBE9CA3A@psf.io> https://hg.python.org/cpython/rev/682a8e36dd18 changeset: 102255:682a8e36dd18 parent: 102253:78a3d3700233 parent: 102254:e0d9d275dd4e user: Berker Peksag date: Tue Jul 05 17:08:52 2016 +0300 summary: Merge from 3.5 files: Doc/c-api/dict.rst | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Doc/c-api/dict.rst b/Doc/c-api/dict.rst --- a/Doc/c-api/dict.rst +++ b/Doc/c-api/dict.rst @@ -118,6 +118,7 @@ is returned. This function evaluates the hash function of *key* only once, instead of evaluating it independently for the lookup and the insertion. + .. versionadded:: 3.4 .. c:function:: PyObject* PyDict_Items(PyObject *p) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 5 20:12:00 2016 From: python-checkins at python.org (terry.reedy) Date: Wed, 06 Jul 2016 00:12:00 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3NDUy?= =?utf-8?q?=3A_add_line_counter_and_crc_to_IDLE_configHandler_test_dump=2E?= Message-ID: <20160706001200.11194.43462.1A9214D9@psf.io> https://hg.python.org/cpython/rev/da83e115afea changeset: 102256:da83e115afea branch: 2.7 parent: 102245:b0e8a2e7c361 user: Terry Jan Reedy date: Tue Jul 05 20:09:45 2016 -0400 summary: Issue #27452: add line counter and crc to IDLE configHandler test dump. files: Lib/idlelib/configHandler.py | 31 ++++++++++++++++------- 1 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py --- a/Lib/idlelib/configHandler.py +++ b/Lib/idlelib/configHandler.py @@ -741,21 +741,32 @@ idleConf = IdleConf() # TODO Revise test output, write expanded unittest -### module test +# if __name__ == '__main__': + from zlib import crc32 + line, crc = 0, 0 + + def sprint(obj): + global line, crc + txt = str(obj) + line += 1 + crc = crc32(txt.encode(encoding='utf-8'), crc) + print(txt) + #print('***', line, crc, '***') # uncomment for diagnosis + def dumpCfg(cfg): - print('\n', cfg, '\n') - for key in cfg: + print('\n', cfg, '\n') # has variable '0xnnnnnnnn' addresses + for key in sorted(cfg.keys()): sections = cfg[key].sections() - print(key) - print(sections) + sprint(key) + sprint(sections) for section in sections: options = cfg[key].options(section) - print(section) - print(options) + sprint(section) + sprint(options) for option in options: - print(option, '=', cfg[key].Get(section, option)) + sprint(option + ' = ' + cfg[key].Get(section, option)) + dumpCfg(idleConf.defaultCfg) dumpCfg(idleConf.userCfg) - print(idleConf.userCfg['main'].Get('Theme', 'name')) - #print(idleConf.userCfg['highlight'].GetDefHighlight('Foo','normal')) + print('\nlines = ', line, ', crc = ', crc, sep='') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 5 20:12:00 2016 From: python-checkins at python.org (terry.reedy) Date: Wed, 06 Jul 2016 00:12:00 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDUy?= =?utf-8?q?=3A_add_line_counter_and_crc_to_IDLE_configHandler_test_dump=2E?= Message-ID: <20160706001200.31301.97397.29813381@psf.io> https://hg.python.org/cpython/rev/127569004538 changeset: 102257:127569004538 branch: 3.5 parent: 102254:e0d9d275dd4e user: Terry Jan Reedy date: Tue Jul 05 20:09:53 2016 -0400 summary: Issue #27452: add line counter and crc to IDLE configHandler test dump. files: Lib/idlelib/configHandler.py | 31 ++++++++++++++++------- 1 files changed, 21 insertions(+), 10 deletions(-) diff --git a/Lib/idlelib/configHandler.py b/Lib/idlelib/configHandler.py --- a/Lib/idlelib/configHandler.py +++ b/Lib/idlelib/configHandler.py @@ -740,21 +740,32 @@ idleConf = IdleConf() # TODO Revise test output, write expanded unittest -### module test +# if __name__ == '__main__': + from zlib import crc32 + line, crc = 0, 0 + + def sprint(obj): + global line, crc + txt = str(obj) + line += 1 + crc = crc32(txt.encode(encoding='utf-8'), crc) + print(txt) + #print('***', line, crc, '***') # uncomment for diagnosis + def dumpCfg(cfg): - print('\n', cfg, '\n') - for key in cfg: + print('\n', cfg, '\n') # has variable '0xnnnnnnnn' addresses + for key in sorted(cfg.keys()): sections = cfg[key].sections() - print(key) - print(sections) + sprint(key) + sprint(sections) for section in sections: options = cfg[key].options(section) - print(section) - print(options) + sprint(section) + sprint(options) for option in options: - print(option, '=', cfg[key].Get(section, option)) + sprint(option + ' = ' + cfg[key].Get(section, option)) + dumpCfg(idleConf.defaultCfg) dumpCfg(idleConf.userCfg) - print(idleConf.userCfg['main'].Get('Theme', 'name')) - #print idleConf.userCfg['highlight'].GetDefHighlight('Foo','normal') + print('\nlines = ', line, ', crc = ', crc, sep='') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 5 20:12:00 2016 From: python-checkins at python.org (terry.reedy) Date: Wed, 06 Jul 2016 00:12:00 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327452=3A_add_line_counter_and_crc_to_IDLE_confi?= =?utf-8?q?g_test_dump=2E?= Message-ID: <20160706001200.10816.56221.7A413407@psf.io> https://hg.python.org/cpython/rev/c2e21bc83066 changeset: 102258:c2e21bc83066 parent: 102255:682a8e36dd18 parent: 102257:127569004538 user: Terry Jan Reedy date: Tue Jul 05 20:11:37 2016 -0400 summary: Issue #27452: add line counter and crc to IDLE config test dump. files: Lib/idlelib/config.py | 29 ++++++++++++++++++++--------- 1 files changed, 20 insertions(+), 9 deletions(-) diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py --- a/Lib/idlelib/config.py +++ b/Lib/idlelib/config.py @@ -738,19 +738,30 @@ # TODO Revise test output, write expanded unittest # if __name__ == '__main__': + from zlib import crc32 + line, crc = 0, 0 + + def sprint(obj): + global line, crc + txt = str(obj) + line += 1 + crc = crc32(txt.encode(encoding='utf-8'), crc) + print(txt) + #print('***', line, crc, '***') # uncomment for diagnosis + def dumpCfg(cfg): - print('\n', cfg, '\n') - for key in cfg: + print('\n', cfg, '\n') # has variable '0xnnnnnnnn' addresses + for key in sorted(cfg.keys()): sections = cfg[key].sections() - print(key) - print(sections) + sprint(key) + sprint(sections) for section in sections: options = cfg[key].options(section) - print(section) - print(options) + sprint(section) + sprint(options) for option in options: - print(option, '=', cfg[key].Get(section, option)) + sprint(option + ' = ' + cfg[key].Get(section, option)) + dumpCfg(idleConf.defaultCfg) dumpCfg(idleConf.userCfg) - print(idleConf.userCfg['main'].Get('Theme', 'name')) - #print idleConf.userCfg['highlight'].GetDefHighlight('Foo','normal') + print('\nlines = ', line, ', crc = ', crc, sep='') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 5 21:52:14 2016 From: python-checkins at python.org (terry.reedy) Date: Wed, 06 Jul 2016 01:52:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327452=3A_make_com?= =?utf-8?q?mand_line_idle-test=3E_python_test=5Fhelp=2Epy_work=2E?= Message-ID: <20160706015213.11009.16706.A943F341@psf.io> https://hg.python.org/cpython/rev/adbeef96ae95 changeset: 102259:adbeef96ae95 user: Terry Jan Reedy date: Tue Jul 05 21:51:56 2016 -0400 summary: Issue #27452: make command line idle-test> python test_help.py work. __file__ is relative in this case. files: Lib/idlelib/idle_test/test_help.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/idlelib/idle_test/test_help.py b/Lib/idlelib/idle_test/test_help.py --- a/Lib/idlelib/idle_test/test_help.py +++ b/Lib/idlelib/idle_test/test_help.py @@ -16,7 +16,7 @@ "By itself, this tests that file parsed without exception." cls.root = root = Tk() root.withdraw() - helpfile = join(abspath(dirname(dirname(__file__))), 'help.html') + helpfile = join(dirname(dirname(abspath(__file__))), 'help.html') cls.frame = help.HelpFrame(root, helpfile) @classmethod -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Wed Jul 6 04:54:01 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Wed, 06 Jul 2016 08:54:01 +0000 Subject: [Python-checkins] Daily reference leaks (adbeef96ae95): sum=5 Message-ID: <20160706085356.32365.16221.171B9863@psf.io> results for adbeef96ae95 on branch "default" -------------------------------------------- test_collections leaked [-2, 0, 0] references, sum=-2 test_collections leaked [-1, 0, 4] memory blocks, sum=3 test_functools leaked [0, 3, 1] memory blocks, sum=4 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogZH8sl_', '--timeout', '7200'] From python-checkins at python.org Wed Jul 6 05:22:30 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Wed, 06 Jul 2016 09:22:30 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2321708=3A_Deprecat?= =?utf-8?q?ed_dbm=2Edumb_behavior_that_differs_from_common_dbm?= Message-ID: <20160706092214.42671.82753.92C8FC31@psf.io> https://hg.python.org/cpython/rev/62da75b29b29 changeset: 102260:62da75b29b29 user: Serhiy Storchaka date: Wed Jul 06 12:21:58 2016 +0300 summary: Issue #21708: Deprecated dbm.dumb behavior that differs from common dbm behavior: creating a database in 'r' and 'w' modes and modifying a database in 'r' mode. files: Doc/library/dbm.rst | 4 ++++ Doc/whatsnew/3.6.rst | 5 +++++ Lib/dbm/dumb.py | 18 ++++++++++++++++++ Lib/test/test_dbm_dumb.py | 27 ++++++++++++++++++++++++++- Misc/NEWS | 4 ++++ 5 files changed, 57 insertions(+), 1 deletions(-) diff --git a/Doc/library/dbm.rst b/Doc/library/dbm.rst --- a/Doc/library/dbm.rst +++ b/Doc/library/dbm.rst @@ -351,6 +351,10 @@ :func:`.open` always creates a new database when the flag has the value ``'n'``. + .. deprecated-removed:: 3.6 3.8 + Creating database in ``'r'`` and ``'w'`` modes. Modifying database in + ``'r'`` mode. + In addition to the methods provided by the :class:`collections.abc.MutableMapping` class, :class:`dumbdbm` objects provide the following methods: diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -604,6 +604,11 @@ ``__package__`` are not defined now raises an :exc:`ImportWarning`. (Contributed by Rose Ames in :issue:`25791`.) +* Unlike to other :mod:`dbm` implementations, the :mod:`dbm.dumb` module + creates database in ``'r'`` and ``'w'`` modes if it doesn't exist and + allows modifying database in ``'r'`` mode. This behavior is now deprecated + and will be removed in 3.8. + (Contributed by Serhiy Storchaka in :issue:`21708`.) Deprecated Python behavior -------------------------- diff --git a/Lib/dbm/dumb.py b/Lib/dbm/dumb.py --- a/Lib/dbm/dumb.py +++ b/Lib/dbm/dumb.py @@ -47,6 +47,7 @@ def __init__(self, filebasename, mode, flag='c'): self._mode = mode + self._readonly = (flag == 'r') # The directory file is a text file. Each line looks like # "%r, (%d, %d)\n" % (key, pos, siz) @@ -80,6 +81,11 @@ try: f = _io.open(self._datfile, 'r', encoding="Latin-1") except OSError: + if flag not in ('c', 'n'): + import warnings + warnings.warn("The database file is missing, the " + "semantics of the 'c' flag will be used.", + DeprecationWarning, stacklevel=4) with _io.open(self._datfile, 'w', encoding="Latin-1") as f: self._chmod(self._datfile) else: @@ -178,6 +184,10 @@ f.write("%r, %r\n" % (key.decode("Latin-1"), pos_and_siz_pair)) def __setitem__(self, key, val): + if self._readonly: + import warnings + warnings.warn('The database is opened for reading only', + DeprecationWarning, stacklevel=2) if isinstance(key, str): key = key.encode('utf-8') elif not isinstance(key, (bytes, bytearray)): @@ -212,6 +222,10 @@ # (so that _commit() never gets called). def __delitem__(self, key): + if self._readonly: + import warnings + warnings.warn('The database is opened for reading only', + DeprecationWarning, stacklevel=2) if isinstance(key, str): key = key.encode('utf-8') self._verify_open() @@ -300,4 +314,8 @@ else: # Turn off any bits that are set in the umask mode = mode & (~um) + if flag not in ('r', 'w', 'c', 'n'): + import warnings + warnings.warn("Flag must be one of 'r', 'w', 'c', or 'n'", + DeprecationWarning, stacklevel=2) return _Database(file, mode, flag=flag) diff --git a/Lib/test/test_dbm_dumb.py b/Lib/test/test_dbm_dumb.py --- a/Lib/test/test_dbm_dumb.py +++ b/Lib/test/test_dbm_dumb.py @@ -6,6 +6,7 @@ import operator import os import unittest +import warnings import dbm.dumb as dumbdbm from test import support from functools import partial @@ -78,6 +79,12 @@ self.init_db() f = dumbdbm.open(_fname, 'r') self.read_helper(f) + with self.assertWarnsRegex(DeprecationWarning, + 'The database is opened for reading only'): + f[b'g'] = b'x' + with self.assertWarnsRegex(DeprecationWarning, + 'The database is opened for reading only'): + del f[b'a'] f.close() def test_dumbdbm_keys(self): @@ -148,7 +155,7 @@ self.assertEqual(self._dict[key], f[key]) def init_db(self): - f = dumbdbm.open(_fname, 'w') + f = dumbdbm.open(_fname, 'n') for k in self._dict: f[k] = self._dict[k] f.close() @@ -234,6 +241,24 @@ pass self.assertEqual(stdout.getvalue(), '') + def test_warn_on_ignored_flags(self): + for value in ('r', 'w'): + _delete_files() + with self.assertWarnsRegex(DeprecationWarning, + "The database file is missing, the " + "semantics of the 'c' flag will " + "be used."): + f = dumbdbm.open(_fname, value) + f.close() + + def test_invalid_flag(self): + for flag in ('x', 'rf', None): + with self.assertWarnsRegex(DeprecationWarning, + "Flag must be one of " + "'r', 'w', 'c', or 'n'"): + f = dumbdbm.open(_fname, flag) + f.close() + def tearDown(self): _delete_files() diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -24,6 +24,10 @@ Library ------- +- Issue #21708: Deprecated dbm.dumb behavior that differs from common dbm + behavior: creating a database in 'r' and 'w' modes and modifying a database + in 'r' mode. + - Issue #26721: Change the socketserver.StreamRequestHandler.wfile attribute to implement BufferedIOBase. In particular, the write() method no longer does partial writes. -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Wed Jul 6 06:45:46 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 6 Jul 2016 11:45:46 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-06 Message-ID: <13043a76-2649-4695-b580-4dd5f052acf5@irsmsx101.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-06 02:49:44 +0000 commit: da83e115afea previous commit: b0e8a2e7c361 revision date: 2016-07-06 00:09:45 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.15% 0.16% 3.89% 9.76% :-) pybench 0.18% -0.08% 5.52% 5.48% :-( regex_v8 0.51% 0.02% -2.58% 11.41% :-) nbody 0.05% 0.01% 9.31% 2.86% :-| json_dump_v2 0.31% 0.46% 1.17% 13.09% :-( normal_startup 1.69% 0.13% -5.70% 2.05% :-) ssbench 0.16% -0.19% 2.06% 1.17% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-06/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Wed Jul 6 06:45:14 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 6 Jul 2016 11:45:14 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python Default 2016-07-06 Message-ID: <951f093b-9849-487f-9e87-5c6aed6e2408@irsmsx101.ger.corp.intel.com> Results for project Python default, build date 2016-07-06 02:03:36 +0000 commit: adbeef96ae95 previous commit: 78a3d3700233 revision date: 2016-07-06 01:51:56 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.29% -2.94% 8.95% 16.80% :-| pybench 0.09% 0.01% 1.53% 7.36% :-( regex_v8 2.61% 0.16% -2.63% 2.68% :-| nbody 0.11% -0.00% -1.52% 12.59% :-| json_dump_v2 0.24% -0.02% -1.75% 12.19% :-| normal_startup 0.75% 0.00% 1.51% 5.84% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-default-2016-07-06/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Wed Jul 6 14:40:16 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Wed, 06 Jul 2016 18:40:16 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327460=3A_Unified_?= =?utf-8?q?error_messages_in_bytes_constructor_for_integers?= Message-ID: <20160706184015.67883.27207.FF46F1E9@psf.io> https://hg.python.org/cpython/rev/f9481e5f1792 changeset: 102261:f9481e5f1792 user: Serhiy Storchaka date: Wed Jul 06 21:39:44 2016 +0300 summary: Issue #27460: Unified error messages in bytes constructor for integers in and out of the Py_ssize_t range. Patch by Xiang Zhang. files: Objects/bytesobject.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -2624,7 +2624,7 @@ \ for (i = 0; i < Py_SIZE(x); i++) { \ item = GET_ITEM((x), i); \ - value = PyNumber_AsSsize_t(item, PyExc_ValueError); \ + value = PyNumber_AsSsize_t(item, NULL); \ if (value == -1 && PyErr_Occurred()) \ goto error; \ \ @@ -2687,7 +2687,7 @@ } /* Interpret it as an int (__index__) */ - value = PyNumber_AsSsize_t(item, PyExc_ValueError); + value = PyNumber_AsSsize_t(item, NULL); Py_DECREF(item); if (value == -1 && PyErr_Occurred()) goto error; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 15:27:41 2016 From: python-checkins at python.org (donald.stufft) Date: Wed, 06 Jul 2016 19:27:41 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E3=29=3A_Switch_to_the_?= =?utf-8?q?new_upload_url_for_PyPI?= Message-ID: <20160706192741.21019.3918.5F3A49F8@psf.io> https://hg.python.org/cpython/rev/9d09703a890d changeset: 102262:9d09703a890d branch: 3.3 parent: 100231:b9c8f1c80f47 user: Donald Stufft date: Wed Jul 06 15:27:35 2016 -0400 summary: Switch to the new upload url for PyPI files: Lib/distutils/config.py | 2 +- Lib/distutils/tests/test_config.py | 4 ++-- Lib/distutils/tests/test_upload.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -21,7 +21,7 @@ class PyPIRCCommand(Command): """Base command that knows how to handle the .pypirc file """ - DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi' + DEFAULT_REPOSITORY = 'https://upload.pypi.io/legacy/' DEFAULT_REALM = 'pypi' repository = None realm = None diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -87,7 +87,7 @@ config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server1'), ('username', 'me')] self.assertEqual(config, waited) @@ -96,7 +96,7 @@ config = cmd._read_pypirc() config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server-login'), ('username', 'tarek')] self.assertEqual(config, waited) diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -127,7 +127,7 @@ self.assertTrue(headers['Content-type'].startswith('multipart/form-data')) self.assertEqual(self.last_open.req.get_method(), 'POST') self.assertEqual(self.last_open.req.get_full_url(), - 'https://pypi.python.org/pypi') + 'https://upload.pypi.io/legacy/') self.assertIn(b'xxx', self.last_open.req.data) # The PyPI response body was echoed -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 16:18:44 2016 From: python-checkins at python.org (donald.stufft) Date: Wed, 06 Jul 2016 20:18:44 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E4=29=3A_Switch_to_the_?= =?utf-8?q?new_upload_url_for_PyPI?= Message-ID: <20160706201843.68140.14517.94DAF389@psf.io> https://hg.python.org/cpython/rev/d239d41cc381 changeset: 102263:d239d41cc381 branch: 3.4 parent: 102203:a2787831ac08 user: Donald Stufft date: Wed Jul 06 16:18:39 2016 -0400 summary: Switch to the new upload url for PyPI files: Lib/distutils/config.py | 2 +- Lib/distutils/tests/test_config.py | 4 ++-- Lib/distutils/tests/test_upload.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -21,7 +21,7 @@ class PyPIRCCommand(Command): """Base command that knows how to handle the .pypirc file """ - DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi' + DEFAULT_REPOSITORY = 'https://upload.pypi.io/legacy/' DEFAULT_REALM = 'pypi' repository = None realm = None diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -87,7 +87,7 @@ config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server1'), ('username', 'me')] self.assertEqual(config, waited) @@ -96,7 +96,7 @@ config = cmd._read_pypirc() config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server-login'), ('username', 'tarek')] self.assertEqual(config, waited) diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -90,7 +90,7 @@ cmd.finalize_options() for attr, waited in (('username', 'me'), ('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi')): + ('repository', 'https://upload.pypi.io/legacy/')): self.assertEqual(getattr(cmd, attr), waited) def test_saved_password(self): @@ -131,7 +131,7 @@ content_type = headers['Content-type'] self.assertTrue(content_type.startswith('multipart/form-data')) self.assertEqual(self.last_open.req.get_method(), 'POST') - expected_url = 'https://pypi.python.org/pypi' + expected_url = 'https://upload.pypi.io/legacy/' self.assertEqual(self.last_open.req.get_full_url(), expected_url) self.assertTrue(b'xxx' in self.last_open.req.data) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:00:48 2016 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 06 Jul 2016 21:00:48 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy40IC0+IDMuNSk6?= =?utf-8?q?_merge_3=2E4?= Message-ID: <20160706210047.85384.34992.15B476D9@psf.io> https://hg.python.org/cpython/rev/e0853c7f5a3b changeset: 102264:e0853c7f5a3b branch: 3.5 parent: 102257:127569004538 parent: 102263:d239d41cc381 user: Benjamin Peterson date: Wed Jul 06 14:00:38 2016 -0700 summary: merge 3.4 files: Lib/distutils/config.py | 2 +- Lib/distutils/tests/test_config.py | 4 ++-- Lib/distutils/tests/test_upload.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -21,7 +21,7 @@ class PyPIRCCommand(Command): """Base command that knows how to handle the .pypirc file """ - DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi' + DEFAULT_REPOSITORY = 'https://upload.pypi.io/legacy/' DEFAULT_REALM = 'pypi' repository = None realm = None diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -95,7 +95,7 @@ config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server1'), ('username', 'me')] self.assertEqual(config, waited) @@ -104,7 +104,7 @@ config = cmd._read_pypirc() config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server-login'), ('username', 'tarek')] self.assertEqual(config, waited) diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -93,7 +93,7 @@ cmd.finalize_options() for attr, waited in (('username', 'me'), ('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi')): + ('repository', 'https://upload.pypi.io/legacy/')): self.assertEqual(getattr(cmd, attr), waited) def test_saved_password(self): @@ -134,7 +134,7 @@ content_type = headers['Content-type'] self.assertTrue(content_type.startswith('multipart/form-data')) self.assertEqual(self.last_open.req.get_method(), 'POST') - expected_url = 'https://pypi.python.org/pypi' + expected_url = 'https://upload.pypi.io/legacy/' self.assertEqual(self.last_open.req.get_full_url(), expected_url) self.assertTrue(b'xxx' in self.last_open.req.data) self.assertIn(b'protocol_version', self.last_open.req.data) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:00:47 2016 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 06 Jul 2016 21:00:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogbWVyZ2UgMy41?= Message-ID: <20160706210047.10717.10030.8FED0A6A@psf.io> https://hg.python.org/cpython/rev/12fe9fe305ab changeset: 102265:12fe9fe305ab parent: 102261:f9481e5f1792 parent: 102264:e0853c7f5a3b user: Benjamin Peterson date: Wed Jul 06 14:00:46 2016 -0700 summary: merge 3.5 files: Lib/distutils/config.py | 2 +- Lib/distutils/tests/test_config.py | 4 ++-- Lib/distutils/tests/test_upload.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -21,7 +21,7 @@ class PyPIRCCommand(Command): """Base command that knows how to handle the .pypirc file """ - DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi' + DEFAULT_REPOSITORY = 'https://upload.pypi.io/legacy/' DEFAULT_REALM = 'pypi' repository = None realm = None diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -93,7 +93,7 @@ config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server1'), ('username', 'me')] self.assertEqual(config, waited) @@ -102,7 +102,7 @@ config = cmd._read_pypirc() config = list(sorted(config.items())) waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server-login'), ('username', 'tarek')] self.assertEqual(config, waited) diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -93,7 +93,7 @@ cmd.finalize_options() for attr, waited in (('username', 'me'), ('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi')): + ('repository', 'https://upload.pypi.io/legacy/')): self.assertEqual(getattr(cmd, attr), waited) def test_saved_password(self): @@ -134,7 +134,7 @@ content_type = headers['Content-type'] self.assertTrue(content_type.startswith('multipart/form-data')) self.assertEqual(self.last_open.req.get_method(), 'POST') - expected_url = 'https://pypi.python.org/pypi' + expected_url = 'https://upload.pypi.io/legacy/' self.assertEqual(self.last_open.req.get_full_url(), expected_url) self.assertTrue(b'xxx' in self.last_open.req.data) self.assertIn(b'protocol_version', self.last_open.req.data) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:04:47 2016 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 06 Jul 2016 21:04:47 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy4zIC0+IDMuNCk6?= =?utf-8?q?_merge_3=2E3?= Message-ID: <20160706210447.13410.62198.9EBB0FDB@psf.io> https://hg.python.org/cpython/rev/6303eccebc12 changeset: 102266:6303eccebc12 branch: 3.4 parent: 102263:d239d41cc381 parent: 102262:9d09703a890d user: Benjamin Peterson date: Wed Jul 06 14:04:11 2016 -0700 summary: merge 3.3 files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:04:47 2016 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 06 Jul 2016 21:04:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogbWVyZ2UgMy41?= Message-ID: <20160706210447.21062.37452.AEC08CA1@psf.io> https://hg.python.org/cpython/rev/a212d744a3cb changeset: 102268:a212d744a3cb parent: 102265:12fe9fe305ab parent: 102267:2c2db02cd288 user: Benjamin Peterson date: Wed Jul 06 14:04:44 2016 -0700 summary: merge 3.5 files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:04:47 2016 From: python-checkins at python.org (benjamin.peterson) Date: Wed, 06 Jul 2016 21:04:47 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy40IC0+IDMuNSk6?= =?utf-8?q?_merge_3=2E4?= Message-ID: <20160706210447.10358.25151.83D1A1E0@psf.io> https://hg.python.org/cpython/rev/2c2db02cd288 changeset: 102267:2c2db02cd288 branch: 3.5 parent: 102264:e0853c7f5a3b parent: 102266:6303eccebc12 user: Benjamin Peterson date: Wed Jul 06 14:04:29 2016 -0700 summary: merge 3.4 files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:39:27 2016 From: python-checkins at python.org (donald.stufft) Date: Wed, 06 Jul 2016 21:39:27 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_Switch_to_the_?= =?utf-8?q?new_upload_url_for_PyPI?= Message-ID: <20160706213927.13490.87870.7AFA282B@psf.io> https://hg.python.org/cpython/rev/539b4e7a655e changeset: 102269:539b4e7a655e branch: 2.7 parent: 102256:da83e115afea user: Donald Stufft date: Wed Jul 06 17:39:23 2016 -0400 summary: Switch to the new upload url for PyPI files: Lib/distutils/config.py | 2 +- Lib/distutils/tests/test_config.py | 4 ++-- Lib/distutils/tests/test_upload.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Lib/distutils/config.py b/Lib/distutils/config.py --- a/Lib/distutils/config.py +++ b/Lib/distutils/config.py @@ -21,7 +21,7 @@ class PyPIRCCommand(Command): """Base command that knows how to handle the .pypirc file """ - DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi' + DEFAULT_REPOSITORY = 'https://upload.pypi.io/legacy/' DEFAULT_REALM = 'pypi' repository = None realm = None diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -89,7 +89,7 @@ config = config.items() config.sort() waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server1'), ('username', 'me')] self.assertEqual(config, waited) @@ -99,7 +99,7 @@ config = config.items() config.sort() waited = [('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server-login'), ('username', 'tarek')] self.assertEqual(config, waited) diff --git a/Lib/distutils/tests/test_upload.py b/Lib/distutils/tests/test_upload.py --- a/Lib/distutils/tests/test_upload.py +++ b/Lib/distutils/tests/test_upload.py @@ -82,7 +82,7 @@ cmd.finalize_options() for attr, waited in (('username', 'me'), ('password', 'secret'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi')): + ('repository', 'https://upload.pypi.io/legacy/')): self.assertEqual(getattr(cmd, attr), waited) def test_saved_password(self): @@ -123,7 +123,7 @@ self.assertTrue(headers['Content-type'].startswith('multipart/form-data')) self.assertEqual(self.last_open.req.get_method(), 'POST') self.assertEqual(self.last_open.req.get_full_url(), - 'https://pypi.python.org/pypi') + 'https://upload.pypi.io/legacy/') self.assertIn('xxx', self.last_open.req.data) auth = self.last_open.req.headers['Authorization'] self.assertNotIn('\n', auth) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:46:42 2016 From: python-checkins at python.org (donald.stufft) Date: Wed, 06 Jul 2016 21:46:42 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Fix_a_test_wit?= =?utf-8?q?h_the_new_upload_URL?= Message-ID: <20160706214642.94008.43152.50045B55@psf.io> https://hg.python.org/cpython/rev/438032e7c0a0 changeset: 102270:438032e7c0a0 branch: 3.5 parent: 102267:2c2db02cd288 user: Donald Stufft date: Wed Jul 06 17:46:37 2016 -0400 summary: Fix a test with the new upload URL files: Lib/distutils/tests/test_config.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -130,7 +130,7 @@ config = list(sorted(config.items())) waited = [('password', 'yh^%#rest-of-my-password'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server3'), ('username', 'cbiggles')] self.assertEqual(config, waited) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 6 17:50:29 2016 From: python-checkins at python.org (donald.stufft) Date: Wed, 06 Jul 2016 21:50:29 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogbWVyZ2UgMy41?= Message-ID: <20160706215025.67877.85897.10834EDB@psf.io> https://hg.python.org/cpython/rev/85973348664c changeset: 102271:85973348664c parent: 102268:a212d744a3cb parent: 102270:438032e7c0a0 user: Donald Stufft date: Wed Jul 06 17:50:21 2016 -0400 summary: merge 3.5 files: Lib/distutils/tests/test_config.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/distutils/tests/test_config.py b/Lib/distutils/tests/test_config.py --- a/Lib/distutils/tests/test_config.py +++ b/Lib/distutils/tests/test_config.py @@ -128,7 +128,7 @@ config = list(sorted(config.items())) waited = [('password', 'yh^%#rest-of-my-password'), ('realm', 'pypi'), - ('repository', 'https://pypi.python.org/pypi'), + ('repository', 'https://upload.pypi.io/legacy/'), ('server', 'server3'), ('username', 'cbiggles')] self.assertEqual(config, waited) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 02:28:33 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 06:28:33 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_fix_refleaks_i?= =?utf-8?q?n_PyDict=5FSetItem_error_cases_=28closes_=2327248=29?= Message-ID: <20160707062833.5500.42707.36CC65C7@psf.io> https://hg.python.org/cpython/rev/f1fcf60863f8 changeset: 102272:f1fcf60863f8 branch: 3.5 parent: 102270:438032e7c0a0 user: Benjamin Peterson date: Wed Jul 06 23:26:32 2016 -0700 summary: fix refleaks in PyDict_SetItem error cases (closes #27248) files: Objects/typeobject.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4509,8 +4509,10 @@ descr = PyDescr_NewMember(type, memb); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, memb->name, descr) < 0) + if (PyDict_SetItemString(dict, memb->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -4529,8 +4531,10 @@ if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, gsp->name, descr) < 0) + if (PyDict_SetItemString(dict, gsp->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -7010,8 +7014,10 @@ descr = PyDescr_NewWrapper(type, p, *ptr); if (descr == NULL) return -1; - if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) + if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 02:28:35 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 06:28:35 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_fix_refleaks_i?= =?utf-8?q?n_PyDict=5FSetItem_error_cases_=28closes_=2327248=29?= Message-ID: <20160707062833.4654.3192.9D8B1C6B@psf.io> https://hg.python.org/cpython/rev/370b2985d462 changeset: 102273:370b2985d462 branch: 2.7 parent: 102269:539b4e7a655e user: Benjamin Peterson date: Wed Jul 06 23:26:32 2016 -0700 summary: fix refleaks in PyDict_SetItem error cases (closes #27248) files: Objects/typeobject.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -3693,8 +3693,10 @@ descr = PyDescr_NewMember(type, memb); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, memb->name, descr) < 0) + if (PyDict_SetItemString(dict, memb->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -3713,8 +3715,10 @@ if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, gsp->name, descr) < 0) + if (PyDict_SetItemString(dict, gsp->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -6498,8 +6502,10 @@ descr = PyDescr_NewWrapper(type, p, *ptr); if (descr == NULL) return -1; - if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) + if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 02:28:34 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 06:28:34 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogbWVyZ2UgMy41ICgjMjcyNDgp?= Message-ID: <20160707062833.14390.69014.14C7A496@psf.io> https://hg.python.org/cpython/rev/f7c180dbc070 changeset: 102274:f7c180dbc070 parent: 102271:85973348664c parent: 102272:f1fcf60863f8 user: Benjamin Peterson date: Wed Jul 06 23:28:19 2016 -0700 summary: merge 3.5 (#27248) Patch from Xiang Zhang. files: Objects/typeobject.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Objects/typeobject.c b/Objects/typeobject.c --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4522,8 +4522,10 @@ descr = PyDescr_NewMember(type, memb); if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, memb->name, descr) < 0) + if (PyDict_SetItemString(dict, memb->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -4542,8 +4544,10 @@ if (descr == NULL) return -1; - if (PyDict_SetItemString(dict, gsp->name, descr) < 0) + if (PyDict_SetItemString(dict, gsp->name, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } return 0; @@ -7023,8 +7027,10 @@ descr = PyDescr_NewWrapper(type, p, *ptr); if (descr == NULL) return -1; - if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) + if (PyDict_SetItem(dict, p->name_strobj, descr) < 0) { + Py_DECREF(descr); return -1; + } Py_DECREF(descr); } } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 02:37:09 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 06:37:09 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_reduce_marshal?= =?utf-8?q?_stack_size_in_debug_mode_on_windows_=28closes_=2327019=29?= Message-ID: <20160707063708.4627.89292.CE88346E@psf.io> https://hg.python.org/cpython/rev/6230ead06f65 changeset: 102275:6230ead06f65 branch: 2.7 parent: 102273:370b2985d462 user: Benjamin Peterson date: Wed Jul 06 23:37:02 2016 -0700 summary: reduce marshal stack size in debug mode on windows (closes #27019) files: Lib/test/test_marshal.py | 5 ++++- Python/marshal.c | 5 +++++ 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_marshal.py b/Lib/test/test_marshal.py --- a/Lib/test/test_marshal.py +++ b/Lib/test/test_marshal.py @@ -234,7 +234,10 @@ # Create a deeply nested structure. head = last = [] # The max stack depth should match the value in Python/marshal.c. - MAX_MARSHAL_STACK_DEPTH = 2000 + if os.name == 'nt' and hasattr(sys, 'gettotalrefcount'): + MAX_MARSHAL_STACK_DEPTH = 1000 + else: + MAX_MARSHAL_STACK_DEPTH = 2000 for i in range(MAX_MARSHAL_STACK_DEPTH - 2): last.append([0]) last = last[-1] diff --git a/Python/marshal.c b/Python/marshal.c --- a/Python/marshal.c +++ b/Python/marshal.c @@ -16,8 +16,13 @@ /* High water mark to determine when the marshalled object is dangerously deep * and risks coring the interpreter. When the object stack gets this deep, * raise an exception instead of continuing. + * On Windows debug builds, reduce this value. */ +#if defined(MS_WINDOWS) && defined(_DEBUG) +#define MAX_MARSHAL_STACK_DEPTH 1000 +#else #define MAX_MARSHAL_STACK_DEPTH 2000 +#endif #define TYPE_NULL '0' #define TYPE_NONE 'N' -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 03:02:57 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 07:02:57 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_assume_egd_unl?= =?utf-8?q?ess_OPENSSL=5FNO=5FEGD_is_defined=E2=80=94remove_configure_chec?= =?utf-8?q?k_=28closes?= Message-ID: <20160707070257.4777.46338.513E6CD6@psf.io> https://hg.python.org/cpython/rev/676486e1a94f changeset: 102278:676486e1a94f branch: 2.7 parent: 102275:6230ead06f65 user: Benjamin Peterson date: Thu Jul 07 00:02:31 2016 -0700 summary: assume egd unless OPENSSL_NO_EGD is defined?remove configure check (closes #24557) files: Modules/_ssl.c | 6 +- aclocal.m4 | 213 +++++++++++++++++++++++------------- configure | 57 ++------- configure.ac | 3 - pyconfig.h.in | 3 - 5 files changed, 154 insertions(+), 128 deletions(-) diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3386,7 +3386,7 @@ #endif /* HAVE_OPENSSL_RAND */ -#ifdef HAVE_RAND_EGD +#ifndef OPENSSL_NO_EGD static PyObject * PySSL_RAND_egd(PyObject *self, PyObject *arg) @@ -3414,7 +3414,7 @@ Returns number of bytes read. Raises SSLError if connection to EGD\n\ fails or if it does not provide enough data to seed PRNG."); -#endif /* HAVE_RAND_EGD */ +#endif /* !OPENSSL_NO_EGD */ PyDoc_STRVAR(PySSL_get_default_verify_paths_doc, @@ -3814,7 +3814,7 @@ {"RAND_status", (PyCFunction)PySSL_RAND_status, METH_NOARGS, PySSL_RAND_status_doc}, #endif -#ifdef HAVE_RAND_EGD +#ifndef OPENSSL_NO_EGD {"RAND_egd", PySSL_RAND_egd, METH_VARARGS, PySSL_RAND_egd_doc}, #endif diff --git a/aclocal.m4 b/aclocal.m4 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.14.1 -*- Autoconf -*- +# generated automatically by aclocal 1.15 -*- Autoconf -*- -# Copyright (C) 1996-2013 Free Software Foundation, Inc. +# Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -12,32 +12,63 @@ # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright ? 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29.1) +dnl +dnl Copyright ? 2004 Scott James Remnant . +dnl Copyright ? 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.1]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -59,18 +90,19 @@ PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG +])dnl PKG_PROG_PKG_CONFIG -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -80,8 +112,10 @@ $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -93,10 +127,11 @@ else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -104,19 +139,17 @@ else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED +])dnl _PKG_SHORT_ERRORS_SUPPORTED -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -170,16 +203,40 @@ AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES -# PKG_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable pkgconfigdir as the location where a module -# should install pkg-config .pc files. By default the directory is -# $libdir/pkgconfig, but the default can be changed by passing -# DIRECTORY. The user can override through the --with-pkgconfigdir -# parameter. +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -190,16 +247,18 @@ AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_INSTALLDIR +])dnl PKG_INSTALLDIR -# PKG_NOARCH_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable noarch_pkgconfigdir as the location where a -# module should install arch-independent pkg-config .pc files. By -# default the directory is $datadir/pkgconfig, but the default can be -# changed by passing DIRECTORY. The user can override through the -# --with-noarch-pkgconfigdir parameter. +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -210,13 +269,15 @@ AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_NOARCH_INSTALLDIR +])dnl PKG_NOARCH_INSTALLDIR -# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# ------------------------------------------- -# Retrieves the value of the pkg-config variable for the given module. +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl @@ -225,5 +286,5 @@ AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl -])# PKG_CHECK_VAR +])dnl PKG_CHECK_VAR diff --git a/configure b/configure --- a/configure +++ b/configure @@ -764,6 +764,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -874,6 +875,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1126,6 +1128,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1263,7 +1274,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1416,6 +1427,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -2787,6 +2799,7 @@ ac_config_headers="$ac_config_headers pyconfig.h" + ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then @@ -8733,48 +8746,6 @@ fi # Dynamic linking for HP-UX -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RAND_egd in -lcrypto" >&5 -$as_echo_n "checking for RAND_egd in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_RAND_egd+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char RAND_egd (); -int -main () -{ -return RAND_egd (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_RAND_egd=yes -else - ac_cv_lib_crypto_RAND_egd=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_RAND_egd" >&5 -$as_echo "$ac_cv_lib_crypto_RAND_egd" >&6; } -if test "x$ac_cv_lib_crypto_RAND_egd" = xyes; then : - -$as_echo "#define HAVE_RAND_EGD 1" >>confdefs.h - -fi - # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -2333,9 +2333,6 @@ # checks for libraries AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX -AC_CHECK_LIB(crypto, RAND_egd, - AC_DEFINE(HAVE_RAND_EGD, 1, - [Define if the libcrypto has RAND_egd])) # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then diff --git a/pyconfig.h.in b/pyconfig.h.in --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -550,9 +550,6 @@ /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV -/* Define if the libcrypto has RAND_egd */ -#undef HAVE_RAND_EGD - /* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 03:02:56 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 07:02:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogbWVyZ2UgMy41ICgjMjQ1NTcp?= Message-ID: <20160707070256.14368.87861.033CE35E@psf.io> https://hg.python.org/cpython/rev/fe168c2b5e95 changeset: 102277:fe168c2b5e95 parent: 102274:f7c180dbc070 parent: 102276:7c0432cf1f2e user: Benjamin Peterson date: Wed Jul 06 23:58:16 2016 -0700 summary: merge 3.5 (#24557) files: Modules/_ssl.c | 4 +- Modules/clinic/_ssl.c.h | 6 +- aclocal.m4 | 209 ++++++++++++++++++--------- configure | 42 ----- configure.ac | 3 - pyconfig.h.in | 9 +- 6 files changed, 143 insertions(+), 130 deletions(-) diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3938,7 +3938,7 @@ return PyLong_FromLong(RAND_status()); } -#ifdef HAVE_RAND_EGD +#ifndef OPENSSL_NO_EGD /*[clinic input] _ssl.RAND_egd path: object(converter="PyUnicode_FSConverter") @@ -3964,7 +3964,7 @@ } return PyLong_FromLong(bytes); } -#endif /* HAVE_RAND_EGD */ +#endif /* OPENSSL_NO_EGD */ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -921,7 +921,7 @@ return _ssl_RAND_status_impl(module); } -#if defined(HAVE_RAND_EGD) +#if !defined(OPENSSL_NO_EGD) PyDoc_STRVAR(_ssl_RAND_egd__doc__, "RAND_egd($module, path, /)\n" @@ -953,7 +953,7 @@ return return_value; } -#endif /* defined(HAVE_RAND_EGD) */ +#endif /* !defined(OPENSSL_NO_EGD) */ PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__, "get_default_verify_paths($module, /)\n" @@ -1135,4 +1135,4 @@ #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=c6fe203099a5aa89 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=df99659ec790e573 input=a9049054013a1b77]*/ diff --git a/aclocal.m4 b/aclocal.m4 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -12,32 +12,63 @@ # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright ? 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29.1) +dnl +dnl Copyright ? 2004 Scott James Remnant . +dnl Copyright ? 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.1]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -59,18 +90,19 @@ PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG +])dnl PKG_PROG_PKG_CONFIG -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -80,8 +112,10 @@ $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -93,10 +127,11 @@ else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -104,19 +139,17 @@ else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED +])dnl _PKG_SHORT_ERRORS_SUPPORTED -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -170,16 +203,40 @@ AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES -# PKG_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable pkgconfigdir as the location where a module -# should install pkg-config .pc files. By default the directory is -# $libdir/pkgconfig, but the default can be changed by passing -# DIRECTORY. The user can override through the --with-pkgconfigdir -# parameter. +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -190,16 +247,18 @@ AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_INSTALLDIR +])dnl PKG_INSTALLDIR -# PKG_NOARCH_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable noarch_pkgconfigdir as the location where a -# module should install arch-independent pkg-config .pc files. By -# default the directory is $datadir/pkgconfig, but the default can be -# changed by passing DIRECTORY. The user can override through the -# --with-noarch-pkgconfigdir parameter. +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -210,13 +269,15 @@ AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_NOARCH_INSTALLDIR +])dnl PKG_NOARCH_INSTALLDIR -# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# ------------------------------------------- -# Retrieves the value of the pkg-config variable for the given module. +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl @@ -225,5 +286,5 @@ AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl -])# PKG_CHECK_VAR +])dnl PKG_CHECK_VAR diff --git a/configure b/configure --- a/configure +++ b/configure @@ -9505,48 +9505,6 @@ fi # Dynamic linking for HP-UX -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RAND_egd in -lcrypto" >&5 -$as_echo_n "checking for RAND_egd in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_RAND_egd+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char RAND_egd (); -int -main () -{ -return RAND_egd (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_RAND_egd=yes -else - ac_cv_lib_crypto_RAND_egd=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_RAND_egd" >&5 -$as_echo "$ac_cv_lib_crypto_RAND_egd" >&6; } -if test "x$ac_cv_lib_crypto_RAND_egd" = xyes; then : - -$as_echo "#define HAVE_RAND_EGD 1" >>confdefs.h - -fi - # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -2563,9 +2563,6 @@ AC_CHECK_LIB(sendfile, sendfile) AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX -AC_CHECK_LIB(crypto, RAND_egd, - AC_DEFINE(HAVE_RAND_EGD, 1, - [Define if the libcrypto has RAND_egd])) # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then diff --git a/pyconfig.h.in b/pyconfig.h.in --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -571,12 +571,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_NETLINK_H +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_RANDOM_H + /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_TIPC_H -/* Define to 1 if you have the header file. */ -#undef HAVE_LINUX_RANDOM_H - /* Define to 1 if you have the `lockf' function. */ #undef HAVE_LOCKF @@ -724,9 +724,6 @@ /* Define to 1 if you have the `pwrite' function. */ #undef HAVE_PWRITE -/* Define if the libcrypto has RAND_egd */ -#undef HAVE_RAND_EGD - /* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 03:02:56 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 07:02:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_assume_egd_unl?= =?utf-8?q?ess_OPENSSL=5FNO=5FEGD_is_defined=E2=80=94remove_configure_chec?= =?utf-8?q?k_=28closes?= Message-ID: <20160707070256.15571.47439.C3C8D529@psf.io> https://hg.python.org/cpython/rev/7c0432cf1f2e changeset: 102276:7c0432cf1f2e branch: 3.5 parent: 102272:f1fcf60863f8 user: Benjamin Peterson date: Wed Jul 06 23:55:15 2016 -0700 summary: assume egd unless OPENSSL_NO_EGD is defined?remove configure check (closes #24557) files: Modules/_ssl.c | 4 +- Modules/clinic/_ssl.c.h | 6 +- aclocal.m4 | 209 ++++++++++++++++++--------- configure | 56 +----- configure.ac | 3 - pyconfig.h.in | 9 +- 6 files changed, 156 insertions(+), 131 deletions(-) diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -3938,7 +3938,7 @@ return PyLong_FromLong(RAND_status()); } -#ifdef HAVE_RAND_EGD +#ifndef OPENSSL_NO_EGD /*[clinic input] _ssl.RAND_egd path: object(converter="PyUnicode_FSConverter") @@ -3964,7 +3964,7 @@ } return PyLong_FromLong(bytes); } -#endif /* HAVE_RAND_EGD */ +#endif /* OPENSSL_NO_EGD */ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -893,7 +893,7 @@ return _ssl_RAND_status_impl(module); } -#if defined(HAVE_RAND_EGD) +#if !defined(OPENSSL_NO_EGD) PyDoc_STRVAR(_ssl_RAND_egd__doc__, "RAND_egd($module, path, /)\n" @@ -924,7 +924,7 @@ return return_value; } -#endif /* defined(HAVE_RAND_EGD) */ +#endif /* !defined(OPENSSL_NO_EGD) */ PyDoc_STRVAR(_ssl_get_default_verify_paths__doc__, "get_default_verify_paths($module, /)\n" @@ -1102,4 +1102,4 @@ #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=a14999cb565a69a2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=abe795f14cb63b6a input=a9049054013a1b77]*/ diff --git a/aclocal.m4 b/aclocal.m4 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -12,32 +12,63 @@ # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- -# serial 1 (pkg-config-0.24) -# -# Copyright ? 2004 Scott James Remnant . -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. +dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +dnl serial 11 (pkg-config-0.29.1) +dnl +dnl Copyright ? 2004 Scott James Remnant . +dnl Copyright ? 2012-2015 Dan Nicholson +dnl +dnl This program is free software; you can redistribute it and/or modify +dnl it under the terms of the GNU General Public License as published by +dnl the Free Software Foundation; either version 2 of the License, or +dnl (at your option) any later version. +dnl +dnl This program is distributed in the hope that it will be useful, but +dnl WITHOUT ANY WARRANTY; without even the implied warranty of +dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +dnl General Public License for more details. +dnl +dnl You should have received a copy of the GNU General Public License +dnl along with this program; if not, write to the Free Software +dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +dnl 02111-1307, USA. +dnl +dnl As a special exception to the GNU General Public License, if you +dnl distribute this file as part of a program that contains a +dnl configuration script generated by Autoconf, you may include it under +dnl the same distribution terms that you use for the rest of that +dnl program. -# PKG_PROG_PKG_CONFIG([MIN-VERSION]) -# ---------------------------------- +dnl PKG_PREREQ(MIN-VERSION) +dnl ----------------------- +dnl Since: 0.29 +dnl +dnl Verify that the version of the pkg-config macros are at least +dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's +dnl installed version of pkg-config, this checks the developer's version +dnl of pkg.m4 when generating configure. +dnl +dnl To ensure that this macro is defined, also add: +dnl m4_ifndef([PKG_PREREQ], +dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) +dnl +dnl See the "Since" comment for each macro you use to see what version +dnl of the macros you require. +m4_defun([PKG_PREREQ], +[m4_define([PKG_MACROS_VERSION], [0.29.1]) +m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, + [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) +])dnl PKG_PREREQ + +dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) +dnl ---------------------------------- +dnl Since: 0.16 +dnl +dnl Search for the pkg-config tool and set the PKG_CONFIG variable to +dnl first found in the path. Checks that the version of pkg-config found +dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is +dnl used since that's the first version where most current features of +dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) @@ -59,18 +90,19 @@ PKG_CONFIG="" fi fi[]dnl -])# PKG_PROG_PKG_CONFIG +])dnl PKG_PROG_PKG_CONFIG -# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# -# Check to see whether a particular set of modules exists. Similar -# to PKG_CHECK_MODULES(), but does not set variables or print errors. -# -# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) -# only at the first occurence in configure.ac, so if the first place -# it's called might be skipped (such as if it is within an "if", you -# have to call PKG_CHECK_EXISTS manually -# -------------------------------------------------------------- +dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------------------------------- +dnl Since: 0.18 +dnl +dnl Check to see whether a particular set of modules exists. Similar to +dnl PKG_CHECK_MODULES(), but does not set variables or print errors. +dnl +dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +dnl only at the first occurence in configure.ac, so if the first place +dnl it's called might be skipped (such as if it is within an "if", you +dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ @@ -80,8 +112,10 @@ $3])dnl fi]) -# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) -# --------------------------------------------- +dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +dnl --------------------------------------------- +dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting +dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" @@ -93,10 +127,11 @@ else pkg_failed=untried fi[]dnl -])# _PKG_CONFIG +])dnl _PKG_CONFIG -# _PKG_SHORT_ERRORS_SUPPORTED -# ----------------------------- +dnl _PKG_SHORT_ERRORS_SUPPORTED +dnl --------------------------- +dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then @@ -104,19 +139,17 @@ else _pkg_short_errors_supported=no fi[]dnl -])# _PKG_SHORT_ERRORS_SUPPORTED +])dnl _PKG_SHORT_ERRORS_SUPPORTED -# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], -# [ACTION-IF-NOT-FOUND]) -# -# -# Note that if there is a possibility the first call to -# PKG_CHECK_MODULES might not happen, you should be sure to include an -# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac -# -# -# -------------------------------------------------------------- +dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl -------------------------------------------------------------- +dnl Since: 0.4.0 +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES might not happen, you should be sure to include an +dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl @@ -170,16 +203,40 @@ AC_MSG_RESULT([yes]) $3 fi[]dnl -])# PKG_CHECK_MODULES +])dnl PKG_CHECK_MODULES -# PKG_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable pkgconfigdir as the location where a module -# should install pkg-config .pc files. By default the directory is -# $libdir/pkgconfig, but the default can be changed by passing -# DIRECTORY. The user can override through the --with-pkgconfigdir -# parameter. +dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +dnl [ACTION-IF-NOT-FOUND]) +dnl --------------------------------------------------------------------- +dnl Since: 0.29 +dnl +dnl Checks for existence of MODULES and gathers its build flags with +dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags +dnl and VARIABLE-PREFIX_LIBS from --libs. +dnl +dnl Note that if there is a possibility the first call to +dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to +dnl include an explicit call to PKG_PROG_PKG_CONFIG in your +dnl configure.ac. +AC_DEFUN([PKG_CHECK_MODULES_STATIC], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +_save_PKG_CONFIG=$PKG_CONFIG +PKG_CONFIG="$PKG_CONFIG --static" +PKG_CHECK_MODULES($@) +PKG_CONFIG=$_save_PKG_CONFIG[]dnl +])dnl PKG_CHECK_MODULES_STATIC + + +dnl PKG_INSTALLDIR([DIRECTORY]) +dnl ------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable pkgconfigdir as the location where a module +dnl should install pkg-config .pc files. By default the directory is +dnl $libdir/pkgconfig, but the default can be changed by passing +dnl DIRECTORY. The user can override through the --with-pkgconfigdir +dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -190,16 +247,18 @@ AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_INSTALLDIR +])dnl PKG_INSTALLDIR -# PKG_NOARCH_INSTALLDIR(DIRECTORY) -# ------------------------- -# Substitutes the variable noarch_pkgconfigdir as the location where a -# module should install arch-independent pkg-config .pc files. By -# default the directory is $datadir/pkgconfig, but the default can be -# changed by passing DIRECTORY. The user can override through the -# --with-noarch-pkgconfigdir parameter. +dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) +dnl -------------------------------- +dnl Since: 0.27 +dnl +dnl Substitutes the variable noarch_pkgconfigdir as the location where a +dnl module should install arch-independent pkg-config .pc files. By +dnl default the directory is $datadir/pkgconfig, but the default can be +dnl changed by passing DIRECTORY. The user can override through the +dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], @@ -210,13 +269,15 @@ AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) -]) dnl PKG_NOARCH_INSTALLDIR +])dnl PKG_NOARCH_INSTALLDIR -# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, -# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) -# ------------------------------------------- -# Retrieves the value of the pkg-config variable for the given module. +dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +dnl ------------------------------------------- +dnl Since: 0.28 +dnl +dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl @@ -225,5 +286,5 @@ AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl -])# PKG_CHECK_VAR +])dnl PKG_CHECK_VAR diff --git a/configure b/configure --- a/configure +++ b/configure @@ -776,6 +776,7 @@ docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -886,6 +887,7 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1138,6 +1140,15 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1275,7 +1286,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1428,6 +1439,7 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -9480,48 +9492,6 @@ fi # Dynamic linking for HP-UX -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RAND_egd in -lcrypto" >&5 -$as_echo_n "checking for RAND_egd in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_RAND_egd+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char RAND_egd (); -int -main () -{ -return RAND_egd (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_RAND_egd=yes -else - ac_cv_lib_crypto_RAND_egd=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_RAND_egd" >&5 -$as_echo "$ac_cv_lib_crypto_RAND_egd" >&6; } -if test "x$ac_cv_lib_crypto_RAND_egd" = xyes; then : - -$as_echo "#define HAVE_RAND_EGD 1" >>confdefs.h - -fi - # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -2551,9 +2551,6 @@ AC_CHECK_LIB(sendfile, sendfile) AC_CHECK_LIB(dl, dlopen) # Dynamic linking for SunOS/Solaris and SYSV AC_CHECK_LIB(dld, shl_load) # Dynamic linking for HP-UX -AC_CHECK_LIB(crypto, RAND_egd, - AC_DEFINE(HAVE_RAND_EGD, 1, - [Define if the libcrypto has RAND_egd])) # only check for sem_init if thread support is requested if test "$with_threads" = "yes" -o -z "$with_threads"; then diff --git a/pyconfig.h.in b/pyconfig.h.in --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -543,12 +543,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_NETLINK_H +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_RANDOM_H + /* Define to 1 if you have the header file. */ #undef HAVE_LINUX_TIPC_H -/* Define to 1 if you have the header file. */ -#undef HAVE_LINUX_RANDOM_H - /* Define to 1 if you have the `lockf' function. */ #undef HAVE_LOCKF @@ -696,9 +696,6 @@ /* Define to 1 if you have the `pwrite' function. */ #undef HAVE_PWRITE -/* Define if the libcrypto has RAND_egd */ -#undef HAVE_RAND_EGD - /* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 03:25:14 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 07 Jul 2016 07:25:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_initialize_var?= =?utf-8?q?iable_to_appease_gcc?= Message-ID: <20160707072514.14613.16862.ECDEF84C@psf.io> https://hg.python.org/cpython/rev/228b23b58ed3 changeset: 102279:228b23b58ed3 branch: 2.7 user: Benjamin Peterson date: Thu Jul 07 00:24:26 2016 -0700 summary: initialize variable to appease gcc files: Modules/socketmodule.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -780,7 +780,7 @@ */ #define BEGIN_SELECT_LOOP(s) \ { \ - double deadline, interval = s->sock_timeout; \ + double deadline = 0, interval = s->sock_timeout; \ int has_timeout = s->sock_timeout > 0.0; \ if (has_timeout) { \ deadline = _PyTime_FloatTime() + s->sock_timeout; \ -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Thu Jul 7 06:03:50 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Thu, 07 Jul 2016 10:03:50 +0000 Subject: [Python-checkins] Daily reference leaks (85973348664c): sum=4 Message-ID: <20160707100350.93479.14725.9CAEFFCF@psf.io> results for 85973348664c on branch "default" -------------------------------------------- test_collections leaked [4, -4, 0] memory blocks, sum=0 test_functools leaked [0, 3, 1] memory blocks, sum=4 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogqYxxxa', '--timeout', '7200'] From lp_benchmark_robot at intel.com Thu Jul 7 08:06:37 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Thu, 7 Jul 2016 13:06:37 +0100 Subject: [Python-checkins] GOOD Benchmark Results for Python Default 2016-07-07 Message-ID: <7b39a083-531b-412c-b7e3-5d4566d2270d@irsmsx151.ger.corp.intel.com> Results for project Python default, build date 2016-07-07 02:03:01 +0000 commit: 85973348664c previous commit: adbeef96ae95 revision date: 2016-07-06 21:50:21 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.18% 3.16% 11.82% 14.92% :-| pybench 0.12% 0.02% 1.55% 8.03% :-( regex_v8 2.66% -0.91% -3.56% 4.43% :-| nbody 0.10% 1.94% 0.45% 9.27% :-| json_dump_v2 0.24% 0.68% -1.06% 11.54% :-| normal_startup 0.81% 0.15% 1.41% 5.62% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/good-benchmark-results-for-python-default-2016-07-07/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Thu Jul 7 08:08:01 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Thu, 7 Jul 2016 13:08:01 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-07 Message-ID: <5ee27edf-791c-4b68-a2ff-00d126ad7994@irsmsx151.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-07 02:46:40 +0000 commit: 539b4e7a655e previous commit: da83e115afea revision date: 2016-07-06 21:39:23 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.19% 0.87% 4.73% 5.33% :-) pybench 0.22% -0.55% 5.00% 5.94% :-( regex_v8 0.50% 0.08% -2.50% 11.25% :-) nbody 0.05% -0.05% 9.26% 3.51% :-| json_dump_v2 0.33% -0.33% 0.85% 13.23% :-( normal_startup 1.93% -0.36% -6.08% 2.11% :-) ssbench 0.18% 0.23% 2.30% 1.09% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-07/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Thu Jul 7 11:20:41 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Thu, 07 Jul 2016 15:20:41 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3MzMy?= =?utf-8?q?=3A_Fixed_the_type_of_the_first_argument_of_module-level_functi?= =?utf-8?q?ons?= Message-ID: <20160707152041.4527.72407.120C3767@psf.io> https://hg.python.org/cpython/rev/870e02f86e08 changeset: 102280:870e02f86e08 branch: 3.5 parent: 102276:7c0432cf1f2e user: Serhiy Storchaka date: Thu Jul 07 17:35:15 2016 +0300 summary: Issue #27332: Fixed the type of the first argument of module-level functions generated by Argument Clinic. Patch by Petr Viktorin. files: Misc/NEWS | 3 + Modules/_codecsmodule.c | 183 +- Modules/_cryptmodule.c | 4 +- Modules/_dbmmodule.c | 4 +- Modules/_gdbmmodule.c | 5 +- Modules/_io/_iomodule.c | 4 +- Modules/_io/clinic/_iomodule.c.h | 6 +- Modules/_lzmamodule.c | 12 +- Modules/_opcode.c | 4 +- Modules/_pickle.c | 16 +- Modules/_sre.c | 12 +- Modules/_ssl.c | 44 +- Modules/_tkinter.c | 16 +- Modules/_weakref.c | 4 +- Modules/_winapi.c | 107 +- Modules/arraymodule.c | 4 +- Modules/audioop.c | 105 +- Modules/binascii.c | 64 +- Modules/cjkcodecs/multibytecodec.c | 4 +- Modules/clinic/_codecsmodule.c.h | 181 +- Modules/clinic/_cryptmodule.c.h | 6 +- Modules/clinic/_dbmmodule.c.h | 6 +- Modules/clinic/_gdbmmodule.c.h | 7 +- Modules/clinic/_lzmamodule.c.h | 14 +- Modules/clinic/_opcode.c.h | 6 +- Modules/clinic/_pickle.c.h | 18 +- Modules/clinic/_sre.c.h | 14 +- Modules/clinic/_ssl.c.h | 46 +- Modules/clinic/_tkinter.c.h | 14 +- Modules/clinic/_weakref.c.h | 6 +- Modules/clinic/_winapi.c.h | 109 +- Modules/clinic/arraymodule.c.h | 6 +- Modules/clinic/audioop.c.h | 107 +- Modules/clinic/binascii.c.h | 66 +- Modules/clinic/cmathmodule.c.h | 94 +- Modules/clinic/fcntlmodule.c.h | 18 +- Modules/clinic/grpmodule.c.h | 14 +- Modules/clinic/md5module.c.h | 6 +- Modules/clinic/posixmodule.c.h | 1188 +++++++-------- Modules/clinic/pwdmodule.c.h | 10 +- Modules/clinic/pyexpat.c.h | 10 +- Modules/clinic/sha1module.c.h | 6 +- Modules/clinic/sha256module.c.h | 10 +- Modules/clinic/sha512module.c.h | 10 +- Modules/clinic/signalmodule.c.h | 46 +- Modules/clinic/spwdmodule.c.h | 10 +- Modules/clinic/zlibmodule.c.h | 26 +- Modules/cmathmodule.c | 104 +- Modules/fcntlmodule.c | 16 +- Modules/grpmodule.c | 12 +- Modules/md5module.c | 4 +- Modules/posixmodule.c | 634 ++++---- Modules/pwdmodule.c | 12 +- Modules/pyexpat.c | 8 +- Modules/sha1module.c | 4 +- Modules/sha256module.c | 8 +- Modules/sha512module.c | 8 +- Modules/signalmodule.c | 52 +- Modules/spwdmodule.c | 8 +- Modules/zlibmodule.c | 24 +- PC/clinic/msvcrtmodule.c.h | 75 +- PC/clinic/winreg.c.h | 90 +- PC/clinic/winsound.c.h | 14 +- PC/msvcrtmodule.c | 73 +- PC/winreg.c | 92 +- PC/winsound.c | 12 +- Python/bltinmodule.c | 117 +- Python/clinic/bltinmodule.c.h | 71 +- Python/clinic/import.c.h | 54 +- Python/import.c | 56 +- Tools/clinic/clinic.py | 2 +- 71 files changed, 2092 insertions(+), 2113 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -80,6 +80,9 @@ Tools/Demos ----------- +- Issue #27332: Fixed the type of the first argument of module-level functions + generated by Argument Clinic. Patch by Petr Viktorin. + - Issue #27418: Fixed Tools/importbench/importbench.py. diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -64,8 +64,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_register(PyModuleDef *module, PyObject *search_function) -/*[clinic end generated code: output=d17608b6ad380eb8 input=369578467955cae4]*/ +_codecs_register(PyObject *module, PyObject *search_function) +/*[clinic end generated code: output=d1bf21e99db7d6d3 input=369578467955cae4]*/ { if (PyCodec_Register(search_function)) return NULL; @@ -82,8 +82,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_lookup_impl(PyModuleDef *module, const char *encoding) -/*[clinic end generated code: output=798e41aff0c04ef6 input=3c572c0db3febe9c]*/ +_codecs_lookup_impl(PyObject *module, const char *encoding) +/*[clinic end generated code: output=9f0afa572080c36d input=3c572c0db3febe9c]*/ { return _PyCodec_Lookup(encoding); } @@ -104,9 +104,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=5c073f62249c8d7c input=cd5b685040ff61f0]*/ +/*[clinic end generated code: output=385148eb9a067c86 input=cd5b685040ff61f0]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -131,9 +131,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=c81cbf6189a7f878 input=7702c0cc2fa1add6]*/ +/*[clinic end generated code: output=679882417dc3a0bd input=7702c0cc2fa1add6]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -154,8 +154,8 @@ [clinic start generated code]*/ static PyObject * -_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding) -/*[clinic end generated code: output=b56a9b99d2d28080 input=18d5d92d0e386c38]*/ +_codecs__forget_codec_impl(PyObject *module, const char *encoding) +/*[clinic end generated code: output=0bde9f0a5b084aa2 input=18d5d92d0e386c38]*/ { if (_PyCodec_Forget(encoding) < 0) { return NULL; @@ -181,9 +181,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=648fa3e78d03e658 input=0018edfd99db714d]*/ +/*[clinic end generated code: output=505200ba8056979a input=0018edfd99db714d]*/ { PyObject *decoded = PyBytes_DecodeEscape(data->buf, data->len, errors, 0, NULL); @@ -198,9 +198,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, +_codecs_escape_encode_impl(PyObject *module, PyObject *data, const char *errors) -/*[clinic end generated code: output=fcd6f34fe4111c50 input=da9ded00992f32f2]*/ +/*[clinic end generated code: output=4af1d477834bab34 input=da9ded00992f32f2]*/ { Py_ssize_t size; Py_ssize_t newsize; @@ -262,9 +262,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_decode_impl(PyObject *module, PyObject *obj, const char *errors) -/*[clinic end generated code: output=9fe47c2cd8807d92 input=8d57930aeda170c6]*/ +/*[clinic end generated code: output=edbfe175e09eff9a input=8d57930aeda170c6]*/ { if (PyUnicode_Check(obj)) { if (PyUnicode_READY(obj) < 0) @@ -295,9 +295,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_7_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=ca945e907e72e827 input=bc4d6247ecdb01e6]*/ +/*[clinic end generated code: output=0cd3a944a32a4089 input=bc4d6247ecdb01e6]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF7Stateful(data->buf, data->len, @@ -315,9 +315,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_8_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=7309f9ff4ef5c9b6 input=39161d71e7422ee2]*/ +/*[clinic end generated code: output=10f74dec8d9bb8bf input=39161d71e7422ee2]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF8Stateful(data->buf, data->len, @@ -335,9 +335,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=8d2fa0507d9bef2c input=f3cf01d1461007ce]*/ +/*[clinic end generated code: output=783b442abcbcc2d0 input=f3cf01d1461007ce]*/ { int byteorder = 0; /* This is overwritten unless final is true. */ @@ -357,9 +357,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=4fd621515ef4ce18 input=a77e3bf97335d94e]*/ +/*[clinic end generated code: output=899b9e6364379dcd input=a77e3bf97335d94e]*/ { int byteorder = -1; /* This is overwritten unless final is true. */ @@ -379,9 +379,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=792f4eacb3e1fa05 input=606f69fae91b5563]*/ +/*[clinic end generated code: output=49f6465ea07669c8 input=606f69fae91b5563]*/ { int byteorder = 1; /* This is overwritten unless final is true. */ @@ -409,9 +409,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final) -/*[clinic end generated code: output=f136a186dc2defa0 input=f6e7f697658c013e]*/ +/*[clinic end generated code: output=0f385f251ecc1988 input=f6e7f697658c013e]*/ { /* This is overwritten unless final is true. */ Py_ssize_t consumed = data->len; @@ -433,9 +433,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=b7635e55857e8efb input=86d4f41c6c2e763d]*/ +/*[clinic end generated code: output=2fc961807f7b145f input=86d4f41c6c2e763d]*/ { int byteorder = 0; /* This is overwritten unless final is true. */ @@ -455,9 +455,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=a79d1787d8ddf988 input=d18b650772d188ba]*/ +/*[clinic end generated code: output=ec8f46b67a94f3e6 input=d18b650772d188ba]*/ { int byteorder = -1; /* This is overwritten unless final is true. */ @@ -477,9 +477,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=a8356b0f36779981 input=19c271b5d34926d8]*/ +/*[clinic end generated code: output=ff82bae862c92c4e input=19c271b5d34926d8]*/ { int byteorder = 1; /* This is overwritten unless final is true. */ @@ -507,9 +507,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final) -/*[clinic end generated code: output=ab8c70977c1992f5 input=4af3e6ccfe34a076]*/ +/*[clinic end generated code: output=6bfb177dceaf4848 input=4af3e6ccfe34a076]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len, @@ -528,9 +528,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=d1aa63f2620c4999 input=49fd27d06813a7f5]*/ +/*[clinic end generated code: output=3ca3c917176b82ab input=49fd27d06813a7f5]*/ { PyObject *decoded = PyUnicode_DecodeUnicodeEscape(data->buf, data->len, errors); @@ -545,9 +545,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_raw_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=0bf96cc182d81379 input=770903a211434ebc]*/ +/*[clinic end generated code: output=c98eeb56028070a6 input=770903a211434ebc]*/ { PyObject *decoded = PyUnicode_DecodeRawUnicodeEscape(data->buf, data->len, errors); @@ -562,9 +562,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_latin_1_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=66b916f5055aaf13 input=5cad0f1759c618ec]*/ +/*[clinic end generated code: output=07f3dfa3f72c7d8f input=5cad0f1759c618ec]*/ { PyObject *decoded = PyUnicode_DecodeLatin1(data->buf, data->len, errors); return codec_tuple(decoded, data->len); @@ -578,9 +578,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_ascii_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=7f213a1b5cdafc65 input=ad1106f64037bd16]*/ +/*[clinic end generated code: output=2627d72058d42429 input=ad1106f64037bd16]*/ { PyObject *decoded = PyUnicode_DecodeASCII(data->buf, data->len, errors); return codec_tuple(decoded, data->len); @@ -595,9 +595,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_charmap_decode_impl(PyObject *module, Py_buffer *data, const char *errors, PyObject *mapping) -/*[clinic end generated code: output=87d27f365098bbae input=19712ca35c5a80e2]*/ +/*[clinic end generated code: output=2c335b09778cf895 input=19712ca35c5a80e2]*/ { PyObject *decoded; @@ -619,9 +619,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_mbcs_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=0ebaf3a5b20e53fa input=d492c1ca64f4fa8a]*/ +/*[clinic end generated code: output=39b65b8598938c4b input=d492c1ca64f4fa8a]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeMBCSStateful(data->buf, data->len, @@ -639,9 +639,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, +_codecs_code_page_decode_impl(PyObject *module, int codepage, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=4318e3d9971e31ba input=4f3152a304e21d51]*/ +/*[clinic end generated code: output=53008ea967da3fff input=4f3152a304e21d51]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeCodePageStateful(codepage, @@ -663,9 +663,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_readbuffer_encode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=319cc24083299859 input=b7c322b89d4ab923]*/ +/*[clinic end generated code: output=c645ea7cdb3d6e86 input=b7c322b89d4ab923]*/ { PyObject *result = PyBytes_FromStringAndSize(data->buf, data->len); return codec_tuple(result, data->len); @@ -679,9 +679,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_encode_impl(PyObject *module, PyObject *obj, const char *errors) -/*[clinic end generated code: output=be08457068ad503b input=8628f0280cf5ba61]*/ +/*[clinic end generated code: output=a72507dde4ea558f input=8628f0280cf5ba61]*/ { if (PyErr_WarnEx(PyExc_DeprecationWarning, "unicode_internal codec has been deprecated", @@ -724,9 +724,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_7_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=a7accc496a32b759 input=fd91a78f103b0421]*/ +/*[clinic end generated code: output=0feda21ffc921bc8 input=fd91a78f103b0421]*/ { PyObject *v; @@ -749,9 +749,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_8_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ec831d80e7aedede input=2c22d40532f071f3]*/ +/*[clinic end generated code: output=02bf47332b9c796c input=2c22d40532f071f3]*/ { PyObject *v; @@ -782,9 +782,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder) -/*[clinic end generated code: output=93ac58e960a9ee4d input=3935a489b2d5385e]*/ +/*[clinic end generated code: output=c654e13efa2e64e4 input=3935a489b2d5385e]*/ { PyObject *v; @@ -807,9 +807,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_le_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=422bedb8da34fb66 input=bc27df05d1d20dfe]*/ +/*[clinic end generated code: output=431b01e55f2d4995 input=bc27df05d1d20dfe]*/ { PyObject *v; @@ -832,9 +832,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_be_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=3aa7ee9502acdd77 input=5a69d4112763462b]*/ +/*[clinic end generated code: output=96886a6fd54dcae3 input=5a69d4112763462b]*/ { PyObject *v; @@ -865,9 +865,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder) -/*[clinic end generated code: output=3e7d5a003b02baed input=434a1efa492b8d58]*/ +/*[clinic end generated code: output=5c760da0c09a8b83 input=434a1efa492b8d58]*/ { PyObject *v; @@ -890,9 +890,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_le_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=5dda641cd33dbfc2 input=dfa2d7dc78b99422]*/ +/*[clinic end generated code: output=b65cd176de8e36d6 input=dfa2d7dc78b99422]*/ { PyObject *v; @@ -915,9 +915,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_be_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ccca8b44d91a7c7a input=4595617b18169002]*/ +/*[clinic end generated code: output=1d9e71a9358709e9 input=4595617b18169002]*/ { PyObject *v; @@ -940,9 +940,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=389f23d2b8f8d80b input=8273506f14076912]*/ +/*[clinic end generated code: output=66271b30bc4f7a3c input=8273506f14076912]*/ { PyObject *v; @@ -965,9 +965,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_raw_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=fec4e39d6ec37a62 input=181755d5dfacef3c]*/ +/*[clinic end generated code: output=a66a806ed01c830a input=181755d5dfacef3c]*/ { PyObject *v; @@ -990,9 +990,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_latin_1_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ecf00eb8e48c889c input=f03f6dcf1d84bee4]*/ +/*[clinic end generated code: output=2c28c83a27884e08 input=f03f6dcf1d84bee4]*/ { PyObject *v; @@ -1015,9 +1015,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_ascii_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=a9d18fc6b6b91cfb input=d87e25a10a593fee]*/ +/*[clinic end generated code: output=b5e035182d33befc input=d87e25a10a593fee]*/ { PyObject *v; @@ -1041,9 +1041,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_charmap_encode_impl(PyObject *module, PyObject *str, const char *errors, PyObject *mapping) -/*[clinic end generated code: output=14ca42b83853c643 input=85f4172661e8dad9]*/ +/*[clinic end generated code: output=047476f48495a9e9 input=85f4172661e8dad9]*/ { PyObject *v; @@ -1068,8 +1068,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map) -/*[clinic end generated code: output=9485b58fa44afa6a input=d91a91d1717dbc6d]*/ +_codecs_charmap_build_impl(PyObject *module, PyObject *map) +/*[clinic end generated code: output=bb073c27031db9ac input=d91a91d1717dbc6d]*/ { return PyUnicode_BuildEncodingMap(map); } @@ -1084,9 +1084,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, - const char *errors) -/*[clinic end generated code: output=d1a013bc68798bd7 input=65c09ee1e4203263]*/ +_codecs_mbcs_encode_impl(PyObject *module, PyObject *str, const char *errors) +/*[clinic end generated code: output=76e2e170c966c080 input=65c09ee1e4203263]*/ { PyObject *v; @@ -1110,9 +1109,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, - PyObject *str, const char *errors) -/*[clinic end generated code: output=3b406618dbfbce25 input=c8562ec460c2e309]*/ +_codecs_code_page_encode_impl(PyObject *module, int code_page, PyObject *str, + const char *errors) +/*[clinic end generated code: output=45673f6085657a9e input=c8562ec460c2e309]*/ { PyObject *v; @@ -1147,9 +1146,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_register_error_impl(PyModuleDef *module, const char *errors, +_codecs_register_error_impl(PyObject *module, const char *errors, PyObject *handler) -/*[clinic end generated code: output=be00d3b1849ce68a input=5e6709203c2e33fe]*/ +/*[clinic end generated code: output=fa2f7d1879b3067d input=5e6709203c2e33fe]*/ { if (PyCodec_RegisterError(errors, handler)) return NULL; @@ -1168,8 +1167,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_lookup_error_impl(PyModuleDef *module, const char *name) -/*[clinic end generated code: output=731e6df8c83c6158 input=4775dd65e6235aba]*/ +_codecs_lookup_error_impl(PyObject *module, const char *name) +/*[clinic end generated code: output=087f05dc0c9a98cc input=4775dd65e6235aba]*/ { return PyCodec_LookupError(name); } diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c --- a/Modules/_cryptmodule.c +++ b/Modules/_cryptmodule.c @@ -31,8 +31,8 @@ [clinic start generated code]*/ static PyObject * -crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt) -/*[clinic end generated code: output=995ad1e854d83069 input=0e8edec9c364352b]*/ +crypt_crypt_impl(PyObject *module, const char *word, const char *salt) +/*[clinic end generated code: output=0512284a03d2803c input=0e8edec9c364352b]*/ { /* On some platforms (AtheOS) crypt returns NULL for an invalid salt. Return None in that case. XXX Maybe raise an exception? */ diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -430,9 +430,9 @@ [clinic start generated code]*/ static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, +dbmopen_impl(PyObject *module, const char *filename, const char *flags, int mode) -/*[clinic end generated code: output=e8d4b36f25c733fd input=226334bade5764e6]*/ +/*[clinic end generated code: output=5fade8cf16e0755f input=226334bade5764e6]*/ { int iflags; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -562,9 +562,8 @@ [clinic start generated code]*/ static PyObject * -dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, - int mode) -/*[clinic end generated code: output=365b31415c03ccd4 input=55563cd60e51984a]*/ +dbmopen_impl(PyObject *module, const char *name, const char *flags, int mode) +/*[clinic end generated code: output=31aa1bafdf5da688 input=55563cd60e51984a]*/ { int iflags; diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -227,10 +227,10 @@ [clinic start generated code]*/ static PyObject * -_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, +_io_open_impl(PyObject *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener) -/*[clinic end generated code: output=7615d0d746eb14d2 input=f4e1ca75223987bc]*/ +/*[clinic end generated code: output=aefafc4ce2b46dc0 input=f4e1ca75223987bc]*/ { unsigned i; diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -130,12 +130,12 @@ {"open", (PyCFunction)_io_open, METH_VARARGS|METH_KEYWORDS, _io_open__doc__}, static PyObject * -_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, +_io_open_impl(PyObject *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener); static PyObject * -_io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_io_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL}; @@ -156,4 +156,4 @@ exit: return return_value; } -/*[clinic end generated code: output=97cdc09bf68a8064 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bc2c003cb7daeafe input=a9049054013a1b77]*/ diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -1342,8 +1342,8 @@ [clinic start generated code]*/ static PyObject * -_lzma_is_check_supported_impl(PyModuleDef *module, int check_id) -/*[clinic end generated code: output=bb828e90e00ad96e input=5518297b97b2318f]*/ +_lzma_is_check_supported_impl(PyObject *module, int check_id) +/*[clinic end generated code: output=e4f14ba3ce2ad0a5 input=5518297b97b2318f]*/ { return PyBool_FromLong(lzma_check_is_supported(check_id)); } @@ -1360,8 +1360,8 @@ [clinic start generated code]*/ static PyObject * -_lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter) -/*[clinic end generated code: output=b5fe690acd6b61d1 input=d4c64f1b557c77d4]*/ +_lzma__encode_filter_properties_impl(PyObject *module, lzma_filter filter) +/*[clinic end generated code: output=5c93c8e14e7be5a8 input=d4c64f1b557c77d4]*/ { lzma_ret lzret; uint32_t encoded_size; @@ -1400,9 +1400,9 @@ [clinic start generated code]*/ static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, +_lzma__decode_filter_properties_impl(PyObject *module, lzma_vli filter_id, Py_buffer *encoded_props) -/*[clinic end generated code: output=af248f570746668b input=246410800782160c]*/ +/*[clinic end generated code: output=714fd2ef565d5c60 input=246410800782160c]*/ { lzma_filter filter; lzma_ret lzret; diff --git a/Modules/_opcode.c b/Modules/_opcode.c --- a/Modules/_opcode.c +++ b/Modules/_opcode.c @@ -20,8 +20,8 @@ [clinic start generated code]*/ static int -_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg) -/*[clinic end generated code: output=1fcafd5596c6b050 input=2d0a9ee53c0418f5]*/ +_opcode_stack_effect_impl(PyObject *module, int opcode, PyObject *oparg) +/*[clinic end generated code: output=ad39467fa3ad22ce input=2d0a9ee53c0418f5]*/ { int effect; int oparg_int = 0; diff --git a/Modules/_pickle.c b/Modules/_pickle.c --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -6961,9 +6961,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, +_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=0de7dff89c406816 input=830f8a64cef6f042]*/ +/*[clinic end generated code: output=a4774d5fde7d34de input=830f8a64cef6f042]*/ { PicklerObject *pickler = _Pickler_New(); @@ -7015,9 +7015,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, +_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=daa380db56fe07b9 input=293dbeda181580b7]*/ +/*[clinic end generated code: output=d75d5cda456fd261 input=293dbeda181580b7]*/ { PyObject *result; PicklerObject *pickler = _Pickler_New(); @@ -7076,9 +7076,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, +_pickle_load_impl(PyObject *module, PyObject *file, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=798f1c57cb2b4eb1 input=01b44dd3fc07afa7]*/ +/*[clinic end generated code: output=69e298160285199e input=01b44dd3fc07afa7]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); @@ -7130,9 +7130,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, +_pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=61e9cdb01e36a736 input=70605948a719feb9]*/ +/*[clinic end generated code: output=1e7cb2343f2c440f input=70605948a719feb9]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); diff --git a/Modules/_sre.c b/Modules/_sre.c --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -278,8 +278,8 @@ [clinic start generated code]*/ static int -_sre_getcodesize_impl(PyModuleDef *module) -/*[clinic end generated code: output=794f1f98ef4883e5 input=bd6f6ecf4916bb2b]*/ +_sre_getcodesize_impl(PyObject *module) +/*[clinic end generated code: output=e0db7ce34a6dd7b1 input=bd6f6ecf4916bb2b]*/ { return sizeof(SRE_CODE); } @@ -294,8 +294,8 @@ [clinic start generated code]*/ static int -_sre_getlower_impl(PyModuleDef *module, int character, int flags) -/*[clinic end generated code: output=5fc3616ae2a4c306 input=087d2f1c44bbca6f]*/ +_sre_getlower_impl(PyObject *module, int character, int flags) +/*[clinic end generated code: output=47eebc4c1214feb5 input=087d2f1c44bbca6f]*/ { if (flags & SRE_FLAG_LOCALE) return sre_lower_locale(character); @@ -1454,10 +1454,10 @@ [clinic start generated code]*/ static PyObject * -_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, +_sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *code, Py_ssize_t groups, PyObject *groupindex, PyObject *indexgroup) -/*[clinic end generated code: output=3004b293730bf309 input=7d059ec8ae1edb85]*/ +/*[clinic end generated code: output=ef9c2b3693776404 input=7d059ec8ae1edb85]*/ { /* "compile" pattern descriptor to pattern object */ diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1321,8 +1321,8 @@ [clinic start generated code]*/ static PyObject * -_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=679e01db282804e9 input=cdeaaf02d4346628]*/ +_ssl__test_decode_cert_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=96becb9abb23c091 input=cdeaaf02d4346628]*/ { PyObject *retval = NULL; X509 *x=NULL; @@ -3832,8 +3832,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy) -/*[clinic end generated code: output=0f8d5c8cce328958 input=580c85e6a3a4fe29]*/ +_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy) +/*[clinic end generated code: output=e6dd48df9c9024e9 input=580c85e6a3a4fe29]*/ { const char *buf; Py_ssize_t len, written; @@ -3898,8 +3898,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_bytes_impl(PyModuleDef *module, int n) -/*[clinic end generated code: output=7d8741bdc1d435f3 input=678ddf2872dfebfc]*/ +_ssl_RAND_bytes_impl(PyObject *module, int n) +/*[clinic end generated code: output=977da635e4838bc7 input=678ddf2872dfebfc]*/ { return PySSL_RAND(n, 0); } @@ -3916,8 +3916,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n) -/*[clinic end generated code: output=dd673813107f3875 input=58312bd53f9bbdd0]*/ +_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n) +/*[clinic end generated code: output=b1509e937000e52d input=58312bd53f9bbdd0]*/ { return PySSL_RAND(n, 1); } @@ -3932,8 +3932,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_status_impl(PyModuleDef *module) -/*[clinic end generated code: output=7f7ef57bc7dd1d1c input=8a774b02d1dc81f3]*/ +_ssl_RAND_status_impl(PyObject *module) +/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=8a774b02d1dc81f3]*/ { return PyLong_FromLong(RAND_status()); } @@ -3951,8 +3951,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=8e728e501e28541b input=1aeb7eb948312195]*/ +_ssl_RAND_egd_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=02a67c7c367f52fa input=1aeb7eb948312195]*/ { int bytes = RAND_egd(PyBytes_AsString(path)); Py_DECREF(path); @@ -3977,8 +3977,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_get_default_verify_paths_impl(PyModuleDef *module) -/*[clinic end generated code: output=5a2820ce7e3304d3 input=5210c953d98c3eb5]*/ +_ssl_get_default_verify_paths_impl(PyObject *module) +/*[clinic end generated code: output=e5b62a466271928b input=5210c953d98c3eb5]*/ { PyObject *ofile_env = NULL; PyObject *ofile = NULL; @@ -4049,8 +4049,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name) -/*[clinic end generated code: output=2ae2c30531b8809f input=1c1e7d0aa7c48602]*/ +_ssl_txt2obj_impl(PyObject *module, const char *txt, int name) +/*[clinic end generated code: output=c38e3991347079c1 input=1c1e7d0aa7c48602]*/ { PyObject *result = NULL; ASN1_OBJECT *obj; @@ -4074,8 +4074,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_nid2obj_impl(PyModuleDef *module, int nid) -/*[clinic end generated code: output=8db1df89e44badb8 input=51787a3bee7d8f98]*/ +_ssl_nid2obj_impl(PyObject *module, int nid) +/*[clinic end generated code: output=4a98ab691cd4f84a input=51787a3bee7d8f98]*/ { PyObject *result = NULL; ASN1_OBJECT *obj; @@ -4193,8 +4193,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name) -/*[clinic end generated code: output=cc4ebc10b8adacfc input=915f60d70461ea4e]*/ +_ssl_enum_certificates_impl(PyObject *module, const char *store_name) +/*[clinic end generated code: output=5134dc8bb3a3c893 input=915f60d70461ea4e]*/ { HCERTSTORE hStore = NULL; PCCERT_CONTEXT pCertCtx = NULL; @@ -4281,8 +4281,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name) -/*[clinic end generated code: output=763490a2aa1c50d5 input=a1f1d7629f1c5d3d]*/ +_ssl_enum_crls_impl(PyObject *module, const char *store_name) +/*[clinic end generated code: output=bce467f60ccd03b6 input=a1f1d7629f1c5d3d]*/ { HCERTSTORE hStore = NULL; PCCRL_CONTEXT pCrlCtx = NULL; diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -3175,8 +3175,8 @@ [clinic start generated code]*/ static PyObject * -_tkinter__flatten(PyModuleDef *module, PyObject *item) -/*[clinic end generated code: output=9505049ec74c3480 input=6b9c12260aa1157f]*/ +_tkinter__flatten(PyObject *module, PyObject *item) +/*[clinic end generated code: output=cad02a3f97f29862 input=6b9c12260aa1157f]*/ { FlattenContext context; @@ -3220,11 +3220,11 @@ [clinic start generated code]*/ static PyObject * -_tkinter_create_impl(PyModuleDef *module, const char *screenName, +_tkinter_create_impl(PyObject *module, const char *screenName, const char *baseName, const char *className, int interactive, int wantobjects, int wantTk, int sync, const char *use) -/*[clinic end generated code: output=b8847800fc3b27eb input=0d522aad1cb0ca0e]*/ +/*[clinic end generated code: output=e3315607648e6bb4 input=0d522aad1cb0ca0e]*/ { /* XXX baseName is not used anymore; * try getting rid of it. */ @@ -3250,8 +3250,8 @@ [clinic start generated code]*/ static PyObject * -_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val) -/*[clinic end generated code: output=0b9d7ef7940461ea input=deca1d6f9e6dae47]*/ +_tkinter_setbusywaitinterval_impl(PyObject *module, int new_val) +/*[clinic end generated code: output=42bf7757dc2d0ab6 input=deca1d6f9e6dae47]*/ { if (new_val < 0) { PyErr_SetString(PyExc_ValueError, @@ -3269,8 +3269,8 @@ [clinic start generated code]*/ static int -_tkinter_getbusywaitinterval_impl(PyModuleDef *module) -/*[clinic end generated code: output=9d09eee026e96971 input=a695878d2d576a84]*/ +_tkinter_getbusywaitinterval_impl(PyObject *module) +/*[clinic end generated code: output=23b72d552001f5c7 input=a695878d2d576a84]*/ { return Tkinter_busywaitinterval; } diff --git a/Modules/_weakref.c b/Modules/_weakref.c --- a/Modules/_weakref.c +++ b/Modules/_weakref.c @@ -22,8 +22,8 @@ [clinic start generated code]*/ static Py_ssize_t -_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object) -/*[clinic end generated code: output=6a6ad0b98285e468 input=cedb69711b6a2507]*/ +_weakref_getweakrefcount_impl(PyObject *module, PyObject *object) +/*[clinic end generated code: output=301806d59558ff3e input=cedb69711b6a2507]*/ { PyWeakReference **list; diff --git a/Modules/_winapi.c b/Modules/_winapi.c --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -368,8 +368,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle) -/*[clinic end generated code: output=0548595c71cb4bf7 input=7f0e4ac36e0352b8]*/ +_winapi_CloseHandle_impl(PyObject *module, HANDLE handle) +/*[clinic end generated code: output=7ad37345f07bd782 input=7f0e4ac36e0352b8]*/ { BOOL success; @@ -391,9 +391,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, +_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle, int use_overlapped) -/*[clinic end generated code: output=fed3b165d1bca95a input=edc83da007ebf3be]*/ +/*[clinic end generated code: output=335a0e7086800671 input=edc83da007ebf3be]*/ { BOOL success; OverlappedObject *overlapped = NULL; @@ -443,12 +443,12 @@ [clinic start generated code]*/ static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, +_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file) -/*[clinic end generated code: output=c6e1d78f8affd10c input=6423c3e40372dbd5]*/ +/*[clinic end generated code: output=417ddcebfc5a3d53 input=6423c3e40372dbd5]*/ { HANDLE handle; @@ -474,9 +474,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, +_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, LPWSTR dst_path) -/*[clinic end generated code: output=eccae9364e46f6da input=8cd1f9964b6e3d36]*/ +/*[clinic end generated code: output=66b7eb746e1dfa25 input=8cd1f9964b6e3d36]*/ { /* Privilege adjustment */ HANDLE token = NULL; @@ -617,12 +617,12 @@ [clinic start generated code]*/ static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, - DWORD open_mode, DWORD pipe_mode, - DWORD max_instances, DWORD out_buffer_size, - DWORD in_buffer_size, DWORD default_timeout, +_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode, + DWORD pipe_mode, DWORD max_instances, + DWORD out_buffer_size, DWORD in_buffer_size, + DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes) -/*[clinic end generated code: output=44ca2a06a219b523 input=5a73530b84d8bc37]*/ +/*[clinic end generated code: output=80f8c07346a94fbc input=5a73530b84d8bc37]*/ { HANDLE handle; @@ -653,9 +653,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, - DWORD size) -/*[clinic end generated code: output=fef99f3b4222bc78 input=c4f2cfa56ef68d90]*/ +_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size) +/*[clinic end generated code: output=1c4411d8699f0925 input=c4f2cfa56ef68d90]*/ { HANDLE read_pipe; HANDLE write_pipe; @@ -814,13 +813,13 @@ [clinic start generated code]*/ static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, +_winapi_CreateProcess_impl(PyObject *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, Py_UNICODE *current_directory, PyObject *startup_info) -/*[clinic end generated code: output=874bb350ff9ed4ef input=4a43b05038d639bb]*/ +/*[clinic end generated code: output=4652a33aff4b0ae1 input=4a43b05038d639bb]*/ { BOOL result; PROCESS_INFORMATION pi; @@ -900,13 +899,12 @@ [clinic start generated code]*/ static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, - HANDLE source_process_handle, +_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options) -/*[clinic end generated code: output=0799515b68b5237b input=b933e3f2356a8c12]*/ +/*[clinic end generated code: output=ad9711397b5dcd4e input=b933e3f2356a8c12]*/ { HANDLE target_handle; BOOL result; @@ -940,8 +938,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode) -/*[clinic end generated code: output=25f3b499c24cedc8 input=4f05466a9406c558]*/ +_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode) +/*[clinic end generated code: output=a387deb651175301 input=4f05466a9406c558]*/ { #if defined(Py_DEBUG) SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOALIGNMENTFAULTEXCEPT| @@ -961,8 +959,8 @@ [clinic start generated code]*/ static HANDLE -_winapi_GetCurrentProcess_impl(PyModuleDef *module) -/*[clinic end generated code: output=be29ac3ad5f8291e input=b213403fd4b96b41]*/ +_winapi_GetCurrentProcess_impl(PyObject *module) +/*[clinic end generated code: output=ddeb4dd2ffadf344 input=b213403fd4b96b41]*/ { return GetCurrentProcess(); } @@ -977,8 +975,8 @@ [clinic start generated code]*/ static DWORD -_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process) -/*[clinic end generated code: output=0b10f0848a410f65 input=61b6bfc7dc2ee374]*/ +_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process) +/*[clinic end generated code: output=b4620bdf2bccf36b input=61b6bfc7dc2ee374]*/ { DWORD exit_code; BOOL result; @@ -998,8 +996,8 @@ [clinic start generated code]*/ static DWORD -_winapi_GetLastError_impl(PyModuleDef *module) -/*[clinic end generated code: output=0ea00d8e67bdd056 input=62d47fb9bce038ba]*/ +_winapi_GetLastError_impl(PyObject *module) +/*[clinic end generated code: output=8585b827cb1a92c5 input=62d47fb9bce038ba]*/ { return GetLastError(); } @@ -1021,8 +1019,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle) -/*[clinic end generated code: output=90063dc63bdbfa18 input=6d66ff7deca5d11f]*/ +_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle) +/*[clinic end generated code: output=85b4b728c5160306 input=6d66ff7deca5d11f]*/ { BOOL result; WCHAR filename[MAX_PATH]; @@ -1049,8 +1047,8 @@ [clinic start generated code]*/ static HANDLE -_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle) -/*[clinic end generated code: output=5f5ca28b28c6fad2 input=07016b06a2fc8826]*/ +_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle) +/*[clinic end generated code: output=0e613001e73ab614 input=07016b06a2fc8826]*/ { HANDLE handle; @@ -1071,8 +1069,8 @@ [clinic start generated code]*/ static long -_winapi_GetVersion_impl(PyModuleDef *module) -/*[clinic end generated code: output=95a2f8ad3b948ca8 input=e21dff8d0baeded2]*/ +_winapi_GetVersion_impl(PyObject *module) +/*[clinic end generated code: output=e41f0db5a3b82682 input=e21dff8d0baeded2]*/ /* Disable deprecation warnings about GetVersionEx as the result is being passed straight through to the caller, who is responsible for using it correctly. */ @@ -1095,9 +1093,9 @@ [clinic start generated code]*/ static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, +_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id) -/*[clinic end generated code: output=6bc52eda82a3d226 input=ec98c4cf4ea2ec36]*/ +/*[clinic end generated code: output=b42b6b81ea5a0fc3 input=ec98c4cf4ea2ec36]*/ { HANDLE handle; @@ -1119,8 +1117,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size) -/*[clinic end generated code: output=e6c908e2fb63c798 input=c7aa53bfbce69d70]*/ +_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size) +/*[clinic end generated code: output=d0c3e29e49d323dd input=c7aa53bfbce69d70]*/ { PyObject *buf = NULL; DWORD nread, navail, nleft; @@ -1167,9 +1165,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, +_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size, int use_overlapped) -/*[clinic end generated code: output=d7695db4db97b135 input=8dd810194e86ac7d]*/ +/*[clinic end generated code: output=492029ca98161d84 input=8dd810194e86ac7d]*/ { DWORD nread; PyObject *buf; @@ -1229,11 +1227,11 @@ [clinic start generated code]*/ static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, +_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout) -/*[clinic end generated code: output=25aa3c28dee223ce input=9142d72163d0faa6]*/ +/*[clinic end generated code: output=f2129d222cbfa095 input=9142d72163d0faa6]*/ { PyObject *oArgs[3] = {mode, max_collection_count, collect_data_timeout}; DWORD dwArgs[3], *pArgs[3] = {NULL, NULL, NULL}; @@ -1268,9 +1266,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, +_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle, UINT exit_code) -/*[clinic end generated code: output=937c1bb6219aca8b input=d6bc0aa1ee3bb4df]*/ +/*[clinic end generated code: output=f4e99ac3f0b1f34a input=d6bc0aa1ee3bb4df]*/ { BOOL result; @@ -1291,8 +1289,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout) -/*[clinic end generated code: output=5bca5e02f448c9d7 input=36fc781291b1862c]*/ +_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout) +/*[clinic end generated code: output=c2866f4439b1fe38 input=36fc781291b1862c]*/ { BOOL success; @@ -1316,10 +1314,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, - PyObject *handle_seq, BOOL wait_flag, - DWORD milliseconds) -/*[clinic end generated code: output=acb440728d06d130 input=36f76ca057cd28a0]*/ +_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq, + BOOL wait_flag, DWORD milliseconds) +/*[clinic end generated code: output=295e3f00b8e45899 input=36f76ca057cd28a0]*/ { DWORD result; HANDLE handles[MAXIMUM_WAIT_OBJECTS]; @@ -1393,9 +1390,9 @@ [clinic start generated code]*/ static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, +_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle, DWORD milliseconds) -/*[clinic end generated code: output=34ae40c269749c48 input=443d1ab076edc7b1]*/ +/*[clinic end generated code: output=3c4715d8f1b39859 input=443d1ab076edc7b1]*/ { DWORD result; @@ -1420,9 +1417,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, +_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer, int use_overlapped) -/*[clinic end generated code: output=65e70ea41f4d2a1d input=51846a5af52053fd]*/ +/*[clinic end generated code: output=2ca80f6bf3fa92e3 input=51846a5af52053fd]*/ { Py_buffer _buf, *buf; DWORD len, written; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1938,11 +1938,11 @@ [clinic start generated code]*/ static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, +array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items) -/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=2464dc8f4c7736b5]*/ +/*[clinic end generated code: output=e05263141ba28365 input=2464dc8f4c7736b5]*/ { PyObject *converted_items; PyObject *result; diff --git a/Modules/audioop.c b/Modules/audioop.c --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -407,9 +407,9 @@ [clinic start generated code]*/ static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width, Py_ssize_t index) -/*[clinic end generated code: output=3995e189fdc8ec16 input=88edbe2871393549]*/ +/*[clinic end generated code: output=8fe1b1775134f39a input=88edbe2871393549]*/ { int val; @@ -434,8 +434,8 @@ [clinic start generated code]*/ static PyObject * -audioop_max_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=85047ee1001f2305 input=32bea5ea0ac8c223]*/ +audioop_max_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=e6c5952714f1c3f0 input=32bea5ea0ac8c223]*/ { Py_ssize_t i; unsigned int absval, max = 0; @@ -462,8 +462,8 @@ [clinic start generated code]*/ static PyObject * -audioop_minmax_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=ae8f5513c64fd569 input=89848e9b927a0696]*/ +audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=473fda66b15c836e input=89848e9b927a0696]*/ { Py_ssize_t i; /* -1 trick below is needed on Windows to support -0x80000000 without @@ -491,8 +491,8 @@ [clinic start generated code]*/ static PyObject * -audioop_avg_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=7fccd645c95f4860 input=1114493c7611334d]*/ +audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=4410a4c12c3586e6 input=1114493c7611334d]*/ { Py_ssize_t i; int avg; @@ -520,8 +520,8 @@ [clinic start generated code]*/ static PyObject * -audioop_rms_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=7b398702c81b709d input=4cc57c6c94219d78]*/ +audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=1e7871c826445698 input=4cc57c6c94219d78]*/ { Py_ssize_t i; unsigned int res; @@ -594,9 +594,9 @@ [clinic start generated code]*/ static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfit_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=609eedf5d823d6dd input=62c305605e183c9a]*/ +/*[clinic end generated code: output=5752306d83cbbada input=62c305605e183c9a]*/ { const short *cp1, *cp2; Py_ssize_t len1, len2; @@ -663,9 +663,9 @@ [clinic start generated code]*/ static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=5566a8c55de54f99 input=816680301d012b21]*/ +/*[clinic end generated code: output=14ea95652c1afcf8 input=816680301d012b21]*/ { const short *cp1, *cp2; Py_ssize_t len; @@ -705,9 +705,9 @@ [clinic start generated code]*/ static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findmax_impl(PyObject *module, Py_buffer *fragment, Py_ssize_t length) -/*[clinic end generated code: output=01fe796fad2573bb input=2f304801ed42383c]*/ +/*[clinic end generated code: output=f008128233523040 input=2f304801ed42383c]*/ { const short *cp1; Py_ssize_t len1; @@ -759,8 +759,8 @@ [clinic start generated code]*/ static PyObject * -audioop_avgpp_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=06c8380fd6e34207 input=0b3cceeae420a7d9]*/ +audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=269596b0d5ae0b2b input=0b3cceeae420a7d9]*/ { Py_ssize_t i; int prevval, prevextremevalid = 0, prevextreme = 0; @@ -816,8 +816,8 @@ [clinic start generated code]*/ static PyObject * -audioop_maxpp_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=c300c0bd7e8535c0 input=671a13e1518f80a1]*/ +audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=5b918ed5dbbdb978 input=671a13e1518f80a1]*/ { Py_ssize_t i; int prevval, prevextremevalid = 0, prevextreme = 0; @@ -869,8 +869,8 @@ [clinic start generated code]*/ static PyObject * -audioop_cross_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=99e6572d7d7cdbf1 input=b1b3f15b83f6b41a]*/ +audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=5938dcdd74a1f431 input=b1b3f15b83f6b41a]*/ { Py_ssize_t i; int prevval; @@ -900,9 +900,9 @@ [clinic start generated code]*/ static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width, double factor) -/*[clinic end generated code: output=1c7c31191ac86b10 input=c726667baa157d3c]*/ +/*[clinic end generated code: output=6cd48fe796da0ea4 input=c726667baa157d3c]*/ { signed char *ncp; Py_ssize_t i; @@ -942,9 +942,9 @@ [clinic start generated code]*/ static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=553f547c5e29e3b6 input=c4ec949b3f4dddfa]*/ +/*[clinic end generated code: output=235c8277216d4e4e input=c4ec949b3f4dddfa]*/ { signed char *cp, *ncp; Py_ssize_t len, i; @@ -991,9 +991,9 @@ [clinic start generated code]*/ static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=697bb6ba41e9dd2c input=27b6395ebfdff37a]*/ +/*[clinic end generated code: output=046f13defa5f1595 input=27b6395ebfdff37a]*/ { signed char *ncp; Py_ssize_t i; @@ -1039,9 +1039,9 @@ [clinic start generated code]*/ static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, +audioop_add_impl(PyObject *module, Py_buffer *fragment1, Py_buffer *fragment2, int width) -/*[clinic end generated code: output=fe6c12f143e0b027 input=4a8d4bae4c1605c7]*/ +/*[clinic end generated code: output=60140af4d1aab6f2 input=4a8d4bae4c1605c7]*/ { signed char *ncp; Py_ssize_t i; @@ -1098,9 +1098,8 @@ [clinic start generated code]*/ static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, - int bias) -/*[clinic end generated code: output=ac1f4dda20a01c26 input=2b5cce5c3bb4838c]*/ +audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias) +/*[clinic end generated code: output=6e0aa8f68f045093 input=2b5cce5c3bb4838c]*/ { signed char *ncp; Py_ssize_t i; @@ -1158,8 +1157,8 @@ [clinic start generated code]*/ static PyObject * -audioop_reverse_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=6ec3c91337f5925e input=668f890cf9f9d225]*/ +audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=b44135698418da14 input=668f890cf9f9d225]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1191,8 +1190,8 @@ [clinic start generated code]*/ static PyObject * -audioop_byteswap_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=bfe4aa584b7a3f5b input=fae7611ceffa5c82]*/ +audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=50838a9e4b87cd4d input=fae7611ceffa5c82]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1226,9 +1225,9 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width, int newwidth) -/*[clinic end generated code: output=cb6ca950d1df9898 input=5ce08c8aa2f24d96]*/ +/*[clinic end generated code: output=17b14109248f1d99 input=5ce08c8aa2f24d96]*/ { unsigned char *ncp; Py_ssize_t i, j; @@ -1284,10 +1283,10 @@ [clinic start generated code]*/ static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB) -/*[clinic end generated code: output=59e1787bfa49b9d9 input=aff3acdc94476191]*/ +/*[clinic end generated code: output=624038e843243139 input=aff3acdc94476191]*/ { char *cp, *ncp; Py_ssize_t len; @@ -1465,8 +1464,8 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2ulaw_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=26263cc877c5e1bc input=2450d1b870b6bac2]*/ +audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=14fb62b16fe8ea8e input=2450d1b870b6bac2]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1498,8 +1497,8 @@ [clinic start generated code]*/ static PyObject * -audioop_ulaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=9864cb34e3a1d876 input=45d53ddce5be7d06]*/ +audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=378356b047521ba2 input=45d53ddce5be7d06]*/ { unsigned char *cp; signed char *ncp; @@ -1538,8 +1537,8 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2alaw_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=d5bf14bd0fe6fdcd input=ffb1ef8bb39da945]*/ +audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=d076f130121a82f0 input=ffb1ef8bb39da945]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1571,8 +1570,8 @@ [clinic start generated code]*/ static PyObject * -audioop_alaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=d2b604ddd036e1cd input=4140626046cd1772]*/ +audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=85c365ec559df647 input=4140626046cd1772]*/ { unsigned char *cp; signed char *ncp; @@ -1613,9 +1612,9 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=93f0996f592b5ce5 input=12919d549b90c90a]*/ +/*[clinic end generated code: output=cc19f159f16c6793 input=12919d549b90c90a]*/ { signed char *ncp; Py_ssize_t i; @@ -1741,9 +1740,9 @@ [clinic start generated code]*/ static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=236cf6dc2c829181 input=f5221144f5ca9ef0]*/ +/*[clinic end generated code: output=3440ea105acb3456 input=f5221144f5ca9ef0]*/ { signed char *cp; signed char *ncp; diff --git a/Modules/binascii.c b/Modules/binascii.c --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -253,8 +253,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=5779f39b0b48459f input=7cafeaf73df63d1c]*/ +binascii_a2b_uu_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=e027f8e0b0598742 input=7cafeaf73df63d1c]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -339,8 +339,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=181021b69bb9a414 input=00fdf458ce8b465b]*/ +binascii_b2a_uu_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=0070670e52e4aa6b input=00fdf458ce8b465b]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -426,8 +426,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=3e351b702bed56d2 input=5872acf6e1cac243]*/ +binascii_a2b_base64_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=0628223f19fd3f9b input=5872acf6e1cac243]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -534,8 +534,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=3cd61fbee2913285 input=14ec4e47371174a9]*/ +binascii_b2a_base64_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=4d96663170778dc3 input=14ec4e47371174a9]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -601,8 +601,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=60bcdbbd28b105cd input=0d914c680e0eed55]*/ +binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=4d6d8c54d54ea1c1 input=0d914c680e0eed55]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -684,8 +684,8 @@ [clinic start generated code]*/ static PyObject * -binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=0905da344dbf0648 input=e1f1712447a82b09]*/ +binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=393d79338f5f5629 input=e1f1712447a82b09]*/ { unsigned char *in_data, *out_data; PyObject *rv; @@ -748,8 +748,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=5a987810d5e3cdbb input=9596ebe019fe12ba]*/ +binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=d0aa5a704bc9f7de input=9596ebe019fe12ba]*/ { unsigned char *ascii_data, *bin_data; int leftbits = 0; @@ -805,8 +805,8 @@ [clinic start generated code]*/ static PyObject * -binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=f7afd89b789946ab input=54cdd49fc014402c]*/ +binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=9826619565de1c6c input=54cdd49fc014402c]*/ { unsigned char *in_data, *out_data; unsigned char in_byte, in_repeat; @@ -919,8 +919,8 @@ [clinic start generated code]*/ static unsigned int -binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) -/*[clinic end generated code: output=167c2dac62625717 input=add8c53712ccceda]*/ +binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc) +/*[clinic end generated code: output=8ec2a78590d19170 input=add8c53712ccceda]*/ { unsigned char *bin_data; Py_ssize_t len; @@ -1067,8 +1067,8 @@ [clinic start generated code]*/ static unsigned int -binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) -/*[clinic end generated code: output=620a961643393c4f input=bbe340bc99d25aa8]*/ +binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc) +/*[clinic end generated code: output=52cf59056a78593b input=bbe340bc99d25aa8]*/ #ifdef USE_ZLIB_CRC32 /* This was taken from zlibmodule.c PyZlib_crc32 (but is PY_SSIZE_T_CLEAN) */ @@ -1115,8 +1115,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=179318922c2f8fda input=96423cfa299ff3b1]*/ +binascii_b2a_hex_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=92fec1a95c9897a0 input=96423cfa299ff3b1]*/ { return _Py_strhex_bytes((const char *)data->buf, data->len); } @@ -1130,8 +1130,8 @@ [clinic start generated code]*/ static PyObject * -binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=6098440091fb61dc input=2e3afae7f083f061]*/ +binascii_hexlify_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=749e95e53c14880c input=2e3afae7f083f061]*/ { return _Py_strhex_bytes((const char *)data->buf, data->len); } @@ -1164,8 +1164,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr) -/*[clinic end generated code: output=d61da452b5c6d290 input=9e1e7f2f94db24fd]*/ +binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr) +/*[clinic end generated code: output=0cc1a139af0eeecb input=9e1e7f2f94db24fd]*/ { char* argbuf; Py_ssize_t arglen; @@ -1218,8 +1218,8 @@ [clinic start generated code]*/ static PyObject * -binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr) -/*[clinic end generated code: output=17cec7544499803e input=dd8c012725f462da]*/ +binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr) +/*[clinic end generated code: output=51a64c06c79629e3 input=dd8c012725f462da]*/ { return binascii_a2b_hex_impl(module, hexstr); } @@ -1250,8 +1250,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header) -/*[clinic end generated code: output=a44ef88270352114 input=5187a0d3d8e54f3b]*/ +binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header) +/*[clinic end generated code: output=e99f7846cfb9bc53 input=5187a0d3d8e54f3b]*/ { Py_ssize_t in, out; char ch; @@ -1356,9 +1356,9 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, +binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs, int istext, int header) -/*[clinic end generated code: output=a87ca9ccb94e2a9f input=7f2a9aaa008e92b2]*/ +/*[clinic end generated code: output=e9884472ebb1a94c input=7f2a9aaa008e92b2]*/ { Py_ssize_t in, out; unsigned char *databuf, *odata; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1847,8 +1847,8 @@ [clinic start generated code]*/ static PyObject * -_multibytecodec___create_codec(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=fbe74f6510640163 input=6840b2a6b183fcfa]*/ +_multibytecodec___create_codec(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=cfa3dce8260e809d input=6840b2a6b183fcfa]*/ { MultibyteCodecObject *self; MultibyteCodec *codec; diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -25,10 +25,10 @@ {"lookup", (PyCFunction)_codecs_lookup, METH_O, _codecs_lookup__doc__}, static PyObject * -_codecs_lookup_impl(PyModuleDef *module, const char *encoding); +_codecs_lookup_impl(PyObject *module, const char *encoding); static PyObject * -_codecs_lookup(PyModuleDef *module, PyObject *arg) +_codecs_lookup(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *encoding; @@ -57,11 +57,11 @@ {"encode", (PyCFunction)_codecs_encode, METH_VARARGS|METH_KEYWORDS, _codecs_encode__doc__}, static PyObject * -_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_encode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_codecs_encode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "encoding", "errors", NULL}; @@ -94,11 +94,11 @@ {"decode", (PyCFunction)_codecs_decode, METH_VARARGS|METH_KEYWORDS, _codecs_decode__doc__}, static PyObject * -_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_decode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_codecs_decode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "encoding", "errors", NULL}; @@ -125,10 +125,10 @@ {"_forget_codec", (PyCFunction)_codecs__forget_codec, METH_O, _codecs__forget_codec__doc__}, static PyObject * -_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding); +_codecs__forget_codec_impl(PyObject *module, const char *encoding); static PyObject * -_codecs__forget_codec(PyModuleDef *module, PyObject *arg) +_codecs__forget_codec(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *encoding; @@ -150,11 +150,11 @@ {"escape_decode", (PyCFunction)_codecs_escape_decode, METH_VARARGS, _codecs_escape_decode__doc__}, static PyObject * -_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -182,11 +182,11 @@ {"escape_encode", (PyCFunction)_codecs_escape_encode, METH_VARARGS, _codecs_escape_encode__doc__}, static PyObject * -_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, +_codecs_escape_encode_impl(PyObject *module, PyObject *data, const char *errors); static PyObject * -_codecs_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *data; @@ -210,11 +210,11 @@ {"unicode_internal_decode", (PyCFunction)_codecs_unicode_internal_decode, METH_VARARGS, _codecs_unicode_internal_decode__doc__}, static PyObject * -_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_decode_impl(PyObject *module, PyObject *obj, const char *errors); static PyObject * -_codecs_unicode_internal_decode(PyModuleDef *module, PyObject *args) +_codecs_unicode_internal_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -238,11 +238,11 @@ {"utf_7_decode", (PyCFunction)_codecs_utf_7_decode, METH_VARARGS, _codecs_utf_7_decode__doc__}, static PyObject * -_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_7_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_7_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_7_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -271,11 +271,11 @@ {"utf_8_decode", (PyCFunction)_codecs_utf_8_decode, METH_VARARGS, _codecs_utf_8_decode__doc__}, static PyObject * -_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_8_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_8_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_8_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -304,11 +304,11 @@ {"utf_16_decode", (PyCFunction)_codecs_utf_16_decode, METH_VARARGS, _codecs_utf_16_decode__doc__}, static PyObject * -_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -337,11 +337,11 @@ {"utf_16_le_decode", (PyCFunction)_codecs_utf_16_le_decode, METH_VARARGS, _codecs_utf_16_le_decode__doc__}, static PyObject * -_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_le_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_le_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -370,11 +370,11 @@ {"utf_16_be_decode", (PyCFunction)_codecs_utf_16_be_decode, METH_VARARGS, _codecs_utf_16_be_decode__doc__}, static PyObject * -_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_be_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_be_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -404,11 +404,11 @@ {"utf_16_ex_decode", (PyCFunction)_codecs_utf_16_ex_decode, METH_VARARGS, _codecs_utf_16_ex_decode__doc__}, static PyObject * -_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final); static PyObject * -_codecs_utf_16_ex_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_ex_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -438,11 +438,11 @@ {"utf_32_decode", (PyCFunction)_codecs_utf_32_decode, METH_VARARGS, _codecs_utf_32_decode__doc__}, static PyObject * -_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -471,11 +471,11 @@ {"utf_32_le_decode", (PyCFunction)_codecs_utf_32_le_decode, METH_VARARGS, _codecs_utf_32_le_decode__doc__}, static PyObject * -_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_le_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_le_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -504,11 +504,11 @@ {"utf_32_be_decode", (PyCFunction)_codecs_utf_32_be_decode, METH_VARARGS, _codecs_utf_32_be_decode__doc__}, static PyObject * -_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_be_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_be_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -538,11 +538,11 @@ {"utf_32_ex_decode", (PyCFunction)_codecs_utf_32_ex_decode, METH_VARARGS, _codecs_utf_32_ex_decode__doc__}, static PyObject * -_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final); static PyObject * -_codecs_utf_32_ex_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_ex_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -572,11 +572,11 @@ {"unicode_escape_decode", (PyCFunction)_codecs_unicode_escape_decode, METH_VARARGS, _codecs_unicode_escape_decode__doc__}, static PyObject * -_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_unicode_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_unicode_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -604,11 +604,11 @@ {"raw_unicode_escape_decode", (PyCFunction)_codecs_raw_unicode_escape_decode, METH_VARARGS, _codecs_raw_unicode_escape_decode__doc__}, static PyObject * -_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_raw_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_raw_unicode_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_raw_unicode_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -636,11 +636,11 @@ {"latin_1_decode", (PyCFunction)_codecs_latin_1_decode, METH_VARARGS, _codecs_latin_1_decode__doc__}, static PyObject * -_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_latin_1_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_latin_1_decode(PyModuleDef *module, PyObject *args) +_codecs_latin_1_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -668,11 +668,11 @@ {"ascii_decode", (PyCFunction)_codecs_ascii_decode, METH_VARARGS, _codecs_ascii_decode__doc__}, static PyObject * -_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_ascii_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_ascii_decode(PyModuleDef *module, PyObject *args) +_codecs_ascii_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -700,11 +700,11 @@ {"charmap_decode", (PyCFunction)_codecs_charmap_decode, METH_VARARGS, _codecs_charmap_decode__doc__}, static PyObject * -_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_charmap_decode_impl(PyObject *module, Py_buffer *data, const char *errors, PyObject *mapping); static PyObject * -_codecs_charmap_decode(PyModuleDef *module, PyObject *args) +_codecs_charmap_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -735,11 +735,11 @@ {"mbcs_decode", (PyCFunction)_codecs_mbcs_decode, METH_VARARGS, _codecs_mbcs_decode__doc__}, static PyObject * -_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_mbcs_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_mbcs_decode(PyModuleDef *module, PyObject *args) +_codecs_mbcs_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -772,11 +772,11 @@ {"code_page_decode", (PyCFunction)_codecs_code_page_decode, METH_VARARGS, _codecs_code_page_decode__doc__}, static PyObject * -_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, +_codecs_code_page_decode_impl(PyObject *module, int codepage, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_code_page_decode(PyModuleDef *module, PyObject *args) +_codecs_code_page_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int codepage; @@ -808,11 +808,11 @@ {"readbuffer_encode", (PyCFunction)_codecs_readbuffer_encode, METH_VARARGS, _codecs_readbuffer_encode__doc__}, static PyObject * -_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_readbuffer_encode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_readbuffer_encode(PyModuleDef *module, PyObject *args) +_codecs_readbuffer_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -840,11 +840,11 @@ {"unicode_internal_encode", (PyCFunction)_codecs_unicode_internal_encode, METH_VARARGS, _codecs_unicode_internal_encode__doc__}, static PyObject * -_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_encode_impl(PyObject *module, PyObject *obj, const char *errors); static PyObject * -_codecs_unicode_internal_encode(PyModuleDef *module, PyObject *args) +_codecs_unicode_internal_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -868,11 +868,11 @@ {"utf_7_encode", (PyCFunction)_codecs_utf_7_encode, METH_VARARGS, _codecs_utf_7_encode__doc__}, static PyObject * -_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_7_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_7_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_7_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -896,11 +896,11 @@ {"utf_8_encode", (PyCFunction)_codecs_utf_8_encode, METH_VARARGS, _codecs_utf_8_encode__doc__}, static PyObject * -_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_8_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_8_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_8_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -924,11 +924,11 @@ {"utf_16_encode", (PyCFunction)_codecs_utf_16_encode, METH_VARARGS, _codecs_utf_16_encode__doc__}, static PyObject * -_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder); static PyObject * -_codecs_utf_16_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -953,11 +953,11 @@ {"utf_16_le_encode", (PyCFunction)_codecs_utf_16_le_encode, METH_VARARGS, _codecs_utf_16_le_encode__doc__}, static PyObject * -_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_le_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_16_le_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_le_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -981,11 +981,11 @@ {"utf_16_be_encode", (PyCFunction)_codecs_utf_16_be_encode, METH_VARARGS, _codecs_utf_16_be_encode__doc__}, static PyObject * -_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_be_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_16_be_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_be_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1009,11 +1009,11 @@ {"utf_32_encode", (PyCFunction)_codecs_utf_32_encode, METH_VARARGS, _codecs_utf_32_encode__doc__}, static PyObject * -_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder); static PyObject * -_codecs_utf_32_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1038,11 +1038,11 @@ {"utf_32_le_encode", (PyCFunction)_codecs_utf_32_le_encode, METH_VARARGS, _codecs_utf_32_le_encode__doc__}, static PyObject * -_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_le_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_32_le_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_le_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1066,11 +1066,11 @@ {"utf_32_be_encode", (PyCFunction)_codecs_utf_32_be_encode, METH_VARARGS, _codecs_utf_32_be_encode__doc__}, static PyObject * -_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_be_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_32_be_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_be_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1094,11 +1094,11 @@ {"unicode_escape_encode", (PyCFunction)_codecs_unicode_escape_encode, METH_VARARGS, _codecs_unicode_escape_encode__doc__}, static PyObject * -_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_unicode_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_unicode_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1122,11 +1122,11 @@ {"raw_unicode_escape_encode", (PyCFunction)_codecs_raw_unicode_escape_encode, METH_VARARGS, _codecs_raw_unicode_escape_encode__doc__}, static PyObject * -_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_raw_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_raw_unicode_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_raw_unicode_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1150,11 +1150,11 @@ {"latin_1_encode", (PyCFunction)_codecs_latin_1_encode, METH_VARARGS, _codecs_latin_1_encode__doc__}, static PyObject * -_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_latin_1_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_latin_1_encode(PyModuleDef *module, PyObject *args) +_codecs_latin_1_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1178,11 +1178,11 @@ {"ascii_encode", (PyCFunction)_codecs_ascii_encode, METH_VARARGS, _codecs_ascii_encode__doc__}, static PyObject * -_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_ascii_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_ascii_encode(PyModuleDef *module, PyObject *args) +_codecs_ascii_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1206,11 +1206,11 @@ {"charmap_encode", (PyCFunction)_codecs_charmap_encode, METH_VARARGS, _codecs_charmap_encode__doc__}, static PyObject * -_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_charmap_encode_impl(PyObject *module, PyObject *str, const char *errors, PyObject *mapping); static PyObject * -_codecs_charmap_encode(PyModuleDef *module, PyObject *args) +_codecs_charmap_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1235,10 +1235,10 @@ {"charmap_build", (PyCFunction)_codecs_charmap_build, METH_O, _codecs_charmap_build__doc__}, static PyObject * -_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map); +_codecs_charmap_build_impl(PyObject *module, PyObject *map); static PyObject * -_codecs_charmap_build(PyModuleDef *module, PyObject *arg) +_codecs_charmap_build(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *map; @@ -1262,11 +1262,10 @@ {"mbcs_encode", (PyCFunction)_codecs_mbcs_encode, METH_VARARGS, _codecs_mbcs_encode__doc__}, static PyObject * -_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, - const char *errors); +_codecs_mbcs_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_mbcs_encode(PyModuleDef *module, PyObject *args) +_codecs_mbcs_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1294,11 +1293,11 @@ {"code_page_encode", (PyCFunction)_codecs_code_page_encode, METH_VARARGS, _codecs_code_page_encode__doc__}, static PyObject * -_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, - PyObject *str, const char *errors); +_codecs_code_page_encode_impl(PyObject *module, int code_page, PyObject *str, + const char *errors); static PyObject * -_codecs_code_page_encode(PyModuleDef *module, PyObject *args) +_codecs_code_page_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int code_page; @@ -1330,11 +1329,11 @@ {"register_error", (PyCFunction)_codecs_register_error, METH_VARARGS, _codecs_register_error__doc__}, static PyObject * -_codecs_register_error_impl(PyModuleDef *module, const char *errors, +_codecs_register_error_impl(PyObject *module, const char *errors, PyObject *handler); static PyObject * -_codecs_register_error(PyModuleDef *module, PyObject *args) +_codecs_register_error(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *errors; @@ -1362,10 +1361,10 @@ {"lookup_error", (PyCFunction)_codecs_lookup_error, METH_O, _codecs_lookup_error__doc__}, static PyObject * -_codecs_lookup_error_impl(PyModuleDef *module, const char *name); +_codecs_lookup_error_impl(PyObject *module, const char *name); static PyObject * -_codecs_lookup_error(PyModuleDef *module, PyObject *arg) +_codecs_lookup_error(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *name; @@ -1393,4 +1392,4 @@ #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=9c9967048027c1c7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=42fed94e2ab765ba input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cryptmodule.c.h b/Modules/clinic/_cryptmodule.c.h --- a/Modules/clinic/_cryptmodule.c.h +++ b/Modules/clinic/_cryptmodule.c.h @@ -17,10 +17,10 @@ {"crypt", (PyCFunction)crypt_crypt, METH_VARARGS, crypt_crypt__doc__}, static PyObject * -crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt); +crypt_crypt_impl(PyObject *module, const char *word, const char *salt); static PyObject * -crypt_crypt(PyModuleDef *module, PyObject *args) +crypt_crypt(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *word; @@ -34,4 +34,4 @@ exit: return return_value; } -/*[clinic end generated code: output=22c295c9bce018c4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e0493a9691537690 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -119,11 +119,11 @@ {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, +dbmopen_impl(PyObject *module, const char *filename, const char *flags, int mode); static PyObject * -dbmopen(PyModuleDef *module, PyObject *args) +dbmopen(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *filename; @@ -138,4 +138,4 @@ exit: return return_value; } -/*[clinic end generated code: output=1d92e81b28c558d0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fff12f168cdf8b43 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h --- a/Modules/clinic/_gdbmmodule.c.h +++ b/Modules/clinic/_gdbmmodule.c.h @@ -231,11 +231,10 @@ {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, static PyObject * -dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, - int mode); +dbmopen_impl(PyObject *module, const char *name, const char *flags, int mode); static PyObject * -dbmopen(PyModuleDef *module, PyObject *args) +dbmopen(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *name; @@ -250,4 +249,4 @@ exit: return return_value; } -/*[clinic end generated code: output=d3d8d871bcccb68a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9ac7a89858a9765f input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -163,10 +163,10 @@ {"is_check_supported", (PyCFunction)_lzma_is_check_supported, METH_O, _lzma_is_check_supported__doc__}, static PyObject * -_lzma_is_check_supported_impl(PyModuleDef *module, int check_id); +_lzma_is_check_supported_impl(PyObject *module, int check_id); static PyObject * -_lzma_is_check_supported(PyModuleDef *module, PyObject *arg) +_lzma_is_check_supported(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int check_id; @@ -191,10 +191,10 @@ {"_encode_filter_properties", (PyCFunction)_lzma__encode_filter_properties, METH_O, _lzma__encode_filter_properties__doc__}, static PyObject * -_lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter); +_lzma__encode_filter_properties_impl(PyObject *module, lzma_filter filter); static PyObject * -_lzma__encode_filter_properties(PyModuleDef *module, PyObject *arg) +_lzma__encode_filter_properties(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; lzma_filter filter = {LZMA_VLI_UNKNOWN, NULL}; @@ -223,11 +223,11 @@ {"_decode_filter_properties", (PyCFunction)_lzma__decode_filter_properties, METH_VARARGS, _lzma__decode_filter_properties__doc__}, static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, +_lzma__decode_filter_properties_impl(PyObject *module, lzma_vli filter_id, Py_buffer *encoded_props); static PyObject * -_lzma__decode_filter_properties(PyModuleDef *module, PyObject *args) +_lzma__decode_filter_properties(PyObject *module, PyObject *args) { PyObject *return_value = NULL; lzma_vli filter_id; @@ -245,4 +245,4 @@ return return_value; } -/*[clinic end generated code: output=2d3e0842be3d3fe1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fada06020fd318cc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_opcode.c.h b/Modules/clinic/_opcode.c.h --- a/Modules/clinic/_opcode.c.h +++ b/Modules/clinic/_opcode.c.h @@ -12,10 +12,10 @@ {"stack_effect", (PyCFunction)_opcode_stack_effect, METH_VARARGS, _opcode_stack_effect__doc__}, static int -_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg); +_opcode_stack_effect_impl(PyObject *module, int opcode, PyObject *oparg); static PyObject * -_opcode_stack_effect(PyModuleDef *module, PyObject *args) +_opcode_stack_effect(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int opcode; @@ -33,4 +33,4 @@ exit: return return_value; } -/*[clinic end generated code: output=8ee7cb735705e8b3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=984d6de140303d10 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -380,11 +380,11 @@ {"dump", (PyCFunction)_pickle_dump, METH_VARARGS|METH_KEYWORDS, _pickle_dump__doc__}, static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, +_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dump(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_dump(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "file", "protocol", "fix_imports", NULL}; @@ -424,11 +424,11 @@ {"dumps", (PyCFunction)_pickle_dumps, METH_VARARGS|METH_KEYWORDS, _pickle_dumps__doc__}, static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, +_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dumps(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_dumps(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "protocol", "fix_imports", NULL}; @@ -478,11 +478,11 @@ {"load", (PyCFunction)_pickle_load, METH_VARARGS|METH_KEYWORDS, _pickle_load__doc__}, static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, +_pickle_load_impl(PyObject *module, PyObject *file, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_load(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_load(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; @@ -524,11 +524,11 @@ {"loads", (PyCFunction)_pickle_loads, METH_VARARGS|METH_KEYWORDS, _pickle_loads__doc__}, static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, +_pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "fix_imports", "encoding", "errors", NULL}; @@ -545,4 +545,4 @@ exit: return return_value; } -/*[clinic end generated code: output=a7169d4fbbeef827 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=93657e55d6a748af input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h --- a/Modules/clinic/_sre.c.h +++ b/Modules/clinic/_sre.c.h @@ -11,10 +11,10 @@ {"getcodesize", (PyCFunction)_sre_getcodesize, METH_NOARGS, _sre_getcodesize__doc__}, static int -_sre_getcodesize_impl(PyModuleDef *module); +_sre_getcodesize_impl(PyObject *module); static PyObject * -_sre_getcodesize(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_sre_getcodesize(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; int _return_value; @@ -37,10 +37,10 @@ {"getlower", (PyCFunction)_sre_getlower, METH_VARARGS, _sre_getlower__doc__}, static int -_sre_getlower_impl(PyModuleDef *module, int character, int flags); +_sre_getlower_impl(PyObject *module, int character, int flags); static PyObject * -_sre_getlower(PyModuleDef *module, PyObject *args) +_sre_getlower(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int character; @@ -406,12 +406,12 @@ {"compile", (PyCFunction)_sre_compile, METH_VARARGS|METH_KEYWORDS, _sre_compile__doc__}, static PyObject * -_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, +_sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *code, Py_ssize_t groups, PyObject *groupindex, PyObject *indexgroup); static PyObject * -_sre_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sre_compile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; @@ -690,4 +690,4 @@ { return _sre_SRE_Scanner_search_impl(self); } -/*[clinic end generated code: output=d1d73ab2c5008bd4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a4ce9e5b748ce532 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -28,10 +28,10 @@ {"_test_decode_cert", (PyCFunction)_ssl__test_decode_cert, METH_O, _ssl__test_decode_cert__doc__}, static PyObject * -_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path); +_ssl__test_decode_cert_impl(PyObject *module, PyObject *path); static PyObject * -_ssl__test_decode_cert(PyModuleDef *module, PyObject *arg) +_ssl__test_decode_cert(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -795,10 +795,10 @@ {"RAND_add", (PyCFunction)_ssl_RAND_add, METH_VARARGS, _ssl_RAND_add__doc__}, static PyObject * -_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy); +_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy); static PyObject * -_ssl_RAND_add(PyModuleDef *module, PyObject *args) +_ssl_RAND_add(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer view = {NULL, NULL}; @@ -827,10 +827,10 @@ {"RAND_bytes", (PyCFunction)_ssl_RAND_bytes, METH_O, _ssl_RAND_bytes__doc__}, static PyObject * -_ssl_RAND_bytes_impl(PyModuleDef *module, int n); +_ssl_RAND_bytes_impl(PyObject *module, int n); static PyObject * -_ssl_RAND_bytes(PyModuleDef *module, PyObject *arg) +_ssl_RAND_bytes(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int n; @@ -856,10 +856,10 @@ {"RAND_pseudo_bytes", (PyCFunction)_ssl_RAND_pseudo_bytes, METH_O, _ssl_RAND_pseudo_bytes__doc__}, static PyObject * -_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n); +_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n); static PyObject * -_ssl_RAND_pseudo_bytes(PyModuleDef *module, PyObject *arg) +_ssl_RAND_pseudo_bytes(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int n; @@ -885,10 +885,10 @@ {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__}, static PyObject * -_ssl_RAND_status_impl(PyModuleDef *module); +_ssl_RAND_status_impl(PyObject *module); static PyObject * -_ssl_RAND_status(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_ssl_RAND_status(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _ssl_RAND_status_impl(module); } @@ -908,10 +908,10 @@ {"RAND_egd", (PyCFunction)_ssl_RAND_egd, METH_O, _ssl_RAND_egd__doc__}, static PyObject * -_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path); +_ssl_RAND_egd_impl(PyObject *module, PyObject *path); static PyObject * -_ssl_RAND_egd(PyModuleDef *module, PyObject *arg) +_ssl_RAND_egd(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -938,10 +938,10 @@ {"get_default_verify_paths", (PyCFunction)_ssl_get_default_verify_paths, METH_NOARGS, _ssl_get_default_verify_paths__doc__}, static PyObject * -_ssl_get_default_verify_paths_impl(PyModuleDef *module); +_ssl_get_default_verify_paths_impl(PyObject *module); static PyObject * -_ssl_get_default_verify_paths(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_ssl_get_default_verify_paths(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _ssl_get_default_verify_paths_impl(module); } @@ -959,10 +959,10 @@ {"txt2obj", (PyCFunction)_ssl_txt2obj, METH_VARARGS|METH_KEYWORDS, _ssl_txt2obj__doc__}, static PyObject * -_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name); +_ssl_txt2obj_impl(PyObject *module, const char *txt, int name); static PyObject * -_ssl_txt2obj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_txt2obj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"txt", "name", NULL}; @@ -988,10 +988,10 @@ {"nid2obj", (PyCFunction)_ssl_nid2obj, METH_O, _ssl_nid2obj__doc__}, static PyObject * -_ssl_nid2obj_impl(PyModuleDef *module, int nid); +_ssl_nid2obj_impl(PyObject *module, int nid); static PyObject * -_ssl_nid2obj(PyModuleDef *module, PyObject *arg) +_ssl_nid2obj(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int nid; @@ -1022,10 +1022,10 @@ {"enum_certificates", (PyCFunction)_ssl_enum_certificates, METH_VARARGS|METH_KEYWORDS, _ssl_enum_certificates__doc__}, static PyObject * -_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name); +_ssl_enum_certificates_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_certificates(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_enum_certificates(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"store_name", NULL}; @@ -1059,10 +1059,10 @@ {"enum_crls", (PyCFunction)_ssl_enum_crls, METH_VARARGS|METH_KEYWORDS, _ssl_enum_crls__doc__}, static PyObject * -_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name); +_ssl_enum_crls_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_crls(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_enum_crls(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"store_name", NULL}; @@ -1102,4 +1102,4 @@ #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=abe795f14cb63b6a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6fb10594d8351dc5 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_tkinter.c.h b/Modules/clinic/_tkinter.c.h --- a/Modules/clinic/_tkinter.c.h +++ b/Modules/clinic/_tkinter.c.h @@ -532,13 +532,13 @@ {"create", (PyCFunction)_tkinter_create, METH_VARARGS, _tkinter_create__doc__}, static PyObject * -_tkinter_create_impl(PyModuleDef *module, const char *screenName, +_tkinter_create_impl(PyObject *module, const char *screenName, const char *baseName, const char *className, int interactive, int wantobjects, int wantTk, int sync, const char *use); static PyObject * -_tkinter_create(PyModuleDef *module, PyObject *args) +_tkinter_create(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *screenName = NULL; @@ -571,10 +571,10 @@ {"setbusywaitinterval", (PyCFunction)_tkinter_setbusywaitinterval, METH_O, _tkinter_setbusywaitinterval__doc__}, static PyObject * -_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val); +_tkinter_setbusywaitinterval_impl(PyObject *module, int new_val); static PyObject * -_tkinter_setbusywaitinterval(PyModuleDef *module, PyObject *arg) +_tkinter_setbusywaitinterval(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int new_val; @@ -597,10 +597,10 @@ {"getbusywaitinterval", (PyCFunction)_tkinter_getbusywaitinterval, METH_NOARGS, _tkinter_getbusywaitinterval__doc__}, static int -_tkinter_getbusywaitinterval_impl(PyModuleDef *module); +_tkinter_getbusywaitinterval_impl(PyObject *module); static PyObject * -_tkinter_getbusywaitinterval(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_tkinter_getbusywaitinterval(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; int _return_value; @@ -621,4 +621,4 @@ #ifndef _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #endif /* !defined(_TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF) */ -/*[clinic end generated code: output=6dd667b91cf8addd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=f9057c8bf288633d input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_weakref.c.h b/Modules/clinic/_weakref.c.h --- a/Modules/clinic/_weakref.c.h +++ b/Modules/clinic/_weakref.c.h @@ -12,10 +12,10 @@ {"getweakrefcount", (PyCFunction)_weakref_getweakrefcount, METH_O, _weakref_getweakrefcount__doc__}, static Py_ssize_t -_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object); +_weakref_getweakrefcount_impl(PyObject *module, PyObject *object); static PyObject * -_weakref_getweakrefcount(PyModuleDef *module, PyObject *object) +_weakref_getweakrefcount(PyObject *module, PyObject *object) { PyObject *return_value = NULL; Py_ssize_t _return_value; @@ -28,4 +28,4 @@ exit: return return_value; } -/*[clinic end generated code: output=4da9aade63eed77f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d9086c8576d46933 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -71,10 +71,10 @@ {"CloseHandle", (PyCFunction)_winapi_CloseHandle, METH_O, _winapi_CloseHandle__doc__}, static PyObject * -_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle); +_winapi_CloseHandle_impl(PyObject *module, HANDLE handle); static PyObject * -_winapi_CloseHandle(PyModuleDef *module, PyObject *arg) +_winapi_CloseHandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HANDLE handle; @@ -96,11 +96,11 @@ {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_VARARGS|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__}, static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, +_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle, int use_overlapped); static PyObject * -_winapi_ConnectNamedPipe(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_ConnectNamedPipe(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "overlapped", NULL}; @@ -127,14 +127,14 @@ {"CreateFile", (PyCFunction)_winapi_CreateFile, METH_VARARGS, _winapi_CreateFile__doc__}, static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, +_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file); static PyObject * -_winapi_CreateFile(PyModuleDef *module, PyObject *args) +_winapi_CreateFile(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR file_name; @@ -169,11 +169,11 @@ {"CreateJunction", (PyCFunction)_winapi_CreateJunction, METH_VARARGS, _winapi_CreateJunction__doc__}, static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, +_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, LPWSTR dst_path); static PyObject * -_winapi_CreateJunction(PyModuleDef *module, PyObject *args) +_winapi_CreateJunction(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPWSTR src_path; @@ -199,14 +199,14 @@ {"CreateNamedPipe", (PyCFunction)_winapi_CreateNamedPipe, METH_VARARGS, _winapi_CreateNamedPipe__doc__}, static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, - DWORD open_mode, DWORD pipe_mode, - DWORD max_instances, DWORD out_buffer_size, - DWORD in_buffer_size, DWORD default_timeout, +_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode, + DWORD pipe_mode, DWORD max_instances, + DWORD out_buffer_size, DWORD in_buffer_size, + DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes); static PyObject * -_winapi_CreateNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_CreateNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR name; @@ -248,11 +248,10 @@ {"CreatePipe", (PyCFunction)_winapi_CreatePipe, METH_VARARGS, _winapi_CreatePipe__doc__}, static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, - DWORD size); +_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size); static PyObject * -_winapi_CreatePipe(PyModuleDef *module, PyObject *args) +_winapi_CreatePipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *pipe_attrs; @@ -287,7 +286,7 @@ {"CreateProcess", (PyCFunction)_winapi_CreateProcess, METH_VARARGS, _winapi_CreateProcess__doc__}, static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, +_winapi_CreateProcess_impl(PyObject *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, @@ -295,7 +294,7 @@ PyObject *startup_info); static PyObject * -_winapi_CreateProcess(PyModuleDef *module, PyObject *args) +_winapi_CreateProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *application_name; @@ -333,15 +332,14 @@ {"DuplicateHandle", (PyCFunction)_winapi_DuplicateHandle, METH_VARARGS, _winapi_DuplicateHandle__doc__}, static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, - HANDLE source_process_handle, +_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options); static PyObject * -_winapi_DuplicateHandle(PyModuleDef *module, PyObject *args) +_winapi_DuplicateHandle(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE source_process_handle; @@ -375,10 +373,10 @@ {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__}, static PyObject * -_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode); +_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode); static PyObject * -_winapi_ExitProcess(PyModuleDef *module, PyObject *arg) +_winapi_ExitProcess(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; UINT ExitCode; @@ -401,10 +399,10 @@ {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__}, static HANDLE -_winapi_GetCurrentProcess_impl(PyModuleDef *module); +_winapi_GetCurrentProcess_impl(PyObject *module); static PyObject * -_winapi_GetCurrentProcess(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetCurrentProcess(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; HANDLE _return_value; @@ -430,10 +428,10 @@ {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__}, static DWORD -_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process); +_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process); static PyObject * -_winapi_GetExitCodeProcess(PyModuleDef *module, PyObject *arg) +_winapi_GetExitCodeProcess(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HANDLE process; @@ -459,10 +457,10 @@ {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__}, static DWORD -_winapi_GetLastError_impl(PyModuleDef *module); +_winapi_GetLastError_impl(PyObject *module); static PyObject * -_winapi_GetLastError(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetLastError(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; DWORD _return_value; @@ -493,10 +491,10 @@ {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__}, static PyObject * -_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle); +_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle); static PyObject * -_winapi_GetModuleFileName(PyModuleDef *module, PyObject *arg) +_winapi_GetModuleFileName(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HMODULE module_handle; @@ -524,10 +522,10 @@ {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__}, static HANDLE -_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle); +_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle); static PyObject * -_winapi_GetStdHandle(PyModuleDef *module, PyObject *arg) +_winapi_GetStdHandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; DWORD std_handle; @@ -556,10 +554,10 @@ {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__}, static long -_winapi_GetVersion_impl(PyModuleDef *module); +_winapi_GetVersion_impl(PyObject *module); static PyObject * -_winapi_GetVersion(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetVersion(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; long _return_value; @@ -582,11 +580,11 @@ {"OpenProcess", (PyCFunction)_winapi_OpenProcess, METH_VARARGS, _winapi_OpenProcess__doc__}, static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, +_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id); static PyObject * -_winapi_OpenProcess(PyModuleDef *module, PyObject *args) +_winapi_OpenProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; DWORD desired_access; @@ -617,10 +615,10 @@ {"PeekNamedPipe", (PyCFunction)_winapi_PeekNamedPipe, METH_VARARGS, _winapi_PeekNamedPipe__doc__}, static PyObject * -_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size); +_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size); static PyObject * -_winapi_PeekNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_PeekNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -644,11 +642,11 @@ {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_VARARGS|METH_KEYWORDS, _winapi_ReadFile__doc__}, static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, +_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size, int use_overlapped); static PyObject * -_winapi_ReadFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_ReadFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "size", "overlapped", NULL}; @@ -675,13 +673,13 @@ {"SetNamedPipeHandleState", (PyCFunction)_winapi_SetNamedPipeHandleState, METH_VARARGS, _winapi_SetNamedPipeHandleState__doc__}, static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, +_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout); static PyObject * -_winapi_SetNamedPipeHandleState(PyModuleDef *module, PyObject *args) +_winapi_SetNamedPipeHandleState(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE named_pipe; @@ -708,11 +706,11 @@ {"TerminateProcess", (PyCFunction)_winapi_TerminateProcess, METH_VARARGS, _winapi_TerminateProcess__doc__}, static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, +_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle, UINT exit_code); static PyObject * -_winapi_TerminateProcess(PyModuleDef *module, PyObject *args) +_winapi_TerminateProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -736,10 +734,10 @@ {"WaitNamedPipe", (PyCFunction)_winapi_WaitNamedPipe, METH_VARARGS, _winapi_WaitNamedPipe__doc__}, static PyObject * -_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout); +_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout); static PyObject * -_winapi_WaitNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_WaitNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR name; @@ -764,12 +762,11 @@ {"WaitForMultipleObjects", (PyCFunction)_winapi_WaitForMultipleObjects, METH_VARARGS, _winapi_WaitForMultipleObjects__doc__}, static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, - PyObject *handle_seq, BOOL wait_flag, - DWORD milliseconds); +_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq, + BOOL wait_flag, DWORD milliseconds); static PyObject * -_winapi_WaitForMultipleObjects(PyModuleDef *module, PyObject *args) +_winapi_WaitForMultipleObjects(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *handle_seq; @@ -799,11 +796,11 @@ {"WaitForSingleObject", (PyCFunction)_winapi_WaitForSingleObject, METH_VARARGS, _winapi_WaitForSingleObject__doc__}, static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, +_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle, DWORD milliseconds); static PyObject * -_winapi_WaitForSingleObject(PyModuleDef *module, PyObject *args) +_winapi_WaitForSingleObject(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -831,11 +828,11 @@ {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_VARARGS|METH_KEYWORDS, _winapi_WriteFile__doc__}, static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, +_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer, int use_overlapped); static PyObject * -_winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "buffer", "overlapped", NULL}; @@ -851,4 +848,4 @@ exit: return return_value; } -/*[clinic end generated code: output=98771c6584056d19 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a4c4b2a9fcb0bea1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -438,13 +438,13 @@ {"_array_reconstructor", (PyCFunction)array__array_reconstructor, METH_VARARGS, array__array_reconstructor__doc__}, static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, +array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items); static PyObject * -array__array_reconstructor(PyModuleDef *module, PyObject *args) +array__array_reconstructor(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyTypeObject *arraytype; @@ -496,4 +496,4 @@ #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=d2e82c65ea841cfc input=a9049054013a1b77]*/ +/*[clinic end generated code: output=305df3f5796039e4 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/audioop.c.h b/Modules/clinic/audioop.c.h --- a/Modules/clinic/audioop.c.h +++ b/Modules/clinic/audioop.c.h @@ -12,11 +12,11 @@ {"getsample", (PyCFunction)audioop_getsample, METH_VARARGS, audioop_getsample__doc__}, static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width, Py_ssize_t index); static PyObject * -audioop_getsample(PyModuleDef *module, PyObject *args) +audioop_getsample(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -46,10 +46,10 @@ {"max", (PyCFunction)audioop_max, METH_VARARGS, audioop_max__doc__}, static PyObject * -audioop_max_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_max_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_max(PyModuleDef *module, PyObject *args) +audioop_max(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -78,10 +78,10 @@ {"minmax", (PyCFunction)audioop_minmax, METH_VARARGS, audioop_minmax__doc__}, static PyObject * -audioop_minmax_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_minmax(PyModuleDef *module, PyObject *args) +audioop_minmax(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -110,10 +110,10 @@ {"avg", (PyCFunction)audioop_avg, METH_VARARGS, audioop_avg__doc__}, static PyObject * -audioop_avg_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_avg(PyModuleDef *module, PyObject *args) +audioop_avg(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -142,10 +142,10 @@ {"rms", (PyCFunction)audioop_rms, METH_VARARGS, audioop_rms__doc__}, static PyObject * -audioop_rms_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_rms(PyModuleDef *module, PyObject *args) +audioop_rms(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -174,11 +174,11 @@ {"findfit", (PyCFunction)audioop_findfit, METH_VARARGS, audioop_findfit__doc__}, static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfit_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference); static PyObject * -audioop_findfit(PyModuleDef *module, PyObject *args) +audioop_findfit(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -210,11 +210,11 @@ {"findfactor", (PyCFunction)audioop_findfactor, METH_VARARGS, audioop_findfactor__doc__}, static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference); static PyObject * -audioop_findfactor(PyModuleDef *module, PyObject *args) +audioop_findfactor(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -246,11 +246,11 @@ {"findmax", (PyCFunction)audioop_findmax, METH_VARARGS, audioop_findmax__doc__}, static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findmax_impl(PyObject *module, Py_buffer *fragment, Py_ssize_t length); static PyObject * -audioop_findmax(PyModuleDef *module, PyObject *args) +audioop_findmax(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -279,10 +279,10 @@ {"avgpp", (PyCFunction)audioop_avgpp, METH_VARARGS, audioop_avgpp__doc__}, static PyObject * -audioop_avgpp_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_avgpp(PyModuleDef *module, PyObject *args) +audioop_avgpp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -311,10 +311,10 @@ {"maxpp", (PyCFunction)audioop_maxpp, METH_VARARGS, audioop_maxpp__doc__}, static PyObject * -audioop_maxpp_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_maxpp(PyModuleDef *module, PyObject *args) +audioop_maxpp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -343,10 +343,10 @@ {"cross", (PyCFunction)audioop_cross, METH_VARARGS, audioop_cross__doc__}, static PyObject * -audioop_cross_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_cross(PyModuleDef *module, PyObject *args) +audioop_cross(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -375,11 +375,11 @@ {"mul", (PyCFunction)audioop_mul, METH_VARARGS, audioop_mul__doc__}, static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width, double factor); static PyObject * -audioop_mul(PyModuleDef *module, PyObject *args) +audioop_mul(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -409,11 +409,11 @@ {"tomono", (PyCFunction)audioop_tomono, METH_VARARGS, audioop_tomono__doc__}, static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor); static PyObject * -audioop_tomono(PyModuleDef *module, PyObject *args) +audioop_tomono(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -444,11 +444,11 @@ {"tostereo", (PyCFunction)audioop_tostereo, METH_VARARGS, audioop_tostereo__doc__}, static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor); static PyObject * -audioop_tostereo(PyModuleDef *module, PyObject *args) +audioop_tostereo(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -479,11 +479,11 @@ {"add", (PyCFunction)audioop_add, METH_VARARGS, audioop_add__doc__}, static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, +audioop_add_impl(PyObject *module, Py_buffer *fragment1, Py_buffer *fragment2, int width); static PyObject * -audioop_add(PyModuleDef *module, PyObject *args) +audioop_add(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment1 = {NULL, NULL}; @@ -516,11 +516,10 @@ {"bias", (PyCFunction)audioop_bias, METH_VARARGS, audioop_bias__doc__}, static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, - int bias); +audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias); static PyObject * -audioop_bias(PyModuleDef *module, PyObject *args) +audioop_bias(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -550,10 +549,10 @@ {"reverse", (PyCFunction)audioop_reverse, METH_VARARGS, audioop_reverse__doc__}, static PyObject * -audioop_reverse_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_reverse(PyModuleDef *module, PyObject *args) +audioop_reverse(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -582,10 +581,10 @@ {"byteswap", (PyCFunction)audioop_byteswap, METH_VARARGS, audioop_byteswap__doc__}, static PyObject * -audioop_byteswap_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_byteswap(PyModuleDef *module, PyObject *args) +audioop_byteswap(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -614,11 +613,11 @@ {"lin2lin", (PyCFunction)audioop_lin2lin, METH_VARARGS, audioop_lin2lin__doc__}, static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width, int newwidth); static PyObject * -audioop_lin2lin(PyModuleDef *module, PyObject *args) +audioop_lin2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -649,12 +648,12 @@ {"ratecv", (PyCFunction)audioop_ratecv, METH_VARARGS, audioop_ratecv__doc__}, static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB); static PyObject * -audioop_ratecv(PyModuleDef *module, PyObject *args) +audioop_ratecv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -689,10 +688,10 @@ {"lin2ulaw", (PyCFunction)audioop_lin2ulaw, METH_VARARGS, audioop_lin2ulaw__doc__}, static PyObject * -audioop_lin2ulaw_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_lin2ulaw(PyModuleDef *module, PyObject *args) +audioop_lin2ulaw(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -721,10 +720,10 @@ {"ulaw2lin", (PyCFunction)audioop_ulaw2lin, METH_VARARGS, audioop_ulaw2lin__doc__}, static PyObject * -audioop_ulaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_ulaw2lin(PyModuleDef *module, PyObject *args) +audioop_ulaw2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -753,10 +752,10 @@ {"lin2alaw", (PyCFunction)audioop_lin2alaw, METH_VARARGS, audioop_lin2alaw__doc__}, static PyObject * -audioop_lin2alaw_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_lin2alaw(PyModuleDef *module, PyObject *args) +audioop_lin2alaw(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -785,10 +784,10 @@ {"alaw2lin", (PyCFunction)audioop_alaw2lin, METH_VARARGS, audioop_alaw2lin__doc__}, static PyObject * -audioop_alaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_alaw2lin(PyModuleDef *module, PyObject *args) +audioop_alaw2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -817,11 +816,11 @@ {"lin2adpcm", (PyCFunction)audioop_lin2adpcm, METH_VARARGS, audioop_lin2adpcm__doc__}, static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state); static PyObject * -audioop_lin2adpcm(PyModuleDef *module, PyObject *args) +audioop_lin2adpcm(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -851,11 +850,11 @@ {"adpcm2lin", (PyCFunction)audioop_adpcm2lin, METH_VARARGS, audioop_adpcm2lin__doc__}, static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state); static PyObject * -audioop_adpcm2lin(PyModuleDef *module, PyObject *args) +audioop_adpcm2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -874,4 +873,4 @@ return return_value; } -/*[clinic end generated code: output=a076e1b213a8727b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=385fb09fa21a62c0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -12,10 +12,10 @@ {"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_O, binascii_a2b_uu__doc__}, static PyObject * -binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_uu_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_uu(PyModuleDef *module, PyObject *arg) +binascii_a2b_uu(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -42,10 +42,10 @@ {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_O, binascii_b2a_uu__doc__}, static PyObject * -binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_uu_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_uu(PyModuleDef *module, PyObject *arg) +binascii_b2a_uu(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -72,10 +72,10 @@ {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__}, static PyObject * -binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_base64_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_base64(PyModuleDef *module, PyObject *arg) +binascii_a2b_base64(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -102,10 +102,10 @@ {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_O, binascii_b2a_base64__doc__}, static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_base64_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_base64(PyModuleDef *module, PyObject *arg) +binascii_b2a_base64(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -132,10 +132,10 @@ {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__}, static PyObject * -binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_hqx(PyModuleDef *module, PyObject *arg) +binascii_a2b_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -162,10 +162,10 @@ {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__}, static PyObject * -binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg) +binascii_rlecode_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -192,10 +192,10 @@ {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__}, static PyObject * -binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_hqx(PyModuleDef *module, PyObject *arg) +binascii_b2a_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -222,10 +222,10 @@ {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__}, static PyObject * -binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg) +binascii_rledecode_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -252,10 +252,10 @@ {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_VARARGS, binascii_crc_hqx__doc__}, static unsigned int -binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc); +binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc); static PyObject * -binascii_crc_hqx(PyModuleDef *module, PyObject *args) +binascii_crc_hqx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -288,10 +288,10 @@ {"crc32", (PyCFunction)binascii_crc32, METH_VARARGS, binascii_crc32__doc__}, static unsigned int -binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc); +binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc); static PyObject * -binascii_crc32(PyModuleDef *module, PyObject *args) +binascii_crc32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -327,10 +327,10 @@ {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__}, static PyObject * -binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_hex_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_hex(PyModuleDef *module, PyObject *arg) +binascii_b2a_hex(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -359,10 +359,10 @@ {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__}, static PyObject * -binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data); +binascii_hexlify_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_hexlify(PyModuleDef *module, PyObject *arg) +binascii_hexlify(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -392,10 +392,10 @@ {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__}, static PyObject * -binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr); +binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr); static PyObject * -binascii_a2b_hex(PyModuleDef *module, PyObject *arg) +binascii_a2b_hex(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; @@ -424,10 +424,10 @@ {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__}, static PyObject * -binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr); +binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr); static PyObject * -binascii_unhexlify(PyModuleDef *module, PyObject *arg) +binascii_unhexlify(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; @@ -454,10 +454,10 @@ {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__}, static PyObject * -binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header); +binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header); static PyObject * -binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) +binascii_a2b_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "header", NULL}; @@ -491,11 +491,11 @@ {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__}, static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, +binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs, int istext, int header); static PyObject * -binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) +binascii_b2a_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "quotetabs", "istext", "header", NULL}; @@ -516,4 +516,4 @@ return return_value; } -/*[clinic end generated code: output=b1a3cbf7660ebaa5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=51173fc9718a5edc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -12,10 +12,10 @@ {"acos", (PyCFunction)cmath_acos, METH_O, cmath_acos__doc__}, static Py_complex -cmath_acos_impl(PyModuleDef *module, Py_complex z); +cmath_acos_impl(PyObject *module, Py_complex z); static PyObject * -cmath_acos(PyModuleDef *module, PyObject *arg) +cmath_acos(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -53,10 +53,10 @@ {"acosh", (PyCFunction)cmath_acosh, METH_O, cmath_acosh__doc__}, static Py_complex -cmath_acosh_impl(PyModuleDef *module, Py_complex z); +cmath_acosh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_acosh(PyModuleDef *module, PyObject *arg) +cmath_acosh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -94,10 +94,10 @@ {"asin", (PyCFunction)cmath_asin, METH_O, cmath_asin__doc__}, static Py_complex -cmath_asin_impl(PyModuleDef *module, Py_complex z); +cmath_asin_impl(PyObject *module, Py_complex z); static PyObject * -cmath_asin(PyModuleDef *module, PyObject *arg) +cmath_asin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -135,10 +135,10 @@ {"asinh", (PyCFunction)cmath_asinh, METH_O, cmath_asinh__doc__}, static Py_complex -cmath_asinh_impl(PyModuleDef *module, Py_complex z); +cmath_asinh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_asinh(PyModuleDef *module, PyObject *arg) +cmath_asinh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -176,10 +176,10 @@ {"atan", (PyCFunction)cmath_atan, METH_O, cmath_atan__doc__}, static Py_complex -cmath_atan_impl(PyModuleDef *module, Py_complex z); +cmath_atan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_atan(PyModuleDef *module, PyObject *arg) +cmath_atan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -217,10 +217,10 @@ {"atanh", (PyCFunction)cmath_atanh, METH_O, cmath_atanh__doc__}, static Py_complex -cmath_atanh_impl(PyModuleDef *module, Py_complex z); +cmath_atanh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_atanh(PyModuleDef *module, PyObject *arg) +cmath_atanh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -258,10 +258,10 @@ {"cos", (PyCFunction)cmath_cos, METH_O, cmath_cos__doc__}, static Py_complex -cmath_cos_impl(PyModuleDef *module, Py_complex z); +cmath_cos_impl(PyObject *module, Py_complex z); static PyObject * -cmath_cos(PyModuleDef *module, PyObject *arg) +cmath_cos(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -299,10 +299,10 @@ {"cosh", (PyCFunction)cmath_cosh, METH_O, cmath_cosh__doc__}, static Py_complex -cmath_cosh_impl(PyModuleDef *module, Py_complex z); +cmath_cosh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_cosh(PyModuleDef *module, PyObject *arg) +cmath_cosh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -340,10 +340,10 @@ {"exp", (PyCFunction)cmath_exp, METH_O, cmath_exp__doc__}, static Py_complex -cmath_exp_impl(PyModuleDef *module, Py_complex z); +cmath_exp_impl(PyObject *module, Py_complex z); static PyObject * -cmath_exp(PyModuleDef *module, PyObject *arg) +cmath_exp(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -381,10 +381,10 @@ {"log10", (PyCFunction)cmath_log10, METH_O, cmath_log10__doc__}, static Py_complex -cmath_log10_impl(PyModuleDef *module, Py_complex z); +cmath_log10_impl(PyObject *module, Py_complex z); static PyObject * -cmath_log10(PyModuleDef *module, PyObject *arg) +cmath_log10(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -422,10 +422,10 @@ {"sin", (PyCFunction)cmath_sin, METH_O, cmath_sin__doc__}, static Py_complex -cmath_sin_impl(PyModuleDef *module, Py_complex z); +cmath_sin_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sin(PyModuleDef *module, PyObject *arg) +cmath_sin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -463,10 +463,10 @@ {"sinh", (PyCFunction)cmath_sinh, METH_O, cmath_sinh__doc__}, static Py_complex -cmath_sinh_impl(PyModuleDef *module, Py_complex z); +cmath_sinh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sinh(PyModuleDef *module, PyObject *arg) +cmath_sinh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -504,10 +504,10 @@ {"sqrt", (PyCFunction)cmath_sqrt, METH_O, cmath_sqrt__doc__}, static Py_complex -cmath_sqrt_impl(PyModuleDef *module, Py_complex z); +cmath_sqrt_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sqrt(PyModuleDef *module, PyObject *arg) +cmath_sqrt(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -545,10 +545,10 @@ {"tan", (PyCFunction)cmath_tan, METH_O, cmath_tan__doc__}, static Py_complex -cmath_tan_impl(PyModuleDef *module, Py_complex z); +cmath_tan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_tan(PyModuleDef *module, PyObject *arg) +cmath_tan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -586,10 +586,10 @@ {"tanh", (PyCFunction)cmath_tanh, METH_O, cmath_tanh__doc__}, static Py_complex -cmath_tanh_impl(PyModuleDef *module, Py_complex z); +cmath_tanh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_tanh(PyModuleDef *module, PyObject *arg) +cmath_tanh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -629,10 +629,10 @@ {"log", (PyCFunction)cmath_log, METH_VARARGS, cmath_log__doc__}, static PyObject * -cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj); +cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj); static PyObject * -cmath_log(PyModuleDef *module, PyObject *args) +cmath_log(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_complex x; @@ -657,10 +657,10 @@ {"phase", (PyCFunction)cmath_phase, METH_O, cmath_phase__doc__}, static PyObject * -cmath_phase_impl(PyModuleDef *module, Py_complex z); +cmath_phase_impl(PyObject *module, Py_complex z); static PyObject * -cmath_phase(PyModuleDef *module, PyObject *arg) +cmath_phase(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -685,10 +685,10 @@ {"polar", (PyCFunction)cmath_polar, METH_O, cmath_polar__doc__}, static PyObject * -cmath_polar_impl(PyModuleDef *module, Py_complex z); +cmath_polar_impl(PyObject *module, Py_complex z); static PyObject * -cmath_polar(PyModuleDef *module, PyObject *arg) +cmath_polar(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -711,10 +711,10 @@ {"rect", (PyCFunction)cmath_rect, METH_VARARGS, cmath_rect__doc__}, static PyObject * -cmath_rect_impl(PyModuleDef *module, double r, double phi); +cmath_rect_impl(PyObject *module, double r, double phi); static PyObject * -cmath_rect(PyModuleDef *module, PyObject *args) +cmath_rect(PyObject *module, PyObject *args) { PyObject *return_value = NULL; double r; @@ -739,10 +739,10 @@ {"isfinite", (PyCFunction)cmath_isfinite, METH_O, cmath_isfinite__doc__}, static PyObject * -cmath_isfinite_impl(PyModuleDef *module, Py_complex z); +cmath_isfinite_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isfinite(PyModuleDef *module, PyObject *arg) +cmath_isfinite(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -765,10 +765,10 @@ {"isnan", (PyCFunction)cmath_isnan, METH_O, cmath_isnan__doc__}, static PyObject * -cmath_isnan_impl(PyModuleDef *module, Py_complex z); +cmath_isnan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isnan(PyModuleDef *module, PyObject *arg) +cmath_isnan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -791,10 +791,10 @@ {"isinf", (PyCFunction)cmath_isinf, METH_O, cmath_isinf__doc__}, static PyObject * -cmath_isinf_impl(PyModuleDef *module, Py_complex z); +cmath_isinf_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isinf(PyModuleDef *module, PyObject *arg) +cmath_isinf(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -832,11 +832,11 @@ {"isclose", (PyCFunction)cmath_isclose, METH_VARARGS|METH_KEYWORDS, cmath_isclose__doc__}, static int -cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, +cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol); static PyObject * -cmath_isclose(PyModuleDef *module, PyObject *args, PyObject *kwargs) +cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; @@ -857,4 +857,4 @@ exit: return return_value; } -/*[clinic end generated code: output=229e9c48c9d27362 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=732194029b7fb1e7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h --- a/Modules/clinic/fcntlmodule.c.h +++ b/Modules/clinic/fcntlmodule.c.h @@ -22,10 +22,10 @@ {"fcntl", (PyCFunction)fcntl_fcntl, METH_VARARGS, fcntl_fcntl__doc__}, static PyObject * -fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg); +fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg); static PyObject * -fcntl_fcntl(PyModuleDef *module, PyObject *args) +fcntl_fcntl(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -78,11 +78,11 @@ {"ioctl", (PyCFunction)fcntl_ioctl, METH_VARARGS, fcntl_ioctl__doc__}, static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, +fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg); static PyObject * -fcntl_ioctl(PyModuleDef *module, PyObject *args) +fcntl_ioctl(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -112,10 +112,10 @@ {"flock", (PyCFunction)fcntl_flock, METH_VARARGS, fcntl_flock__doc__}, static PyObject * -fcntl_flock_impl(PyModuleDef *module, int fd, int code); +fcntl_flock_impl(PyObject *module, int fd, int code); static PyObject * -fcntl_flock(PyModuleDef *module, PyObject *args) +fcntl_flock(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -161,11 +161,11 @@ {"lockf", (PyCFunction)fcntl_lockf, METH_VARARGS, fcntl_lockf__doc__}, static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, +fcntl_lockf_impl(PyObject *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence); static PyObject * -fcntl_lockf(PyModuleDef *module, PyObject *args) +fcntl_lockf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -182,4 +182,4 @@ exit: return return_value; } -/*[clinic end generated code: output=b7d6e8fc2ad09c48 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=97b1306b864c01c8 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h --- a/Modules/clinic/grpmodule.c.h +++ b/Modules/clinic/grpmodule.c.h @@ -14,10 +14,10 @@ {"getgrgid", (PyCFunction)grp_getgrgid, METH_VARARGS|METH_KEYWORDS, grp_getgrgid__doc__}, static PyObject * -grp_getgrgid_impl(PyModuleDef *module, PyObject *id); +grp_getgrgid_impl(PyObject *module, PyObject *id); static PyObject * -grp_getgrgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +grp_getgrgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"id", NULL}; @@ -44,10 +44,10 @@ {"getgrnam", (PyCFunction)grp_getgrnam, METH_VARARGS|METH_KEYWORDS, grp_getgrnam__doc__}, static PyObject * -grp_getgrnam_impl(PyModuleDef *module, PyObject *name); +grp_getgrnam_impl(PyObject *module, PyObject *name); static PyObject * -grp_getgrnam(PyModuleDef *module, PyObject *args, PyObject *kwargs) +grp_getgrnam(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"name", NULL}; @@ -75,11 +75,11 @@ {"getgrall", (PyCFunction)grp_getgrall, METH_NOARGS, grp_getgrall__doc__}, static PyObject * -grp_getgrall_impl(PyModuleDef *module); +grp_getgrall_impl(PyObject *module); static PyObject * -grp_getgrall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +grp_getgrall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return grp_getgrall_impl(module); } -/*[clinic end generated code: output=5191c25600afb1bd input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bee09feefc54a2cb input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h --- a/Modules/clinic/md5module.c.h +++ b/Modules/clinic/md5module.c.h @@ -75,10 +75,10 @@ {"md5", (PyCFunction)_md5_md5, METH_VARARGS|METH_KEYWORDS, _md5_md5__doc__}, static PyObject * -_md5_md5_impl(PyModuleDef *module, PyObject *string); +_md5_md5_impl(PyObject *module, PyObject *string); static PyObject * -_md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_md5_md5(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -92,4 +92,4 @@ exit: return return_value; } -/*[clinic end generated code: output=0f803ded701aca54 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4cd3cc96e35563d2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -30,11 +30,10 @@ {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__}, static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, - int follow_symlinks); - -static PyObject * -os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks); + +static PyObject * +os_stat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; @@ -67,10 +66,10 @@ {"lstat", (PyCFunction)os_lstat, METH_VARARGS|METH_KEYWORDS, os_lstat__doc__}, static PyObject * -os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lstat_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_lstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -125,11 +124,11 @@ {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); static PyObject * -os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_access(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; @@ -170,10 +169,10 @@ {"ttyname", (PyCFunction)os_ttyname, METH_O, os_ttyname__doc__}, static char * -os_ttyname_impl(PyModuleDef *module, int fd); - -static PyObject * -os_ttyname(PyModuleDef *module, PyObject *arg) +os_ttyname_impl(PyObject *module, int fd); + +static PyObject * +os_ttyname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -204,10 +203,10 @@ {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__}, static PyObject * -os_ctermid_impl(PyModuleDef *module); - -static PyObject * -os_ctermid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_ctermid_impl(PyObject *module); + +static PyObject * +os_ctermid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_ctermid_impl(module); } @@ -228,10 +227,10 @@ {"chdir", (PyCFunction)os_chdir, METH_VARARGS|METH_KEYWORDS, os_chdir__doc__}, static PyObject * -os_chdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chdir_impl(PyObject *module, path_t *path); + +static PyObject * +os_chdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -264,10 +263,10 @@ {"fchdir", (PyCFunction)os_fchdir, METH_VARARGS|METH_KEYWORDS, os_fchdir__doc__}, static PyObject * -os_fchdir_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchdir_impl(PyObject *module, int fd); + +static PyObject * +os_fchdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -314,11 +313,11 @@ {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks); static PyObject * -os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; @@ -353,10 +352,10 @@ {"fchmod", (PyCFunction)os_fchmod, METH_VARARGS|METH_KEYWORDS, os_fchmod__doc__}, static PyObject * -os_fchmod_impl(PyModuleDef *module, int fd, int mode); - -static PyObject * -os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchmod_impl(PyObject *module, int fd, int mode); + +static PyObject * +os_fchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "mode", NULL}; @@ -389,10 +388,10 @@ {"lchmod", (PyCFunction)os_lchmod, METH_VARARGS|METH_KEYWORDS, os_lchmod__doc__}, static PyObject * -os_lchmod_impl(PyModuleDef *module, path_t *path, int mode); - -static PyObject * -os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchmod_impl(PyObject *module, path_t *path, int mode); + +static PyObject * +os_lchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", NULL}; @@ -431,11 +430,11 @@ {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, +os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks); static PyObject * -os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", "follow_symlinks", NULL}; @@ -472,10 +471,10 @@ {"lchflags", (PyCFunction)os_lchflags, METH_VARARGS|METH_KEYWORDS, os_lchflags__doc__}, static PyObject * -os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags); - -static PyObject * -os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags); + +static PyObject * +os_lchflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", NULL}; @@ -508,10 +507,10 @@ {"chroot", (PyCFunction)os_chroot, METH_VARARGS|METH_KEYWORDS, os_chroot__doc__}, static PyObject * -os_chroot_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chroot_impl(PyObject *module, path_t *path); + +static PyObject * +os_chroot(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -543,10 +542,10 @@ {"fsync", (PyCFunction)os_fsync, METH_VARARGS|METH_KEYWORDS, os_fsync__doc__}, static PyObject * -os_fsync_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fsync_impl(PyObject *module, int fd); + +static PyObject * +os_fsync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -575,10 +574,10 @@ {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__}, static PyObject * -os_sync_impl(PyModuleDef *module); - -static PyObject * -os_sync(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_sync_impl(PyObject *module); + +static PyObject * +os_sync(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_sync_impl(module); } @@ -597,10 +596,10 @@ {"fdatasync", (PyCFunction)os_fdatasync, METH_VARARGS|METH_KEYWORDS, os_fdatasync__doc__}, static PyObject * -os_fdatasync_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fdatasync_impl(PyObject *module, int fd); + +static PyObject * +os_fdatasync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -653,11 +652,11 @@ {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, +os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); static PyObject * -os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; @@ -695,10 +694,10 @@ {"fchown", (PyCFunction)os_fchown, METH_VARARGS|METH_KEYWORDS, os_fchown__doc__}, static PyObject * -os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid); - -static PyObject * -os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid); + +static PyObject * +os_fchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "uid", "gid", NULL}; @@ -732,10 +731,10 @@ {"lchown", (PyCFunction)os_lchown, METH_VARARGS|METH_KEYWORDS, os_lchown__doc__}, static PyObject * -os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid); - -static PyObject * -os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid); + +static PyObject * +os_lchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "uid", "gid", NULL}; @@ -767,10 +766,10 @@ {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__}, static PyObject * -os_getcwd_impl(PyModuleDef *module); - -static PyObject * -os_getcwd(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getcwd_impl(PyObject *module); + +static PyObject * +os_getcwd(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getcwd_impl(module); } @@ -785,10 +784,10 @@ {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__}, static PyObject * -os_getcwdb_impl(PyModuleDef *module); - -static PyObject * -os_getcwdb(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getcwdb_impl(PyObject *module); + +static PyObject * +os_getcwdb(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getcwdb_impl(module); } @@ -816,11 +815,11 @@ {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); static PyObject * -os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_link(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; @@ -867,10 +866,10 @@ {"listdir", (PyCFunction)os_listdir, METH_VARARGS|METH_KEYWORDS, os_listdir__doc__}, static PyObject * -os_listdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_listdir_impl(PyObject *module, path_t *path); + +static PyObject * +os_listdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -899,10 +898,10 @@ {"_getfullpathname", (PyCFunction)os__getfullpathname, METH_O, os__getfullpathname__doc__}, static PyObject * -os__getfullpathname_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os__getfullpathname(PyModuleDef *module, PyObject *arg) +os__getfullpathname_impl(PyObject *module, path_t *path); + +static PyObject * +os__getfullpathname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_getfullpathname", "path", 0, 0); @@ -932,10 +931,10 @@ {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_O, os__getfinalpathname__doc__}, static PyObject * -os__getfinalpathname_impl(PyModuleDef *module, PyObject *path); - -static PyObject * -os__getfinalpathname(PyModuleDef *module, PyObject *arg) +os__getfinalpathname_impl(PyObject *module, PyObject *path); + +static PyObject * +os__getfinalpathname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -961,10 +960,10 @@ {"_isdir", (PyCFunction)os__isdir, METH_O, os__isdir__doc__}, static PyObject * -os__isdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os__isdir(PyModuleDef *module, PyObject *arg) +os__isdir_impl(PyObject *module, path_t *path); + +static PyObject * +os__isdir(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_isdir", "path", 0, 0); @@ -994,10 +993,10 @@ {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_VARARGS|METH_KEYWORDS, os__getvolumepathname__doc__}, static PyObject * -os__getvolumepathname_impl(PyModuleDef *module, PyObject *path); - -static PyObject * -os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__getvolumepathname_impl(PyObject *module, PyObject *path); + +static PyObject * +os__getvolumepathname(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -1031,10 +1030,10 @@ {"mkdir", (PyCFunction)os_mkdir, METH_VARARGS|METH_KEYWORDS, os_mkdir__doc__}, static PyObject * -os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); - -static PyObject * -os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd); + +static PyObject * +os_mkdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -1066,10 +1065,10 @@ {"nice", (PyCFunction)os_nice, METH_O, os_nice__doc__}, static PyObject * -os_nice_impl(PyModuleDef *module, int increment); - -static PyObject * -os_nice(PyModuleDef *module, PyObject *arg) +os_nice_impl(PyObject *module, int increment); + +static PyObject * +os_nice(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int increment; @@ -1096,10 +1095,10 @@ {"getpriority", (PyCFunction)os_getpriority, METH_VARARGS|METH_KEYWORDS, os_getpriority__doc__}, static PyObject * -os_getpriority_impl(PyModuleDef *module, int which, int who); - -static PyObject * -os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getpriority_impl(PyObject *module, int which, int who); + +static PyObject * +os_getpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"which", "who", NULL}; @@ -1129,10 +1128,10 @@ {"setpriority", (PyCFunction)os_setpriority, METH_VARARGS|METH_KEYWORDS, os_setpriority__doc__}, static PyObject * -os_setpriority_impl(PyModuleDef *module, int which, int who, int priority); - -static PyObject * -os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_setpriority_impl(PyObject *module, int which, int who, int priority); + +static PyObject * +os_setpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"which", "who", "priority", NULL}; @@ -1167,11 +1166,11 @@ {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); static PyObject * -os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_rename(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1210,11 +1209,11 @@ {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, - int src_dir_fd, int dst_dir_fd); - -static PyObject * -os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd); + +static PyObject * +os_replace(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1252,10 +1251,10 @@ {"rmdir", (PyCFunction)os_rmdir, METH_VARARGS|METH_KEYWORDS, os_rmdir__doc__}, static PyObject * -os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_rmdir_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_rmdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1286,10 +1285,10 @@ {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, static long -os_system_impl(PyModuleDef *module, Py_UNICODE *command); - -static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_system_impl(PyObject *module, Py_UNICODE *command); + +static PyObject * +os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"command", NULL}; @@ -1322,10 +1321,10 @@ {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, static long -os_system_impl(PyModuleDef *module, PyObject *command); - -static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_system_impl(PyObject *module, PyObject *command); + +static PyObject * +os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"command", NULL}; @@ -1359,10 +1358,10 @@ {"umask", (PyCFunction)os_umask, METH_O, os_umask__doc__}, static PyObject * -os_umask_impl(PyModuleDef *module, int mask); - -static PyObject * -os_umask(PyModuleDef *module, PyObject *arg) +os_umask_impl(PyObject *module, int mask); + +static PyObject * +os_umask(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int mask; @@ -1390,10 +1389,10 @@ {"unlink", (PyCFunction)os_unlink, METH_VARARGS|METH_KEYWORDS, os_unlink__doc__}, static PyObject * -os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_unlink_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_unlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1427,10 +1426,10 @@ {"remove", (PyCFunction)os_remove, METH_VARARGS|METH_KEYWORDS, os_remove__doc__}, static PyObject * -os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_remove_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_remove(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1464,10 +1463,10 @@ {"uname", (PyCFunction)os_uname, METH_NOARGS, os_uname__doc__}, static PyObject * -os_uname_impl(PyModuleDef *module); - -static PyObject * -os_uname(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_uname_impl(PyObject *module); + +static PyObject * +os_uname(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_uname_impl(module); } @@ -1507,11 +1506,11 @@ {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, - PyObject *ns, int dir_fd, int follow_symlinks); - -static PyObject * -os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + int dir_fd, int follow_symlinks); + +static PyObject * +os_utime(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; @@ -1543,10 +1542,10 @@ {"_exit", (PyCFunction)os__exit, METH_VARARGS|METH_KEYWORDS, os__exit__doc__}, static PyObject * -os__exit_impl(PyModuleDef *module, int status); - -static PyObject * -os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__exit_impl(PyObject *module, int status); + +static PyObject * +os__exit(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -1578,10 +1577,10 @@ {"execv", (PyCFunction)os_execv, METH_VARARGS, os_execv__doc__}, static PyObject * -os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv); - -static PyObject * -os_execv(PyModuleDef *module, PyObject *args) +os_execv_impl(PyObject *module, PyObject *path, PyObject *argv); + +static PyObject * +os_execv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *path = NULL; @@ -1620,11 +1619,10 @@ {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, - PyObject *env); - -static PyObject * -os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env); + +static PyObject * +os_execve(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "argv", "env", NULL}; @@ -1665,10 +1663,10 @@ {"spawnv", (PyCFunction)os_spawnv, METH_VARARGS, os_spawnv__doc__}, static PyObject * -os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv); - -static PyObject * -os_spawnv(PyModuleDef *module, PyObject *args) +os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv); + +static PyObject * +os_spawnv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; @@ -1710,11 +1708,11 @@ {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, - PyObject *argv, PyObject *env); - -static PyObject * -os_spawnve(PyModuleDef *module, PyObject *args) +os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, + PyObject *env); + +static PyObject * +os_spawnve(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; @@ -1750,10 +1748,10 @@ {"fork1", (PyCFunction)os_fork1, METH_NOARGS, os_fork1__doc__}, static PyObject * -os_fork1_impl(PyModuleDef *module); - -static PyObject * -os_fork1(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_fork1_impl(PyObject *module); + +static PyObject * +os_fork1(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_fork1_impl(module); } @@ -1774,10 +1772,10 @@ {"fork", (PyCFunction)os_fork, METH_NOARGS, os_fork__doc__}, static PyObject * -os_fork_impl(PyModuleDef *module); - -static PyObject * -os_fork(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_fork_impl(PyObject *module); + +static PyObject * +os_fork(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_fork_impl(module); } @@ -1796,10 +1794,10 @@ {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_max__doc__}, static PyObject * -os_sched_get_priority_max_impl(PyModuleDef *module, int policy); - -static PyObject * -os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_max_impl(PyObject *module, int policy); + +static PyObject * +os_sched_get_priority_max(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"policy", NULL}; @@ -1828,10 +1826,10 @@ {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_min__doc__}, static PyObject * -os_sched_get_priority_min_impl(PyModuleDef *module, int policy); - -static PyObject * -os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_min_impl(PyObject *module, int policy); + +static PyObject * +os_sched_get_priority_min(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"policy", NULL}; @@ -1862,10 +1860,10 @@ {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_O, os_sched_getscheduler__doc__}, static PyObject * -os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getscheduler(PyModuleDef *module, PyObject *arg) +os_sched_getscheduler_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_getscheduler(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -1927,11 +1925,11 @@ {"sched_setscheduler", (PyCFunction)os_sched_setscheduler, METH_VARARGS, os_sched_setscheduler__doc__}, static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, +os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, struct sched_param *param); static PyObject * -os_sched_setscheduler(PyModuleDef *module, PyObject *args) +os_sched_setscheduler(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -1964,10 +1962,10 @@ {"sched_getparam", (PyCFunction)os_sched_getparam, METH_O, os_sched_getparam__doc__}, static PyObject * -os_sched_getparam_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getparam(PyModuleDef *module, PyObject *arg) +os_sched_getparam_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_getparam(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -1997,11 +1995,11 @@ {"sched_setparam", (PyCFunction)os_sched_setparam, METH_VARARGS, os_sched_setparam__doc__}, static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, +os_sched_setparam_impl(PyObject *module, pid_t pid, struct sched_param *param); static PyObject * -os_sched_setparam(PyModuleDef *module, PyObject *args) +os_sched_setparam(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2032,10 +2030,10 @@ {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_O, os_sched_rr_get_interval__doc__}, static double -os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_rr_get_interval(PyModuleDef *module, PyObject *arg) +os_sched_rr_get_interval_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_rr_get_interval(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -2066,10 +2064,10 @@ {"sched_yield", (PyCFunction)os_sched_yield, METH_NOARGS, os_sched_yield__doc__}, static PyObject * -os_sched_yield_impl(PyModuleDef *module); - -static PyObject * -os_sched_yield(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_sched_yield_impl(PyObject *module); + +static PyObject * +os_sched_yield(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_sched_yield_impl(module); } @@ -2090,10 +2088,10 @@ {"sched_setaffinity", (PyCFunction)os_sched_setaffinity, METH_VARARGS, os_sched_setaffinity__doc__}, static PyObject * -os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask); - -static PyObject * -os_sched_setaffinity(PyModuleDef *module, PyObject *args) +os_sched_setaffinity_impl(PyObject *module, pid_t pid, PyObject *mask); + +static PyObject * +os_sched_setaffinity(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2124,10 +2122,10 @@ {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_O, os_sched_getaffinity__doc__}, static PyObject * -os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getaffinity(PyModuleDef *module, PyObject *arg) +os_sched_getaffinity_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_getaffinity(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -2157,10 +2155,10 @@ {"openpty", (PyCFunction)os_openpty, METH_NOARGS, os_openpty__doc__}, static PyObject * -os_openpty_impl(PyModuleDef *module); - -static PyObject * -os_openpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_openpty_impl(PyObject *module); + +static PyObject * +os_openpty(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_openpty_impl(module); } @@ -2184,10 +2182,10 @@ {"forkpty", (PyCFunction)os_forkpty, METH_NOARGS, os_forkpty__doc__}, static PyObject * -os_forkpty_impl(PyModuleDef *module); - -static PyObject * -os_forkpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_forkpty_impl(PyObject *module); + +static PyObject * +os_forkpty(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_forkpty_impl(module); } @@ -2206,10 +2204,10 @@ {"getegid", (PyCFunction)os_getegid, METH_NOARGS, os_getegid__doc__}, static PyObject * -os_getegid_impl(PyModuleDef *module); - -static PyObject * -os_getegid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getegid_impl(PyObject *module); + +static PyObject * +os_getegid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getegid_impl(module); } @@ -2228,10 +2226,10 @@ {"geteuid", (PyCFunction)os_geteuid, METH_NOARGS, os_geteuid__doc__}, static PyObject * -os_geteuid_impl(PyModuleDef *module); - -static PyObject * -os_geteuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_geteuid_impl(PyObject *module); + +static PyObject * +os_geteuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_geteuid_impl(module); } @@ -2250,10 +2248,10 @@ {"getgid", (PyCFunction)os_getgid, METH_NOARGS, os_getgid__doc__}, static PyObject * -os_getgid_impl(PyModuleDef *module); - -static PyObject * -os_getgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getgid_impl(PyObject *module); + +static PyObject * +os_getgid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getgid_impl(module); } @@ -2270,10 +2268,10 @@ {"getpid", (PyCFunction)os_getpid, METH_NOARGS, os_getpid__doc__}, static PyObject * -os_getpid_impl(PyModuleDef *module); - -static PyObject * -os_getpid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getpid_impl(PyObject *module); + +static PyObject * +os_getpid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getpid_impl(module); } @@ -2290,10 +2288,10 @@ {"getgroups", (PyCFunction)os_getgroups, METH_NOARGS, os_getgroups__doc__}, static PyObject * -os_getgroups_impl(PyModuleDef *module); - -static PyObject * -os_getgroups(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getgroups_impl(PyObject *module); + +static PyObject * +os_getgroups(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getgroups_impl(module); } @@ -2312,10 +2310,10 @@ {"getpgid", (PyCFunction)os_getpgid, METH_VARARGS|METH_KEYWORDS, os_getpgid__doc__}, static PyObject * -os_getpgid_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getpgid_impl(PyObject *module, pid_t pid); + +static PyObject * +os_getpgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pid", NULL}; @@ -2344,10 +2342,10 @@ {"getpgrp", (PyCFunction)os_getpgrp, METH_NOARGS, os_getpgrp__doc__}, static PyObject * -os_getpgrp_impl(PyModuleDef *module); - -static PyObject * -os_getpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getpgrp_impl(PyObject *module); + +static PyObject * +os_getpgrp(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getpgrp_impl(module); } @@ -2366,10 +2364,10 @@ {"setpgrp", (PyCFunction)os_setpgrp, METH_NOARGS, os_setpgrp__doc__}, static PyObject * -os_setpgrp_impl(PyModuleDef *module); - -static PyObject * -os_setpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_setpgrp_impl(PyObject *module); + +static PyObject * +os_setpgrp(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_setpgrp_impl(module); } @@ -2391,10 +2389,10 @@ {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__}, static PyObject * -os_getppid_impl(PyModuleDef *module); - -static PyObject * -os_getppid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getppid_impl(PyObject *module); + +static PyObject * +os_getppid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getppid_impl(module); } @@ -2413,10 +2411,10 @@ {"getlogin", (PyCFunction)os_getlogin, METH_NOARGS, os_getlogin__doc__}, static PyObject * -os_getlogin_impl(PyModuleDef *module); - -static PyObject * -os_getlogin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getlogin_impl(PyObject *module); + +static PyObject * +os_getlogin(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getlogin_impl(module); } @@ -2435,10 +2433,10 @@ {"getuid", (PyCFunction)os_getuid, METH_NOARGS, os_getuid__doc__}, static PyObject * -os_getuid_impl(PyModuleDef *module); - -static PyObject * -os_getuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getuid_impl(PyObject *module); + +static PyObject * +os_getuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getuid_impl(module); } @@ -2457,10 +2455,10 @@ {"kill", (PyCFunction)os_kill, METH_VARARGS, os_kill__doc__}, static PyObject * -os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal); - -static PyObject * -os_kill(PyModuleDef *module, PyObject *args) +os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal); + +static PyObject * +os_kill(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2489,10 +2487,10 @@ {"killpg", (PyCFunction)os_killpg, METH_VARARGS, os_killpg__doc__}, static PyObject * -os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal); - -static PyObject * -os_killpg(PyModuleDef *module, PyObject *args) +os_killpg_impl(PyObject *module, pid_t pgid, int signal); + +static PyObject * +os_killpg(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pgid; @@ -2521,10 +2519,10 @@ {"plock", (PyCFunction)os_plock, METH_O, os_plock__doc__}, static PyObject * -os_plock_impl(PyModuleDef *module, int op); - -static PyObject * -os_plock(PyModuleDef *module, PyObject *arg) +os_plock_impl(PyObject *module, int op); + +static PyObject * +os_plock(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int op; @@ -2551,10 +2549,10 @@ {"setuid", (PyCFunction)os_setuid, METH_O, os_setuid__doc__}, static PyObject * -os_setuid_impl(PyModuleDef *module, uid_t uid); - -static PyObject * -os_setuid(PyModuleDef *module, PyObject *arg) +os_setuid_impl(PyObject *module, uid_t uid); + +static PyObject * +os_setuid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; uid_t uid; @@ -2581,10 +2579,10 @@ {"seteuid", (PyCFunction)os_seteuid, METH_O, os_seteuid__doc__}, static PyObject * -os_seteuid_impl(PyModuleDef *module, uid_t euid); - -static PyObject * -os_seteuid(PyModuleDef *module, PyObject *arg) +os_seteuid_impl(PyObject *module, uid_t euid); + +static PyObject * +os_seteuid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; uid_t euid; @@ -2611,10 +2609,10 @@ {"setegid", (PyCFunction)os_setegid, METH_O, os_setegid__doc__}, static PyObject * -os_setegid_impl(PyModuleDef *module, gid_t egid); - -static PyObject * -os_setegid(PyModuleDef *module, PyObject *arg) +os_setegid_impl(PyObject *module, gid_t egid); + +static PyObject * +os_setegid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; gid_t egid; @@ -2641,10 +2639,10 @@ {"setreuid", (PyCFunction)os_setreuid, METH_VARARGS, os_setreuid__doc__}, static PyObject * -os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid); - -static PyObject * -os_setreuid(PyModuleDef *module, PyObject *args) +os_setreuid_impl(PyObject *module, uid_t ruid, uid_t euid); + +static PyObject * +os_setreuid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; uid_t ruid; @@ -2673,10 +2671,10 @@ {"setregid", (PyCFunction)os_setregid, METH_VARARGS, os_setregid__doc__}, static PyObject * -os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid); - -static PyObject * -os_setregid(PyModuleDef *module, PyObject *args) +os_setregid_impl(PyObject *module, gid_t rgid, gid_t egid); + +static PyObject * +os_setregid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; gid_t rgid; @@ -2705,10 +2703,10 @@ {"setgid", (PyCFunction)os_setgid, METH_O, os_setgid__doc__}, static PyObject * -os_setgid_impl(PyModuleDef *module, gid_t gid); - -static PyObject * -os_setgid(PyModuleDef *module, PyObject *arg) +os_setgid_impl(PyObject *module, gid_t gid); + +static PyObject * +os_setgid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; gid_t gid; @@ -2751,10 +2749,10 @@ {"wait3", (PyCFunction)os_wait3, METH_VARARGS|METH_KEYWORDS, os_wait3__doc__}, static PyObject * -os_wait3_impl(PyModuleDef *module, int options); - -static PyObject * -os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_wait3_impl(PyObject *module, int options); + +static PyObject * +os_wait3(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"options", NULL}; @@ -2786,10 +2784,10 @@ {"wait4", (PyCFunction)os_wait4, METH_VARARGS|METH_KEYWORDS, os_wait4__doc__}, static PyObject * -os_wait4_impl(PyModuleDef *module, pid_t pid, int options); - -static PyObject * -os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_wait4_impl(PyObject *module, pid_t pid, int options); + +static PyObject * +os_wait4(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pid", "options", NULL}; @@ -2830,10 +2828,10 @@ {"waitid", (PyCFunction)os_waitid, METH_VARARGS, os_waitid__doc__}, static PyObject * -os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options); - -static PyObject * -os_waitid(PyModuleDef *module, PyObject *args) +os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options); + +static PyObject * +os_waitid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; idtype_t idtype; @@ -2868,10 +2866,10 @@ {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -os_waitpid_impl(PyModuleDef *module, pid_t pid, int options); - -static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) +os_waitpid_impl(PyObject *module, pid_t pid, int options); + +static PyObject * +os_waitpid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2905,10 +2903,10 @@ {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options); - -static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) +os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options); + +static PyObject * +os_waitpid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t pid; @@ -2940,10 +2938,10 @@ {"wait", (PyCFunction)os_wait, METH_NOARGS, os_wait__doc__}, static PyObject * -os_wait_impl(PyModuleDef *module); - -static PyObject * -os_wait(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_wait_impl(PyObject *module); + +static PyObject * +os_wait(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_wait_impl(module); } @@ -2972,11 +2970,11 @@ {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, +os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); static PyObject * -os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_symlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; @@ -3017,10 +3015,10 @@ {"times", (PyCFunction)os_times, METH_NOARGS, os_times__doc__}, static PyObject * -os_times_impl(PyModuleDef *module); - -static PyObject * -os_times(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_times_impl(PyObject *module); + +static PyObject * +os_times(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_times_impl(module); } @@ -3039,10 +3037,10 @@ {"getsid", (PyCFunction)os_getsid, METH_O, os_getsid__doc__}, static PyObject * -os_getsid_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_getsid(PyModuleDef *module, PyObject *arg) +os_getsid_impl(PyObject *module, pid_t pid); + +static PyObject * +os_getsid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -3069,10 +3067,10 @@ {"setsid", (PyCFunction)os_setsid, METH_NOARGS, os_setsid__doc__}, static PyObject * -os_setsid_impl(PyModuleDef *module); - -static PyObject * -os_setsid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_setsid_impl(PyObject *module); + +static PyObject * +os_setsid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_setsid_impl(module); } @@ -3091,10 +3089,10 @@ {"setpgid", (PyCFunction)os_setpgid, METH_VARARGS, os_setpgid__doc__}, static PyObject * -os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp); - -static PyObject * -os_setpgid(PyModuleDef *module, PyObject *args) +os_setpgid_impl(PyObject *module, pid_t pid, pid_t pgrp); + +static PyObject * +os_setpgid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -3123,10 +3121,10 @@ {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_O, os_tcgetpgrp__doc__}, static PyObject * -os_tcgetpgrp_impl(PyModuleDef *module, int fd); - -static PyObject * -os_tcgetpgrp(PyModuleDef *module, PyObject *arg) +os_tcgetpgrp_impl(PyObject *module, int fd); + +static PyObject * +os_tcgetpgrp(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3153,10 +3151,10 @@ {"tcsetpgrp", (PyCFunction)os_tcsetpgrp, METH_VARARGS, os_tcsetpgrp__doc__}, static PyObject * -os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid); - -static PyObject * -os_tcsetpgrp(PyModuleDef *module, PyObject *args) +os_tcsetpgrp_impl(PyObject *module, int fd, pid_t pgid); + +static PyObject * +os_tcsetpgrp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3188,11 +3186,10 @@ {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, - int dir_fd); - -static PyObject * -os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd); + +static PyObject * +os_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; @@ -3227,10 +3224,10 @@ {"close", (PyCFunction)os_close, METH_VARARGS|METH_KEYWORDS, os_close__doc__}, static PyObject * -os_close_impl(PyModuleDef *module, int fd); - -static PyObject * -os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_close_impl(PyObject *module, int fd); + +static PyObject * +os_close(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -3255,10 +3252,10 @@ {"closerange", (PyCFunction)os_closerange, METH_VARARGS, os_closerange__doc__}, static PyObject * -os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high); - -static PyObject * -os_closerange(PyModuleDef *module, PyObject *args) +os_closerange_impl(PyObject *module, int fd_low, int fd_high); + +static PyObject * +os_closerange(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd_low; @@ -3283,10 +3280,10 @@ {"dup", (PyCFunction)os_dup, METH_O, os_dup__doc__}, static int -os_dup_impl(PyModuleDef *module, int fd); - -static PyObject * -os_dup(PyModuleDef *module, PyObject *arg) +os_dup_impl(PyObject *module, int fd); + +static PyObject * +os_dup(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3313,10 +3310,10 @@ {"dup2", (PyCFunction)os_dup2, METH_VARARGS|METH_KEYWORDS, os_dup2__doc__}, static PyObject * -os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable); - -static PyObject * -os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable); + +static PyObject * +os_dup2(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "fd2", "inheritable", NULL}; @@ -3352,10 +3349,10 @@ {"lockf", (PyCFunction)os_lockf, METH_VARARGS, os_lockf__doc__}, static PyObject * -os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length); - -static PyObject * -os_lockf(PyModuleDef *module, PyObject *args) +os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length); + +static PyObject * +os_lockf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3386,10 +3383,10 @@ {"lseek", (PyCFunction)os_lseek, METH_VARARGS, os_lseek__doc__}, static Py_off_t -os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how); - -static PyObject * -os_lseek(PyModuleDef *module, PyObject *args) +os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how); + +static PyObject * +os_lseek(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3419,10 +3416,10 @@ {"read", (PyCFunction)os_read, METH_VARARGS, os_read__doc__}, static PyObject * -os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length); - -static PyObject * -os_read(PyModuleDef *module, PyObject *args) +os_read_impl(PyObject *module, int fd, Py_ssize_t length); + +static PyObject * +os_read(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3457,10 +3454,10 @@ {"readv", (PyCFunction)os_readv, METH_VARARGS, os_readv__doc__}, static Py_ssize_t -os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers); - -static PyObject * -os_readv(PyModuleDef *module, PyObject *args) +os_readv_impl(PyObject *module, int fd, PyObject *buffers); + +static PyObject * +os_readv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3496,10 +3493,10 @@ {"pread", (PyCFunction)os_pread, METH_VARARGS, os_pread__doc__}, static PyObject * -os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset); - -static PyObject * -os_pread(PyModuleDef *module, PyObject *args) +os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset); + +static PyObject * +os_pread(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3527,10 +3524,10 @@ {"write", (PyCFunction)os_write, METH_VARARGS, os_write__doc__}, static Py_ssize_t -os_write_impl(PyModuleDef *module, int fd, Py_buffer *data); - -static PyObject * -os_write(PyModuleDef *module, PyObject *args) +os_write_impl(PyObject *module, int fd, Py_buffer *data); + +static PyObject * +os_write(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3566,10 +3563,10 @@ {"fstat", (PyCFunction)os_fstat, METH_VARARGS|METH_KEYWORDS, os_fstat__doc__}, static PyObject * -os_fstat_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fstat_impl(PyObject *module, int fd); + +static PyObject * +os_fstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -3597,10 +3594,10 @@ {"isatty", (PyCFunction)os_isatty, METH_O, os_isatty__doc__}, static int -os_isatty_impl(PyModuleDef *module, int fd); - -static PyObject * -os_isatty(PyModuleDef *module, PyObject *arg) +os_isatty_impl(PyObject *module, int fd); + +static PyObject * +os_isatty(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3632,10 +3629,10 @@ {"pipe", (PyCFunction)os_pipe, METH_NOARGS, os_pipe__doc__}, static PyObject * -os_pipe_impl(PyModuleDef *module); - -static PyObject * -os_pipe(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_pipe_impl(PyObject *module); + +static PyObject * +os_pipe(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_pipe_impl(module); } @@ -3660,10 +3657,10 @@ {"pipe2", (PyCFunction)os_pipe2, METH_O, os_pipe2__doc__}, static PyObject * -os_pipe2_impl(PyModuleDef *module, int flags); - -static PyObject * -os_pipe2(PyModuleDef *module, PyObject *arg) +os_pipe2_impl(PyObject *module, int flags); + +static PyObject * +os_pipe2(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int flags; @@ -3693,10 +3690,10 @@ {"writev", (PyCFunction)os_writev, METH_VARARGS, os_writev__doc__}, static Py_ssize_t -os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers); - -static PyObject * -os_writev(PyModuleDef *module, PyObject *args) +os_writev_impl(PyObject *module, int fd, PyObject *buffers); + +static PyObject * +os_writev(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3733,11 +3730,10 @@ {"pwrite", (PyCFunction)os_pwrite, METH_VARARGS, os_pwrite__doc__}, static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, - Py_off_t offset); - -static PyObject * -os_pwrite(PyModuleDef *module, PyObject *args) +os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset); + +static PyObject * +os_pwrite(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3780,10 +3776,10 @@ {"mkfifo", (PyCFunction)os_mkfifo, METH_VARARGS|METH_KEYWORDS, os_mkfifo__doc__}, static PyObject * -os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); - -static PyObject * -os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd); + +static PyObject * +os_mkfifo(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -3829,11 +3825,11 @@ {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, +os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd); static PyObject * -os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mknod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "device", "dir_fd", NULL}; @@ -3868,10 +3864,10 @@ {"major", (PyCFunction)os_major, METH_O, os_major__doc__}, static unsigned int -os_major_impl(PyModuleDef *module, dev_t device); - -static PyObject * -os_major(PyModuleDef *module, PyObject *arg) +os_major_impl(PyObject *module, dev_t device); + +static PyObject * +os_major(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; @@ -3902,10 +3898,10 @@ {"minor", (PyCFunction)os_minor, METH_O, os_minor__doc__}, static unsigned int -os_minor_impl(PyModuleDef *module, dev_t device); - -static PyObject * -os_minor(PyModuleDef *module, PyObject *arg) +os_minor_impl(PyObject *module, dev_t device); + +static PyObject * +os_minor(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; @@ -3936,10 +3932,10 @@ {"makedev", (PyCFunction)os_makedev, METH_VARARGS, os_makedev__doc__}, static dev_t -os_makedev_impl(PyModuleDef *module, int major, int minor); - -static PyObject * -os_makedev(PyModuleDef *module, PyObject *args) +os_makedev_impl(PyObject *module, int major, int minor); + +static PyObject * +os_makedev(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int major; @@ -3972,10 +3968,10 @@ {"ftruncate", (PyCFunction)os_ftruncate, METH_VARARGS, os_ftruncate__doc__}, static PyObject * -os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length); - -static PyObject * -os_ftruncate(PyModuleDef *module, PyObject *args) +os_ftruncate_impl(PyObject *module, int fd, Py_off_t length); + +static PyObject * +os_ftruncate(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4007,10 +4003,10 @@ {"truncate", (PyCFunction)os_truncate, METH_VARARGS|METH_KEYWORDS, os_truncate__doc__}, static PyObject * -os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length); - -static PyObject * -os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_truncate_impl(PyObject *module, path_t *path, Py_off_t length); + +static PyObject * +os_truncate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "length", NULL}; @@ -4046,11 +4042,11 @@ {"posix_fallocate", (PyCFunction)os_posix_fallocate, METH_VARARGS, os_posix_fallocate__doc__}, static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length); static PyObject * -os_posix_fallocate(PyModuleDef *module, PyObject *args) +os_posix_fallocate(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4088,11 +4084,11 @@ {"posix_fadvise", (PyCFunction)os_posix_fadvise, METH_VARARGS, os_posix_fadvise__doc__}, static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length, int advice); static PyObject * -os_posix_fadvise(PyModuleDef *module, PyObject *args) +os_posix_fadvise(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4123,10 +4119,10 @@ {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); - -static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *name; @@ -4155,10 +4151,10 @@ {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); - -static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *name = NULL; @@ -4192,10 +4188,10 @@ {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__}, static PyObject * -os_unsetenv_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -os_unsetenv(PyModuleDef *module, PyObject *arg) +os_unsetenv_impl(PyObject *module, PyObject *name); + +static PyObject * +os_unsetenv(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name = NULL; @@ -4223,10 +4219,10 @@ {"strerror", (PyCFunction)os_strerror, METH_O, os_strerror__doc__}, static PyObject * -os_strerror_impl(PyModuleDef *module, int code); - -static PyObject * -os_strerror(PyModuleDef *module, PyObject *arg) +os_strerror_impl(PyObject *module, int code); + +static PyObject * +os_strerror(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int code; @@ -4251,10 +4247,10 @@ {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_O, os_WCOREDUMP__doc__}, static int -os_WCOREDUMP_impl(PyModuleDef *module, int status); - -static PyObject * -os_WCOREDUMP(PyModuleDef *module, PyObject *arg) +os_WCOREDUMP_impl(PyObject *module, int status); + +static PyObject * +os_WCOREDUMP(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int status; @@ -4288,10 +4284,10 @@ {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_VARARGS|METH_KEYWORDS, os_WIFCONTINUED__doc__}, static int -os_WIFCONTINUED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFCONTINUED_impl(PyObject *module, int status); + +static PyObject * +os_WIFCONTINUED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4324,10 +4320,10 @@ {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_VARARGS|METH_KEYWORDS, os_WIFSTOPPED__doc__}, static int -os_WIFSTOPPED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFSTOPPED_impl(PyObject *module, int status); + +static PyObject * +os_WIFSTOPPED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4360,10 +4356,10 @@ {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_VARARGS|METH_KEYWORDS, os_WIFSIGNALED__doc__}, static int -os_WIFSIGNALED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFSIGNALED_impl(PyObject *module, int status); + +static PyObject * +os_WIFSIGNALED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4396,10 +4392,10 @@ {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_VARARGS|METH_KEYWORDS, os_WIFEXITED__doc__}, static int -os_WIFEXITED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFEXITED_impl(PyObject *module, int status); + +static PyObject * +os_WIFEXITED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4432,10 +4428,10 @@ {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_VARARGS|METH_KEYWORDS, os_WEXITSTATUS__doc__}, static int -os_WEXITSTATUS_impl(PyModuleDef *module, int status); - -static PyObject * -os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WEXITSTATUS_impl(PyObject *module, int status); + +static PyObject * +os_WEXITSTATUS(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4468,10 +4464,10 @@ {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_VARARGS|METH_KEYWORDS, os_WTERMSIG__doc__}, static int -os_WTERMSIG_impl(PyModuleDef *module, int status); - -static PyObject * -os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WTERMSIG_impl(PyObject *module, int status); + +static PyObject * +os_WTERMSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4504,10 +4500,10 @@ {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_VARARGS|METH_KEYWORDS, os_WSTOPSIG__doc__}, static int -os_WSTOPSIG_impl(PyModuleDef *module, int status); - -static PyObject * -os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WSTOPSIG_impl(PyObject *module, int status); + +static PyObject * +os_WSTOPSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4542,10 +4538,10 @@ {"fstatvfs", (PyCFunction)os_fstatvfs, METH_O, os_fstatvfs__doc__}, static PyObject * -os_fstatvfs_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fstatvfs(PyModuleDef *module, PyObject *arg) +os_fstatvfs_impl(PyObject *module, int fd); + +static PyObject * +os_fstatvfs(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -4576,10 +4572,10 @@ {"statvfs", (PyCFunction)os_statvfs, METH_VARARGS|METH_KEYWORDS, os_statvfs__doc__}, static PyObject * -os_statvfs_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_statvfs_impl(PyObject *module, path_t *path); + +static PyObject * +os_statvfs(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -4611,10 +4607,10 @@ {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_VARARGS|METH_KEYWORDS, os__getdiskusage__doc__}, static PyObject * -os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path); - -static PyObject * -os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__getdiskusage_impl(PyObject *module, Py_UNICODE *path); + +static PyObject * +os__getdiskusage(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -4645,10 +4641,10 @@ {"fpathconf", (PyCFunction)os_fpathconf, METH_VARARGS, os_fpathconf__doc__}, static long -os_fpathconf_impl(PyModuleDef *module, int fd, int name); - -static PyObject * -os_fpathconf(PyModuleDef *module, PyObject *args) +os_fpathconf_impl(PyObject *module, int fd, int name); + +static PyObject * +os_fpathconf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4685,10 +4681,10 @@ {"pathconf", (PyCFunction)os_pathconf, METH_VARARGS|METH_KEYWORDS, os_pathconf__doc__}, static long -os_pathconf_impl(PyModuleDef *module, path_t *path, int name); - -static PyObject * -os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_pathconf_impl(PyObject *module, path_t *path, int name); + +static PyObject * +os_pathconf(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "name", NULL}; @@ -4725,10 +4721,10 @@ {"confstr", (PyCFunction)os_confstr, METH_O, os_confstr__doc__}, static PyObject * -os_confstr_impl(PyModuleDef *module, int name); - -static PyObject * -os_confstr(PyModuleDef *module, PyObject *arg) +os_confstr_impl(PyObject *module, int name); + +static PyObject * +os_confstr(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int name; @@ -4755,10 +4751,10 @@ {"sysconf", (PyCFunction)os_sysconf, METH_O, os_sysconf__doc__}, static long -os_sysconf_impl(PyModuleDef *module, int name); - -static PyObject * -os_sysconf(PyModuleDef *module, PyObject *arg) +os_sysconf_impl(PyObject *module, int name); + +static PyObject * +os_sysconf(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int name; @@ -4790,10 +4786,10 @@ {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__}, static PyObject * -os_abort_impl(PyModuleDef *module); - -static PyObject * -os_abort(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_abort_impl(PyObject *module); + +static PyObject * +os_abort(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_abort_impl(module); } @@ -4814,10 +4810,10 @@ {"getloadavg", (PyCFunction)os_getloadavg, METH_NOARGS, os_getloadavg__doc__}, static PyObject * -os_getloadavg_impl(PyModuleDef *module); - -static PyObject * -os_getloadavg(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getloadavg_impl(PyObject *module); + +static PyObject * +os_getloadavg(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getloadavg_impl(module); } @@ -4837,10 +4833,10 @@ {"device_encoding", (PyCFunction)os_device_encoding, METH_VARARGS|METH_KEYWORDS, os_device_encoding__doc__}, static PyObject * -os_device_encoding_impl(PyModuleDef *module, int fd); - -static PyObject * -os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_device_encoding_impl(PyObject *module, int fd); + +static PyObject * +os_device_encoding(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -4867,10 +4863,10 @@ {"setresuid", (PyCFunction)os_setresuid, METH_VARARGS, os_setresuid__doc__}, static PyObject * -os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid); - -static PyObject * -os_setresuid(PyModuleDef *module, PyObject *args) +os_setresuid_impl(PyObject *module, uid_t ruid, uid_t euid, uid_t suid); + +static PyObject * +os_setresuid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; uid_t ruid; @@ -4900,10 +4896,10 @@ {"setresgid", (PyCFunction)os_setresgid, METH_VARARGS, os_setresgid__doc__}, static PyObject * -os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid); - -static PyObject * -os_setresgid(PyModuleDef *module, PyObject *args) +os_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid); + +static PyObject * +os_setresgid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; gid_t rgid; @@ -4933,10 +4929,10 @@ {"getresuid", (PyCFunction)os_getresuid, METH_NOARGS, os_getresuid__doc__}, static PyObject * -os_getresuid_impl(PyModuleDef *module); - -static PyObject * -os_getresuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getresuid_impl(PyObject *module); + +static PyObject * +os_getresuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getresuid_impl(module); } @@ -4955,10 +4951,10 @@ {"getresgid", (PyCFunction)os_getresgid, METH_NOARGS, os_getresgid__doc__}, static PyObject * -os_getresgid_impl(PyModuleDef *module); - -static PyObject * -os_getresgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getresgid_impl(PyObject *module); + +static PyObject * +os_getresgid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getresgid_impl(module); } @@ -4982,11 +4978,11 @@ {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5028,11 +5024,11 @@ {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); static PyObject * -os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_setxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; @@ -5078,11 +5074,11 @@ {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_removexattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5124,10 +5120,10 @@ {"listxattr", (PyCFunction)os_listxattr, METH_VARARGS|METH_KEYWORDS, os_listxattr__doc__}, static PyObject * -os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks); - -static PyObject * -os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks); + +static PyObject * +os_listxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "follow_symlinks", NULL}; @@ -5158,10 +5154,10 @@ {"urandom", (PyCFunction)os_urandom, METH_O, os_urandom__doc__}, static PyObject * -os_urandom_impl(PyModuleDef *module, Py_ssize_t size); - -static PyObject * -os_urandom(PyModuleDef *module, PyObject *arg) +os_urandom_impl(PyObject *module, Py_ssize_t size); + +static PyObject * +os_urandom(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_ssize_t size; @@ -5184,10 +5180,10 @@ {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__}, static PyObject * -os_cpu_count_impl(PyModuleDef *module); - -static PyObject * -os_cpu_count(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_cpu_count_impl(PyObject *module); + +static PyObject * +os_cpu_count(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_cpu_count_impl(module); } @@ -5202,10 +5198,10 @@ {"get_inheritable", (PyCFunction)os_get_inheritable, METH_O, os_get_inheritable__doc__}, static int -os_get_inheritable_impl(PyModuleDef *module, int fd); - -static PyObject * -os_get_inheritable(PyModuleDef *module, PyObject *arg) +os_get_inheritable_impl(PyObject *module, int fd); + +static PyObject * +os_get_inheritable(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -5232,10 +5228,10 @@ {"set_inheritable", (PyCFunction)os_set_inheritable, METH_VARARGS, os_set_inheritable__doc__}, static PyObject * -os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable); - -static PyObject * -os_set_inheritable(PyModuleDef *module, PyObject *args) +os_set_inheritable_impl(PyObject *module, int fd, int inheritable); + +static PyObject * +os_set_inheritable(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -5262,10 +5258,10 @@ {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_O, os_get_handle_inheritable__doc__}, static int -os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle); - -static PyObject * -os_get_handle_inheritable(PyModuleDef *module, PyObject *arg) +os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle); + +static PyObject * +os_get_handle_inheritable(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -5296,11 +5292,11 @@ {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, int inheritable); static PyObject * -os_set_handle_inheritable(PyModuleDef *module, PyObject *args) +os_set_handle_inheritable(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -5788,4 +5784,4 @@ #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=95824c52fd034654 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c27221987f987cf3 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pwdmodule.c.h b/Modules/clinic/pwdmodule.c.h --- a/Modules/clinic/pwdmodule.c.h +++ b/Modules/clinic/pwdmodule.c.h @@ -25,10 +25,10 @@ {"getpwnam", (PyCFunction)pwd_getpwnam, METH_O, pwd_getpwnam__doc__}, static PyObject * -pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg); +pwd_getpwnam_impl(PyObject *module, PyObject *arg); static PyObject * -pwd_getpwnam(PyModuleDef *module, PyObject *arg_) +pwd_getpwnam(PyObject *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; @@ -55,10 +55,10 @@ {"getpwall", (PyCFunction)pwd_getpwall, METH_NOARGS, pwd_getpwall__doc__}, static PyObject * -pwd_getpwall_impl(PyModuleDef *module); +pwd_getpwall_impl(PyObject *module); static PyObject * -pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +pwd_getpwall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return pwd_getpwall_impl(module); } @@ -68,4 +68,4 @@ #ifndef PWD_GETPWALL_METHODDEF #define PWD_GETPWALL_METHODDEF #endif /* !defined(PWD_GETPWALL_METHODDEF) */ -/*[clinic end generated code: output=2ed0ecf34fd3f98f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d0ea1c5c832f0c1a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -231,11 +231,11 @@ {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, +pyexpat_ParserCreate_impl(PyObject *module, const char *encoding, const char *namespace_separator, PyObject *intern); static PyObject * -pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +pyexpat_ParserCreate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"encoding", "namespace_separator", "intern", NULL}; @@ -262,10 +262,10 @@ {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_O, pyexpat_ErrorString__doc__}, static PyObject * -pyexpat_ErrorString_impl(PyModuleDef *module, long code); +pyexpat_ErrorString_impl(PyObject *module, long code); static PyObject * -pyexpat_ErrorString(PyModuleDef *module, PyObject *arg) +pyexpat_ErrorString(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; long code; @@ -281,4 +281,4 @@ #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=bf4d99c9702d8a6c input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d479cfab607e9dc8 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h --- a/Modules/clinic/sha1module.c.h +++ b/Modules/clinic/sha1module.c.h @@ -75,10 +75,10 @@ {"sha1", (PyCFunction)_sha1_sha1, METH_VARARGS|METH_KEYWORDS, _sha1_sha1__doc__}, static PyObject * -_sha1_sha1_impl(PyModuleDef *module, PyObject *string); +_sha1_sha1_impl(PyObject *module, PyObject *string); static PyObject * -_sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha1_sha1(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -92,4 +92,4 @@ exit: return return_value; } -/*[clinic end generated code: output=be19102f3120490a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0b6a194fbb0b94f2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h --- a/Modules/clinic/sha256module.c.h +++ b/Modules/clinic/sha256module.c.h @@ -75,10 +75,10 @@ {"sha256", (PyCFunction)_sha256_sha256, METH_VARARGS|METH_KEYWORDS, _sha256_sha256__doc__}, static PyObject * -_sha256_sha256_impl(PyModuleDef *module, PyObject *string); +_sha256_sha256_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha256_sha256(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -103,10 +103,10 @@ {"sha224", (PyCFunction)_sha256_sha224, METH_VARARGS|METH_KEYWORDS, _sha256_sha224__doc__}, static PyObject * -_sha256_sha224_impl(PyModuleDef *module, PyObject *string); +_sha256_sha224_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha256_sha224(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -120,4 +120,4 @@ exit: return return_value; } -/*[clinic end generated code: output=354cedf3b632c7b2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5a1fc5480e399f95 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -93,10 +93,10 @@ {"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__}, static PyObject * -_sha512_sha512_impl(PyModuleDef *module, PyObject *string); +_sha512_sha512_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha512_sha512(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -125,10 +125,10 @@ {"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__}, static PyObject * -_sha512_sha384_impl(PyModuleDef *module, PyObject *string); +_sha512_sha384_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha512_sha384(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -168,4 +168,4 @@ #ifndef _SHA512_SHA384_METHODDEF #define _SHA512_SHA384_METHODDEF #endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=1c7d385731fee7c0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=bb87f494df50ffc0 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h --- a/Modules/clinic/signalmodule.c.h +++ b/Modules/clinic/signalmodule.c.h @@ -14,10 +14,10 @@ {"alarm", (PyCFunction)signal_alarm, METH_O, signal_alarm__doc__}, static long -signal_alarm_impl(PyModuleDef *module, int seconds); +signal_alarm_impl(PyObject *module, int seconds); static PyObject * -signal_alarm(PyModuleDef *module, PyObject *arg) +signal_alarm(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int seconds; @@ -48,10 +48,10 @@ {"pause", (PyCFunction)signal_pause, METH_NOARGS, signal_pause__doc__}, static PyObject * -signal_pause_impl(PyModuleDef *module); +signal_pause_impl(PyObject *module); static PyObject * -signal_pause(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +signal_pause(PyObject *module, PyObject *Py_UNUSED(ignored)) { return signal_pause_impl(module); } @@ -75,10 +75,10 @@ {"signal", (PyCFunction)signal_signal, METH_VARARGS, signal_signal__doc__}, static PyObject * -signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler); +signal_signal_impl(PyObject *module, int signalnum, PyObject *handler); static PyObject * -signal_signal(PyModuleDef *module, PyObject *args) +signal_signal(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int signalnum; @@ -109,10 +109,10 @@ {"getsignal", (PyCFunction)signal_getsignal, METH_O, signal_getsignal__doc__}, static PyObject * -signal_getsignal_impl(PyModuleDef *module, int signalnum); +signal_getsignal_impl(PyObject *module, int signalnum); static PyObject * -signal_getsignal(PyModuleDef *module, PyObject *arg) +signal_getsignal(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int signalnum; @@ -140,10 +140,10 @@ {"siginterrupt", (PyCFunction)signal_siginterrupt, METH_VARARGS, signal_siginterrupt__doc__}, static PyObject * -signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag); +signal_siginterrupt_impl(PyObject *module, int signalnum, int flag); static PyObject * -signal_siginterrupt(PyModuleDef *module, PyObject *args) +signal_siginterrupt(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int signalnum; @@ -177,11 +177,11 @@ {"setitimer", (PyCFunction)signal_setitimer, METH_VARARGS, signal_setitimer__doc__}, static PyObject * -signal_setitimer_impl(PyModuleDef *module, int which, double seconds, +signal_setitimer_impl(PyObject *module, int which, double seconds, double interval); static PyObject * -signal_setitimer(PyModuleDef *module, PyObject *args) +signal_setitimer(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int which; @@ -211,10 +211,10 @@ {"getitimer", (PyCFunction)signal_getitimer, METH_O, signal_getitimer__doc__}, static PyObject * -signal_getitimer_impl(PyModuleDef *module, int which); +signal_getitimer_impl(PyObject *module, int which); static PyObject * -signal_getitimer(PyModuleDef *module, PyObject *arg) +signal_getitimer(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int which; @@ -241,10 +241,10 @@ {"pthread_sigmask", (PyCFunction)signal_pthread_sigmask, METH_VARARGS, signal_pthread_sigmask__doc__}, static PyObject * -signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask); +signal_pthread_sigmask_impl(PyObject *module, int how, PyObject *mask); static PyObject * -signal_pthread_sigmask(PyModuleDef *module, PyObject *args) +signal_pthread_sigmask(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int how; @@ -276,10 +276,10 @@ {"sigpending", (PyCFunction)signal_sigpending, METH_NOARGS, signal_sigpending__doc__}, static PyObject * -signal_sigpending_impl(PyModuleDef *module); +signal_sigpending_impl(PyObject *module); static PyObject * -signal_sigpending(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +signal_sigpending(PyObject *module, PyObject *Py_UNUSED(ignored)) { return signal_sigpending_impl(module); } @@ -332,11 +332,11 @@ {"sigtimedwait", (PyCFunction)signal_sigtimedwait, METH_VARARGS, signal_sigtimedwait__doc__}, static PyObject * -signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, +signal_sigtimedwait_impl(PyObject *module, PyObject *sigset, PyObject *timeout_obj); static PyObject * -signal_sigtimedwait(PyModuleDef *module, PyObject *args) +signal_sigtimedwait(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *sigset; @@ -366,10 +366,10 @@ {"pthread_kill", (PyCFunction)signal_pthread_kill, METH_VARARGS, signal_pthread_kill__doc__}, static PyObject * -signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum); +signal_pthread_kill_impl(PyObject *module, long thread_id, int signalnum); static PyObject * -signal_pthread_kill(PyModuleDef *module, PyObject *args) +signal_pthread_kill(PyObject *module, PyObject *args) { PyObject *return_value = NULL; long thread_id; @@ -429,4 +429,4 @@ #ifndef SIGNAL_PTHREAD_KILL_METHODDEF #define SIGNAL_PTHREAD_KILL_METHODDEF #endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */ -/*[clinic end generated code: output=b99278c16c40ea43 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=dafa598412bfb8d2 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h --- a/Modules/clinic/spwdmodule.c.h +++ b/Modules/clinic/spwdmodule.c.h @@ -16,10 +16,10 @@ {"getspnam", (PyCFunction)spwd_getspnam, METH_O, spwd_getspnam__doc__}, static PyObject * -spwd_getspnam_impl(PyModuleDef *module, PyObject *arg); +spwd_getspnam_impl(PyObject *module, PyObject *arg); static PyObject * -spwd_getspnam(PyModuleDef *module, PyObject *arg_) +spwd_getspnam(PyObject *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; @@ -48,10 +48,10 @@ {"getspall", (PyCFunction)spwd_getspall, METH_NOARGS, spwd_getspall__doc__}, static PyObject * -spwd_getspall_impl(PyModuleDef *module); +spwd_getspall_impl(PyObject *module); static PyObject * -spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +spwd_getspall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return spwd_getspall_impl(module); } @@ -65,4 +65,4 @@ #ifndef SPWD_GETSPALL_METHODDEF #define SPWD_GETSPALL_METHODDEF #endif /* !defined(SPWD_GETSPALL_METHODDEF) */ -/*[clinic end generated code: output=6c178830413f7763 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=510f681b36f54c30 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -17,10 +17,10 @@ {"compress", (PyCFunction)zlib_compress, METH_VARARGS, zlib_compress__doc__}, static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level); +zlib_compress_impl(PyObject *module, Py_buffer *bytes, int level); static PyObject * -zlib_compress(PyModuleDef *module, PyObject *args) +zlib_compress(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer bytes = {NULL, NULL}; @@ -56,11 +56,11 @@ {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS, zlib_decompress__doc__}, static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, +zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, unsigned int bufsize); static PyObject * -zlib_decompress(PyModuleDef *module, PyObject *args) +zlib_decompress(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -114,11 +114,11 @@ {"compressobj", (PyCFunction)zlib_compressobj, METH_VARARGS|METH_KEYWORDS, zlib_compressobj__doc__}, static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, +zlib_compressobj_impl(PyObject *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict); static PyObject * -zlib_compressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +zlib_compressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"level", "method", "wbits", "memLevel", "strategy", "zdict", NULL}; @@ -158,10 +158,10 @@ {"decompressobj", (PyCFunction)zlib_decompressobj, METH_VARARGS|METH_KEYWORDS, zlib_decompressobj__doc__}, static PyObject * -zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict); +zlib_decompressobj_impl(PyObject *module, int wbits, PyObject *zdict); static PyObject * -zlib_decompressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +zlib_decompressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"wbits", "zdict", NULL}; @@ -380,10 +380,10 @@ {"adler32", (PyCFunction)zlib_adler32, METH_VARARGS, zlib_adler32__doc__}, static PyObject * -zlib_adler32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value); +zlib_adler32_impl(PyObject *module, Py_buffer *data, unsigned int value); static PyObject * -zlib_adler32(PyModuleDef *module, PyObject *args) +zlib_adler32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -417,10 +417,10 @@ {"crc32", (PyCFunction)zlib_crc32, METH_VARARGS, zlib_crc32__doc__}, static PyObject * -zlib_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value); +zlib_crc32_impl(PyObject *module, Py_buffer *data, unsigned int value); static PyObject * -zlib_crc32(PyModuleDef *module, PyObject *args) +zlib_crc32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -442,4 +442,4 @@ #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=f31627b314a7bd2f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8545565b1a1822de input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -82,12 +82,12 @@ #define CM_SCALE_DOWN (-(CM_SCALE_UP+1)/2) /* forward declarations */ -static Py_complex cmath_asinh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_atanh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_cosh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_sinh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_sqrt_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_tanh_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_asinh_impl(PyObject *, Py_complex); +static Py_complex cmath_atanh_impl(PyObject *, Py_complex); +static Py_complex cmath_cosh_impl(PyObject *, Py_complex); +static Py_complex cmath_sinh_impl(PyObject *, Py_complex); +static Py_complex cmath_sqrt_impl(PyObject *, Py_complex); +static Py_complex cmath_tanh_impl(PyObject *, Py_complex); static PyObject * math_error(void); /* Code to deal with special values (infinities, NaNs, etc.). */ @@ -167,8 +167,8 @@ [clinic start generated code]*/ static Py_complex -cmath_acos_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=7c1dd21ff818db6b input=bd6cbd78ae851927]*/ +cmath_acos_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=40bd42853fd460ae input=bd6cbd78ae851927]*/ { Py_complex s1, s2, r; @@ -210,8 +210,8 @@ [clinic start generated code]*/ static Py_complex -cmath_acosh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=c23c776429def981 input=3f61bee7d703e53c]*/ +cmath_acosh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=3e2454d4fcf404ca input=3f61bee7d703e53c]*/ { Py_complex s1, s2, r; @@ -242,8 +242,8 @@ [clinic start generated code]*/ static Py_complex -cmath_asin_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=42d2346d46690826 input=be0bf0cfdd5239c5]*/ +cmath_asin_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=3b264cd1b16bf4e1 input=be0bf0cfdd5239c5]*/ { /* asin(z) = -i asinh(iz) */ Py_complex s, r; @@ -265,8 +265,8 @@ [clinic start generated code]*/ static Py_complex -cmath_asinh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=0c6664823c7b1b35 input=5c09448fcfc89a79]*/ +cmath_asinh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=733d8107841a7599 input=5c09448fcfc89a79]*/ { Py_complex s1, s2, r; @@ -303,8 +303,8 @@ [clinic start generated code]*/ static Py_complex -cmath_atan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b7d44f02c6a5c3b5 input=3b21ff7d5eac632a]*/ +cmath_atan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=b6bfc497058acba4 input=3b21ff7d5eac632a]*/ { /* atan(z) = -i atanh(iz) */ Py_complex s, r; @@ -356,8 +356,8 @@ [clinic start generated code]*/ static Py_complex -cmath_atanh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=279e0b9fefc8da7c input=2b3fdb82fb34487b]*/ +cmath_atanh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=e83355f93a989c9e input=2b3fdb82fb34487b]*/ { Py_complex r; double ay, h; @@ -411,8 +411,8 @@ [clinic start generated code]*/ static Py_complex -cmath_cos_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=9d1cdc1b5e761667 input=6022e39b77127ac7]*/ +cmath_cos_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=fd64918d5b3186db input=6022e39b77127ac7]*/ { /* cos(z) = cosh(iz) */ Py_complex r; @@ -433,8 +433,8 @@ [clinic start generated code]*/ static Py_complex -cmath_cosh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=f3b5d3282b3024d3 input=d6b66339e9cc332b]*/ +cmath_cosh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=2e969047da601bdb input=d6b66339e9cc332b]*/ { Py_complex r; double x_minus_one; @@ -495,8 +495,8 @@ [clinic start generated code]*/ static Py_complex -cmath_exp_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=6f8825eb2bcad9ba input=8b9e6cf8a92174c3]*/ +cmath_exp_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=edcec61fb9dfda6c input=8b9e6cf8a92174c3]*/ { Py_complex r; double l; @@ -624,8 +624,8 @@ [clinic start generated code]*/ static Py_complex -cmath_log10_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=c7c426ca0e782341 input=cff5644f73c1519c]*/ +cmath_log10_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=2922779a7c38cbe1 input=cff5644f73c1519c]*/ { Py_complex r; int errno_save; @@ -646,8 +646,8 @@ [clinic start generated code]*/ static Py_complex -cmath_sin_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=e7f5e2b253825ac7 input=2d3519842a8b4b85]*/ +cmath_sin_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=980370d2ff0bb5aa input=2d3519842a8b4b85]*/ { /* sin(z) = -i sin(iz) */ Py_complex s, r; @@ -670,8 +670,8 @@ [clinic start generated code]*/ static Py_complex -cmath_sinh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=d71fff8298043a95 input=d2d3fc8c1ddfd2dd]*/ +cmath_sinh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=38b0a6cce26f3536 input=d2d3fc8c1ddfd2dd]*/ { Py_complex r; double x_minus_one; @@ -729,8 +729,8 @@ [clinic start generated code]*/ static Py_complex -cmath_sqrt_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b6bda283d0c5a7b4 input=7088b166fc9a58c7]*/ +cmath_sqrt_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=b6507b3029c339fc input=7088b166fc9a58c7]*/ { /* Method: use symmetries to reduce to the case when x = z.real and y @@ -804,8 +804,8 @@ [clinic start generated code]*/ static Py_complex -cmath_tan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=df374bacf36d99b4 input=fc167e528767888e]*/ +cmath_tan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=7c5f13158a72eb13 input=fc167e528767888e]*/ { /* tan(z) = -i tanh(iz) */ Py_complex s, r; @@ -828,8 +828,8 @@ [clinic start generated code]*/ static Py_complex -cmath_tanh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=f578773d27a18e96 input=22f67f9dc6d29685]*/ +cmath_tanh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=36d547ef7aca116c input=22f67f9dc6d29685]*/ { /* Formula: @@ -906,8 +906,8 @@ [clinic start generated code]*/ static PyObject * -cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj) -/*[clinic end generated code: output=35e2a1e5229b5a46 input=ee0e823a7c6e68ea]*/ +cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj) +/*[clinic end generated code: output=4effdb7d258e0d94 input=ee0e823a7c6e68ea]*/ { Py_complex y; @@ -954,8 +954,8 @@ [clinic start generated code]*/ static PyObject * -cmath_phase_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=e09eaf373cb624c3 input=5cf75228ba94b69d]*/ +cmath_phase_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=50725086a7bfd253 input=5cf75228ba94b69d]*/ { double phi; @@ -981,8 +981,8 @@ [clinic start generated code]*/ static PyObject * -cmath_polar_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=07d41b16c877875a input=26c353574fd1a861]*/ +cmath_polar_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=d0a8147c41dbb654 input=26c353574fd1a861]*/ { double r, phi; @@ -1021,8 +1021,8 @@ [clinic start generated code]*/ static PyObject * -cmath_rect_impl(PyModuleDef *module, double r, double phi) -/*[clinic end generated code: output=d97a8749bd63e9d5 input=24c5646d147efd69]*/ +cmath_rect_impl(PyObject *module, double r, double phi) +/*[clinic end generated code: output=385a0690925df2d5 input=24c5646d147efd69]*/ { Py_complex z; errno = 0; @@ -1082,8 +1082,8 @@ [clinic start generated code]*/ static PyObject * -cmath_isfinite_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=8f6682fa93de45d6 input=848e7ee701895815]*/ +cmath_isfinite_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=ac76611e2c774a36 input=848e7ee701895815]*/ { return PyBool_FromLong(Py_IS_FINITE(z.real) && Py_IS_FINITE(z.imag)); } @@ -1095,8 +1095,8 @@ [clinic start generated code]*/ static PyObject * -cmath_isnan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b85fe8c2047718ee input=71799f5d284c9baf]*/ +cmath_isnan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=e7abf6e0b28beab7 input=71799f5d284c9baf]*/ { return PyBool_FromLong(Py_IS_NAN(z.real) || Py_IS_NAN(z.imag)); } @@ -1108,8 +1108,8 @@ [clinic start generated code]*/ static PyObject * -cmath_isinf_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=8ca9c6109e468bf4 input=363df155c7181329]*/ +cmath_isinf_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=502a75a79c773469 input=363df155c7181329]*/ { return PyBool_FromLong(Py_IS_INFINITY(z.real) || Py_IS_INFINITY(z.imag)); @@ -1140,9 +1140,9 @@ [clinic start generated code]*/ static int -cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, +cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol) -/*[clinic end generated code: output=da0c535fb54e2310 input=df9636d7de1d4ac3]*/ +/*[clinic end generated code: output=8a2486cc6e0014d1 input=df9636d7de1d4ac3]*/ { double diff; diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -56,8 +56,8 @@ [clinic start generated code]*/ static PyObject * -fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg) -/*[clinic end generated code: output=afc5bfa74a03ef0d input=8cefbe59b29efbe2]*/ +fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg) +/*[clinic end generated code: output=888fc93b51c295bd input=8cefbe59b29efbe2]*/ { unsigned int int_arg = 0; int ret; @@ -146,9 +146,9 @@ [clinic start generated code]*/ static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, +fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg) -/*[clinic end generated code: output=102faa0f7ebe2210 input=ede70c433cccbbb2]*/ +/*[clinic end generated code: output=7f7f5840c65991be input=ede70c433cccbbb2]*/ { #define IOCTL_BUFSZ 1024 /* We use the unsigned non-checked 'I' format for the 'code' parameter @@ -279,8 +279,8 @@ [clinic start generated code]*/ static PyObject * -fcntl_flock_impl(PyModuleDef *module, int fd, int code) -/*[clinic end generated code: output=c9035133a7dbfc96 input=b70a0a41ca22a8a0]*/ +fcntl_flock_impl(PyObject *module, int fd, int code) +/*[clinic end generated code: output=84059e2b37d2fc64 input=b70a0a41ca22a8a0]*/ { int ret; @@ -358,9 +358,9 @@ [clinic start generated code]*/ static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, +fcntl_lockf_impl(PyObject *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence) -/*[clinic end generated code: output=31af35eba08b9af7 input=3a5dc01b04371f1a]*/ +/*[clinic end generated code: output=4985e7a172e7461a input=3a5dc01b04371f1a]*/ { int ret; diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c --- a/Modules/grpmodule.c +++ b/Modules/grpmodule.c @@ -93,8 +93,8 @@ [clinic start generated code]*/ static PyObject * -grp_getgrgid_impl(PyModuleDef *module, PyObject *id) -/*[clinic end generated code: output=8a11f5fdeb8c78a0 input=15fa0e2ccf5cda25]*/ +grp_getgrgid_impl(PyObject *module, PyObject *id) +/*[clinic end generated code: output=30797c289504a1ba input=15fa0e2ccf5cda25]*/ { PyObject *py_int_id; gid_t gid; @@ -131,8 +131,8 @@ [clinic start generated code]*/ static PyObject * -grp_getgrnam_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=cd47511f4854da8e input=08ded29affa3c863]*/ +grp_getgrnam_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=67905086f403c21c input=08ded29affa3c863]*/ { char *name_chars; struct group *p; @@ -163,8 +163,8 @@ [clinic start generated code]*/ static PyObject * -grp_getgrall_impl(PyModuleDef *module) -/*[clinic end generated code: output=add9037a20c202de input=d7df76c825c367df]*/ +grp_getgrall_impl(PyObject *module) +/*[clinic end generated code: output=585dad35e2e763d7 input=d7df76c825c367df]*/ { PyObject *d; struct group *p; diff --git a/Modules/md5module.c b/Modules/md5module.c --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -509,8 +509,8 @@ [clinic start generated code]*/ static PyObject * -_md5_md5_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=3527436a2090b956 input=d12ef8f72d684f7b]*/ +_md5_md5_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=2cfd0f8c091b97e6 input=d12ef8f72d684f7b]*/ { MD5object *new; Py_buffer buf; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2483,9 +2483,8 @@ [clinic start generated code]*/ static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, - int follow_symlinks) -/*[clinic end generated code: output=e4f7569f95d523ca input=099d356c306fa24a]*/ +os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=7d4976e6f18a59c5 input=099d356c306fa24a]*/ { return posix_do_stat("stat", path, dir_fd, follow_symlinks); } @@ -2507,8 +2506,8 @@ [clinic start generated code]*/ static PyObject * -os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=7a748e333fcb39bd input=0b7474765927b925]*/ +os_lstat_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=ef82a5d35ce8ab37 input=0b7474765927b925]*/ { int follow_symlinks = 0; return posix_do_stat("lstat", path, dir_fd, follow_symlinks); @@ -2555,9 +2554,9 @@ [clinic start generated code]*/ static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks) -/*[clinic end generated code: output=abaa53340210088d input=b75a756797af45ec]*/ +/*[clinic end generated code: output=cf84158bc90b1a77 input=b75a756797af45ec]*/ { int return_value; @@ -2648,8 +2647,8 @@ [clinic start generated code]*/ static char * -os_ttyname_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=03ad3d5ccaef75c3 input=5f72ca83e76b3b45]*/ +os_ttyname_impl(PyObject *module, int fd) +/*[clinic end generated code: output=ed16ad216d813591 input=5f72ca83e76b3b45]*/ { char *ret; @@ -2668,8 +2667,8 @@ [clinic start generated code]*/ static PyObject * -os_ctermid_impl(PyModuleDef *module) -/*[clinic end generated code: output=1b73788201e0aebd input=3b87fdd52556382d]*/ +os_ctermid_impl(PyObject *module) +/*[clinic end generated code: output=02f017e6c9e620db input=3b87fdd52556382d]*/ { char *ret; char buffer[L_ctermid]; @@ -2699,8 +2698,8 @@ [clinic start generated code]*/ static PyObject * -os_chdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=7358e3a20fb5aa93 input=1a4a15b4d12cb15d]*/ +os_chdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=3be6400eee26eaae input=1a4a15b4d12cb15d]*/ { int result; @@ -2743,8 +2742,8 @@ [clinic start generated code]*/ static PyObject * -os_fchdir_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=361d30df6b2d3418 input=18e816479a2fa985]*/ +os_fchdir_impl(PyObject *module, int fd) +/*[clinic end generated code: output=42e064ec4dc00ab0 input=18e816479a2fa985]*/ { return posix_fildes_fd(fd, fchdir); } @@ -2784,9 +2783,9 @@ [clinic start generated code]*/ static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=05e7f73b1a843ba2 input=7f1618e5e15cc196]*/ +/*[clinic end generated code: output=5cf6a94915cc7bff input=7f1618e5e15cc196]*/ { int result; @@ -2898,8 +2897,8 @@ [clinic start generated code]*/ static PyObject * -os_fchmod_impl(PyModuleDef *module, int fd, int mode) -/*[clinic end generated code: output=2ee31ca226d1ed33 input=8ab11975ca01ee5b]*/ +os_fchmod_impl(PyObject *module, int fd, int mode) +/*[clinic end generated code: output=afd9bc05b4e426b3 input=8ab11975ca01ee5b]*/ { int res; int async_err = 0; @@ -2931,8 +2930,8 @@ [clinic start generated code]*/ static PyObject * -os_lchmod_impl(PyModuleDef *module, path_t *path, int mode) -/*[clinic end generated code: output=7c0cc46588d89e46 input=90c5663c7465d24f]*/ +os_lchmod_impl(PyObject *module, path_t *path, int mode) +/*[clinic end generated code: output=082344022b51a1d5 input=90c5663c7465d24f]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -2966,9 +2965,9 @@ [clinic start generated code]*/ static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, +os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks) -/*[clinic end generated code: output=ff2d6e73534a95b9 input=0327e29feb876236]*/ +/*[clinic end generated code: output=85571c6737661ce9 input=0327e29feb876236]*/ { int result; @@ -3008,8 +3007,8 @@ [clinic start generated code]*/ static PyObject * -os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags) -/*[clinic end generated code: output=6741322fb949661b input=f9f82ea8b585ca9d]*/ +os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags) +/*[clinic end generated code: output=30ae958695c07316 input=f9f82ea8b585ca9d]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3033,8 +3032,8 @@ [clinic start generated code]*/ static PyObject * -os_chroot_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=b6dbfabe74ecaa9d input=14822965652c3dc3]*/ +os_chroot_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=de80befc763a4475 input=14822965652c3dc3]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3057,8 +3056,8 @@ [clinic start generated code]*/ static PyObject * -os_fsync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=83a350851064aea7 input=21c3645c056967f2]*/ +os_fsync_impl(PyObject *module, int fd) +/*[clinic end generated code: output=4a10d773f52b3584 input=21c3645c056967f2]*/ { return posix_fildes_fd(fd, fsync); } @@ -3073,8 +3072,8 @@ [clinic start generated code]*/ static PyObject * -os_sync_impl(PyModuleDef *module) -/*[clinic end generated code: output=ba524f656c201c40 input=84749fe5e9b404ff]*/ +os_sync_impl(PyObject *module) +/*[clinic end generated code: output=2796b1f0818cd71c input=84749fe5e9b404ff]*/ { Py_BEGIN_ALLOW_THREADS sync(); @@ -3098,8 +3097,8 @@ [clinic start generated code]*/ static PyObject * -os_fdatasync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=e0f04a3aff515b75 input=bc74791ee54dd291]*/ +os_fdatasync_impl(PyObject *module, int fd) +/*[clinic end generated code: output=b4b9698b5d7e26dd input=bc74791ee54dd291]*/ { return posix_fildes_fd(fd, fdatasync); } @@ -3147,9 +3146,9 @@ [clinic start generated code]*/ static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, +os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=e0a4559f394dbd91 input=a61cc35574814d5d]*/ +/*[clinic end generated code: output=4beadab0db5f70cd input=a61cc35574814d5d]*/ { int result; @@ -3217,8 +3216,8 @@ [clinic start generated code]*/ static PyObject * -os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid) -/*[clinic end generated code: output=7545abf8f6086d76 input=3af544ba1b13a0d7]*/ +os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid) +/*[clinic end generated code: output=97d21cbd5a4350a6 input=3af544ba1b13a0d7]*/ { int res; int async_err = 0; @@ -3251,8 +3250,8 @@ [clinic start generated code]*/ static PyObject * -os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid) -/*[clinic end generated code: output=bb0d2da1579ac275 input=b1c6014d563a7161]*/ +os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid) +/*[clinic end generated code: output=25eaf6af412fdf2f input=b1c6014d563a7161]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3346,8 +3345,8 @@ [clinic start generated code]*/ static PyObject * -os_getcwd_impl(PyModuleDef *module) -/*[clinic end generated code: output=efe3a8c0121525ea input=f069211bb70e3d39]*/ +os_getcwd_impl(PyObject *module) +/*[clinic end generated code: output=21badfae2ea99ddc input=f069211bb70e3d39]*/ { return posix_getcwd(0); } @@ -3360,8 +3359,8 @@ [clinic start generated code]*/ static PyObject * -os_getcwdb_impl(PyModuleDef *module) -/*[clinic end generated code: output=7fce42ee4b2a296a input=f6f6a378dad3d9cb]*/ +os_getcwdb_impl(PyObject *module) +/*[clinic end generated code: output=3dd47909480e4824 input=f6f6a378dad3d9cb]*/ { return posix_getcwd(1); } @@ -3397,9 +3396,9 @@ [clinic start generated code]*/ static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks) -/*[clinic end generated code: output=f47a7e88f7b391b6 input=b0095ebbcbaa7e04]*/ +/*[clinic end generated code: output=7f00f6007fd5269a input=b0095ebbcbaa7e04]*/ { #ifdef MS_WINDOWS BOOL result; @@ -3738,8 +3737,8 @@ [clinic start generated code]*/ static PyObject * -os_listdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=1fbe67c1f780c8b7 input=09e300416e3cd729]*/ +os_listdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=293045673fcd1a75 input=09e300416e3cd729]*/ { #if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) return _listdir_windows_no_opendir(path, NULL); @@ -3759,8 +3758,8 @@ [clinic start generated code]*/ static PyObject * -os__getfullpathname_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=b90b1f103b08773f input=332ed537c29d0a3e]*/ +os__getfullpathname_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=bb8679d56845bc9b input=332ed537c29d0a3e]*/ { if (!path->narrow) { @@ -3810,8 +3809,8 @@ [clinic start generated code]*/ static PyObject * -os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=8be81a5f51a34bcf input=71d5e89334891bf4]*/ +os__getfinalpathname_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=9bd78d0e52782e75 input=71d5e89334891bf4]*/ { HANDLE hFile; int buf_size; @@ -3874,8 +3873,8 @@ [clinic start generated code]*/ static PyObject * -os__isdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=f17b2d4e1994b0ff input=e794f12faab62a2a]*/ +os__isdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=75f56f32720836cb input=e794f12faab62a2a]*/ { DWORD attributes; @@ -3903,8 +3902,8 @@ [clinic start generated code]*/ static PyObject * -os__getvolumepathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=79a0ba729f956dbe input=7eacadc40acbda6b]*/ +os__getvolumepathname_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=cbdcbd1059ceef4c input=7eacadc40acbda6b]*/ { PyObject *result; wchar_t *path_wchar, *mountpath=NULL; @@ -3971,8 +3970,8 @@ [clinic start generated code]*/ static PyObject * -os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=8bf1f738873ef2c5 input=e965f68377e9b1ce]*/ +os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=a70446903abe821f input=e965f68377e9b1ce]*/ { int result; @@ -4023,8 +4022,8 @@ [clinic start generated code]*/ static PyObject * -os_nice_impl(PyModuleDef *module, int increment) -/*[clinic end generated code: output=8870418a3fc07b51 input=864be2d402a21da2]*/ +os_nice_impl(PyObject *module, int increment) +/*[clinic end generated code: output=9dad8a9da8109943 input=864be2d402a21da2]*/ { int value; @@ -4063,8 +4062,8 @@ [clinic start generated code]*/ static PyObject * -os_getpriority_impl(PyModuleDef *module, int which, int who) -/*[clinic end generated code: output=4759937aa5b67ed6 input=9be615d40e2544ef]*/ +os_getpriority_impl(PyObject *module, int which, int who) +/*[clinic end generated code: output=c41b7b63c7420228 input=9be615d40e2544ef]*/ { int retval; @@ -4089,8 +4088,8 @@ [clinic start generated code]*/ static PyObject * -os_setpriority_impl(PyModuleDef *module, int which, int who, int priority) -/*[clinic end generated code: output=6497d3301547e7d5 input=710ccbf65b9dc513]*/ +os_setpriority_impl(PyObject *module, int which, int who, int priority) +/*[clinic end generated code: output=3d910d95a7771eb2 input=710ccbf65b9dc513]*/ { int retval; @@ -4177,9 +4176,9 @@ [clinic start generated code]*/ static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=08033bb2ec27fb5f input=faa61c847912c850]*/ +/*[clinic end generated code: output=59e803072cf41230 input=faa61c847912c850]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 0); } @@ -4198,9 +4197,9 @@ [clinic start generated code]*/ static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, - int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=131d012eed8d3b8b input=25515dfb107c8421]*/ +os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd) +/*[clinic end generated code: output=1968c02e7857422b input=25515dfb107c8421]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 1); } @@ -4222,8 +4221,8 @@ [clinic start generated code]*/ static PyObject * -os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=cabadec80d5a77c7 input=38c8b375ca34a7e2]*/ +os_rmdir_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=080eb54f506e8301 input=38c8b375ca34a7e2]*/ { int result; @@ -4262,8 +4261,8 @@ [clinic start generated code]*/ static long -os_system_impl(PyModuleDef *module, Py_UNICODE *command) -/*[clinic end generated code: output=4c3bd5abcd9c29e7 input=303f5ce97df606b0]*/ +os_system_impl(PyObject *module, Py_UNICODE *command) +/*[clinic end generated code: output=96c4dffee36dfb48 input=303f5ce97df606b0]*/ { long result; Py_BEGIN_ALLOW_THREADS @@ -4281,8 +4280,8 @@ [clinic start generated code]*/ static long -os_system_impl(PyModuleDef *module, PyObject *command) -/*[clinic end generated code: output=800f775e10b7be55 input=86a58554ba6094af]*/ +os_system_impl(PyObject *module, PyObject *command) +/*[clinic end generated code: output=290fc437dd4f33a0 input=86a58554ba6094af]*/ { long result; char *bytes = PyBytes_AsString(command); @@ -4305,8 +4304,8 @@ [clinic start generated code]*/ static PyObject * -os_umask_impl(PyModuleDef *module, int mask) -/*[clinic end generated code: output=9e1fe3c9f14d6a05 input=ab6bfd9b24d8a7e8]*/ +os_umask_impl(PyObject *module, int mask) +/*[clinic end generated code: output=a2e33ce3bc1a6e33 input=ab6bfd9b24d8a7e8]*/ { int i = (int)umask(mask); if (i < 0) @@ -4371,8 +4370,8 @@ [clinic start generated code]*/ static PyObject * -os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=474afd5cd09b237e input=d7bcde2b1b2a2552]*/ +os_unlink_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=621797807b9963b1 input=d7bcde2b1b2a2552]*/ { int result; @@ -4414,8 +4413,8 @@ [clinic start generated code]*/ static PyObject * -os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=d0d5149e64832b9e input=e05c5ab55cd30983]*/ +os_remove_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=a8535b28f0068883 input=e05c5ab55cd30983]*/ { return os_unlink_impl(module, path, dir_fd); } @@ -4460,8 +4459,8 @@ [clinic start generated code]*/ static PyObject * -os_uname_impl(PyModuleDef *module) -/*[clinic end generated code: output=01e1421b757e753f input=e68bd246db3043ed]*/ +os_uname_impl(PyObject *module) +/*[clinic end generated code: output=e6a49cf1a1508a19 input=e68bd246db3043ed]*/ { struct utsname u; int res; @@ -4710,9 +4709,9 @@ [clinic start generated code]*/ static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, - PyObject *ns, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=31f3434e560ba2f0 input=081cdc54ca685385]*/ +os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=cfcac69d027b82cf input=081cdc54ca685385]*/ { #ifdef MS_WINDOWS HANDLE hFile; @@ -4880,8 +4879,8 @@ [clinic start generated code]*/ static PyObject * -os__exit_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=472a3cbaf68f3621 input=5e6d57556b0c4a62]*/ +os__exit_impl(PyObject *module, int status) +/*[clinic end generated code: output=116e52d9c2260d54 input=5e6d57556b0c4a62]*/ { _exit(status); return NULL; /* Make gcc -Wall happy */ @@ -5036,8 +5035,8 @@ [clinic start generated code]*/ static PyObject * -os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=9221f08143146fff input=96041559925e5229]*/ +os_execv_impl(PyObject *module, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=b21dc34deeb5b004 input=96041559925e5229]*/ { char *path_char; char **argvlist; @@ -5086,9 +5085,8 @@ [clinic start generated code]*/ static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, - PyObject *env) -/*[clinic end generated code: output=181884fcdb21508e input=626804fa092606d9]*/ +os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env) +/*[clinic end generated code: output=ff9fa8e4da8bde58 input=626804fa092606d9]*/ { char **argvlist = NULL; char **envlist; @@ -5157,8 +5155,8 @@ [clinic start generated code]*/ static PyObject * -os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=140a7945484c8cc5 input=042c91dfc1e6debc]*/ +os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=c427c0ce40f10638 input=042c91dfc1e6debc]*/ { char *path_char; char **argvlist; @@ -5234,9 +5232,9 @@ [clinic start generated code]*/ static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, - PyObject *argv, PyObject *env) -/*[clinic end generated code: output=e7f5f0703610531f input=02362fd937963f8f]*/ +os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, + PyObject *env) +/*[clinic end generated code: output=ebcfa5f7ba2f4219 input=02362fd937963f8f]*/ { char *path_char; char **argvlist; @@ -5325,8 +5323,8 @@ [clinic start generated code]*/ static PyObject * -os_fork1_impl(PyModuleDef *module) -/*[clinic end generated code: output=e27b4f66419c9dcf input=12db02167893926e]*/ +os_fork1_impl(PyObject *module) +/*[clinic end generated code: output=0de8e67ce2a310bc input=12db02167893926e]*/ { pid_t pid; int result = 0; @@ -5362,8 +5360,8 @@ [clinic start generated code]*/ static PyObject * -os_fork_impl(PyModuleDef *module) -/*[clinic end generated code: output=898b1ecd3498ba12 input=13c956413110eeaa]*/ +os_fork_impl(PyObject *module) +/*[clinic end generated code: output=3626c81f98985d49 input=13c956413110eeaa]*/ { pid_t pid; int result = 0; @@ -5400,8 +5398,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_get_priority_max_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=a6a30fa5071f2d81 input=2097b7998eca6874]*/ +os_sched_get_priority_max_impl(PyObject *module, int policy) +/*[clinic end generated code: output=9e465c6e43130521 input=2097b7998eca6874]*/ { int max; @@ -5421,8 +5419,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_get_priority_min_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=5ca3ed6bc43e9b20 input=21bc8fa0d70983bf]*/ +os_sched_get_priority_min_impl(PyObject *module, int policy) +/*[clinic end generated code: output=7595c1138cc47a6d input=21bc8fa0d70983bf]*/ { int min = sched_get_priority_min(policy); if (min < 0) @@ -5444,8 +5442,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=8cd63c15caf54fa9 input=5f14cfd1f189e1a0]*/ +os_sched_getscheduler_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=dce4c0bd3f1b34c8 input=5f14cfd1f189e1a0]*/ { int policy; @@ -5537,9 +5535,9 @@ [clinic start generated code]*/ static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, +os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, struct sched_param *param) -/*[clinic end generated code: output=37053e5c528c35c9 input=c581f9469a5327dd]*/ +/*[clinic end generated code: output=b0ac0a70d3b1d705 input=c581f9469a5327dd]*/ { /* ** sched_setscheduler() returns 0 in Linux, but the previous @@ -5566,8 +5564,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_getparam_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=f42c5bd2604ecd08 input=18a1ef9c2efae296]*/ +os_sched_getparam_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=b194e8708dcf2db8 input=18a1ef9c2efae296]*/ { struct sched_param param; PyObject *result; @@ -5601,9 +5599,9 @@ [clinic start generated code]*/ static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, +os_sched_setparam_impl(PyObject *module, pid_t pid, struct sched_param *param) -/*[clinic end generated code: output=b7a3c589436cec9b input=6b8d6dfcecdc21bd]*/ +/*[clinic end generated code: output=8af013f78a32b591 input=6b8d6dfcecdc21bd]*/ { if (sched_setparam(pid, param)) return posix_error(); @@ -5624,8 +5622,8 @@ [clinic start generated code]*/ static double -os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=7adc137a86dea581 input=2a973da15cca6fae]*/ +os_sched_rr_get_interval_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=7e2d935833ab47dc input=2a973da15cca6fae]*/ { struct timespec interval; if (sched_rr_get_interval(pid, &interval)) { @@ -5644,8 +5642,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_yield_impl(PyModuleDef *module) -/*[clinic end generated code: output=d7bd51869c4cb6a8 input=e54d6f98189391d4]*/ +os_sched_yield_impl(PyObject *module) +/*[clinic end generated code: output=902323500f222cac input=e54d6f98189391d4]*/ { if (sched_yield()) return posix_error(); @@ -5668,8 +5666,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask) -/*[clinic end generated code: output=582bcbf40d3253a9 input=a0791a597c7085ba]*/ +os_sched_setaffinity_impl(PyObject *module, pid_t pid, PyObject *mask) +/*[clinic end generated code: output=882d7dd9a229335b input=a0791a597c7085ba]*/ { int ncpus; size_t setsize; @@ -5764,8 +5762,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=b431a8f310e369e7 input=eaf161936874b8a1]*/ +os_sched_getaffinity_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=f726f2c193c17a4f input=eaf161936874b8a1]*/ { int cpu, ncpus, count; size_t setsize; @@ -5860,8 +5858,8 @@ [clinic start generated code]*/ static PyObject * -os_openpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=358e571c1ba135ee input=f3d99fd99e762907]*/ +os_openpty_impl(PyObject *module) +/*[clinic end generated code: output=98841ce5ec9cef3c input=f3d99fd99e762907]*/ { int master_fd = -1, slave_fd = -1; #ifndef HAVE_OPENPTY @@ -5962,8 +5960,8 @@ [clinic start generated code]*/ static PyObject * -os_forkpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=a11b8391dce3cb57 input=f1f7f4bae3966010]*/ +os_forkpty_impl(PyObject *module) +/*[clinic end generated code: output=60d0a5c7512e4087 input=f1f7f4bae3966010]*/ { int master_fd = -1, result = 0; pid_t pid; @@ -5998,8 +5996,8 @@ [clinic start generated code]*/ static PyObject * -os_getegid_impl(PyModuleDef *module) -/*[clinic end generated code: output=90f433a8c0b1d919 input=1596f79ad1107d5d]*/ +os_getegid_impl(PyObject *module) +/*[clinic end generated code: output=67d9be7ac68898a2 input=1596f79ad1107d5d]*/ { return _PyLong_FromGid(getegid()); } @@ -6014,8 +6012,8 @@ [clinic start generated code]*/ static PyObject * -os_geteuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=1a532c4a66874357 input=4644c662d3bd9f19]*/ +os_geteuid_impl(PyObject *module) +/*[clinic end generated code: output=ea1b60f0d6abb66e input=4644c662d3bd9f19]*/ { return _PyLong_FromUid(geteuid()); } @@ -6030,8 +6028,8 @@ [clinic start generated code]*/ static PyObject * -os_getgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=91a22021b74ea46b input=58796344cd87c0f6]*/ +os_getgid_impl(PyObject *module) +/*[clinic end generated code: output=4f28ebc9d3e5dfcf input=58796344cd87c0f6]*/ { return _PyLong_FromGid(getgid()); } @@ -6045,8 +6043,8 @@ [clinic start generated code]*/ static PyObject * -os_getpid_impl(PyModuleDef *module) -/*[clinic end generated code: output=8fbf3a934ee09e62 input=5a9a00f0ab68aa00]*/ +os_getpid_impl(PyObject *module) +/*[clinic end generated code: output=9ea6fdac01ed2b3c input=5a9a00f0ab68aa00]*/ { return PyLong_FromPid(getpid()); } @@ -6137,8 +6135,8 @@ [clinic start generated code]*/ static PyObject * -os_getgroups_impl(PyModuleDef *module) -/*[clinic end generated code: output=6e7c4fd2db6d5c60 input=d3f109412e6a155c]*/ +os_getgroups_impl(PyObject *module) +/*[clinic end generated code: output=42b0c17758561b56 input=d3f109412e6a155c]*/ { PyObject *result = NULL; @@ -6292,8 +6290,8 @@ [clinic start generated code]*/ static PyObject * -os_getpgid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=70e713b4d54b7c61 input=39d710ae3baaf1c7]*/ +os_getpgid_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=1db95a97be205d18 input=39d710ae3baaf1c7]*/ { pid_t pgid = getpgid(pid); if (pgid < 0) @@ -6311,8 +6309,8 @@ [clinic start generated code]*/ static PyObject * -os_getpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=cf3403585846811f input=6846fb2bb9a3705e]*/ +os_getpgrp_impl(PyObject *module) +/*[clinic end generated code: output=c4fc381e51103cf3 input=6846fb2bb9a3705e]*/ { #ifdef GETPGRP_HAVE_ARG return PyLong_FromPid(getpgrp(0)); @@ -6331,8 +6329,8 @@ [clinic start generated code]*/ static PyObject * -os_setpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=59650f55a963d7ac input=1f0619fcb5731e7e]*/ +os_setpgrp_impl(PyObject *module) +/*[clinic end generated code: output=2554735b0a60f0a0 input=1f0619fcb5731e7e]*/ { #ifdef SETPGRP_HAVE_ARG if (setpgrp(0, 0) < 0) @@ -6400,8 +6398,8 @@ [clinic start generated code]*/ static PyObject * -os_getppid_impl(PyModuleDef *module) -/*[clinic end generated code: output=4e49c8e7a8738cd2 input=e637cb87539c030e]*/ +os_getppid_impl(PyObject *module) +/*[clinic end generated code: output=43b2a946a8c603b4 input=e637cb87539c030e]*/ { #ifdef MS_WINDOWS return win32_getppid(); @@ -6420,8 +6418,8 @@ [clinic start generated code]*/ static PyObject * -os_getlogin_impl(PyModuleDef *module) -/*[clinic end generated code: output=037ebdb3e4b5dac1 input=2a21ab1e917163df]*/ +os_getlogin_impl(PyObject *module) +/*[clinic end generated code: output=a32e66a7e5715dac input=2a21ab1e917163df]*/ { PyObject *result = NULL; #ifdef MS_WINDOWS @@ -6463,8 +6461,8 @@ [clinic start generated code]*/ static PyObject * -os_getuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=03a8b894cefb3fa5 input=b53c8b35f110a516]*/ +os_getuid_impl(PyObject *module) +/*[clinic end generated code: output=415c0b401ebed11a input=b53c8b35f110a516]*/ { return _PyLong_FromUid(getuid()); } @@ -6487,8 +6485,8 @@ [clinic start generated code]*/ static PyObject * -os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal) -/*[clinic end generated code: output=74f907dd00a83c26 input=61a36b86ca275ab9]*/ +os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal) +/*[clinic end generated code: output=8e346a6701c88568 input=61a36b86ca275ab9]*/ #ifndef MS_WINDOWS { if (kill(pid, (int)signal) == -1) @@ -6548,8 +6546,8 @@ [clinic start generated code]*/ static PyObject * -os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal) -/*[clinic end generated code: output=3434a766ef945f93 input=38b5449eb8faec19]*/ +os_killpg_impl(PyObject *module, pid_t pgid, int signal) +/*[clinic end generated code: output=6dbcd2f1fdf5fdba input=38b5449eb8faec19]*/ { /* XXX some man pages make the `pgid` parameter an int, others a pid_t. Since getpgrp() returns a pid_t, we assume killpg should @@ -6576,8 +6574,8 @@ [clinic start generated code]*/ static PyObject * -os_plock_impl(PyModuleDef *module, int op) -/*[clinic end generated code: output=5cb851f81b914984 input=e6e5e348e1525f60]*/ +os_plock_impl(PyObject *module, int op) +/*[clinic end generated code: output=81424167033b168e input=e6e5e348e1525f60]*/ { if (plock(op) == -1) return posix_error(); @@ -6597,8 +6595,8 @@ [clinic start generated code]*/ static PyObject * -os_setuid_impl(PyModuleDef *module, uid_t uid) -/*[clinic end generated code: output=941ea9a8d1e5d565 input=c921a3285aa22256]*/ +os_setuid_impl(PyObject *module, uid_t uid) +/*[clinic end generated code: output=a0a41fd0d1ec555f input=c921a3285aa22256]*/ { if (setuid(uid) < 0) return posix_error(); @@ -6618,8 +6616,8 @@ [clinic start generated code]*/ static PyObject * -os_seteuid_impl(PyModuleDef *module, uid_t euid) -/*[clinic end generated code: output=66f4f6823a648d6d input=ba93d927e4781aa9]*/ +os_seteuid_impl(PyObject *module, uid_t euid) +/*[clinic end generated code: output=102e3ad98361519a input=ba93d927e4781aa9]*/ { if (seteuid(euid) < 0) return posix_error(); @@ -6639,8 +6637,8 @@ [clinic start generated code]*/ static PyObject * -os_setegid_impl(PyModuleDef *module, gid_t egid) -/*[clinic end generated code: output=ca094a69a081a60f input=4080526d0ccd6ce3]*/ +os_setegid_impl(PyObject *module, gid_t egid) +/*[clinic end generated code: output=4e4b825a6a10258d input=4080526d0ccd6ce3]*/ { if (setegid(egid) < 0) return posix_error(); @@ -6661,8 +6659,8 @@ [clinic start generated code]*/ static PyObject * -os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid) -/*[clinic end generated code: output=b2938c3e73d27ec7 input=0ca8978de663880c]*/ +os_setreuid_impl(PyObject *module, uid_t ruid, uid_t euid) +/*[clinic end generated code: output=62d991210006530a input=0ca8978de663880c]*/ { if (setreuid(ruid, euid) < 0) { return posix_error(); @@ -6686,8 +6684,8 @@ [clinic start generated code]*/ static PyObject * -os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid) -/*[clinic end generated code: output=db18f1839ababe3d input=c59499f72846db78]*/ +os_setregid_impl(PyObject *module, gid_t rgid, gid_t egid) +/*[clinic end generated code: output=aa803835cf5342f3 input=c59499f72846db78]*/ { if (setregid(rgid, egid) < 0) return posix_error(); @@ -6706,8 +6704,8 @@ [clinic start generated code]*/ static PyObject * -os_setgid_impl(PyModuleDef *module, gid_t gid) -/*[clinic end generated code: output=756cb42c6abd9d87 input=27d30c4059045dc6]*/ +os_setgid_impl(PyObject *module, gid_t gid) +/*[clinic end generated code: output=bdccd7403f6ad8c3 input=27d30c4059045dc6]*/ { if (setgid(gid) < 0) return posix_error(); @@ -6727,8 +6725,8 @@ [clinic start generated code]*/ static PyObject * -os_setgroups(PyModuleDef *module, PyObject *groups) -/*[clinic end generated code: output=7945c2e3cc817c58 input=fa742ca3daf85a7e]*/ +os_setgroups(PyObject *module, PyObject *groups) +/*[clinic end generated code: output=3fcb32aad58c5ecd input=fa742ca3daf85a7e]*/ { int i, len; gid_t grouplist[MAX_GROUPS]; @@ -6842,8 +6840,8 @@ [clinic start generated code]*/ static PyObject * -os_wait3_impl(PyModuleDef *module, int options) -/*[clinic end generated code: output=e18af4924dc54945 input=8ac4c56956b61710]*/ +os_wait3_impl(PyObject *module, int options) +/*[clinic end generated code: output=92c3224e6f28217a input=8ac4c56956b61710]*/ { pid_t pid; struct rusage ru; @@ -6879,8 +6877,8 @@ [clinic start generated code]*/ static PyObject * -os_wait4_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=714f19e6ff01e099 input=d11deed0750600ba]*/ +os_wait4_impl(PyObject *module, pid_t pid, int options) +/*[clinic end generated code: output=66195aa507b35f70 input=d11deed0750600ba]*/ { pid_t res; struct rusage ru; @@ -6921,8 +6919,8 @@ [clinic start generated code]*/ static PyObject * -os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options) -/*[clinic end generated code: output=5c0192750e22fa2e input=d8e7f76e052b7920]*/ +os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options) +/*[clinic end generated code: output=5d2e1c0bde61f4d8 input=d8e7f76e052b7920]*/ { PyObject *result; int res; @@ -6976,8 +6974,8 @@ [clinic start generated code]*/ static PyObject * -os_waitpid_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=5e3593353d54b15b input=0bf1666b8758fda3]*/ +os_waitpid_impl(PyObject *module, pid_t pid, int options) +/*[clinic end generated code: output=5c37c06887a20270 input=0bf1666b8758fda3]*/ { pid_t res; int async_err = 0; @@ -7011,8 +7009,8 @@ [clinic start generated code]*/ static PyObject * -os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) -/*[clinic end generated code: output=fc1d520db019625f input=444c8f51cca5b862]*/ +os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options) +/*[clinic end generated code: output=15f1ce005a346b09 input=444c8f51cca5b862]*/ { int status; Py_intptr_t res; @@ -7043,8 +7041,8 @@ [clinic start generated code]*/ static PyObject * -os_wait_impl(PyModuleDef *module) -/*[clinic end generated code: output=4a7f4978393e0654 input=03b0182d4a4700ce]*/ +os_wait_impl(PyObject *module) +/*[clinic end generated code: output=6bc419ac32fb364b input=03b0182d4a4700ce]*/ { pid_t pid; int async_err = 0; @@ -7371,9 +7369,9 @@ [clinic start generated code]*/ static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, +os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd) -/*[clinic end generated code: output=a01b4bcf32403ccd input=e820ec4472547bc3]*/ +/*[clinic end generated code: output=08ca9f3f3cf960f6 input=e820ec4472547bc3]*/ { #ifdef MS_WINDOWS DWORD result; @@ -7521,8 +7519,8 @@ [clinic start generated code]*/ static PyObject * -os_times_impl(PyModuleDef *module) -/*[clinic end generated code: output=df0a63ebe6e6f091 input=2bf9df3d6ab2e48b]*/ +os_times_impl(PyObject *module) +/*[clinic end generated code: output=35f640503557d32a input=2bf9df3d6ab2e48b]*/ #ifdef MS_WINDOWS { FILETIME create, exit, kernel, user; @@ -7575,8 +7573,8 @@ [clinic start generated code]*/ static PyObject * -os_getsid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=a074f80c0e6bfb38 input=eeb2b923a30ce04e]*/ +os_getsid_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=112deae56b306460 input=eeb2b923a30ce04e]*/ { int sid; sid = getsid(pid); @@ -7595,8 +7593,8 @@ [clinic start generated code]*/ static PyObject * -os_setsid_impl(PyModuleDef *module) -/*[clinic end generated code: output=398fc152ae327330 input=5fff45858e2f0776]*/ +os_setsid_impl(PyObject *module) +/*[clinic end generated code: output=e2ddedd517086d77 input=5fff45858e2f0776]*/ { if (setsid() < 0) return posix_error(); @@ -7617,8 +7615,8 @@ [clinic start generated code]*/ static PyObject * -os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp) -/*[clinic end generated code: output=7079a8e932912841 input=fceb395eca572e1a]*/ +os_setpgid_impl(PyObject *module, pid_t pid, pid_t pgrp) +/*[clinic end generated code: output=6461160319a43d6a input=fceb395eca572e1a]*/ { if (setpgid(pid, pgrp) < 0) return posix_error(); @@ -7638,8 +7636,8 @@ [clinic start generated code]*/ static PyObject * -os_tcgetpgrp_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=ebb6dc5f111c7dc0 input=7f6c18eac10ada86]*/ +os_tcgetpgrp_impl(PyObject *module, int fd) +/*[clinic end generated code: output=f865e88be86c272b input=7f6c18eac10ada86]*/ { pid_t pgid = tcgetpgrp(fd); if (pgid < 0) @@ -7661,8 +7659,8 @@ [clinic start generated code]*/ static PyObject * -os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid) -/*[clinic end generated code: output=3e4b05177462cd22 input=5bdc997c6a619020]*/ +os_tcsetpgrp_impl(PyObject *module, int fd, pid_t pgid) +/*[clinic end generated code: output=f1821a381b9daa39 input=5bdc997c6a619020]*/ { if (tcsetpgrp(fd, pgid) < 0) return posix_error(); @@ -7696,9 +7694,8 @@ [clinic start generated code]*/ static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, - int dir_fd) -/*[clinic end generated code: output=47e8cc63559f5ddd input=ad8623b29acd2934]*/ +os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd) +/*[clinic end generated code: output=abc7227888c8bc73 input=ad8623b29acd2934]*/ { int fd; int async_err = 0; @@ -7759,8 +7756,8 @@ [clinic start generated code]*/ static PyObject * -os_close_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=47bf2ea536445a26 input=2bc42451ca5c3223]*/ +os_close_impl(PyObject *module, int fd) +/*[clinic end generated code: output=2fe4e93602822c14 input=2bc42451ca5c3223]*/ { int res; if (!_PyVerify_fd(fd)) @@ -7791,8 +7788,8 @@ [clinic start generated code]*/ static PyObject * -os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high) -/*[clinic end generated code: output=70e6adb95220ba96 input=5855a3d053ebd4ec]*/ +os_closerange_impl(PyObject *module, int fd_low, int fd_high) +/*[clinic end generated code: output=0ce5c20fcda681c2 input=5855a3d053ebd4ec]*/ { int i; Py_BEGIN_ALLOW_THREADS @@ -7816,8 +7813,8 @@ [clinic start generated code]*/ static int -os_dup_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=f4bbac8c7652d05e input=6f10f7ea97f7852a]*/ +os_dup_impl(PyObject *module, int fd) +/*[clinic end generated code: output=486f4860636b2a9f input=6f10f7ea97f7852a]*/ { return _Py_dup(fd); } @@ -7833,8 +7830,8 @@ [clinic start generated code]*/ static PyObject * -os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable) -/*[clinic end generated code: output=9a099d95881a7923 input=76e96f511be0352f]*/ +os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable) +/*[clinic end generated code: output=db832a2d872ccc5f input=76e96f511be0352f]*/ { int res; #if defined(HAVE_DUP3) && \ @@ -7930,8 +7927,8 @@ [clinic start generated code]*/ static PyObject * -os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length) -/*[clinic end generated code: output=25ff778f9e2fbf1b input=65da41d2106e9b79]*/ +os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length) +/*[clinic end generated code: output=af7051f3e7c29651 input=65da41d2106e9b79]*/ { int res; @@ -7962,8 +7959,8 @@ [clinic start generated code]*/ static Py_off_t -os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how) -/*[clinic end generated code: output=65d4ab96d664998c input=902654ad3f96a6d3]*/ +os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how) +/*[clinic end generated code: output=971e1efb6b30bd2f input=902654ad3f96a6d3]*/ { Py_off_t result; @@ -8013,8 +8010,8 @@ [clinic start generated code]*/ static PyObject * -os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) -/*[clinic end generated code: output=be24f44178455e8b input=1df2eaa27c0bf1d3]*/ +os_read_impl(PyObject *module, int fd, Py_ssize_t length) +/*[clinic end generated code: output=dafbe9a5cddb987b input=1df2eaa27c0bf1d3]*/ { Py_ssize_t n; PyObject *buffer; @@ -8125,8 +8122,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=00fc56ff1800059f input=e679eb5dbfa0357d]*/ +os_readv_impl(PyObject *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=792da062d3fcebdb input=e679eb5dbfa0357d]*/ { int cnt; Py_ssize_t n; @@ -8180,8 +8177,8 @@ [clinic start generated code]*/ static PyObject * -os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) -/*[clinic end generated code: output=90d1fed87f68fa33 input=084948dcbaa35d4c]*/ +os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset) +/*[clinic end generated code: output=435b29ee32b54a78 input=084948dcbaa35d4c]*/ { Py_ssize_t n; int async_err = 0; @@ -8229,8 +8226,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) -/*[clinic end generated code: output=58845c93c9ee1dda input=3207e28963234f3c]*/ +os_write_impl(PyObject *module, int fd, Py_buffer *data) +/*[clinic end generated code: output=e4ef5bc904b58ef9 input=3207e28963234f3c]*/ { return _Py_write(fd, data->buf, data->len); } @@ -8400,8 +8397,8 @@ [clinic start generated code]*/ static PyObject * -os_fstat_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=d71fe98bf042b626 input=27e0e0ebbe5600c9]*/ +os_fstat_impl(PyObject *module, int fd) +/*[clinic end generated code: output=efc038cb5f654492 input=27e0e0ebbe5600c9]*/ { STRUCT_STAT st; int res; @@ -8436,8 +8433,8 @@ [clinic start generated code]*/ static int -os_isatty_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=acec9d3c29d16d33 input=08ce94aa1eaf7b5e]*/ +os_isatty_impl(PyObject *module, int fd) +/*[clinic end generated code: output=6a48c8b4e644ca00 input=08ce94aa1eaf7b5e]*/ { int return_value; if (!_PyVerify_fd(fd)) @@ -8460,8 +8457,8 @@ [clinic start generated code]*/ static PyObject * -os_pipe_impl(PyModuleDef *module) -/*[clinic end generated code: output=6b0cd3f868ec3c40 input=02535e8c8fa6c4d4]*/ +os_pipe_impl(PyObject *module) +/*[clinic end generated code: output=ff9b76255793b440 input=02535e8c8fa6c4d4]*/ { int fds[2]; #ifdef MS_WINDOWS @@ -8547,8 +8544,8 @@ [clinic start generated code]*/ static PyObject * -os_pipe2_impl(PyModuleDef *module, int flags) -/*[clinic end generated code: output=c15b6075d0c6b2e7 input=f261b6e7e63c6817]*/ +os_pipe2_impl(PyObject *module, int flags) +/*[clinic end generated code: output=25751fb43a45540f input=f261b6e7e63c6817]*/ { int fds[2]; int res; @@ -8575,8 +8572,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=a48925dbf2d5c238 input=5b8d17fe4189d2fe]*/ +os_writev_impl(PyObject *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=56565cfac3aac15b input=5b8d17fe4189d2fe]*/ { int cnt; Py_ssize_t result; @@ -8627,9 +8624,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, - Py_off_t offset) -/*[clinic end generated code: output=93aabdb40e17d325 input=19903f1b3dd26377]*/ +os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset) +/*[clinic end generated code: output=c74da630758ee925 input=19903f1b3dd26377]*/ { Py_ssize_t size; int async_err = 0; @@ -8672,8 +8668,8 @@ [clinic start generated code]*/ static PyObject * -os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=8f5f5e72c630049a input=73032e98a36e0e19]*/ +os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=ce41cfad0e68c940 input=73032e98a36e0e19]*/ { int result; int async_err = 0; @@ -8723,9 +8719,9 @@ [clinic start generated code]*/ static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, +os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd) -/*[clinic end generated code: output=5151a8a9f754d272 input=ee44531551a4d83b]*/ +/*[clinic end generated code: output=92e55d3ca8917461 input=ee44531551a4d83b]*/ { int result; int async_err = 0; @@ -8760,8 +8756,8 @@ [clinic start generated code]*/ static unsigned int -os_major_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=ba55693ab49bac34 input=1e16a4d30c4d4462]*/ +os_major_impl(PyObject *module, dev_t device) +/*[clinic end generated code: output=5b3b2589bafb498e input=1e16a4d30c4d4462]*/ { return major(device); } @@ -8777,8 +8773,8 @@ [clinic start generated code]*/ static unsigned int -os_minor_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=2867219ebf274e27 input=0842c6d23f24c65e]*/ +os_minor_impl(PyObject *module, dev_t device) +/*[clinic end generated code: output=5e1a25e630b0157d input=0842c6d23f24c65e]*/ { return minor(device); } @@ -8795,8 +8791,8 @@ [clinic start generated code]*/ static dev_t -os_makedev_impl(PyModuleDef *module, int major, int minor) -/*[clinic end generated code: output=7cb6264352437660 input=4b9fd8fc73cbe48f]*/ +os_makedev_impl(PyObject *module, int major, int minor) +/*[clinic end generated code: output=881aaa4aba6f6a52 input=4b9fd8fc73cbe48f]*/ { return makedev(major, minor); } @@ -8815,8 +8811,8 @@ [clinic start generated code]*/ static PyObject * -os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) -/*[clinic end generated code: output=3666f401d76bf834 input=63b43641e52818f2]*/ +os_ftruncate_impl(PyObject *module, int fd, Py_off_t length) +/*[clinic end generated code: output=fba15523721be7e4 input=63b43641e52818f2]*/ { int result; int async_err = 0; @@ -8856,8 +8852,8 @@ [clinic start generated code]*/ static PyObject * -os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) -/*[clinic end generated code: output=f60a9e08370e9e2e input=77229cf0b50a9b77]*/ +os_truncate_impl(PyObject *module, path_t *path, Py_off_t length) +/*[clinic end generated code: output=43009c8df5c0a12b input=77229cf0b50a9b77]*/ { int result; #ifdef MS_WINDOWS @@ -8920,9 +8916,9 @@ [clinic start generated code]*/ static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length) -/*[clinic end generated code: output=7f6f87a8c751e1b4 input=d7a2ef0ab2ca52fb]*/ +/*[clinic end generated code: output=73f107139564aa9d input=d7a2ef0ab2ca52fb]*/ { int result; int async_err = 0; @@ -8962,9 +8958,9 @@ [clinic start generated code]*/ static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length, int advice) -/*[clinic end generated code: output=457ce6a67189e10d input=0fbe554edc2f04b5]*/ +/*[clinic end generated code: output=412ef4aa70c98642 input=0fbe554edc2f04b5]*/ { int result; int async_err = 0; @@ -9014,8 +9010,8 @@ [clinic start generated code]*/ static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=a2438cf95e5a0c1c input=ba586581c2e6105f]*/ +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=d29a567d6b2327d2 input=ba586581c2e6105f]*/ { wchar_t *env; @@ -9058,8 +9054,8 @@ [clinic start generated code]*/ static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=a2438cf95e5a0c1c input=a97bc6152f688d31]*/ +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=d29a567d6b2327d2 input=a97bc6152f688d31]*/ { PyObject *bytes = NULL; char *env; @@ -9095,8 +9091,8 @@ [clinic start generated code]*/ static PyObject * -os_unsetenv_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=25994b57016a2dc9 input=2bb5288a599c7107]*/ +os_unsetenv_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=54c4137ab1834f02 input=2bb5288a599c7107]*/ { #ifndef HAVE_BROKEN_UNSETENV int err; @@ -9134,8 +9130,8 @@ [clinic start generated code]*/ static PyObject * -os_strerror_impl(PyModuleDef *module, int code) -/*[clinic end generated code: output=0280c6af51e5c9fe input=75a8673d97915a91]*/ +os_strerror_impl(PyObject *module, int code) +/*[clinic end generated code: output=baebf09fa02a78f2 input=75a8673d97915a91]*/ { char *message = strerror(code); if (message == NULL) { @@ -9159,8 +9155,8 @@ [clinic start generated code]*/ static int -os_WCOREDUMP_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=134f70bbe63fbf41 input=8b05e7ab38528d04]*/ +os_WCOREDUMP_impl(PyObject *module, int status) +/*[clinic end generated code: output=1a584b147b16bd18 input=8b05e7ab38528d04]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9182,8 +9178,8 @@ [clinic start generated code]*/ static int -os_WIFCONTINUED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=9cdd26543ebb6dcd input=e777e7d38eb25bd9]*/ +os_WIFCONTINUED_impl(PyObject *module, int status) +/*[clinic end generated code: output=1e35295d844364bd input=e777e7d38eb25bd9]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9202,8 +9198,8 @@ [clinic start generated code]*/ static int -os_WIFSTOPPED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=73bf35e44994a724 input=043cb7f1289ef904]*/ +os_WIFSTOPPED_impl(PyObject *module, int status) +/*[clinic end generated code: output=fdb57122a5c9b4cb input=043cb7f1289ef904]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9222,8 +9218,8 @@ [clinic start generated code]*/ static int -os_WIFSIGNALED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=2697975771872420 input=d55ba7cc9ce5dc43]*/ +os_WIFSIGNALED_impl(PyObject *module, int status) +/*[clinic end generated code: output=d1dde4dcc819a5f5 input=d55ba7cc9ce5dc43]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9242,8 +9238,8 @@ [clinic start generated code]*/ static int -os_WIFEXITED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=ca8f8c61f0b8532e input=d63775a6791586c0]*/ +os_WIFEXITED_impl(PyObject *module, int status) +/*[clinic end generated code: output=01c09d6ebfeea397 input=d63775a6791586c0]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9262,8 +9258,8 @@ [clinic start generated code]*/ static int -os_WEXITSTATUS_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=ea54da23d9e0f6af input=e1fb4944e377585b]*/ +os_WEXITSTATUS_impl(PyObject *module, int status) +/*[clinic end generated code: output=6e3efbba11f6488d input=e1fb4944e377585b]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9282,8 +9278,8 @@ [clinic start generated code]*/ static int -os_WTERMSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=4d25367026cb852c input=727fd7f84ec3f243]*/ +os_WTERMSIG_impl(PyObject *module, int status) +/*[clinic end generated code: output=172f7dfc8dcfc3ad input=727fd7f84ec3f243]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9302,8 +9298,8 @@ [clinic start generated code]*/ static int -os_WSTOPSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=54eb9c13b001adb4 input=46ebf1d1b293c5c1]*/ +os_WSTOPSIG_impl(PyObject *module, int status) +/*[clinic end generated code: output=0ab7586396f5d82b input=46ebf1d1b293c5c1]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9376,8 +9372,8 @@ [clinic start generated code]*/ static PyObject * -os_fstatvfs_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=584a94a754497ac0 input=d8122243ac50975e]*/ +os_fstatvfs_impl(PyObject *module, int fd) +/*[clinic end generated code: output=53547cf0cc55e6c5 input=d8122243ac50975e]*/ { int result; int async_err = 0; @@ -9412,8 +9408,8 @@ [clinic start generated code]*/ static PyObject * -os_statvfs_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=5ced07a2cf931f41 input=3f5c35791c669bd9]*/ +os_statvfs_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=87106dd1beb8556e input=3f5c35791c669bd9]*/ { int result; struct statvfs st; @@ -9454,8 +9450,8 @@ [clinic start generated code]*/ static PyObject * -os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path) -/*[clinic end generated code: output=60a9cf33449db1dd input=6458133aed893c78]*/ +os__getdiskusage_impl(PyObject *module, Py_UNICODE *path) +/*[clinic end generated code: output=76d6adcd86b1db0b input=6458133aed893c78]*/ { BOOL retval; ULARGE_INTEGER _, total, free; @@ -9640,8 +9636,8 @@ [clinic start generated code]*/ static long -os_fpathconf_impl(PyModuleDef *module, int fd, int name) -/*[clinic end generated code: output=082b2922d4441de7 input=5942a024d3777810]*/ +os_fpathconf_impl(PyObject *module, int fd, int name) +/*[clinic end generated code: output=d5b7042425fc3e21 input=5942a024d3777810]*/ { long limit; @@ -9669,8 +9665,8 @@ [clinic start generated code]*/ static long -os_pathconf_impl(PyModuleDef *module, path_t *path, int name) -/*[clinic end generated code: output=3713029e9501f5ab input=bc3e2a985af27e5e]*/ +os_pathconf_impl(PyObject *module, path_t *path, int name) +/*[clinic end generated code: output=5bedee35b293a089 input=bc3e2a985af27e5e]*/ { long limit; @@ -9866,8 +9862,8 @@ [clinic start generated code]*/ static PyObject * -os_confstr_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=6ff79c9eed8c2daf input=18fb4d0567242e65]*/ +os_confstr_impl(PyObject *module, int name) +/*[clinic end generated code: output=bfb0b1b1e49b9383 input=18fb4d0567242e65]*/ { PyObject *result = NULL; char buffer[255]; @@ -10416,8 +10412,8 @@ [clinic start generated code]*/ static long -os_sysconf_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=ed567306f58d69c4 input=279e3430a33f29e4]*/ +os_sysconf_impl(PyObject *module, int name) +/*[clinic end generated code: output=3662f945fc0cc756 input=279e3430a33f29e4]*/ { long value; @@ -10514,8 +10510,8 @@ [clinic start generated code]*/ static PyObject * -os_abort_impl(PyModuleDef *module) -/*[clinic end generated code: output=486bb96647c299b3 input=cf2c7d98bc504047]*/ +os_abort_impl(PyObject *module) +/*[clinic end generated code: output=dcf52586dad2467c input=cf2c7d98bc504047]*/ { abort(); /*NOTREACHED*/ @@ -10672,8 +10668,8 @@ [clinic start generated code]*/ static PyObject * -os_getloadavg_impl(PyModuleDef *module) -/*[clinic end generated code: output=2b64c5b675d74c14 input=3d6d826b76d8a34e]*/ +os_getloadavg_impl(PyObject *module) +/*[clinic end generated code: output=9ad3a11bfb4f4bd2 input=3d6d826b76d8a34e]*/ { double loadavg[3]; if (getloadavg(loadavg, 3)!=3) { @@ -10696,8 +10692,8 @@ [clinic start generated code]*/ static PyObject * -os_device_encoding_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=34f14e33468419c1 input=9e1d4a42b66df312]*/ +os_device_encoding_impl(PyObject *module, int fd) +/*[clinic end generated code: output=e0d294bbab7e8c2b input=9e1d4a42b66df312]*/ { return _Py_device_encoding(fd); } @@ -10716,8 +10712,8 @@ [clinic start generated code]*/ static PyObject * -os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid) -/*[clinic end generated code: output=92cc330812c6ed0f input=9e33cb79a82792f3]*/ +os_setresuid_impl(PyObject *module, uid_t ruid, uid_t euid, uid_t suid) +/*[clinic end generated code: output=834a641e15373e97 input=9e33cb79a82792f3]*/ { if (setresuid(ruid, euid, suid) < 0) return posix_error(); @@ -10739,8 +10735,8 @@ [clinic start generated code]*/ static PyObject * -os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid) -/*[clinic end generated code: output=e91dc4842a604429 input=33e9e0785ef426b1]*/ +os_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid) +/*[clinic end generated code: output=6aa402f3d2e514a9 input=33e9e0785ef426b1]*/ { if (setresgid(rgid, egid, sgid) < 0) return posix_error(); @@ -10757,8 +10753,8 @@ [clinic start generated code]*/ static PyObject * -os_getresuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=9ddef62faae8e477 input=41ccfa8e1f6517ad]*/ +os_getresuid_impl(PyObject *module) +/*[clinic end generated code: output=8e0becff5dece5bf input=41ccfa8e1f6517ad]*/ { uid_t ruid, euid, suid; if (getresuid(&ruid, &euid, &suid) < 0) @@ -10778,8 +10774,8 @@ [clinic start generated code]*/ static PyObject * -os_getresgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=e1a553cbcf16234c input=517e68db9ca32df6]*/ +os_getresgid_impl(PyObject *module) +/*[clinic end generated code: output=2719c4bfcf27fb9f input=517e68db9ca32df6]*/ { gid_t rgid, egid, sgid; if (getresgid(&rgid, &egid, &sgid) < 0) @@ -10810,9 +10806,9 @@ [clinic start generated code]*/ static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=cf2cede74bd5d412 input=8c8ea3bab78d89c2]*/ +/*[clinic end generated code: output=5f2f44200a43cff2 input=8c8ea3bab78d89c2]*/ { Py_ssize_t i; PyObject *buffer = NULL; @@ -10882,9 +10878,9 @@ [clinic start generated code]*/ static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks) -/*[clinic end generated code: output=1b395ef82880fea0 input=f0d26833992015c2]*/ +/*[clinic end generated code: output=98b83f63fdde26bb input=f0d26833992015c2]*/ { ssize_t result; @@ -10930,9 +10926,9 @@ [clinic start generated code]*/ static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=f92bb39ab992650d input=cdb54834161e3329]*/ +/*[clinic end generated code: output=521a51817980cda6 input=cdb54834161e3329]*/ { ssize_t result; @@ -10973,8 +10969,8 @@ [clinic start generated code]*/ static PyObject * -os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks) -/*[clinic end generated code: output=a87ad6ce56e42a4f input=08cca53ac0b07c13]*/ +os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks) +/*[clinic end generated code: output=bebdb4e2ad0ce435 input=08cca53ac0b07c13]*/ { Py_ssize_t i; PyObject *result = NULL; @@ -11067,8 +11063,8 @@ [clinic start generated code]*/ static PyObject * -os_urandom_impl(PyModuleDef *module, Py_ssize_t size) -/*[clinic end generated code: output=e0011f021501f03b input=4067cdb1b6776c29]*/ +os_urandom_impl(PyObject *module, Py_ssize_t size) +/*[clinic end generated code: output=42c5cca9d18068e9 input=4067cdb1b6776c29]*/ { PyObject *bytes; int result; @@ -11204,8 +11200,8 @@ [clinic start generated code]*/ static PyObject * -os_cpu_count_impl(PyModuleDef *module) -/*[clinic end generated code: output=c59ee7f6bce832b8 input=d55e2f8f3823a628]*/ +os_cpu_count_impl(PyObject *module) +/*[clinic end generated code: output=5fc29463c3936a9c input=d55e2f8f3823a628]*/ { int ncpu = 0; #ifdef MS_WINDOWS @@ -11245,8 +11241,8 @@ [clinic start generated code]*/ static int -os_get_inheritable_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=36110bb36efaa21e input=89ac008dc9ab6b95]*/ +os_get_inheritable_impl(PyObject *module, int fd) +/*[clinic end generated code: output=0445e20e149aa5b8 input=89ac008dc9ab6b95]*/ { int return_value; if (!_PyVerify_fd(fd)) { @@ -11271,8 +11267,8 @@ [clinic start generated code]*/ static PyObject * -os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable) -/*[clinic end generated code: output=2ac5c6ce8623f045 input=9ceaead87a1e2402]*/ +os_set_inheritable_impl(PyObject *module, int fd, int inheritable) +/*[clinic end generated code: output=f1b1918a2f3c38c2 input=9ceaead87a1e2402]*/ { int result; if (!_PyVerify_fd(fd)) @@ -11297,8 +11293,8 @@ [clinic start generated code]*/ static int -os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle) -/*[clinic end generated code: output=3b7b3e1b43f312b6 input=5f7759443aae3dc5]*/ +os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle) +/*[clinic end generated code: output=9e5389b0aa0916ce input=5f7759443aae3dc5]*/ { DWORD flags; @@ -11321,9 +11317,9 @@ [clinic start generated code]*/ static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, int inheritable) -/*[clinic end generated code: output=d2e111a96c9eb296 input=e64b2b2730469def]*/ +/*[clinic end generated code: output=b1e67bfa3213d745 input=e64b2b2730469def]*/ { DWORD flags = inheritable ? HANDLE_FLAG_INHERIT : 0; if (!SetHandleInformation((HANDLE)handle, HANDLE_FLAG_INHERIT, flags)) { diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -105,8 +105,8 @@ [clinic start generated code]*/ static PyObject * -pwd_getpwuid(PyModuleDef *module, PyObject *uidobj) -/*[clinic end generated code: output=cba29ae4c2bcb8e1 input=ae64d507a1c6d3e8]*/ +pwd_getpwuid(PyObject *module, PyObject *uidobj) +/*[clinic end generated code: output=c4ee1d4d429b86c4 input=ae64d507a1c6d3e8]*/ { uid_t uid; struct passwd *p; @@ -141,8 +141,8 @@ [clinic start generated code]*/ static PyObject * -pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=66848d42d386fca3 input=d5f7e700919b02d3]*/ +pwd_getpwnam_impl(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=6abeee92430e43d2 input=d5f7e700919b02d3]*/ { char *name; struct passwd *p; @@ -173,8 +173,8 @@ [clinic start generated code]*/ static PyObject * -pwd_getpwall_impl(PyModuleDef *module) -/*[clinic end generated code: output=ab30e37bf26d431d input=d7ecebfd90219b85]*/ +pwd_getpwall_impl(PyObject *module) +/*[clinic end generated code: output=4853d2f5a0afac8a input=d7ecebfd90219b85]*/ { PyObject *d; struct passwd *p; diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1560,9 +1560,9 @@ [clinic start generated code]*/ static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, +pyexpat_ParserCreate_impl(PyObject *module, const char *encoding, const char *namespace_separator, PyObject *intern) -/*[clinic end generated code: output=81fccd233e1743a8 input=23d29704acad385d]*/ +/*[clinic end generated code: output=295c0cf01ab1146c input=23d29704acad385d]*/ { PyObject *result; int intern_decref = 0; @@ -1606,8 +1606,8 @@ [clinic start generated code]*/ static PyObject * -pyexpat_ErrorString_impl(PyModuleDef *module, long code) -/*[clinic end generated code: output=d87668108b6868e5 input=cc67de010d9e62b3]*/ +pyexpat_ErrorString_impl(PyObject *module, long code) +/*[clinic end generated code: output=2feae50d166f2174 input=cc67de010d9e62b3]*/ { return Py_BuildValue("z", XML_ErrorString((int)code)); } diff --git a/Modules/sha1module.c b/Modules/sha1module.c --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -486,8 +486,8 @@ [clinic start generated code]*/ static PyObject * -_sha1_sha1_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=3e4e841386b9e8db input=27ea54281d995ec2]*/ +_sha1_sha1_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=e5982830d1dece51 input=27ea54281d995ec2]*/ { SHA1object *new; Py_buffer buf; diff --git a/Modules/sha256module.c b/Modules/sha256module.c --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -607,8 +607,8 @@ [clinic start generated code]*/ static PyObject * -_sha256_sha256_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=d70e6e2d97112844 input=09cce3fb855056b2]*/ +_sha256_sha256_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=fa644436dcea5c31 input=09cce3fb855056b2]*/ { SHAobject *new; Py_buffer buf; @@ -647,8 +647,8 @@ [clinic start generated code]*/ static PyObject * -_sha256_sha224_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=f2822bf28416b42a input=27a04ba24c353a73]*/ +_sha256_sha224_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=21e3ba22c3404f93 input=27a04ba24c353a73]*/ { SHAobject *new; Py_buffer buf; diff --git a/Modules/sha512module.c b/Modules/sha512module.c --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -678,8 +678,8 @@ [clinic start generated code]*/ static PyObject * -_sha512_sha512_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=da13bc0a94da6de3 input=e69bad9ae9b6a308]*/ +_sha512_sha512_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=8b865a2df73bd387 input=e69bad9ae9b6a308]*/ { SHAobject *new; Py_buffer buf; @@ -718,8 +718,8 @@ [clinic start generated code]*/ static PyObject * -_sha512_sha384_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=ac731aea5509174d input=c9327788d4ea4545]*/ +_sha512_sha384_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=ae4b2e26decf81e8 input=c9327788d4ea4545]*/ { SHAobject *new; Py_buffer buf; diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -340,8 +340,8 @@ [clinic start generated code]*/ static long -signal_alarm_impl(PyModuleDef *module, int seconds) -/*[clinic end generated code: output=f5f9badaab25d3e7 input=0d5e97e0e6f39e86]*/ +signal_alarm_impl(PyObject *module, int seconds) +/*[clinic end generated code: output=144232290814c298 input=0d5e97e0e6f39e86]*/ { /* alarm() returns the number of seconds remaining */ return (long)alarm(seconds); @@ -358,8 +358,8 @@ [clinic start generated code]*/ static PyObject * -signal_pause_impl(PyModuleDef *module) -/*[clinic end generated code: output=9245704caa63bbe9 input=f03de0f875752062]*/ +signal_pause_impl(PyObject *module) +/*[clinic end generated code: output=391656788b3c3929 input=f03de0f875752062]*/ { Py_BEGIN_ALLOW_THREADS (void)pause(); @@ -394,8 +394,8 @@ [clinic start generated code]*/ static PyObject * -signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler) -/*[clinic end generated code: output=622d7d0beebea546 input=deee84af5fa0432c]*/ +signal_signal_impl(PyObject *module, int signalnum, PyObject *handler) +/*[clinic end generated code: output=b44cfda43780f3a1 input=deee84af5fa0432c]*/ { PyObject *old_handler; void (*func)(int); @@ -472,8 +472,8 @@ [clinic start generated code]*/ static PyObject * -signal_getsignal_impl(PyModuleDef *module, int signalnum) -/*[clinic end generated code: output=d50ec355757e360c input=ac23a00f19dfa509]*/ +signal_getsignal_impl(PyObject *module, int signalnum) +/*[clinic end generated code: output=35b3e0e796fd555e input=ac23a00f19dfa509]*/ { PyObject *old_handler; if (signalnum < 1 || signalnum >= NSIG) { @@ -507,8 +507,8 @@ [clinic start generated code]*/ static PyObject * -signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag) -/*[clinic end generated code: output=5dcf8b031b0e8044 input=4160acacca3e2099]*/ +signal_siginterrupt_impl(PyObject *module, int signalnum, int flag) +/*[clinic end generated code: output=063816243d85dd19 input=4160acacca3e2099]*/ { if (signalnum < 1 || signalnum >= NSIG) { PyErr_SetString(PyExc_ValueError, @@ -682,9 +682,9 @@ [clinic start generated code]*/ static PyObject * -signal_setitimer_impl(PyModuleDef *module, int which, double seconds, +signal_setitimer_impl(PyObject *module, int which, double seconds, double interval) -/*[clinic end generated code: output=9a9227a27bd05988 input=0d27d417cfcbd51a]*/ +/*[clinic end generated code: output=6f51da0fe0787f2c input=0d27d417cfcbd51a]*/ { struct itimerval new, old; @@ -714,8 +714,8 @@ [clinic start generated code]*/ static PyObject * -signal_getitimer_impl(PyModuleDef *module, int which) -/*[clinic end generated code: output=d1349ab18aadc569 input=f7d21d38f3490627]*/ +signal_getitimer_impl(PyObject *module, int which) +/*[clinic end generated code: output=9e053175d517db40 input=f7d21d38f3490627]*/ { struct itimerval old; @@ -829,8 +829,8 @@ [clinic start generated code]*/ static PyObject * -signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask) -/*[clinic end generated code: output=b043a9f0eeb1e075 input=f3b7d7a61b7b8283]*/ +signal_pthread_sigmask_impl(PyObject *module, int how, PyObject *mask) +/*[clinic end generated code: output=ff640fe092bc9181 input=f3b7d7a61b7b8283]*/ { sigset_t newmask, previous; int err; @@ -867,8 +867,8 @@ [clinic start generated code]*/ static PyObject * -signal_sigpending_impl(PyModuleDef *module) -/*[clinic end generated code: output=bf4ced803e7e51dd input=e0036c016f874e29]*/ +signal_sigpending_impl(PyObject *module) +/*[clinic end generated code: output=53375ffe89325022 input=e0036c016f874e29]*/ { int err; sigset_t mask; @@ -897,8 +897,8 @@ [clinic start generated code]*/ static PyObject * -signal_sigwait(PyModuleDef *module, PyObject *sigset) -/*[clinic end generated code: output=dae53048b0336a5c input=11af2d82d83c2e94]*/ +signal_sigwait(PyObject *module, PyObject *sigset) +/*[clinic end generated code: output=557173647424f6e4 input=11af2d82d83c2e94]*/ { sigset_t set; int err, signum; @@ -986,8 +986,8 @@ [clinic start generated code]*/ static PyObject * -signal_sigwaitinfo(PyModuleDef *module, PyObject *sigset) -/*[clinic end generated code: output=0bb53b07e5e926b5 input=f3779a74a991e171]*/ +signal_sigwaitinfo(PyObject *module, PyObject *sigset) +/*[clinic end generated code: output=c40f27b269cd2309 input=f3779a74a991e171]*/ { sigset_t set; siginfo_t si; @@ -1026,9 +1026,9 @@ [clinic start generated code]*/ static PyObject * -signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, +signal_sigtimedwait_impl(PyObject *module, PyObject *sigset, PyObject *timeout_obj) -/*[clinic end generated code: output=c1960b5cea139929 input=53fd4ea3e3724eb8]*/ +/*[clinic end generated code: output=f7eff31e679f4312 input=53fd4ea3e3724eb8]*/ { struct timespec ts; sigset_t set; @@ -1097,8 +1097,8 @@ [clinic start generated code]*/ static PyObject * -signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum) -/*[clinic end generated code: output=35aed2713c756d7a input=77ed6a3b6f2a8122]*/ +signal_pthread_kill_impl(PyObject *module, long thread_id, int signalnum) +/*[clinic end generated code: output=2a09ce41f1c4228a input=77ed6a3b6f2a8122]*/ { int err; diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c --- a/Modules/spwdmodule.c +++ b/Modules/spwdmodule.c @@ -125,8 +125,8 @@ [clinic start generated code]*/ static PyObject * -spwd_getspnam_impl(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=9f6bbe51a4eb3b21 input=dd89429e6167a00f]*/ +spwd_getspnam_impl(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=701250cf57dc6ebe input=dd89429e6167a00f]*/ { char *name; struct spwd *p; @@ -159,8 +159,8 @@ [clinic start generated code]*/ static PyObject * -spwd_getspall_impl(PyModuleDef *module) -/*[clinic end generated code: output=b12d8ec7bdb29612 input=b2c84b7857d622bd]*/ +spwd_getspall_impl(PyObject *module) +/*[clinic end generated code: output=4fda298d6bf6d057 input=b2c84b7857d622bd]*/ { PyObject *d; struct spwd *p; diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -151,8 +151,8 @@ [clinic start generated code]*/ static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *bytes, int level) -/*[clinic end generated code: output=5d7dd4588788efd3 input=be3abe9934bda4b3]*/ +zlib_compress_impl(PyObject *module, Py_buffer *bytes, int level) +/*[clinic end generated code: output=ae64c2c3076321a0 input=be3abe9934bda4b3]*/ { PyObject *ReturnVal = NULL; Byte *input, *output = NULL; @@ -284,9 +284,9 @@ [clinic start generated code]*/ static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, +zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, unsigned int bufsize) -/*[clinic end generated code: output=444d0987f3429574 input=75123b0d4ff0541d]*/ +/*[clinic end generated code: output=475b36ead58b243d input=75123b0d4ff0541d]*/ { PyObject *result_str = NULL; Byte *input; @@ -419,9 +419,9 @@ [clinic start generated code]*/ static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, +zlib_compressobj_impl(PyObject *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict) -/*[clinic end generated code: output=2949bbb9a5723ccd input=2fa3d026f90ab8d5]*/ +/*[clinic end generated code: output=8b5bed9c8fc3814d input=2fa3d026f90ab8d5]*/ { compobject *self = NULL; int err; @@ -516,8 +516,8 @@ [clinic start generated code]*/ static PyObject * -zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict) -/*[clinic end generated code: output=8ccd583fbd631798 input=d3832b8511fc977b]*/ +zlib_decompressobj_impl(PyObject *module, int wbits, PyObject *zdict) +/*[clinic end generated code: output=3069b99994f36906 input=d3832b8511fc977b]*/ { int err; compobject *self; @@ -1206,8 +1206,8 @@ [clinic start generated code]*/ static PyObject * -zlib_adler32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value) -/*[clinic end generated code: output=51d6d75ee655c78a input=6ff4557872160e88]*/ +zlib_adler32_impl(PyObject *module, Py_buffer *data, unsigned int value) +/*[clinic end generated code: output=422106f5ca8c92c0 input=6ff4557872160e88]*/ { /* Releasing the GIL for very small buffers is inefficient and may lower performance */ @@ -1245,8 +1245,8 @@ [clinic start generated code]*/ static PyObject * -zlib_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value) -/*[clinic end generated code: output=c1e986e74fe7b623 input=26c3ed430fa00b4c]*/ +zlib_crc32_impl(PyObject *module, Py_buffer *data, unsigned int value) +/*[clinic end generated code: output=63499fa20af7ea25 input=26c3ed430fa00b4c]*/ { int signed_val; diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h --- a/PC/clinic/msvcrtmodule.c.h +++ b/PC/clinic/msvcrtmodule.c.h @@ -15,10 +15,10 @@ {"heapmin", (PyCFunction)msvcrt_heapmin, METH_NOARGS, msvcrt_heapmin__doc__}, static PyObject * -msvcrt_heapmin_impl(PyModuleDef *module); +msvcrt_heapmin_impl(PyObject *module); static PyObject * -msvcrt_heapmin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_heapmin(PyObject *module, PyObject *Py_UNUSED(ignored)) { return msvcrt_heapmin_impl(module); } @@ -40,10 +40,10 @@ {"locking", (PyCFunction)msvcrt_locking, METH_VARARGS, msvcrt_locking__doc__}, static PyObject * -msvcrt_locking_impl(PyModuleDef *module, int fd, int mode, long nbytes); +msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes); static PyObject * -msvcrt_locking(PyModuleDef *module, PyObject *args) +msvcrt_locking(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -74,10 +74,10 @@ {"setmode", (PyCFunction)msvcrt_setmode, METH_VARARGS, msvcrt_setmode__doc__}, static long -msvcrt_setmode_impl(PyModuleDef *module, int fd, int flags); +msvcrt_setmode_impl(PyObject *module, int fd, int flags); static PyObject * -msvcrt_setmode(PyModuleDef *module, PyObject *args) +msvcrt_setmode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -110,11 +110,10 @@ {"open_osfhandle", (PyCFunction)msvcrt_open_osfhandle, METH_VARARGS, msvcrt_open_osfhandle__doc__}, static long -msvcrt_open_osfhandle_impl(PyModuleDef *module, Py_intptr_t handle, - int flags); +msvcrt_open_osfhandle_impl(PyObject *module, Py_intptr_t handle, int flags); static PyObject * -msvcrt_open_osfhandle(PyModuleDef *module, PyObject *args) +msvcrt_open_osfhandle(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -145,10 +144,10 @@ {"get_osfhandle", (PyCFunction)msvcrt_get_osfhandle, METH_O, msvcrt_get_osfhandle__doc__}, static Py_intptr_t -msvcrt_get_osfhandle_impl(PyModuleDef *module, int fd); +msvcrt_get_osfhandle_impl(PyObject *module, int fd); static PyObject * -msvcrt_get_osfhandle(PyModuleDef *module, PyObject *arg) +msvcrt_get_osfhandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -175,10 +174,10 @@ {"kbhit", (PyCFunction)msvcrt_kbhit, METH_NOARGS, msvcrt_kbhit__doc__}, static long -msvcrt_kbhit_impl(PyModuleDef *module); +msvcrt_kbhit_impl(PyObject *module); static PyObject * -msvcrt_kbhit(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_kbhit(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; long _return_value; @@ -208,10 +207,10 @@ {"getch", (PyCFunction)msvcrt_getch, METH_NOARGS, msvcrt_getch__doc__}, static int -msvcrt_getch_impl(PyModuleDef *module); +msvcrt_getch_impl(PyObject *module); static PyObject * -msvcrt_getch(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getch(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; char s[1]; @@ -232,10 +231,10 @@ {"getwch", (PyCFunction)msvcrt_getwch, METH_NOARGS, msvcrt_getwch__doc__}, static wchar_t -msvcrt_getwch_impl(PyModuleDef *module); +msvcrt_getwch_impl(PyObject *module); static PyObject * -msvcrt_getwch(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getwch(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; wchar_t _return_value; @@ -256,10 +255,10 @@ {"getche", (PyCFunction)msvcrt_getche, METH_NOARGS, msvcrt_getche__doc__}, static int -msvcrt_getche_impl(PyModuleDef *module); +msvcrt_getche_impl(PyObject *module); static PyObject * -msvcrt_getche(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getche(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; char s[1]; @@ -280,10 +279,10 @@ {"getwche", (PyCFunction)msvcrt_getwche, METH_NOARGS, msvcrt_getwche__doc__}, static wchar_t -msvcrt_getwche_impl(PyModuleDef *module); +msvcrt_getwche_impl(PyObject *module); static PyObject * -msvcrt_getwche(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getwche(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; wchar_t _return_value; @@ -304,10 +303,10 @@ {"putch", (PyCFunction)msvcrt_putch, METH_O, msvcrt_putch__doc__}, static PyObject * -msvcrt_putch_impl(PyModuleDef *module, char char_value); +msvcrt_putch_impl(PyObject *module, char char_value); static PyObject * -msvcrt_putch(PyModuleDef *module, PyObject *arg) +msvcrt_putch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; char char_value; @@ -330,10 +329,10 @@ {"putwch", (PyCFunction)msvcrt_putwch, METH_O, msvcrt_putwch__doc__}, static PyObject * -msvcrt_putwch_impl(PyModuleDef *module, int unicode_char); +msvcrt_putwch_impl(PyObject *module, int unicode_char); static PyObject * -msvcrt_putwch(PyModuleDef *module, PyObject *arg) +msvcrt_putwch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int unicode_char; @@ -360,10 +359,10 @@ {"ungetch", (PyCFunction)msvcrt_ungetch, METH_O, msvcrt_ungetch__doc__}, static PyObject * -msvcrt_ungetch_impl(PyModuleDef *module, char char_value); +msvcrt_ungetch_impl(PyObject *module, char char_value); static PyObject * -msvcrt_ungetch(PyModuleDef *module, PyObject *arg) +msvcrt_ungetch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; char char_value; @@ -386,10 +385,10 @@ {"ungetwch", (PyCFunction)msvcrt_ungetwch, METH_O, msvcrt_ungetwch__doc__}, static PyObject * -msvcrt_ungetwch_impl(PyModuleDef *module, int unicode_char); +msvcrt_ungetwch_impl(PyObject *module, int unicode_char); static PyObject * -msvcrt_ungetwch(PyModuleDef *module, PyObject *arg) +msvcrt_ungetwch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int unicode_char; @@ -416,10 +415,10 @@ {"CrtSetReportFile", (PyCFunction)msvcrt_CrtSetReportFile, METH_VARARGS, msvcrt_CrtSetReportFile__doc__}, static long -msvcrt_CrtSetReportFile_impl(PyModuleDef *module, int type, int file); +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file); static PyObject * -msvcrt_CrtSetReportFile(PyModuleDef *module, PyObject *args) +msvcrt_CrtSetReportFile(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int type; @@ -454,10 +453,10 @@ {"CrtSetReportMode", (PyCFunction)msvcrt_CrtSetReportMode, METH_VARARGS, msvcrt_CrtSetReportMode__doc__}, static long -msvcrt_CrtSetReportMode_impl(PyModuleDef *module, int type, int mode); +msvcrt_CrtSetReportMode_impl(PyObject *module, int type, int mode); static PyObject * -msvcrt_CrtSetReportMode(PyModuleDef *module, PyObject *args) +msvcrt_CrtSetReportMode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int type; @@ -492,10 +491,10 @@ {"set_error_mode", (PyCFunction)msvcrt_set_error_mode, METH_O, msvcrt_set_error_mode__doc__}, static long -msvcrt_set_error_mode_impl(PyModuleDef *module, int mode); +msvcrt_set_error_mode_impl(PyObject *module, int mode); static PyObject * -msvcrt_set_error_mode(PyModuleDef *module, PyObject *arg) +msvcrt_set_error_mode(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int mode; @@ -524,10 +523,10 @@ {"SetErrorMode", (PyCFunction)msvcrt_SetErrorMode, METH_O, msvcrt_SetErrorMode__doc__}, static PyObject * -msvcrt_SetErrorMode_impl(PyModuleDef *module, unsigned int mode); +msvcrt_SetErrorMode_impl(PyObject *module, unsigned int mode); static PyObject * -msvcrt_SetErrorMode(PyModuleDef *module, PyObject *arg) +msvcrt_SetErrorMode(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; unsigned int mode; @@ -551,4 +550,4 @@ #ifndef MSVCRT_SET_ERROR_MODE_METHODDEF #define MSVCRT_SET_ERROR_MODE_METHODDEF #endif /* !defined(MSVCRT_SET_ERROR_MODE_METHODDEF) */ -/*[clinic end generated code: output=16613d3119a1fd44 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=2a794c520d6ae887 input=a9049054013a1b77]*/ diff --git a/PC/clinic/winreg.c.h b/PC/clinic/winreg.c.h --- a/PC/clinic/winreg.c.h +++ b/PC/clinic/winreg.c.h @@ -135,11 +135,11 @@ {"ConnectRegistry", (PyCFunction)winreg_ConnectRegistry, METH_VARARGS, winreg_ConnectRegistry__doc__}, static HKEY -winreg_ConnectRegistry_impl(PyModuleDef *module, Py_UNICODE *computer_name, +winreg_ConnectRegistry_impl(PyObject *module, Py_UNICODE *computer_name, HKEY key); static PyObject * -winreg_ConnectRegistry(PyModuleDef *module, PyObject *args) +winreg_ConnectRegistry(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *computer_name; @@ -181,10 +181,10 @@ {"CreateKey", (PyCFunction)winreg_CreateKey, METH_VARARGS, winreg_CreateKey__doc__}, static HKEY -winreg_CreateKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_CreateKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_CreateKey(PyModuleDef *module, PyObject *args) +winreg_CreateKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -232,11 +232,11 @@ {"CreateKeyEx", (PyCFunction)winreg_CreateKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_CreateKeyEx__doc__}, static HKEY -winreg_CreateKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_CreateKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_CreateKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -280,10 +280,10 @@ {"DeleteKey", (PyCFunction)winreg_DeleteKey, METH_VARARGS, winreg_DeleteKey__doc__}, static PyObject * -winreg_DeleteKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_DeleteKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_DeleteKey(PyModuleDef *module, PyObject *args) +winreg_DeleteKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -327,11 +327,11 @@ {"DeleteKeyEx", (PyCFunction)winreg_DeleteKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_DeleteKeyEx__doc__}, static PyObject * -winreg_DeleteKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, REGSAM access, int reserved); static PyObject * -winreg_DeleteKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_DeleteKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "access", "reserved", NULL}; @@ -364,10 +364,10 @@ {"DeleteValue", (PyCFunction)winreg_DeleteValue, METH_VARARGS, winreg_DeleteValue__doc__}, static PyObject * -winreg_DeleteValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value); +winreg_DeleteValue_impl(PyObject *module, HKEY key, Py_UNICODE *value); static PyObject * -winreg_DeleteValue(PyModuleDef *module, PyObject *args) +winreg_DeleteValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -401,10 +401,10 @@ {"EnumKey", (PyCFunction)winreg_EnumKey, METH_VARARGS, winreg_EnumKey__doc__}, static PyObject * -winreg_EnumKey_impl(PyModuleDef *module, HKEY key, int index); +winreg_EnumKey_impl(PyObject *module, HKEY key, int index); static PyObject * -winreg_EnumKey(PyModuleDef *module, PyObject *args) +winreg_EnumKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -447,10 +447,10 @@ {"EnumValue", (PyCFunction)winreg_EnumValue, METH_VARARGS, winreg_EnumValue__doc__}, static PyObject * -winreg_EnumValue_impl(PyModuleDef *module, HKEY key, int index); +winreg_EnumValue_impl(PyObject *module, HKEY key, int index); static PyObject * -winreg_EnumValue(PyModuleDef *module, PyObject *args) +winreg_EnumValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -475,10 +475,10 @@ {"ExpandEnvironmentStrings", (PyCFunction)winreg_ExpandEnvironmentStrings, METH_O, winreg_ExpandEnvironmentStrings__doc__}, static PyObject * -winreg_ExpandEnvironmentStrings_impl(PyModuleDef *module, Py_UNICODE *string); +winreg_ExpandEnvironmentStrings_impl(PyObject *module, Py_UNICODE *string); static PyObject * -winreg_ExpandEnvironmentStrings(PyModuleDef *module, PyObject *arg) +winreg_ExpandEnvironmentStrings(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_UNICODE *string; @@ -514,10 +514,10 @@ {"FlushKey", (PyCFunction)winreg_FlushKey, METH_O, winreg_FlushKey__doc__}, static PyObject * -winreg_FlushKey_impl(PyModuleDef *module, HKEY key); +winreg_FlushKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_FlushKey(PyModuleDef *module, PyObject *arg) +winreg_FlushKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -562,11 +562,11 @@ {"LoadKey", (PyCFunction)winreg_LoadKey, METH_VARARGS, winreg_LoadKey__doc__}, static PyObject * -winreg_LoadKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_LoadKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, Py_UNICODE *file_name); static PyObject * -winreg_LoadKey(PyModuleDef *module, PyObject *args) +winreg_LoadKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -605,11 +605,11 @@ {"OpenKey", (PyCFunction)winreg_OpenKey, METH_VARARGS|METH_KEYWORDS, winreg_OpenKey__doc__}, static HKEY -winreg_OpenKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_OpenKey(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_OpenKey(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -654,11 +654,11 @@ {"OpenKeyEx", (PyCFunction)winreg_OpenKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_OpenKeyEx__doc__}, static HKEY -winreg_OpenKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_OpenKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_OpenKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -699,10 +699,10 @@ {"QueryInfoKey", (PyCFunction)winreg_QueryInfoKey, METH_O, winreg_QueryInfoKey__doc__}, static PyObject * -winreg_QueryInfoKey_impl(PyModuleDef *module, HKEY key); +winreg_QueryInfoKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_QueryInfoKey(PyModuleDef *module, PyObject *arg) +winreg_QueryInfoKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -739,10 +739,10 @@ {"QueryValue", (PyCFunction)winreg_QueryValue, METH_VARARGS, winreg_QueryValue__doc__}, static PyObject * -winreg_QueryValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_QueryValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_QueryValue(PyModuleDef *module, PyObject *args) +winreg_QueryValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -777,10 +777,10 @@ {"QueryValueEx", (PyCFunction)winreg_QueryValueEx, METH_VARARGS, winreg_QueryValueEx__doc__}, static PyObject * -winreg_QueryValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *name); +winreg_QueryValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *name); static PyObject * -winreg_QueryValueEx(PyModuleDef *module, PyObject *args) +winreg_QueryValueEx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -820,10 +820,10 @@ {"SaveKey", (PyCFunction)winreg_SaveKey, METH_VARARGS, winreg_SaveKey__doc__}, static PyObject * -winreg_SaveKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *file_name); +winreg_SaveKey_impl(PyObject *module, HKEY key, Py_UNICODE *file_name); static PyObject * -winreg_SaveKey(PyModuleDef *module, PyObject *args) +winreg_SaveKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -868,12 +868,12 @@ {"SetValue", (PyCFunction)winreg_SetValue, METH_VARARGS, winreg_SetValue__doc__}, static PyObject * -winreg_SetValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_SetValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, DWORD type, Py_UNICODE *value, Py_ssize_clean_t value_length); static PyObject * -winreg_SetValue(PyModuleDef *module, PyObject *args) +winreg_SetValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -936,11 +936,11 @@ {"SetValueEx", (PyCFunction)winreg_SetValueEx, METH_VARARGS, winreg_SetValueEx__doc__}, static PyObject * -winreg_SetValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value_name, +winreg_SetValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *value_name, PyObject *reserved, DWORD type, PyObject *value); static PyObject * -winreg_SetValueEx(PyModuleDef *module, PyObject *args) +winreg_SetValueEx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -977,10 +977,10 @@ {"DisableReflectionKey", (PyCFunction)winreg_DisableReflectionKey, METH_O, winreg_DisableReflectionKey__doc__}, static PyObject * -winreg_DisableReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_DisableReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_DisableReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_DisableReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1010,10 +1010,10 @@ {"EnableReflectionKey", (PyCFunction)winreg_EnableReflectionKey, METH_O, winreg_EnableReflectionKey__doc__}, static PyObject * -winreg_EnableReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_EnableReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_EnableReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_EnableReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1041,10 +1041,10 @@ {"QueryReflectionKey", (PyCFunction)winreg_QueryReflectionKey, METH_O, winreg_QueryReflectionKey__doc__}, static PyObject * -winreg_QueryReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_QueryReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_QueryReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_QueryReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1056,4 +1056,4 @@ exit: return return_value; } -/*[clinic end generated code: output=5e346dccc296f9f1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7b8940a23f605ddc input=a9049054013a1b77]*/ diff --git a/PC/clinic/winsound.c.h b/PC/clinic/winsound.c.h --- a/PC/clinic/winsound.c.h +++ b/PC/clinic/winsound.c.h @@ -17,10 +17,10 @@ {"PlaySound", (PyCFunction)winsound_PlaySound, METH_VARARGS, winsound_PlaySound__doc__}, static PyObject * -winsound_PlaySound_impl(PyModuleDef *module, Py_UNICODE *sound, int flags); +winsound_PlaySound_impl(PyObject *module, Py_UNICODE *sound, int flags); static PyObject * -winsound_PlaySound(PyModuleDef *module, PyObject *args) +winsound_PlaySound(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *sound; @@ -51,10 +51,10 @@ {"Beep", (PyCFunction)winsound_Beep, METH_VARARGS, winsound_Beep__doc__}, static PyObject * -winsound_Beep_impl(PyModuleDef *module, int frequency, int duration); +winsound_Beep_impl(PyObject *module, int frequency, int duration); static PyObject * -winsound_Beep(PyModuleDef *module, PyObject *args) +winsound_Beep(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int frequency; @@ -81,10 +81,10 @@ {"MessageBeep", (PyCFunction)winsound_MessageBeep, METH_VARARGS, winsound_MessageBeep__doc__}, static PyObject * -winsound_MessageBeep_impl(PyModuleDef *module, int x); +winsound_MessageBeep_impl(PyObject *module, int x); static PyObject * -winsound_MessageBeep(PyModuleDef *module, PyObject *args) +winsound_MessageBeep(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int x = MB_OK; @@ -97,4 +97,4 @@ exit: return return_value; } -/*[clinic end generated code: output=c5b018ac9dc1f500 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c0b290daf2330dc9 input=a9049054013a1b77]*/ diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -78,8 +78,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_heapmin_impl(PyModuleDef *module) -/*[clinic end generated code: output=464f866feb57c436 input=82e1771d21bde2d8]*/ +msvcrt_heapmin_impl(PyObject *module) +/*[clinic end generated code: output=1ba00f344782dc19 input=82e1771d21bde2d8]*/ { if (_heapmin() != 0) return PyErr_SetFromErrno(PyExc_IOError); @@ -105,8 +105,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_locking_impl(PyModuleDef *module, int fd, int mode, long nbytes) -/*[clinic end generated code: output=dff41e5e76d544de input=d9f13f0f6a713ba7]*/ +msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes) +/*[clinic end generated code: output=a4a90deca9785a03 input=d9f13f0f6a713ba7]*/ { int err; @@ -135,8 +135,8 @@ [clinic start generated code]*/ static long -msvcrt_setmode_impl(PyModuleDef *module, int fd, int flags) -/*[clinic end generated code: output=8c84e5b37c586d0d input=76e7c01f6b137f75]*/ +msvcrt_setmode_impl(PyObject *module, int fd, int flags) +/*[clinic end generated code: output=24a9be5ea07ccb9b input=76e7c01f6b137f75]*/ { flags = _setmode(fd, flags); if (flags == -1) @@ -160,9 +160,8 @@ [clinic start generated code]*/ static long -msvcrt_open_osfhandle_impl(PyModuleDef *module, Py_intptr_t handle, - int flags) -/*[clinic end generated code: output=86bce32582c49c06 input=4d8516ed32db8f65]*/ +msvcrt_open_osfhandle_impl(PyObject *module, Py_intptr_t handle, int flags) +/*[clinic end generated code: output=bf65e422243a39f9 input=4d8516ed32db8f65]*/ { int fd; @@ -185,8 +184,8 @@ [clinic start generated code]*/ static Py_intptr_t -msvcrt_get_osfhandle_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=376bff52586b55a6 input=c7d18d02c8017ec1]*/ +msvcrt_get_osfhandle_impl(PyObject *module, int fd) +/*[clinic end generated code: output=eac47643338c0baa input=c7d18d02c8017ec1]*/ { Py_intptr_t handle = -1; @@ -212,8 +211,8 @@ [clinic start generated code]*/ static long -msvcrt_kbhit_impl(PyModuleDef *module) -/*[clinic end generated code: output=2b7293fcbe5cb24e input=e70d678a5c2f6acc]*/ +msvcrt_kbhit_impl(PyObject *module) +/*[clinic end generated code: output=940dfce6587c1890 input=e70d678a5c2f6acc]*/ { return _kbhit(); } @@ -231,8 +230,8 @@ [clinic start generated code]*/ static int -msvcrt_getch_impl(PyModuleDef *module) -/*[clinic end generated code: output=199e3d89f49c166a input=37a40cf0ed0d1153]*/ +msvcrt_getch_impl(PyObject *module) +/*[clinic end generated code: output=a4e51f0565064a7d input=37a40cf0ed0d1153]*/ { int ch; @@ -249,8 +248,8 @@ [clinic start generated code]*/ static wchar_t -msvcrt_getwch_impl(PyModuleDef *module) -/*[clinic end generated code: output=9d3762861328b1fe input=27b3dec8ad823d7c]*/ +msvcrt_getwch_impl(PyObject *module) +/*[clinic end generated code: output=be9937494e22f007 input=27b3dec8ad823d7c]*/ { wchar_t ch; @@ -267,8 +266,8 @@ [clinic start generated code]*/ static int -msvcrt_getche_impl(PyModuleDef *module) -/*[clinic end generated code: output=8aa369be6550068e input=43311ade9ed4a9c0]*/ +msvcrt_getche_impl(PyObject *module) +/*[clinic end generated code: output=d8f7db4fd2990401 input=43311ade9ed4a9c0]*/ { int ch; @@ -285,8 +284,8 @@ [clinic start generated code]*/ static wchar_t -msvcrt_getwche_impl(PyModuleDef *module) -/*[clinic end generated code: output=3693cf78e3ea0cf6 input=49337d59d1a591f8]*/ +msvcrt_getwche_impl(PyObject *module) +/*[clinic end generated code: output=d0dae5ba3829d596 input=49337d59d1a591f8]*/ { wchar_t ch; @@ -306,8 +305,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_putch_impl(PyModuleDef *module, char char_value) -/*[clinic end generated code: output=c05548b11554f36f input=ec078dd10cb054d6]*/ +msvcrt_putch_impl(PyObject *module, char char_value) +/*[clinic end generated code: output=92ec9b81012d8f60 input=ec078dd10cb054d6]*/ { _putch(char_value); Py_RETURN_NONE; @@ -323,8 +322,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_putwch_impl(PyModuleDef *module, int unicode_char) -/*[clinic end generated code: output=c216a73694ca73dd input=996ccd0bbcbac4c3]*/ +msvcrt_putwch_impl(PyObject *module, int unicode_char) +/*[clinic end generated code: output=a3bd1a8951d28eee input=996ccd0bbcbac4c3]*/ { _putwch(unicode_char); Py_RETURN_NONE; @@ -345,8 +344,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_ungetch_impl(PyModuleDef *module, char char_value) -/*[clinic end generated code: output=19a4cd3249709ec9 input=22f07ee9001bbf0f]*/ +msvcrt_ungetch_impl(PyObject *module, char char_value) +/*[clinic end generated code: output=c6942a0efa119000 input=22f07ee9001bbf0f]*/ { if (_ungetch(char_value) == EOF) return PyErr_SetFromErrno(PyExc_IOError); @@ -363,8 +362,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_ungetwch_impl(PyModuleDef *module, int unicode_char) -/*[clinic end generated code: output=1ee7674710322bd1 input=83ec0492be04d564]*/ +msvcrt_ungetwch_impl(PyObject *module, int unicode_char) +/*[clinic end generated code: output=e63af05438b8ba3d input=83ec0492be04d564]*/ { if (_ungetwch(unicode_char) == WEOF) return PyErr_SetFromErrno(PyExc_IOError); @@ -385,8 +384,8 @@ [clinic start generated code]*/ static long -msvcrt_CrtSetReportFile_impl(PyModuleDef *module, int type, int file) -/*[clinic end generated code: output=8c3644fb2edfa808 input=bb8f721a604fcc45]*/ +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file) +/*[clinic end generated code: output=df291c7fe032eb68 input=bb8f721a604fcc45]*/ { return (long)_CrtSetReportFile(type, (_HFILE)file); } @@ -404,8 +403,8 @@ [clinic start generated code]*/ static long -msvcrt_CrtSetReportMode_impl(PyModuleDef *module, int type, int mode) -/*[clinic end generated code: output=b407fbf8716a52b9 input=9319d29b4319426b]*/ +msvcrt_CrtSetReportMode_impl(PyObject *module, int type, int mode) +/*[clinic end generated code: output=b2863761523de317 input=9319d29b4319426b]*/ { int res; @@ -427,8 +426,8 @@ [clinic start generated code]*/ static long -msvcrt_set_error_mode_impl(PyModuleDef *module, int mode) -/*[clinic end generated code: output=62148adffa90867d input=046fca59c0f20872]*/ +msvcrt_set_error_mode_impl(PyObject *module, int mode) +/*[clinic end generated code: output=ac4a09040d8ac4e3 input=046fca59c0f20872]*/ { return _set_error_mode(mode); } @@ -444,8 +443,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_SetErrorMode_impl(PyModuleDef *module, unsigned int mode) -/*[clinic end generated code: output=544c60b085be79c6 input=d8b167258d32d907]*/ +msvcrt_SetErrorMode_impl(PyObject *module, unsigned int mode) +/*[clinic end generated code: output=01d529293f00da8f input=d8b167258d32d907]*/ { unsigned int res; diff --git a/PC/winreg.c b/PC/winreg.c --- a/PC/winreg.c +++ b/PC/winreg.c @@ -774,8 +774,8 @@ [clinic start generated code]*/ static PyObject * -winreg_CloseKey(PyModuleDef *module, PyObject *hkey) -/*[clinic end generated code: output=d96f73439403a064 input=5b1aac65ba5127ad]*/ +winreg_CloseKey(PyObject *module, PyObject *hkey) +/*[clinic end generated code: output=a4fa537019a80d15 input=5b1aac65ba5127ad]*/ { if (!PyHKEY_Close(hkey)) return NULL; @@ -799,9 +799,9 @@ [clinic start generated code]*/ static HKEY -winreg_ConnectRegistry_impl(PyModuleDef *module, Py_UNICODE *computer_name, +winreg_ConnectRegistry_impl(PyObject *module, Py_UNICODE *computer_name, HKEY key) -/*[clinic end generated code: output=5c52f6f7ba6e7b46 input=5f98a891a347e68e]*/ +/*[clinic end generated code: output=5ab79d02aa3167b4 input=5f98a891a347e68e]*/ { HKEY retKey; long rc; @@ -836,8 +836,8 @@ [clinic start generated code]*/ static HKEY -winreg_CreateKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=cd6843f30a73fc0e input=3cdd1622488acea2]*/ +winreg_CreateKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=9c81d4095527c927 input=3cdd1622488acea2]*/ { HKEY retKey; long rc; @@ -875,9 +875,9 @@ [clinic start generated code]*/ static HKEY -winreg_CreateKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=db835d5be84e72b2 input=42c2b03f98406b66]*/ +/*[clinic end generated code: output=b9fce6dc5c4e39b1 input=42c2b03f98406b66]*/ { HKEY retKey; long rc; @@ -910,8 +910,8 @@ [clinic start generated code]*/ static PyObject * -winreg_DeleteKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=875c8917dacbc99d input=b31d225b935e4211]*/ +winreg_DeleteKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=7734b1e431991ae4 input=b31d225b935e4211]*/ { long rc; rc = RegDeleteKeyW(key, sub_key ); @@ -945,9 +945,9 @@ [clinic start generated code]*/ static PyObject * -winreg_DeleteKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, REGSAM access, int reserved) -/*[clinic end generated code: output=0362a0ac6502379f input=711d9d89e7ecbed7]*/ +/*[clinic end generated code: output=01378d86ad3eb936 input=711d9d89e7ecbed7]*/ { HMODULE hMod; typedef LONG (WINAPI *RDKEFunc)(HKEY, const wchar_t*, REGSAM, int); @@ -987,8 +987,8 @@ [clinic start generated code]*/ static PyObject * -winreg_DeleteValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value) -/*[clinic end generated code: output=308550b8cdcfd8e1 input=a78d3407a4197b21]*/ +winreg_DeleteValue_impl(PyObject *module, HKEY key, Py_UNICODE *value) +/*[clinic end generated code: output=67e7e9a514f84951 input=a78d3407a4197b21]*/ { long rc; Py_BEGIN_ALLOW_THREADS @@ -1017,8 +1017,8 @@ [clinic start generated code]*/ static PyObject * -winreg_EnumKey_impl(PyModuleDef *module, HKEY key, int index) -/*[clinic end generated code: output=58074ffabbc67896 input=fad9a7c00ab0e04b]*/ +winreg_EnumKey_impl(PyObject *module, HKEY key, int index) +/*[clinic end generated code: output=25a6ec52cd147bc4 input=fad9a7c00ab0e04b]*/ { long rc; PyObject *retStr; @@ -1068,8 +1068,8 @@ [clinic start generated code]*/ static PyObject * -winreg_EnumValue_impl(PyModuleDef *module, HKEY key, int index) -/*[clinic end generated code: output=4570367ebaf0e979 input=4414f47a6fb238b5]*/ +winreg_EnumValue_impl(PyObject *module, HKEY key, int index) +/*[clinic end generated code: output=d363b5a06f8789ac input=4414f47a6fb238b5]*/ { long rc; wchar_t *retValueBuf; @@ -1155,8 +1155,8 @@ [clinic start generated code]*/ static PyObject * -winreg_ExpandEnvironmentStrings_impl(PyModuleDef *module, Py_UNICODE *string) -/*[clinic end generated code: output=4cb6914065a8663c input=b2a9714d2b751aa6]*/ +winreg_ExpandEnvironmentStrings_impl(PyObject *module, Py_UNICODE *string) +/*[clinic end generated code: output=cba46ac293a8af1a input=b2a9714d2b751aa6]*/ { wchar_t *retValue = NULL; DWORD retValueSize; @@ -1205,8 +1205,8 @@ [clinic start generated code]*/ static PyObject * -winreg_FlushKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=b9a7a6e405466420 input=f57457c12297d82f]*/ +winreg_FlushKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=e6fc230d4c5dc049 input=f57457c12297d82f]*/ { long rc; Py_BEGIN_ALLOW_THREADS @@ -1248,9 +1248,9 @@ [clinic start generated code]*/ static PyObject * -winreg_LoadKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_LoadKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, Py_UNICODE *file_name) -/*[clinic end generated code: output=b8b700e39c695b90 input=e3b5b45ade311582]*/ +/*[clinic end generated code: output=87344005c5905cde input=e3b5b45ade311582]*/ { long rc; @@ -1282,9 +1282,9 @@ [clinic start generated code]*/ static HKEY -winreg_OpenKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=79818ea356490a55 input=098505ac36a9ae28]*/ +/*[clinic end generated code: output=a905f1b947f3ce85 input=098505ac36a9ae28]*/ { HKEY retKey; long rc; @@ -1309,9 +1309,9 @@ [clinic start generated code]*/ static HKEY -winreg_OpenKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=2dd9f29e84ea2dbc input=c6c4972af8622959]*/ +/*[clinic end generated code: output=226042593b37e940 input=c6c4972af8622959]*/ { return winreg_OpenKey_impl(module, key, sub_key, reserved, access); } @@ -1333,8 +1333,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryInfoKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=ae885222fe966a34 input=c3593802390cde1f]*/ +winreg_QueryInfoKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=dc657b8356a4f438 input=c3593802390cde1f]*/ { long rc; DWORD nSubKeys, nValues; @@ -1379,8 +1379,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=f91cb6f623c3b65a input=41cafbbf423b21d6]*/ +winreg_QueryValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=2bb8d1e02c10d0b6 input=41cafbbf423b21d6]*/ { long rc; PyObject *retStr; @@ -1446,8 +1446,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *name) -/*[clinic end generated code: output=a4b07f7807194f23 input=cf366cada4836891]*/ +winreg_QueryValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *name) +/*[clinic end generated code: output=5b4fa3e33d6d3e8f input=cf366cada4836891]*/ { long rc; BYTE *retBuf, *tmp; @@ -1519,8 +1519,8 @@ [clinic start generated code]*/ static PyObject * -winreg_SaveKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *file_name) -/*[clinic end generated code: output=33109b96bfabef8f input=da735241f91ac7a2]*/ +winreg_SaveKey_impl(PyObject *module, HKEY key, Py_UNICODE *file_name) +/*[clinic end generated code: output=1dda1502bd4c30d8 input=da735241f91ac7a2]*/ { LPSECURITY_ATTRIBUTES pSA = NULL; @@ -1565,10 +1565,10 @@ [clinic start generated code]*/ static PyObject * -winreg_SetValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_SetValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, DWORD type, Py_UNICODE *value, Py_ssize_clean_t value_length) -/*[clinic end generated code: output=3c9c7c2769e8f953 input=2cd2adab79339c53]*/ +/*[clinic end generated code: output=1e31931174820631 input=2cd2adab79339c53]*/ { long rc; @@ -1629,9 +1629,9 @@ [clinic start generated code]*/ static PyObject * -winreg_SetValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value_name, +winreg_SetValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *value_name, PyObject *reserved, DWORD type, PyObject *value) -/*[clinic end generated code: output=ea092a935c361582 input=f1b16cbcc3ed4101]*/ +/*[clinic end generated code: output=c88c8426b6c00ec7 input=f1b16cbcc3ed4101]*/ { BYTE *data; DWORD len; @@ -1672,8 +1672,8 @@ [clinic start generated code]*/ static PyObject * -winreg_DisableReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=50fe6e2604324cdd input=a6c9e5ca5410193c]*/ +winreg_DisableReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=830cce504cc764b4 input=a6c9e5ca5410193c]*/ { HMODULE hMod; typedef LONG (WINAPI *RDRKFunc)(HKEY); @@ -1715,8 +1715,8 @@ [clinic start generated code]*/ static PyObject * -winreg_EnableReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=e3f23edb414f24a4 input=7748abbacd1e166a]*/ +winreg_EnableReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=86fa1385fdd9ce57 input=7748abbacd1e166a]*/ { HMODULE hMod; typedef LONG (WINAPI *RERKFunc)(HKEY); @@ -1756,8 +1756,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=2a49c564ca162e50 input=9f325eacb5a65d88]*/ +winreg_QueryReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=4e774af288c3ebb9 input=9f325eacb5a65d88]*/ { HMODULE hMod; typedef LONG (WINAPI *RQRKFunc)(HKEY, BOOL *); diff --git a/PC/winsound.c b/PC/winsound.c --- a/PC/winsound.c +++ b/PC/winsound.c @@ -74,8 +74,8 @@ [clinic start generated code]*/ static PyObject * -winsound_PlaySound_impl(PyModuleDef *module, Py_UNICODE *sound, int flags) -/*[clinic end generated code: output=614273784bf59e5c input=3411b1b7c1f36d93]*/ +winsound_PlaySound_impl(PyObject *module, Py_UNICODE *sound, int flags) +/*[clinic end generated code: output=ec24b3a2b4368378 input=3411b1b7c1f36d93]*/ { int ok; @@ -111,8 +111,8 @@ [clinic start generated code]*/ static PyObject * -winsound_Beep_impl(PyModuleDef *module, int frequency, int duration) -/*[clinic end generated code: output=c75f282035a872bd input=628a99d2ddf73798]*/ +winsound_Beep_impl(PyObject *module, int frequency, int duration) +/*[clinic end generated code: output=f32382e52ee9b2fb input=628a99d2ddf73798]*/ { BOOL ok; @@ -145,8 +145,8 @@ [clinic start generated code]*/ static PyObject * -winsound_MessageBeep_impl(PyModuleDef *module, int x) -/*[clinic end generated code: output=92aa6a822bdc66ad input=a776c8a85c9853f6]*/ +winsound_MessageBeep_impl(PyObject *module, int x) +/*[clinic end generated code: output=1ad89e4d8d30a957 input=a776c8a85c9853f6]*/ { MessageBeep(x); Py_RETURN_NONE; diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -242,8 +242,8 @@ [clinic start generated code]*/ static PyObject * -builtin_abs(PyModuleDef *module, PyObject *x) -/*[clinic end generated code: output=6833047c493ecea2 input=bed4ca14e29c20d1]*/ +builtin_abs(PyObject *module, PyObject *x) +/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/ { return PyNumber_Absolute(x); } @@ -260,8 +260,8 @@ [clinic start generated code]*/ static PyObject * -builtin_all(PyModuleDef *module, PyObject *iterable) -/*[clinic end generated code: output=089e6d1b7bde27b1 input=1a7c5d1bc3438a21]*/ +builtin_all(PyObject *module, PyObject *iterable) +/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); @@ -309,8 +309,8 @@ [clinic start generated code]*/ static PyObject * -builtin_any(PyModuleDef *module, PyObject *iterable) -/*[clinic end generated code: output=1be994b2c2307492 input=41d7451c23384f24]*/ +builtin_any(PyObject *module, PyObject *iterable) +/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); @@ -361,8 +361,8 @@ [clinic start generated code]*/ static PyObject * -builtin_ascii(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=d4e862c48af2a933 input=4c62732e1b3a3cc9]*/ +builtin_ascii(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/ { return PyObject_ASCII(obj); } @@ -381,8 +381,8 @@ [clinic start generated code]*/ static PyObject * -builtin_bin(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=25ee26c6cf3bbb54 input=53f8a0264bacaf90]*/ +builtin_bin(PyObject *module, PyObject *number) +/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/ { return PyNumber_ToBase(number, 2); } @@ -401,8 +401,8 @@ [clinic start generated code]*/ static PyObject * -builtin_callable(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=f4df2ce92364b656 input=1423bab99cc41f58]*/ +builtin_callable(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/ { return PyBool_FromLong((long)PyCallable_Check(obj)); } @@ -574,9 +574,8 @@ [clinic start generated code]*/ static PyObject * -builtin_format_impl(PyModuleDef *module, PyObject *value, - PyObject *format_spec) -/*[clinic end generated code: output=4341fd78a5f01764 input=6325e751a1b29b86]*/ +builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec) +/*[clinic end generated code: output=2f40bdfa4954b077 input=6325e751a1b29b86]*/ { return PyObject_Format(value, format_spec); } @@ -591,8 +590,8 @@ [clinic start generated code]*/ static PyObject * -builtin_chr_impl(PyModuleDef *module, int i) -/*[clinic end generated code: output=67fe4d87e690f373 input=3f604ef45a70750d]*/ +builtin_chr_impl(PyObject *module, int i) +/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/ { return PyUnicode_FromOrdinal(i); } @@ -672,10 +671,10 @@ [clinic start generated code]*/ static PyObject * -builtin_compile_impl(PyModuleDef *module, PyObject *source, - PyObject *filename, const char *mode, int flags, - int dont_inherit, int optimize) -/*[clinic end generated code: output=31881762c1bb90c4 input=9d53e8cfb3c86414]*/ +builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, + const char *mode, int flags, int dont_inherit, + int optimize) +/*[clinic end generated code: output=1fa176e33452bb63 input=9d53e8cfb3c86414]*/ { PyObject *source_copy; const char *str; @@ -800,8 +799,8 @@ [clinic start generated code]*/ static PyObject * -builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y) -/*[clinic end generated code: output=9ad0076120ebf9ac input=175ad9c84ff41a85]*/ +builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y) +/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/ { return PyNumber_Divmod(x, y); } @@ -825,9 +824,9 @@ [clinic start generated code]*/ static PyObject * -builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals) -/*[clinic end generated code: output=7284501fb7b4d666 input=11ee718a8640e527]*/ +/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/ { PyObject *result, *source_copy; const char *str; @@ -908,9 +907,9 @@ [clinic start generated code]*/ static PyObject * -builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals) -/*[clinic end generated code: output=83d574ef9d5d0b46 input=01ca3e1c01692829]*/ +/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/ { PyObject *v; @@ -1024,8 +1023,8 @@ [clinic start generated code]*/ static PyObject * -builtin_globals_impl(PyModuleDef *module) -/*[clinic end generated code: output=4958645e96dd8138 input=9327576f92bb48ba]*/ +builtin_globals_impl(PyObject *module) +/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/ { PyObject *d; @@ -1048,8 +1047,8 @@ [clinic start generated code]*/ static PyObject * -builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) -/*[clinic end generated code: output=81154fdd63634696 input=0faec9787d979542]*/ +builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/ { PyObject *v; @@ -1324,9 +1323,9 @@ [clinic start generated code]*/ static PyObject * -builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, +builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name, PyObject *value) -/*[clinic end generated code: output=d881c655c0f7e34f input=bd2b7ca6875a1899]*/ +/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/ { if (PyObject_SetAttr(obj, name, value) != 0) return NULL; @@ -1348,8 +1347,8 @@ [clinic start generated code]*/ static PyObject * -builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) -/*[clinic end generated code: output=ef653e698a0b4187 input=db16685d6b4b9410]*/ +builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/ { if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0) return NULL; @@ -1371,8 +1370,8 @@ [clinic start generated code]*/ static PyObject * -builtin_hash(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=1f32ff154c1f751a input=58c48be822bf9c54]*/ +builtin_hash(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/ { Py_hash_t x; @@ -1396,8 +1395,8 @@ [clinic start generated code]*/ static PyObject * -builtin_hex(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=618489ce3cbc5858 input=e645aff5fc7d540e]*/ +builtin_hex(PyObject *module, PyObject *number) +/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/ { return PyNumber_ToBase(number, 16); } @@ -1440,8 +1439,8 @@ [clinic start generated code]*/ static PyObject * -builtin_len(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=8e5837b6f81d915b input=bc55598da9e9c9b5]*/ +builtin_len(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/ { Py_ssize_t res; @@ -1463,8 +1462,8 @@ [clinic start generated code]*/ static PyObject * -builtin_locals_impl(PyModuleDef *module) -/*[clinic end generated code: output=8b5a41f12e19d13a input=7874018d478d5c4b]*/ +builtin_locals_impl(PyObject *module) +/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/ { PyObject *d; @@ -1622,8 +1621,8 @@ [clinic start generated code]*/ static PyObject * -builtin_oct(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=18f701bc6d8f804a input=ad6b274af4016c72]*/ +builtin_oct(PyObject *module, PyObject *number) +/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/ { return PyNumber_ToBase(number, 8); } @@ -1639,8 +1638,8 @@ [clinic start generated code]*/ static PyObject * -builtin_ord(PyModuleDef *module, PyObject *c) -/*[clinic end generated code: output=04fd27272d9462f6 input=3064e5d6203ad012]*/ +builtin_ord(PyObject *module, PyObject *c) +/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/ { long ord; Py_ssize_t size; @@ -1699,8 +1698,8 @@ [clinic start generated code]*/ static PyObject * -builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z) -/*[clinic end generated code: output=1fba268adba9b45f input=653d57d38d41fc07]*/ +builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z) +/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/ { return PyNumber_Power(x, y, z); } @@ -1818,8 +1817,8 @@ [clinic start generated code]*/ static PyObject * -builtin_input_impl(PyModuleDef *module, PyObject *prompt) -/*[clinic end generated code: output=b77731f59e1515c4 input=5e8bb70c2908fe3c]*/ +builtin_input_impl(PyObject *module, PyObject *prompt) +/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/ { PyObject *fin = _PySys_GetObjectId(&PyId_stdin); PyObject *fout = _PySys_GetObjectId(&PyId_stdout); @@ -2005,8 +2004,8 @@ [clinic start generated code]*/ static PyObject * -builtin_repr(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=dc41784fa4341834 input=1c9e6d66d3e3be04]*/ +builtin_repr(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/ { return PyObject_Repr(obj); } @@ -2175,8 +2174,8 @@ [clinic start generated code]*/ static PyObject * -builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start) -/*[clinic end generated code: output=33655b248b21d581 input=3b5b7a9d7611c73a]*/ +builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start) +/*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/ { PyObject *result = start; PyObject *temp, *item, *iter; @@ -2352,9 +2351,9 @@ [clinic start generated code]*/ static PyObject * -builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, +builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple) -/*[clinic end generated code: output=f960b7c12dbbeda0 input=ffa743db1daf7549]*/ +/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/ { int retval; @@ -2380,9 +2379,9 @@ [clinic start generated code]*/ static PyObject * -builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, +builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple) -/*[clinic end generated code: output=8b012a151940bbf2 input=af5f35e9ceaddaf6]*/ +/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/ { int retval; diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h --- a/Python/clinic/bltinmodule.c.h +++ b/Python/clinic/bltinmodule.c.h @@ -83,11 +83,10 @@ {"format", (PyCFunction)builtin_format, METH_VARARGS, builtin_format__doc__}, static PyObject * -builtin_format_impl(PyModuleDef *module, PyObject *value, - PyObject *format_spec); +builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec); static PyObject * -builtin_format(PyModuleDef *module, PyObject *args) +builtin_format(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *value; @@ -112,10 +111,10 @@ {"chr", (PyCFunction)builtin_chr, METH_O, builtin_chr__doc__}, static PyObject * -builtin_chr_impl(PyModuleDef *module, int i); +builtin_chr_impl(PyObject *module, int i); static PyObject * -builtin_chr(PyModuleDef *module, PyObject *arg) +builtin_chr(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int i; @@ -150,12 +149,12 @@ {"compile", (PyCFunction)builtin_compile, METH_VARARGS|METH_KEYWORDS, builtin_compile__doc__}, static PyObject * -builtin_compile_impl(PyModuleDef *module, PyObject *source, - PyObject *filename, const char *mode, int flags, - int dont_inherit, int optimize); +builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, + const char *mode, int flags, int dont_inherit, + int optimize); static PyObject * -builtin_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +builtin_compile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"source", "filename", "mode", "flags", "dont_inherit", "optimize", NULL}; @@ -185,10 +184,10 @@ {"divmod", (PyCFunction)builtin_divmod, METH_VARARGS, builtin_divmod__doc__}, static PyObject * -builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y); +builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y); static PyObject * -builtin_divmod(PyModuleDef *module, PyObject *args) +builtin_divmod(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *x; @@ -220,11 +219,11 @@ {"eval", (PyCFunction)builtin_eval, METH_VARARGS, builtin_eval__doc__}, static PyObject * -builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_eval(PyModuleDef *module, PyObject *args) +builtin_eval(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *source; @@ -257,11 +256,11 @@ {"exec", (PyCFunction)builtin_exec, METH_VARARGS, builtin_exec__doc__}, static PyObject * -builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_exec(PyModuleDef *module, PyObject *args) +builtin_exec(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *source; @@ -291,10 +290,10 @@ {"globals", (PyCFunction)builtin_globals, METH_NOARGS, builtin_globals__doc__}, static PyObject * -builtin_globals_impl(PyModuleDef *module); +builtin_globals_impl(PyObject *module); static PyObject * -builtin_globals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +builtin_globals(PyObject *module, PyObject *Py_UNUSED(ignored)) { return builtin_globals_impl(module); } @@ -311,10 +310,10 @@ {"hasattr", (PyCFunction)builtin_hasattr, METH_VARARGS, builtin_hasattr__doc__}, static PyObject * -builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); +builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_hasattr(PyModuleDef *module, PyObject *args) +builtin_hasattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -354,11 +353,11 @@ {"setattr", (PyCFunction)builtin_setattr, METH_VARARGS, builtin_setattr__doc__}, static PyObject * -builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, +builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name, PyObject *value); static PyObject * -builtin_setattr(PyModuleDef *module, PyObject *args) +builtin_setattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -387,10 +386,10 @@ {"delattr", (PyCFunction)builtin_delattr, METH_VARARGS, builtin_delattr__doc__}, static PyObject * -builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); +builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_delattr(PyModuleDef *module, PyObject *args) +builtin_delattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -453,10 +452,10 @@ {"locals", (PyCFunction)builtin_locals, METH_NOARGS, builtin_locals__doc__}, static PyObject * -builtin_locals_impl(PyModuleDef *module); +builtin_locals_impl(PyObject *module); static PyObject * -builtin_locals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +builtin_locals(PyObject *module, PyObject *Py_UNUSED(ignored)) { return builtin_locals_impl(module); } @@ -495,10 +494,10 @@ {"pow", (PyCFunction)builtin_pow, METH_VARARGS, builtin_pow__doc__}, static PyObject * -builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z); +builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z); static PyObject * -builtin_pow(PyModuleDef *module, PyObject *args) +builtin_pow(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *x; @@ -531,10 +530,10 @@ {"input", (PyCFunction)builtin_input, METH_VARARGS, builtin_input__doc__}, static PyObject * -builtin_input_impl(PyModuleDef *module, PyObject *prompt); +builtin_input_impl(PyObject *module, PyObject *prompt); static PyObject * -builtin_input(PyModuleDef *module, PyObject *args) +builtin_input(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *prompt = NULL; @@ -574,10 +573,10 @@ {"sum", (PyCFunction)builtin_sum, METH_VARARGS, builtin_sum__doc__}, static PyObject * -builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start); +builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start); static PyObject * -builtin_sum(PyModuleDef *module, PyObject *args) +builtin_sum(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *iterable; @@ -607,11 +606,11 @@ {"isinstance", (PyCFunction)builtin_isinstance, METH_VARARGS, builtin_isinstance__doc__}, static PyObject * -builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, +builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple); static PyObject * -builtin_isinstance(PyModuleDef *module, PyObject *args) +builtin_isinstance(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -641,11 +640,11 @@ {"issubclass", (PyCFunction)builtin_issubclass, METH_VARARGS, builtin_issubclass__doc__}, static PyObject * -builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, +builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple); static PyObject * -builtin_issubclass(PyModuleDef *module, PyObject *args) +builtin_issubclass(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *cls; @@ -660,4 +659,4 @@ exit: return return_value; } -/*[clinic end generated code: output=4bef16b6aa432879 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9031270b64c794b8 input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h --- a/Python/clinic/import.c.h +++ b/Python/clinic/import.c.h @@ -14,10 +14,10 @@ {"lock_held", (PyCFunction)_imp_lock_held, METH_NOARGS, _imp_lock_held__doc__}, static PyObject * -_imp_lock_held_impl(PyModuleDef *module); +_imp_lock_held_impl(PyObject *module); static PyObject * -_imp_lock_held(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_lock_held(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_lock_held_impl(module); } @@ -35,10 +35,10 @@ {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__}, static PyObject * -_imp_acquire_lock_impl(PyModuleDef *module); +_imp_acquire_lock_impl(PyObject *module); static PyObject * -_imp_acquire_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_acquire_lock(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_acquire_lock_impl(module); } @@ -55,10 +55,10 @@ {"release_lock", (PyCFunction)_imp_release_lock, METH_NOARGS, _imp_release_lock__doc__}, static PyObject * -_imp_release_lock_impl(PyModuleDef *module); +_imp_release_lock_impl(PyObject *module); static PyObject * -_imp_release_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_release_lock(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_release_lock_impl(module); } @@ -78,11 +78,11 @@ {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_VARARGS, _imp__fix_co_filename__doc__}, static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, +_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, PyObject *path); static PyObject * -_imp__fix_co_filename(PyModuleDef *module, PyObject *args) +_imp__fix_co_filename(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyCodeObject *code; @@ -116,10 +116,10 @@ {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__}, static PyObject * -_imp_extension_suffixes_impl(PyModuleDef *module); +_imp_extension_suffixes_impl(PyObject *module); static PyObject * -_imp_extension_suffixes(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_extension_suffixes(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_extension_suffixes_impl(module); } @@ -134,10 +134,10 @@ {"init_frozen", (PyCFunction)_imp_init_frozen, METH_O, _imp_init_frozen__doc__}, static PyObject * -_imp_init_frozen_impl(PyModuleDef *module, PyObject *name); +_imp_init_frozen_impl(PyObject *module, PyObject *name); static PyObject * -_imp_init_frozen(PyModuleDef *module, PyObject *arg) +_imp_init_frozen(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -160,10 +160,10 @@ {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_O, _imp_get_frozen_object__doc__}, static PyObject * -_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name); +_imp_get_frozen_object_impl(PyObject *module, PyObject *name); static PyObject * -_imp_get_frozen_object(PyModuleDef *module, PyObject *arg) +_imp_get_frozen_object(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -186,10 +186,10 @@ {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__}, static PyObject * -_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name); +_imp_is_frozen_package_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_frozen_package(PyModuleDef *module, PyObject *arg) +_imp_is_frozen_package(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -212,10 +212,10 @@ {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__}, static PyObject * -_imp_is_builtin_impl(PyModuleDef *module, PyObject *name); +_imp_is_builtin_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_builtin(PyModuleDef *module, PyObject *arg) +_imp_is_builtin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -238,10 +238,10 @@ {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__}, static PyObject * -_imp_is_frozen_impl(PyModuleDef *module, PyObject *name); +_imp_is_frozen_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_frozen(PyModuleDef *module, PyObject *arg) +_imp_is_frozen(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -266,10 +266,10 @@ {"create_dynamic", (PyCFunction)_imp_create_dynamic, METH_VARARGS, _imp_create_dynamic__doc__}, static PyObject * -_imp_create_dynamic_impl(PyModuleDef *module, PyObject *spec, PyObject *file); +_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file); static PyObject * -_imp_create_dynamic(PyModuleDef *module, PyObject *args) +_imp_create_dynamic(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *spec; @@ -299,10 +299,10 @@ {"exec_dynamic", (PyCFunction)_imp_exec_dynamic, METH_O, _imp_exec_dynamic__doc__}, static int -_imp_exec_dynamic_impl(PyModuleDef *module, PyObject *mod); +_imp_exec_dynamic_impl(PyObject *module, PyObject *mod); static PyObject * -_imp_exec_dynamic(PyModuleDef *module, PyObject *mod) +_imp_exec_dynamic(PyObject *module, PyObject *mod) { PyObject *return_value = NULL; int _return_value; @@ -328,10 +328,10 @@ {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__}, static int -_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod); +_imp_exec_builtin_impl(PyObject *module, PyObject *mod); static PyObject * -_imp_exec_builtin(PyModuleDef *module, PyObject *mod) +_imp_exec_builtin(PyObject *module, PyObject *mod) { PyObject *return_value = NULL; int _return_value; @@ -352,4 +352,4 @@ #ifndef _IMP_EXEC_DYNAMIC_METHODDEF #define _IMP_EXEC_DYNAMIC_METHODDEF #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=32324a5e46cdfc4b input=a9049054013a1b77]*/ +/*[clinic end generated code: output=90ad6e5833e6170d input=a9049054013a1b77]*/ diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -242,8 +242,8 @@ [clinic start generated code]*/ static PyObject * -_imp_lock_held_impl(PyModuleDef *module) -/*[clinic end generated code: output=d7a8cc3a5169081a input=9b088f9b217d9bdf]*/ +_imp_lock_held_impl(PyObject *module) +/*[clinic end generated code: output=8b89384b5e1963fc input=9b088f9b217d9bdf]*/ { #ifdef WITH_THREAD return PyBool_FromLong(import_lock_thread != -1); @@ -262,8 +262,8 @@ [clinic start generated code]*/ static PyObject * -_imp_acquire_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=cc143b1d16422cae input=4a2d4381866d5fdc]*/ +_imp_acquire_lock_impl(PyObject *module) +/*[clinic end generated code: output=1aff58cb0ee1b026 input=4a2d4381866d5fdc]*/ { #ifdef WITH_THREAD _PyImport_AcquireLock(); @@ -281,8 +281,8 @@ [clinic start generated code]*/ static PyObject * -_imp_release_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=74d28e38ebe2b224 input=934fb11516dd778b]*/ +_imp_release_lock_impl(PyObject *module) +/*[clinic end generated code: output=7faab6d0be178b0a input=934fb11516dd778b]*/ { #ifdef WITH_THREAD if (_PyImport_ReleaseLock() < 0) { @@ -926,9 +926,9 @@ [clinic start generated code]*/ static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, +_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, PyObject *path) -/*[clinic end generated code: output=f4db56aac0a1327f input=895ba50e78b82f05]*/ +/*[clinic end generated code: output=1d002f100235587d input=895ba50e78b82f05]*/ { update_compiled_module(code, path); @@ -1040,8 +1040,8 @@ [clinic start generated code]*/ static PyObject * -_imp_create_builtin(PyModuleDef *module, PyObject *spec) -/*[clinic end generated code: output=5038f467617226bd input=37f966f890384e47]*/ +_imp_create_builtin(PyObject *module, PyObject *spec) +/*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/ { struct _inittab *p; PyObject *name; @@ -1823,8 +1823,8 @@ [clinic start generated code]*/ static PyObject * -_imp_extension_suffixes_impl(PyModuleDef *module) -/*[clinic end generated code: output=d44c1566ef362229 input=ecdeeecfcb6f839e]*/ +_imp_extension_suffixes_impl(PyObject *module) +/*[clinic end generated code: output=0bf346e25a8f0cd3 input=ecdeeecfcb6f839e]*/ { PyObject *list; const char *suffix; @@ -1862,8 +1862,8 @@ [clinic start generated code]*/ static PyObject * -_imp_init_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=a9de493bdd711878 input=13019adfc04f3fb3]*/ +_imp_init_frozen_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/ { int ret; PyObject *m; @@ -1890,8 +1890,8 @@ [clinic start generated code]*/ static PyObject * -_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=3114c970a47f2e3c input=ed689bc05358fdbd]*/ +_imp_get_frozen_object_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=2568cc5b7aa0da63 input=ed689bc05358fdbd]*/ { return get_frozen_object(name); } @@ -1906,8 +1906,8 @@ [clinic start generated code]*/ static PyObject * -_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=3e4cab802b56d649 input=81b6cdecd080fbb8]*/ +_imp_is_frozen_package_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=e70cbdb45784a1c9 input=81b6cdecd080fbb8]*/ { return is_frozen_package(name); } @@ -1922,8 +1922,8 @@ [clinic start generated code]*/ static PyObject * -_imp_is_builtin_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=2deec9cac6fb9a7e input=86befdac021dd1c7]*/ +_imp_is_builtin_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=3bfd1162e2d3be82 input=86befdac021dd1c7]*/ { return PyLong_FromLong(is_builtin(name)); } @@ -1938,8 +1938,8 @@ [clinic start generated code]*/ static PyObject * -_imp_is_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=7de8e260c8e36aed input=7301dbca1897d66b]*/ +_imp_is_frozen_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=01f408f5ec0f2577 input=7301dbca1897d66b]*/ { const struct _frozen *p; @@ -1988,8 +1988,8 @@ [clinic start generated code]*/ static PyObject * -_imp_create_dynamic_impl(PyModuleDef *module, PyObject *spec, PyObject *file) -/*[clinic end generated code: output=935cde5b3872d56d input=c31b954f4cf4e09d]*/ +_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file) +/*[clinic end generated code: output=83249b827a4fde77 input=c31b954f4cf4e09d]*/ { PyObject *mod, *name, *path; FILE *fp; @@ -2043,8 +2043,8 @@ [clinic start generated code]*/ static int -_imp_exec_dynamic_impl(PyModuleDef *module, PyObject *mod) -/*[clinic end generated code: output=4b84f1301b22d4bd input=9fdbfcb250280d3a]*/ +_imp_exec_dynamic_impl(PyObject *module, PyObject *mod) +/*[clinic end generated code: output=f5720ac7b465877d input=9fdbfcb250280d3a]*/ { return exec_builtin_or_dynamic(mod); } @@ -2062,8 +2062,8 @@ [clinic start generated code]*/ static int -_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod) -/*[clinic end generated code: output=215e99876a27e284 input=7beed5a2f12a60ca]*/ +_imp_exec_builtin_impl(PyObject *module, PyObject *mod) +/*[clinic end generated code: output=0262447b240c038e input=7beed5a2f12a60ca]*/ { return exec_builtin_or_dynamic(mod); } diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -2793,7 +2793,7 @@ if f.kind in (CALLABLE, METHOD_INIT): if f.cls: return "PyObject *", "self" - return "PyModuleDef *", "module" + return "PyObject *", "module" if f.kind == STATIC_METHOD: return "void *", "null" if f.kind in (CLASS_METHOD, METHOD_NEW): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 11:20:42 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Thu, 07 Jul 2016 15:20:42 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_-_Issue_=2327332=3A_Fixed_the_type_of_the_first_argument?= =?utf-8?q?_of_module-level_functions?= Message-ID: <20160707152041.16117.77276.236854C2@psf.io> https://hg.python.org/cpython/rev/c80054ccbbd8 changeset: 102281:c80054ccbbd8 parent: 102277:fe168c2b5e95 parent: 102280:870e02f86e08 user: Serhiy Storchaka date: Thu Jul 07 18:20:03 2016 +0300 summary: - Issue #27332: Fixed the type of the first argument of module-level functions generated by Argument Clinic. Patch by Petr Viktorin. files: Misc/NEWS | 3 + Modules/_codecsmodule.c | 183 +- Modules/_cryptmodule.c | 4 +- Modules/_dbmmodule.c | 4 +- Modules/_gdbmmodule.c | 5 +- Modules/_io/_iomodule.c | 4 +- Modules/_io/clinic/_iomodule.c.h | 6 +- Modules/_lzmamodule.c | 12 +- Modules/_opcode.c | 4 +- Modules/_pickle.c | 16 +- Modules/_sre.c | 12 +- Modules/_ssl.c | 44 +- Modules/_tkinter.c | 16 +- Modules/_weakref.c | 4 +- Modules/_winapi.c | 107 +- Modules/arraymodule.c | 4 +- Modules/audioop.c | 105 +- Modules/binascii.c | 64 +- Modules/cjkcodecs/multibytecodec.c | 4 +- Modules/clinic/_codecsmodule.c.h | 181 +- Modules/clinic/_cryptmodule.c.h | 6 +- Modules/clinic/_dbmmodule.c.h | 6 +- Modules/clinic/_gdbmmodule.c.h | 7 +- Modules/clinic/_lzmamodule.c.h | 14 +- Modules/clinic/_opcode.c.h | 6 +- Modules/clinic/_pickle.c.h | 18 +- Modules/clinic/_sre.c.h | 14 +- Modules/clinic/_ssl.c.h | 46 +- Modules/clinic/_tkinter.c.h | 14 +- Modules/clinic/_weakref.c.h | 6 +- Modules/clinic/_winapi.c.h | 109 +- Modules/clinic/arraymodule.c.h | 6 +- Modules/clinic/audioop.c.h | 107 +- Modules/clinic/binascii.c.h | 66 +- Modules/clinic/cmathmodule.c.h | 94 +- Modules/clinic/fcntlmodule.c.h | 18 +- Modules/clinic/grpmodule.c.h | 14 +- Modules/clinic/md5module.c.h | 6 +- Modules/clinic/posixmodule.c.h | 1196 +++++++-------- Modules/clinic/pwdmodule.c.h | 10 +- Modules/clinic/pyexpat.c.h | 10 +- Modules/clinic/sha1module.c.h | 6 +- Modules/clinic/sha256module.c.h | 10 +- Modules/clinic/sha512module.c.h | 10 +- Modules/clinic/signalmodule.c.h | 46 +- Modules/clinic/spwdmodule.c.h | 10 +- Modules/clinic/zlibmodule.c.h | 26 +- Modules/cmathmodule.c | 104 +- Modules/fcntlmodule.c | 16 +- Modules/grpmodule.c | 12 +- Modules/md5module.c | 4 +- Modules/posixmodule.c | 638 ++++---- Modules/pwdmodule.c | 12 +- Modules/pyexpat.c | 8 +- Modules/sha1module.c | 4 +- Modules/sha256module.c | 8 +- Modules/sha512module.c | 8 +- Modules/signalmodule.c | 52 +- Modules/spwdmodule.c | 8 +- Modules/zlibmodule.c | 24 +- PC/clinic/msvcrtmodule.c.h | 75 +- PC/clinic/winreg.c.h | 90 +- PC/clinic/winsound.c.h | 14 +- PC/msvcrtmodule.c | 73 +- PC/winreg.c | 92 +- PC/winsound.c | 12 +- Python/bltinmodule.c | 117 +- Python/clinic/bltinmodule.c.h | 71 +- Python/clinic/import.c.h | 54 +- Python/import.c | 56 +- Tools/clinic/clinic.py | 2 +- 71 files changed, 2098 insertions(+), 2119 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -146,6 +146,9 @@ Tools/Demos ----------- +- Issue #27332: Fixed the type of the first argument of module-level functions + generated by Argument Clinic. Patch by Petr Viktorin. + - Issue #27418: Fixed Tools/importbench/importbench.py. diff --git a/Modules/_codecsmodule.c b/Modules/_codecsmodule.c --- a/Modules/_codecsmodule.c +++ b/Modules/_codecsmodule.c @@ -60,8 +60,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_register(PyModuleDef *module, PyObject *search_function) -/*[clinic end generated code: output=d17608b6ad380eb8 input=369578467955cae4]*/ +_codecs_register(PyObject *module, PyObject *search_function) +/*[clinic end generated code: output=d1bf21e99db7d6d3 input=369578467955cae4]*/ { if (PyCodec_Register(search_function)) return NULL; @@ -78,8 +78,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_lookup_impl(PyModuleDef *module, const char *encoding) -/*[clinic end generated code: output=798e41aff0c04ef6 input=3c572c0db3febe9c]*/ +_codecs_lookup_impl(PyObject *module, const char *encoding) +/*[clinic end generated code: output=9f0afa572080c36d input=3c572c0db3febe9c]*/ { return _PyCodec_Lookup(encoding); } @@ -100,9 +100,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=5c073f62249c8d7c input=cd5b685040ff61f0]*/ +/*[clinic end generated code: output=385148eb9a067c86 input=cd5b685040ff61f0]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -127,9 +127,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors) -/*[clinic end generated code: output=c81cbf6189a7f878 input=7702c0cc2fa1add6]*/ +/*[clinic end generated code: output=679882417dc3a0bd input=7702c0cc2fa1add6]*/ { if (encoding == NULL) encoding = PyUnicode_GetDefaultEncoding(); @@ -150,8 +150,8 @@ [clinic start generated code]*/ static PyObject * -_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding) -/*[clinic end generated code: output=b56a9b99d2d28080 input=18d5d92d0e386c38]*/ +_codecs__forget_codec_impl(PyObject *module, const char *encoding) +/*[clinic end generated code: output=0bde9f0a5b084aa2 input=18d5d92d0e386c38]*/ { if (_PyCodec_Forget(encoding) < 0) { return NULL; @@ -177,9 +177,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=648fa3e78d03e658 input=0018edfd99db714d]*/ +/*[clinic end generated code: output=505200ba8056979a input=0018edfd99db714d]*/ { PyObject *decoded = PyBytes_DecodeEscape(data->buf, data->len, errors, 0, NULL); @@ -194,9 +194,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, +_codecs_escape_encode_impl(PyObject *module, PyObject *data, const char *errors) -/*[clinic end generated code: output=fcd6f34fe4111c50 input=da9ded00992f32f2]*/ +/*[clinic end generated code: output=4af1d477834bab34 input=da9ded00992f32f2]*/ { Py_ssize_t size; Py_ssize_t newsize; @@ -258,9 +258,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_decode_impl(PyObject *module, PyObject *obj, const char *errors) -/*[clinic end generated code: output=9fe47c2cd8807d92 input=8d57930aeda170c6]*/ +/*[clinic end generated code: output=edbfe175e09eff9a input=8d57930aeda170c6]*/ { if (PyUnicode_Check(obj)) { if (PyUnicode_READY(obj) < 0) @@ -291,9 +291,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_7_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=ca945e907e72e827 input=bc4d6247ecdb01e6]*/ +/*[clinic end generated code: output=0cd3a944a32a4089 input=bc4d6247ecdb01e6]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF7Stateful(data->buf, data->len, @@ -311,9 +311,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_8_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=7309f9ff4ef5c9b6 input=39161d71e7422ee2]*/ +/*[clinic end generated code: output=10f74dec8d9bb8bf input=39161d71e7422ee2]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF8Stateful(data->buf, data->len, @@ -331,9 +331,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=8d2fa0507d9bef2c input=f3cf01d1461007ce]*/ +/*[clinic end generated code: output=783b442abcbcc2d0 input=f3cf01d1461007ce]*/ { int byteorder = 0; /* This is overwritten unless final is true. */ @@ -353,9 +353,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=4fd621515ef4ce18 input=a77e3bf97335d94e]*/ +/*[clinic end generated code: output=899b9e6364379dcd input=a77e3bf97335d94e]*/ { int byteorder = -1; /* This is overwritten unless final is true. */ @@ -375,9 +375,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=792f4eacb3e1fa05 input=606f69fae91b5563]*/ +/*[clinic end generated code: output=49f6465ea07669c8 input=606f69fae91b5563]*/ { int byteorder = 1; /* This is overwritten unless final is true. */ @@ -405,9 +405,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final) -/*[clinic end generated code: output=f136a186dc2defa0 input=f6e7f697658c013e]*/ +/*[clinic end generated code: output=0f385f251ecc1988 input=f6e7f697658c013e]*/ { /* This is overwritten unless final is true. */ Py_ssize_t consumed = data->len; @@ -429,9 +429,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=b7635e55857e8efb input=86d4f41c6c2e763d]*/ +/*[clinic end generated code: output=2fc961807f7b145f input=86d4f41c6c2e763d]*/ { int byteorder = 0; /* This is overwritten unless final is true. */ @@ -451,9 +451,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=a79d1787d8ddf988 input=d18b650772d188ba]*/ +/*[clinic end generated code: output=ec8f46b67a94f3e6 input=d18b650772d188ba]*/ { int byteorder = -1; /* This is overwritten unless final is true. */ @@ -473,9 +473,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=a8356b0f36779981 input=19c271b5d34926d8]*/ +/*[clinic end generated code: output=ff82bae862c92c4e input=19c271b5d34926d8]*/ { int byteorder = 1; /* This is overwritten unless final is true. */ @@ -503,9 +503,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final) -/*[clinic end generated code: output=ab8c70977c1992f5 input=4af3e6ccfe34a076]*/ +/*[clinic end generated code: output=6bfb177dceaf4848 input=4af3e6ccfe34a076]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeUTF32Stateful(data->buf, data->len, @@ -524,9 +524,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=d1aa63f2620c4999 input=49fd27d06813a7f5]*/ +/*[clinic end generated code: output=3ca3c917176b82ab input=49fd27d06813a7f5]*/ { PyObject *decoded = PyUnicode_DecodeUnicodeEscape(data->buf, data->len, errors); @@ -541,9 +541,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_raw_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=0bf96cc182d81379 input=770903a211434ebc]*/ +/*[clinic end generated code: output=c98eeb56028070a6 input=770903a211434ebc]*/ { PyObject *decoded = PyUnicode_DecodeRawUnicodeEscape(data->buf, data->len, errors); @@ -558,9 +558,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_latin_1_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=66b916f5055aaf13 input=5cad0f1759c618ec]*/ +/*[clinic end generated code: output=07f3dfa3f72c7d8f input=5cad0f1759c618ec]*/ { PyObject *decoded = PyUnicode_DecodeLatin1(data->buf, data->len, errors); return codec_tuple(decoded, data->len); @@ -574,9 +574,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_ascii_decode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=7f213a1b5cdafc65 input=ad1106f64037bd16]*/ +/*[clinic end generated code: output=2627d72058d42429 input=ad1106f64037bd16]*/ { PyObject *decoded = PyUnicode_DecodeASCII(data->buf, data->len, errors); return codec_tuple(decoded, data->len); @@ -591,9 +591,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_charmap_decode_impl(PyObject *module, Py_buffer *data, const char *errors, PyObject *mapping) -/*[clinic end generated code: output=87d27f365098bbae input=19712ca35c5a80e2]*/ +/*[clinic end generated code: output=2c335b09778cf895 input=19712ca35c5a80e2]*/ { PyObject *decoded; @@ -615,9 +615,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_mbcs_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=0ebaf3a5b20e53fa input=d492c1ca64f4fa8a]*/ +/*[clinic end generated code: output=39b65b8598938c4b input=d492c1ca64f4fa8a]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeMBCSStateful(data->buf, data->len, @@ -635,9 +635,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, +_codecs_code_page_decode_impl(PyObject *module, int codepage, Py_buffer *data, const char *errors, int final) -/*[clinic end generated code: output=4318e3d9971e31ba input=4f3152a304e21d51]*/ +/*[clinic end generated code: output=53008ea967da3fff input=4f3152a304e21d51]*/ { Py_ssize_t consumed = data->len; PyObject *decoded = PyUnicode_DecodeCodePageStateful(codepage, @@ -659,9 +659,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_readbuffer_encode_impl(PyObject *module, Py_buffer *data, const char *errors) -/*[clinic end generated code: output=319cc24083299859 input=b7c322b89d4ab923]*/ +/*[clinic end generated code: output=c645ea7cdb3d6e86 input=b7c322b89d4ab923]*/ { PyObject *result = PyBytes_FromStringAndSize(data->buf, data->len); return codec_tuple(result, data->len); @@ -675,9 +675,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_encode_impl(PyObject *module, PyObject *obj, const char *errors) -/*[clinic end generated code: output=be08457068ad503b input=8628f0280cf5ba61]*/ +/*[clinic end generated code: output=a72507dde4ea558f input=8628f0280cf5ba61]*/ { if (PyErr_WarnEx(PyExc_DeprecationWarning, "unicode_internal codec has been deprecated", @@ -720,9 +720,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_7_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=a7accc496a32b759 input=d1a47579e79cbe15]*/ +/*[clinic end generated code: output=0feda21ffc921bc8 input=d1a47579e79cbe15]*/ { return codec_tuple(_PyUnicode_EncodeUTF7(str, 0, 0, errors), PyUnicode_GET_LENGTH(str)); @@ -736,9 +736,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_8_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ec831d80e7aedede input=42e3ba73c4392eef]*/ +/*[clinic end generated code: output=02bf47332b9c796c input=42e3ba73c4392eef]*/ { return codec_tuple(_PyUnicode_AsUTF8String(str, errors), PyUnicode_GET_LENGTH(str)); @@ -760,9 +760,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder) -/*[clinic end generated code: output=93ac58e960a9ee4d input=ff46416b04edb944]*/ +/*[clinic end generated code: output=c654e13efa2e64e4 input=ff46416b04edb944]*/ { return codec_tuple(_PyUnicode_EncodeUTF16(str, errors, byteorder), PyUnicode_GET_LENGTH(str)); @@ -776,9 +776,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_le_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=422bedb8da34fb66 input=cb385455ea8f2fe0]*/ +/*[clinic end generated code: output=431b01e55f2d4995 input=cb385455ea8f2fe0]*/ { return codec_tuple(_PyUnicode_EncodeUTF16(str, errors, -1), PyUnicode_GET_LENGTH(str)); @@ -792,9 +792,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_be_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=3aa7ee9502acdd77 input=9119997066bdaefd]*/ +/*[clinic end generated code: output=96886a6fd54dcae3 input=9119997066bdaefd]*/ { return codec_tuple(_PyUnicode_EncodeUTF16(str, errors, +1), PyUnicode_GET_LENGTH(str)); @@ -816,9 +816,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder) -/*[clinic end generated code: output=3e7d5a003b02baed input=c5e77da82fbe5c2a]*/ +/*[clinic end generated code: output=5c760da0c09a8b83 input=c5e77da82fbe5c2a]*/ { return codec_tuple(_PyUnicode_EncodeUTF32(str, errors, byteorder), PyUnicode_GET_LENGTH(str)); @@ -832,9 +832,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_le_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=5dda641cd33dbfc2 input=9993b25fe0877848]*/ +/*[clinic end generated code: output=b65cd176de8e36d6 input=9993b25fe0877848]*/ { return codec_tuple(_PyUnicode_EncodeUTF32(str, errors, -1), PyUnicode_GET_LENGTH(str)); @@ -848,9 +848,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_be_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ccca8b44d91a7c7a input=d3e0ccaa02920431]*/ +/*[clinic end generated code: output=1d9e71a9358709e9 input=d3e0ccaa02920431]*/ { return codec_tuple(_PyUnicode_EncodeUTF32(str, errors, +1), PyUnicode_GET_LENGTH(str)); @@ -864,9 +864,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=389f23d2b8f8d80b input=65d9eefca65b455a]*/ +/*[clinic end generated code: output=66271b30bc4f7a3c input=65d9eefca65b455a]*/ { return codec_tuple(PyUnicode_AsUnicodeEscapeString(str), PyUnicode_GET_LENGTH(str)); @@ -880,9 +880,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_raw_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=fec4e39d6ec37a62 input=5aa33e4a133391ab]*/ +/*[clinic end generated code: output=a66a806ed01c830a input=5aa33e4a133391ab]*/ { return codec_tuple(PyUnicode_AsRawUnicodeEscapeString(str), PyUnicode_GET_LENGTH(str)); @@ -896,9 +896,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_latin_1_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=ecf00eb8e48c889c input=30b11c9e49a65150]*/ +/*[clinic end generated code: output=2c28c83a27884e08 input=30b11c9e49a65150]*/ { return codec_tuple(_PyUnicode_AsLatin1String(str, errors), PyUnicode_GET_LENGTH(str)); @@ -912,9 +912,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_ascii_encode_impl(PyObject *module, PyObject *str, const char *errors) -/*[clinic end generated code: output=a9d18fc6b6b91cfb input=843a1d268e6dfa8e]*/ +/*[clinic end generated code: output=b5e035182d33befc input=843a1d268e6dfa8e]*/ { return codec_tuple(_PyUnicode_AsASCIIString(str, errors), PyUnicode_GET_LENGTH(str)); @@ -929,9 +929,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_charmap_encode_impl(PyObject *module, PyObject *str, const char *errors, PyObject *mapping) -/*[clinic end generated code: output=14ca42b83853c643 input=0752cde07a6d6d00]*/ +/*[clinic end generated code: output=047476f48495a9e9 input=0752cde07a6d6d00]*/ { if (mapping == Py_None) mapping = NULL; @@ -947,8 +947,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map) -/*[clinic end generated code: output=9485b58fa44afa6a input=d91a91d1717dbc6d]*/ +_codecs_charmap_build_impl(PyObject *module, PyObject *map) +/*[clinic end generated code: output=bb073c27031db9ac input=d91a91d1717dbc6d]*/ { return PyUnicode_BuildEncodingMap(map); } @@ -963,9 +963,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, - const char *errors) -/*[clinic end generated code: output=d1a013bc68798bd7 input=de471e0815947553]*/ +_codecs_mbcs_encode_impl(PyObject *module, PyObject *str, const char *errors) +/*[clinic end generated code: output=76e2e170c966c080 input=de471e0815947553]*/ { return codec_tuple(PyUnicode_EncodeCodePage(CP_ACP, str, errors), PyUnicode_GET_LENGTH(str)); @@ -980,9 +979,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, - PyObject *str, const char *errors) -/*[clinic end generated code: output=3b406618dbfbce25 input=786421ae617d680b]*/ +_codecs_code_page_encode_impl(PyObject *module, int code_page, PyObject *str, + const char *errors) +/*[clinic end generated code: output=45673f6085657a9e input=786421ae617d680b]*/ { return codec_tuple(PyUnicode_EncodeCodePage(code_page, str, errors), PyUnicode_GET_LENGTH(str)); @@ -1006,9 +1005,9 @@ [clinic start generated code]*/ static PyObject * -_codecs_register_error_impl(PyModuleDef *module, const char *errors, +_codecs_register_error_impl(PyObject *module, const char *errors, PyObject *handler) -/*[clinic end generated code: output=be00d3b1849ce68a input=5e6709203c2e33fe]*/ +/*[clinic end generated code: output=fa2f7d1879b3067d input=5e6709203c2e33fe]*/ { if (PyCodec_RegisterError(errors, handler)) return NULL; @@ -1027,8 +1026,8 @@ [clinic start generated code]*/ static PyObject * -_codecs_lookup_error_impl(PyModuleDef *module, const char *name) -/*[clinic end generated code: output=731e6df8c83c6158 input=4775dd65e6235aba]*/ +_codecs_lookup_error_impl(PyObject *module, const char *name) +/*[clinic end generated code: output=087f05dc0c9a98cc input=4775dd65e6235aba]*/ { return PyCodec_LookupError(name); } diff --git a/Modules/_cryptmodule.c b/Modules/_cryptmodule.c --- a/Modules/_cryptmodule.c +++ b/Modules/_cryptmodule.c @@ -31,8 +31,8 @@ [clinic start generated code]*/ static PyObject * -crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt) -/*[clinic end generated code: output=995ad1e854d83069 input=0e8edec9c364352b]*/ +crypt_crypt_impl(PyObject *module, const char *word, const char *salt) +/*[clinic end generated code: output=0512284a03d2803c input=0e8edec9c364352b]*/ { /* On some platforms (AtheOS) crypt returns NULL for an invalid salt. Return None in that case. XXX Maybe raise an exception? */ diff --git a/Modules/_dbmmodule.c b/Modules/_dbmmodule.c --- a/Modules/_dbmmodule.c +++ b/Modules/_dbmmodule.c @@ -430,9 +430,9 @@ [clinic start generated code]*/ static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, +dbmopen_impl(PyObject *module, const char *filename, const char *flags, int mode) -/*[clinic end generated code: output=e8d4b36f25c733fd input=226334bade5764e6]*/ +/*[clinic end generated code: output=5fade8cf16e0755f input=226334bade5764e6]*/ { int iflags; diff --git a/Modules/_gdbmmodule.c b/Modules/_gdbmmodule.c --- a/Modules/_gdbmmodule.c +++ b/Modules/_gdbmmodule.c @@ -562,9 +562,8 @@ [clinic start generated code]*/ static PyObject * -dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, - int mode) -/*[clinic end generated code: output=365b31415c03ccd4 input=55563cd60e51984a]*/ +dbmopen_impl(PyObject *module, const char *name, const char *flags, int mode) +/*[clinic end generated code: output=31aa1bafdf5da688 input=55563cd60e51984a]*/ { int iflags; diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -227,10 +227,10 @@ [clinic start generated code]*/ static PyObject * -_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, +_io_open_impl(PyObject *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener) -/*[clinic end generated code: output=7615d0d746eb14d2 input=f4e1ca75223987bc]*/ +/*[clinic end generated code: output=aefafc4ce2b46dc0 input=f4e1ca75223987bc]*/ { unsigned i; diff --git a/Modules/_io/clinic/_iomodule.c.h b/Modules/_io/clinic/_iomodule.c.h --- a/Modules/_io/clinic/_iomodule.c.h +++ b/Modules/_io/clinic/_iomodule.c.h @@ -130,12 +130,12 @@ {"open", (PyCFunction)_io_open, METH_VARARGS|METH_KEYWORDS, _io_open__doc__}, static PyObject * -_io_open_impl(PyModuleDef *module, PyObject *file, const char *mode, +_io_open_impl(PyObject *module, PyObject *file, const char *mode, int buffering, const char *encoding, const char *errors, const char *newline, int closefd, PyObject *opener); static PyObject * -_io_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_io_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"file", "mode", "buffering", "encoding", "errors", "newline", "closefd", "opener", NULL}; @@ -157,4 +157,4 @@ exit: return return_value; } -/*[clinic end generated code: output=079f597e71e9f0c6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ae2facf262cf464e input=a9049054013a1b77]*/ diff --git a/Modules/_lzmamodule.c b/Modules/_lzmamodule.c --- a/Modules/_lzmamodule.c +++ b/Modules/_lzmamodule.c @@ -1336,8 +1336,8 @@ [clinic start generated code]*/ static PyObject * -_lzma_is_check_supported_impl(PyModuleDef *module, int check_id) -/*[clinic end generated code: output=bb828e90e00ad96e input=5518297b97b2318f]*/ +_lzma_is_check_supported_impl(PyObject *module, int check_id) +/*[clinic end generated code: output=e4f14ba3ce2ad0a5 input=5518297b97b2318f]*/ { return PyBool_FromLong(lzma_check_is_supported(check_id)); } @@ -1354,8 +1354,8 @@ [clinic start generated code]*/ static PyObject * -_lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter) -/*[clinic end generated code: output=b5fe690acd6b61d1 input=d4c64f1b557c77d4]*/ +_lzma__encode_filter_properties_impl(PyObject *module, lzma_filter filter) +/*[clinic end generated code: output=5c93c8e14e7be5a8 input=d4c64f1b557c77d4]*/ { lzma_ret lzret; uint32_t encoded_size; @@ -1394,9 +1394,9 @@ [clinic start generated code]*/ static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, +_lzma__decode_filter_properties_impl(PyObject *module, lzma_vli filter_id, Py_buffer *encoded_props) -/*[clinic end generated code: output=af248f570746668b input=246410800782160c]*/ +/*[clinic end generated code: output=714fd2ef565d5c60 input=246410800782160c]*/ { lzma_filter filter; lzma_ret lzret; diff --git a/Modules/_opcode.c b/Modules/_opcode.c --- a/Modules/_opcode.c +++ b/Modules/_opcode.c @@ -20,8 +20,8 @@ [clinic start generated code]*/ static int -_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg) -/*[clinic end generated code: output=1fcafd5596c6b050 input=2d0a9ee53c0418f5]*/ +_opcode_stack_effect_impl(PyObject *module, int opcode, PyObject *oparg) +/*[clinic end generated code: output=ad39467fa3ad22ce input=2d0a9ee53c0418f5]*/ { int effect; int oparg_int = 0; diff --git a/Modules/_pickle.c b/Modules/_pickle.c --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -7051,9 +7051,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, +_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=0de7dff89c406816 input=830f8a64cef6f042]*/ +/*[clinic end generated code: output=a4774d5fde7d34de input=830f8a64cef6f042]*/ { PicklerObject *pickler = _Pickler_New(); @@ -7105,9 +7105,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, +_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol, int fix_imports) -/*[clinic end generated code: output=daa380db56fe07b9 input=293dbeda181580b7]*/ +/*[clinic end generated code: output=d75d5cda456fd261 input=293dbeda181580b7]*/ { PyObject *result; PicklerObject *pickler = _Pickler_New(); @@ -7166,9 +7166,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, +_pickle_load_impl(PyObject *module, PyObject *file, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=798f1c57cb2b4eb1 input=01b44dd3fc07afa7]*/ +/*[clinic end generated code: output=69e298160285199e input=01b44dd3fc07afa7]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); @@ -7220,9 +7220,9 @@ [clinic start generated code]*/ static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, +_pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports, const char *encoding, const char *errors) -/*[clinic end generated code: output=61e9cdb01e36a736 input=70605948a719feb9]*/ +/*[clinic end generated code: output=1e7cb2343f2c440f input=70605948a719feb9]*/ { PyObject *result; UnpicklerObject *unpickler = _Unpickler_New(); diff --git a/Modules/_sre.c b/Modules/_sre.c --- a/Modules/_sre.c +++ b/Modules/_sre.c @@ -275,8 +275,8 @@ [clinic start generated code]*/ static int -_sre_getcodesize_impl(PyModuleDef *module) -/*[clinic end generated code: output=794f1f98ef4883e5 input=bd6f6ecf4916bb2b]*/ +_sre_getcodesize_impl(PyObject *module) +/*[clinic end generated code: output=e0db7ce34a6dd7b1 input=bd6f6ecf4916bb2b]*/ { return sizeof(SRE_CODE); } @@ -291,8 +291,8 @@ [clinic start generated code]*/ static int -_sre_getlower_impl(PyModuleDef *module, int character, int flags) -/*[clinic end generated code: output=5fc3616ae2a4c306 input=087d2f1c44bbca6f]*/ +_sre_getlower_impl(PyObject *module, int character, int flags) +/*[clinic end generated code: output=47eebc4c1214feb5 input=087d2f1c44bbca6f]*/ { if (flags & SRE_FLAG_LOCALE) return sre_lower_locale(character); @@ -1451,10 +1451,10 @@ [clinic start generated code]*/ static PyObject * -_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, +_sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *code, Py_ssize_t groups, PyObject *groupindex, PyObject *indexgroup) -/*[clinic end generated code: output=3004b293730bf309 input=7d059ec8ae1edb85]*/ +/*[clinic end generated code: output=ef9c2b3693776404 input=7d059ec8ae1edb85]*/ { /* "compile" pattern descriptor to pattern object */ diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1321,8 +1321,8 @@ [clinic start generated code]*/ static PyObject * -_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=679e01db282804e9 input=cdeaaf02d4346628]*/ +_ssl__test_decode_cert_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=96becb9abb23c091 input=cdeaaf02d4346628]*/ { PyObject *retval = NULL; X509 *x=NULL; @@ -3832,8 +3832,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy) -/*[clinic end generated code: output=0f8d5c8cce328958 input=580c85e6a3a4fe29]*/ +_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy) +/*[clinic end generated code: output=e6dd48df9c9024e9 input=580c85e6a3a4fe29]*/ { const char *buf; Py_ssize_t len, written; @@ -3898,8 +3898,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_bytes_impl(PyModuleDef *module, int n) -/*[clinic end generated code: output=7d8741bdc1d435f3 input=678ddf2872dfebfc]*/ +_ssl_RAND_bytes_impl(PyObject *module, int n) +/*[clinic end generated code: output=977da635e4838bc7 input=678ddf2872dfebfc]*/ { return PySSL_RAND(n, 0); } @@ -3916,8 +3916,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n) -/*[clinic end generated code: output=dd673813107f3875 input=58312bd53f9bbdd0]*/ +_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n) +/*[clinic end generated code: output=b1509e937000e52d input=58312bd53f9bbdd0]*/ { return PySSL_RAND(n, 1); } @@ -3932,8 +3932,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_status_impl(PyModuleDef *module) -/*[clinic end generated code: output=7f7ef57bc7dd1d1c input=8a774b02d1dc81f3]*/ +_ssl_RAND_status_impl(PyObject *module) +/*[clinic end generated code: output=7e0aaa2d39fdc1ad input=8a774b02d1dc81f3]*/ { return PyLong_FromLong(RAND_status()); } @@ -3951,8 +3951,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=8e728e501e28541b input=1aeb7eb948312195]*/ +_ssl_RAND_egd_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=02a67c7c367f52fa input=1aeb7eb948312195]*/ { int bytes = RAND_egd(PyBytes_AsString(path)); Py_DECREF(path); @@ -3977,8 +3977,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_get_default_verify_paths_impl(PyModuleDef *module) -/*[clinic end generated code: output=5a2820ce7e3304d3 input=5210c953d98c3eb5]*/ +_ssl_get_default_verify_paths_impl(PyObject *module) +/*[clinic end generated code: output=e5b62a466271928b input=5210c953d98c3eb5]*/ { PyObject *ofile_env = NULL; PyObject *ofile = NULL; @@ -4049,8 +4049,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name) -/*[clinic end generated code: output=2ae2c30531b8809f input=1c1e7d0aa7c48602]*/ +_ssl_txt2obj_impl(PyObject *module, const char *txt, int name) +/*[clinic end generated code: output=c38e3991347079c1 input=1c1e7d0aa7c48602]*/ { PyObject *result = NULL; ASN1_OBJECT *obj; @@ -4074,8 +4074,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_nid2obj_impl(PyModuleDef *module, int nid) -/*[clinic end generated code: output=8db1df89e44badb8 input=51787a3bee7d8f98]*/ +_ssl_nid2obj_impl(PyObject *module, int nid) +/*[clinic end generated code: output=4a98ab691cd4f84a input=51787a3bee7d8f98]*/ { PyObject *result = NULL; ASN1_OBJECT *obj; @@ -4193,8 +4193,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name) -/*[clinic end generated code: output=cc4ebc10b8adacfc input=915f60d70461ea4e]*/ +_ssl_enum_certificates_impl(PyObject *module, const char *store_name) +/*[clinic end generated code: output=5134dc8bb3a3c893 input=915f60d70461ea4e]*/ { HCERTSTORE hStore = NULL; PCCERT_CONTEXT pCertCtx = NULL; @@ -4281,8 +4281,8 @@ [clinic start generated code]*/ static PyObject * -_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name) -/*[clinic end generated code: output=763490a2aa1c50d5 input=a1f1d7629f1c5d3d]*/ +_ssl_enum_crls_impl(PyObject *module, const char *store_name) +/*[clinic end generated code: output=bce467f60ccd03b6 input=a1f1d7629f1c5d3d]*/ { HCERTSTORE hStore = NULL; PCCRL_CONTEXT pCrlCtx = NULL; diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -3172,8 +3172,8 @@ [clinic start generated code]*/ static PyObject * -_tkinter__flatten(PyModuleDef *module, PyObject *item) -/*[clinic end generated code: output=9505049ec74c3480 input=6b9c12260aa1157f]*/ +_tkinter__flatten(PyObject *module, PyObject *item) +/*[clinic end generated code: output=cad02a3f97f29862 input=6b9c12260aa1157f]*/ { FlattenContext context; @@ -3217,11 +3217,11 @@ [clinic start generated code]*/ static PyObject * -_tkinter_create_impl(PyModuleDef *module, const char *screenName, +_tkinter_create_impl(PyObject *module, const char *screenName, const char *baseName, const char *className, int interactive, int wantobjects, int wantTk, int sync, const char *use) -/*[clinic end generated code: output=b8847800fc3b27eb input=0d522aad1cb0ca0e]*/ +/*[clinic end generated code: output=e3315607648e6bb4 input=0d522aad1cb0ca0e]*/ { /* XXX baseName is not used anymore; * try getting rid of it. */ @@ -3247,8 +3247,8 @@ [clinic start generated code]*/ static PyObject * -_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val) -/*[clinic end generated code: output=0b9d7ef7940461ea input=deca1d6f9e6dae47]*/ +_tkinter_setbusywaitinterval_impl(PyObject *module, int new_val) +/*[clinic end generated code: output=42bf7757dc2d0ab6 input=deca1d6f9e6dae47]*/ { if (new_val < 0) { PyErr_SetString(PyExc_ValueError, @@ -3266,8 +3266,8 @@ [clinic start generated code]*/ static int -_tkinter_getbusywaitinterval_impl(PyModuleDef *module) -/*[clinic end generated code: output=9d09eee026e96971 input=a695878d2d576a84]*/ +_tkinter_getbusywaitinterval_impl(PyObject *module) +/*[clinic end generated code: output=23b72d552001f5c7 input=a695878d2d576a84]*/ { return Tkinter_busywaitinterval; } diff --git a/Modules/_weakref.c b/Modules/_weakref.c --- a/Modules/_weakref.c +++ b/Modules/_weakref.c @@ -22,8 +22,8 @@ [clinic start generated code]*/ static Py_ssize_t -_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object) -/*[clinic end generated code: output=6a6ad0b98285e468 input=cedb69711b6a2507]*/ +_weakref_getweakrefcount_impl(PyObject *module, PyObject *object) +/*[clinic end generated code: output=301806d59558ff3e input=cedb69711b6a2507]*/ { PyWeakReference **list; diff --git a/Modules/_winapi.c b/Modules/_winapi.c --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -368,8 +368,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle) -/*[clinic end generated code: output=0548595c71cb4bf7 input=7f0e4ac36e0352b8]*/ +_winapi_CloseHandle_impl(PyObject *module, HANDLE handle) +/*[clinic end generated code: output=7ad37345f07bd782 input=7f0e4ac36e0352b8]*/ { BOOL success; @@ -391,9 +391,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, +_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle, int use_overlapped) -/*[clinic end generated code: output=fed3b165d1bca95a input=edc83da007ebf3be]*/ +/*[clinic end generated code: output=335a0e7086800671 input=edc83da007ebf3be]*/ { BOOL success; OverlappedObject *overlapped = NULL; @@ -443,12 +443,12 @@ [clinic start generated code]*/ static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, +_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file) -/*[clinic end generated code: output=c6e1d78f8affd10c input=6423c3e40372dbd5]*/ +/*[clinic end generated code: output=417ddcebfc5a3d53 input=6423c3e40372dbd5]*/ { HANDLE handle; @@ -474,9 +474,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, +_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, LPWSTR dst_path) -/*[clinic end generated code: output=eccae9364e46f6da input=8cd1f9964b6e3d36]*/ +/*[clinic end generated code: output=66b7eb746e1dfa25 input=8cd1f9964b6e3d36]*/ { /* Privilege adjustment */ HANDLE token = NULL; @@ -617,12 +617,12 @@ [clinic start generated code]*/ static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, - DWORD open_mode, DWORD pipe_mode, - DWORD max_instances, DWORD out_buffer_size, - DWORD in_buffer_size, DWORD default_timeout, +_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode, + DWORD pipe_mode, DWORD max_instances, + DWORD out_buffer_size, DWORD in_buffer_size, + DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes) -/*[clinic end generated code: output=44ca2a06a219b523 input=5a73530b84d8bc37]*/ +/*[clinic end generated code: output=80f8c07346a94fbc input=5a73530b84d8bc37]*/ { HANDLE handle; @@ -653,9 +653,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, - DWORD size) -/*[clinic end generated code: output=fef99f3b4222bc78 input=c4f2cfa56ef68d90]*/ +_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size) +/*[clinic end generated code: output=1c4411d8699f0925 input=c4f2cfa56ef68d90]*/ { HANDLE read_pipe; HANDLE write_pipe; @@ -814,13 +813,13 @@ [clinic start generated code]*/ static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, +_winapi_CreateProcess_impl(PyObject *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, Py_UNICODE *current_directory, PyObject *startup_info) -/*[clinic end generated code: output=874bb350ff9ed4ef input=4a43b05038d639bb]*/ +/*[clinic end generated code: output=4652a33aff4b0ae1 input=4a43b05038d639bb]*/ { BOOL result; PROCESS_INFORMATION pi; @@ -900,13 +899,12 @@ [clinic start generated code]*/ static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, - HANDLE source_process_handle, +_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options) -/*[clinic end generated code: output=0799515b68b5237b input=b933e3f2356a8c12]*/ +/*[clinic end generated code: output=ad9711397b5dcd4e input=b933e3f2356a8c12]*/ { HANDLE target_handle; BOOL result; @@ -940,8 +938,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode) -/*[clinic end generated code: output=25f3b499c24cedc8 input=4f05466a9406c558]*/ +_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode) +/*[clinic end generated code: output=a387deb651175301 input=4f05466a9406c558]*/ { #if defined(Py_DEBUG) SetErrorMode(SEM_FAILCRITICALERRORS|SEM_NOALIGNMENTFAULTEXCEPT| @@ -961,8 +959,8 @@ [clinic start generated code]*/ static HANDLE -_winapi_GetCurrentProcess_impl(PyModuleDef *module) -/*[clinic end generated code: output=be29ac3ad5f8291e input=b213403fd4b96b41]*/ +_winapi_GetCurrentProcess_impl(PyObject *module) +/*[clinic end generated code: output=ddeb4dd2ffadf344 input=b213403fd4b96b41]*/ { return GetCurrentProcess(); } @@ -977,8 +975,8 @@ [clinic start generated code]*/ static DWORD -_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process) -/*[clinic end generated code: output=0b10f0848a410f65 input=61b6bfc7dc2ee374]*/ +_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process) +/*[clinic end generated code: output=b4620bdf2bccf36b input=61b6bfc7dc2ee374]*/ { DWORD exit_code; BOOL result; @@ -998,8 +996,8 @@ [clinic start generated code]*/ static DWORD -_winapi_GetLastError_impl(PyModuleDef *module) -/*[clinic end generated code: output=0ea00d8e67bdd056 input=62d47fb9bce038ba]*/ +_winapi_GetLastError_impl(PyObject *module) +/*[clinic end generated code: output=8585b827cb1a92c5 input=62d47fb9bce038ba]*/ { return GetLastError(); } @@ -1021,8 +1019,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle) -/*[clinic end generated code: output=90063dc63bdbfa18 input=6d66ff7deca5d11f]*/ +_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle) +/*[clinic end generated code: output=85b4b728c5160306 input=6d66ff7deca5d11f]*/ { BOOL result; WCHAR filename[MAX_PATH]; @@ -1049,8 +1047,8 @@ [clinic start generated code]*/ static HANDLE -_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle) -/*[clinic end generated code: output=5f5ca28b28c6fad2 input=07016b06a2fc8826]*/ +_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle) +/*[clinic end generated code: output=0e613001e73ab614 input=07016b06a2fc8826]*/ { HANDLE handle; @@ -1071,8 +1069,8 @@ [clinic start generated code]*/ static long -_winapi_GetVersion_impl(PyModuleDef *module) -/*[clinic end generated code: output=95a2f8ad3b948ca8 input=e21dff8d0baeded2]*/ +_winapi_GetVersion_impl(PyObject *module) +/*[clinic end generated code: output=e41f0db5a3b82682 input=e21dff8d0baeded2]*/ /* Disable deprecation warnings about GetVersionEx as the result is being passed straight through to the caller, who is responsible for using it correctly. */ @@ -1095,9 +1093,9 @@ [clinic start generated code]*/ static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, +_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id) -/*[clinic end generated code: output=6bc52eda82a3d226 input=ec98c4cf4ea2ec36]*/ +/*[clinic end generated code: output=b42b6b81ea5a0fc3 input=ec98c4cf4ea2ec36]*/ { HANDLE handle; @@ -1119,8 +1117,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size) -/*[clinic end generated code: output=e6c908e2fb63c798 input=c7aa53bfbce69d70]*/ +_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size) +/*[clinic end generated code: output=d0c3e29e49d323dd input=c7aa53bfbce69d70]*/ { PyObject *buf = NULL; DWORD nread, navail, nleft; @@ -1167,9 +1165,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, +_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size, int use_overlapped) -/*[clinic end generated code: output=d7695db4db97b135 input=8dd810194e86ac7d]*/ +/*[clinic end generated code: output=492029ca98161d84 input=8dd810194e86ac7d]*/ { DWORD nread; PyObject *buf; @@ -1229,11 +1227,11 @@ [clinic start generated code]*/ static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, +_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout) -/*[clinic end generated code: output=25aa3c28dee223ce input=9142d72163d0faa6]*/ +/*[clinic end generated code: output=f2129d222cbfa095 input=9142d72163d0faa6]*/ { PyObject *oArgs[3] = {mode, max_collection_count, collect_data_timeout}; DWORD dwArgs[3], *pArgs[3] = {NULL, NULL, NULL}; @@ -1268,9 +1266,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, +_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle, UINT exit_code) -/*[clinic end generated code: output=937c1bb6219aca8b input=d6bc0aa1ee3bb4df]*/ +/*[clinic end generated code: output=f4e99ac3f0b1f34a input=d6bc0aa1ee3bb4df]*/ { BOOL result; @@ -1291,8 +1289,8 @@ [clinic start generated code]*/ static PyObject * -_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout) -/*[clinic end generated code: output=5bca5e02f448c9d7 input=36fc781291b1862c]*/ +_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout) +/*[clinic end generated code: output=c2866f4439b1fe38 input=36fc781291b1862c]*/ { BOOL success; @@ -1316,10 +1314,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, - PyObject *handle_seq, BOOL wait_flag, - DWORD milliseconds) -/*[clinic end generated code: output=acb440728d06d130 input=36f76ca057cd28a0]*/ +_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq, + BOOL wait_flag, DWORD milliseconds) +/*[clinic end generated code: output=295e3f00b8e45899 input=36f76ca057cd28a0]*/ { DWORD result; HANDLE handles[MAXIMUM_WAIT_OBJECTS]; @@ -1393,9 +1390,9 @@ [clinic start generated code]*/ static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, +_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle, DWORD milliseconds) -/*[clinic end generated code: output=34ae40c269749c48 input=443d1ab076edc7b1]*/ +/*[clinic end generated code: output=3c4715d8f1b39859 input=443d1ab076edc7b1]*/ { DWORD result; @@ -1420,9 +1417,9 @@ [clinic start generated code]*/ static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, +_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer, int use_overlapped) -/*[clinic end generated code: output=65e70ea41f4d2a1d input=51846a5af52053fd]*/ +/*[clinic end generated code: output=2ca80f6bf3fa92e3 input=51846a5af52053fd]*/ { Py_buffer _buf, *buf; DWORD len, written; diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1938,11 +1938,11 @@ [clinic start generated code]*/ static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, +array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items) -/*[clinic end generated code: output=6ecbf0e8e4d92ab9 input=2464dc8f4c7736b5]*/ +/*[clinic end generated code: output=e05263141ba28365 input=2464dc8f4c7736b5]*/ { PyObject *converted_items; PyObject *result; diff --git a/Modules/audioop.c b/Modules/audioop.c --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -409,9 +409,9 @@ [clinic start generated code]*/ static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width, Py_ssize_t index) -/*[clinic end generated code: output=3995e189fdc8ec16 input=88edbe2871393549]*/ +/*[clinic end generated code: output=8fe1b1775134f39a input=88edbe2871393549]*/ { int val; @@ -436,8 +436,8 @@ [clinic start generated code]*/ static PyObject * -audioop_max_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=85047ee1001f2305 input=32bea5ea0ac8c223]*/ +audioop_max_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=e6c5952714f1c3f0 input=32bea5ea0ac8c223]*/ { Py_ssize_t i; unsigned int absval, max = 0; @@ -464,8 +464,8 @@ [clinic start generated code]*/ static PyObject * -audioop_minmax_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=ae8f5513c64fd569 input=89848e9b927a0696]*/ +audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=473fda66b15c836e input=89848e9b927a0696]*/ { Py_ssize_t i; /* -1 trick below is needed on Windows to support -0x80000000 without @@ -493,8 +493,8 @@ [clinic start generated code]*/ static PyObject * -audioop_avg_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=7fccd645c95f4860 input=1114493c7611334d]*/ +audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=4410a4c12c3586e6 input=1114493c7611334d]*/ { Py_ssize_t i; int avg; @@ -522,8 +522,8 @@ [clinic start generated code]*/ static PyObject * -audioop_rms_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=7b398702c81b709d input=4cc57c6c94219d78]*/ +audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=1e7871c826445698 input=4cc57c6c94219d78]*/ { Py_ssize_t i; unsigned int res; @@ -596,9 +596,9 @@ [clinic start generated code]*/ static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfit_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=609eedf5d823d6dd input=62c305605e183c9a]*/ +/*[clinic end generated code: output=5752306d83cbbada input=62c305605e183c9a]*/ { const short *cp1, *cp2; Py_ssize_t len1, len2; @@ -665,9 +665,9 @@ [clinic start generated code]*/ static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference) -/*[clinic end generated code: output=5566a8c55de54f99 input=816680301d012b21]*/ +/*[clinic end generated code: output=14ea95652c1afcf8 input=816680301d012b21]*/ { const short *cp1, *cp2; Py_ssize_t len; @@ -707,9 +707,9 @@ [clinic start generated code]*/ static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findmax_impl(PyObject *module, Py_buffer *fragment, Py_ssize_t length) -/*[clinic end generated code: output=01fe796fad2573bb input=2f304801ed42383c]*/ +/*[clinic end generated code: output=f008128233523040 input=2f304801ed42383c]*/ { const short *cp1; Py_ssize_t len1; @@ -761,8 +761,8 @@ [clinic start generated code]*/ static PyObject * -audioop_avgpp_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=06c8380fd6e34207 input=0b3cceeae420a7d9]*/ +audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=269596b0d5ae0b2b input=0b3cceeae420a7d9]*/ { Py_ssize_t i; int prevval, prevextremevalid = 0, prevextreme = 0; @@ -818,8 +818,8 @@ [clinic start generated code]*/ static PyObject * -audioop_maxpp_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=c300c0bd7e8535c0 input=671a13e1518f80a1]*/ +audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=5b918ed5dbbdb978 input=671a13e1518f80a1]*/ { Py_ssize_t i; int prevval, prevextremevalid = 0, prevextreme = 0; @@ -871,8 +871,8 @@ [clinic start generated code]*/ static PyObject * -audioop_cross_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=99e6572d7d7cdbf1 input=b1b3f15b83f6b41a]*/ +audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=5938dcdd74a1f431 input=b1b3f15b83f6b41a]*/ { Py_ssize_t i; int prevval; @@ -902,9 +902,9 @@ [clinic start generated code]*/ static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width, double factor) -/*[clinic end generated code: output=1c7c31191ac86b10 input=c726667baa157d3c]*/ +/*[clinic end generated code: output=6cd48fe796da0ea4 input=c726667baa157d3c]*/ { signed char *ncp; Py_ssize_t i; @@ -944,9 +944,9 @@ [clinic start generated code]*/ static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=553f547c5e29e3b6 input=c4ec949b3f4dddfa]*/ +/*[clinic end generated code: output=235c8277216d4e4e input=c4ec949b3f4dddfa]*/ { signed char *cp, *ncp; Py_ssize_t len, i; @@ -993,9 +993,9 @@ [clinic start generated code]*/ static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor) -/*[clinic end generated code: output=697bb6ba41e9dd2c input=27b6395ebfdff37a]*/ +/*[clinic end generated code: output=046f13defa5f1595 input=27b6395ebfdff37a]*/ { signed char *ncp; Py_ssize_t i; @@ -1041,9 +1041,9 @@ [clinic start generated code]*/ static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, +audioop_add_impl(PyObject *module, Py_buffer *fragment1, Py_buffer *fragment2, int width) -/*[clinic end generated code: output=fe6c12f143e0b027 input=4a8d4bae4c1605c7]*/ +/*[clinic end generated code: output=60140af4d1aab6f2 input=4a8d4bae4c1605c7]*/ { signed char *ncp; Py_ssize_t i; @@ -1100,9 +1100,8 @@ [clinic start generated code]*/ static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, - int bias) -/*[clinic end generated code: output=ac1f4dda20a01c26 input=2b5cce5c3bb4838c]*/ +audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias) +/*[clinic end generated code: output=6e0aa8f68f045093 input=2b5cce5c3bb4838c]*/ { signed char *ncp; Py_ssize_t i; @@ -1160,8 +1159,8 @@ [clinic start generated code]*/ static PyObject * -audioop_reverse_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=6ec3c91337f5925e input=668f890cf9f9d225]*/ +audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=b44135698418da14 input=668f890cf9f9d225]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1193,8 +1192,8 @@ [clinic start generated code]*/ static PyObject * -audioop_byteswap_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=bfe4aa584b7a3f5b input=fae7611ceffa5c82]*/ +audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=50838a9e4b87cd4d input=fae7611ceffa5c82]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1228,9 +1227,9 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width, int newwidth) -/*[clinic end generated code: output=cb6ca950d1df9898 input=5ce08c8aa2f24d96]*/ +/*[clinic end generated code: output=17b14109248f1d99 input=5ce08c8aa2f24d96]*/ { unsigned char *ncp; Py_ssize_t i, j; @@ -1286,10 +1285,10 @@ [clinic start generated code]*/ static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB) -/*[clinic end generated code: output=59e1787bfa49b9d9 input=aff3acdc94476191]*/ +/*[clinic end generated code: output=624038e843243139 input=aff3acdc94476191]*/ { char *cp, *ncp; Py_ssize_t len; @@ -1467,8 +1466,8 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2ulaw_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=26263cc877c5e1bc input=2450d1b870b6bac2]*/ +audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=14fb62b16fe8ea8e input=2450d1b870b6bac2]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1500,8 +1499,8 @@ [clinic start generated code]*/ static PyObject * -audioop_ulaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=9864cb34e3a1d876 input=45d53ddce5be7d06]*/ +audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=378356b047521ba2 input=45d53ddce5be7d06]*/ { unsigned char *cp; signed char *ncp; @@ -1540,8 +1539,8 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2alaw_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=d5bf14bd0fe6fdcd input=ffb1ef8bb39da945]*/ +audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=d076f130121a82f0 input=ffb1ef8bb39da945]*/ { unsigned char *ncp; Py_ssize_t i; @@ -1573,8 +1572,8 @@ [clinic start generated code]*/ static PyObject * -audioop_alaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width) -/*[clinic end generated code: output=d2b604ddd036e1cd input=4140626046cd1772]*/ +audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width) +/*[clinic end generated code: output=85c365ec559df647 input=4140626046cd1772]*/ { unsigned char *cp; signed char *ncp; @@ -1615,9 +1614,9 @@ [clinic start generated code]*/ static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=93f0996f592b5ce5 input=12919d549b90c90a]*/ +/*[clinic end generated code: output=cc19f159f16c6793 input=12919d549b90c90a]*/ { signed char *ncp; Py_ssize_t i; @@ -1743,9 +1742,9 @@ [clinic start generated code]*/ static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state) -/*[clinic end generated code: output=236cf6dc2c829181 input=f5221144f5ca9ef0]*/ +/*[clinic end generated code: output=3440ea105acb3456 input=f5221144f5ca9ef0]*/ { signed char *cp; signed char *ncp; diff --git a/Modules/binascii.c b/Modules/binascii.c --- a/Modules/binascii.c +++ b/Modules/binascii.c @@ -253,8 +253,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=5779f39b0b48459f input=7cafeaf73df63d1c]*/ +binascii_a2b_uu_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=e027f8e0b0598742 input=7cafeaf73df63d1c]*/ { const unsigned char *ascii_data; unsigned char *bin_data; @@ -340,8 +340,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=181021b69bb9a414 input=00fdf458ce8b465b]*/ +binascii_b2a_uu_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=0070670e52e4aa6b input=00fdf458ce8b465b]*/ { unsigned char *ascii_data; const unsigned char *bin_data; @@ -425,8 +425,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=3e351b702bed56d2 input=5872acf6e1cac243]*/ +binascii_a2b_base64_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=0628223f19fd3f9b input=5872acf6e1cac243]*/ { const unsigned char *ascii_data; unsigned char *bin_data; @@ -522,8 +522,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline) -/*[clinic end generated code: output=19e1dd719a890b50 input=7b2ea6fa38d8924c]*/ +binascii_b2a_base64_impl(PyObject *module, Py_buffer *data, int newline) +/*[clinic end generated code: output=4ad62c8e8485d3b3 input=7b2ea6fa38d8924c]*/ { unsigned char *ascii_data; const unsigned char *bin_data; @@ -590,8 +590,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=60bcdbbd28b105cd input=0d914c680e0eed55]*/ +binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=4d6d8c54d54ea1c1 input=0d914c680e0eed55]*/ { const unsigned char *ascii_data; unsigned char *bin_data; @@ -669,8 +669,8 @@ [clinic start generated code]*/ static PyObject * -binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=0905da344dbf0648 input=e1f1712447a82b09]*/ +binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=393d79338f5f5629 input=e1f1712447a82b09]*/ { const unsigned char *in_data; unsigned char *out_data; @@ -731,8 +731,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=5a987810d5e3cdbb input=9596ebe019fe12ba]*/ +binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=d0aa5a704bc9f7de input=9596ebe019fe12ba]*/ { unsigned char *ascii_data; const unsigned char *bin_data; @@ -786,8 +786,8 @@ [clinic start generated code]*/ static PyObject * -binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=f7afd89b789946ab input=54cdd49fc014402c]*/ +binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=9826619565de1c6c input=54cdd49fc014402c]*/ { const unsigned char *in_data; unsigned char *out_data; @@ -904,8 +904,8 @@ [clinic start generated code]*/ static unsigned int -binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) -/*[clinic end generated code: output=167c2dac62625717 input=add8c53712ccceda]*/ +binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc) +/*[clinic end generated code: output=8ec2a78590d19170 input=add8c53712ccceda]*/ { const unsigned char *bin_data; Py_ssize_t len; @@ -1052,8 +1052,8 @@ [clinic start generated code]*/ static unsigned int -binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc) -/*[clinic end generated code: output=620a961643393c4f input=bbe340bc99d25aa8]*/ +binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc) +/*[clinic end generated code: output=52cf59056a78593b input=bbe340bc99d25aa8]*/ #ifdef USE_ZLIB_CRC32 /* This was taken from zlibmodule.c PyZlib_crc32 (but is PY_SSIZE_T_CLEAN) */ @@ -1100,8 +1100,8 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=179318922c2f8fda input=96423cfa299ff3b1]*/ +binascii_b2a_hex_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=92fec1a95c9897a0 input=96423cfa299ff3b1]*/ { return _Py_strhex_bytes((const char *)data->buf, data->len); } @@ -1115,8 +1115,8 @@ [clinic start generated code]*/ static PyObject * -binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data) -/*[clinic end generated code: output=6098440091fb61dc input=2e3afae7f083f061]*/ +binascii_hexlify_impl(PyObject *module, Py_buffer *data) +/*[clinic end generated code: output=749e95e53c14880c input=2e3afae7f083f061]*/ { return _Py_strhex_bytes((const char *)data->buf, data->len); } @@ -1149,8 +1149,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr) -/*[clinic end generated code: output=d61da452b5c6d290 input=9e1e7f2f94db24fd]*/ +binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr) +/*[clinic end generated code: output=0cc1a139af0eeecb input=9e1e7f2f94db24fd]*/ { const char* argbuf; Py_ssize_t arglen; @@ -1203,8 +1203,8 @@ [clinic start generated code]*/ static PyObject * -binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr) -/*[clinic end generated code: output=17cec7544499803e input=dd8c012725f462da]*/ +binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr) +/*[clinic end generated code: output=51a64c06c79629e3 input=dd8c012725f462da]*/ { return binascii_a2b_hex_impl(module, hexstr); } @@ -1235,8 +1235,8 @@ [clinic start generated code]*/ static PyObject * -binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header) -/*[clinic end generated code: output=a44ef88270352114 input=5187a0d3d8e54f3b]*/ +binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header) +/*[clinic end generated code: output=e99f7846cfb9bc53 input=5187a0d3d8e54f3b]*/ { Py_ssize_t in, out; char ch; @@ -1342,9 +1342,9 @@ [clinic start generated code]*/ static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, +binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs, int istext, int header) -/*[clinic end generated code: output=a87ca9ccb94e2a9f input=7f2a9aaa008e92b2]*/ +/*[clinic end generated code: output=e9884472ebb1a94c input=7f2a9aaa008e92b2]*/ { Py_ssize_t in, out; const unsigned char *databuf; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1847,8 +1847,8 @@ [clinic start generated code]*/ static PyObject * -_multibytecodec___create_codec(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=fbe74f6510640163 input=6840b2a6b183fcfa]*/ +_multibytecodec___create_codec(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=cfa3dce8260e809d input=6840b2a6b183fcfa]*/ { MultibyteCodecObject *self; MultibyteCodec *codec; diff --git a/Modules/clinic/_codecsmodule.c.h b/Modules/clinic/_codecsmodule.c.h --- a/Modules/clinic/_codecsmodule.c.h +++ b/Modules/clinic/_codecsmodule.c.h @@ -25,10 +25,10 @@ {"lookup", (PyCFunction)_codecs_lookup, METH_O, _codecs_lookup__doc__}, static PyObject * -_codecs_lookup_impl(PyModuleDef *module, const char *encoding); +_codecs_lookup_impl(PyObject *module, const char *encoding); static PyObject * -_codecs_lookup(PyModuleDef *module, PyObject *arg) +_codecs_lookup(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *encoding; @@ -58,11 +58,11 @@ {"encode", (PyCFunction)_codecs_encode, METH_VARARGS|METH_KEYWORDS, _codecs_encode__doc__}, static PyObject * -_codecs_encode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_encode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_encode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_codecs_encode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "encoding", "errors", NULL}; @@ -96,11 +96,11 @@ {"decode", (PyCFunction)_codecs_decode, METH_VARARGS|METH_KEYWORDS, _codecs_decode__doc__}, static PyObject * -_codecs_decode_impl(PyModuleDef *module, PyObject *obj, const char *encoding, +_codecs_decode_impl(PyObject *module, PyObject *obj, const char *encoding, const char *errors); static PyObject * -_codecs_decode(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_codecs_decode(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "encoding", "errors", NULL}; @@ -128,10 +128,10 @@ {"_forget_codec", (PyCFunction)_codecs__forget_codec, METH_O, _codecs__forget_codec__doc__}, static PyObject * -_codecs__forget_codec_impl(PyModuleDef *module, const char *encoding); +_codecs__forget_codec_impl(PyObject *module, const char *encoding); static PyObject * -_codecs__forget_codec(PyModuleDef *module, PyObject *arg) +_codecs__forget_codec(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *encoding; @@ -154,11 +154,11 @@ {"escape_decode", (PyCFunction)_codecs_escape_decode, METH_VARARGS, _codecs_escape_decode__doc__}, static PyObject * -_codecs_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -188,11 +188,11 @@ {"escape_encode", (PyCFunction)_codecs_escape_encode, METH_VARARGS, _codecs_escape_encode__doc__}, static PyObject * -_codecs_escape_encode_impl(PyModuleDef *module, PyObject *data, +_codecs_escape_encode_impl(PyObject *module, PyObject *data, const char *errors); static PyObject * -_codecs_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *data; @@ -217,11 +217,11 @@ {"unicode_internal_decode", (PyCFunction)_codecs_unicode_internal_decode, METH_VARARGS, _codecs_unicode_internal_decode__doc__}, static PyObject * -_codecs_unicode_internal_decode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_decode_impl(PyObject *module, PyObject *obj, const char *errors); static PyObject * -_codecs_unicode_internal_decode(PyModuleDef *module, PyObject *args) +_codecs_unicode_internal_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -246,11 +246,11 @@ {"utf_7_decode", (PyCFunction)_codecs_utf_7_decode, METH_VARARGS, _codecs_utf_7_decode__doc__}, static PyObject * -_codecs_utf_7_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_7_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_7_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_7_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -281,11 +281,11 @@ {"utf_8_decode", (PyCFunction)_codecs_utf_8_decode, METH_VARARGS, _codecs_utf_8_decode__doc__}, static PyObject * -_codecs_utf_8_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_8_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_8_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_8_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -316,11 +316,11 @@ {"utf_16_decode", (PyCFunction)_codecs_utf_16_decode, METH_VARARGS, _codecs_utf_16_decode__doc__}, static PyObject * -_codecs_utf_16_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -351,11 +351,11 @@ {"utf_16_le_decode", (PyCFunction)_codecs_utf_16_le_decode, METH_VARARGS, _codecs_utf_16_le_decode__doc__}, static PyObject * -_codecs_utf_16_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_le_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_le_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -386,11 +386,11 @@ {"utf_16_be_decode", (PyCFunction)_codecs_utf_16_be_decode, METH_VARARGS, _codecs_utf_16_be_decode__doc__}, static PyObject * -_codecs_utf_16_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_16_be_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_be_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -422,11 +422,11 @@ {"utf_16_ex_decode", (PyCFunction)_codecs_utf_16_ex_decode, METH_VARARGS, _codecs_utf_16_ex_decode__doc__}, static PyObject * -_codecs_utf_16_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_16_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final); static PyObject * -_codecs_utf_16_ex_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_ex_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -458,11 +458,11 @@ {"utf_32_decode", (PyCFunction)_codecs_utf_32_decode, METH_VARARGS, _codecs_utf_32_decode__doc__}, static PyObject * -_codecs_utf_32_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -493,11 +493,11 @@ {"utf_32_le_decode", (PyCFunction)_codecs_utf_32_le_decode, METH_VARARGS, _codecs_utf_32_le_decode__doc__}, static PyObject * -_codecs_utf_32_le_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_le_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_le_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_le_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -528,11 +528,11 @@ {"utf_32_be_decode", (PyCFunction)_codecs_utf_32_be_decode, METH_VARARGS, _codecs_utf_32_be_decode__doc__}, static PyObject * -_codecs_utf_32_be_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_be_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_utf_32_be_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_be_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -564,11 +564,11 @@ {"utf_32_ex_decode", (PyCFunction)_codecs_utf_32_ex_decode, METH_VARARGS, _codecs_utf_32_ex_decode__doc__}, static PyObject * -_codecs_utf_32_ex_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_utf_32_ex_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int byteorder, int final); static PyObject * -_codecs_utf_32_ex_decode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_ex_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -600,11 +600,11 @@ {"unicode_escape_decode", (PyCFunction)_codecs_unicode_escape_decode, METH_VARARGS, _codecs_unicode_escape_decode__doc__}, static PyObject * -_codecs_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_unicode_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_unicode_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -634,11 +634,11 @@ {"raw_unicode_escape_decode", (PyCFunction)_codecs_raw_unicode_escape_decode, METH_VARARGS, _codecs_raw_unicode_escape_decode__doc__}, static PyObject * -_codecs_raw_unicode_escape_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_raw_unicode_escape_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_raw_unicode_escape_decode(PyModuleDef *module, PyObject *args) +_codecs_raw_unicode_escape_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -668,11 +668,11 @@ {"latin_1_decode", (PyCFunction)_codecs_latin_1_decode, METH_VARARGS, _codecs_latin_1_decode__doc__}, static PyObject * -_codecs_latin_1_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_latin_1_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_latin_1_decode(PyModuleDef *module, PyObject *args) +_codecs_latin_1_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -702,11 +702,11 @@ {"ascii_decode", (PyCFunction)_codecs_ascii_decode, METH_VARARGS, _codecs_ascii_decode__doc__}, static PyObject * -_codecs_ascii_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_ascii_decode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_ascii_decode(PyModuleDef *module, PyObject *args) +_codecs_ascii_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -736,11 +736,11 @@ {"charmap_decode", (PyCFunction)_codecs_charmap_decode, METH_VARARGS, _codecs_charmap_decode__doc__}, static PyObject * -_codecs_charmap_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_charmap_decode_impl(PyObject *module, Py_buffer *data, const char *errors, PyObject *mapping); static PyObject * -_codecs_charmap_decode(PyModuleDef *module, PyObject *args) +_codecs_charmap_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -773,11 +773,11 @@ {"mbcs_decode", (PyCFunction)_codecs_mbcs_decode, METH_VARARGS, _codecs_mbcs_decode__doc__}, static PyObject * -_codecs_mbcs_decode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_mbcs_decode_impl(PyObject *module, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_mbcs_decode(PyModuleDef *module, PyObject *args) +_codecs_mbcs_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -812,11 +812,11 @@ {"code_page_decode", (PyCFunction)_codecs_code_page_decode, METH_VARARGS, _codecs_code_page_decode__doc__}, static PyObject * -_codecs_code_page_decode_impl(PyModuleDef *module, int codepage, +_codecs_code_page_decode_impl(PyObject *module, int codepage, Py_buffer *data, const char *errors, int final); static PyObject * -_codecs_code_page_decode(PyModuleDef *module, PyObject *args) +_codecs_code_page_decode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int codepage; @@ -850,11 +850,11 @@ {"readbuffer_encode", (PyCFunction)_codecs_readbuffer_encode, METH_VARARGS, _codecs_readbuffer_encode__doc__}, static PyObject * -_codecs_readbuffer_encode_impl(PyModuleDef *module, Py_buffer *data, +_codecs_readbuffer_encode_impl(PyObject *module, Py_buffer *data, const char *errors); static PyObject * -_codecs_readbuffer_encode(PyModuleDef *module, PyObject *args) +_codecs_readbuffer_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -884,11 +884,11 @@ {"unicode_internal_encode", (PyCFunction)_codecs_unicode_internal_encode, METH_VARARGS, _codecs_unicode_internal_encode__doc__}, static PyObject * -_codecs_unicode_internal_encode_impl(PyModuleDef *module, PyObject *obj, +_codecs_unicode_internal_encode_impl(PyObject *module, PyObject *obj, const char *errors); static PyObject * -_codecs_unicode_internal_encode(PyModuleDef *module, PyObject *args) +_codecs_unicode_internal_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -913,11 +913,11 @@ {"utf_7_encode", (PyCFunction)_codecs_utf_7_encode, METH_VARARGS, _codecs_utf_7_encode__doc__}, static PyObject * -_codecs_utf_7_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_7_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_7_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_7_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -942,11 +942,11 @@ {"utf_8_encode", (PyCFunction)_codecs_utf_8_encode, METH_VARARGS, _codecs_utf_8_encode__doc__}, static PyObject * -_codecs_utf_8_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_8_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_8_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_8_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -971,11 +971,11 @@ {"utf_16_encode", (PyCFunction)_codecs_utf_16_encode, METH_VARARGS, _codecs_utf_16_encode__doc__}, static PyObject * -_codecs_utf_16_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder); static PyObject * -_codecs_utf_16_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1001,11 +1001,11 @@ {"utf_16_le_encode", (PyCFunction)_codecs_utf_16_le_encode, METH_VARARGS, _codecs_utf_16_le_encode__doc__}, static PyObject * -_codecs_utf_16_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_le_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_16_le_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_le_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1030,11 +1030,11 @@ {"utf_16_be_encode", (PyCFunction)_codecs_utf_16_be_encode, METH_VARARGS, _codecs_utf_16_be_encode__doc__}, static PyObject * -_codecs_utf_16_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_16_be_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_16_be_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_16_be_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1059,11 +1059,11 @@ {"utf_32_encode", (PyCFunction)_codecs_utf_32_encode, METH_VARARGS, _codecs_utf_32_encode__doc__}, static PyObject * -_codecs_utf_32_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_encode_impl(PyObject *module, PyObject *str, const char *errors, int byteorder); static PyObject * -_codecs_utf_32_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1089,11 +1089,11 @@ {"utf_32_le_encode", (PyCFunction)_codecs_utf_32_le_encode, METH_VARARGS, _codecs_utf_32_le_encode__doc__}, static PyObject * -_codecs_utf_32_le_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_le_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_32_le_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_le_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1118,11 +1118,11 @@ {"utf_32_be_encode", (PyCFunction)_codecs_utf_32_be_encode, METH_VARARGS, _codecs_utf_32_be_encode__doc__}, static PyObject * -_codecs_utf_32_be_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_utf_32_be_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_utf_32_be_encode(PyModuleDef *module, PyObject *args) +_codecs_utf_32_be_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1147,11 +1147,11 @@ {"unicode_escape_encode", (PyCFunction)_codecs_unicode_escape_encode, METH_VARARGS, _codecs_unicode_escape_encode__doc__}, static PyObject * -_codecs_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_unicode_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_unicode_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1176,11 +1176,11 @@ {"raw_unicode_escape_encode", (PyCFunction)_codecs_raw_unicode_escape_encode, METH_VARARGS, _codecs_raw_unicode_escape_encode__doc__}, static PyObject * -_codecs_raw_unicode_escape_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_raw_unicode_escape_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_raw_unicode_escape_encode(PyModuleDef *module, PyObject *args) +_codecs_raw_unicode_escape_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1205,11 +1205,11 @@ {"latin_1_encode", (PyCFunction)_codecs_latin_1_encode, METH_VARARGS, _codecs_latin_1_encode__doc__}, static PyObject * -_codecs_latin_1_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_latin_1_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_latin_1_encode(PyModuleDef *module, PyObject *args) +_codecs_latin_1_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1234,11 +1234,11 @@ {"ascii_encode", (PyCFunction)_codecs_ascii_encode, METH_VARARGS, _codecs_ascii_encode__doc__}, static PyObject * -_codecs_ascii_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_ascii_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_ascii_encode(PyModuleDef *module, PyObject *args) +_codecs_ascii_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1263,11 +1263,11 @@ {"charmap_encode", (PyCFunction)_codecs_charmap_encode, METH_VARARGS, _codecs_charmap_encode__doc__}, static PyObject * -_codecs_charmap_encode_impl(PyModuleDef *module, PyObject *str, +_codecs_charmap_encode_impl(PyObject *module, PyObject *str, const char *errors, PyObject *mapping); static PyObject * -_codecs_charmap_encode(PyModuleDef *module, PyObject *args) +_codecs_charmap_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1293,10 +1293,10 @@ {"charmap_build", (PyCFunction)_codecs_charmap_build, METH_O, _codecs_charmap_build__doc__}, static PyObject * -_codecs_charmap_build_impl(PyModuleDef *module, PyObject *map); +_codecs_charmap_build_impl(PyObject *module, PyObject *map); static PyObject * -_codecs_charmap_build(PyModuleDef *module, PyObject *arg) +_codecs_charmap_build(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *map; @@ -1321,11 +1321,10 @@ {"mbcs_encode", (PyCFunction)_codecs_mbcs_encode, METH_VARARGS, _codecs_mbcs_encode__doc__}, static PyObject * -_codecs_mbcs_encode_impl(PyModuleDef *module, PyObject *str, - const char *errors); +_codecs_mbcs_encode_impl(PyObject *module, PyObject *str, const char *errors); static PyObject * -_codecs_mbcs_encode(PyModuleDef *module, PyObject *args) +_codecs_mbcs_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *str; @@ -1354,11 +1353,11 @@ {"code_page_encode", (PyCFunction)_codecs_code_page_encode, METH_VARARGS, _codecs_code_page_encode__doc__}, static PyObject * -_codecs_code_page_encode_impl(PyModuleDef *module, int code_page, - PyObject *str, const char *errors); +_codecs_code_page_encode_impl(PyObject *module, int code_page, PyObject *str, + const char *errors); static PyObject * -_codecs_code_page_encode(PyModuleDef *module, PyObject *args) +_codecs_code_page_encode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int code_page; @@ -1391,11 +1390,11 @@ {"register_error", (PyCFunction)_codecs_register_error, METH_VARARGS, _codecs_register_error__doc__}, static PyObject * -_codecs_register_error_impl(PyModuleDef *module, const char *errors, +_codecs_register_error_impl(PyObject *module, const char *errors, PyObject *handler); static PyObject * -_codecs_register_error(PyModuleDef *module, PyObject *args) +_codecs_register_error(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *errors; @@ -1424,10 +1423,10 @@ {"lookup_error", (PyCFunction)_codecs_lookup_error, METH_O, _codecs_lookup_error__doc__}, static PyObject * -_codecs_lookup_error_impl(PyModuleDef *module, const char *name); +_codecs_lookup_error_impl(PyObject *module, const char *name); static PyObject * -_codecs_lookup_error(PyModuleDef *module, PyObject *arg) +_codecs_lookup_error(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; const char *name; @@ -1456,4 +1455,4 @@ #ifndef _CODECS_CODE_PAGE_ENCODE_METHODDEF #define _CODECS_CODE_PAGE_ENCODE_METHODDEF #endif /* !defined(_CODECS_CODE_PAGE_ENCODE_METHODDEF) */ -/*[clinic end generated code: output=120320fe2ac32085 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6e89ff4423c12a9b input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_cryptmodule.c.h b/Modules/clinic/_cryptmodule.c.h --- a/Modules/clinic/_cryptmodule.c.h +++ b/Modules/clinic/_cryptmodule.c.h @@ -17,10 +17,10 @@ {"crypt", (PyCFunction)crypt_crypt, METH_VARARGS, crypt_crypt__doc__}, static PyObject * -crypt_crypt_impl(PyModuleDef *module, const char *word, const char *salt); +crypt_crypt_impl(PyObject *module, const char *word, const char *salt); static PyObject * -crypt_crypt(PyModuleDef *module, PyObject *args) +crypt_crypt(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *word; @@ -35,4 +35,4 @@ exit: return return_value; } -/*[clinic end generated code: output=6977cf9917d9a684 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8dfc88264e662df4 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_dbmmodule.c.h b/Modules/clinic/_dbmmodule.c.h --- a/Modules/clinic/_dbmmodule.c.h +++ b/Modules/clinic/_dbmmodule.c.h @@ -121,11 +121,11 @@ {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, static PyObject * -dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, +dbmopen_impl(PyObject *module, const char *filename, const char *flags, int mode); static PyObject * -dbmopen(PyModuleDef *module, PyObject *args) +dbmopen(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *filename; @@ -141,4 +141,4 @@ exit: return return_value; } -/*[clinic end generated code: output=97f8b6f542973b71 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=99adf966ef0475ff input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_gdbmmodule.c.h b/Modules/clinic/_gdbmmodule.c.h --- a/Modules/clinic/_gdbmmodule.c.h +++ b/Modules/clinic/_gdbmmodule.c.h @@ -234,11 +234,10 @@ {"open", (PyCFunction)dbmopen, METH_VARARGS, dbmopen__doc__}, static PyObject * -dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, - int mode); +dbmopen_impl(PyObject *module, const char *name, const char *flags, int mode); static PyObject * -dbmopen(PyModuleDef *module, PyObject *args) +dbmopen(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *name; @@ -254,4 +253,4 @@ exit: return return_value; } -/*[clinic end generated code: output=418849fb5dbe69a5 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ed0f5d4e3d79b80c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_lzmamodule.c.h b/Modules/clinic/_lzmamodule.c.h --- a/Modules/clinic/_lzmamodule.c.h +++ b/Modules/clinic/_lzmamodule.c.h @@ -168,10 +168,10 @@ {"is_check_supported", (PyCFunction)_lzma_is_check_supported, METH_O, _lzma_is_check_supported__doc__}, static PyObject * -_lzma_is_check_supported_impl(PyModuleDef *module, int check_id); +_lzma_is_check_supported_impl(PyObject *module, int check_id); static PyObject * -_lzma_is_check_supported(PyModuleDef *module, PyObject *arg) +_lzma_is_check_supported(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int check_id; @@ -197,10 +197,10 @@ {"_encode_filter_properties", (PyCFunction)_lzma__encode_filter_properties, METH_O, _lzma__encode_filter_properties__doc__}, static PyObject * -_lzma__encode_filter_properties_impl(PyModuleDef *module, lzma_filter filter); +_lzma__encode_filter_properties_impl(PyObject *module, lzma_filter filter); static PyObject * -_lzma__encode_filter_properties(PyModuleDef *module, PyObject *arg) +_lzma__encode_filter_properties(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; lzma_filter filter = {LZMA_VLI_UNKNOWN, NULL}; @@ -230,11 +230,11 @@ {"_decode_filter_properties", (PyCFunction)_lzma__decode_filter_properties, METH_VARARGS, _lzma__decode_filter_properties__doc__}, static PyObject * -_lzma__decode_filter_properties_impl(PyModuleDef *module, lzma_vli filter_id, +_lzma__decode_filter_properties_impl(PyObject *module, lzma_vli filter_id, Py_buffer *encoded_props); static PyObject * -_lzma__decode_filter_properties(PyModuleDef *module, PyObject *args) +_lzma__decode_filter_properties(PyObject *module, PyObject *args) { PyObject *return_value = NULL; lzma_vli filter_id; @@ -254,4 +254,4 @@ return return_value; } -/*[clinic end generated code: output=804aed7d196ba52e input=a9049054013a1b77]*/ +/*[clinic end generated code: output=25bf57a0845d147a input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_opcode.c.h b/Modules/clinic/_opcode.c.h --- a/Modules/clinic/_opcode.c.h +++ b/Modules/clinic/_opcode.c.h @@ -12,10 +12,10 @@ {"stack_effect", (PyCFunction)_opcode_stack_effect, METH_VARARGS, _opcode_stack_effect__doc__}, static int -_opcode_stack_effect_impl(PyModuleDef *module, int opcode, PyObject *oparg); +_opcode_stack_effect_impl(PyObject *module, int opcode, PyObject *oparg); static PyObject * -_opcode_stack_effect(PyModuleDef *module, PyObject *args) +_opcode_stack_effect(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int opcode; @@ -35,4 +35,4 @@ exit: return return_value; } -/*[clinic end generated code: output=5bd7c1c113e6526a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=4d91c6a765097853 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_pickle.c.h b/Modules/clinic/_pickle.c.h --- a/Modules/clinic/_pickle.c.h +++ b/Modules/clinic/_pickle.c.h @@ -385,11 +385,11 @@ {"dump", (PyCFunction)_pickle_dump, METH_VARARGS|METH_KEYWORDS, _pickle_dump__doc__}, static PyObject * -_pickle_dump_impl(PyModuleDef *module, PyObject *obj, PyObject *file, +_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dump(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_dump(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "file", "protocol", "fix_imports", NULL}; @@ -430,11 +430,11 @@ {"dumps", (PyCFunction)_pickle_dumps, METH_VARARGS|METH_KEYWORDS, _pickle_dumps__doc__}, static PyObject * -_pickle_dumps_impl(PyModuleDef *module, PyObject *obj, PyObject *protocol, +_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol, int fix_imports); static PyObject * -_pickle_dumps(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_dumps(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"obj", "protocol", "fix_imports", NULL}; @@ -485,11 +485,11 @@ {"load", (PyCFunction)_pickle_load, METH_VARARGS|METH_KEYWORDS, _pickle_load__doc__}, static PyObject * -_pickle_load_impl(PyModuleDef *module, PyObject *file, int fix_imports, +_pickle_load_impl(PyObject *module, PyObject *file, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_load(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_load(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"file", "fix_imports", "encoding", "errors", NULL}; @@ -532,11 +532,11 @@ {"loads", (PyCFunction)_pickle_loads, METH_VARARGS|METH_KEYWORDS, _pickle_loads__doc__}, static PyObject * -_pickle_loads_impl(PyModuleDef *module, PyObject *data, int fix_imports, +_pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports, const char *encoding, const char *errors); static PyObject * -_pickle_loads(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_pickle_loads(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "fix_imports", "encoding", "errors", NULL}; @@ -554,4 +554,4 @@ exit: return return_value; } -/*[clinic end generated code: output=5e972f339d197760 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=5c5f9149df292ce4 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_sre.c.h b/Modules/clinic/_sre.c.h --- a/Modules/clinic/_sre.c.h +++ b/Modules/clinic/_sre.c.h @@ -11,10 +11,10 @@ {"getcodesize", (PyCFunction)_sre_getcodesize, METH_NOARGS, _sre_getcodesize__doc__}, static int -_sre_getcodesize_impl(PyModuleDef *module); +_sre_getcodesize_impl(PyObject *module); static PyObject * -_sre_getcodesize(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_sre_getcodesize(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; int _return_value; @@ -38,10 +38,10 @@ {"getlower", (PyCFunction)_sre_getlower, METH_VARARGS, _sre_getlower__doc__}, static int -_sre_getlower_impl(PyModuleDef *module, int character, int flags); +_sre_getlower_impl(PyObject *module, int character, int flags); static PyObject * -_sre_getlower(PyModuleDef *module, PyObject *args) +_sre_getlower(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int character; @@ -419,12 +419,12 @@ {"compile", (PyCFunction)_sre_compile, METH_VARARGS|METH_KEYWORDS, _sre_compile__doc__}, static PyObject * -_sre_compile_impl(PyModuleDef *module, PyObject *pattern, int flags, +_sre_compile_impl(PyObject *module, PyObject *pattern, int flags, PyObject *code, Py_ssize_t groups, PyObject *groupindex, PyObject *indexgroup); static PyObject * -_sre_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sre_compile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pattern", "flags", "code", "groups", "groupindex", "indexgroup", NULL}; @@ -713,4 +713,4 @@ { return _sre_SRE_Scanner_search_impl(self); } -/*[clinic end generated code: output=00f7bf869b3283bc input=a9049054013a1b77]*/ +/*[clinic end generated code: output=af9455cb54b2a907 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_ssl.c.h b/Modules/clinic/_ssl.c.h --- a/Modules/clinic/_ssl.c.h +++ b/Modules/clinic/_ssl.c.h @@ -28,10 +28,10 @@ {"_test_decode_cert", (PyCFunction)_ssl__test_decode_cert, METH_O, _ssl__test_decode_cert__doc__}, static PyObject * -_ssl__test_decode_cert_impl(PyModuleDef *module, PyObject *path); +_ssl__test_decode_cert_impl(PyObject *module, PyObject *path); static PyObject * -_ssl__test_decode_cert(PyModuleDef *module, PyObject *arg) +_ssl__test_decode_cert(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -819,10 +819,10 @@ {"RAND_add", (PyCFunction)_ssl_RAND_add, METH_VARARGS, _ssl_RAND_add__doc__}, static PyObject * -_ssl_RAND_add_impl(PyModuleDef *module, Py_buffer *view, double entropy); +_ssl_RAND_add_impl(PyObject *module, Py_buffer *view, double entropy); static PyObject * -_ssl_RAND_add(PyModuleDef *module, PyObject *args) +_ssl_RAND_add(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer view = {NULL, NULL}; @@ -853,10 +853,10 @@ {"RAND_bytes", (PyCFunction)_ssl_RAND_bytes, METH_O, _ssl_RAND_bytes__doc__}, static PyObject * -_ssl_RAND_bytes_impl(PyModuleDef *module, int n); +_ssl_RAND_bytes_impl(PyObject *module, int n); static PyObject * -_ssl_RAND_bytes(PyModuleDef *module, PyObject *arg) +_ssl_RAND_bytes(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int n; @@ -883,10 +883,10 @@ {"RAND_pseudo_bytes", (PyCFunction)_ssl_RAND_pseudo_bytes, METH_O, _ssl_RAND_pseudo_bytes__doc__}, static PyObject * -_ssl_RAND_pseudo_bytes_impl(PyModuleDef *module, int n); +_ssl_RAND_pseudo_bytes_impl(PyObject *module, int n); static PyObject * -_ssl_RAND_pseudo_bytes(PyModuleDef *module, PyObject *arg) +_ssl_RAND_pseudo_bytes(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int n; @@ -913,10 +913,10 @@ {"RAND_status", (PyCFunction)_ssl_RAND_status, METH_NOARGS, _ssl_RAND_status__doc__}, static PyObject * -_ssl_RAND_status_impl(PyModuleDef *module); +_ssl_RAND_status_impl(PyObject *module); static PyObject * -_ssl_RAND_status(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_ssl_RAND_status(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _ssl_RAND_status_impl(module); } @@ -936,10 +936,10 @@ {"RAND_egd", (PyCFunction)_ssl_RAND_egd, METH_O, _ssl_RAND_egd__doc__}, static PyObject * -_ssl_RAND_egd_impl(PyModuleDef *module, PyObject *path); +_ssl_RAND_egd_impl(PyObject *module, PyObject *path); static PyObject * -_ssl_RAND_egd(PyModuleDef *module, PyObject *arg) +_ssl_RAND_egd(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -967,10 +967,10 @@ {"get_default_verify_paths", (PyCFunction)_ssl_get_default_verify_paths, METH_NOARGS, _ssl_get_default_verify_paths__doc__}, static PyObject * -_ssl_get_default_verify_paths_impl(PyModuleDef *module); +_ssl_get_default_verify_paths_impl(PyObject *module); static PyObject * -_ssl_get_default_verify_paths(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_ssl_get_default_verify_paths(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _ssl_get_default_verify_paths_impl(module); } @@ -988,10 +988,10 @@ {"txt2obj", (PyCFunction)_ssl_txt2obj, METH_VARARGS|METH_KEYWORDS, _ssl_txt2obj__doc__}, static PyObject * -_ssl_txt2obj_impl(PyModuleDef *module, const char *txt, int name); +_ssl_txt2obj_impl(PyObject *module, const char *txt, int name); static PyObject * -_ssl_txt2obj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_txt2obj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"txt", "name", NULL}; @@ -1018,10 +1018,10 @@ {"nid2obj", (PyCFunction)_ssl_nid2obj, METH_O, _ssl_nid2obj__doc__}, static PyObject * -_ssl_nid2obj_impl(PyModuleDef *module, int nid); +_ssl_nid2obj_impl(PyObject *module, int nid); static PyObject * -_ssl_nid2obj(PyModuleDef *module, PyObject *arg) +_ssl_nid2obj(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int nid; @@ -1053,10 +1053,10 @@ {"enum_certificates", (PyCFunction)_ssl_enum_certificates, METH_VARARGS|METH_KEYWORDS, _ssl_enum_certificates__doc__}, static PyObject * -_ssl_enum_certificates_impl(PyModuleDef *module, const char *store_name); +_ssl_enum_certificates_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_certificates(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_enum_certificates(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"store_name", NULL}; @@ -1091,10 +1091,10 @@ {"enum_crls", (PyCFunction)_ssl_enum_crls, METH_VARARGS|METH_KEYWORDS, _ssl_enum_crls__doc__}, static PyObject * -_ssl_enum_crls_impl(PyModuleDef *module, const char *store_name); +_ssl_enum_crls_impl(PyObject *module, const char *store_name); static PyObject * -_ssl_enum_crls(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_ssl_enum_crls(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"store_name", NULL}; @@ -1135,4 +1135,4 @@ #ifndef _SSL_ENUM_CRLS_METHODDEF #define _SSL_ENUM_CRLS_METHODDEF #endif /* !defined(_SSL_ENUM_CRLS_METHODDEF) */ -/*[clinic end generated code: output=df99659ec790e573 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=02444732c19722b3 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_tkinter.c.h b/Modules/clinic/_tkinter.c.h --- a/Modules/clinic/_tkinter.c.h +++ b/Modules/clinic/_tkinter.c.h @@ -546,13 +546,13 @@ {"create", (PyCFunction)_tkinter_create, METH_VARARGS, _tkinter_create__doc__}, static PyObject * -_tkinter_create_impl(PyModuleDef *module, const char *screenName, +_tkinter_create_impl(PyObject *module, const char *screenName, const char *baseName, const char *className, int interactive, int wantobjects, int wantTk, int sync, const char *use); static PyObject * -_tkinter_create(PyModuleDef *module, PyObject *args) +_tkinter_create(PyObject *module, PyObject *args) { PyObject *return_value = NULL; const char *screenName = NULL; @@ -586,10 +586,10 @@ {"setbusywaitinterval", (PyCFunction)_tkinter_setbusywaitinterval, METH_O, _tkinter_setbusywaitinterval__doc__}, static PyObject * -_tkinter_setbusywaitinterval_impl(PyModuleDef *module, int new_val); +_tkinter_setbusywaitinterval_impl(PyObject *module, int new_val); static PyObject * -_tkinter_setbusywaitinterval(PyModuleDef *module, PyObject *arg) +_tkinter_setbusywaitinterval(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int new_val; @@ -613,10 +613,10 @@ {"getbusywaitinterval", (PyCFunction)_tkinter_getbusywaitinterval, METH_NOARGS, _tkinter_getbusywaitinterval__doc__}, static int -_tkinter_getbusywaitinterval_impl(PyModuleDef *module); +_tkinter_getbusywaitinterval_impl(PyObject *module); static PyObject * -_tkinter_getbusywaitinterval(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_tkinter_getbusywaitinterval(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; int _return_value; @@ -638,4 +638,4 @@ #ifndef _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #define _TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF #endif /* !defined(_TKINTER_TKAPP_DELETEFILEHANDLER_METHODDEF) */ -/*[clinic end generated code: output=13be3f8313bba3c7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=836c578b71d69097 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_weakref.c.h b/Modules/clinic/_weakref.c.h --- a/Modules/clinic/_weakref.c.h +++ b/Modules/clinic/_weakref.c.h @@ -12,10 +12,10 @@ {"getweakrefcount", (PyCFunction)_weakref_getweakrefcount, METH_O, _weakref_getweakrefcount__doc__}, static Py_ssize_t -_weakref_getweakrefcount_impl(PyModuleDef *module, PyObject *object); +_weakref_getweakrefcount_impl(PyObject *module, PyObject *object); static PyObject * -_weakref_getweakrefcount(PyModuleDef *module, PyObject *object) +_weakref_getweakrefcount(PyObject *module, PyObject *object) { PyObject *return_value = NULL; Py_ssize_t _return_value; @@ -29,4 +29,4 @@ exit: return return_value; } -/*[clinic end generated code: output=00e317cda5359ea3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e1ad587147323e19 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -72,10 +72,10 @@ {"CloseHandle", (PyCFunction)_winapi_CloseHandle, METH_O, _winapi_CloseHandle__doc__}, static PyObject * -_winapi_CloseHandle_impl(PyModuleDef *module, HANDLE handle); +_winapi_CloseHandle_impl(PyObject *module, HANDLE handle); static PyObject * -_winapi_CloseHandle(PyModuleDef *module, PyObject *arg) +_winapi_CloseHandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HANDLE handle; @@ -98,11 +98,11 @@ {"ConnectNamedPipe", (PyCFunction)_winapi_ConnectNamedPipe, METH_VARARGS|METH_KEYWORDS, _winapi_ConnectNamedPipe__doc__}, static PyObject * -_winapi_ConnectNamedPipe_impl(PyModuleDef *module, HANDLE handle, +_winapi_ConnectNamedPipe_impl(PyObject *module, HANDLE handle, int use_overlapped); static PyObject * -_winapi_ConnectNamedPipe(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_ConnectNamedPipe(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "overlapped", NULL}; @@ -130,14 +130,14 @@ {"CreateFile", (PyCFunction)_winapi_CreateFile, METH_VARARGS, _winapi_CreateFile__doc__}, static HANDLE -_winapi_CreateFile_impl(PyModuleDef *module, LPCTSTR file_name, +_winapi_CreateFile_impl(PyObject *module, LPCTSTR file_name, DWORD desired_access, DWORD share_mode, LPSECURITY_ATTRIBUTES security_attributes, DWORD creation_disposition, DWORD flags_and_attributes, HANDLE template_file); static PyObject * -_winapi_CreateFile(PyModuleDef *module, PyObject *args) +_winapi_CreateFile(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR file_name; @@ -175,11 +175,11 @@ {"CreateJunction", (PyCFunction)_winapi_CreateJunction, METH_VARARGS, _winapi_CreateJunction__doc__}, static PyObject * -_winapi_CreateJunction_impl(PyModuleDef *module, LPWSTR src_path, +_winapi_CreateJunction_impl(PyObject *module, LPWSTR src_path, LPWSTR dst_path); static PyObject * -_winapi_CreateJunction(PyModuleDef *module, PyObject *args) +_winapi_CreateJunction(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPWSTR src_path; @@ -206,14 +206,14 @@ {"CreateNamedPipe", (PyCFunction)_winapi_CreateNamedPipe, METH_VARARGS, _winapi_CreateNamedPipe__doc__}, static HANDLE -_winapi_CreateNamedPipe_impl(PyModuleDef *module, LPCTSTR name, - DWORD open_mode, DWORD pipe_mode, - DWORD max_instances, DWORD out_buffer_size, - DWORD in_buffer_size, DWORD default_timeout, +_winapi_CreateNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD open_mode, + DWORD pipe_mode, DWORD max_instances, + DWORD out_buffer_size, DWORD in_buffer_size, + DWORD default_timeout, LPSECURITY_ATTRIBUTES security_attributes); static PyObject * -_winapi_CreateNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_CreateNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR name; @@ -258,11 +258,10 @@ {"CreatePipe", (PyCFunction)_winapi_CreatePipe, METH_VARARGS, _winapi_CreatePipe__doc__}, static PyObject * -_winapi_CreatePipe_impl(PyModuleDef *module, PyObject *pipe_attrs, - DWORD size); +_winapi_CreatePipe_impl(PyObject *module, PyObject *pipe_attrs, DWORD size); static PyObject * -_winapi_CreatePipe(PyModuleDef *module, PyObject *args) +_winapi_CreatePipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *pipe_attrs; @@ -298,7 +297,7 @@ {"CreateProcess", (PyCFunction)_winapi_CreateProcess, METH_VARARGS, _winapi_CreateProcess__doc__}, static PyObject * -_winapi_CreateProcess_impl(PyModuleDef *module, Py_UNICODE *application_name, +_winapi_CreateProcess_impl(PyObject *module, Py_UNICODE *application_name, Py_UNICODE *command_line, PyObject *proc_attrs, PyObject *thread_attrs, BOOL inherit_handles, DWORD creation_flags, PyObject *env_mapping, @@ -306,7 +305,7 @@ PyObject *startup_info); static PyObject * -_winapi_CreateProcess(PyModuleDef *module, PyObject *args) +_winapi_CreateProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *application_name; @@ -345,15 +344,14 @@ {"DuplicateHandle", (PyCFunction)_winapi_DuplicateHandle, METH_VARARGS, _winapi_DuplicateHandle__doc__}, static HANDLE -_winapi_DuplicateHandle_impl(PyModuleDef *module, - HANDLE source_process_handle, +_winapi_DuplicateHandle_impl(PyObject *module, HANDLE source_process_handle, HANDLE source_handle, HANDLE target_process_handle, DWORD desired_access, BOOL inherit_handle, DWORD options); static PyObject * -_winapi_DuplicateHandle(PyModuleDef *module, PyObject *args) +_winapi_DuplicateHandle(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE source_process_handle; @@ -390,10 +388,10 @@ {"ExitProcess", (PyCFunction)_winapi_ExitProcess, METH_O, _winapi_ExitProcess__doc__}, static PyObject * -_winapi_ExitProcess_impl(PyModuleDef *module, UINT ExitCode); +_winapi_ExitProcess_impl(PyObject *module, UINT ExitCode); static PyObject * -_winapi_ExitProcess(PyModuleDef *module, PyObject *arg) +_winapi_ExitProcess(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; UINT ExitCode; @@ -417,10 +415,10 @@ {"GetCurrentProcess", (PyCFunction)_winapi_GetCurrentProcess, METH_NOARGS, _winapi_GetCurrentProcess__doc__}, static HANDLE -_winapi_GetCurrentProcess_impl(PyModuleDef *module); +_winapi_GetCurrentProcess_impl(PyObject *module); static PyObject * -_winapi_GetCurrentProcess(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetCurrentProcess(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; HANDLE _return_value; @@ -448,10 +446,10 @@ {"GetExitCodeProcess", (PyCFunction)_winapi_GetExitCodeProcess, METH_O, _winapi_GetExitCodeProcess__doc__}, static DWORD -_winapi_GetExitCodeProcess_impl(PyModuleDef *module, HANDLE process); +_winapi_GetExitCodeProcess_impl(PyObject *module, HANDLE process); static PyObject * -_winapi_GetExitCodeProcess(PyModuleDef *module, PyObject *arg) +_winapi_GetExitCodeProcess(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HANDLE process; @@ -479,10 +477,10 @@ {"GetLastError", (PyCFunction)_winapi_GetLastError, METH_NOARGS, _winapi_GetLastError__doc__}, static DWORD -_winapi_GetLastError_impl(PyModuleDef *module); +_winapi_GetLastError_impl(PyObject *module); static PyObject * -_winapi_GetLastError(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetLastError(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; DWORD _return_value; @@ -514,10 +512,10 @@ {"GetModuleFileName", (PyCFunction)_winapi_GetModuleFileName, METH_O, _winapi_GetModuleFileName__doc__}, static PyObject * -_winapi_GetModuleFileName_impl(PyModuleDef *module, HMODULE module_handle); +_winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle); static PyObject * -_winapi_GetModuleFileName(PyModuleDef *module, PyObject *arg) +_winapi_GetModuleFileName(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HMODULE module_handle; @@ -546,10 +544,10 @@ {"GetStdHandle", (PyCFunction)_winapi_GetStdHandle, METH_O, _winapi_GetStdHandle__doc__}, static HANDLE -_winapi_GetStdHandle_impl(PyModuleDef *module, DWORD std_handle); +_winapi_GetStdHandle_impl(PyObject *module, DWORD std_handle); static PyObject * -_winapi_GetStdHandle(PyModuleDef *module, PyObject *arg) +_winapi_GetStdHandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; DWORD std_handle; @@ -581,10 +579,10 @@ {"GetVersion", (PyCFunction)_winapi_GetVersion, METH_NOARGS, _winapi_GetVersion__doc__}, static long -_winapi_GetVersion_impl(PyModuleDef *module); +_winapi_GetVersion_impl(PyObject *module); static PyObject * -_winapi_GetVersion(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_winapi_GetVersion(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; long _return_value; @@ -608,11 +606,11 @@ {"OpenProcess", (PyCFunction)_winapi_OpenProcess, METH_VARARGS, _winapi_OpenProcess__doc__}, static HANDLE -_winapi_OpenProcess_impl(PyModuleDef *module, DWORD desired_access, +_winapi_OpenProcess_impl(PyObject *module, DWORD desired_access, BOOL inherit_handle, DWORD process_id); static PyObject * -_winapi_OpenProcess(PyModuleDef *module, PyObject *args) +_winapi_OpenProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; DWORD desired_access; @@ -646,10 +644,10 @@ {"PeekNamedPipe", (PyCFunction)_winapi_PeekNamedPipe, METH_VARARGS, _winapi_PeekNamedPipe__doc__}, static PyObject * -_winapi_PeekNamedPipe_impl(PyModuleDef *module, HANDLE handle, int size); +_winapi_PeekNamedPipe_impl(PyObject *module, HANDLE handle, int size); static PyObject * -_winapi_PeekNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_PeekNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -674,11 +672,11 @@ {"ReadFile", (PyCFunction)_winapi_ReadFile, METH_VARARGS|METH_KEYWORDS, _winapi_ReadFile__doc__}, static PyObject * -_winapi_ReadFile_impl(PyModuleDef *module, HANDLE handle, int size, +_winapi_ReadFile_impl(PyObject *module, HANDLE handle, int size, int use_overlapped); static PyObject * -_winapi_ReadFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_ReadFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "size", "overlapped", NULL}; @@ -706,13 +704,13 @@ {"SetNamedPipeHandleState", (PyCFunction)_winapi_SetNamedPipeHandleState, METH_VARARGS, _winapi_SetNamedPipeHandleState__doc__}, static PyObject * -_winapi_SetNamedPipeHandleState_impl(PyModuleDef *module, HANDLE named_pipe, +_winapi_SetNamedPipeHandleState_impl(PyObject *module, HANDLE named_pipe, PyObject *mode, PyObject *max_collection_count, PyObject *collect_data_timeout); static PyObject * -_winapi_SetNamedPipeHandleState(PyModuleDef *module, PyObject *args) +_winapi_SetNamedPipeHandleState(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE named_pipe; @@ -740,11 +738,11 @@ {"TerminateProcess", (PyCFunction)_winapi_TerminateProcess, METH_VARARGS, _winapi_TerminateProcess__doc__}, static PyObject * -_winapi_TerminateProcess_impl(PyModuleDef *module, HANDLE handle, +_winapi_TerminateProcess_impl(PyObject *module, HANDLE handle, UINT exit_code); static PyObject * -_winapi_TerminateProcess(PyModuleDef *module, PyObject *args) +_winapi_TerminateProcess(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -769,10 +767,10 @@ {"WaitNamedPipe", (PyCFunction)_winapi_WaitNamedPipe, METH_VARARGS, _winapi_WaitNamedPipe__doc__}, static PyObject * -_winapi_WaitNamedPipe_impl(PyModuleDef *module, LPCTSTR name, DWORD timeout); +_winapi_WaitNamedPipe_impl(PyObject *module, LPCTSTR name, DWORD timeout); static PyObject * -_winapi_WaitNamedPipe(PyModuleDef *module, PyObject *args) +_winapi_WaitNamedPipe(PyObject *module, PyObject *args) { PyObject *return_value = NULL; LPCTSTR name; @@ -798,12 +796,11 @@ {"WaitForMultipleObjects", (PyCFunction)_winapi_WaitForMultipleObjects, METH_VARARGS, _winapi_WaitForMultipleObjects__doc__}, static PyObject * -_winapi_WaitForMultipleObjects_impl(PyModuleDef *module, - PyObject *handle_seq, BOOL wait_flag, - DWORD milliseconds); +_winapi_WaitForMultipleObjects_impl(PyObject *module, PyObject *handle_seq, + BOOL wait_flag, DWORD milliseconds); static PyObject * -_winapi_WaitForMultipleObjects(PyModuleDef *module, PyObject *args) +_winapi_WaitForMultipleObjects(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *handle_seq; @@ -834,11 +831,11 @@ {"WaitForSingleObject", (PyCFunction)_winapi_WaitForSingleObject, METH_VARARGS, _winapi_WaitForSingleObject__doc__}, static long -_winapi_WaitForSingleObject_impl(PyModuleDef *module, HANDLE handle, +_winapi_WaitForSingleObject_impl(PyObject *module, HANDLE handle, DWORD milliseconds); static PyObject * -_winapi_WaitForSingleObject(PyModuleDef *module, PyObject *args) +_winapi_WaitForSingleObject(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HANDLE handle; @@ -868,11 +865,11 @@ {"WriteFile", (PyCFunction)_winapi_WriteFile, METH_VARARGS|METH_KEYWORDS, _winapi_WriteFile__doc__}, static PyObject * -_winapi_WriteFile_impl(PyModuleDef *module, HANDLE handle, PyObject *buffer, +_winapi_WriteFile_impl(PyObject *module, HANDLE handle, PyObject *buffer, int use_overlapped); static PyObject * -_winapi_WriteFile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_winapi_WriteFile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"handle", "buffer", "overlapped", NULL}; @@ -889,4 +886,4 @@ exit: return return_value; } -/*[clinic end generated code: output=d099ee4fbcdd5bc0 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8032f3371c14749e input=a9049054013a1b77]*/ diff --git a/Modules/clinic/arraymodule.c.h b/Modules/clinic/arraymodule.c.h --- a/Modules/clinic/arraymodule.c.h +++ b/Modules/clinic/arraymodule.c.h @@ -446,13 +446,13 @@ {"_array_reconstructor", (PyCFunction)array__array_reconstructor, METH_VARARGS, array__array_reconstructor__doc__}, static PyObject * -array__array_reconstructor_impl(PyModuleDef *module, PyTypeObject *arraytype, +array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, int typecode, enum machine_format_code mformat_code, PyObject *items); static PyObject * -array__array_reconstructor(PyModuleDef *module, PyObject *args) +array__array_reconstructor(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyTypeObject *arraytype; @@ -505,4 +505,4 @@ #define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \ {"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__}, -/*[clinic end generated code: output=0b99c89275eda265 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=b2054fb764c8cc64 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/audioop.c.h b/Modules/clinic/audioop.c.h --- a/Modules/clinic/audioop.c.h +++ b/Modules/clinic/audioop.c.h @@ -12,11 +12,11 @@ {"getsample", (PyCFunction)audioop_getsample, METH_VARARGS, audioop_getsample__doc__}, static PyObject * -audioop_getsample_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width, Py_ssize_t index); static PyObject * -audioop_getsample(PyModuleDef *module, PyObject *args) +audioop_getsample(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -48,10 +48,10 @@ {"max", (PyCFunction)audioop_max, METH_VARARGS, audioop_max__doc__}, static PyObject * -audioop_max_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_max_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_max(PyModuleDef *module, PyObject *args) +audioop_max(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -82,10 +82,10 @@ {"minmax", (PyCFunction)audioop_minmax, METH_VARARGS, audioop_minmax__doc__}, static PyObject * -audioop_minmax_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_minmax(PyModuleDef *module, PyObject *args) +audioop_minmax(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -116,10 +116,10 @@ {"avg", (PyCFunction)audioop_avg, METH_VARARGS, audioop_avg__doc__}, static PyObject * -audioop_avg_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_avg(PyModuleDef *module, PyObject *args) +audioop_avg(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -150,10 +150,10 @@ {"rms", (PyCFunction)audioop_rms, METH_VARARGS, audioop_rms__doc__}, static PyObject * -audioop_rms_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_rms(PyModuleDef *module, PyObject *args) +audioop_rms(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -184,11 +184,11 @@ {"findfit", (PyCFunction)audioop_findfit, METH_VARARGS, audioop_findfit__doc__}, static PyObject * -audioop_findfit_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfit_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference); static PyObject * -audioop_findfit(PyModuleDef *module, PyObject *args) +audioop_findfit(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -223,11 +223,11 @@ {"findfactor", (PyCFunction)audioop_findfactor, METH_VARARGS, audioop_findfactor__doc__}, static PyObject * -audioop_findfactor_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findfactor_impl(PyObject *module, Py_buffer *fragment, Py_buffer *reference); static PyObject * -audioop_findfactor(PyModuleDef *module, PyObject *args) +audioop_findfactor(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -262,11 +262,11 @@ {"findmax", (PyCFunction)audioop_findmax, METH_VARARGS, audioop_findmax__doc__}, static PyObject * -audioop_findmax_impl(PyModuleDef *module, Py_buffer *fragment, +audioop_findmax_impl(PyObject *module, Py_buffer *fragment, Py_ssize_t length); static PyObject * -audioop_findmax(PyModuleDef *module, PyObject *args) +audioop_findmax(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -297,10 +297,10 @@ {"avgpp", (PyCFunction)audioop_avgpp, METH_VARARGS, audioop_avgpp__doc__}, static PyObject * -audioop_avgpp_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_avgpp(PyModuleDef *module, PyObject *args) +audioop_avgpp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -331,10 +331,10 @@ {"maxpp", (PyCFunction)audioop_maxpp, METH_VARARGS, audioop_maxpp__doc__}, static PyObject * -audioop_maxpp_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_maxpp(PyModuleDef *module, PyObject *args) +audioop_maxpp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -365,10 +365,10 @@ {"cross", (PyCFunction)audioop_cross, METH_VARARGS, audioop_cross__doc__}, static PyObject * -audioop_cross_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_cross(PyModuleDef *module, PyObject *args) +audioop_cross(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -399,11 +399,11 @@ {"mul", (PyCFunction)audioop_mul, METH_VARARGS, audioop_mul__doc__}, static PyObject * -audioop_mul_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width, double factor); static PyObject * -audioop_mul(PyModuleDef *module, PyObject *args) +audioop_mul(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -435,11 +435,11 @@ {"tomono", (PyCFunction)audioop_tomono, METH_VARARGS, audioop_tomono__doc__}, static PyObject * -audioop_tomono_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor); static PyObject * -audioop_tomono(PyModuleDef *module, PyObject *args) +audioop_tomono(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -472,11 +472,11 @@ {"tostereo", (PyCFunction)audioop_tostereo, METH_VARARGS, audioop_tostereo__doc__}, static PyObject * -audioop_tostereo_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width, double lfactor, double rfactor); static PyObject * -audioop_tostereo(PyModuleDef *module, PyObject *args) +audioop_tostereo(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -509,11 +509,11 @@ {"add", (PyCFunction)audioop_add, METH_VARARGS, audioop_add__doc__}, static PyObject * -audioop_add_impl(PyModuleDef *module, Py_buffer *fragment1, +audioop_add_impl(PyObject *module, Py_buffer *fragment1, Py_buffer *fragment2, int width); static PyObject * -audioop_add(PyModuleDef *module, PyObject *args) +audioop_add(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment1 = {NULL, NULL}; @@ -549,11 +549,10 @@ {"bias", (PyCFunction)audioop_bias, METH_VARARGS, audioop_bias__doc__}, static PyObject * -audioop_bias_impl(PyModuleDef *module, Py_buffer *fragment, int width, - int bias); +audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias); static PyObject * -audioop_bias(PyModuleDef *module, PyObject *args) +audioop_bias(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -585,10 +584,10 @@ {"reverse", (PyCFunction)audioop_reverse, METH_VARARGS, audioop_reverse__doc__}, static PyObject * -audioop_reverse_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_reverse(PyModuleDef *module, PyObject *args) +audioop_reverse(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -619,10 +618,10 @@ {"byteswap", (PyCFunction)audioop_byteswap, METH_VARARGS, audioop_byteswap__doc__}, static PyObject * -audioop_byteswap_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_byteswap(PyModuleDef *module, PyObject *args) +audioop_byteswap(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -653,11 +652,11 @@ {"lin2lin", (PyCFunction)audioop_lin2lin, METH_VARARGS, audioop_lin2lin__doc__}, static PyObject * -audioop_lin2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width, int newwidth); static PyObject * -audioop_lin2lin(PyModuleDef *module, PyObject *args) +audioop_lin2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -690,12 +689,12 @@ {"ratecv", (PyCFunction)audioop_ratecv, METH_VARARGS, audioop_ratecv__doc__}, static PyObject * -audioop_ratecv_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width, int nchannels, int inrate, int outrate, PyObject *state, int weightA, int weightB); static PyObject * -audioop_ratecv(PyModuleDef *module, PyObject *args) +audioop_ratecv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -732,10 +731,10 @@ {"lin2ulaw", (PyCFunction)audioop_lin2ulaw, METH_VARARGS, audioop_lin2ulaw__doc__}, static PyObject * -audioop_lin2ulaw_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_lin2ulaw(PyModuleDef *module, PyObject *args) +audioop_lin2ulaw(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -766,10 +765,10 @@ {"ulaw2lin", (PyCFunction)audioop_ulaw2lin, METH_VARARGS, audioop_ulaw2lin__doc__}, static PyObject * -audioop_ulaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_ulaw2lin(PyModuleDef *module, PyObject *args) +audioop_ulaw2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -800,10 +799,10 @@ {"lin2alaw", (PyCFunction)audioop_lin2alaw, METH_VARARGS, audioop_lin2alaw__doc__}, static PyObject * -audioop_lin2alaw_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_lin2alaw(PyModuleDef *module, PyObject *args) +audioop_lin2alaw(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -834,10 +833,10 @@ {"alaw2lin", (PyCFunction)audioop_alaw2lin, METH_VARARGS, audioop_alaw2lin__doc__}, static PyObject * -audioop_alaw2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width); +audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width); static PyObject * -audioop_alaw2lin(PyModuleDef *module, PyObject *args) +audioop_alaw2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -868,11 +867,11 @@ {"lin2adpcm", (PyCFunction)audioop_lin2adpcm, METH_VARARGS, audioop_lin2adpcm__doc__}, static PyObject * -audioop_lin2adpcm_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state); static PyObject * -audioop_lin2adpcm(PyModuleDef *module, PyObject *args) +audioop_lin2adpcm(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -904,11 +903,11 @@ {"adpcm2lin", (PyCFunction)audioop_adpcm2lin, METH_VARARGS, audioop_adpcm2lin__doc__}, static PyObject * -audioop_adpcm2lin_impl(PyModuleDef *module, Py_buffer *fragment, int width, +audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width, PyObject *state); static PyObject * -audioop_adpcm2lin(PyModuleDef *module, PyObject *args) +audioop_adpcm2lin(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer fragment = {NULL, NULL}; @@ -929,4 +928,4 @@ return return_value; } -/*[clinic end generated code: output=af5b025f0241fee2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e0ab74c3fa57c39c input=a9049054013a1b77]*/ diff --git a/Modules/clinic/binascii.c.h b/Modules/clinic/binascii.c.h --- a/Modules/clinic/binascii.c.h +++ b/Modules/clinic/binascii.c.h @@ -12,10 +12,10 @@ {"a2b_uu", (PyCFunction)binascii_a2b_uu, METH_O, binascii_a2b_uu__doc__}, static PyObject * -binascii_a2b_uu_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_uu_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_uu(PyModuleDef *module, PyObject *arg) +binascii_a2b_uu(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -43,10 +43,10 @@ {"b2a_uu", (PyCFunction)binascii_b2a_uu, METH_O, binascii_b2a_uu__doc__}, static PyObject * -binascii_b2a_uu_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_uu_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_uu(PyModuleDef *module, PyObject *arg) +binascii_b2a_uu(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -75,10 +75,10 @@ {"a2b_base64", (PyCFunction)binascii_a2b_base64, METH_O, binascii_a2b_base64__doc__}, static PyObject * -binascii_a2b_base64_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_base64_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_base64(PyModuleDef *module, PyObject *arg) +binascii_a2b_base64(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -106,10 +106,10 @@ {"b2a_base64", (PyCFunction)binascii_b2a_base64, METH_VARARGS|METH_KEYWORDS, binascii_b2a_base64__doc__}, static PyObject * -binascii_b2a_base64_impl(PyModuleDef *module, Py_buffer *data, int newline); +binascii_b2a_base64_impl(PyObject *module, Py_buffer *data, int newline); static PyObject * -binascii_b2a_base64(PyModuleDef *module, PyObject *args, PyObject *kwargs) +binascii_b2a_base64(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "newline", NULL}; @@ -141,10 +141,10 @@ {"a2b_hqx", (PyCFunction)binascii_a2b_hqx, METH_O, binascii_a2b_hqx__doc__}, static PyObject * -binascii_a2b_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_a2b_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_a2b_hqx(PyModuleDef *module, PyObject *arg) +binascii_a2b_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -172,10 +172,10 @@ {"rlecode_hqx", (PyCFunction)binascii_rlecode_hqx, METH_O, binascii_rlecode_hqx__doc__}, static PyObject * -binascii_rlecode_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_rlecode_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_rlecode_hqx(PyModuleDef *module, PyObject *arg) +binascii_rlecode_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -204,10 +204,10 @@ {"b2a_hqx", (PyCFunction)binascii_b2a_hqx, METH_O, binascii_b2a_hqx__doc__}, static PyObject * -binascii_b2a_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_hqx(PyModuleDef *module, PyObject *arg) +binascii_b2a_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -236,10 +236,10 @@ {"rledecode_hqx", (PyCFunction)binascii_rledecode_hqx, METH_O, binascii_rledecode_hqx__doc__}, static PyObject * -binascii_rledecode_hqx_impl(PyModuleDef *module, Py_buffer *data); +binascii_rledecode_hqx_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_rledecode_hqx(PyModuleDef *module, PyObject *arg) +binascii_rledecode_hqx(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -268,10 +268,10 @@ {"crc_hqx", (PyCFunction)binascii_crc_hqx, METH_VARARGS, binascii_crc_hqx__doc__}, static unsigned int -binascii_crc_hqx_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc); +binascii_crc_hqx_impl(PyObject *module, Py_buffer *data, unsigned int crc); static PyObject * -binascii_crc_hqx(PyModuleDef *module, PyObject *args) +binascii_crc_hqx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -307,10 +307,10 @@ {"crc32", (PyCFunction)binascii_crc32, METH_VARARGS, binascii_crc32__doc__}, static unsigned int -binascii_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int crc); +binascii_crc32_impl(PyObject *module, Py_buffer *data, unsigned int crc); static PyObject * -binascii_crc32(PyModuleDef *module, PyObject *args) +binascii_crc32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -349,10 +349,10 @@ {"b2a_hex", (PyCFunction)binascii_b2a_hex, METH_O, binascii_b2a_hex__doc__}, static PyObject * -binascii_b2a_hex_impl(PyModuleDef *module, Py_buffer *data); +binascii_b2a_hex_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_b2a_hex(PyModuleDef *module, PyObject *arg) +binascii_b2a_hex(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -383,10 +383,10 @@ {"hexlify", (PyCFunction)binascii_hexlify, METH_O, binascii_hexlify__doc__}, static PyObject * -binascii_hexlify_impl(PyModuleDef *module, Py_buffer *data); +binascii_hexlify_impl(PyObject *module, Py_buffer *data); static PyObject * -binascii_hexlify(PyModuleDef *module, PyObject *arg) +binascii_hexlify(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -418,10 +418,10 @@ {"a2b_hex", (PyCFunction)binascii_a2b_hex, METH_O, binascii_a2b_hex__doc__}, static PyObject * -binascii_a2b_hex_impl(PyModuleDef *module, Py_buffer *hexstr); +binascii_a2b_hex_impl(PyObject *module, Py_buffer *hexstr); static PyObject * -binascii_a2b_hex(PyModuleDef *module, PyObject *arg) +binascii_a2b_hex(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; @@ -451,10 +451,10 @@ {"unhexlify", (PyCFunction)binascii_unhexlify, METH_O, binascii_unhexlify__doc__}, static PyObject * -binascii_unhexlify_impl(PyModuleDef *module, Py_buffer *hexstr); +binascii_unhexlify_impl(PyObject *module, Py_buffer *hexstr); static PyObject * -binascii_unhexlify(PyModuleDef *module, PyObject *arg) +binascii_unhexlify(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_buffer hexstr = {NULL, NULL}; @@ -482,10 +482,10 @@ {"a2b_qp", (PyCFunction)binascii_a2b_qp, METH_VARARGS|METH_KEYWORDS, binascii_a2b_qp__doc__}, static PyObject * -binascii_a2b_qp_impl(PyModuleDef *module, Py_buffer *data, int header); +binascii_a2b_qp_impl(PyObject *module, Py_buffer *data, int header); static PyObject * -binascii_a2b_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) +binascii_a2b_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "header", NULL}; @@ -520,11 +520,11 @@ {"b2a_qp", (PyCFunction)binascii_b2a_qp, METH_VARARGS|METH_KEYWORDS, binascii_b2a_qp__doc__}, static PyObject * -binascii_b2a_qp_impl(PyModuleDef *module, Py_buffer *data, int quotetabs, +binascii_b2a_qp_impl(PyObject *module, Py_buffer *data, int quotetabs, int istext, int header); static PyObject * -binascii_b2a_qp(PyModuleDef *module, PyObject *args, PyObject *kwargs) +binascii_b2a_qp(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"data", "quotetabs", "istext", "header", NULL}; @@ -547,4 +547,4 @@ return return_value; } -/*[clinic end generated code: output=7fb420392d78ac4d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d91d1058dc0590e1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/cmathmodule.c.h b/Modules/clinic/cmathmodule.c.h --- a/Modules/clinic/cmathmodule.c.h +++ b/Modules/clinic/cmathmodule.c.h @@ -12,10 +12,10 @@ {"acos", (PyCFunction)cmath_acos, METH_O, cmath_acos__doc__}, static Py_complex -cmath_acos_impl(PyModuleDef *module, Py_complex z); +cmath_acos_impl(PyObject *module, Py_complex z); static PyObject * -cmath_acos(PyModuleDef *module, PyObject *arg) +cmath_acos(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -54,10 +54,10 @@ {"acosh", (PyCFunction)cmath_acosh, METH_O, cmath_acosh__doc__}, static Py_complex -cmath_acosh_impl(PyModuleDef *module, Py_complex z); +cmath_acosh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_acosh(PyModuleDef *module, PyObject *arg) +cmath_acosh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -96,10 +96,10 @@ {"asin", (PyCFunction)cmath_asin, METH_O, cmath_asin__doc__}, static Py_complex -cmath_asin_impl(PyModuleDef *module, Py_complex z); +cmath_asin_impl(PyObject *module, Py_complex z); static PyObject * -cmath_asin(PyModuleDef *module, PyObject *arg) +cmath_asin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -138,10 +138,10 @@ {"asinh", (PyCFunction)cmath_asinh, METH_O, cmath_asinh__doc__}, static Py_complex -cmath_asinh_impl(PyModuleDef *module, Py_complex z); +cmath_asinh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_asinh(PyModuleDef *module, PyObject *arg) +cmath_asinh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -180,10 +180,10 @@ {"atan", (PyCFunction)cmath_atan, METH_O, cmath_atan__doc__}, static Py_complex -cmath_atan_impl(PyModuleDef *module, Py_complex z); +cmath_atan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_atan(PyModuleDef *module, PyObject *arg) +cmath_atan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -222,10 +222,10 @@ {"atanh", (PyCFunction)cmath_atanh, METH_O, cmath_atanh__doc__}, static Py_complex -cmath_atanh_impl(PyModuleDef *module, Py_complex z); +cmath_atanh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_atanh(PyModuleDef *module, PyObject *arg) +cmath_atanh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -264,10 +264,10 @@ {"cos", (PyCFunction)cmath_cos, METH_O, cmath_cos__doc__}, static Py_complex -cmath_cos_impl(PyModuleDef *module, Py_complex z); +cmath_cos_impl(PyObject *module, Py_complex z); static PyObject * -cmath_cos(PyModuleDef *module, PyObject *arg) +cmath_cos(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -306,10 +306,10 @@ {"cosh", (PyCFunction)cmath_cosh, METH_O, cmath_cosh__doc__}, static Py_complex -cmath_cosh_impl(PyModuleDef *module, Py_complex z); +cmath_cosh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_cosh(PyModuleDef *module, PyObject *arg) +cmath_cosh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -348,10 +348,10 @@ {"exp", (PyCFunction)cmath_exp, METH_O, cmath_exp__doc__}, static Py_complex -cmath_exp_impl(PyModuleDef *module, Py_complex z); +cmath_exp_impl(PyObject *module, Py_complex z); static PyObject * -cmath_exp(PyModuleDef *module, PyObject *arg) +cmath_exp(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -390,10 +390,10 @@ {"log10", (PyCFunction)cmath_log10, METH_O, cmath_log10__doc__}, static Py_complex -cmath_log10_impl(PyModuleDef *module, Py_complex z); +cmath_log10_impl(PyObject *module, Py_complex z); static PyObject * -cmath_log10(PyModuleDef *module, PyObject *arg) +cmath_log10(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -432,10 +432,10 @@ {"sin", (PyCFunction)cmath_sin, METH_O, cmath_sin__doc__}, static Py_complex -cmath_sin_impl(PyModuleDef *module, Py_complex z); +cmath_sin_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sin(PyModuleDef *module, PyObject *arg) +cmath_sin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -474,10 +474,10 @@ {"sinh", (PyCFunction)cmath_sinh, METH_O, cmath_sinh__doc__}, static Py_complex -cmath_sinh_impl(PyModuleDef *module, Py_complex z); +cmath_sinh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sinh(PyModuleDef *module, PyObject *arg) +cmath_sinh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -516,10 +516,10 @@ {"sqrt", (PyCFunction)cmath_sqrt, METH_O, cmath_sqrt__doc__}, static Py_complex -cmath_sqrt_impl(PyModuleDef *module, Py_complex z); +cmath_sqrt_impl(PyObject *module, Py_complex z); static PyObject * -cmath_sqrt(PyModuleDef *module, PyObject *arg) +cmath_sqrt(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -558,10 +558,10 @@ {"tan", (PyCFunction)cmath_tan, METH_O, cmath_tan__doc__}, static Py_complex -cmath_tan_impl(PyModuleDef *module, Py_complex z); +cmath_tan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_tan(PyModuleDef *module, PyObject *arg) +cmath_tan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -600,10 +600,10 @@ {"tanh", (PyCFunction)cmath_tanh, METH_O, cmath_tanh__doc__}, static Py_complex -cmath_tanh_impl(PyModuleDef *module, Py_complex z); +cmath_tanh_impl(PyObject *module, Py_complex z); static PyObject * -cmath_tanh(PyModuleDef *module, PyObject *arg) +cmath_tanh(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -644,10 +644,10 @@ {"log", (PyCFunction)cmath_log, METH_VARARGS, cmath_log__doc__}, static PyObject * -cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj); +cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj); static PyObject * -cmath_log(PyModuleDef *module, PyObject *args) +cmath_log(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_complex x; @@ -673,10 +673,10 @@ {"phase", (PyCFunction)cmath_phase, METH_O, cmath_phase__doc__}, static PyObject * -cmath_phase_impl(PyModuleDef *module, Py_complex z); +cmath_phase_impl(PyObject *module, Py_complex z); static PyObject * -cmath_phase(PyModuleDef *module, PyObject *arg) +cmath_phase(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -702,10 +702,10 @@ {"polar", (PyCFunction)cmath_polar, METH_O, cmath_polar__doc__}, static PyObject * -cmath_polar_impl(PyModuleDef *module, Py_complex z); +cmath_polar_impl(PyObject *module, Py_complex z); static PyObject * -cmath_polar(PyModuleDef *module, PyObject *arg) +cmath_polar(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -729,10 +729,10 @@ {"rect", (PyCFunction)cmath_rect, METH_VARARGS, cmath_rect__doc__}, static PyObject * -cmath_rect_impl(PyModuleDef *module, double r, double phi); +cmath_rect_impl(PyObject *module, double r, double phi); static PyObject * -cmath_rect(PyModuleDef *module, PyObject *args) +cmath_rect(PyObject *module, PyObject *args) { PyObject *return_value = NULL; double r; @@ -758,10 +758,10 @@ {"isfinite", (PyCFunction)cmath_isfinite, METH_O, cmath_isfinite__doc__}, static PyObject * -cmath_isfinite_impl(PyModuleDef *module, Py_complex z); +cmath_isfinite_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isfinite(PyModuleDef *module, PyObject *arg) +cmath_isfinite(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -785,10 +785,10 @@ {"isnan", (PyCFunction)cmath_isnan, METH_O, cmath_isnan__doc__}, static PyObject * -cmath_isnan_impl(PyModuleDef *module, Py_complex z); +cmath_isnan_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isnan(PyModuleDef *module, PyObject *arg) +cmath_isnan(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -812,10 +812,10 @@ {"isinf", (PyCFunction)cmath_isinf, METH_O, cmath_isinf__doc__}, static PyObject * -cmath_isinf_impl(PyModuleDef *module, Py_complex z); +cmath_isinf_impl(PyObject *module, Py_complex z); static PyObject * -cmath_isinf(PyModuleDef *module, PyObject *arg) +cmath_isinf(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_complex z; @@ -854,11 +854,11 @@ {"isclose", (PyCFunction)cmath_isclose, METH_VARARGS|METH_KEYWORDS, cmath_isclose__doc__}, static int -cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, +cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol); static PyObject * -cmath_isclose(PyModuleDef *module, PyObject *args, PyObject *kwargs) +cmath_isclose(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"a", "b", "rel_tol", "abs_tol", NULL}; @@ -881,4 +881,4 @@ exit: return return_value; } -/*[clinic end generated code: output=f166205b4beb1826 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=0f49dd11b50175bc input=a9049054013a1b77]*/ diff --git a/Modules/clinic/fcntlmodule.c.h b/Modules/clinic/fcntlmodule.c.h --- a/Modules/clinic/fcntlmodule.c.h +++ b/Modules/clinic/fcntlmodule.c.h @@ -22,10 +22,10 @@ {"fcntl", (PyCFunction)fcntl_fcntl, METH_VARARGS, fcntl_fcntl__doc__}, static PyObject * -fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg); +fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg); static PyObject * -fcntl_fcntl(PyModuleDef *module, PyObject *args) +fcntl_fcntl(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -79,11 +79,11 @@ {"ioctl", (PyCFunction)fcntl_ioctl, METH_VARARGS, fcntl_ioctl__doc__}, static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, +fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg); static PyObject * -fcntl_ioctl(PyModuleDef *module, PyObject *args) +fcntl_ioctl(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -114,10 +114,10 @@ {"flock", (PyCFunction)fcntl_flock, METH_VARARGS, fcntl_flock__doc__}, static PyObject * -fcntl_flock_impl(PyModuleDef *module, int fd, int code); +fcntl_flock_impl(PyObject *module, int fd, int code); static PyObject * -fcntl_flock(PyModuleDef *module, PyObject *args) +fcntl_flock(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -164,11 +164,11 @@ {"lockf", (PyCFunction)fcntl_lockf, METH_VARARGS, fcntl_lockf__doc__}, static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, +fcntl_lockf_impl(PyObject *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence); static PyObject * -fcntl_lockf(PyModuleDef *module, PyObject *args) +fcntl_lockf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -186,4 +186,4 @@ exit: return return_value; } -/*[clinic end generated code: output=b08537e9adc04ca2 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=36cff76a8fb2c9a6 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/grpmodule.c.h b/Modules/clinic/grpmodule.c.h --- a/Modules/clinic/grpmodule.c.h +++ b/Modules/clinic/grpmodule.c.h @@ -14,10 +14,10 @@ {"getgrgid", (PyCFunction)grp_getgrgid, METH_VARARGS|METH_KEYWORDS, grp_getgrgid__doc__}, static PyObject * -grp_getgrgid_impl(PyModuleDef *module, PyObject *id); +grp_getgrgid_impl(PyObject *module, PyObject *id); static PyObject * -grp_getgrgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +grp_getgrgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"id", NULL}; @@ -45,10 +45,10 @@ {"getgrnam", (PyCFunction)grp_getgrnam, METH_VARARGS|METH_KEYWORDS, grp_getgrnam__doc__}, static PyObject * -grp_getgrnam_impl(PyModuleDef *module, PyObject *name); +grp_getgrnam_impl(PyObject *module, PyObject *name); static PyObject * -grp_getgrnam(PyModuleDef *module, PyObject *args, PyObject *kwargs) +grp_getgrnam(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"name", NULL}; @@ -77,11 +77,11 @@ {"getgrall", (PyCFunction)grp_getgrall, METH_NOARGS, grp_getgrall__doc__}, static PyObject * -grp_getgrall_impl(PyModuleDef *module); +grp_getgrall_impl(PyObject *module); static PyObject * -grp_getgrall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +grp_getgrall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return grp_getgrall_impl(module); } -/*[clinic end generated code: output=a8a097520206ccd6 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8b7502970a29e7f1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/md5module.c.h b/Modules/clinic/md5module.c.h --- a/Modules/clinic/md5module.c.h +++ b/Modules/clinic/md5module.c.h @@ -75,10 +75,10 @@ {"md5", (PyCFunction)_md5_md5, METH_VARARGS|METH_KEYWORDS, _md5_md5__doc__}, static PyObject * -_md5_md5_impl(PyModuleDef *module, PyObject *string); +_md5_md5_impl(PyObject *module, PyObject *string); static PyObject * -_md5_md5(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_md5_md5(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -93,4 +93,4 @@ exit: return return_value; } -/*[clinic end generated code: output=d701d041d387b081 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=8f640a98761daffe input=a9049054013a1b77]*/ diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h --- a/Modules/clinic/posixmodule.c.h +++ b/Modules/clinic/posixmodule.c.h @@ -30,11 +30,10 @@ {"stat", (PyCFunction)os_stat, METH_VARARGS|METH_KEYWORDS, os_stat__doc__}, static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, - int follow_symlinks); - -static PyObject * -os_stat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks); + +static PyObject * +os_stat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", "follow_symlinks", NULL}; @@ -68,10 +67,10 @@ {"lstat", (PyCFunction)os_lstat, METH_VARARGS|METH_KEYWORDS, os_lstat__doc__}, static PyObject * -os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_lstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lstat_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_lstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -127,11 +126,11 @@ {"access", (PyCFunction)os_access, METH_VARARGS|METH_KEYWORDS, os_access__doc__}, static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks); static PyObject * -os_access(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_access(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", "effective_ids", "follow_symlinks", NULL}; @@ -174,10 +173,10 @@ {"ttyname", (PyCFunction)os_ttyname, METH_O, os_ttyname__doc__}, static char * -os_ttyname_impl(PyModuleDef *module, int fd); - -static PyObject * -os_ttyname(PyModuleDef *module, PyObject *arg) +os_ttyname_impl(PyObject *module, int fd); + +static PyObject * +os_ttyname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -210,10 +209,10 @@ {"ctermid", (PyCFunction)os_ctermid, METH_NOARGS, os_ctermid__doc__}, static PyObject * -os_ctermid_impl(PyModuleDef *module); - -static PyObject * -os_ctermid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_ctermid_impl(PyObject *module); + +static PyObject * +os_ctermid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_ctermid_impl(module); } @@ -234,10 +233,10 @@ {"chdir", (PyCFunction)os_chdir, METH_VARARGS|METH_KEYWORDS, os_chdir__doc__}, static PyObject * -os_chdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_chdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chdir_impl(PyObject *module, path_t *path); + +static PyObject * +os_chdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -271,10 +270,10 @@ {"fchdir", (PyCFunction)os_fchdir, METH_VARARGS|METH_KEYWORDS, os_fchdir__doc__}, static PyObject * -os_fchdir_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fchdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchdir_impl(PyObject *module, int fd); + +static PyObject * +os_fchdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -322,11 +321,11 @@ {"chmod", (PyCFunction)os_chmod, METH_VARARGS|METH_KEYWORDS, os_chmod__doc__}, static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks); static PyObject * -os_chmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", "follow_symlinks", NULL}; @@ -362,10 +361,10 @@ {"fchmod", (PyCFunction)os_fchmod, METH_VARARGS|METH_KEYWORDS, os_fchmod__doc__}, static PyObject * -os_fchmod_impl(PyModuleDef *module, int fd, int mode); - -static PyObject * -os_fchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchmod_impl(PyObject *module, int fd, int mode); + +static PyObject * +os_fchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "mode", NULL}; @@ -399,10 +398,10 @@ {"lchmod", (PyCFunction)os_lchmod, METH_VARARGS|METH_KEYWORDS, os_lchmod__doc__}, static PyObject * -os_lchmod_impl(PyModuleDef *module, path_t *path, int mode); - -static PyObject * -os_lchmod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchmod_impl(PyObject *module, path_t *path, int mode); + +static PyObject * +os_lchmod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", NULL}; @@ -442,11 +441,11 @@ {"chflags", (PyCFunction)os_chflags, METH_VARARGS|METH_KEYWORDS, os_chflags__doc__}, static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, +os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks); static PyObject * -os_chflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", "follow_symlinks", NULL}; @@ -484,10 +483,10 @@ {"lchflags", (PyCFunction)os_lchflags, METH_VARARGS|METH_KEYWORDS, os_lchflags__doc__}, static PyObject * -os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags); - -static PyObject * -os_lchflags(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags); + +static PyObject * +os_lchflags(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", NULL}; @@ -521,10 +520,10 @@ {"chroot", (PyCFunction)os_chroot, METH_VARARGS|METH_KEYWORDS, os_chroot__doc__}, static PyObject * -os_chroot_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_chroot(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chroot_impl(PyObject *module, path_t *path); + +static PyObject * +os_chroot(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -557,10 +556,10 @@ {"fsync", (PyCFunction)os_fsync, METH_VARARGS|METH_KEYWORDS, os_fsync__doc__}, static PyObject * -os_fsync_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fsync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fsync_impl(PyObject *module, int fd); + +static PyObject * +os_fsync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -590,10 +589,10 @@ {"sync", (PyCFunction)os_sync, METH_NOARGS, os_sync__doc__}, static PyObject * -os_sync_impl(PyModuleDef *module); - -static PyObject * -os_sync(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_sync_impl(PyObject *module); + +static PyObject * +os_sync(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_sync_impl(module); } @@ -612,10 +611,10 @@ {"fdatasync", (PyCFunction)os_fdatasync, METH_VARARGS|METH_KEYWORDS, os_fdatasync__doc__}, static PyObject * -os_fdatasync_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fdatasync(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fdatasync_impl(PyObject *module, int fd); + +static PyObject * +os_fdatasync(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -669,11 +668,11 @@ {"chown", (PyCFunction)os_chown, METH_VARARGS|METH_KEYWORDS, os_chown__doc__}, static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, +os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks); static PyObject * -os_chown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_chown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "uid", "gid", "dir_fd", "follow_symlinks", NULL}; @@ -712,10 +711,10 @@ {"fchown", (PyCFunction)os_fchown, METH_VARARGS|METH_KEYWORDS, os_fchown__doc__}, static PyObject * -os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid); - -static PyObject * -os_fchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid); + +static PyObject * +os_fchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "uid", "gid", NULL}; @@ -750,10 +749,10 @@ {"lchown", (PyCFunction)os_lchown, METH_VARARGS|METH_KEYWORDS, os_lchown__doc__}, static PyObject * -os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid); - -static PyObject * -os_lchown(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid); + +static PyObject * +os_lchown(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "uid", "gid", NULL}; @@ -786,10 +785,10 @@ {"getcwd", (PyCFunction)os_getcwd, METH_NOARGS, os_getcwd__doc__}, static PyObject * -os_getcwd_impl(PyModuleDef *module); - -static PyObject * -os_getcwd(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getcwd_impl(PyObject *module); + +static PyObject * +os_getcwd(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getcwd_impl(module); } @@ -804,10 +803,10 @@ {"getcwdb", (PyCFunction)os_getcwdb, METH_NOARGS, os_getcwdb__doc__}, static PyObject * -os_getcwdb_impl(PyModuleDef *module); - -static PyObject * -os_getcwdb(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getcwdb_impl(PyObject *module); + +static PyObject * +os_getcwdb(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getcwdb_impl(module); } @@ -835,11 +834,11 @@ {"link", (PyCFunction)os_link, METH_VARARGS|METH_KEYWORDS, os_link__doc__}, static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks); static PyObject * -os_link(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_link(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", "follow_symlinks", NULL}; @@ -887,10 +886,10 @@ {"listdir", (PyCFunction)os_listdir, METH_VARARGS|METH_KEYWORDS, os_listdir__doc__}, static PyObject * -os_listdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_listdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_listdir_impl(PyObject *module, path_t *path); + +static PyObject * +os_listdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -920,10 +919,10 @@ {"_getfullpathname", (PyCFunction)os__getfullpathname, METH_O, os__getfullpathname__doc__}, static PyObject * -os__getfullpathname_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os__getfullpathname(PyModuleDef *module, PyObject *arg) +os__getfullpathname_impl(PyObject *module, path_t *path); + +static PyObject * +os__getfullpathname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_getfullpathname", "path", 0, 0); @@ -954,10 +953,10 @@ {"_getfinalpathname", (PyCFunction)os__getfinalpathname, METH_O, os__getfinalpathname__doc__}, static PyObject * -os__getfinalpathname_impl(PyModuleDef *module, PyObject *path); - -static PyObject * -os__getfinalpathname(PyModuleDef *module, PyObject *arg) +os__getfinalpathname_impl(PyObject *module, PyObject *path); + +static PyObject * +os__getfinalpathname(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *path; @@ -984,10 +983,10 @@ {"_isdir", (PyCFunction)os__isdir, METH_O, os__isdir__doc__}, static PyObject * -os__isdir_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os__isdir(PyModuleDef *module, PyObject *arg) +os__isdir_impl(PyObject *module, path_t *path); + +static PyObject * +os__isdir(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; path_t path = PATH_T_INITIALIZE("_isdir", "path", 0, 0); @@ -1018,10 +1017,10 @@ {"_getvolumepathname", (PyCFunction)os__getvolumepathname, METH_VARARGS|METH_KEYWORDS, os__getvolumepathname__doc__}, static PyObject * -os__getvolumepathname_impl(PyModuleDef *module, PyObject *path); - -static PyObject * -os__getvolumepathname(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__getvolumepathname_impl(PyObject *module, PyObject *path); + +static PyObject * +os__getvolumepathname(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -1056,10 +1055,10 @@ {"mkdir", (PyCFunction)os_mkdir, METH_VARARGS|METH_KEYWORDS, os_mkdir__doc__}, static PyObject * -os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); - -static PyObject * -os_mkdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd); + +static PyObject * +os_mkdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -1092,10 +1091,10 @@ {"nice", (PyCFunction)os_nice, METH_O, os_nice__doc__}, static PyObject * -os_nice_impl(PyModuleDef *module, int increment); - -static PyObject * -os_nice(PyModuleDef *module, PyObject *arg) +os_nice_impl(PyObject *module, int increment); + +static PyObject * +os_nice(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int increment; @@ -1123,10 +1122,10 @@ {"getpriority", (PyCFunction)os_getpriority, METH_VARARGS|METH_KEYWORDS, os_getpriority__doc__}, static PyObject * -os_getpriority_impl(PyModuleDef *module, int which, int who); - -static PyObject * -os_getpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getpriority_impl(PyObject *module, int which, int who); + +static PyObject * +os_getpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"which", "who", NULL}; @@ -1157,10 +1156,10 @@ {"setpriority", (PyCFunction)os_setpriority, METH_VARARGS|METH_KEYWORDS, os_setpriority__doc__}, static PyObject * -os_setpriority_impl(PyModuleDef *module, int which, int who, int priority); - -static PyObject * -os_setpriority(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_setpriority_impl(PyObject *module, int which, int who, int priority); + +static PyObject * +os_setpriority(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"which", "who", "priority", NULL}; @@ -1196,11 +1195,11 @@ {"rename", (PyCFunction)os_rename, METH_VARARGS|METH_KEYWORDS, os_rename__doc__}, static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd); static PyObject * -os_rename(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_rename(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1240,11 +1239,11 @@ {"replace", (PyCFunction)os_replace, METH_VARARGS|METH_KEYWORDS, os_replace__doc__}, static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, - int src_dir_fd, int dst_dir_fd); - -static PyObject * -os_replace(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd); + +static PyObject * +os_replace(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "src_dir_fd", "dst_dir_fd", NULL}; @@ -1283,10 +1282,10 @@ {"rmdir", (PyCFunction)os_rmdir, METH_VARARGS|METH_KEYWORDS, os_rmdir__doc__}, static PyObject * -os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_rmdir(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_rmdir_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_rmdir(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1318,10 +1317,10 @@ {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, static long -os_system_impl(PyModuleDef *module, Py_UNICODE *command); - -static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_system_impl(PyObject *module, Py_UNICODE *command); + +static PyObject * +os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"command", NULL}; @@ -1356,10 +1355,10 @@ {"system", (PyCFunction)os_system, METH_VARARGS|METH_KEYWORDS, os_system__doc__}, static long -os_system_impl(PyModuleDef *module, PyObject *command); - -static PyObject * -os_system(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_system_impl(PyObject *module, PyObject *command); + +static PyObject * +os_system(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"command", NULL}; @@ -1395,10 +1394,10 @@ {"umask", (PyCFunction)os_umask, METH_O, os_umask__doc__}, static PyObject * -os_umask_impl(PyModuleDef *module, int mask); - -static PyObject * -os_umask(PyModuleDef *module, PyObject *arg) +os_umask_impl(PyObject *module, int mask); + +static PyObject * +os_umask(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int mask; @@ -1427,10 +1426,10 @@ {"unlink", (PyCFunction)os_unlink, METH_VARARGS|METH_KEYWORDS, os_unlink__doc__}, static PyObject * -os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_unlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_unlink_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_unlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1465,10 +1464,10 @@ {"remove", (PyCFunction)os_remove, METH_VARARGS|METH_KEYWORDS, os_remove__doc__}, static PyObject * -os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd); - -static PyObject * -os_remove(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_remove_impl(PyObject *module, path_t *path, int dir_fd); + +static PyObject * +os_remove(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "dir_fd", NULL}; @@ -1503,10 +1502,10 @@ {"uname", (PyCFunction)os_uname, METH_NOARGS, os_uname__doc__}, static PyObject * -os_uname_impl(PyModuleDef *module); - -static PyObject * -os_uname(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_uname_impl(PyObject *module); + +static PyObject * +os_uname(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_uname_impl(module); } @@ -1546,11 +1545,11 @@ {"utime", (PyCFunction)os_utime, METH_VARARGS|METH_KEYWORDS, os_utime__doc__}, static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, - PyObject *ns, int dir_fd, int follow_symlinks); - -static PyObject * -os_utime(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + int dir_fd, int follow_symlinks); + +static PyObject * +os_utime(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "times", "ns", "dir_fd", "follow_symlinks", NULL}; @@ -1583,10 +1582,10 @@ {"_exit", (PyCFunction)os__exit, METH_VARARGS|METH_KEYWORDS, os__exit__doc__}, static PyObject * -os__exit_impl(PyModuleDef *module, int status); - -static PyObject * -os__exit(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__exit_impl(PyObject *module, int status); + +static PyObject * +os__exit(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -1619,10 +1618,10 @@ {"execv", (PyCFunction)os_execv, METH_VARARGS, os_execv__doc__}, static PyObject * -os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv); - -static PyObject * -os_execv(PyModuleDef *module, PyObject *args) +os_execv_impl(PyObject *module, PyObject *path, PyObject *argv); + +static PyObject * +os_execv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *path = NULL; @@ -1662,11 +1661,10 @@ {"execve", (PyCFunction)os_execve, METH_VARARGS|METH_KEYWORDS, os_execve__doc__}, static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, - PyObject *env); - -static PyObject * -os_execve(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env); + +static PyObject * +os_execve(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "argv", "env", NULL}; @@ -1708,10 +1706,10 @@ {"spawnv", (PyCFunction)os_spawnv, METH_VARARGS, os_spawnv__doc__}, static PyObject * -os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv); - -static PyObject * -os_spawnv(PyModuleDef *module, PyObject *args) +os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv); + +static PyObject * +os_spawnv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; @@ -1754,11 +1752,11 @@ {"spawnve", (PyCFunction)os_spawnve, METH_VARARGS, os_spawnve__doc__}, static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, - PyObject *argv, PyObject *env); - -static PyObject * -os_spawnve(PyModuleDef *module, PyObject *args) +os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, + PyObject *env); + +static PyObject * +os_spawnve(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int mode; @@ -1795,10 +1793,10 @@ {"fork1", (PyCFunction)os_fork1, METH_NOARGS, os_fork1__doc__}, static PyObject * -os_fork1_impl(PyModuleDef *module); - -static PyObject * -os_fork1(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_fork1_impl(PyObject *module); + +static PyObject * +os_fork1(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_fork1_impl(module); } @@ -1819,10 +1817,10 @@ {"fork", (PyCFunction)os_fork, METH_NOARGS, os_fork__doc__}, static PyObject * -os_fork_impl(PyModuleDef *module); - -static PyObject * -os_fork(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_fork_impl(PyObject *module); + +static PyObject * +os_fork(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_fork_impl(module); } @@ -1841,10 +1839,10 @@ {"sched_get_priority_max", (PyCFunction)os_sched_get_priority_max, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_max__doc__}, static PyObject * -os_sched_get_priority_max_impl(PyModuleDef *module, int policy); - -static PyObject * -os_sched_get_priority_max(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_max_impl(PyObject *module, int policy); + +static PyObject * +os_sched_get_priority_max(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"policy", NULL}; @@ -1874,10 +1872,10 @@ {"sched_get_priority_min", (PyCFunction)os_sched_get_priority_min, METH_VARARGS|METH_KEYWORDS, os_sched_get_priority_min__doc__}, static PyObject * -os_sched_get_priority_min_impl(PyModuleDef *module, int policy); - -static PyObject * -os_sched_get_priority_min(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_sched_get_priority_min_impl(PyObject *module, int policy); + +static PyObject * +os_sched_get_priority_min(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"policy", NULL}; @@ -1909,10 +1907,10 @@ {"sched_getscheduler", (PyCFunction)os_sched_getscheduler, METH_O, os_sched_getscheduler__doc__}, static PyObject * -os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getscheduler(PyModuleDef *module, PyObject *arg) +os_sched_getscheduler_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_getscheduler(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -1976,11 +1974,11 @@ {"sched_setscheduler", (PyCFunction)os_sched_setscheduler, METH_VARARGS, os_sched_setscheduler__doc__}, static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, +os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, struct sched_param *param); static PyObject * -os_sched_setscheduler(PyModuleDef *module, PyObject *args) +os_sched_setscheduler(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2014,10 +2012,10 @@ {"sched_getparam", (PyCFunction)os_sched_getparam, METH_O, os_sched_getparam__doc__}, static PyObject * -os_sched_getparam_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getparam(PyModuleDef *module, PyObject *arg) +os_sched_getparam_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_getparam(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -2048,11 +2046,11 @@ {"sched_setparam", (PyCFunction)os_sched_setparam, METH_VARARGS, os_sched_setparam__doc__}, static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, +os_sched_setparam_impl(PyObject *module, pid_t pid, struct sched_param *param); static PyObject * -os_sched_setparam(PyModuleDef *module, PyObject *args) +os_sched_setparam(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2084,10 +2082,10 @@ {"sched_rr_get_interval", (PyCFunction)os_sched_rr_get_interval, METH_O, os_sched_rr_get_interval__doc__}, static double -os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_rr_get_interval(PyModuleDef *module, PyObject *arg) +os_sched_rr_get_interval_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_rr_get_interval(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -2120,10 +2118,10 @@ {"sched_yield", (PyCFunction)os_sched_yield, METH_NOARGS, os_sched_yield__doc__}, static PyObject * -os_sched_yield_impl(PyModuleDef *module); - -static PyObject * -os_sched_yield(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_sched_yield_impl(PyObject *module); + +static PyObject * +os_sched_yield(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_sched_yield_impl(module); } @@ -2144,10 +2142,10 @@ {"sched_setaffinity", (PyCFunction)os_sched_setaffinity, METH_VARARGS, os_sched_setaffinity__doc__}, static PyObject * -os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask); - -static PyObject * -os_sched_setaffinity(PyModuleDef *module, PyObject *args) +os_sched_setaffinity_impl(PyObject *module, pid_t pid, PyObject *mask); + +static PyObject * +os_sched_setaffinity(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2179,10 +2177,10 @@ {"sched_getaffinity", (PyCFunction)os_sched_getaffinity, METH_O, os_sched_getaffinity__doc__}, static PyObject * -os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_sched_getaffinity(PyModuleDef *module, PyObject *arg) +os_sched_getaffinity_impl(PyObject *module, pid_t pid); + +static PyObject * +os_sched_getaffinity(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -2213,10 +2211,10 @@ {"openpty", (PyCFunction)os_openpty, METH_NOARGS, os_openpty__doc__}, static PyObject * -os_openpty_impl(PyModuleDef *module); - -static PyObject * -os_openpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_openpty_impl(PyObject *module); + +static PyObject * +os_openpty(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_openpty_impl(module); } @@ -2240,10 +2238,10 @@ {"forkpty", (PyCFunction)os_forkpty, METH_NOARGS, os_forkpty__doc__}, static PyObject * -os_forkpty_impl(PyModuleDef *module); - -static PyObject * -os_forkpty(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_forkpty_impl(PyObject *module); + +static PyObject * +os_forkpty(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_forkpty_impl(module); } @@ -2262,10 +2260,10 @@ {"getegid", (PyCFunction)os_getegid, METH_NOARGS, os_getegid__doc__}, static PyObject * -os_getegid_impl(PyModuleDef *module); - -static PyObject * -os_getegid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getegid_impl(PyObject *module); + +static PyObject * +os_getegid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getegid_impl(module); } @@ -2284,10 +2282,10 @@ {"geteuid", (PyCFunction)os_geteuid, METH_NOARGS, os_geteuid__doc__}, static PyObject * -os_geteuid_impl(PyModuleDef *module); - -static PyObject * -os_geteuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_geteuid_impl(PyObject *module); + +static PyObject * +os_geteuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_geteuid_impl(module); } @@ -2306,10 +2304,10 @@ {"getgid", (PyCFunction)os_getgid, METH_NOARGS, os_getgid__doc__}, static PyObject * -os_getgid_impl(PyModuleDef *module); - -static PyObject * -os_getgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getgid_impl(PyObject *module); + +static PyObject * +os_getgid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getgid_impl(module); } @@ -2326,10 +2324,10 @@ {"getpid", (PyCFunction)os_getpid, METH_NOARGS, os_getpid__doc__}, static PyObject * -os_getpid_impl(PyModuleDef *module); - -static PyObject * -os_getpid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getpid_impl(PyObject *module); + +static PyObject * +os_getpid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getpid_impl(module); } @@ -2346,10 +2344,10 @@ {"getgroups", (PyCFunction)os_getgroups, METH_NOARGS, os_getgroups__doc__}, static PyObject * -os_getgroups_impl(PyModuleDef *module); - -static PyObject * -os_getgroups(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getgroups_impl(PyObject *module); + +static PyObject * +os_getgroups(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getgroups_impl(module); } @@ -2368,10 +2366,10 @@ {"getpgid", (PyCFunction)os_getpgid, METH_VARARGS|METH_KEYWORDS, os_getpgid__doc__}, static PyObject * -os_getpgid_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_getpgid(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getpgid_impl(PyObject *module, pid_t pid); + +static PyObject * +os_getpgid(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pid", NULL}; @@ -2401,10 +2399,10 @@ {"getpgrp", (PyCFunction)os_getpgrp, METH_NOARGS, os_getpgrp__doc__}, static PyObject * -os_getpgrp_impl(PyModuleDef *module); - -static PyObject * -os_getpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getpgrp_impl(PyObject *module); + +static PyObject * +os_getpgrp(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getpgrp_impl(module); } @@ -2423,10 +2421,10 @@ {"setpgrp", (PyCFunction)os_setpgrp, METH_NOARGS, os_setpgrp__doc__}, static PyObject * -os_setpgrp_impl(PyModuleDef *module); - -static PyObject * -os_setpgrp(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_setpgrp_impl(PyObject *module); + +static PyObject * +os_setpgrp(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_setpgrp_impl(module); } @@ -2448,10 +2446,10 @@ {"getppid", (PyCFunction)os_getppid, METH_NOARGS, os_getppid__doc__}, static PyObject * -os_getppid_impl(PyModuleDef *module); - -static PyObject * -os_getppid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getppid_impl(PyObject *module); + +static PyObject * +os_getppid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getppid_impl(module); } @@ -2470,10 +2468,10 @@ {"getlogin", (PyCFunction)os_getlogin, METH_NOARGS, os_getlogin__doc__}, static PyObject * -os_getlogin_impl(PyModuleDef *module); - -static PyObject * -os_getlogin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getlogin_impl(PyObject *module); + +static PyObject * +os_getlogin(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getlogin_impl(module); } @@ -2492,10 +2490,10 @@ {"getuid", (PyCFunction)os_getuid, METH_NOARGS, os_getuid__doc__}, static PyObject * -os_getuid_impl(PyModuleDef *module); - -static PyObject * -os_getuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getuid_impl(PyObject *module); + +static PyObject * +os_getuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getuid_impl(module); } @@ -2514,10 +2512,10 @@ {"kill", (PyCFunction)os_kill, METH_VARARGS, os_kill__doc__}, static PyObject * -os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal); - -static PyObject * -os_kill(PyModuleDef *module, PyObject *args) +os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal); + +static PyObject * +os_kill(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2547,10 +2545,10 @@ {"killpg", (PyCFunction)os_killpg, METH_VARARGS, os_killpg__doc__}, static PyObject * -os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal); - -static PyObject * -os_killpg(PyModuleDef *module, PyObject *args) +os_killpg_impl(PyObject *module, pid_t pgid, int signal); + +static PyObject * +os_killpg(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pgid; @@ -2580,10 +2578,10 @@ {"plock", (PyCFunction)os_plock, METH_O, os_plock__doc__}, static PyObject * -os_plock_impl(PyModuleDef *module, int op); - -static PyObject * -os_plock(PyModuleDef *module, PyObject *arg) +os_plock_impl(PyObject *module, int op); + +static PyObject * +os_plock(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int op; @@ -2611,10 +2609,10 @@ {"setuid", (PyCFunction)os_setuid, METH_O, os_setuid__doc__}, static PyObject * -os_setuid_impl(PyModuleDef *module, uid_t uid); - -static PyObject * -os_setuid(PyModuleDef *module, PyObject *arg) +os_setuid_impl(PyObject *module, uid_t uid); + +static PyObject * +os_setuid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; uid_t uid; @@ -2642,10 +2640,10 @@ {"seteuid", (PyCFunction)os_seteuid, METH_O, os_seteuid__doc__}, static PyObject * -os_seteuid_impl(PyModuleDef *module, uid_t euid); - -static PyObject * -os_seteuid(PyModuleDef *module, PyObject *arg) +os_seteuid_impl(PyObject *module, uid_t euid); + +static PyObject * +os_seteuid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; uid_t euid; @@ -2673,10 +2671,10 @@ {"setegid", (PyCFunction)os_setegid, METH_O, os_setegid__doc__}, static PyObject * -os_setegid_impl(PyModuleDef *module, gid_t egid); - -static PyObject * -os_setegid(PyModuleDef *module, PyObject *arg) +os_setegid_impl(PyObject *module, gid_t egid); + +static PyObject * +os_setegid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; gid_t egid; @@ -2704,10 +2702,10 @@ {"setreuid", (PyCFunction)os_setreuid, METH_VARARGS, os_setreuid__doc__}, static PyObject * -os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid); - -static PyObject * -os_setreuid(PyModuleDef *module, PyObject *args) +os_setreuid_impl(PyObject *module, uid_t ruid, uid_t euid); + +static PyObject * +os_setreuid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; uid_t ruid; @@ -2737,10 +2735,10 @@ {"setregid", (PyCFunction)os_setregid, METH_VARARGS, os_setregid__doc__}, static PyObject * -os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid); - -static PyObject * -os_setregid(PyModuleDef *module, PyObject *args) +os_setregid_impl(PyObject *module, gid_t rgid, gid_t egid); + +static PyObject * +os_setregid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; gid_t rgid; @@ -2770,10 +2768,10 @@ {"setgid", (PyCFunction)os_setgid, METH_O, os_setgid__doc__}, static PyObject * -os_setgid_impl(PyModuleDef *module, gid_t gid); - -static PyObject * -os_setgid(PyModuleDef *module, PyObject *arg) +os_setgid_impl(PyObject *module, gid_t gid); + +static PyObject * +os_setgid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; gid_t gid; @@ -2817,10 +2815,10 @@ {"wait3", (PyCFunction)os_wait3, METH_VARARGS|METH_KEYWORDS, os_wait3__doc__}, static PyObject * -os_wait3_impl(PyModuleDef *module, int options); - -static PyObject * -os_wait3(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_wait3_impl(PyObject *module, int options); + +static PyObject * +os_wait3(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"options", NULL}; @@ -2853,10 +2851,10 @@ {"wait4", (PyCFunction)os_wait4, METH_VARARGS|METH_KEYWORDS, os_wait4__doc__}, static PyObject * -os_wait4_impl(PyModuleDef *module, pid_t pid, int options); - -static PyObject * -os_wait4(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_wait4_impl(PyObject *module, pid_t pid, int options); + +static PyObject * +os_wait4(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"pid", "options", NULL}; @@ -2898,10 +2896,10 @@ {"waitid", (PyCFunction)os_waitid, METH_VARARGS, os_waitid__doc__}, static PyObject * -os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options); - -static PyObject * -os_waitid(PyModuleDef *module, PyObject *args) +os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options); + +static PyObject * +os_waitid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; idtype_t idtype; @@ -2937,10 +2935,10 @@ {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -os_waitpid_impl(PyModuleDef *module, pid_t pid, int options); - -static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) +os_waitpid_impl(PyObject *module, pid_t pid, int options); + +static PyObject * +os_waitpid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -2975,10 +2973,10 @@ {"waitpid", (PyCFunction)os_waitpid, METH_VARARGS, os_waitpid__doc__}, static PyObject * -os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options); - -static PyObject * -os_waitpid(PyModuleDef *module, PyObject *args) +os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options); + +static PyObject * +os_waitpid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t pid; @@ -3011,10 +3009,10 @@ {"wait", (PyCFunction)os_wait, METH_NOARGS, os_wait__doc__}, static PyObject * -os_wait_impl(PyModuleDef *module); - -static PyObject * -os_wait(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_wait_impl(PyObject *module); + +static PyObject * +os_wait(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_wait_impl(module); } @@ -3043,11 +3041,11 @@ {"symlink", (PyCFunction)os_symlink, METH_VARARGS|METH_KEYWORDS, os_symlink__doc__}, static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, +os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd); static PyObject * -os_symlink(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_symlink(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"src", "dst", "target_is_directory", "dir_fd", NULL}; @@ -3089,10 +3087,10 @@ {"times", (PyCFunction)os_times, METH_NOARGS, os_times__doc__}, static PyObject * -os_times_impl(PyModuleDef *module); - -static PyObject * -os_times(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_times_impl(PyObject *module); + +static PyObject * +os_times(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_times_impl(module); } @@ -3111,10 +3109,10 @@ {"getsid", (PyCFunction)os_getsid, METH_O, os_getsid__doc__}, static PyObject * -os_getsid_impl(PyModuleDef *module, pid_t pid); - -static PyObject * -os_getsid(PyModuleDef *module, PyObject *arg) +os_getsid_impl(PyObject *module, pid_t pid); + +static PyObject * +os_getsid(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; pid_t pid; @@ -3142,10 +3140,10 @@ {"setsid", (PyCFunction)os_setsid, METH_NOARGS, os_setsid__doc__}, static PyObject * -os_setsid_impl(PyModuleDef *module); - -static PyObject * -os_setsid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_setsid_impl(PyObject *module); + +static PyObject * +os_setsid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_setsid_impl(module); } @@ -3164,10 +3162,10 @@ {"setpgid", (PyCFunction)os_setpgid, METH_VARARGS, os_setpgid__doc__}, static PyObject * -os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp); - -static PyObject * -os_setpgid(PyModuleDef *module, PyObject *args) +os_setpgid_impl(PyObject *module, pid_t pid, pid_t pgrp); + +static PyObject * +os_setpgid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; pid_t pid; @@ -3197,10 +3195,10 @@ {"tcgetpgrp", (PyCFunction)os_tcgetpgrp, METH_O, os_tcgetpgrp__doc__}, static PyObject * -os_tcgetpgrp_impl(PyModuleDef *module, int fd); - -static PyObject * -os_tcgetpgrp(PyModuleDef *module, PyObject *arg) +os_tcgetpgrp_impl(PyObject *module, int fd); + +static PyObject * +os_tcgetpgrp(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3228,10 +3226,10 @@ {"tcsetpgrp", (PyCFunction)os_tcsetpgrp, METH_VARARGS, os_tcsetpgrp__doc__}, static PyObject * -os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid); - -static PyObject * -os_tcsetpgrp(PyModuleDef *module, PyObject *args) +os_tcsetpgrp_impl(PyObject *module, int fd, pid_t pgid); + +static PyObject * +os_tcsetpgrp(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3264,11 +3262,10 @@ {"open", (PyCFunction)os_open, METH_VARARGS|METH_KEYWORDS, os_open__doc__}, static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, - int dir_fd); - -static PyObject * -os_open(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd); + +static PyObject * +os_open(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "flags", "mode", "dir_fd", NULL}; @@ -3305,10 +3302,10 @@ {"close", (PyCFunction)os_close, METH_VARARGS|METH_KEYWORDS, os_close__doc__}, static PyObject * -os_close_impl(PyModuleDef *module, int fd); - -static PyObject * -os_close(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_close_impl(PyObject *module, int fd); + +static PyObject * +os_close(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -3334,10 +3331,10 @@ {"closerange", (PyCFunction)os_closerange, METH_VARARGS, os_closerange__doc__}, static PyObject * -os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high); - -static PyObject * -os_closerange(PyModuleDef *module, PyObject *args) +os_closerange_impl(PyObject *module, int fd_low, int fd_high); + +static PyObject * +os_closerange(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd_low; @@ -3363,10 +3360,10 @@ {"dup", (PyCFunction)os_dup, METH_O, os_dup__doc__}, static int -os_dup_impl(PyModuleDef *module, int fd); - -static PyObject * -os_dup(PyModuleDef *module, PyObject *arg) +os_dup_impl(PyObject *module, int fd); + +static PyObject * +os_dup(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3395,10 +3392,10 @@ {"dup2", (PyCFunction)os_dup2, METH_VARARGS|METH_KEYWORDS, os_dup2__doc__}, static PyObject * -os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable); - -static PyObject * -os_dup2(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable); + +static PyObject * +os_dup2(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", "fd2", "inheritable", NULL}; @@ -3435,10 +3432,10 @@ {"lockf", (PyCFunction)os_lockf, METH_VARARGS, os_lockf__doc__}, static PyObject * -os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length); - -static PyObject * -os_lockf(PyModuleDef *module, PyObject *args) +os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length); + +static PyObject * +os_lockf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3470,10 +3467,10 @@ {"lseek", (PyCFunction)os_lseek, METH_VARARGS, os_lseek__doc__}, static Py_off_t -os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how); - -static PyObject * -os_lseek(PyModuleDef *module, PyObject *args) +os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how); + +static PyObject * +os_lseek(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3505,10 +3502,10 @@ {"read", (PyCFunction)os_read, METH_VARARGS, os_read__doc__}, static PyObject * -os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length); - -static PyObject * -os_read(PyModuleDef *module, PyObject *args) +os_read_impl(PyObject *module, int fd, Py_ssize_t length); + +static PyObject * +os_read(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3544,10 +3541,10 @@ {"readv", (PyCFunction)os_readv, METH_VARARGS, os_readv__doc__}, static Py_ssize_t -os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers); - -static PyObject * -os_readv(PyModuleDef *module, PyObject *args) +os_readv_impl(PyObject *module, int fd, PyObject *buffers); + +static PyObject * +os_readv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3585,10 +3582,10 @@ {"pread", (PyCFunction)os_pread, METH_VARARGS, os_pread__doc__}, static PyObject * -os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset); - -static PyObject * -os_pread(PyModuleDef *module, PyObject *args) +os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset); + +static PyObject * +os_pread(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3617,10 +3614,10 @@ {"write", (PyCFunction)os_write, METH_VARARGS, os_write__doc__}, static Py_ssize_t -os_write_impl(PyModuleDef *module, int fd, Py_buffer *data); - -static PyObject * -os_write(PyModuleDef *module, PyObject *args) +os_write_impl(PyObject *module, int fd, Py_buffer *data); + +static PyObject * +os_write(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3659,10 +3656,10 @@ {"fstat", (PyCFunction)os_fstat, METH_VARARGS|METH_KEYWORDS, os_fstat__doc__}, static PyObject * -os_fstat_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fstat(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fstat_impl(PyObject *module, int fd); + +static PyObject * +os_fstat(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -3691,10 +3688,10 @@ {"isatty", (PyCFunction)os_isatty, METH_O, os_isatty__doc__}, static int -os_isatty_impl(PyModuleDef *module, int fd); - -static PyObject * -os_isatty(PyModuleDef *module, PyObject *arg) +os_isatty_impl(PyObject *module, int fd); + +static PyObject * +os_isatty(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -3728,10 +3725,10 @@ {"pipe", (PyCFunction)os_pipe, METH_NOARGS, os_pipe__doc__}, static PyObject * -os_pipe_impl(PyModuleDef *module); - -static PyObject * -os_pipe(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_pipe_impl(PyObject *module); + +static PyObject * +os_pipe(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_pipe_impl(module); } @@ -3756,10 +3753,10 @@ {"pipe2", (PyCFunction)os_pipe2, METH_O, os_pipe2__doc__}, static PyObject * -os_pipe2_impl(PyModuleDef *module, int flags); - -static PyObject * -os_pipe2(PyModuleDef *module, PyObject *arg) +os_pipe2_impl(PyObject *module, int flags); + +static PyObject * +os_pipe2(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int flags; @@ -3790,10 +3787,10 @@ {"writev", (PyCFunction)os_writev, METH_VARARGS, os_writev__doc__}, static Py_ssize_t -os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers); - -static PyObject * -os_writev(PyModuleDef *module, PyObject *args) +os_writev_impl(PyObject *module, int fd, PyObject *buffers); + +static PyObject * +os_writev(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3832,11 +3829,10 @@ {"pwrite", (PyCFunction)os_pwrite, METH_VARARGS, os_pwrite__doc__}, static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, - Py_off_t offset); - -static PyObject * -os_pwrite(PyModuleDef *module, PyObject *args) +os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset); + +static PyObject * +os_pwrite(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -3882,10 +3878,10 @@ {"mkfifo", (PyCFunction)os_mkfifo, METH_VARARGS|METH_KEYWORDS, os_mkfifo__doc__}, static PyObject * -os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd); - -static PyObject * -os_mkfifo(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd); + +static PyObject * +os_mkfifo(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "dir_fd", NULL}; @@ -3932,11 +3928,11 @@ {"mknod", (PyCFunction)os_mknod, METH_VARARGS|METH_KEYWORDS, os_mknod__doc__}, static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, +os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd); static PyObject * -os_mknod(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_mknod(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "mode", "device", "dir_fd", NULL}; @@ -3972,10 +3968,10 @@ {"major", (PyCFunction)os_major, METH_O, os_major__doc__}, static unsigned int -os_major_impl(PyModuleDef *module, dev_t device); - -static PyObject * -os_major(PyModuleDef *module, PyObject *arg) +os_major_impl(PyObject *module, dev_t device); + +static PyObject * +os_major(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; @@ -4008,10 +4004,10 @@ {"minor", (PyCFunction)os_minor, METH_O, os_minor__doc__}, static unsigned int -os_minor_impl(PyModuleDef *module, dev_t device); - -static PyObject * -os_minor(PyModuleDef *module, PyObject *arg) +os_minor_impl(PyObject *module, dev_t device); + +static PyObject * +os_minor(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; dev_t device; @@ -4044,10 +4040,10 @@ {"makedev", (PyCFunction)os_makedev, METH_VARARGS, os_makedev__doc__}, static dev_t -os_makedev_impl(PyModuleDef *module, int major, int minor); - -static PyObject * -os_makedev(PyModuleDef *module, PyObject *args) +os_makedev_impl(PyObject *module, int major, int minor); + +static PyObject * +os_makedev(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int major; @@ -4082,10 +4078,10 @@ {"ftruncate", (PyCFunction)os_ftruncate, METH_VARARGS, os_ftruncate__doc__}, static PyObject * -os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length); - -static PyObject * -os_ftruncate(PyModuleDef *module, PyObject *args) +os_ftruncate_impl(PyObject *module, int fd, Py_off_t length); + +static PyObject * +os_ftruncate(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4118,10 +4114,10 @@ {"truncate", (PyCFunction)os_truncate, METH_VARARGS|METH_KEYWORDS, os_truncate__doc__}, static PyObject * -os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length); - -static PyObject * -os_truncate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_truncate_impl(PyObject *module, path_t *path, Py_off_t length); + +static PyObject * +os_truncate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "length", NULL}; @@ -4158,11 +4154,11 @@ {"posix_fallocate", (PyCFunction)os_posix_fallocate, METH_VARARGS, os_posix_fallocate__doc__}, static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length); static PyObject * -os_posix_fallocate(PyModuleDef *module, PyObject *args) +os_posix_fallocate(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4201,11 +4197,11 @@ {"posix_fadvise", (PyCFunction)os_posix_fadvise, METH_VARARGS, os_posix_fadvise__doc__}, static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length, int advice); static PyObject * -os_posix_fadvise(PyModuleDef *module, PyObject *args) +os_posix_fadvise(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4237,10 +4233,10 @@ {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); - -static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *name; @@ -4270,10 +4266,10 @@ {"putenv", (PyCFunction)os_putenv, METH_VARARGS, os_putenv__doc__}, static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value); - -static PyObject * -os_putenv(PyModuleDef *module, PyObject *args) +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value); + +static PyObject * +os_putenv(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *name = NULL; @@ -4308,10 +4304,10 @@ {"unsetenv", (PyCFunction)os_unsetenv, METH_O, os_unsetenv__doc__}, static PyObject * -os_unsetenv_impl(PyModuleDef *module, PyObject *name); - -static PyObject * -os_unsetenv(PyModuleDef *module, PyObject *arg) +os_unsetenv_impl(PyObject *module, PyObject *name); + +static PyObject * +os_unsetenv(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name = NULL; @@ -4340,10 +4336,10 @@ {"strerror", (PyCFunction)os_strerror, METH_O, os_strerror__doc__}, static PyObject * -os_strerror_impl(PyModuleDef *module, int code); - -static PyObject * -os_strerror(PyModuleDef *module, PyObject *arg) +os_strerror_impl(PyObject *module, int code); + +static PyObject * +os_strerror(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int code; @@ -4369,10 +4365,10 @@ {"WCOREDUMP", (PyCFunction)os_WCOREDUMP, METH_O, os_WCOREDUMP__doc__}, static int -os_WCOREDUMP_impl(PyModuleDef *module, int status); - -static PyObject * -os_WCOREDUMP(PyModuleDef *module, PyObject *arg) +os_WCOREDUMP_impl(PyObject *module, int status); + +static PyObject * +os_WCOREDUMP(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int status; @@ -4408,10 +4404,10 @@ {"WIFCONTINUED", (PyCFunction)os_WIFCONTINUED, METH_VARARGS|METH_KEYWORDS, os_WIFCONTINUED__doc__}, static int -os_WIFCONTINUED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFCONTINUED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFCONTINUED_impl(PyObject *module, int status); + +static PyObject * +os_WIFCONTINUED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4446,10 +4442,10 @@ {"WIFSTOPPED", (PyCFunction)os_WIFSTOPPED, METH_VARARGS|METH_KEYWORDS, os_WIFSTOPPED__doc__}, static int -os_WIFSTOPPED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFSTOPPED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFSTOPPED_impl(PyObject *module, int status); + +static PyObject * +os_WIFSTOPPED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4484,10 +4480,10 @@ {"WIFSIGNALED", (PyCFunction)os_WIFSIGNALED, METH_VARARGS|METH_KEYWORDS, os_WIFSIGNALED__doc__}, static int -os_WIFSIGNALED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFSIGNALED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFSIGNALED_impl(PyObject *module, int status); + +static PyObject * +os_WIFSIGNALED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4522,10 +4518,10 @@ {"WIFEXITED", (PyCFunction)os_WIFEXITED, METH_VARARGS|METH_KEYWORDS, os_WIFEXITED__doc__}, static int -os_WIFEXITED_impl(PyModuleDef *module, int status); - -static PyObject * -os_WIFEXITED(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WIFEXITED_impl(PyObject *module, int status); + +static PyObject * +os_WIFEXITED(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4560,10 +4556,10 @@ {"WEXITSTATUS", (PyCFunction)os_WEXITSTATUS, METH_VARARGS|METH_KEYWORDS, os_WEXITSTATUS__doc__}, static int -os_WEXITSTATUS_impl(PyModuleDef *module, int status); - -static PyObject * -os_WEXITSTATUS(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WEXITSTATUS_impl(PyObject *module, int status); + +static PyObject * +os_WEXITSTATUS(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4598,10 +4594,10 @@ {"WTERMSIG", (PyCFunction)os_WTERMSIG, METH_VARARGS|METH_KEYWORDS, os_WTERMSIG__doc__}, static int -os_WTERMSIG_impl(PyModuleDef *module, int status); - -static PyObject * -os_WTERMSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WTERMSIG_impl(PyObject *module, int status); + +static PyObject * +os_WTERMSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4636,10 +4632,10 @@ {"WSTOPSIG", (PyCFunction)os_WSTOPSIG, METH_VARARGS|METH_KEYWORDS, os_WSTOPSIG__doc__}, static int -os_WSTOPSIG_impl(PyModuleDef *module, int status); - -static PyObject * -os_WSTOPSIG(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_WSTOPSIG_impl(PyObject *module, int status); + +static PyObject * +os_WSTOPSIG(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"status", NULL}; @@ -4676,10 +4672,10 @@ {"fstatvfs", (PyCFunction)os_fstatvfs, METH_O, os_fstatvfs__doc__}, static PyObject * -os_fstatvfs_impl(PyModuleDef *module, int fd); - -static PyObject * -os_fstatvfs(PyModuleDef *module, PyObject *arg) +os_fstatvfs_impl(PyObject *module, int fd); + +static PyObject * +os_fstatvfs(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -4711,10 +4707,10 @@ {"statvfs", (PyCFunction)os_statvfs, METH_VARARGS|METH_KEYWORDS, os_statvfs__doc__}, static PyObject * -os_statvfs_impl(PyModuleDef *module, path_t *path); - -static PyObject * -os_statvfs(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_statvfs_impl(PyObject *module, path_t *path); + +static PyObject * +os_statvfs(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -4747,10 +4743,10 @@ {"_getdiskusage", (PyCFunction)os__getdiskusage, METH_VARARGS|METH_KEYWORDS, os__getdiskusage__doc__}, static PyObject * -os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path); - -static PyObject * -os__getdiskusage(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os__getdiskusage_impl(PyObject *module, Py_UNICODE *path); + +static PyObject * +os__getdiskusage(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -4782,10 +4778,10 @@ {"fpathconf", (PyCFunction)os_fpathconf, METH_VARARGS, os_fpathconf__doc__}, static long -os_fpathconf_impl(PyModuleDef *module, int fd, int name); - -static PyObject * -os_fpathconf(PyModuleDef *module, PyObject *args) +os_fpathconf_impl(PyObject *module, int fd, int name); + +static PyObject * +os_fpathconf(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -4824,10 +4820,10 @@ {"pathconf", (PyCFunction)os_pathconf, METH_VARARGS|METH_KEYWORDS, os_pathconf__doc__}, static long -os_pathconf_impl(PyModuleDef *module, path_t *path, int name); - -static PyObject * -os_pathconf(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_pathconf_impl(PyObject *module, path_t *path, int name); + +static PyObject * +os_pathconf(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "name", NULL}; @@ -4866,10 +4862,10 @@ {"confstr", (PyCFunction)os_confstr, METH_O, os_confstr__doc__}, static PyObject * -os_confstr_impl(PyModuleDef *module, int name); - -static PyObject * -os_confstr(PyModuleDef *module, PyObject *arg) +os_confstr_impl(PyObject *module, int name); + +static PyObject * +os_confstr(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int name; @@ -4897,10 +4893,10 @@ {"sysconf", (PyCFunction)os_sysconf, METH_O, os_sysconf__doc__}, static long -os_sysconf_impl(PyModuleDef *module, int name); - -static PyObject * -os_sysconf(PyModuleDef *module, PyObject *arg) +os_sysconf_impl(PyObject *module, int name); + +static PyObject * +os_sysconf(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int name; @@ -4934,10 +4930,10 @@ {"abort", (PyCFunction)os_abort, METH_NOARGS, os_abort__doc__}, static PyObject * -os_abort_impl(PyModuleDef *module); - -static PyObject * -os_abort(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_abort_impl(PyObject *module); + +static PyObject * +os_abort(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_abort_impl(module); } @@ -4958,10 +4954,10 @@ {"getloadavg", (PyCFunction)os_getloadavg, METH_NOARGS, os_getloadavg__doc__}, static PyObject * -os_getloadavg_impl(PyModuleDef *module); - -static PyObject * -os_getloadavg(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getloadavg_impl(PyObject *module); + +static PyObject * +os_getloadavg(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getloadavg_impl(module); } @@ -4981,10 +4977,10 @@ {"device_encoding", (PyCFunction)os_device_encoding, METH_VARARGS|METH_KEYWORDS, os_device_encoding__doc__}, static PyObject * -os_device_encoding_impl(PyModuleDef *module, int fd); - -static PyObject * -os_device_encoding(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_device_encoding_impl(PyObject *module, int fd); + +static PyObject * +os_device_encoding(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"fd", NULL}; @@ -5012,10 +5008,10 @@ {"setresuid", (PyCFunction)os_setresuid, METH_VARARGS, os_setresuid__doc__}, static PyObject * -os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid); - -static PyObject * -os_setresuid(PyModuleDef *module, PyObject *args) +os_setresuid_impl(PyObject *module, uid_t ruid, uid_t euid, uid_t suid); + +static PyObject * +os_setresuid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; uid_t ruid; @@ -5046,10 +5042,10 @@ {"setresgid", (PyCFunction)os_setresgid, METH_VARARGS, os_setresgid__doc__}, static PyObject * -os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid); - -static PyObject * -os_setresgid(PyModuleDef *module, PyObject *args) +os_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid); + +static PyObject * +os_setresgid(PyObject *module, PyObject *args) { PyObject *return_value = NULL; gid_t rgid; @@ -5080,10 +5076,10 @@ {"getresuid", (PyCFunction)os_getresuid, METH_NOARGS, os_getresuid__doc__}, static PyObject * -os_getresuid_impl(PyModuleDef *module); - -static PyObject * -os_getresuid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getresuid_impl(PyObject *module); + +static PyObject * +os_getresuid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getresuid_impl(module); } @@ -5102,10 +5098,10 @@ {"getresgid", (PyCFunction)os_getresgid, METH_NOARGS, os_getresgid__doc__}, static PyObject * -os_getresgid_impl(PyModuleDef *module); - -static PyObject * -os_getresgid(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_getresgid_impl(PyObject *module); + +static PyObject * +os_getresgid(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_getresgid_impl(module); } @@ -5129,11 +5125,11 @@ {"getxattr", (PyCFunction)os_getxattr, METH_VARARGS|METH_KEYWORDS, os_getxattr__doc__}, static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_getxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_getxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5176,11 +5172,11 @@ {"setxattr", (PyCFunction)os_setxattr, METH_VARARGS|METH_KEYWORDS, os_setxattr__doc__}, static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks); static PyObject * -os_setxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_setxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "value", "flags", "follow_symlinks", NULL}; @@ -5228,11 +5224,11 @@ {"removexattr", (PyCFunction)os_removexattr, METH_VARARGS|METH_KEYWORDS, os_removexattr__doc__}, static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks); static PyObject * -os_removexattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_removexattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "attribute", "follow_symlinks", NULL}; @@ -5275,10 +5271,10 @@ {"listxattr", (PyCFunction)os_listxattr, METH_VARARGS|METH_KEYWORDS, os_listxattr__doc__}, static PyObject * -os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks); - -static PyObject * -os_listxattr(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks); + +static PyObject * +os_listxattr(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", "follow_symlinks", NULL}; @@ -5310,10 +5306,10 @@ {"urandom", (PyCFunction)os_urandom, METH_O, os_urandom__doc__}, static PyObject * -os_urandom_impl(PyModuleDef *module, Py_ssize_t size); - -static PyObject * -os_urandom(PyModuleDef *module, PyObject *arg) +os_urandom_impl(PyObject *module, Py_ssize_t size); + +static PyObject * +os_urandom(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_ssize_t size; @@ -5341,10 +5337,10 @@ {"cpu_count", (PyCFunction)os_cpu_count, METH_NOARGS, os_cpu_count__doc__}, static PyObject * -os_cpu_count_impl(PyModuleDef *module); - -static PyObject * -os_cpu_count(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +os_cpu_count_impl(PyObject *module); + +static PyObject * +os_cpu_count(PyObject *module, PyObject *Py_UNUSED(ignored)) { return os_cpu_count_impl(module); } @@ -5359,10 +5355,10 @@ {"get_inheritable", (PyCFunction)os_get_inheritable, METH_O, os_get_inheritable__doc__}, static int -os_get_inheritable_impl(PyModuleDef *module, int fd); - -static PyObject * -os_get_inheritable(PyModuleDef *module, PyObject *arg) +os_get_inheritable_impl(PyObject *module, int fd); + +static PyObject * +os_get_inheritable(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -5391,10 +5387,10 @@ {"set_inheritable", (PyCFunction)os_set_inheritable, METH_VARARGS, os_set_inheritable__doc__}, static PyObject * -os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable); - -static PyObject * -os_set_inheritable(PyModuleDef *module, PyObject *args) +os_set_inheritable_impl(PyObject *module, int fd, int inheritable); + +static PyObject * +os_set_inheritable(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -5422,10 +5418,10 @@ {"get_handle_inheritable", (PyCFunction)os_get_handle_inheritable, METH_O, os_get_handle_inheritable__doc__}, static int -os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle); - -static PyObject * -os_get_handle_inheritable(PyModuleDef *module, PyObject *arg) +os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle); + +static PyObject * +os_get_handle_inheritable(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -5458,11 +5454,11 @@ {"set_handle_inheritable", (PyCFunction)os_set_handle_inheritable, METH_VARARGS, os_set_handle_inheritable__doc__}, static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, int inheritable); static PyObject * -os_set_handle_inheritable(PyModuleDef *module, PyObject *args) +os_set_handle_inheritable(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -5494,10 +5490,10 @@ {"fspath", (PyCFunction)os_fspath, METH_VARARGS|METH_KEYWORDS, os_fspath__doc__}, static PyObject * -os_fspath_impl(PyModuleDef *module, PyObject *path); - -static PyObject * -os_fspath(PyModuleDef *module, PyObject *args, PyObject *kwargs) +os_fspath_impl(PyObject *module, PyObject *path); + +static PyObject * +os_fspath(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"path", NULL}; @@ -5984,4 +5980,4 @@ #ifndef OS_SET_HANDLE_INHERITABLE_METHODDEF #define OS_SET_HANDLE_INHERITABLE_METHODDEF #endif /* !defined(OS_SET_HANDLE_INHERITABLE_METHODDEF) */ -/*[clinic end generated code: output=1b91c3a100e75a4d input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e91e62d8e8f1b6ac input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pwdmodule.c.h b/Modules/clinic/pwdmodule.c.h --- a/Modules/clinic/pwdmodule.c.h +++ b/Modules/clinic/pwdmodule.c.h @@ -25,10 +25,10 @@ {"getpwnam", (PyCFunction)pwd_getpwnam, METH_O, pwd_getpwnam__doc__}, static PyObject * -pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg); +pwd_getpwnam_impl(PyObject *module, PyObject *arg); static PyObject * -pwd_getpwnam(PyModuleDef *module, PyObject *arg_) +pwd_getpwnam(PyObject *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; @@ -56,10 +56,10 @@ {"getpwall", (PyCFunction)pwd_getpwall, METH_NOARGS, pwd_getpwall__doc__}, static PyObject * -pwd_getpwall_impl(PyModuleDef *module); +pwd_getpwall_impl(PyObject *module); static PyObject * -pwd_getpwall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +pwd_getpwall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return pwd_getpwall_impl(module); } @@ -69,4 +69,4 @@ #ifndef PWD_GETPWALL_METHODDEF #define PWD_GETPWALL_METHODDEF #endif /* !defined(PWD_GETPWALL_METHODDEF) */ -/*[clinic end generated code: output=f807c89b44be0fde input=a9049054013a1b77]*/ +/*[clinic end generated code: output=fc41d8d88ec206d8 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h --- a/Modules/clinic/pyexpat.c.h +++ b/Modules/clinic/pyexpat.c.h @@ -236,11 +236,11 @@ {"ParserCreate", (PyCFunction)pyexpat_ParserCreate, METH_VARARGS|METH_KEYWORDS, pyexpat_ParserCreate__doc__}, static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, +pyexpat_ParserCreate_impl(PyObject *module, const char *encoding, const char *namespace_separator, PyObject *intern); static PyObject * -pyexpat_ParserCreate(PyModuleDef *module, PyObject *args, PyObject *kwargs) +pyexpat_ParserCreate(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"encoding", "namespace_separator", "intern", NULL}; @@ -268,10 +268,10 @@ {"ErrorString", (PyCFunction)pyexpat_ErrorString, METH_O, pyexpat_ErrorString__doc__}, static PyObject * -pyexpat_ErrorString_impl(PyModuleDef *module, long code); +pyexpat_ErrorString_impl(PyObject *module, long code); static PyObject * -pyexpat_ErrorString(PyModuleDef *module, PyObject *arg) +pyexpat_ErrorString(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; long code; @@ -288,4 +288,4 @@ #ifndef PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF #endif /* !defined(PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF) */ -/*[clinic end generated code: output=71a60d709647fbe3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9de21f46734b1311 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha1module.c.h b/Modules/clinic/sha1module.c.h --- a/Modules/clinic/sha1module.c.h +++ b/Modules/clinic/sha1module.c.h @@ -75,10 +75,10 @@ {"sha1", (PyCFunction)_sha1_sha1, METH_VARARGS|METH_KEYWORDS, _sha1_sha1__doc__}, static PyObject * -_sha1_sha1_impl(PyModuleDef *module, PyObject *string); +_sha1_sha1_impl(PyObject *module, PyObject *string); static PyObject * -_sha1_sha1(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha1_sha1(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -93,4 +93,4 @@ exit: return return_value; } -/*[clinic end generated code: output=40df3f8955919e72 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=475c4cc749ab31b1 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha256module.c.h b/Modules/clinic/sha256module.c.h --- a/Modules/clinic/sha256module.c.h +++ b/Modules/clinic/sha256module.c.h @@ -75,10 +75,10 @@ {"sha256", (PyCFunction)_sha256_sha256, METH_VARARGS|METH_KEYWORDS, _sha256_sha256__doc__}, static PyObject * -_sha256_sha256_impl(PyModuleDef *module, PyObject *string); +_sha256_sha256_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha256(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha256_sha256(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -104,10 +104,10 @@ {"sha224", (PyCFunction)_sha256_sha224, METH_VARARGS|METH_KEYWORDS, _sha256_sha224__doc__}, static PyObject * -_sha256_sha224_impl(PyModuleDef *module, PyObject *string); +_sha256_sha224_impl(PyObject *module, PyObject *string); static PyObject * -_sha256_sha224(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha256_sha224(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -122,4 +122,4 @@ exit: return return_value; } -/*[clinic end generated code: output=e85cc4a223371d84 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=a41a21c08fcddd70 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/sha512module.c.h b/Modules/clinic/sha512module.c.h --- a/Modules/clinic/sha512module.c.h +++ b/Modules/clinic/sha512module.c.h @@ -93,10 +93,10 @@ {"sha512", (PyCFunction)_sha512_sha512, METH_VARARGS|METH_KEYWORDS, _sha512_sha512__doc__}, static PyObject * -_sha512_sha512_impl(PyModuleDef *module, PyObject *string); +_sha512_sha512_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha512(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha512_sha512(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -126,10 +126,10 @@ {"sha384", (PyCFunction)_sha512_sha384, METH_VARARGS|METH_KEYWORDS, _sha512_sha384__doc__}, static PyObject * -_sha512_sha384_impl(PyModuleDef *module, PyObject *string); +_sha512_sha384_impl(PyObject *module, PyObject *string); static PyObject * -_sha512_sha384(PyModuleDef *module, PyObject *args, PyObject *kwargs) +_sha512_sha384(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"string", NULL}; @@ -170,4 +170,4 @@ #ifndef _SHA512_SHA384_METHODDEF #define _SHA512_SHA384_METHODDEF #endif /* !defined(_SHA512_SHA384_METHODDEF) */ -/*[clinic end generated code: output=845af47cea22e2a1 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=e314c0f773abd5d7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h --- a/Modules/clinic/signalmodule.c.h +++ b/Modules/clinic/signalmodule.c.h @@ -14,10 +14,10 @@ {"alarm", (PyCFunction)signal_alarm, METH_O, signal_alarm__doc__}, static long -signal_alarm_impl(PyModuleDef *module, int seconds); +signal_alarm_impl(PyObject *module, int seconds); static PyObject * -signal_alarm(PyModuleDef *module, PyObject *arg) +signal_alarm(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int seconds; @@ -50,10 +50,10 @@ {"pause", (PyCFunction)signal_pause, METH_NOARGS, signal_pause__doc__}, static PyObject * -signal_pause_impl(PyModuleDef *module); +signal_pause_impl(PyObject *module); static PyObject * -signal_pause(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +signal_pause(PyObject *module, PyObject *Py_UNUSED(ignored)) { return signal_pause_impl(module); } @@ -77,10 +77,10 @@ {"signal", (PyCFunction)signal_signal, METH_VARARGS, signal_signal__doc__}, static PyObject * -signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler); +signal_signal_impl(PyObject *module, int signalnum, PyObject *handler); static PyObject * -signal_signal(PyModuleDef *module, PyObject *args) +signal_signal(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int signalnum; @@ -112,10 +112,10 @@ {"getsignal", (PyCFunction)signal_getsignal, METH_O, signal_getsignal__doc__}, static PyObject * -signal_getsignal_impl(PyModuleDef *module, int signalnum); +signal_getsignal_impl(PyObject *module, int signalnum); static PyObject * -signal_getsignal(PyModuleDef *module, PyObject *arg) +signal_getsignal(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int signalnum; @@ -144,10 +144,10 @@ {"siginterrupt", (PyCFunction)signal_siginterrupt, METH_VARARGS, signal_siginterrupt__doc__}, static PyObject * -signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag); +signal_siginterrupt_impl(PyObject *module, int signalnum, int flag); static PyObject * -signal_siginterrupt(PyModuleDef *module, PyObject *args) +signal_siginterrupt(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int signalnum; @@ -182,11 +182,11 @@ {"setitimer", (PyCFunction)signal_setitimer, METH_VARARGS, signal_setitimer__doc__}, static PyObject * -signal_setitimer_impl(PyModuleDef *module, int which, double seconds, +signal_setitimer_impl(PyObject *module, int which, double seconds, double interval); static PyObject * -signal_setitimer(PyModuleDef *module, PyObject *args) +signal_setitimer(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int which; @@ -217,10 +217,10 @@ {"getitimer", (PyCFunction)signal_getitimer, METH_O, signal_getitimer__doc__}, static PyObject * -signal_getitimer_impl(PyModuleDef *module, int which); +signal_getitimer_impl(PyObject *module, int which); static PyObject * -signal_getitimer(PyModuleDef *module, PyObject *arg) +signal_getitimer(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int which; @@ -248,10 +248,10 @@ {"pthread_sigmask", (PyCFunction)signal_pthread_sigmask, METH_VARARGS, signal_pthread_sigmask__doc__}, static PyObject * -signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask); +signal_pthread_sigmask_impl(PyObject *module, int how, PyObject *mask); static PyObject * -signal_pthread_sigmask(PyModuleDef *module, PyObject *args) +signal_pthread_sigmask(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int how; @@ -284,10 +284,10 @@ {"sigpending", (PyCFunction)signal_sigpending, METH_NOARGS, signal_sigpending__doc__}, static PyObject * -signal_sigpending_impl(PyModuleDef *module); +signal_sigpending_impl(PyObject *module); static PyObject * -signal_sigpending(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +signal_sigpending(PyObject *module, PyObject *Py_UNUSED(ignored)) { return signal_sigpending_impl(module); } @@ -340,11 +340,11 @@ {"sigtimedwait", (PyCFunction)signal_sigtimedwait, METH_VARARGS, signal_sigtimedwait__doc__}, static PyObject * -signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, +signal_sigtimedwait_impl(PyObject *module, PyObject *sigset, PyObject *timeout_obj); static PyObject * -signal_sigtimedwait(PyModuleDef *module, PyObject *args) +signal_sigtimedwait(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *sigset; @@ -375,10 +375,10 @@ {"pthread_kill", (PyCFunction)signal_pthread_kill, METH_VARARGS, signal_pthread_kill__doc__}, static PyObject * -signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum); +signal_pthread_kill_impl(PyObject *module, long thread_id, int signalnum); static PyObject * -signal_pthread_kill(PyModuleDef *module, PyObject *args) +signal_pthread_kill(PyObject *module, PyObject *args) { PyObject *return_value = NULL; long thread_id; @@ -439,4 +439,4 @@ #ifndef SIGNAL_PTHREAD_KILL_METHODDEF #define SIGNAL_PTHREAD_KILL_METHODDEF #endif /* !defined(SIGNAL_PTHREAD_KILL_METHODDEF) */ -/*[clinic end generated code: output=4b9519180a091536 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c6990ef0d0ba72b6 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/spwdmodule.c.h b/Modules/clinic/spwdmodule.c.h --- a/Modules/clinic/spwdmodule.c.h +++ b/Modules/clinic/spwdmodule.c.h @@ -16,10 +16,10 @@ {"getspnam", (PyCFunction)spwd_getspnam, METH_O, spwd_getspnam__doc__}, static PyObject * -spwd_getspnam_impl(PyModuleDef *module, PyObject *arg); +spwd_getspnam_impl(PyObject *module, PyObject *arg); static PyObject * -spwd_getspnam(PyModuleDef *module, PyObject *arg_) +spwd_getspnam(PyObject *module, PyObject *arg_) { PyObject *return_value = NULL; PyObject *arg; @@ -49,10 +49,10 @@ {"getspall", (PyCFunction)spwd_getspall, METH_NOARGS, spwd_getspall__doc__}, static PyObject * -spwd_getspall_impl(PyModuleDef *module); +spwd_getspall_impl(PyObject *module); static PyObject * -spwd_getspall(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +spwd_getspall(PyObject *module, PyObject *Py_UNUSED(ignored)) { return spwd_getspall_impl(module); } @@ -66,4 +66,4 @@ #ifndef SPWD_GETSPALL_METHODDEF #define SPWD_GETSPALL_METHODDEF #endif /* !defined(SPWD_GETSPALL_METHODDEF) */ -/*[clinic end generated code: output=2b7a384447e5f1e3 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=07cd8af0afd77fe7 input=a9049054013a1b77]*/ diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -17,10 +17,10 @@ {"compress", (PyCFunction)zlib_compress, METH_VARARGS|METH_KEYWORDS, zlib_compress__doc__}, static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *data, int level); +zlib_compress_impl(PyObject *module, Py_buffer *data, int level); static PyObject * -zlib_compress(PyModuleDef *module, PyObject *args, PyObject *kwargs) +zlib_compress(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"", "level", NULL}; @@ -59,11 +59,11 @@ {"decompress", (PyCFunction)zlib_decompress, METH_VARARGS, zlib_decompress__doc__}, static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, +zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, unsigned int bufsize); static PyObject * -zlib_decompress(PyModuleDef *module, PyObject *args) +zlib_decompress(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -119,11 +119,11 @@ {"compressobj", (PyCFunction)zlib_compressobj, METH_VARARGS|METH_KEYWORDS, zlib_compressobj__doc__}, static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, +zlib_compressobj_impl(PyObject *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict); static PyObject * -zlib_compressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +zlib_compressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"level", "method", "wbits", "memLevel", "strategy", "zdict", NULL}; @@ -165,10 +165,10 @@ {"decompressobj", (PyCFunction)zlib_decompressobj, METH_VARARGS|METH_KEYWORDS, zlib_decompressobj__doc__}, static PyObject * -zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict); +zlib_decompressobj_impl(PyObject *module, int wbits, PyObject *zdict); static PyObject * -zlib_decompressobj(PyModuleDef *module, PyObject *args, PyObject *kwargs) +zlib_decompressobj(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"wbits", "zdict", NULL}; @@ -394,10 +394,10 @@ {"adler32", (PyCFunction)zlib_adler32, METH_VARARGS, zlib_adler32__doc__}, static PyObject * -zlib_adler32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value); +zlib_adler32_impl(PyObject *module, Py_buffer *data, unsigned int value); static PyObject * -zlib_adler32(PyModuleDef *module, PyObject *args) +zlib_adler32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -433,10 +433,10 @@ {"crc32", (PyCFunction)zlib_crc32, METH_VARARGS, zlib_crc32__doc__}, static PyObject * -zlib_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value); +zlib_crc32_impl(PyObject *module, Py_buffer *data, unsigned int value); static PyObject * -zlib_crc32(PyModuleDef *module, PyObject *args) +zlib_crc32(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; @@ -460,4 +460,4 @@ #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=ba904dec30cc1a1a input=a9049054013a1b77]*/ +/*[clinic end generated code: output=519446af912f4e72 input=a9049054013a1b77]*/ diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -82,12 +82,12 @@ #define CM_SCALE_DOWN (-(CM_SCALE_UP+1)/2) /* forward declarations */ -static Py_complex cmath_asinh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_atanh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_cosh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_sinh_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_sqrt_impl(PyModuleDef *, Py_complex); -static Py_complex cmath_tanh_impl(PyModuleDef *, Py_complex); +static Py_complex cmath_asinh_impl(PyObject *, Py_complex); +static Py_complex cmath_atanh_impl(PyObject *, Py_complex); +static Py_complex cmath_cosh_impl(PyObject *, Py_complex); +static Py_complex cmath_sinh_impl(PyObject *, Py_complex); +static Py_complex cmath_sqrt_impl(PyObject *, Py_complex); +static Py_complex cmath_tanh_impl(PyObject *, Py_complex); static PyObject * math_error(void); /* Code to deal with special values (infinities, NaNs, etc.). */ @@ -167,8 +167,8 @@ [clinic start generated code]*/ static Py_complex -cmath_acos_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=7c1dd21ff818db6b input=bd6cbd78ae851927]*/ +cmath_acos_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=40bd42853fd460ae input=bd6cbd78ae851927]*/ { Py_complex s1, s2, r; @@ -210,8 +210,8 @@ [clinic start generated code]*/ static Py_complex -cmath_acosh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=c23c776429def981 input=3f61bee7d703e53c]*/ +cmath_acosh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=3e2454d4fcf404ca input=3f61bee7d703e53c]*/ { Py_complex s1, s2, r; @@ -242,8 +242,8 @@ [clinic start generated code]*/ static Py_complex -cmath_asin_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=42d2346d46690826 input=be0bf0cfdd5239c5]*/ +cmath_asin_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=3b264cd1b16bf4e1 input=be0bf0cfdd5239c5]*/ { /* asin(z) = -i asinh(iz) */ Py_complex s, r; @@ -265,8 +265,8 @@ [clinic start generated code]*/ static Py_complex -cmath_asinh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=0c6664823c7b1b35 input=5c09448fcfc89a79]*/ +cmath_asinh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=733d8107841a7599 input=5c09448fcfc89a79]*/ { Py_complex s1, s2, r; @@ -303,8 +303,8 @@ [clinic start generated code]*/ static Py_complex -cmath_atan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b7d44f02c6a5c3b5 input=3b21ff7d5eac632a]*/ +cmath_atan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=b6bfc497058acba4 input=3b21ff7d5eac632a]*/ { /* atan(z) = -i atanh(iz) */ Py_complex s, r; @@ -356,8 +356,8 @@ [clinic start generated code]*/ static Py_complex -cmath_atanh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=279e0b9fefc8da7c input=2b3fdb82fb34487b]*/ +cmath_atanh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=e83355f93a989c9e input=2b3fdb82fb34487b]*/ { Py_complex r; double ay, h; @@ -411,8 +411,8 @@ [clinic start generated code]*/ static Py_complex -cmath_cos_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=9d1cdc1b5e761667 input=6022e39b77127ac7]*/ +cmath_cos_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=fd64918d5b3186db input=6022e39b77127ac7]*/ { /* cos(z) = cosh(iz) */ Py_complex r; @@ -433,8 +433,8 @@ [clinic start generated code]*/ static Py_complex -cmath_cosh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=f3b5d3282b3024d3 input=d6b66339e9cc332b]*/ +cmath_cosh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=2e969047da601bdb input=d6b66339e9cc332b]*/ { Py_complex r; double x_minus_one; @@ -495,8 +495,8 @@ [clinic start generated code]*/ static Py_complex -cmath_exp_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=6f8825eb2bcad9ba input=8b9e6cf8a92174c3]*/ +cmath_exp_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=edcec61fb9dfda6c input=8b9e6cf8a92174c3]*/ { Py_complex r; double l; @@ -624,8 +624,8 @@ [clinic start generated code]*/ static Py_complex -cmath_log10_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=c7c426ca0e782341 input=cff5644f73c1519c]*/ +cmath_log10_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=2922779a7c38cbe1 input=cff5644f73c1519c]*/ { Py_complex r; int errno_save; @@ -646,8 +646,8 @@ [clinic start generated code]*/ static Py_complex -cmath_sin_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=e7f5e2b253825ac7 input=2d3519842a8b4b85]*/ +cmath_sin_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=980370d2ff0bb5aa input=2d3519842a8b4b85]*/ { /* sin(z) = -i sin(iz) */ Py_complex s, r; @@ -670,8 +670,8 @@ [clinic start generated code]*/ static Py_complex -cmath_sinh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=d71fff8298043a95 input=d2d3fc8c1ddfd2dd]*/ +cmath_sinh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=38b0a6cce26f3536 input=d2d3fc8c1ddfd2dd]*/ { Py_complex r; double x_minus_one; @@ -729,8 +729,8 @@ [clinic start generated code]*/ static Py_complex -cmath_sqrt_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b6bda283d0c5a7b4 input=7088b166fc9a58c7]*/ +cmath_sqrt_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=b6507b3029c339fc input=7088b166fc9a58c7]*/ { /* Method: use symmetries to reduce to the case when x = z.real and y @@ -804,8 +804,8 @@ [clinic start generated code]*/ static Py_complex -cmath_tan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=df374bacf36d99b4 input=fc167e528767888e]*/ +cmath_tan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=7c5f13158a72eb13 input=fc167e528767888e]*/ { /* tan(z) = -i tanh(iz) */ Py_complex s, r; @@ -828,8 +828,8 @@ [clinic start generated code]*/ static Py_complex -cmath_tanh_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=f578773d27a18e96 input=22f67f9dc6d29685]*/ +cmath_tanh_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=36d547ef7aca116c input=22f67f9dc6d29685]*/ { /* Formula: @@ -906,8 +906,8 @@ [clinic start generated code]*/ static PyObject * -cmath_log_impl(PyModuleDef *module, Py_complex x, PyObject *y_obj) -/*[clinic end generated code: output=35e2a1e5229b5a46 input=ee0e823a7c6e68ea]*/ +cmath_log_impl(PyObject *module, Py_complex x, PyObject *y_obj) +/*[clinic end generated code: output=4effdb7d258e0d94 input=ee0e823a7c6e68ea]*/ { Py_complex y; @@ -954,8 +954,8 @@ [clinic start generated code]*/ static PyObject * -cmath_phase_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=e09eaf373cb624c3 input=5cf75228ba94b69d]*/ +cmath_phase_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=50725086a7bfd253 input=5cf75228ba94b69d]*/ { double phi; @@ -981,8 +981,8 @@ [clinic start generated code]*/ static PyObject * -cmath_polar_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=07d41b16c877875a input=26c353574fd1a861]*/ +cmath_polar_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=d0a8147c41dbb654 input=26c353574fd1a861]*/ { double r, phi; @@ -1021,8 +1021,8 @@ [clinic start generated code]*/ static PyObject * -cmath_rect_impl(PyModuleDef *module, double r, double phi) -/*[clinic end generated code: output=d97a8749bd63e9d5 input=24c5646d147efd69]*/ +cmath_rect_impl(PyObject *module, double r, double phi) +/*[clinic end generated code: output=385a0690925df2d5 input=24c5646d147efd69]*/ { Py_complex z; errno = 0; @@ -1082,8 +1082,8 @@ [clinic start generated code]*/ static PyObject * -cmath_isfinite_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=8f6682fa93de45d6 input=848e7ee701895815]*/ +cmath_isfinite_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=ac76611e2c774a36 input=848e7ee701895815]*/ { return PyBool_FromLong(Py_IS_FINITE(z.real) && Py_IS_FINITE(z.imag)); } @@ -1095,8 +1095,8 @@ [clinic start generated code]*/ static PyObject * -cmath_isnan_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=b85fe8c2047718ee input=71799f5d284c9baf]*/ +cmath_isnan_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=e7abf6e0b28beab7 input=71799f5d284c9baf]*/ { return PyBool_FromLong(Py_IS_NAN(z.real) || Py_IS_NAN(z.imag)); } @@ -1108,8 +1108,8 @@ [clinic start generated code]*/ static PyObject * -cmath_isinf_impl(PyModuleDef *module, Py_complex z) -/*[clinic end generated code: output=8ca9c6109e468bf4 input=363df155c7181329]*/ +cmath_isinf_impl(PyObject *module, Py_complex z) +/*[clinic end generated code: output=502a75a79c773469 input=363df155c7181329]*/ { return PyBool_FromLong(Py_IS_INFINITY(z.real) || Py_IS_INFINITY(z.imag)); @@ -1140,9 +1140,9 @@ [clinic start generated code]*/ static int -cmath_isclose_impl(PyModuleDef *module, Py_complex a, Py_complex b, +cmath_isclose_impl(PyObject *module, Py_complex a, Py_complex b, double rel_tol, double abs_tol) -/*[clinic end generated code: output=da0c535fb54e2310 input=df9636d7de1d4ac3]*/ +/*[clinic end generated code: output=8a2486cc6e0014d1 input=df9636d7de1d4ac3]*/ { double diff; diff --git a/Modules/fcntlmodule.c b/Modules/fcntlmodule.c --- a/Modules/fcntlmodule.c +++ b/Modules/fcntlmodule.c @@ -56,8 +56,8 @@ [clinic start generated code]*/ static PyObject * -fcntl_fcntl_impl(PyModuleDef *module, int fd, int code, PyObject *arg) -/*[clinic end generated code: output=afc5bfa74a03ef0d input=8cefbe59b29efbe2]*/ +fcntl_fcntl_impl(PyObject *module, int fd, int code, PyObject *arg) +/*[clinic end generated code: output=888fc93b51c295bd input=8cefbe59b29efbe2]*/ { unsigned int int_arg = 0; int ret; @@ -146,9 +146,9 @@ [clinic start generated code]*/ static PyObject * -fcntl_ioctl_impl(PyModuleDef *module, int fd, unsigned int code, +fcntl_ioctl_impl(PyObject *module, int fd, unsigned int code, PyObject *ob_arg, int mutate_arg) -/*[clinic end generated code: output=102faa0f7ebe2210 input=ede70c433cccbbb2]*/ +/*[clinic end generated code: output=7f7f5840c65991be input=ede70c433cccbbb2]*/ { #define IOCTL_BUFSZ 1024 /* We use the unsigned non-checked 'I' format for the 'code' parameter @@ -279,8 +279,8 @@ [clinic start generated code]*/ static PyObject * -fcntl_flock_impl(PyModuleDef *module, int fd, int code) -/*[clinic end generated code: output=c9035133a7dbfc96 input=b70a0a41ca22a8a0]*/ +fcntl_flock_impl(PyObject *module, int fd, int code) +/*[clinic end generated code: output=84059e2b37d2fc64 input=b70a0a41ca22a8a0]*/ { int ret; @@ -358,9 +358,9 @@ [clinic start generated code]*/ static PyObject * -fcntl_lockf_impl(PyModuleDef *module, int fd, int code, PyObject *lenobj, +fcntl_lockf_impl(PyObject *module, int fd, int code, PyObject *lenobj, PyObject *startobj, int whence) -/*[clinic end generated code: output=31af35eba08b9af7 input=3a5dc01b04371f1a]*/ +/*[clinic end generated code: output=4985e7a172e7461a input=3a5dc01b04371f1a]*/ { int ret; diff --git a/Modules/grpmodule.c b/Modules/grpmodule.c --- a/Modules/grpmodule.c +++ b/Modules/grpmodule.c @@ -93,8 +93,8 @@ [clinic start generated code]*/ static PyObject * -grp_getgrgid_impl(PyModuleDef *module, PyObject *id) -/*[clinic end generated code: output=8a11f5fdeb8c78a0 input=15fa0e2ccf5cda25]*/ +grp_getgrgid_impl(PyObject *module, PyObject *id) +/*[clinic end generated code: output=30797c289504a1ba input=15fa0e2ccf5cda25]*/ { PyObject *py_int_id; gid_t gid; @@ -142,8 +142,8 @@ [clinic start generated code]*/ static PyObject * -grp_getgrnam_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=cd47511f4854da8e input=08ded29affa3c863]*/ +grp_getgrnam_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=67905086f403c21c input=08ded29affa3c863]*/ { char *name_chars; struct group *p; @@ -174,8 +174,8 @@ [clinic start generated code]*/ static PyObject * -grp_getgrall_impl(PyModuleDef *module) -/*[clinic end generated code: output=add9037a20c202de input=d7df76c825c367df]*/ +grp_getgrall_impl(PyObject *module) +/*[clinic end generated code: output=585dad35e2e763d7 input=d7df76c825c367df]*/ { PyObject *d; struct group *p; diff --git a/Modules/md5module.c b/Modules/md5module.c --- a/Modules/md5module.c +++ b/Modules/md5module.c @@ -509,8 +509,8 @@ [clinic start generated code]*/ static PyObject * -_md5_md5_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=3527436a2090b956 input=d12ef8f72d684f7b]*/ +_md5_md5_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=2cfd0f8c091b97e6 input=d12ef8f72d684f7b]*/ { MD5object *new; Py_buffer buf; diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2490,9 +2490,8 @@ [clinic start generated code]*/ static PyObject * -os_stat_impl(PyModuleDef *module, path_t *path, int dir_fd, - int follow_symlinks) -/*[clinic end generated code: output=e4f7569f95d523ca input=099d356c306fa24a]*/ +os_stat_impl(PyObject *module, path_t *path, int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=7d4976e6f18a59c5 input=099d356c306fa24a]*/ { return posix_do_stat("stat", path, dir_fd, follow_symlinks); } @@ -2514,8 +2513,8 @@ [clinic start generated code]*/ static PyObject * -os_lstat_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=7a748e333fcb39bd input=0b7474765927b925]*/ +os_lstat_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=ef82a5d35ce8ab37 input=0b7474765927b925]*/ { int follow_symlinks = 0; return posix_do_stat("lstat", path, dir_fd, follow_symlinks); @@ -2562,9 +2561,9 @@ [clinic start generated code]*/ static int -os_access_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_access_impl(PyObject *module, path_t *path, int mode, int dir_fd, int effective_ids, int follow_symlinks) -/*[clinic end generated code: output=abaa53340210088d input=b75a756797af45ec]*/ +/*[clinic end generated code: output=cf84158bc90b1a77 input=b75a756797af45ec]*/ { int return_value; @@ -2655,8 +2654,8 @@ [clinic start generated code]*/ static char * -os_ttyname_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=03ad3d5ccaef75c3 input=5f72ca83e76b3b45]*/ +os_ttyname_impl(PyObject *module, int fd) +/*[clinic end generated code: output=ed16ad216d813591 input=5f72ca83e76b3b45]*/ { char *ret; @@ -2675,8 +2674,8 @@ [clinic start generated code]*/ static PyObject * -os_ctermid_impl(PyModuleDef *module) -/*[clinic end generated code: output=1b73788201e0aebd input=3b87fdd52556382d]*/ +os_ctermid_impl(PyObject *module) +/*[clinic end generated code: output=02f017e6c9e620db input=3b87fdd52556382d]*/ { char *ret; char buffer[L_ctermid]; @@ -2706,8 +2705,8 @@ [clinic start generated code]*/ static PyObject * -os_chdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=7358e3a20fb5aa93 input=1a4a15b4d12cb15d]*/ +os_chdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=3be6400eee26eaae input=1a4a15b4d12cb15d]*/ { int result; @@ -2750,8 +2749,8 @@ [clinic start generated code]*/ static PyObject * -os_fchdir_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=361d30df6b2d3418 input=18e816479a2fa985]*/ +os_fchdir_impl(PyObject *module, int fd) +/*[clinic end generated code: output=42e064ec4dc00ab0 input=18e816479a2fa985]*/ { return posix_fildes_fd(fd, fchdir); } @@ -2791,9 +2790,9 @@ [clinic start generated code]*/ static PyObject * -os_chmod_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd, +os_chmod_impl(PyObject *module, path_t *path, int mode, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=05e7f73b1a843ba2 input=7f1618e5e15cc196]*/ +/*[clinic end generated code: output=5cf6a94915cc7bff input=7f1618e5e15cc196]*/ { int result; @@ -2905,8 +2904,8 @@ [clinic start generated code]*/ static PyObject * -os_fchmod_impl(PyModuleDef *module, int fd, int mode) -/*[clinic end generated code: output=2ee31ca226d1ed33 input=8ab11975ca01ee5b]*/ +os_fchmod_impl(PyObject *module, int fd, int mode) +/*[clinic end generated code: output=afd9bc05b4e426b3 input=8ab11975ca01ee5b]*/ { int res; int async_err = 0; @@ -2938,8 +2937,8 @@ [clinic start generated code]*/ static PyObject * -os_lchmod_impl(PyModuleDef *module, path_t *path, int mode) -/*[clinic end generated code: output=7c0cc46588d89e46 input=90c5663c7465d24f]*/ +os_lchmod_impl(PyObject *module, path_t *path, int mode) +/*[clinic end generated code: output=082344022b51a1d5 input=90c5663c7465d24f]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -2973,9 +2972,9 @@ [clinic start generated code]*/ static PyObject * -os_chflags_impl(PyModuleDef *module, path_t *path, unsigned long flags, +os_chflags_impl(PyObject *module, path_t *path, unsigned long flags, int follow_symlinks) -/*[clinic end generated code: output=ff2d6e73534a95b9 input=0327e29feb876236]*/ +/*[clinic end generated code: output=85571c6737661ce9 input=0327e29feb876236]*/ { int result; @@ -3015,8 +3014,8 @@ [clinic start generated code]*/ static PyObject * -os_lchflags_impl(PyModuleDef *module, path_t *path, unsigned long flags) -/*[clinic end generated code: output=6741322fb949661b input=f9f82ea8b585ca9d]*/ +os_lchflags_impl(PyObject *module, path_t *path, unsigned long flags) +/*[clinic end generated code: output=30ae958695c07316 input=f9f82ea8b585ca9d]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3040,8 +3039,8 @@ [clinic start generated code]*/ static PyObject * -os_chroot_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=b6dbfabe74ecaa9d input=14822965652c3dc3]*/ +os_chroot_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=de80befc763a4475 input=14822965652c3dc3]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3064,8 +3063,8 @@ [clinic start generated code]*/ static PyObject * -os_fsync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=83a350851064aea7 input=21c3645c056967f2]*/ +os_fsync_impl(PyObject *module, int fd) +/*[clinic end generated code: output=4a10d773f52b3584 input=21c3645c056967f2]*/ { return posix_fildes_fd(fd, fsync); } @@ -3080,8 +3079,8 @@ [clinic start generated code]*/ static PyObject * -os_sync_impl(PyModuleDef *module) -/*[clinic end generated code: output=ba524f656c201c40 input=84749fe5e9b404ff]*/ +os_sync_impl(PyObject *module) +/*[clinic end generated code: output=2796b1f0818cd71c input=84749fe5e9b404ff]*/ { Py_BEGIN_ALLOW_THREADS sync(); @@ -3105,8 +3104,8 @@ [clinic start generated code]*/ static PyObject * -os_fdatasync_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=e0f04a3aff515b75 input=bc74791ee54dd291]*/ +os_fdatasync_impl(PyObject *module, int fd) +/*[clinic end generated code: output=b4b9698b5d7e26dd input=bc74791ee54dd291]*/ { return posix_fildes_fd(fd, fdatasync); } @@ -3154,9 +3153,9 @@ [clinic start generated code]*/ static PyObject * -os_chown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid, +os_chown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=e0a4559f394dbd91 input=a61cc35574814d5d]*/ +/*[clinic end generated code: output=4beadab0db5f70cd input=a61cc35574814d5d]*/ { int result; @@ -3224,8 +3223,8 @@ [clinic start generated code]*/ static PyObject * -os_fchown_impl(PyModuleDef *module, int fd, uid_t uid, gid_t gid) -/*[clinic end generated code: output=7545abf8f6086d76 input=3af544ba1b13a0d7]*/ +os_fchown_impl(PyObject *module, int fd, uid_t uid, gid_t gid) +/*[clinic end generated code: output=97d21cbd5a4350a6 input=3af544ba1b13a0d7]*/ { int res; int async_err = 0; @@ -3258,8 +3257,8 @@ [clinic start generated code]*/ static PyObject * -os_lchown_impl(PyModuleDef *module, path_t *path, uid_t uid, gid_t gid) -/*[clinic end generated code: output=bb0d2da1579ac275 input=b1c6014d563a7161]*/ +os_lchown_impl(PyObject *module, path_t *path, uid_t uid, gid_t gid) +/*[clinic end generated code: output=25eaf6af412fdf2f input=b1c6014d563a7161]*/ { int res; Py_BEGIN_ALLOW_THREADS @@ -3363,8 +3362,8 @@ [clinic start generated code]*/ static PyObject * -os_getcwd_impl(PyModuleDef *module) -/*[clinic end generated code: output=efe3a8c0121525ea input=f069211bb70e3d39]*/ +os_getcwd_impl(PyObject *module) +/*[clinic end generated code: output=21badfae2ea99ddc input=f069211bb70e3d39]*/ { return posix_getcwd(0); } @@ -3377,8 +3376,8 @@ [clinic start generated code]*/ static PyObject * -os_getcwdb_impl(PyModuleDef *module) -/*[clinic end generated code: output=7fce42ee4b2a296a input=f6f6a378dad3d9cb]*/ +os_getcwdb_impl(PyObject *module) +/*[clinic end generated code: output=3dd47909480e4824 input=f6f6a378dad3d9cb]*/ { return posix_getcwd(1); } @@ -3414,9 +3413,9 @@ [clinic start generated code]*/ static PyObject * -os_link_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_link_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd, int follow_symlinks) -/*[clinic end generated code: output=f47a7e88f7b391b6 input=b0095ebbcbaa7e04]*/ +/*[clinic end generated code: output=7f00f6007fd5269a input=b0095ebbcbaa7e04]*/ { #ifdef MS_WINDOWS BOOL result; @@ -3753,8 +3752,8 @@ [clinic start generated code]*/ static PyObject * -os_listdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=1fbe67c1f780c8b7 input=09e300416e3cd729]*/ +os_listdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=293045673fcd1a75 input=09e300416e3cd729]*/ { #if defined(MS_WINDOWS) && !defined(HAVE_OPENDIR) return _listdir_windows_no_opendir(path, NULL); @@ -3774,8 +3773,8 @@ [clinic start generated code]*/ static PyObject * -os__getfullpathname_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=b90b1f103b08773f input=332ed537c29d0a3e]*/ +os__getfullpathname_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=bb8679d56845bc9b input=332ed537c29d0a3e]*/ { if (!path->narrow) { @@ -3825,8 +3824,8 @@ [clinic start generated code]*/ static PyObject * -os__getfinalpathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=8be81a5f51a34bcf input=71d5e89334891bf4]*/ +os__getfinalpathname_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=9bd78d0e52782e75 input=71d5e89334891bf4]*/ { HANDLE hFile; int buf_size; @@ -3889,8 +3888,8 @@ [clinic start generated code]*/ static PyObject * -os__isdir_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=f17b2d4e1994b0ff input=e794f12faab62a2a]*/ +os__isdir_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=75f56f32720836cb input=e794f12faab62a2a]*/ { DWORD attributes; @@ -3918,8 +3917,8 @@ [clinic start generated code]*/ static PyObject * -os__getvolumepathname_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=79a0ba729f956dbe input=7eacadc40acbda6b]*/ +os__getvolumepathname_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=cbdcbd1059ceef4c input=7eacadc40acbda6b]*/ { PyObject *result; const wchar_t *path_wchar; @@ -3987,8 +3986,8 @@ [clinic start generated code]*/ static PyObject * -os_mkdir_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=8bf1f738873ef2c5 input=e965f68377e9b1ce]*/ +os_mkdir_impl(PyObject *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=a70446903abe821f input=e965f68377e9b1ce]*/ { int result; @@ -4039,8 +4038,8 @@ [clinic start generated code]*/ static PyObject * -os_nice_impl(PyModuleDef *module, int increment) -/*[clinic end generated code: output=8870418a3fc07b51 input=864be2d402a21da2]*/ +os_nice_impl(PyObject *module, int increment) +/*[clinic end generated code: output=9dad8a9da8109943 input=864be2d402a21da2]*/ { int value; @@ -4079,8 +4078,8 @@ [clinic start generated code]*/ static PyObject * -os_getpriority_impl(PyModuleDef *module, int which, int who) -/*[clinic end generated code: output=4759937aa5b67ed6 input=9be615d40e2544ef]*/ +os_getpriority_impl(PyObject *module, int which, int who) +/*[clinic end generated code: output=c41b7b63c7420228 input=9be615d40e2544ef]*/ { int retval; @@ -4105,8 +4104,8 @@ [clinic start generated code]*/ static PyObject * -os_setpriority_impl(PyModuleDef *module, int which, int who, int priority) -/*[clinic end generated code: output=6497d3301547e7d5 input=710ccbf65b9dc513]*/ +os_setpriority_impl(PyObject *module, int which, int who, int priority) +/*[clinic end generated code: output=3d910d95a7771eb2 input=710ccbf65b9dc513]*/ { int retval; @@ -4193,9 +4192,9 @@ [clinic start generated code]*/ static PyObject * -os_rename_impl(PyModuleDef *module, path_t *src, path_t *dst, int src_dir_fd, +os_rename_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=08033bb2ec27fb5f input=faa61c847912c850]*/ +/*[clinic end generated code: output=59e803072cf41230 input=faa61c847912c850]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 0); } @@ -4214,9 +4213,9 @@ [clinic start generated code]*/ static PyObject * -os_replace_impl(PyModuleDef *module, path_t *src, path_t *dst, - int src_dir_fd, int dst_dir_fd) -/*[clinic end generated code: output=131d012eed8d3b8b input=25515dfb107c8421]*/ +os_replace_impl(PyObject *module, path_t *src, path_t *dst, int src_dir_fd, + int dst_dir_fd) +/*[clinic end generated code: output=1968c02e7857422b input=25515dfb107c8421]*/ { return internal_rename(src, dst, src_dir_fd, dst_dir_fd, 1); } @@ -4238,8 +4237,8 @@ [clinic start generated code]*/ static PyObject * -os_rmdir_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=cabadec80d5a77c7 input=38c8b375ca34a7e2]*/ +os_rmdir_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=080eb54f506e8301 input=38c8b375ca34a7e2]*/ { int result; @@ -4278,8 +4277,8 @@ [clinic start generated code]*/ static long -os_system_impl(PyModuleDef *module, Py_UNICODE *command) -/*[clinic end generated code: output=4c3bd5abcd9c29e7 input=303f5ce97df606b0]*/ +os_system_impl(PyObject *module, Py_UNICODE *command) +/*[clinic end generated code: output=96c4dffee36dfb48 input=303f5ce97df606b0]*/ { long result; Py_BEGIN_ALLOW_THREADS @@ -4297,8 +4296,8 @@ [clinic start generated code]*/ static long -os_system_impl(PyModuleDef *module, PyObject *command) -/*[clinic end generated code: output=800f775e10b7be55 input=86a58554ba6094af]*/ +os_system_impl(PyObject *module, PyObject *command) +/*[clinic end generated code: output=290fc437dd4f33a0 input=86a58554ba6094af]*/ { long result; const char *bytes = PyBytes_AsString(command); @@ -4321,8 +4320,8 @@ [clinic start generated code]*/ static PyObject * -os_umask_impl(PyModuleDef *module, int mask) -/*[clinic end generated code: output=9e1fe3c9f14d6a05 input=ab6bfd9b24d8a7e8]*/ +os_umask_impl(PyObject *module, int mask) +/*[clinic end generated code: output=a2e33ce3bc1a6e33 input=ab6bfd9b24d8a7e8]*/ { int i = (int)umask(mask); if (i < 0) @@ -4387,8 +4386,8 @@ [clinic start generated code]*/ static PyObject * -os_unlink_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=474afd5cd09b237e input=d7bcde2b1b2a2552]*/ +os_unlink_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=621797807b9963b1 input=d7bcde2b1b2a2552]*/ { int result; @@ -4430,8 +4429,8 @@ [clinic start generated code]*/ static PyObject * -os_remove_impl(PyModuleDef *module, path_t *path, int dir_fd) -/*[clinic end generated code: output=d0d5149e64832b9e input=e05c5ab55cd30983]*/ +os_remove_impl(PyObject *module, path_t *path, int dir_fd) +/*[clinic end generated code: output=a8535b28f0068883 input=e05c5ab55cd30983]*/ { return os_unlink_impl(module, path, dir_fd); } @@ -4476,8 +4475,8 @@ [clinic start generated code]*/ static PyObject * -os_uname_impl(PyModuleDef *module) -/*[clinic end generated code: output=01e1421b757e753f input=e68bd246db3043ed]*/ +os_uname_impl(PyObject *module) +/*[clinic end generated code: output=e6a49cf1a1508a19 input=e68bd246db3043ed]*/ { struct utsname u; int res; @@ -4726,9 +4725,9 @@ [clinic start generated code]*/ static PyObject * -os_utime_impl(PyModuleDef *module, path_t *path, PyObject *times, - PyObject *ns, int dir_fd, int follow_symlinks) -/*[clinic end generated code: output=31f3434e560ba2f0 input=081cdc54ca685385]*/ +os_utime_impl(PyObject *module, path_t *path, PyObject *times, PyObject *ns, + int dir_fd, int follow_symlinks) +/*[clinic end generated code: output=cfcac69d027b82cf input=081cdc54ca685385]*/ { #ifdef MS_WINDOWS HANDLE hFile; @@ -4896,8 +4895,8 @@ [clinic start generated code]*/ static PyObject * -os__exit_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=472a3cbaf68f3621 input=5e6d57556b0c4a62]*/ +os__exit_impl(PyObject *module, int status) +/*[clinic end generated code: output=116e52d9c2260d54 input=5e6d57556b0c4a62]*/ { _exit(status); return NULL; /* Make gcc -Wall happy */ @@ -5053,8 +5052,8 @@ [clinic start generated code]*/ static PyObject * -os_execv_impl(PyModuleDef *module, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=9221f08143146fff input=96041559925e5229]*/ +os_execv_impl(PyObject *module, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=b21dc34deeb5b004 input=96041559925e5229]*/ { const char *path_char; char **argvlist; @@ -5103,9 +5102,8 @@ [clinic start generated code]*/ static PyObject * -os_execve_impl(PyModuleDef *module, path_t *path, PyObject *argv, - PyObject *env) -/*[clinic end generated code: output=181884fcdb21508e input=626804fa092606d9]*/ +os_execve_impl(PyObject *module, path_t *path, PyObject *argv, PyObject *env) +/*[clinic end generated code: output=ff9fa8e4da8bde58 input=626804fa092606d9]*/ { char **argvlist = NULL; char **envlist; @@ -5174,8 +5172,8 @@ [clinic start generated code]*/ static PyObject * -os_spawnv_impl(PyModuleDef *module, int mode, PyObject *path, PyObject *argv) -/*[clinic end generated code: output=140a7945484c8cc5 input=042c91dfc1e6debc]*/ +os_spawnv_impl(PyObject *module, int mode, PyObject *path, PyObject *argv) +/*[clinic end generated code: output=c427c0ce40f10638 input=042c91dfc1e6debc]*/ { const char *path_char; char **argvlist; @@ -5251,9 +5249,9 @@ [clinic start generated code]*/ static PyObject * -os_spawnve_impl(PyModuleDef *module, int mode, PyObject *path, - PyObject *argv, PyObject *env) -/*[clinic end generated code: output=e7f5f0703610531f input=02362fd937963f8f]*/ +os_spawnve_impl(PyObject *module, int mode, PyObject *path, PyObject *argv, + PyObject *env) +/*[clinic end generated code: output=ebcfa5f7ba2f4219 input=02362fd937963f8f]*/ { const char *path_char; char **argvlist; @@ -5342,8 +5340,8 @@ [clinic start generated code]*/ static PyObject * -os_fork1_impl(PyModuleDef *module) -/*[clinic end generated code: output=e27b4f66419c9dcf input=12db02167893926e]*/ +os_fork1_impl(PyObject *module) +/*[clinic end generated code: output=0de8e67ce2a310bc input=12db02167893926e]*/ { pid_t pid; int result = 0; @@ -5379,8 +5377,8 @@ [clinic start generated code]*/ static PyObject * -os_fork_impl(PyModuleDef *module) -/*[clinic end generated code: output=898b1ecd3498ba12 input=13c956413110eeaa]*/ +os_fork_impl(PyObject *module) +/*[clinic end generated code: output=3626c81f98985d49 input=13c956413110eeaa]*/ { pid_t pid; int result = 0; @@ -5417,8 +5415,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_get_priority_max_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=a6a30fa5071f2d81 input=2097b7998eca6874]*/ +os_sched_get_priority_max_impl(PyObject *module, int policy) +/*[clinic end generated code: output=9e465c6e43130521 input=2097b7998eca6874]*/ { int max; @@ -5438,8 +5436,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_get_priority_min_impl(PyModuleDef *module, int policy) -/*[clinic end generated code: output=5ca3ed6bc43e9b20 input=21bc8fa0d70983bf]*/ +os_sched_get_priority_min_impl(PyObject *module, int policy) +/*[clinic end generated code: output=7595c1138cc47a6d input=21bc8fa0d70983bf]*/ { int min = sched_get_priority_min(policy); if (min < 0) @@ -5461,8 +5459,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_getscheduler_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=8cd63c15caf54fa9 input=5f14cfd1f189e1a0]*/ +os_sched_getscheduler_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=dce4c0bd3f1b34c8 input=5f14cfd1f189e1a0]*/ { int policy; @@ -5554,9 +5552,9 @@ [clinic start generated code]*/ static PyObject * -os_sched_setscheduler_impl(PyModuleDef *module, pid_t pid, int policy, +os_sched_setscheduler_impl(PyObject *module, pid_t pid, int policy, struct sched_param *param) -/*[clinic end generated code: output=37053e5c528c35c9 input=c581f9469a5327dd]*/ +/*[clinic end generated code: output=b0ac0a70d3b1d705 input=c581f9469a5327dd]*/ { /* ** sched_setscheduler() returns 0 in Linux, but the previous @@ -5583,8 +5581,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_getparam_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=f42c5bd2604ecd08 input=18a1ef9c2efae296]*/ +os_sched_getparam_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=b194e8708dcf2db8 input=18a1ef9c2efae296]*/ { struct sched_param param; PyObject *result; @@ -5618,9 +5616,9 @@ [clinic start generated code]*/ static PyObject * -os_sched_setparam_impl(PyModuleDef *module, pid_t pid, +os_sched_setparam_impl(PyObject *module, pid_t pid, struct sched_param *param) -/*[clinic end generated code: output=b7a3c589436cec9b input=6b8d6dfcecdc21bd]*/ +/*[clinic end generated code: output=8af013f78a32b591 input=6b8d6dfcecdc21bd]*/ { if (sched_setparam(pid, param)) return posix_error(); @@ -5641,8 +5639,8 @@ [clinic start generated code]*/ static double -os_sched_rr_get_interval_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=7adc137a86dea581 input=2a973da15cca6fae]*/ +os_sched_rr_get_interval_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=7e2d935833ab47dc input=2a973da15cca6fae]*/ { struct timespec interval; if (sched_rr_get_interval(pid, &interval)) { @@ -5661,8 +5659,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_yield_impl(PyModuleDef *module) -/*[clinic end generated code: output=d7bd51869c4cb6a8 input=e54d6f98189391d4]*/ +os_sched_yield_impl(PyObject *module) +/*[clinic end generated code: output=902323500f222cac input=e54d6f98189391d4]*/ { if (sched_yield()) return posix_error(); @@ -5685,8 +5683,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_setaffinity_impl(PyModuleDef *module, pid_t pid, PyObject *mask) -/*[clinic end generated code: output=582bcbf40d3253a9 input=a0791a597c7085ba]*/ +os_sched_setaffinity_impl(PyObject *module, pid_t pid, PyObject *mask) +/*[clinic end generated code: output=882d7dd9a229335b input=a0791a597c7085ba]*/ { int ncpus; size_t setsize; @@ -5781,8 +5779,8 @@ [clinic start generated code]*/ static PyObject * -os_sched_getaffinity_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=b431a8f310e369e7 input=983ce7cb4a565980]*/ +os_sched_getaffinity_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=f726f2c193c17a4f input=983ce7cb4a565980]*/ { int cpu, ncpus, count; size_t setsize; @@ -5877,8 +5875,8 @@ [clinic start generated code]*/ static PyObject * -os_openpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=358e571c1ba135ee input=f3d99fd99e762907]*/ +os_openpty_impl(PyObject *module) +/*[clinic end generated code: output=98841ce5ec9cef3c input=f3d99fd99e762907]*/ { int master_fd = -1, slave_fd = -1; #ifndef HAVE_OPENPTY @@ -5979,8 +5977,8 @@ [clinic start generated code]*/ static PyObject * -os_forkpty_impl(PyModuleDef *module) -/*[clinic end generated code: output=a11b8391dce3cb57 input=f1f7f4bae3966010]*/ +os_forkpty_impl(PyObject *module) +/*[clinic end generated code: output=60d0a5c7512e4087 input=f1f7f4bae3966010]*/ { int master_fd = -1, result = 0; pid_t pid; @@ -6015,8 +6013,8 @@ [clinic start generated code]*/ static PyObject * -os_getegid_impl(PyModuleDef *module) -/*[clinic end generated code: output=90f433a8c0b1d919 input=1596f79ad1107d5d]*/ +os_getegid_impl(PyObject *module) +/*[clinic end generated code: output=67d9be7ac68898a2 input=1596f79ad1107d5d]*/ { return _PyLong_FromGid(getegid()); } @@ -6031,8 +6029,8 @@ [clinic start generated code]*/ static PyObject * -os_geteuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=1a532c4a66874357 input=4644c662d3bd9f19]*/ +os_geteuid_impl(PyObject *module) +/*[clinic end generated code: output=ea1b60f0d6abb66e input=4644c662d3bd9f19]*/ { return _PyLong_FromUid(geteuid()); } @@ -6047,8 +6045,8 @@ [clinic start generated code]*/ static PyObject * -os_getgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=91a22021b74ea46b input=58796344cd87c0f6]*/ +os_getgid_impl(PyObject *module) +/*[clinic end generated code: output=4f28ebc9d3e5dfcf input=58796344cd87c0f6]*/ { return _PyLong_FromGid(getgid()); } @@ -6062,8 +6060,8 @@ [clinic start generated code]*/ static PyObject * -os_getpid_impl(PyModuleDef *module) -/*[clinic end generated code: output=8fbf3a934ee09e62 input=5a9a00f0ab68aa00]*/ +os_getpid_impl(PyObject *module) +/*[clinic end generated code: output=9ea6fdac01ed2b3c input=5a9a00f0ab68aa00]*/ { return PyLong_FromPid(getpid()); } @@ -6154,8 +6152,8 @@ [clinic start generated code]*/ static PyObject * -os_getgroups_impl(PyModuleDef *module) -/*[clinic end generated code: output=6e7c4fd2db6d5c60 input=d3f109412e6a155c]*/ +os_getgroups_impl(PyObject *module) +/*[clinic end generated code: output=42b0c17758561b56 input=d3f109412e6a155c]*/ { PyObject *result = NULL; @@ -6309,8 +6307,8 @@ [clinic start generated code]*/ static PyObject * -os_getpgid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=70e713b4d54b7c61 input=39d710ae3baaf1c7]*/ +os_getpgid_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=1db95a97be205d18 input=39d710ae3baaf1c7]*/ { pid_t pgid = getpgid(pid); if (pgid < 0) @@ -6328,8 +6326,8 @@ [clinic start generated code]*/ static PyObject * -os_getpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=cf3403585846811f input=6846fb2bb9a3705e]*/ +os_getpgrp_impl(PyObject *module) +/*[clinic end generated code: output=c4fc381e51103cf3 input=6846fb2bb9a3705e]*/ { #ifdef GETPGRP_HAVE_ARG return PyLong_FromPid(getpgrp(0)); @@ -6348,8 +6346,8 @@ [clinic start generated code]*/ static PyObject * -os_setpgrp_impl(PyModuleDef *module) -/*[clinic end generated code: output=59650f55a963d7ac input=1f0619fcb5731e7e]*/ +os_setpgrp_impl(PyObject *module) +/*[clinic end generated code: output=2554735b0a60f0a0 input=1f0619fcb5731e7e]*/ { #ifdef SETPGRP_HAVE_ARG if (setpgrp(0, 0) < 0) @@ -6417,8 +6415,8 @@ [clinic start generated code]*/ static PyObject * -os_getppid_impl(PyModuleDef *module) -/*[clinic end generated code: output=4e49c8e7a8738cd2 input=e637cb87539c030e]*/ +os_getppid_impl(PyObject *module) +/*[clinic end generated code: output=43b2a946a8c603b4 input=e637cb87539c030e]*/ { #ifdef MS_WINDOWS return win32_getppid(); @@ -6437,8 +6435,8 @@ [clinic start generated code]*/ static PyObject * -os_getlogin_impl(PyModuleDef *module) -/*[clinic end generated code: output=037ebdb3e4b5dac1 input=2a21ab1e917163df]*/ +os_getlogin_impl(PyObject *module) +/*[clinic end generated code: output=a32e66a7e5715dac input=2a21ab1e917163df]*/ { PyObject *result = NULL; #ifdef MS_WINDOWS @@ -6480,8 +6478,8 @@ [clinic start generated code]*/ static PyObject * -os_getuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=03a8b894cefb3fa5 input=b53c8b35f110a516]*/ +os_getuid_impl(PyObject *module) +/*[clinic end generated code: output=415c0b401ebed11a input=b53c8b35f110a516]*/ { return _PyLong_FromUid(getuid()); } @@ -6504,8 +6502,8 @@ [clinic start generated code]*/ static PyObject * -os_kill_impl(PyModuleDef *module, pid_t pid, Py_ssize_t signal) -/*[clinic end generated code: output=74f907dd00a83c26 input=61a36b86ca275ab9]*/ +os_kill_impl(PyObject *module, pid_t pid, Py_ssize_t signal) +/*[clinic end generated code: output=8e346a6701c88568 input=61a36b86ca275ab9]*/ #ifndef MS_WINDOWS { if (kill(pid, (int)signal) == -1) @@ -6565,8 +6563,8 @@ [clinic start generated code]*/ static PyObject * -os_killpg_impl(PyModuleDef *module, pid_t pgid, int signal) -/*[clinic end generated code: output=3434a766ef945f93 input=38b5449eb8faec19]*/ +os_killpg_impl(PyObject *module, pid_t pgid, int signal) +/*[clinic end generated code: output=6dbcd2f1fdf5fdba input=38b5449eb8faec19]*/ { /* XXX some man pages make the `pgid` parameter an int, others a pid_t. Since getpgrp() returns a pid_t, we assume killpg should @@ -6593,8 +6591,8 @@ [clinic start generated code]*/ static PyObject * -os_plock_impl(PyModuleDef *module, int op) -/*[clinic end generated code: output=5cb851f81b914984 input=e6e5e348e1525f60]*/ +os_plock_impl(PyObject *module, int op) +/*[clinic end generated code: output=81424167033b168e input=e6e5e348e1525f60]*/ { if (plock(op) == -1) return posix_error(); @@ -6614,8 +6612,8 @@ [clinic start generated code]*/ static PyObject * -os_setuid_impl(PyModuleDef *module, uid_t uid) -/*[clinic end generated code: output=941ea9a8d1e5d565 input=c921a3285aa22256]*/ +os_setuid_impl(PyObject *module, uid_t uid) +/*[clinic end generated code: output=a0a41fd0d1ec555f input=c921a3285aa22256]*/ { if (setuid(uid) < 0) return posix_error(); @@ -6635,8 +6633,8 @@ [clinic start generated code]*/ static PyObject * -os_seteuid_impl(PyModuleDef *module, uid_t euid) -/*[clinic end generated code: output=66f4f6823a648d6d input=ba93d927e4781aa9]*/ +os_seteuid_impl(PyObject *module, uid_t euid) +/*[clinic end generated code: output=102e3ad98361519a input=ba93d927e4781aa9]*/ { if (seteuid(euid) < 0) return posix_error(); @@ -6656,8 +6654,8 @@ [clinic start generated code]*/ static PyObject * -os_setegid_impl(PyModuleDef *module, gid_t egid) -/*[clinic end generated code: output=ca094a69a081a60f input=4080526d0ccd6ce3]*/ +os_setegid_impl(PyObject *module, gid_t egid) +/*[clinic end generated code: output=4e4b825a6a10258d input=4080526d0ccd6ce3]*/ { if (setegid(egid) < 0) return posix_error(); @@ -6678,8 +6676,8 @@ [clinic start generated code]*/ static PyObject * -os_setreuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid) -/*[clinic end generated code: output=b2938c3e73d27ec7 input=0ca8978de663880c]*/ +os_setreuid_impl(PyObject *module, uid_t ruid, uid_t euid) +/*[clinic end generated code: output=62d991210006530a input=0ca8978de663880c]*/ { if (setreuid(ruid, euid) < 0) { return posix_error(); @@ -6703,8 +6701,8 @@ [clinic start generated code]*/ static PyObject * -os_setregid_impl(PyModuleDef *module, gid_t rgid, gid_t egid) -/*[clinic end generated code: output=db18f1839ababe3d input=c59499f72846db78]*/ +os_setregid_impl(PyObject *module, gid_t rgid, gid_t egid) +/*[clinic end generated code: output=aa803835cf5342f3 input=c59499f72846db78]*/ { if (setregid(rgid, egid) < 0) return posix_error(); @@ -6723,8 +6721,8 @@ [clinic start generated code]*/ static PyObject * -os_setgid_impl(PyModuleDef *module, gid_t gid) -/*[clinic end generated code: output=756cb42c6abd9d87 input=27d30c4059045dc6]*/ +os_setgid_impl(PyObject *module, gid_t gid) +/*[clinic end generated code: output=bdccd7403f6ad8c3 input=27d30c4059045dc6]*/ { if (setgid(gid) < 0) return posix_error(); @@ -6744,8 +6742,8 @@ [clinic start generated code]*/ static PyObject * -os_setgroups(PyModuleDef *module, PyObject *groups) -/*[clinic end generated code: output=7945c2e3cc817c58 input=fa742ca3daf85a7e]*/ +os_setgroups(PyObject *module, PyObject *groups) +/*[clinic end generated code: output=3fcb32aad58c5ecd input=fa742ca3daf85a7e]*/ { int i, len; gid_t grouplist[MAX_GROUPS]; @@ -6859,8 +6857,8 @@ [clinic start generated code]*/ static PyObject * -os_wait3_impl(PyModuleDef *module, int options) -/*[clinic end generated code: output=e18af4924dc54945 input=8ac4c56956b61710]*/ +os_wait3_impl(PyObject *module, int options) +/*[clinic end generated code: output=92c3224e6f28217a input=8ac4c56956b61710]*/ { pid_t pid; struct rusage ru; @@ -6896,8 +6894,8 @@ [clinic start generated code]*/ static PyObject * -os_wait4_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=714f19e6ff01e099 input=d11deed0750600ba]*/ +os_wait4_impl(PyObject *module, pid_t pid, int options) +/*[clinic end generated code: output=66195aa507b35f70 input=d11deed0750600ba]*/ { pid_t res; struct rusage ru; @@ -6938,8 +6936,8 @@ [clinic start generated code]*/ static PyObject * -os_waitid_impl(PyModuleDef *module, idtype_t idtype, id_t id, int options) -/*[clinic end generated code: output=5c0192750e22fa2e input=d8e7f76e052b7920]*/ +os_waitid_impl(PyObject *module, idtype_t idtype, id_t id, int options) +/*[clinic end generated code: output=5d2e1c0bde61f4d8 input=d8e7f76e052b7920]*/ { PyObject *result; int res; @@ -6993,8 +6991,8 @@ [clinic start generated code]*/ static PyObject * -os_waitpid_impl(PyModuleDef *module, pid_t pid, int options) -/*[clinic end generated code: output=5e3593353d54b15b input=0bf1666b8758fda3]*/ +os_waitpid_impl(PyObject *module, pid_t pid, int options) +/*[clinic end generated code: output=5c37c06887a20270 input=0bf1666b8758fda3]*/ { pid_t res; int async_err = 0; @@ -7028,8 +7026,8 @@ [clinic start generated code]*/ static PyObject * -os_waitpid_impl(PyModuleDef *module, Py_intptr_t pid, int options) -/*[clinic end generated code: output=fc1d520db019625f input=444c8f51cca5b862]*/ +os_waitpid_impl(PyObject *module, Py_intptr_t pid, int options) +/*[clinic end generated code: output=15f1ce005a346b09 input=444c8f51cca5b862]*/ { int status; Py_intptr_t res; @@ -7060,8 +7058,8 @@ [clinic start generated code]*/ static PyObject * -os_wait_impl(PyModuleDef *module) -/*[clinic end generated code: output=4a7f4978393e0654 input=03b0182d4a4700ce]*/ +os_wait_impl(PyObject *module) +/*[clinic end generated code: output=6bc419ac32fb364b input=03b0182d4a4700ce]*/ { pid_t pid; int async_err = 0; @@ -7388,9 +7386,9 @@ [clinic start generated code]*/ static PyObject * -os_symlink_impl(PyModuleDef *module, path_t *src, path_t *dst, +os_symlink_impl(PyObject *module, path_t *src, path_t *dst, int target_is_directory, int dir_fd) -/*[clinic end generated code: output=a01b4bcf32403ccd input=e820ec4472547bc3]*/ +/*[clinic end generated code: output=08ca9f3f3cf960f6 input=e820ec4472547bc3]*/ { #ifdef MS_WINDOWS DWORD result; @@ -7538,8 +7536,8 @@ [clinic start generated code]*/ static PyObject * -os_times_impl(PyModuleDef *module) -/*[clinic end generated code: output=df0a63ebe6e6f091 input=2bf9df3d6ab2e48b]*/ +os_times_impl(PyObject *module) +/*[clinic end generated code: output=35f640503557d32a input=2bf9df3d6ab2e48b]*/ #ifdef MS_WINDOWS { FILETIME create, exit, kernel, user; @@ -7592,8 +7590,8 @@ [clinic start generated code]*/ static PyObject * -os_getsid_impl(PyModuleDef *module, pid_t pid) -/*[clinic end generated code: output=a074f80c0e6bfb38 input=eeb2b923a30ce04e]*/ +os_getsid_impl(PyObject *module, pid_t pid) +/*[clinic end generated code: output=112deae56b306460 input=eeb2b923a30ce04e]*/ { int sid; sid = getsid(pid); @@ -7612,8 +7610,8 @@ [clinic start generated code]*/ static PyObject * -os_setsid_impl(PyModuleDef *module) -/*[clinic end generated code: output=398fc152ae327330 input=5fff45858e2f0776]*/ +os_setsid_impl(PyObject *module) +/*[clinic end generated code: output=e2ddedd517086d77 input=5fff45858e2f0776]*/ { if (setsid() < 0) return posix_error(); @@ -7634,8 +7632,8 @@ [clinic start generated code]*/ static PyObject * -os_setpgid_impl(PyModuleDef *module, pid_t pid, pid_t pgrp) -/*[clinic end generated code: output=7079a8e932912841 input=fceb395eca572e1a]*/ +os_setpgid_impl(PyObject *module, pid_t pid, pid_t pgrp) +/*[clinic end generated code: output=6461160319a43d6a input=fceb395eca572e1a]*/ { if (setpgid(pid, pgrp) < 0) return posix_error(); @@ -7655,8 +7653,8 @@ [clinic start generated code]*/ static PyObject * -os_tcgetpgrp_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=ebb6dc5f111c7dc0 input=7f6c18eac10ada86]*/ +os_tcgetpgrp_impl(PyObject *module, int fd) +/*[clinic end generated code: output=f865e88be86c272b input=7f6c18eac10ada86]*/ { pid_t pgid = tcgetpgrp(fd); if (pgid < 0) @@ -7678,8 +7676,8 @@ [clinic start generated code]*/ static PyObject * -os_tcsetpgrp_impl(PyModuleDef *module, int fd, pid_t pgid) -/*[clinic end generated code: output=3e4b05177462cd22 input=5bdc997c6a619020]*/ +os_tcsetpgrp_impl(PyObject *module, int fd, pid_t pgid) +/*[clinic end generated code: output=f1821a381b9daa39 input=5bdc997c6a619020]*/ { if (tcsetpgrp(fd, pgid) < 0) return posix_error(); @@ -7713,9 +7711,8 @@ [clinic start generated code]*/ static int -os_open_impl(PyModuleDef *module, path_t *path, int flags, int mode, - int dir_fd) -/*[clinic end generated code: output=47e8cc63559f5ddd input=ad8623b29acd2934]*/ +os_open_impl(PyObject *module, path_t *path, int flags, int mode, int dir_fd) +/*[clinic end generated code: output=abc7227888c8bc73 input=ad8623b29acd2934]*/ { int fd; int async_err = 0; @@ -7776,8 +7773,8 @@ [clinic start generated code]*/ static PyObject * -os_close_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=47bf2ea536445a26 input=2bc42451ca5c3223]*/ +os_close_impl(PyObject *module, int fd) +/*[clinic end generated code: output=2fe4e93602822c14 input=2bc42451ca5c3223]*/ { int res; if (!_PyVerify_fd(fd)) @@ -7808,8 +7805,8 @@ [clinic start generated code]*/ static PyObject * -os_closerange_impl(PyModuleDef *module, int fd_low, int fd_high) -/*[clinic end generated code: output=70e6adb95220ba96 input=5855a3d053ebd4ec]*/ +os_closerange_impl(PyObject *module, int fd_low, int fd_high) +/*[clinic end generated code: output=0ce5c20fcda681c2 input=5855a3d053ebd4ec]*/ { int i; Py_BEGIN_ALLOW_THREADS @@ -7833,8 +7830,8 @@ [clinic start generated code]*/ static int -os_dup_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=f4bbac8c7652d05e input=6f10f7ea97f7852a]*/ +os_dup_impl(PyObject *module, int fd) +/*[clinic end generated code: output=486f4860636b2a9f input=6f10f7ea97f7852a]*/ { return _Py_dup(fd); } @@ -7850,8 +7847,8 @@ [clinic start generated code]*/ static PyObject * -os_dup2_impl(PyModuleDef *module, int fd, int fd2, int inheritable) -/*[clinic end generated code: output=9a099d95881a7923 input=76e96f511be0352f]*/ +os_dup2_impl(PyObject *module, int fd, int fd2, int inheritable) +/*[clinic end generated code: output=db832a2d872ccc5f input=76e96f511be0352f]*/ { int res; #if defined(HAVE_DUP3) && \ @@ -7947,8 +7944,8 @@ [clinic start generated code]*/ static PyObject * -os_lockf_impl(PyModuleDef *module, int fd, int command, Py_off_t length) -/*[clinic end generated code: output=25ff778f9e2fbf1b input=65da41d2106e9b79]*/ +os_lockf_impl(PyObject *module, int fd, int command, Py_off_t length) +/*[clinic end generated code: output=af7051f3e7c29651 input=65da41d2106e9b79]*/ { int res; @@ -7979,8 +7976,8 @@ [clinic start generated code]*/ static Py_off_t -os_lseek_impl(PyModuleDef *module, int fd, Py_off_t position, int how) -/*[clinic end generated code: output=65d4ab96d664998c input=902654ad3f96a6d3]*/ +os_lseek_impl(PyObject *module, int fd, Py_off_t position, int how) +/*[clinic end generated code: output=971e1efb6b30bd2f input=902654ad3f96a6d3]*/ { Py_off_t result; @@ -8030,8 +8027,8 @@ [clinic start generated code]*/ static PyObject * -os_read_impl(PyModuleDef *module, int fd, Py_ssize_t length) -/*[clinic end generated code: output=be24f44178455e8b input=1df2eaa27c0bf1d3]*/ +os_read_impl(PyObject *module, int fd, Py_ssize_t length) +/*[clinic end generated code: output=dafbe9a5cddb987b input=1df2eaa27c0bf1d3]*/ { Py_ssize_t n; PyObject *buffer; @@ -8142,8 +8139,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_readv_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=00fc56ff1800059f input=e679eb5dbfa0357d]*/ +os_readv_impl(PyObject *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=792da062d3fcebdb input=e679eb5dbfa0357d]*/ { int cnt; Py_ssize_t n; @@ -8197,8 +8194,8 @@ [clinic start generated code]*/ static PyObject * -os_pread_impl(PyModuleDef *module, int fd, int length, Py_off_t offset) -/*[clinic end generated code: output=90d1fed87f68fa33 input=084948dcbaa35d4c]*/ +os_pread_impl(PyObject *module, int fd, int length, Py_off_t offset) +/*[clinic end generated code: output=435b29ee32b54a78 input=084948dcbaa35d4c]*/ { Py_ssize_t n; int async_err = 0; @@ -8246,8 +8243,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_write_impl(PyModuleDef *module, int fd, Py_buffer *data) -/*[clinic end generated code: output=58845c93c9ee1dda input=3207e28963234f3c]*/ +os_write_impl(PyObject *module, int fd, Py_buffer *data) +/*[clinic end generated code: output=e4ef5bc904b58ef9 input=3207e28963234f3c]*/ { return _Py_write(fd, data->buf, data->len); } @@ -8417,8 +8414,8 @@ [clinic start generated code]*/ static PyObject * -os_fstat_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=d71fe98bf042b626 input=27e0e0ebbe5600c9]*/ +os_fstat_impl(PyObject *module, int fd) +/*[clinic end generated code: output=efc038cb5f654492 input=27e0e0ebbe5600c9]*/ { STRUCT_STAT st; int res; @@ -8453,8 +8450,8 @@ [clinic start generated code]*/ static int -os_isatty_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=acec9d3c29d16d33 input=08ce94aa1eaf7b5e]*/ +os_isatty_impl(PyObject *module, int fd) +/*[clinic end generated code: output=6a48c8b4e644ca00 input=08ce94aa1eaf7b5e]*/ { int return_value; if (!_PyVerify_fd(fd)) @@ -8477,8 +8474,8 @@ [clinic start generated code]*/ static PyObject * -os_pipe_impl(PyModuleDef *module) -/*[clinic end generated code: output=6b0cd3f868ec3c40 input=02535e8c8fa6c4d4]*/ +os_pipe_impl(PyObject *module) +/*[clinic end generated code: output=ff9b76255793b440 input=02535e8c8fa6c4d4]*/ { int fds[2]; #ifdef MS_WINDOWS @@ -8564,8 +8561,8 @@ [clinic start generated code]*/ static PyObject * -os_pipe2_impl(PyModuleDef *module, int flags) -/*[clinic end generated code: output=c15b6075d0c6b2e7 input=f261b6e7e63c6817]*/ +os_pipe2_impl(PyObject *module, int flags) +/*[clinic end generated code: output=25751fb43a45540f input=f261b6e7e63c6817]*/ { int fds[2]; int res; @@ -8592,8 +8589,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_writev_impl(PyModuleDef *module, int fd, PyObject *buffers) -/*[clinic end generated code: output=a48925dbf2d5c238 input=5b8d17fe4189d2fe]*/ +os_writev_impl(PyObject *module, int fd, PyObject *buffers) +/*[clinic end generated code: output=56565cfac3aac15b input=5b8d17fe4189d2fe]*/ { int cnt; Py_ssize_t result; @@ -8644,9 +8641,8 @@ [clinic start generated code]*/ static Py_ssize_t -os_pwrite_impl(PyModuleDef *module, int fd, Py_buffer *buffer, - Py_off_t offset) -/*[clinic end generated code: output=93aabdb40e17d325 input=19903f1b3dd26377]*/ +os_pwrite_impl(PyObject *module, int fd, Py_buffer *buffer, Py_off_t offset) +/*[clinic end generated code: output=c74da630758ee925 input=19903f1b3dd26377]*/ { Py_ssize_t size; int async_err = 0; @@ -8689,8 +8685,8 @@ [clinic start generated code]*/ static PyObject * -os_mkfifo_impl(PyModuleDef *module, path_t *path, int mode, int dir_fd) -/*[clinic end generated code: output=8f5f5e72c630049a input=73032e98a36e0e19]*/ +os_mkfifo_impl(PyObject *module, path_t *path, int mode, int dir_fd) +/*[clinic end generated code: output=ce41cfad0e68c940 input=73032e98a36e0e19]*/ { int result; int async_err = 0; @@ -8740,9 +8736,9 @@ [clinic start generated code]*/ static PyObject * -os_mknod_impl(PyModuleDef *module, path_t *path, int mode, dev_t device, +os_mknod_impl(PyObject *module, path_t *path, int mode, dev_t device, int dir_fd) -/*[clinic end generated code: output=5151a8a9f754d272 input=ee44531551a4d83b]*/ +/*[clinic end generated code: output=92e55d3ca8917461 input=ee44531551a4d83b]*/ { int result; int async_err = 0; @@ -8777,8 +8773,8 @@ [clinic start generated code]*/ static unsigned int -os_major_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=ba55693ab49bac34 input=1e16a4d30c4d4462]*/ +os_major_impl(PyObject *module, dev_t device) +/*[clinic end generated code: output=5b3b2589bafb498e input=1e16a4d30c4d4462]*/ { return major(device); } @@ -8794,8 +8790,8 @@ [clinic start generated code]*/ static unsigned int -os_minor_impl(PyModuleDef *module, dev_t device) -/*[clinic end generated code: output=2867219ebf274e27 input=0842c6d23f24c65e]*/ +os_minor_impl(PyObject *module, dev_t device) +/*[clinic end generated code: output=5e1a25e630b0157d input=0842c6d23f24c65e]*/ { return minor(device); } @@ -8812,8 +8808,8 @@ [clinic start generated code]*/ static dev_t -os_makedev_impl(PyModuleDef *module, int major, int minor) -/*[clinic end generated code: output=7cb6264352437660 input=4b9fd8fc73cbe48f]*/ +os_makedev_impl(PyObject *module, int major, int minor) +/*[clinic end generated code: output=881aaa4aba6f6a52 input=4b9fd8fc73cbe48f]*/ { return makedev(major, minor); } @@ -8832,8 +8828,8 @@ [clinic start generated code]*/ static PyObject * -os_ftruncate_impl(PyModuleDef *module, int fd, Py_off_t length) -/*[clinic end generated code: output=3666f401d76bf834 input=63b43641e52818f2]*/ +os_ftruncate_impl(PyObject *module, int fd, Py_off_t length) +/*[clinic end generated code: output=fba15523721be7e4 input=63b43641e52818f2]*/ { int result; int async_err = 0; @@ -8873,8 +8869,8 @@ [clinic start generated code]*/ static PyObject * -os_truncate_impl(PyModuleDef *module, path_t *path, Py_off_t length) -/*[clinic end generated code: output=f60a9e08370e9e2e input=77229cf0b50a9b77]*/ +os_truncate_impl(PyObject *module, path_t *path, Py_off_t length) +/*[clinic end generated code: output=43009c8df5c0a12b input=77229cf0b50a9b77]*/ { int result; #ifdef MS_WINDOWS @@ -8937,9 +8933,9 @@ [clinic start generated code]*/ static PyObject * -os_posix_fallocate_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fallocate_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length) -/*[clinic end generated code: output=7f6f87a8c751e1b4 input=d7a2ef0ab2ca52fb]*/ +/*[clinic end generated code: output=73f107139564aa9d input=d7a2ef0ab2ca52fb]*/ { int result; int async_err = 0; @@ -8979,9 +8975,9 @@ [clinic start generated code]*/ static PyObject * -os_posix_fadvise_impl(PyModuleDef *module, int fd, Py_off_t offset, +os_posix_fadvise_impl(PyObject *module, int fd, Py_off_t offset, Py_off_t length, int advice) -/*[clinic end generated code: output=457ce6a67189e10d input=0fbe554edc2f04b5]*/ +/*[clinic end generated code: output=412ef4aa70c98642 input=0fbe554edc2f04b5]*/ { int result; int async_err = 0; @@ -9031,8 +9027,8 @@ [clinic start generated code]*/ static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=a2438cf95e5a0c1c input=ba586581c2e6105f]*/ +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=d29a567d6b2327d2 input=ba586581c2e6105f]*/ { const wchar_t *env; @@ -9075,8 +9071,8 @@ [clinic start generated code]*/ static PyObject * -os_putenv_impl(PyModuleDef *module, PyObject *name, PyObject *value) -/*[clinic end generated code: output=a2438cf95e5a0c1c input=a97bc6152f688d31]*/ +os_putenv_impl(PyObject *module, PyObject *name, PyObject *value) +/*[clinic end generated code: output=d29a567d6b2327d2 input=a97bc6152f688d31]*/ { PyObject *bytes = NULL; char *env; @@ -9112,8 +9108,8 @@ [clinic start generated code]*/ static PyObject * -os_unsetenv_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=25994b57016a2dc9 input=2bb5288a599c7107]*/ +os_unsetenv_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=54c4137ab1834f02 input=2bb5288a599c7107]*/ { #ifndef HAVE_BROKEN_UNSETENV int err; @@ -9151,8 +9147,8 @@ [clinic start generated code]*/ static PyObject * -os_strerror_impl(PyModuleDef *module, int code) -/*[clinic end generated code: output=0280c6af51e5c9fe input=75a8673d97915a91]*/ +os_strerror_impl(PyObject *module, int code) +/*[clinic end generated code: output=baebf09fa02a78f2 input=75a8673d97915a91]*/ { char *message = strerror(code); if (message == NULL) { @@ -9176,8 +9172,8 @@ [clinic start generated code]*/ static int -os_WCOREDUMP_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=134f70bbe63fbf41 input=8b05e7ab38528d04]*/ +os_WCOREDUMP_impl(PyObject *module, int status) +/*[clinic end generated code: output=1a584b147b16bd18 input=8b05e7ab38528d04]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9199,8 +9195,8 @@ [clinic start generated code]*/ static int -os_WIFCONTINUED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=9cdd26543ebb6dcd input=e777e7d38eb25bd9]*/ +os_WIFCONTINUED_impl(PyObject *module, int status) +/*[clinic end generated code: output=1e35295d844364bd input=e777e7d38eb25bd9]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9219,8 +9215,8 @@ [clinic start generated code]*/ static int -os_WIFSTOPPED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=73bf35e44994a724 input=043cb7f1289ef904]*/ +os_WIFSTOPPED_impl(PyObject *module, int status) +/*[clinic end generated code: output=fdb57122a5c9b4cb input=043cb7f1289ef904]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9239,8 +9235,8 @@ [clinic start generated code]*/ static int -os_WIFSIGNALED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=2697975771872420 input=d55ba7cc9ce5dc43]*/ +os_WIFSIGNALED_impl(PyObject *module, int status) +/*[clinic end generated code: output=d1dde4dcc819a5f5 input=d55ba7cc9ce5dc43]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9259,8 +9255,8 @@ [clinic start generated code]*/ static int -os_WIFEXITED_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=ca8f8c61f0b8532e input=d63775a6791586c0]*/ +os_WIFEXITED_impl(PyObject *module, int status) +/*[clinic end generated code: output=01c09d6ebfeea397 input=d63775a6791586c0]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9279,8 +9275,8 @@ [clinic start generated code]*/ static int -os_WEXITSTATUS_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=ea54da23d9e0f6af input=e1fb4944e377585b]*/ +os_WEXITSTATUS_impl(PyObject *module, int status) +/*[clinic end generated code: output=6e3efbba11f6488d input=e1fb4944e377585b]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9299,8 +9295,8 @@ [clinic start generated code]*/ static int -os_WTERMSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=4d25367026cb852c input=727fd7f84ec3f243]*/ +os_WTERMSIG_impl(PyObject *module, int status) +/*[clinic end generated code: output=172f7dfc8dcfc3ad input=727fd7f84ec3f243]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9319,8 +9315,8 @@ [clinic start generated code]*/ static int -os_WSTOPSIG_impl(PyModuleDef *module, int status) -/*[clinic end generated code: output=54eb9c13b001adb4 input=46ebf1d1b293c5c1]*/ +os_WSTOPSIG_impl(PyObject *module, int status) +/*[clinic end generated code: output=0ab7586396f5d82b input=46ebf1d1b293c5c1]*/ { WAIT_TYPE wait_status; WAIT_STATUS_INT(wait_status) = status; @@ -9393,8 +9389,8 @@ [clinic start generated code]*/ static PyObject * -os_fstatvfs_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=584a94a754497ac0 input=d8122243ac50975e]*/ +os_fstatvfs_impl(PyObject *module, int fd) +/*[clinic end generated code: output=53547cf0cc55e6c5 input=d8122243ac50975e]*/ { int result; int async_err = 0; @@ -9429,8 +9425,8 @@ [clinic start generated code]*/ static PyObject * -os_statvfs_impl(PyModuleDef *module, path_t *path) -/*[clinic end generated code: output=5ced07a2cf931f41 input=3f5c35791c669bd9]*/ +os_statvfs_impl(PyObject *module, path_t *path) +/*[clinic end generated code: output=87106dd1beb8556e input=3f5c35791c669bd9]*/ { int result; struct statvfs st; @@ -9471,8 +9467,8 @@ [clinic start generated code]*/ static PyObject * -os__getdiskusage_impl(PyModuleDef *module, Py_UNICODE *path) -/*[clinic end generated code: output=60a9cf33449db1dd input=6458133aed893c78]*/ +os__getdiskusage_impl(PyObject *module, Py_UNICODE *path) +/*[clinic end generated code: output=76d6adcd86b1db0b input=6458133aed893c78]*/ { BOOL retval; ULARGE_INTEGER _, total, free; @@ -9660,8 +9656,8 @@ [clinic start generated code]*/ static long -os_fpathconf_impl(PyModuleDef *module, int fd, int name) -/*[clinic end generated code: output=082b2922d4441de7 input=5942a024d3777810]*/ +os_fpathconf_impl(PyObject *module, int fd, int name) +/*[clinic end generated code: output=d5b7042425fc3e21 input=5942a024d3777810]*/ { long limit; @@ -9689,8 +9685,8 @@ [clinic start generated code]*/ static long -os_pathconf_impl(PyModuleDef *module, path_t *path, int name) -/*[clinic end generated code: output=3713029e9501f5ab input=bc3e2a985af27e5e]*/ +os_pathconf_impl(PyObject *module, path_t *path, int name) +/*[clinic end generated code: output=5bedee35b293a089 input=bc3e2a985af27e5e]*/ { long limit; @@ -9886,8 +9882,8 @@ [clinic start generated code]*/ static PyObject * -os_confstr_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=6ff79c9eed8c2daf input=18fb4d0567242e65]*/ +os_confstr_impl(PyObject *module, int name) +/*[clinic end generated code: output=bfb0b1b1e49b9383 input=18fb4d0567242e65]*/ { PyObject *result = NULL; char buffer[255]; @@ -10436,8 +10432,8 @@ [clinic start generated code]*/ static long -os_sysconf_impl(PyModuleDef *module, int name) -/*[clinic end generated code: output=ed567306f58d69c4 input=279e3430a33f29e4]*/ +os_sysconf_impl(PyObject *module, int name) +/*[clinic end generated code: output=3662f945fc0cc756 input=279e3430a33f29e4]*/ { long value; @@ -10534,8 +10530,8 @@ [clinic start generated code]*/ static PyObject * -os_abort_impl(PyModuleDef *module) -/*[clinic end generated code: output=486bb96647c299b3 input=cf2c7d98bc504047]*/ +os_abort_impl(PyObject *module) +/*[clinic end generated code: output=dcf52586dad2467c input=cf2c7d98bc504047]*/ { abort(); /*NOTREACHED*/ @@ -10692,8 +10688,8 @@ [clinic start generated code]*/ static PyObject * -os_getloadavg_impl(PyModuleDef *module) -/*[clinic end generated code: output=2b64c5b675d74c14 input=3d6d826b76d8a34e]*/ +os_getloadavg_impl(PyObject *module) +/*[clinic end generated code: output=9ad3a11bfb4f4bd2 input=3d6d826b76d8a34e]*/ { double loadavg[3]; if (getloadavg(loadavg, 3)!=3) { @@ -10716,8 +10712,8 @@ [clinic start generated code]*/ static PyObject * -os_device_encoding_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=34f14e33468419c1 input=9e1d4a42b66df312]*/ +os_device_encoding_impl(PyObject *module, int fd) +/*[clinic end generated code: output=e0d294bbab7e8c2b input=9e1d4a42b66df312]*/ { return _Py_device_encoding(fd); } @@ -10736,8 +10732,8 @@ [clinic start generated code]*/ static PyObject * -os_setresuid_impl(PyModuleDef *module, uid_t ruid, uid_t euid, uid_t suid) -/*[clinic end generated code: output=92cc330812c6ed0f input=9e33cb79a82792f3]*/ +os_setresuid_impl(PyObject *module, uid_t ruid, uid_t euid, uid_t suid) +/*[clinic end generated code: output=834a641e15373e97 input=9e33cb79a82792f3]*/ { if (setresuid(ruid, euid, suid) < 0) return posix_error(); @@ -10759,8 +10755,8 @@ [clinic start generated code]*/ static PyObject * -os_setresgid_impl(PyModuleDef *module, gid_t rgid, gid_t egid, gid_t sgid) -/*[clinic end generated code: output=e91dc4842a604429 input=33e9e0785ef426b1]*/ +os_setresgid_impl(PyObject *module, gid_t rgid, gid_t egid, gid_t sgid) +/*[clinic end generated code: output=6aa402f3d2e514a9 input=33e9e0785ef426b1]*/ { if (setresgid(rgid, egid, sgid) < 0) return posix_error(); @@ -10777,8 +10773,8 @@ [clinic start generated code]*/ static PyObject * -os_getresuid_impl(PyModuleDef *module) -/*[clinic end generated code: output=9ddef62faae8e477 input=41ccfa8e1f6517ad]*/ +os_getresuid_impl(PyObject *module) +/*[clinic end generated code: output=8e0becff5dece5bf input=41ccfa8e1f6517ad]*/ { uid_t ruid, euid, suid; if (getresuid(&ruid, &euid, &suid) < 0) @@ -10798,8 +10794,8 @@ [clinic start generated code]*/ static PyObject * -os_getresgid_impl(PyModuleDef *module) -/*[clinic end generated code: output=e1a553cbcf16234c input=517e68db9ca32df6]*/ +os_getresgid_impl(PyObject *module) +/*[clinic end generated code: output=2719c4bfcf27fb9f input=517e68db9ca32df6]*/ { gid_t rgid, egid, sgid; if (getresgid(&rgid, &egid, &sgid) < 0) @@ -10830,9 +10826,9 @@ [clinic start generated code]*/ static PyObject * -os_getxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_getxattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=cf2cede74bd5d412 input=8c8ea3bab78d89c2]*/ +/*[clinic end generated code: output=5f2f44200a43cff2 input=8c8ea3bab78d89c2]*/ { Py_ssize_t i; PyObject *buffer = NULL; @@ -10902,9 +10898,9 @@ [clinic start generated code]*/ static PyObject * -os_setxattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_setxattr_impl(PyObject *module, path_t *path, path_t *attribute, Py_buffer *value, int flags, int follow_symlinks) -/*[clinic end generated code: output=1b395ef82880fea0 input=f0d26833992015c2]*/ +/*[clinic end generated code: output=98b83f63fdde26bb input=f0d26833992015c2]*/ { ssize_t result; @@ -10950,9 +10946,9 @@ [clinic start generated code]*/ static PyObject * -os_removexattr_impl(PyModuleDef *module, path_t *path, path_t *attribute, +os_removexattr_impl(PyObject *module, path_t *path, path_t *attribute, int follow_symlinks) -/*[clinic end generated code: output=f92bb39ab992650d input=cdb54834161e3329]*/ +/*[clinic end generated code: output=521a51817980cda6 input=cdb54834161e3329]*/ { ssize_t result; @@ -10993,8 +10989,8 @@ [clinic start generated code]*/ static PyObject * -os_listxattr_impl(PyModuleDef *module, path_t *path, int follow_symlinks) -/*[clinic end generated code: output=a87ad6ce56e42a4f input=08cca53ac0b07c13]*/ +os_listxattr_impl(PyObject *module, path_t *path, int follow_symlinks) +/*[clinic end generated code: output=bebdb4e2ad0ce435 input=08cca53ac0b07c13]*/ { Py_ssize_t i; PyObject *result = NULL; @@ -11087,8 +11083,8 @@ [clinic start generated code]*/ static PyObject * -os_urandom_impl(PyModuleDef *module, Py_ssize_t size) -/*[clinic end generated code: output=e0011f021501f03b input=4067cdb1b6776c29]*/ +os_urandom_impl(PyObject *module, Py_ssize_t size) +/*[clinic end generated code: output=42c5cca9d18068e9 input=4067cdb1b6776c29]*/ { PyObject *bytes; int result; @@ -11228,8 +11224,8 @@ [clinic start generated code]*/ static PyObject * -os_cpu_count_impl(PyModuleDef *module) -/*[clinic end generated code: output=c59ee7f6bce832b8 input=e7c8f4ba6dbbadd3]*/ +os_cpu_count_impl(PyObject *module) +/*[clinic end generated code: output=5fc29463c3936a9c input=e7c8f4ba6dbbadd3]*/ { int ncpu = 0; #ifdef MS_WINDOWS @@ -11269,8 +11265,8 @@ [clinic start generated code]*/ static int -os_get_inheritable_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=36110bb36efaa21e input=89ac008dc9ab6b95]*/ +os_get_inheritable_impl(PyObject *module, int fd) +/*[clinic end generated code: output=0445e20e149aa5b8 input=89ac008dc9ab6b95]*/ { int return_value; if (!_PyVerify_fd(fd)) { @@ -11295,8 +11291,8 @@ [clinic start generated code]*/ static PyObject * -os_set_inheritable_impl(PyModuleDef *module, int fd, int inheritable) -/*[clinic end generated code: output=2ac5c6ce8623f045 input=9ceaead87a1e2402]*/ +os_set_inheritable_impl(PyObject *module, int fd, int inheritable) +/*[clinic end generated code: output=f1b1918a2f3c38c2 input=9ceaead87a1e2402]*/ { int result; if (!_PyVerify_fd(fd)) @@ -11321,8 +11317,8 @@ [clinic start generated code]*/ static int -os_get_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle) -/*[clinic end generated code: output=3b7b3e1b43f312b6 input=5f7759443aae3dc5]*/ +os_get_handle_inheritable_impl(PyObject *module, Py_intptr_t handle) +/*[clinic end generated code: output=9e5389b0aa0916ce input=5f7759443aae3dc5]*/ { DWORD flags; @@ -11345,9 +11341,9 @@ [clinic start generated code]*/ static PyObject * -os_set_handle_inheritable_impl(PyModuleDef *module, Py_intptr_t handle, +os_set_handle_inheritable_impl(PyObject *module, Py_intptr_t handle, int inheritable) -/*[clinic end generated code: output=d2e111a96c9eb296 input=e64b2b2730469def]*/ +/*[clinic end generated code: output=b1e67bfa3213d745 input=e64b2b2730469def]*/ { DWORD flags = inheritable ? HANDLE_FLAG_INHERIT : 0; if (!SetHandleInformation((HANDLE)handle, HANDLE_FLAG_INHERIT, flags)) { @@ -12348,8 +12344,8 @@ [clinic start generated code]*/ static PyObject * -os_fspath_impl(PyModuleDef *module, PyObject *path) -/*[clinic end generated code: output=51ef0c2772c1932a input=e357165f7b22490f]*/ +os_fspath_impl(PyObject *module, PyObject *path) +/*[clinic end generated code: output=c3c3b78ecff2914f input=e357165f7b22490f]*/ { return PyOS_FSPath(path); } diff --git a/Modules/pwdmodule.c b/Modules/pwdmodule.c --- a/Modules/pwdmodule.c +++ b/Modules/pwdmodule.c @@ -113,8 +113,8 @@ [clinic start generated code]*/ static PyObject * -pwd_getpwuid(PyModuleDef *module, PyObject *uidobj) -/*[clinic end generated code: output=cba29ae4c2bcb8e1 input=ae64d507a1c6d3e8]*/ +pwd_getpwuid(PyObject *module, PyObject *uidobj) +/*[clinic end generated code: output=c4ee1d4d429b86c4 input=ae64d507a1c6d3e8]*/ { uid_t uid; struct passwd *p; @@ -149,8 +149,8 @@ [clinic start generated code]*/ static PyObject * -pwd_getpwnam_impl(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=66848d42d386fca3 input=d5f7e700919b02d3]*/ +pwd_getpwnam_impl(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=6abeee92430e43d2 input=d5f7e700919b02d3]*/ { char *name; struct passwd *p; @@ -181,8 +181,8 @@ [clinic start generated code]*/ static PyObject * -pwd_getpwall_impl(PyModuleDef *module) -/*[clinic end generated code: output=ab30e37bf26d431d input=d7ecebfd90219b85]*/ +pwd_getpwall_impl(PyObject *module) +/*[clinic end generated code: output=4853d2f5a0afac8a input=d7ecebfd90219b85]*/ { PyObject *d; struct passwd *p; diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c --- a/Modules/pyexpat.c +++ b/Modules/pyexpat.c @@ -1555,9 +1555,9 @@ [clinic start generated code]*/ static PyObject * -pyexpat_ParserCreate_impl(PyModuleDef *module, const char *encoding, +pyexpat_ParserCreate_impl(PyObject *module, const char *encoding, const char *namespace_separator, PyObject *intern) -/*[clinic end generated code: output=81fccd233e1743a8 input=23d29704acad385d]*/ +/*[clinic end generated code: output=295c0cf01ab1146c input=23d29704acad385d]*/ { PyObject *result; int intern_decref = 0; @@ -1601,8 +1601,8 @@ [clinic start generated code]*/ static PyObject * -pyexpat_ErrorString_impl(PyModuleDef *module, long code) -/*[clinic end generated code: output=d87668108b6868e5 input=cc67de010d9e62b3]*/ +pyexpat_ErrorString_impl(PyObject *module, long code) +/*[clinic end generated code: output=2feae50d166f2174 input=cc67de010d9e62b3]*/ { return Py_BuildValue("z", XML_ErrorString((int)code)); } diff --git a/Modules/sha1module.c b/Modules/sha1module.c --- a/Modules/sha1module.c +++ b/Modules/sha1module.c @@ -486,8 +486,8 @@ [clinic start generated code]*/ static PyObject * -_sha1_sha1_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=3e4e841386b9e8db input=27ea54281d995ec2]*/ +_sha1_sha1_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=e5982830d1dece51 input=27ea54281d995ec2]*/ { SHA1object *new; Py_buffer buf; diff --git a/Modules/sha256module.c b/Modules/sha256module.c --- a/Modules/sha256module.c +++ b/Modules/sha256module.c @@ -607,8 +607,8 @@ [clinic start generated code]*/ static PyObject * -_sha256_sha256_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=d70e6e2d97112844 input=09cce3fb855056b2]*/ +_sha256_sha256_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=fa644436dcea5c31 input=09cce3fb855056b2]*/ { SHAobject *new; Py_buffer buf; @@ -647,8 +647,8 @@ [clinic start generated code]*/ static PyObject * -_sha256_sha224_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=f2822bf28416b42a input=27a04ba24c353a73]*/ +_sha256_sha224_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=21e3ba22c3404f93 input=27a04ba24c353a73]*/ { SHAobject *new; Py_buffer buf; diff --git a/Modules/sha512module.c b/Modules/sha512module.c --- a/Modules/sha512module.c +++ b/Modules/sha512module.c @@ -678,8 +678,8 @@ [clinic start generated code]*/ static PyObject * -_sha512_sha512_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=da13bc0a94da6de3 input=e69bad9ae9b6a308]*/ +_sha512_sha512_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=8b865a2df73bd387 input=e69bad9ae9b6a308]*/ { SHAobject *new; Py_buffer buf; @@ -718,8 +718,8 @@ [clinic start generated code]*/ static PyObject * -_sha512_sha384_impl(PyModuleDef *module, PyObject *string) -/*[clinic end generated code: output=ac731aea5509174d input=c9327788d4ea4545]*/ +_sha512_sha384_impl(PyObject *module, PyObject *string) +/*[clinic end generated code: output=ae4b2e26decf81e8 input=c9327788d4ea4545]*/ { SHAobject *new; Py_buffer buf; diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c --- a/Modules/signalmodule.c +++ b/Modules/signalmodule.c @@ -340,8 +340,8 @@ [clinic start generated code]*/ static long -signal_alarm_impl(PyModuleDef *module, int seconds) -/*[clinic end generated code: output=f5f9badaab25d3e7 input=0d5e97e0e6f39e86]*/ +signal_alarm_impl(PyObject *module, int seconds) +/*[clinic end generated code: output=144232290814c298 input=0d5e97e0e6f39e86]*/ { /* alarm() returns the number of seconds remaining */ return (long)alarm(seconds); @@ -358,8 +358,8 @@ [clinic start generated code]*/ static PyObject * -signal_pause_impl(PyModuleDef *module) -/*[clinic end generated code: output=9245704caa63bbe9 input=f03de0f875752062]*/ +signal_pause_impl(PyObject *module) +/*[clinic end generated code: output=391656788b3c3929 input=f03de0f875752062]*/ { Py_BEGIN_ALLOW_THREADS (void)pause(); @@ -394,8 +394,8 @@ [clinic start generated code]*/ static PyObject * -signal_signal_impl(PyModuleDef *module, int signalnum, PyObject *handler) -/*[clinic end generated code: output=622d7d0beebea546 input=deee84af5fa0432c]*/ +signal_signal_impl(PyObject *module, int signalnum, PyObject *handler) +/*[clinic end generated code: output=b44cfda43780f3a1 input=deee84af5fa0432c]*/ { PyObject *old_handler; void (*func)(int); @@ -472,8 +472,8 @@ [clinic start generated code]*/ static PyObject * -signal_getsignal_impl(PyModuleDef *module, int signalnum) -/*[clinic end generated code: output=d50ec355757e360c input=ac23a00f19dfa509]*/ +signal_getsignal_impl(PyObject *module, int signalnum) +/*[clinic end generated code: output=35b3e0e796fd555e input=ac23a00f19dfa509]*/ { PyObject *old_handler; if (signalnum < 1 || signalnum >= NSIG) { @@ -507,8 +507,8 @@ [clinic start generated code]*/ static PyObject * -signal_siginterrupt_impl(PyModuleDef *module, int signalnum, int flag) -/*[clinic end generated code: output=5dcf8b031b0e8044 input=4160acacca3e2099]*/ +signal_siginterrupt_impl(PyObject *module, int signalnum, int flag) +/*[clinic end generated code: output=063816243d85dd19 input=4160acacca3e2099]*/ { if (signalnum < 1 || signalnum >= NSIG) { PyErr_SetString(PyExc_ValueError, @@ -682,9 +682,9 @@ [clinic start generated code]*/ static PyObject * -signal_setitimer_impl(PyModuleDef *module, int which, double seconds, +signal_setitimer_impl(PyObject *module, int which, double seconds, double interval) -/*[clinic end generated code: output=9a9227a27bd05988 input=0d27d417cfcbd51a]*/ +/*[clinic end generated code: output=6f51da0fe0787f2c input=0d27d417cfcbd51a]*/ { struct itimerval new, old; @@ -714,8 +714,8 @@ [clinic start generated code]*/ static PyObject * -signal_getitimer_impl(PyModuleDef *module, int which) -/*[clinic end generated code: output=d1349ab18aadc569 input=f7d21d38f3490627]*/ +signal_getitimer_impl(PyObject *module, int which) +/*[clinic end generated code: output=9e053175d517db40 input=f7d21d38f3490627]*/ { struct itimerval old; @@ -829,8 +829,8 @@ [clinic start generated code]*/ static PyObject * -signal_pthread_sigmask_impl(PyModuleDef *module, int how, PyObject *mask) -/*[clinic end generated code: output=b043a9f0eeb1e075 input=f3b7d7a61b7b8283]*/ +signal_pthread_sigmask_impl(PyObject *module, int how, PyObject *mask) +/*[clinic end generated code: output=ff640fe092bc9181 input=f3b7d7a61b7b8283]*/ { sigset_t newmask, previous; int err; @@ -867,8 +867,8 @@ [clinic start generated code]*/ static PyObject * -signal_sigpending_impl(PyModuleDef *module) -/*[clinic end generated code: output=bf4ced803e7e51dd input=e0036c016f874e29]*/ +signal_sigpending_impl(PyObject *module) +/*[clinic end generated code: output=53375ffe89325022 input=e0036c016f874e29]*/ { int err; sigset_t mask; @@ -897,8 +897,8 @@ [clinic start generated code]*/ static PyObject * -signal_sigwait(PyModuleDef *module, PyObject *sigset) -/*[clinic end generated code: output=dae53048b0336a5c input=11af2d82d83c2e94]*/ +signal_sigwait(PyObject *module, PyObject *sigset) +/*[clinic end generated code: output=557173647424f6e4 input=11af2d82d83c2e94]*/ { sigset_t set; int err, signum; @@ -986,8 +986,8 @@ [clinic start generated code]*/ static PyObject * -signal_sigwaitinfo(PyModuleDef *module, PyObject *sigset) -/*[clinic end generated code: output=0bb53b07e5e926b5 input=f3779a74a991e171]*/ +signal_sigwaitinfo(PyObject *module, PyObject *sigset) +/*[clinic end generated code: output=c40f27b269cd2309 input=f3779a74a991e171]*/ { sigset_t set; siginfo_t si; @@ -1026,9 +1026,9 @@ [clinic start generated code]*/ static PyObject * -signal_sigtimedwait_impl(PyModuleDef *module, PyObject *sigset, +signal_sigtimedwait_impl(PyObject *module, PyObject *sigset, PyObject *timeout_obj) -/*[clinic end generated code: output=c1960b5cea139929 input=53fd4ea3e3724eb8]*/ +/*[clinic end generated code: output=f7eff31e679f4312 input=53fd4ea3e3724eb8]*/ { struct timespec ts; sigset_t set; @@ -1097,8 +1097,8 @@ [clinic start generated code]*/ static PyObject * -signal_pthread_kill_impl(PyModuleDef *module, long thread_id, int signalnum) -/*[clinic end generated code: output=35aed2713c756d7a input=77ed6a3b6f2a8122]*/ +signal_pthread_kill_impl(PyObject *module, long thread_id, int signalnum) +/*[clinic end generated code: output=2a09ce41f1c4228a input=77ed6a3b6f2a8122]*/ { int err; diff --git a/Modules/spwdmodule.c b/Modules/spwdmodule.c --- a/Modules/spwdmodule.c +++ b/Modules/spwdmodule.c @@ -125,8 +125,8 @@ [clinic start generated code]*/ static PyObject * -spwd_getspnam_impl(PyModuleDef *module, PyObject *arg) -/*[clinic end generated code: output=9f6bbe51a4eb3b21 input=dd89429e6167a00f]*/ +spwd_getspnam_impl(PyObject *module, PyObject *arg) +/*[clinic end generated code: output=701250cf57dc6ebe input=dd89429e6167a00f]*/ { char *name; struct spwd *p; @@ -162,8 +162,8 @@ [clinic start generated code]*/ static PyObject * -spwd_getspall_impl(PyModuleDef *module) -/*[clinic end generated code: output=b12d8ec7bdb29612 input=b2c84b7857d622bd]*/ +spwd_getspall_impl(PyObject *module) +/*[clinic end generated code: output=4fda298d6bf6d057 input=b2c84b7857d622bd]*/ { PyObject *d; struct spwd *p; diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -151,8 +151,8 @@ [clinic start generated code]*/ static PyObject * -zlib_compress_impl(PyModuleDef *module, Py_buffer *data, int level) -/*[clinic end generated code: output=1b97589132b203b4 input=638d54b6315dbed3]*/ +zlib_compress_impl(PyObject *module, Py_buffer *data, int level) +/*[clinic end generated code: output=d80906d73f6294c8 input=638d54b6315dbed3]*/ { PyObject *ReturnVal = NULL; Byte *input, *output = NULL; @@ -284,9 +284,9 @@ [clinic start generated code]*/ static PyObject * -zlib_decompress_impl(PyModuleDef *module, Py_buffer *data, int wbits, +zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, unsigned int bufsize) -/*[clinic end generated code: output=444d0987f3429574 input=75123b0d4ff0541d]*/ +/*[clinic end generated code: output=475b36ead58b243d input=75123b0d4ff0541d]*/ { PyObject *result_str = NULL; Byte *input; @@ -419,9 +419,9 @@ [clinic start generated code]*/ static PyObject * -zlib_compressobj_impl(PyModuleDef *module, int level, int method, int wbits, +zlib_compressobj_impl(PyObject *module, int level, int method, int wbits, int memLevel, int strategy, Py_buffer *zdict) -/*[clinic end generated code: output=2949bbb9a5723ccd input=2fa3d026f90ab8d5]*/ +/*[clinic end generated code: output=8b5bed9c8fc3814d input=2fa3d026f90ab8d5]*/ { compobject *self = NULL; int err; @@ -516,8 +516,8 @@ [clinic start generated code]*/ static PyObject * -zlib_decompressobj_impl(PyModuleDef *module, int wbits, PyObject *zdict) -/*[clinic end generated code: output=8ccd583fbd631798 input=d3832b8511fc977b]*/ +zlib_decompressobj_impl(PyObject *module, int wbits, PyObject *zdict) +/*[clinic end generated code: output=3069b99994f36906 input=d3832b8511fc977b]*/ { int err; compobject *self; @@ -1206,8 +1206,8 @@ [clinic start generated code]*/ static PyObject * -zlib_adler32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value) -/*[clinic end generated code: output=51d6d75ee655c78a input=6ff4557872160e88]*/ +zlib_adler32_impl(PyObject *module, Py_buffer *data, unsigned int value) +/*[clinic end generated code: output=422106f5ca8c92c0 input=6ff4557872160e88]*/ { /* Releasing the GIL for very small buffers is inefficient and may lower performance */ @@ -1245,8 +1245,8 @@ [clinic start generated code]*/ static PyObject * -zlib_crc32_impl(PyModuleDef *module, Py_buffer *data, unsigned int value) -/*[clinic end generated code: output=c1e986e74fe7b623 input=26c3ed430fa00b4c]*/ +zlib_crc32_impl(PyObject *module, Py_buffer *data, unsigned int value) +/*[clinic end generated code: output=63499fa20af7ea25 input=26c3ed430fa00b4c]*/ { int signed_val; diff --git a/PC/clinic/msvcrtmodule.c.h b/PC/clinic/msvcrtmodule.c.h --- a/PC/clinic/msvcrtmodule.c.h +++ b/PC/clinic/msvcrtmodule.c.h @@ -15,10 +15,10 @@ {"heapmin", (PyCFunction)msvcrt_heapmin, METH_NOARGS, msvcrt_heapmin__doc__}, static PyObject * -msvcrt_heapmin_impl(PyModuleDef *module); +msvcrt_heapmin_impl(PyObject *module); static PyObject * -msvcrt_heapmin(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_heapmin(PyObject *module, PyObject *Py_UNUSED(ignored)) { return msvcrt_heapmin_impl(module); } @@ -40,10 +40,10 @@ {"locking", (PyCFunction)msvcrt_locking, METH_VARARGS, msvcrt_locking__doc__}, static PyObject * -msvcrt_locking_impl(PyModuleDef *module, int fd, int mode, long nbytes); +msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes); static PyObject * -msvcrt_locking(PyModuleDef *module, PyObject *args) +msvcrt_locking(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -75,10 +75,10 @@ {"setmode", (PyCFunction)msvcrt_setmode, METH_VARARGS, msvcrt_setmode__doc__}, static long -msvcrt_setmode_impl(PyModuleDef *module, int fd, int flags); +msvcrt_setmode_impl(PyObject *module, int fd, int flags); static PyObject * -msvcrt_setmode(PyModuleDef *module, PyObject *args) +msvcrt_setmode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int fd; @@ -113,11 +113,10 @@ {"open_osfhandle", (PyCFunction)msvcrt_open_osfhandle, METH_VARARGS, msvcrt_open_osfhandle__doc__}, static long -msvcrt_open_osfhandle_impl(PyModuleDef *module, Py_intptr_t handle, - int flags); +msvcrt_open_osfhandle_impl(PyObject *module, Py_intptr_t handle, int flags); static PyObject * -msvcrt_open_osfhandle(PyModuleDef *module, PyObject *args) +msvcrt_open_osfhandle(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_intptr_t handle; @@ -150,10 +149,10 @@ {"get_osfhandle", (PyCFunction)msvcrt_get_osfhandle, METH_O, msvcrt_get_osfhandle__doc__}, static Py_intptr_t -msvcrt_get_osfhandle_impl(PyModuleDef *module, int fd); +msvcrt_get_osfhandle_impl(PyObject *module, int fd); static PyObject * -msvcrt_get_osfhandle(PyModuleDef *module, PyObject *arg) +msvcrt_get_osfhandle(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int fd; @@ -182,10 +181,10 @@ {"kbhit", (PyCFunction)msvcrt_kbhit, METH_NOARGS, msvcrt_kbhit__doc__}, static long -msvcrt_kbhit_impl(PyModuleDef *module); +msvcrt_kbhit_impl(PyObject *module); static PyObject * -msvcrt_kbhit(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_kbhit(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; long _return_value; @@ -216,10 +215,10 @@ {"getch", (PyCFunction)msvcrt_getch, METH_NOARGS, msvcrt_getch__doc__}, static int -msvcrt_getch_impl(PyModuleDef *module); +msvcrt_getch_impl(PyObject *module); static PyObject * -msvcrt_getch(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getch(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; char s[1]; @@ -240,10 +239,10 @@ {"getwch", (PyCFunction)msvcrt_getwch, METH_NOARGS, msvcrt_getwch__doc__}, static wchar_t -msvcrt_getwch_impl(PyModuleDef *module); +msvcrt_getwch_impl(PyObject *module); static PyObject * -msvcrt_getwch(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getwch(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; wchar_t _return_value; @@ -264,10 +263,10 @@ {"getche", (PyCFunction)msvcrt_getche, METH_NOARGS, msvcrt_getche__doc__}, static int -msvcrt_getche_impl(PyModuleDef *module); +msvcrt_getche_impl(PyObject *module); static PyObject * -msvcrt_getche(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getche(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; char s[1]; @@ -288,10 +287,10 @@ {"getwche", (PyCFunction)msvcrt_getwche, METH_NOARGS, msvcrt_getwche__doc__}, static wchar_t -msvcrt_getwche_impl(PyModuleDef *module); +msvcrt_getwche_impl(PyObject *module); static PyObject * -msvcrt_getwche(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +msvcrt_getwche(PyObject *module, PyObject *Py_UNUSED(ignored)) { PyObject *return_value = NULL; wchar_t _return_value; @@ -312,10 +311,10 @@ {"putch", (PyCFunction)msvcrt_putch, METH_O, msvcrt_putch__doc__}, static PyObject * -msvcrt_putch_impl(PyModuleDef *module, char char_value); +msvcrt_putch_impl(PyObject *module, char char_value); static PyObject * -msvcrt_putch(PyModuleDef *module, PyObject *arg) +msvcrt_putch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; char char_value; @@ -339,10 +338,10 @@ {"putwch", (PyCFunction)msvcrt_putwch, METH_O, msvcrt_putwch__doc__}, static PyObject * -msvcrt_putwch_impl(PyModuleDef *module, int unicode_char); +msvcrt_putwch_impl(PyObject *module, int unicode_char); static PyObject * -msvcrt_putwch(PyModuleDef *module, PyObject *arg) +msvcrt_putwch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int unicode_char; @@ -370,10 +369,10 @@ {"ungetch", (PyCFunction)msvcrt_ungetch, METH_O, msvcrt_ungetch__doc__}, static PyObject * -msvcrt_ungetch_impl(PyModuleDef *module, char char_value); +msvcrt_ungetch_impl(PyObject *module, char char_value); static PyObject * -msvcrt_ungetch(PyModuleDef *module, PyObject *arg) +msvcrt_ungetch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; char char_value; @@ -397,10 +396,10 @@ {"ungetwch", (PyCFunction)msvcrt_ungetwch, METH_O, msvcrt_ungetwch__doc__}, static PyObject * -msvcrt_ungetwch_impl(PyModuleDef *module, int unicode_char); +msvcrt_ungetwch_impl(PyObject *module, int unicode_char); static PyObject * -msvcrt_ungetwch(PyModuleDef *module, PyObject *arg) +msvcrt_ungetwch(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int unicode_char; @@ -428,10 +427,10 @@ {"CrtSetReportFile", (PyCFunction)msvcrt_CrtSetReportFile, METH_VARARGS, msvcrt_CrtSetReportFile__doc__}, static long -msvcrt_CrtSetReportFile_impl(PyModuleDef *module, int type, int file); +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file); static PyObject * -msvcrt_CrtSetReportFile(PyModuleDef *module, PyObject *args) +msvcrt_CrtSetReportFile(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int type; @@ -468,10 +467,10 @@ {"CrtSetReportMode", (PyCFunction)msvcrt_CrtSetReportMode, METH_VARARGS, msvcrt_CrtSetReportMode__doc__}, static long -msvcrt_CrtSetReportMode_impl(PyModuleDef *module, int type, int mode); +msvcrt_CrtSetReportMode_impl(PyObject *module, int type, int mode); static PyObject * -msvcrt_CrtSetReportMode(PyModuleDef *module, PyObject *args) +msvcrt_CrtSetReportMode(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int type; @@ -508,10 +507,10 @@ {"set_error_mode", (PyCFunction)msvcrt_set_error_mode, METH_O, msvcrt_set_error_mode__doc__}, static long -msvcrt_set_error_mode_impl(PyModuleDef *module, int mode); +msvcrt_set_error_mode_impl(PyObject *module, int mode); static PyObject * -msvcrt_set_error_mode(PyModuleDef *module, PyObject *arg) +msvcrt_set_error_mode(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int mode; @@ -542,10 +541,10 @@ {"SetErrorMode", (PyCFunction)msvcrt_SetErrorMode, METH_O, msvcrt_SetErrorMode__doc__}, static PyObject * -msvcrt_SetErrorMode_impl(PyModuleDef *module, unsigned int mode); +msvcrt_SetErrorMode_impl(PyObject *module, unsigned int mode); static PyObject * -msvcrt_SetErrorMode(PyModuleDef *module, PyObject *arg) +msvcrt_SetErrorMode(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; unsigned int mode; @@ -570,4 +569,4 @@ #ifndef MSVCRT_SET_ERROR_MODE_METHODDEF #define MSVCRT_SET_ERROR_MODE_METHODDEF #endif /* !defined(MSVCRT_SET_ERROR_MODE_METHODDEF) */ -/*[clinic end generated code: output=636de3460aecbca7 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=ece8106c0592ff1f input=a9049054013a1b77]*/ diff --git a/PC/clinic/winreg.c.h b/PC/clinic/winreg.c.h --- a/PC/clinic/winreg.c.h +++ b/PC/clinic/winreg.c.h @@ -136,11 +136,11 @@ {"ConnectRegistry", (PyCFunction)winreg_ConnectRegistry, METH_VARARGS, winreg_ConnectRegistry__doc__}, static HKEY -winreg_ConnectRegistry_impl(PyModuleDef *module, Py_UNICODE *computer_name, +winreg_ConnectRegistry_impl(PyObject *module, Py_UNICODE *computer_name, HKEY key); static PyObject * -winreg_ConnectRegistry(PyModuleDef *module, PyObject *args) +winreg_ConnectRegistry(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *computer_name; @@ -184,10 +184,10 @@ {"CreateKey", (PyCFunction)winreg_CreateKey, METH_VARARGS, winreg_CreateKey__doc__}, static HKEY -winreg_CreateKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_CreateKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_CreateKey(PyModuleDef *module, PyObject *args) +winreg_CreateKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -237,11 +237,11 @@ {"CreateKeyEx", (PyCFunction)winreg_CreateKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_CreateKeyEx__doc__}, static HKEY -winreg_CreateKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_CreateKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_CreateKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -287,10 +287,10 @@ {"DeleteKey", (PyCFunction)winreg_DeleteKey, METH_VARARGS, winreg_DeleteKey__doc__}, static PyObject * -winreg_DeleteKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_DeleteKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_DeleteKey(PyModuleDef *module, PyObject *args) +winreg_DeleteKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -335,11 +335,11 @@ {"DeleteKeyEx", (PyCFunction)winreg_DeleteKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_DeleteKeyEx__doc__}, static PyObject * -winreg_DeleteKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, REGSAM access, int reserved); static PyObject * -winreg_DeleteKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_DeleteKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "access", "reserved", NULL}; @@ -373,10 +373,10 @@ {"DeleteValue", (PyCFunction)winreg_DeleteValue, METH_VARARGS, winreg_DeleteValue__doc__}, static PyObject * -winreg_DeleteValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value); +winreg_DeleteValue_impl(PyObject *module, HKEY key, Py_UNICODE *value); static PyObject * -winreg_DeleteValue(PyModuleDef *module, PyObject *args) +winreg_DeleteValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -411,10 +411,10 @@ {"EnumKey", (PyCFunction)winreg_EnumKey, METH_VARARGS, winreg_EnumKey__doc__}, static PyObject * -winreg_EnumKey_impl(PyModuleDef *module, HKEY key, int index); +winreg_EnumKey_impl(PyObject *module, HKEY key, int index); static PyObject * -winreg_EnumKey(PyModuleDef *module, PyObject *args) +winreg_EnumKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -458,10 +458,10 @@ {"EnumValue", (PyCFunction)winreg_EnumValue, METH_VARARGS, winreg_EnumValue__doc__}, static PyObject * -winreg_EnumValue_impl(PyModuleDef *module, HKEY key, int index); +winreg_EnumValue_impl(PyObject *module, HKEY key, int index); static PyObject * -winreg_EnumValue(PyModuleDef *module, PyObject *args) +winreg_EnumValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -487,10 +487,10 @@ {"ExpandEnvironmentStrings", (PyCFunction)winreg_ExpandEnvironmentStrings, METH_O, winreg_ExpandEnvironmentStrings__doc__}, static PyObject * -winreg_ExpandEnvironmentStrings_impl(PyModuleDef *module, Py_UNICODE *string); +winreg_ExpandEnvironmentStrings_impl(PyObject *module, Py_UNICODE *string); static PyObject * -winreg_ExpandEnvironmentStrings(PyModuleDef *module, PyObject *arg) +winreg_ExpandEnvironmentStrings(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; Py_UNICODE *string; @@ -527,10 +527,10 @@ {"FlushKey", (PyCFunction)winreg_FlushKey, METH_O, winreg_FlushKey__doc__}, static PyObject * -winreg_FlushKey_impl(PyModuleDef *module, HKEY key); +winreg_FlushKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_FlushKey(PyModuleDef *module, PyObject *arg) +winreg_FlushKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -576,11 +576,11 @@ {"LoadKey", (PyCFunction)winreg_LoadKey, METH_VARARGS, winreg_LoadKey__doc__}, static PyObject * -winreg_LoadKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_LoadKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, Py_UNICODE *file_name); static PyObject * -winreg_LoadKey(PyModuleDef *module, PyObject *args) +winreg_LoadKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -620,11 +620,11 @@ {"OpenKey", (PyCFunction)winreg_OpenKey, METH_VARARGS|METH_KEYWORDS, winreg_OpenKey__doc__}, static HKEY -winreg_OpenKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_OpenKey(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_OpenKey(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -671,11 +671,11 @@ {"OpenKeyEx", (PyCFunction)winreg_OpenKeyEx, METH_VARARGS|METH_KEYWORDS, winreg_OpenKeyEx__doc__}, static HKEY -winreg_OpenKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access); static PyObject * -winreg_OpenKeyEx(PyModuleDef *module, PyObject *args, PyObject *kwargs) +winreg_OpenKeyEx(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"key", "sub_key", "reserved", "access", NULL}; @@ -718,10 +718,10 @@ {"QueryInfoKey", (PyCFunction)winreg_QueryInfoKey, METH_O, winreg_QueryInfoKey__doc__}, static PyObject * -winreg_QueryInfoKey_impl(PyModuleDef *module, HKEY key); +winreg_QueryInfoKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_QueryInfoKey(PyModuleDef *module, PyObject *arg) +winreg_QueryInfoKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -759,10 +759,10 @@ {"QueryValue", (PyCFunction)winreg_QueryValue, METH_VARARGS, winreg_QueryValue__doc__}, static PyObject * -winreg_QueryValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key); +winreg_QueryValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key); static PyObject * -winreg_QueryValue(PyModuleDef *module, PyObject *args) +winreg_QueryValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -798,10 +798,10 @@ {"QueryValueEx", (PyCFunction)winreg_QueryValueEx, METH_VARARGS, winreg_QueryValueEx__doc__}, static PyObject * -winreg_QueryValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *name); +winreg_QueryValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *name); static PyObject * -winreg_QueryValueEx(PyModuleDef *module, PyObject *args) +winreg_QueryValueEx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -842,10 +842,10 @@ {"SaveKey", (PyCFunction)winreg_SaveKey, METH_VARARGS, winreg_SaveKey__doc__}, static PyObject * -winreg_SaveKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *file_name); +winreg_SaveKey_impl(PyObject *module, HKEY key, Py_UNICODE *file_name); static PyObject * -winreg_SaveKey(PyModuleDef *module, PyObject *args) +winreg_SaveKey(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -891,12 +891,12 @@ {"SetValue", (PyCFunction)winreg_SetValue, METH_VARARGS, winreg_SetValue__doc__}, static PyObject * -winreg_SetValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_SetValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, DWORD type, Py_UNICODE *value, Py_ssize_clean_t value_length); static PyObject * -winreg_SetValue(PyModuleDef *module, PyObject *args) +winreg_SetValue(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -962,11 +962,11 @@ {"SetValueEx", (PyCFunction)winreg_SetValueEx, METH_VARARGS, winreg_SetValueEx__doc__}, static PyObject * -winreg_SetValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value_name, +winreg_SetValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *value_name, PyObject *reserved, DWORD type, PyObject *value); static PyObject * -winreg_SetValueEx(PyModuleDef *module, PyObject *args) +winreg_SetValueEx(PyObject *module, PyObject *args) { PyObject *return_value = NULL; HKEY key; @@ -1004,10 +1004,10 @@ {"DisableReflectionKey", (PyCFunction)winreg_DisableReflectionKey, METH_O, winreg_DisableReflectionKey__doc__}, static PyObject * -winreg_DisableReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_DisableReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_DisableReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_DisableReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1038,10 +1038,10 @@ {"EnableReflectionKey", (PyCFunction)winreg_EnableReflectionKey, METH_O, winreg_EnableReflectionKey__doc__}, static PyObject * -winreg_EnableReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_EnableReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_EnableReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_EnableReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1070,10 +1070,10 @@ {"QueryReflectionKey", (PyCFunction)winreg_QueryReflectionKey, METH_O, winreg_QueryReflectionKey__doc__}, static PyObject * -winreg_QueryReflectionKey_impl(PyModuleDef *module, HKEY key); +winreg_QueryReflectionKey_impl(PyObject *module, HKEY key); static PyObject * -winreg_QueryReflectionKey(PyModuleDef *module, PyObject *arg) +winreg_QueryReflectionKey(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; HKEY key; @@ -1086,4 +1086,4 @@ exit: return return_value; } -/*[clinic end generated code: output=ca128bfa212d8d1f input=a9049054013a1b77]*/ +/*[clinic end generated code: output=c35ce71f825424d1 input=a9049054013a1b77]*/ diff --git a/PC/clinic/winsound.c.h b/PC/clinic/winsound.c.h --- a/PC/clinic/winsound.c.h +++ b/PC/clinic/winsound.c.h @@ -17,10 +17,10 @@ {"PlaySound", (PyCFunction)winsound_PlaySound, METH_VARARGS, winsound_PlaySound__doc__}, static PyObject * -winsound_PlaySound_impl(PyModuleDef *module, Py_UNICODE *sound, int flags); +winsound_PlaySound_impl(PyObject *module, Py_UNICODE *sound, int flags); static PyObject * -winsound_PlaySound(PyModuleDef *module, PyObject *args) +winsound_PlaySound(PyObject *module, PyObject *args) { PyObject *return_value = NULL; Py_UNICODE *sound; @@ -52,10 +52,10 @@ {"Beep", (PyCFunction)winsound_Beep, METH_VARARGS, winsound_Beep__doc__}, static PyObject * -winsound_Beep_impl(PyModuleDef *module, int frequency, int duration); +winsound_Beep_impl(PyObject *module, int frequency, int duration); static PyObject * -winsound_Beep(PyModuleDef *module, PyObject *args) +winsound_Beep(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int frequency; @@ -83,10 +83,10 @@ {"MessageBeep", (PyCFunction)winsound_MessageBeep, METH_VARARGS, winsound_MessageBeep__doc__}, static PyObject * -winsound_MessageBeep_impl(PyModuleDef *module, int x); +winsound_MessageBeep_impl(PyObject *module, int x); static PyObject * -winsound_MessageBeep(PyModuleDef *module, PyObject *args) +winsound_MessageBeep(PyObject *module, PyObject *args) { PyObject *return_value = NULL; int x = MB_OK; @@ -100,4 +100,4 @@ exit: return return_value; } -/*[clinic end generated code: output=a5f53e42d4396bb4 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=1044b2adf3c67014 input=a9049054013a1b77]*/ diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -78,8 +78,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_heapmin_impl(PyModuleDef *module) -/*[clinic end generated code: output=464f866feb57c436 input=82e1771d21bde2d8]*/ +msvcrt_heapmin_impl(PyObject *module) +/*[clinic end generated code: output=1ba00f344782dc19 input=82e1771d21bde2d8]*/ { if (_heapmin() != 0) return PyErr_SetFromErrno(PyExc_IOError); @@ -105,8 +105,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_locking_impl(PyModuleDef *module, int fd, int mode, long nbytes) -/*[clinic end generated code: output=dff41e5e76d544de input=d9f13f0f6a713ba7]*/ +msvcrt_locking_impl(PyObject *module, int fd, int mode, long nbytes) +/*[clinic end generated code: output=a4a90deca9785a03 input=d9f13f0f6a713ba7]*/ { int err; @@ -135,8 +135,8 @@ [clinic start generated code]*/ static long -msvcrt_setmode_impl(PyModuleDef *module, int fd, int flags) -/*[clinic end generated code: output=8c84e5b37c586d0d input=76e7c01f6b137f75]*/ +msvcrt_setmode_impl(PyObject *module, int fd, int flags) +/*[clinic end generated code: output=24a9be5ea07ccb9b input=76e7c01f6b137f75]*/ { flags = _setmode(fd, flags); if (flags == -1) @@ -160,9 +160,8 @@ [clinic start generated code]*/ static long -msvcrt_open_osfhandle_impl(PyModuleDef *module, Py_intptr_t handle, - int flags) -/*[clinic end generated code: output=86bce32582c49c06 input=4d8516ed32db8f65]*/ +msvcrt_open_osfhandle_impl(PyObject *module, Py_intptr_t handle, int flags) +/*[clinic end generated code: output=bf65e422243a39f9 input=4d8516ed32db8f65]*/ { int fd; @@ -185,8 +184,8 @@ [clinic start generated code]*/ static Py_intptr_t -msvcrt_get_osfhandle_impl(PyModuleDef *module, int fd) -/*[clinic end generated code: output=376bff52586b55a6 input=c7d18d02c8017ec1]*/ +msvcrt_get_osfhandle_impl(PyObject *module, int fd) +/*[clinic end generated code: output=eac47643338c0baa input=c7d18d02c8017ec1]*/ { Py_intptr_t handle = -1; @@ -212,8 +211,8 @@ [clinic start generated code]*/ static long -msvcrt_kbhit_impl(PyModuleDef *module) -/*[clinic end generated code: output=2b7293fcbe5cb24e input=e70d678a5c2f6acc]*/ +msvcrt_kbhit_impl(PyObject *module) +/*[clinic end generated code: output=940dfce6587c1890 input=e70d678a5c2f6acc]*/ { return _kbhit(); } @@ -231,8 +230,8 @@ [clinic start generated code]*/ static int -msvcrt_getch_impl(PyModuleDef *module) -/*[clinic end generated code: output=199e3d89f49c166a input=37a40cf0ed0d1153]*/ +msvcrt_getch_impl(PyObject *module) +/*[clinic end generated code: output=a4e51f0565064a7d input=37a40cf0ed0d1153]*/ { int ch; @@ -249,8 +248,8 @@ [clinic start generated code]*/ static wchar_t -msvcrt_getwch_impl(PyModuleDef *module) -/*[clinic end generated code: output=9d3762861328b1fe input=27b3dec8ad823d7c]*/ +msvcrt_getwch_impl(PyObject *module) +/*[clinic end generated code: output=be9937494e22f007 input=27b3dec8ad823d7c]*/ { wchar_t ch; @@ -267,8 +266,8 @@ [clinic start generated code]*/ static int -msvcrt_getche_impl(PyModuleDef *module) -/*[clinic end generated code: output=8aa369be6550068e input=43311ade9ed4a9c0]*/ +msvcrt_getche_impl(PyObject *module) +/*[clinic end generated code: output=d8f7db4fd2990401 input=43311ade9ed4a9c0]*/ { int ch; @@ -285,8 +284,8 @@ [clinic start generated code]*/ static wchar_t -msvcrt_getwche_impl(PyModuleDef *module) -/*[clinic end generated code: output=3693cf78e3ea0cf6 input=49337d59d1a591f8]*/ +msvcrt_getwche_impl(PyObject *module) +/*[clinic end generated code: output=d0dae5ba3829d596 input=49337d59d1a591f8]*/ { wchar_t ch; @@ -306,8 +305,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_putch_impl(PyModuleDef *module, char char_value) -/*[clinic end generated code: output=c05548b11554f36f input=ec078dd10cb054d6]*/ +msvcrt_putch_impl(PyObject *module, char char_value) +/*[clinic end generated code: output=92ec9b81012d8f60 input=ec078dd10cb054d6]*/ { _putch(char_value); Py_RETURN_NONE; @@ -323,8 +322,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_putwch_impl(PyModuleDef *module, int unicode_char) -/*[clinic end generated code: output=c216a73694ca73dd input=996ccd0bbcbac4c3]*/ +msvcrt_putwch_impl(PyObject *module, int unicode_char) +/*[clinic end generated code: output=a3bd1a8951d28eee input=996ccd0bbcbac4c3]*/ { _putwch(unicode_char); Py_RETURN_NONE; @@ -345,8 +344,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_ungetch_impl(PyModuleDef *module, char char_value) -/*[clinic end generated code: output=19a4cd3249709ec9 input=22f07ee9001bbf0f]*/ +msvcrt_ungetch_impl(PyObject *module, char char_value) +/*[clinic end generated code: output=c6942a0efa119000 input=22f07ee9001bbf0f]*/ { if (_ungetch(char_value) == EOF) return PyErr_SetFromErrno(PyExc_IOError); @@ -363,8 +362,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_ungetwch_impl(PyModuleDef *module, int unicode_char) -/*[clinic end generated code: output=1ee7674710322bd1 input=83ec0492be04d564]*/ +msvcrt_ungetwch_impl(PyObject *module, int unicode_char) +/*[clinic end generated code: output=e63af05438b8ba3d input=83ec0492be04d564]*/ { if (_ungetwch(unicode_char) == WEOF) return PyErr_SetFromErrno(PyExc_IOError); @@ -385,8 +384,8 @@ [clinic start generated code]*/ static long -msvcrt_CrtSetReportFile_impl(PyModuleDef *module, int type, int file) -/*[clinic end generated code: output=8c3644fb2edfa808 input=bb8f721a604fcc45]*/ +msvcrt_CrtSetReportFile_impl(PyObject *module, int type, int file) +/*[clinic end generated code: output=df291c7fe032eb68 input=bb8f721a604fcc45]*/ { return (long)_CrtSetReportFile(type, (_HFILE)file); } @@ -404,8 +403,8 @@ [clinic start generated code]*/ static long -msvcrt_CrtSetReportMode_impl(PyModuleDef *module, int type, int mode) -/*[clinic end generated code: output=b407fbf8716a52b9 input=9319d29b4319426b]*/ +msvcrt_CrtSetReportMode_impl(PyObject *module, int type, int mode) +/*[clinic end generated code: output=b2863761523de317 input=9319d29b4319426b]*/ { int res; @@ -427,8 +426,8 @@ [clinic start generated code]*/ static long -msvcrt_set_error_mode_impl(PyModuleDef *module, int mode) -/*[clinic end generated code: output=62148adffa90867d input=046fca59c0f20872]*/ +msvcrt_set_error_mode_impl(PyObject *module, int mode) +/*[clinic end generated code: output=ac4a09040d8ac4e3 input=046fca59c0f20872]*/ { return _set_error_mode(mode); } @@ -444,8 +443,8 @@ [clinic start generated code]*/ static PyObject * -msvcrt_SetErrorMode_impl(PyModuleDef *module, unsigned int mode) -/*[clinic end generated code: output=544c60b085be79c6 input=d8b167258d32d907]*/ +msvcrt_SetErrorMode_impl(PyObject *module, unsigned int mode) +/*[clinic end generated code: output=01d529293f00da8f input=d8b167258d32d907]*/ { unsigned int res; diff --git a/PC/winreg.c b/PC/winreg.c --- a/PC/winreg.c +++ b/PC/winreg.c @@ -798,8 +798,8 @@ [clinic start generated code]*/ static PyObject * -winreg_CloseKey(PyModuleDef *module, PyObject *hkey) -/*[clinic end generated code: output=d96f73439403a064 input=5b1aac65ba5127ad]*/ +winreg_CloseKey(PyObject *module, PyObject *hkey) +/*[clinic end generated code: output=a4fa537019a80d15 input=5b1aac65ba5127ad]*/ { if (!PyHKEY_Close(hkey)) return NULL; @@ -823,9 +823,9 @@ [clinic start generated code]*/ static HKEY -winreg_ConnectRegistry_impl(PyModuleDef *module, Py_UNICODE *computer_name, +winreg_ConnectRegistry_impl(PyObject *module, Py_UNICODE *computer_name, HKEY key) -/*[clinic end generated code: output=5c52f6f7ba6e7b46 input=5f98a891a347e68e]*/ +/*[clinic end generated code: output=5ab79d02aa3167b4 input=5f98a891a347e68e]*/ { HKEY retKey; long rc; @@ -860,8 +860,8 @@ [clinic start generated code]*/ static HKEY -winreg_CreateKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=cd6843f30a73fc0e input=3cdd1622488acea2]*/ +winreg_CreateKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=9c81d4095527c927 input=3cdd1622488acea2]*/ { HKEY retKey; long rc; @@ -899,9 +899,9 @@ [clinic start generated code]*/ static HKEY -winreg_CreateKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_CreateKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=db835d5be84e72b2 input=42c2b03f98406b66]*/ +/*[clinic end generated code: output=b9fce6dc5c4e39b1 input=42c2b03f98406b66]*/ { HKEY retKey; long rc; @@ -934,8 +934,8 @@ [clinic start generated code]*/ static PyObject * -winreg_DeleteKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=875c8917dacbc99d input=b31d225b935e4211]*/ +winreg_DeleteKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=7734b1e431991ae4 input=b31d225b935e4211]*/ { long rc; rc = RegDeleteKeyW(key, sub_key ); @@ -969,9 +969,9 @@ [clinic start generated code]*/ static PyObject * -winreg_DeleteKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_DeleteKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, REGSAM access, int reserved) -/*[clinic end generated code: output=0362a0ac6502379f input=711d9d89e7ecbed7]*/ +/*[clinic end generated code: output=01378d86ad3eb936 input=711d9d89e7ecbed7]*/ { HMODULE hMod; typedef LONG (WINAPI *RDKEFunc)(HKEY, const wchar_t*, REGSAM, int); @@ -1011,8 +1011,8 @@ [clinic start generated code]*/ static PyObject * -winreg_DeleteValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value) -/*[clinic end generated code: output=308550b8cdcfd8e1 input=a78d3407a4197b21]*/ +winreg_DeleteValue_impl(PyObject *module, HKEY key, Py_UNICODE *value) +/*[clinic end generated code: output=67e7e9a514f84951 input=a78d3407a4197b21]*/ { long rc; Py_BEGIN_ALLOW_THREADS @@ -1041,8 +1041,8 @@ [clinic start generated code]*/ static PyObject * -winreg_EnumKey_impl(PyModuleDef *module, HKEY key, int index) -/*[clinic end generated code: output=58074ffabbc67896 input=fad9a7c00ab0e04b]*/ +winreg_EnumKey_impl(PyObject *module, HKEY key, int index) +/*[clinic end generated code: output=25a6ec52cd147bc4 input=fad9a7c00ab0e04b]*/ { long rc; PyObject *retStr; @@ -1092,8 +1092,8 @@ [clinic start generated code]*/ static PyObject * -winreg_EnumValue_impl(PyModuleDef *module, HKEY key, int index) -/*[clinic end generated code: output=4570367ebaf0e979 input=4414f47a6fb238b5]*/ +winreg_EnumValue_impl(PyObject *module, HKEY key, int index) +/*[clinic end generated code: output=d363b5a06f8789ac input=4414f47a6fb238b5]*/ { long rc; wchar_t *retValueBuf; @@ -1179,8 +1179,8 @@ [clinic start generated code]*/ static PyObject * -winreg_ExpandEnvironmentStrings_impl(PyModuleDef *module, Py_UNICODE *string) -/*[clinic end generated code: output=4cb6914065a8663c input=b2a9714d2b751aa6]*/ +winreg_ExpandEnvironmentStrings_impl(PyObject *module, Py_UNICODE *string) +/*[clinic end generated code: output=cba46ac293a8af1a input=b2a9714d2b751aa6]*/ { wchar_t *retValue = NULL; DWORD retValueSize; @@ -1229,8 +1229,8 @@ [clinic start generated code]*/ static PyObject * -winreg_FlushKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=b9a7a6e405466420 input=f57457c12297d82f]*/ +winreg_FlushKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=e6fc230d4c5dc049 input=f57457c12297d82f]*/ { long rc; Py_BEGIN_ALLOW_THREADS @@ -1272,9 +1272,9 @@ [clinic start generated code]*/ static PyObject * -winreg_LoadKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_LoadKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, Py_UNICODE *file_name) -/*[clinic end generated code: output=b8b700e39c695b90 input=e3b5b45ade311582]*/ +/*[clinic end generated code: output=87344005c5905cde input=e3b5b45ade311582]*/ { long rc; @@ -1306,9 +1306,9 @@ [clinic start generated code]*/ static HKEY -winreg_OpenKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKey_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=79818ea356490a55 input=098505ac36a9ae28]*/ +/*[clinic end generated code: output=a905f1b947f3ce85 input=098505ac36a9ae28]*/ { HKEY retKey; long rc; @@ -1333,9 +1333,9 @@ [clinic start generated code]*/ static HKEY -winreg_OpenKeyEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_OpenKeyEx_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, int reserved, REGSAM access) -/*[clinic end generated code: output=2dd9f29e84ea2dbc input=c6c4972af8622959]*/ +/*[clinic end generated code: output=226042593b37e940 input=c6c4972af8622959]*/ { return winreg_OpenKey_impl(module, key, sub_key, reserved, access); } @@ -1357,8 +1357,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryInfoKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=ae885222fe966a34 input=c3593802390cde1f]*/ +winreg_QueryInfoKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=dc657b8356a4f438 input=c3593802390cde1f]*/ { long rc; DWORD nSubKeys, nValues; @@ -1403,8 +1403,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key) -/*[clinic end generated code: output=f91cb6f623c3b65a input=41cafbbf423b21d6]*/ +winreg_QueryValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key) +/*[clinic end generated code: output=2bb8d1e02c10d0b6 input=41cafbbf423b21d6]*/ { long rc; PyObject *retStr; @@ -1470,8 +1470,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *name) -/*[clinic end generated code: output=a4b07f7807194f23 input=cf366cada4836891]*/ +winreg_QueryValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *name) +/*[clinic end generated code: output=5b4fa3e33d6d3e8f input=cf366cada4836891]*/ { long rc; BYTE *retBuf, *tmp; @@ -1543,8 +1543,8 @@ [clinic start generated code]*/ static PyObject * -winreg_SaveKey_impl(PyModuleDef *module, HKEY key, Py_UNICODE *file_name) -/*[clinic end generated code: output=33109b96bfabef8f input=da735241f91ac7a2]*/ +winreg_SaveKey_impl(PyObject *module, HKEY key, Py_UNICODE *file_name) +/*[clinic end generated code: output=1dda1502bd4c30d8 input=da735241f91ac7a2]*/ { LPSECURITY_ATTRIBUTES pSA = NULL; @@ -1589,10 +1589,10 @@ [clinic start generated code]*/ static PyObject * -winreg_SetValue_impl(PyModuleDef *module, HKEY key, Py_UNICODE *sub_key, +winreg_SetValue_impl(PyObject *module, HKEY key, Py_UNICODE *sub_key, DWORD type, Py_UNICODE *value, Py_ssize_clean_t value_length) -/*[clinic end generated code: output=3c9c7c2769e8f953 input=2cd2adab79339c53]*/ +/*[clinic end generated code: output=1e31931174820631 input=2cd2adab79339c53]*/ { long rc; @@ -1655,9 +1655,9 @@ [clinic start generated code]*/ static PyObject * -winreg_SetValueEx_impl(PyModuleDef *module, HKEY key, Py_UNICODE *value_name, +winreg_SetValueEx_impl(PyObject *module, HKEY key, Py_UNICODE *value_name, PyObject *reserved, DWORD type, PyObject *value) -/*[clinic end generated code: output=ea092a935c361582 input=900a9e3990bfb196]*/ +/*[clinic end generated code: output=c88c8426b6c00ec7 input=900a9e3990bfb196]*/ { BYTE *data; DWORD len; @@ -1698,8 +1698,8 @@ [clinic start generated code]*/ static PyObject * -winreg_DisableReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=50fe6e2604324cdd input=a6c9e5ca5410193c]*/ +winreg_DisableReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=830cce504cc764b4 input=a6c9e5ca5410193c]*/ { HMODULE hMod; typedef LONG (WINAPI *RDRKFunc)(HKEY); @@ -1741,8 +1741,8 @@ [clinic start generated code]*/ static PyObject * -winreg_EnableReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=e3f23edb414f24a4 input=7748abbacd1e166a]*/ +winreg_EnableReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=86fa1385fdd9ce57 input=7748abbacd1e166a]*/ { HMODULE hMod; typedef LONG (WINAPI *RERKFunc)(HKEY); @@ -1782,8 +1782,8 @@ [clinic start generated code]*/ static PyObject * -winreg_QueryReflectionKey_impl(PyModuleDef *module, HKEY key) -/*[clinic end generated code: output=2a49c564ca162e50 input=9f325eacb5a65d88]*/ +winreg_QueryReflectionKey_impl(PyObject *module, HKEY key) +/*[clinic end generated code: output=4e774af288c3ebb9 input=9f325eacb5a65d88]*/ { HMODULE hMod; typedef LONG (WINAPI *RQRKFunc)(HKEY, BOOL *); diff --git a/PC/winsound.c b/PC/winsound.c --- a/PC/winsound.c +++ b/PC/winsound.c @@ -74,8 +74,8 @@ [clinic start generated code]*/ static PyObject * -winsound_PlaySound_impl(PyModuleDef *module, Py_UNICODE *sound, int flags) -/*[clinic end generated code: output=614273784bf59e5c input=3411b1b7c1f36d93]*/ +winsound_PlaySound_impl(PyObject *module, Py_UNICODE *sound, int flags) +/*[clinic end generated code: output=ec24b3a2b4368378 input=3411b1b7c1f36d93]*/ { int ok; @@ -111,8 +111,8 @@ [clinic start generated code]*/ static PyObject * -winsound_Beep_impl(PyModuleDef *module, int frequency, int duration) -/*[clinic end generated code: output=c75f282035a872bd input=628a99d2ddf73798]*/ +winsound_Beep_impl(PyObject *module, int frequency, int duration) +/*[clinic end generated code: output=f32382e52ee9b2fb input=628a99d2ddf73798]*/ { BOOL ok; @@ -145,8 +145,8 @@ [clinic start generated code]*/ static PyObject * -winsound_MessageBeep_impl(PyModuleDef *module, int x) -/*[clinic end generated code: output=92aa6a822bdc66ad input=a776c8a85c9853f6]*/ +winsound_MessageBeep_impl(PyObject *module, int x) +/*[clinic end generated code: output=1ad89e4d8d30a957 input=a776c8a85c9853f6]*/ { MessageBeep(x); Py_RETURN_NONE; diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -242,8 +242,8 @@ [clinic start generated code]*/ static PyObject * -builtin_abs(PyModuleDef *module, PyObject *x) -/*[clinic end generated code: output=6833047c493ecea2 input=bed4ca14e29c20d1]*/ +builtin_abs(PyObject *module, PyObject *x) +/*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/ { return PyNumber_Absolute(x); } @@ -260,8 +260,8 @@ [clinic start generated code]*/ static PyObject * -builtin_all(PyModuleDef *module, PyObject *iterable) -/*[clinic end generated code: output=089e6d1b7bde27b1 input=1a7c5d1bc3438a21]*/ +builtin_all(PyObject *module, PyObject *iterable) +/*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); @@ -309,8 +309,8 @@ [clinic start generated code]*/ static PyObject * -builtin_any(PyModuleDef *module, PyObject *iterable) -/*[clinic end generated code: output=1be994b2c2307492 input=41d7451c23384f24]*/ +builtin_any(PyObject *module, PyObject *iterable) +/*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/ { PyObject *it, *item; PyObject *(*iternext)(PyObject *); @@ -361,8 +361,8 @@ [clinic start generated code]*/ static PyObject * -builtin_ascii(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=d4e862c48af2a933 input=4c62732e1b3a3cc9]*/ +builtin_ascii(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/ { return PyObject_ASCII(obj); } @@ -381,8 +381,8 @@ [clinic start generated code]*/ static PyObject * -builtin_bin(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=25ee26c6cf3bbb54 input=53f8a0264bacaf90]*/ +builtin_bin(PyObject *module, PyObject *number) +/*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/ { return PyNumber_ToBase(number, 2); } @@ -401,8 +401,8 @@ [clinic start generated code]*/ static PyObject * -builtin_callable(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=f4df2ce92364b656 input=1423bab99cc41f58]*/ +builtin_callable(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/ { return PyBool_FromLong((long)PyCallable_Check(obj)); } @@ -574,9 +574,8 @@ [clinic start generated code]*/ static PyObject * -builtin_format_impl(PyModuleDef *module, PyObject *value, - PyObject *format_spec) -/*[clinic end generated code: output=4341fd78a5f01764 input=6325e751a1b29b86]*/ +builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec) +/*[clinic end generated code: output=2f40bdfa4954b077 input=6325e751a1b29b86]*/ { return PyObject_Format(value, format_spec); } @@ -591,8 +590,8 @@ [clinic start generated code]*/ static PyObject * -builtin_chr_impl(PyModuleDef *module, int i) -/*[clinic end generated code: output=67fe4d87e690f373 input=3f604ef45a70750d]*/ +builtin_chr_impl(PyObject *module, int i) +/*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/ { return PyUnicode_FromOrdinal(i); } @@ -672,10 +671,10 @@ [clinic start generated code]*/ static PyObject * -builtin_compile_impl(PyModuleDef *module, PyObject *source, - PyObject *filename, const char *mode, int flags, - int dont_inherit, int optimize) -/*[clinic end generated code: output=31881762c1bb90c4 input=9d53e8cfb3c86414]*/ +builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, + const char *mode, int flags, int dont_inherit, + int optimize) +/*[clinic end generated code: output=1fa176e33452bb63 input=9d53e8cfb3c86414]*/ { PyObject *source_copy; const char *str; @@ -800,8 +799,8 @@ [clinic start generated code]*/ static PyObject * -builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y) -/*[clinic end generated code: output=9ad0076120ebf9ac input=175ad9c84ff41a85]*/ +builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y) +/*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/ { return PyNumber_Divmod(x, y); } @@ -825,9 +824,9 @@ [clinic start generated code]*/ static PyObject * -builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals) -/*[clinic end generated code: output=7284501fb7b4d666 input=11ee718a8640e527]*/ +/*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/ { PyObject *result, *source_copy; const char *str; @@ -908,9 +907,9 @@ [clinic start generated code]*/ static PyObject * -builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals) -/*[clinic end generated code: output=83d574ef9d5d0b46 input=01ca3e1c01692829]*/ +/*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/ { PyObject *v; @@ -1024,8 +1023,8 @@ [clinic start generated code]*/ static PyObject * -builtin_globals_impl(PyModuleDef *module) -/*[clinic end generated code: output=4958645e96dd8138 input=9327576f92bb48ba]*/ +builtin_globals_impl(PyObject *module) +/*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/ { PyObject *d; @@ -1048,8 +1047,8 @@ [clinic start generated code]*/ static PyObject * -builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) -/*[clinic end generated code: output=81154fdd63634696 input=0faec9787d979542]*/ +builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/ { PyObject *v; @@ -1325,9 +1324,9 @@ [clinic start generated code]*/ static PyObject * -builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, +builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name, PyObject *value) -/*[clinic end generated code: output=d881c655c0f7e34f input=bd2b7ca6875a1899]*/ +/*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/ { if (PyObject_SetAttr(obj, name, value) != 0) return NULL; @@ -1349,8 +1348,8 @@ [clinic start generated code]*/ static PyObject * -builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name) -/*[clinic end generated code: output=ef653e698a0b4187 input=db16685d6b4b9410]*/ +builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name) +/*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/ { if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0) return NULL; @@ -1372,8 +1371,8 @@ [clinic start generated code]*/ static PyObject * -builtin_hash(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=1f32ff154c1f751a input=58c48be822bf9c54]*/ +builtin_hash(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/ { Py_hash_t x; @@ -1397,8 +1396,8 @@ [clinic start generated code]*/ static PyObject * -builtin_hex(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=618489ce3cbc5858 input=e645aff5fc7d540e]*/ +builtin_hex(PyObject *module, PyObject *number) +/*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/ { return PyNumber_ToBase(number, 16); } @@ -1441,8 +1440,8 @@ [clinic start generated code]*/ static PyObject * -builtin_len(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=8e5837b6f81d915b input=bc55598da9e9c9b5]*/ +builtin_len(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/ { Py_ssize_t res; @@ -1464,8 +1463,8 @@ [clinic start generated code]*/ static PyObject * -builtin_locals_impl(PyModuleDef *module) -/*[clinic end generated code: output=8b5a41f12e19d13a input=7874018d478d5c4b]*/ +builtin_locals_impl(PyObject *module) +/*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/ { PyObject *d; @@ -1623,8 +1622,8 @@ [clinic start generated code]*/ static PyObject * -builtin_oct(PyModuleDef *module, PyObject *number) -/*[clinic end generated code: output=18f701bc6d8f804a input=ad6b274af4016c72]*/ +builtin_oct(PyObject *module, PyObject *number) +/*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/ { return PyNumber_ToBase(number, 8); } @@ -1640,8 +1639,8 @@ [clinic start generated code]*/ static PyObject * -builtin_ord(PyModuleDef *module, PyObject *c) -/*[clinic end generated code: output=04fd27272d9462f6 input=3064e5d6203ad012]*/ +builtin_ord(PyObject *module, PyObject *c) +/*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/ { long ord; Py_ssize_t size; @@ -1700,8 +1699,8 @@ [clinic start generated code]*/ static PyObject * -builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z) -/*[clinic end generated code: output=1fba268adba9b45f input=653d57d38d41fc07]*/ +builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z) +/*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/ { return PyNumber_Power(x, y, z); } @@ -1819,8 +1818,8 @@ [clinic start generated code]*/ static PyObject * -builtin_input_impl(PyModuleDef *module, PyObject *prompt) -/*[clinic end generated code: output=b77731f59e1515c4 input=5e8bb70c2908fe3c]*/ +builtin_input_impl(PyObject *module, PyObject *prompt) +/*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/ { PyObject *fin = _PySys_GetObjectId(&PyId_stdin); PyObject *fout = _PySys_GetObjectId(&PyId_stdout); @@ -2005,8 +2004,8 @@ [clinic start generated code]*/ static PyObject * -builtin_repr(PyModuleDef *module, PyObject *obj) -/*[clinic end generated code: output=dc41784fa4341834 input=1c9e6d66d3e3be04]*/ +builtin_repr(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/ { return PyObject_Repr(obj); } @@ -2175,8 +2174,8 @@ [clinic start generated code]*/ static PyObject * -builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start) -/*[clinic end generated code: output=33655b248b21d581 input=3b5b7a9d7611c73a]*/ +builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start) +/*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/ { PyObject *result = start; PyObject *temp, *item, *iter; @@ -2352,9 +2351,9 @@ [clinic start generated code]*/ static PyObject * -builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, +builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple) -/*[clinic end generated code: output=f960b7c12dbbeda0 input=ffa743db1daf7549]*/ +/*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/ { int retval; @@ -2380,9 +2379,9 @@ [clinic start generated code]*/ static PyObject * -builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, +builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple) -/*[clinic end generated code: output=8b012a151940bbf2 input=af5f35e9ceaddaf6]*/ +/*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/ { int retval; diff --git a/Python/clinic/bltinmodule.c.h b/Python/clinic/bltinmodule.c.h --- a/Python/clinic/bltinmodule.c.h +++ b/Python/clinic/bltinmodule.c.h @@ -83,11 +83,10 @@ {"format", (PyCFunction)builtin_format, METH_VARARGS, builtin_format__doc__}, static PyObject * -builtin_format_impl(PyModuleDef *module, PyObject *value, - PyObject *format_spec); +builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec); static PyObject * -builtin_format(PyModuleDef *module, PyObject *args) +builtin_format(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *value; @@ -113,10 +112,10 @@ {"chr", (PyCFunction)builtin_chr, METH_O, builtin_chr__doc__}, static PyObject * -builtin_chr_impl(PyModuleDef *module, int i); +builtin_chr_impl(PyObject *module, int i); static PyObject * -builtin_chr(PyModuleDef *module, PyObject *arg) +builtin_chr(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; int i; @@ -152,12 +151,12 @@ {"compile", (PyCFunction)builtin_compile, METH_VARARGS|METH_KEYWORDS, builtin_compile__doc__}, static PyObject * -builtin_compile_impl(PyModuleDef *module, PyObject *source, - PyObject *filename, const char *mode, int flags, - int dont_inherit, int optimize); +builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename, + const char *mode, int flags, int dont_inherit, + int optimize); static PyObject * -builtin_compile(PyModuleDef *module, PyObject *args, PyObject *kwargs) +builtin_compile(PyObject *module, PyObject *args, PyObject *kwargs) { PyObject *return_value = NULL; static char *_keywords[] = {"source", "filename", "mode", "flags", "dont_inherit", "optimize", NULL}; @@ -188,10 +187,10 @@ {"divmod", (PyCFunction)builtin_divmod, METH_VARARGS, builtin_divmod__doc__}, static PyObject * -builtin_divmod_impl(PyModuleDef *module, PyObject *x, PyObject *y); +builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y); static PyObject * -builtin_divmod(PyModuleDef *module, PyObject *args) +builtin_divmod(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *x; @@ -224,11 +223,11 @@ {"eval", (PyCFunction)builtin_eval, METH_VARARGS, builtin_eval__doc__}, static PyObject * -builtin_eval_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_eval(PyModuleDef *module, PyObject *args) +builtin_eval(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *source; @@ -262,11 +261,11 @@ {"exec", (PyCFunction)builtin_exec, METH_VARARGS, builtin_exec__doc__}, static PyObject * -builtin_exec_impl(PyModuleDef *module, PyObject *source, PyObject *globals, +builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals, PyObject *locals); static PyObject * -builtin_exec(PyModuleDef *module, PyObject *args) +builtin_exec(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *source; @@ -297,10 +296,10 @@ {"globals", (PyCFunction)builtin_globals, METH_NOARGS, builtin_globals__doc__}, static PyObject * -builtin_globals_impl(PyModuleDef *module); +builtin_globals_impl(PyObject *module); static PyObject * -builtin_globals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +builtin_globals(PyObject *module, PyObject *Py_UNUSED(ignored)) { return builtin_globals_impl(module); } @@ -317,10 +316,10 @@ {"hasattr", (PyCFunction)builtin_hasattr, METH_VARARGS, builtin_hasattr__doc__}, static PyObject * -builtin_hasattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); +builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_hasattr(PyModuleDef *module, PyObject *args) +builtin_hasattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -361,11 +360,11 @@ {"setattr", (PyCFunction)builtin_setattr, METH_VARARGS, builtin_setattr__doc__}, static PyObject * -builtin_setattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name, +builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name, PyObject *value); static PyObject * -builtin_setattr(PyModuleDef *module, PyObject *args) +builtin_setattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -395,10 +394,10 @@ {"delattr", (PyCFunction)builtin_delattr, METH_VARARGS, builtin_delattr__doc__}, static PyObject * -builtin_delattr_impl(PyModuleDef *module, PyObject *obj, PyObject *name); +builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name); static PyObject * -builtin_delattr(PyModuleDef *module, PyObject *args) +builtin_delattr(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -462,10 +461,10 @@ {"locals", (PyCFunction)builtin_locals, METH_NOARGS, builtin_locals__doc__}, static PyObject * -builtin_locals_impl(PyModuleDef *module); +builtin_locals_impl(PyObject *module); static PyObject * -builtin_locals(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +builtin_locals(PyObject *module, PyObject *Py_UNUSED(ignored)) { return builtin_locals_impl(module); } @@ -504,10 +503,10 @@ {"pow", (PyCFunction)builtin_pow, METH_VARARGS, builtin_pow__doc__}, static PyObject * -builtin_pow_impl(PyModuleDef *module, PyObject *x, PyObject *y, PyObject *z); +builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z); static PyObject * -builtin_pow(PyModuleDef *module, PyObject *args) +builtin_pow(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *x; @@ -541,10 +540,10 @@ {"input", (PyCFunction)builtin_input, METH_VARARGS, builtin_input__doc__}, static PyObject * -builtin_input_impl(PyModuleDef *module, PyObject *prompt); +builtin_input_impl(PyObject *module, PyObject *prompt); static PyObject * -builtin_input(PyModuleDef *module, PyObject *args) +builtin_input(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *prompt = NULL; @@ -585,10 +584,10 @@ {"sum", (PyCFunction)builtin_sum, METH_VARARGS, builtin_sum__doc__}, static PyObject * -builtin_sum_impl(PyModuleDef *module, PyObject *iterable, PyObject *start); +builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start); static PyObject * -builtin_sum(PyModuleDef *module, PyObject *args) +builtin_sum(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *iterable; @@ -619,11 +618,11 @@ {"isinstance", (PyCFunction)builtin_isinstance, METH_VARARGS, builtin_isinstance__doc__}, static PyObject * -builtin_isinstance_impl(PyModuleDef *module, PyObject *obj, +builtin_isinstance_impl(PyObject *module, PyObject *obj, PyObject *class_or_tuple); static PyObject * -builtin_isinstance(PyModuleDef *module, PyObject *args) +builtin_isinstance(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *obj; @@ -654,11 +653,11 @@ {"issubclass", (PyCFunction)builtin_issubclass, METH_VARARGS, builtin_issubclass__doc__}, static PyObject * -builtin_issubclass_impl(PyModuleDef *module, PyObject *cls, +builtin_issubclass_impl(PyObject *module, PyObject *cls, PyObject *class_or_tuple); static PyObject * -builtin_issubclass(PyModuleDef *module, PyObject *args) +builtin_issubclass(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *cls; @@ -674,4 +673,4 @@ exit: return return_value; } -/*[clinic end generated code: output=940f25126caf8166 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=6ab37e6c6d2e7b19 input=a9049054013a1b77]*/ diff --git a/Python/clinic/import.c.h b/Python/clinic/import.c.h --- a/Python/clinic/import.c.h +++ b/Python/clinic/import.c.h @@ -14,10 +14,10 @@ {"lock_held", (PyCFunction)_imp_lock_held, METH_NOARGS, _imp_lock_held__doc__}, static PyObject * -_imp_lock_held_impl(PyModuleDef *module); +_imp_lock_held_impl(PyObject *module); static PyObject * -_imp_lock_held(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_lock_held(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_lock_held_impl(module); } @@ -35,10 +35,10 @@ {"acquire_lock", (PyCFunction)_imp_acquire_lock, METH_NOARGS, _imp_acquire_lock__doc__}, static PyObject * -_imp_acquire_lock_impl(PyModuleDef *module); +_imp_acquire_lock_impl(PyObject *module); static PyObject * -_imp_acquire_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_acquire_lock(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_acquire_lock_impl(module); } @@ -55,10 +55,10 @@ {"release_lock", (PyCFunction)_imp_release_lock, METH_NOARGS, _imp_release_lock__doc__}, static PyObject * -_imp_release_lock_impl(PyModuleDef *module); +_imp_release_lock_impl(PyObject *module); static PyObject * -_imp_release_lock(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_release_lock(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_release_lock_impl(module); } @@ -78,11 +78,11 @@ {"_fix_co_filename", (PyCFunction)_imp__fix_co_filename, METH_VARARGS, _imp__fix_co_filename__doc__}, static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, +_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, PyObject *path); static PyObject * -_imp__fix_co_filename(PyModuleDef *module, PyObject *args) +_imp__fix_co_filename(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyCodeObject *code; @@ -117,10 +117,10 @@ {"extension_suffixes", (PyCFunction)_imp_extension_suffixes, METH_NOARGS, _imp_extension_suffixes__doc__}, static PyObject * -_imp_extension_suffixes_impl(PyModuleDef *module); +_imp_extension_suffixes_impl(PyObject *module); static PyObject * -_imp_extension_suffixes(PyModuleDef *module, PyObject *Py_UNUSED(ignored)) +_imp_extension_suffixes(PyObject *module, PyObject *Py_UNUSED(ignored)) { return _imp_extension_suffixes_impl(module); } @@ -135,10 +135,10 @@ {"init_frozen", (PyCFunction)_imp_init_frozen, METH_O, _imp_init_frozen__doc__}, static PyObject * -_imp_init_frozen_impl(PyModuleDef *module, PyObject *name); +_imp_init_frozen_impl(PyObject *module, PyObject *name); static PyObject * -_imp_init_frozen(PyModuleDef *module, PyObject *arg) +_imp_init_frozen(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -162,10 +162,10 @@ {"get_frozen_object", (PyCFunction)_imp_get_frozen_object, METH_O, _imp_get_frozen_object__doc__}, static PyObject * -_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name); +_imp_get_frozen_object_impl(PyObject *module, PyObject *name); static PyObject * -_imp_get_frozen_object(PyModuleDef *module, PyObject *arg) +_imp_get_frozen_object(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -189,10 +189,10 @@ {"is_frozen_package", (PyCFunction)_imp_is_frozen_package, METH_O, _imp_is_frozen_package__doc__}, static PyObject * -_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name); +_imp_is_frozen_package_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_frozen_package(PyModuleDef *module, PyObject *arg) +_imp_is_frozen_package(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -216,10 +216,10 @@ {"is_builtin", (PyCFunction)_imp_is_builtin, METH_O, _imp_is_builtin__doc__}, static PyObject * -_imp_is_builtin_impl(PyModuleDef *module, PyObject *name); +_imp_is_builtin_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_builtin(PyModuleDef *module, PyObject *arg) +_imp_is_builtin(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -243,10 +243,10 @@ {"is_frozen", (PyCFunction)_imp_is_frozen, METH_O, _imp_is_frozen__doc__}, static PyObject * -_imp_is_frozen_impl(PyModuleDef *module, PyObject *name); +_imp_is_frozen_impl(PyObject *module, PyObject *name); static PyObject * -_imp_is_frozen(PyModuleDef *module, PyObject *arg) +_imp_is_frozen(PyObject *module, PyObject *arg) { PyObject *return_value = NULL; PyObject *name; @@ -272,10 +272,10 @@ {"create_dynamic", (PyCFunction)_imp_create_dynamic, METH_VARARGS, _imp_create_dynamic__doc__}, static PyObject * -_imp_create_dynamic_impl(PyModuleDef *module, PyObject *spec, PyObject *file); +_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file); static PyObject * -_imp_create_dynamic(PyModuleDef *module, PyObject *args) +_imp_create_dynamic(PyObject *module, PyObject *args) { PyObject *return_value = NULL; PyObject *spec; @@ -306,10 +306,10 @@ {"exec_dynamic", (PyCFunction)_imp_exec_dynamic, METH_O, _imp_exec_dynamic__doc__}, static int -_imp_exec_dynamic_impl(PyModuleDef *module, PyObject *mod); +_imp_exec_dynamic_impl(PyObject *module, PyObject *mod); static PyObject * -_imp_exec_dynamic(PyModuleDef *module, PyObject *mod) +_imp_exec_dynamic(PyObject *module, PyObject *mod) { PyObject *return_value = NULL; int _return_value; @@ -336,10 +336,10 @@ {"exec_builtin", (PyCFunction)_imp_exec_builtin, METH_O, _imp_exec_builtin__doc__}, static int -_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod); +_imp_exec_builtin_impl(PyObject *module, PyObject *mod); static PyObject * -_imp_exec_builtin(PyModuleDef *module, PyObject *mod) +_imp_exec_builtin(PyObject *module, PyObject *mod) { PyObject *return_value = NULL; int _return_value; @@ -361,4 +361,4 @@ #ifndef _IMP_EXEC_DYNAMIC_METHODDEF #define _IMP_EXEC_DYNAMIC_METHODDEF #endif /* !defined(_IMP_EXEC_DYNAMIC_METHODDEF) */ -/*[clinic end generated code: output=22a7225925755674 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=d24d7f73702a907f input=a9049054013a1b77]*/ diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -234,8 +234,8 @@ [clinic start generated code]*/ static PyObject * -_imp_lock_held_impl(PyModuleDef *module) -/*[clinic end generated code: output=d7a8cc3a5169081a input=9b088f9b217d9bdf]*/ +_imp_lock_held_impl(PyObject *module) +/*[clinic end generated code: output=8b89384b5e1963fc input=9b088f9b217d9bdf]*/ { #ifdef WITH_THREAD return PyBool_FromLong(import_lock_thread != -1); @@ -254,8 +254,8 @@ [clinic start generated code]*/ static PyObject * -_imp_acquire_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=cc143b1d16422cae input=4a2d4381866d5fdc]*/ +_imp_acquire_lock_impl(PyObject *module) +/*[clinic end generated code: output=1aff58cb0ee1b026 input=4a2d4381866d5fdc]*/ { #ifdef WITH_THREAD _PyImport_AcquireLock(); @@ -273,8 +273,8 @@ [clinic start generated code]*/ static PyObject * -_imp_release_lock_impl(PyModuleDef *module) -/*[clinic end generated code: output=74d28e38ebe2b224 input=934fb11516dd778b]*/ +_imp_release_lock_impl(PyObject *module) +/*[clinic end generated code: output=7faab6d0be178b0a input=934fb11516dd778b]*/ { #ifdef WITH_THREAD if (_PyImport_ReleaseLock() < 0) { @@ -916,9 +916,9 @@ [clinic start generated code]*/ static PyObject * -_imp__fix_co_filename_impl(PyModuleDef *module, PyCodeObject *code, +_imp__fix_co_filename_impl(PyObject *module, PyCodeObject *code, PyObject *path) -/*[clinic end generated code: output=f4db56aac0a1327f input=895ba50e78b82f05]*/ +/*[clinic end generated code: output=1d002f100235587d input=895ba50e78b82f05]*/ { update_compiled_module(code, path); @@ -1030,8 +1030,8 @@ [clinic start generated code]*/ static PyObject * -_imp_create_builtin(PyModuleDef *module, PyObject *spec) -/*[clinic end generated code: output=5038f467617226bd input=37f966f890384e47]*/ +_imp_create_builtin(PyObject *module, PyObject *spec) +/*[clinic end generated code: output=ace7ff22271e6f39 input=37f966f890384e47]*/ { struct _inittab *p; PyObject *name; @@ -1846,8 +1846,8 @@ [clinic start generated code]*/ static PyObject * -_imp_extension_suffixes_impl(PyModuleDef *module) -/*[clinic end generated code: output=d44c1566ef362229 input=ecdeeecfcb6f839e]*/ +_imp_extension_suffixes_impl(PyObject *module) +/*[clinic end generated code: output=0bf346e25a8f0cd3 input=ecdeeecfcb6f839e]*/ { PyObject *list; const char *suffix; @@ -1885,8 +1885,8 @@ [clinic start generated code]*/ static PyObject * -_imp_init_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=a9de493bdd711878 input=13019adfc04f3fb3]*/ +_imp_init_frozen_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=fc0511ed869fd69c input=13019adfc04f3fb3]*/ { int ret; PyObject *m; @@ -1913,8 +1913,8 @@ [clinic start generated code]*/ static PyObject * -_imp_get_frozen_object_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=3114c970a47f2e3c input=ed689bc05358fdbd]*/ +_imp_get_frozen_object_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=2568cc5b7aa0da63 input=ed689bc05358fdbd]*/ { return get_frozen_object(name); } @@ -1929,8 +1929,8 @@ [clinic start generated code]*/ static PyObject * -_imp_is_frozen_package_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=3e4cab802b56d649 input=81b6cdecd080fbb8]*/ +_imp_is_frozen_package_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=e70cbdb45784a1c9 input=81b6cdecd080fbb8]*/ { return is_frozen_package(name); } @@ -1945,8 +1945,8 @@ [clinic start generated code]*/ static PyObject * -_imp_is_builtin_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=2deec9cac6fb9a7e input=86befdac021dd1c7]*/ +_imp_is_builtin_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=3bfd1162e2d3be82 input=86befdac021dd1c7]*/ { return PyLong_FromLong(is_builtin(name)); } @@ -1961,8 +1961,8 @@ [clinic start generated code]*/ static PyObject * -_imp_is_frozen_impl(PyModuleDef *module, PyObject *name) -/*[clinic end generated code: output=7de8e260c8e36aed input=7301dbca1897d66b]*/ +_imp_is_frozen_impl(PyObject *module, PyObject *name) +/*[clinic end generated code: output=01f408f5ec0f2577 input=7301dbca1897d66b]*/ { const struct _frozen *p; @@ -2011,8 +2011,8 @@ [clinic start generated code]*/ static PyObject * -_imp_create_dynamic_impl(PyModuleDef *module, PyObject *spec, PyObject *file) -/*[clinic end generated code: output=935cde5b3872d56d input=c31b954f4cf4e09d]*/ +_imp_create_dynamic_impl(PyObject *module, PyObject *spec, PyObject *file) +/*[clinic end generated code: output=83249b827a4fde77 input=c31b954f4cf4e09d]*/ { PyObject *mod, *name, *path; FILE *fp; @@ -2066,8 +2066,8 @@ [clinic start generated code]*/ static int -_imp_exec_dynamic_impl(PyModuleDef *module, PyObject *mod) -/*[clinic end generated code: output=4b84f1301b22d4bd input=9fdbfcb250280d3a]*/ +_imp_exec_dynamic_impl(PyObject *module, PyObject *mod) +/*[clinic end generated code: output=f5720ac7b465877d input=9fdbfcb250280d3a]*/ { return exec_builtin_or_dynamic(mod); } @@ -2085,8 +2085,8 @@ [clinic start generated code]*/ static int -_imp_exec_builtin_impl(PyModuleDef *module, PyObject *mod) -/*[clinic end generated code: output=215e99876a27e284 input=7beed5a2f12a60ca]*/ +_imp_exec_builtin_impl(PyObject *module, PyObject *mod) +/*[clinic end generated code: output=0262447b240c038e input=7beed5a2f12a60ca]*/ { return exec_builtin_or_dynamic(mod); } diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -2804,7 +2804,7 @@ if f.kind in (CALLABLE, METHOD_INIT): if f.cls: return "PyObject *", "self" - return "PyModuleDef *", "module" + return "PyObject *", "module" if f.kind == STATIC_METHOD: return "void *", "null" if f.kind in (CLASS_METHOD, METHOD_NEW): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 12:01:17 2016 From: python-checkins at python.org (xavier.degaye) Date: Thu, 07 Jul 2016 16:01:17 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327434=3A_Version_?= =?utf-8?q?of_interpreter_running_a_cross-build_and_source_version?= Message-ID: <20160707160116.5017.97362.084A6156@psf.io> https://hg.python.org/cpython/rev/62802d373e9f changeset: 102282:62802d373e9f user: Xavier de Gaye date: Thu Jul 07 18:00:22 2016 +0200 summary: Issue #27434: Version of interpreter running a cross-build and source version must be the same. files: Misc/NEWS | 3 +++ configure | 2 +- configure.ac | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -132,6 +132,9 @@ Build ----- +- Issue #27434: The interpreter that runs the cross-build, found in PATH, must + now be of the same feature version (e.g. 3.6) as the source being built. + - Issue #26930: Update Windows builds to use OpenSSL 1.0.2h. - Issue #23968: Rename the platform directory from plat-$(MACHDEP) to diff --git a/configure b/configure --- a/configure +++ b/configure @@ -3002,7 +3002,7 @@ if test -z "$PYTHON_FOR_BUILD"; then for interp in python$PACKAGE_VERSION python3 python; do which $interp >/dev/null 2>&1 || continue - if $interp -c 'import sys;sys.exit(not sys.version_info[:2] >= (3,3))'; then + if $interp -c "import sys;sys.exit(not '.'.join(str(n) for n in sys.version_info[:2]) == '$PACKAGE_VERSION')"; then break fi interp= diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -62,7 +62,7 @@ if test -z "$PYTHON_FOR_BUILD"; then for interp in python$PACKAGE_VERSION python3 python; do which $interp >/dev/null 2>&1 || continue - if $interp -c 'import sys;sys.exit(not sys.version_info@<:@:2@:>@ >= (3,3))'; then + if $interp -c "import sys;sys.exit(not '.'.join(str(n) for n in sys.version_info@<:@:2@:>@) == '$PACKAGE_VERSION')"; then break fi interp= -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 12:52:30 2016 From: python-checkins at python.org (steven.daprano) Date: Thu, 07 Jul 2016 16:52:30 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_default_-=3E_default?= =?utf-8?q?=29=3A_Automated_merge_with_ssh=3A//hg=2Epython=2Eorg/cpython?= Message-ID: <20160707165229.14804.62074.42D215A5@psf.io> https://hg.python.org/cpython/rev/47a0dd299fec changeset: 102284:47a0dd299fec parent: 102282:62802d373e9f parent: 102283:4c4f8b0c5b30 user: Steven D'Aprano date: Fri Jul 08 02:52:06 2016 +1000 summary: Automated merge with ssh://hg.python.org/cpython files: Lib/test/test_statistics.py | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -1600,6 +1600,22 @@ data = [220, 220, 240, 260, 260, 260, 260, 280, 280, 300, 320, 340] self.assertEqual(self.func(data, 20), 265.0) + def test_data_type_error(self): + # Test median_grouped with str, bytes data types for data and interval + data = ["", "", ""] + self.assertRaises(TypeError, self.func, data) + #--- + data = [b"", b"", b""] + self.assertRaises(TypeError, self.func, data) + #--- + data = [1, 2, 3] + interval = "" + self.assertRaises(TypeError, self.func, data, interval) + #--- + data = [1, 2, 3] + interval = b"" + self.assertRaises(TypeError, self.func, data, interval) + class TestMode(NumericTestCase, AverageMixin, UnivariateTypeMixin): # Test cases for the discrete version of mode. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 7 12:52:29 2016 From: python-checkins at python.org (steven.daprano) Date: Thu, 07 Jul 2016 16:52:29 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue27139_patch_by_Julio_?= =?utf-8?q?C_Cardoza=2E?= Message-ID: <20160707165229.5900.99238.C9B67A85@psf.io> https://hg.python.org/cpython/rev/4c4f8b0c5b30 changeset: 102283:4c4f8b0c5b30 parent: 102281:c80054ccbbd8 user: Steven D'Aprano date: Fri Jul 08 02:38:45 2016 +1000 summary: Issue27139 patch by Julio C Cardoza. files: Lib/test/test_statistics.py | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -1600,6 +1600,22 @@ data = [220, 220, 240, 260, 260, 260, 260, 280, 280, 300, 320, 340] self.assertEqual(self.func(data, 20), 265.0) + def test_data_type_error(self): + # Test median_grouped with str, bytes data types for data and interval + data = ["", "", ""] + self.assertRaises(TypeError, self.func, data) + #--- + data = [b"", b"", b""] + self.assertRaises(TypeError, self.func, data) + #--- + data = [1, 2, 3] + interval = "" + self.assertRaises(TypeError, self.func, data, interval) + #--- + data = [1, 2, 3] + interval = b"" + self.assertRaises(TypeError, self.func, data, interval) + class TestMode(NumericTestCase, AverageMixin, UnivariateTypeMixin): # Test cases for the discrete version of mode. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 8 00:26:33 2016 From: python-checkins at python.org (terry.reedy) Date: Fri, 08 Jul 2016 04:26:33 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Whitespace?= Message-ID: <20160708042633.14368.18476.BA229C54@psf.io> https://hg.python.org/cpython/rev/a34cadc8ebf4 changeset: 102286:a34cadc8ebf4 user: Terry Jan Reedy date: Fri Jul 08 00:26:20 2016 -0400 summary: Whitespace files: Lib/idlelib/idle_test/test_query.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py --- a/Lib/idlelib/idle_test/test_query.py +++ b/Lib/idlelib/idle_test/test_query.py @@ -196,7 +196,7 @@ class Dummy_HelpSource: browse_file = query.HelpSource.browse_file - pathvar = Var() + pathvar = Var() dialog = Dummy_HelpSource() -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 8 00:26:33 2016 From: python-checkins at python.org (terry.reedy) Date: Fri, 08 Jul 2016 04:26:33 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327380=3A_IDLE=3A_?= =?utf-8?q?add_query=2EHelpSource_class_and_tests=2E?= Message-ID: <20160708042632.4777.90398.7C818CDC@psf.io> https://hg.python.org/cpython/rev/66fe8d9eae6c changeset: 102285:66fe8d9eae6c user: Terry Jan Reedy date: Fri Jul 08 00:22:50 2016 -0400 summary: Issue #27380: IDLE: add query.HelpSource class and tests. Remove modules that are combined in new module. files: Lib/idlelib/config_help.py | 170 -------- Lib/idlelib/configdialog.py | 27 +- Lib/idlelib/idle_test/htest.py | 30 +- Lib/idlelib/idle_test/test_config_help.py | 106 ----- Lib/idlelib/idle_test/test_query.py | 212 ++++++++- Lib/idlelib/query.py | 163 +++++- 6 files changed, 341 insertions(+), 367 deletions(-) diff --git a/Lib/idlelib/config_help.py b/Lib/idlelib/config_help.py deleted file mode 100644 --- a/Lib/idlelib/config_help.py +++ /dev/null @@ -1,170 +0,0 @@ -"Dialog to specify or edit the parameters for a user configured help source." - -import os -import sys - -from tkinter import * -import tkinter.messagebox as tkMessageBox -import tkinter.filedialog as tkFileDialog - -class GetHelpSourceDialog(Toplevel): - def __init__(self, parent, title, menuItem='', filePath='', _htest=False): - """Get menu entry and url/ local file location for Additional Help - - User selects a name for the Help resource and provides a web url - or a local file as its source. The user can enter a url or browse - for the file. - - _htest - bool, change box location when running htest - """ - Toplevel.__init__(self, parent) - self.configure(borderwidth=5) - self.resizable(height=FALSE, width=FALSE) - self.title(title) - self.transient(parent) - self.grab_set() - self.protocol("WM_DELETE_WINDOW", self.cancel) - self.parent = parent - self.result = None - self.create_widgets() - self.menu.set(menuItem) - self.path.set(filePath) - self.withdraw() #hide while setting geometry - #needs to be done here so that the winfo_reqwidth is valid - self.update_idletasks() - #centre dialog over parent. below parent if running htest. - self.geometry( - "+%d+%d" % ( - parent.winfo_rootx() + - (parent.winfo_width()/2 - self.winfo_reqwidth()/2), - parent.winfo_rooty() + - ((parent.winfo_height()/2 - self.winfo_reqheight()/2) - if not _htest else 150))) - self.deiconify() #geometry set, unhide - self.bind('', self.ok) - self.wait_window() - - def create_widgets(self): - self.menu = StringVar(self) - self.path = StringVar(self) - self.fontSize = StringVar(self) - self.frameMain = Frame(self, borderwidth=2, relief=GROOVE) - self.frameMain.pack(side=TOP, expand=TRUE, fill=BOTH) - labelMenu = Label(self.frameMain, anchor=W, justify=LEFT, - text='Menu Item:') - self.entryMenu = Entry(self.frameMain, textvariable=self.menu, - width=30) - self.entryMenu.focus_set() - labelPath = Label(self.frameMain, anchor=W, justify=LEFT, - text='Help File Path: Enter URL or browse for file') - self.entryPath = Entry(self.frameMain, textvariable=self.path, - width=40) - self.entryMenu.focus_set() - labelMenu.pack(anchor=W, padx=5, pady=3) - self.entryMenu.pack(anchor=W, padx=5, pady=3) - labelPath.pack(anchor=W, padx=5, pady=3) - self.entryPath.pack(anchor=W, padx=5, pady=3) - browseButton = Button(self.frameMain, text='Browse', width=8, - command=self.browse_file) - browseButton.pack(pady=3) - frameButtons = Frame(self) - frameButtons.pack(side=BOTTOM, fill=X) - self.buttonOk = Button(frameButtons, text='OK', - width=8, default=ACTIVE, command=self.ok) - self.buttonOk.grid(row=0, column=0, padx=5,pady=5) - self.buttonCancel = Button(frameButtons, text='Cancel', - width=8, command=self.cancel) - self.buttonCancel.grid(row=0, column=1, padx=5, pady=5) - - def browse_file(self): - filetypes = [ - ("HTML Files", "*.htm *.html", "TEXT"), - ("PDF Files", "*.pdf", "TEXT"), - ("Windows Help Files", "*.chm"), - ("Text Files", "*.txt", "TEXT"), - ("All Files", "*")] - path = self.path.get() - if path: - dir, base = os.path.split(path) - else: - base = None - if sys.platform[:3] == 'win': - dir = os.path.join(os.path.dirname(sys.executable), 'Doc') - if not os.path.isdir(dir): - dir = os.getcwd() - else: - dir = os.getcwd() - opendialog = tkFileDialog.Open(parent=self, filetypes=filetypes) - file = opendialog.show(initialdir=dir, initialfile=base) - if file: - self.path.set(file) - - def menu_ok(self): - "Simple validity check for a sensible menu item name" - menu_ok = True - menu = self.menu.get() - menu.strip() - if not menu: - tkMessageBox.showerror(title='Menu Item Error', - message='No menu item specified', - parent=self) - self.entryMenu.focus_set() - menu_ok = False - elif len(menu) > 30: - tkMessageBox.showerror(title='Menu Item Error', - message='Menu item too long:' - '\nLimit 30 characters.', - parent=self) - self.entryMenu.focus_set() - menu_ok = False - return menu_ok - - def path_ok(self): - "Simple validity check for menu file path" - path_ok = True - path = self.path.get() - path.strip() - if not path: #no path specified - tkMessageBox.showerror(title='File Path Error', - message='No help file path specified.', - parent=self) - self.entryPath.focus_set() - path_ok = False - elif path.startswith(('www.', 'http')): - pass - else: - if path[:5] == 'file:': - path = path[5:] - if not os.path.exists(path): - tkMessageBox.showerror(title='File Path Error', - message='Help file path does not exist.', - parent=self) - self.entryPath.focus_set() - path_ok = False - return path_ok - - def ok(self, event=None): - if self.menu_ok() and self.path_ok(): - self.result = (self.menu.get().strip(), - self.path.get().strip()) - if sys.platform == 'darwin': - path = self.result[1] - if path.startswith(('www', 'file:', 'http:', 'https:')): - pass - else: - # Mac Safari insists on using the URI form for local files - self.result = list(self.result) - self.result[1] = "file://" + path - self.destroy() - - def cancel(self, event=None): - self.result = None - self.destroy() - -if __name__ == '__main__': - import unittest - unittest.main('idlelib.idle_test.test_config_help', - verbosity=2, exit=False) - - from idlelib.idle_test.htest import run - run(GetHelpSourceDialog) diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py --- a/Lib/idlelib/configdialog.py +++ b/Lib/idlelib/configdialog.py @@ -18,8 +18,7 @@ from idlelib.config import idleConf from idlelib.dynoption import DynOptionMenu from idlelib.config_key import GetKeysDialog -from idlelib.query import SectionName -from idlelib.config_help import GetHelpSourceDialog +from idlelib.query import SectionName, HelpSource from idlelib.tabbedpages import TabbedPageSet from idlelib.textview import view_text from idlelib import macosx @@ -940,7 +939,8 @@ self.buttonHelpListRemove.config(state=DISABLED) def HelpListItemAdd(self): - helpSource = GetHelpSourceDialog(self, 'New Help Source').result + helpSource = HelpSource(self, 'New Help Source', + ).result if helpSource: self.userHelpList.append((helpSource[0], helpSource[1])) self.listHelp.insert(END, helpSource[0]) @@ -950,16 +950,17 @@ def HelpListItemEdit(self): itemIndex = self.listHelp.index(ANCHOR) helpSource = self.userHelpList[itemIndex] - newHelpSource = GetHelpSourceDialog( - self, 'Edit Help Source', menuItem=helpSource[0], - filePath=helpSource[1]).result - if (not newHelpSource) or (newHelpSource == helpSource): - return #no changes - self.userHelpList[itemIndex] = newHelpSource - self.listHelp.delete(itemIndex) - self.listHelp.insert(itemIndex, newHelpSource[0]) - self.UpdateUserHelpChangedItems() - self.SetHelpListButtonStates() + newHelpSource = HelpSource( + self, 'Edit Help Source', + menuitem=helpSource[0], + filepath=helpSource[1], + ).result + if newHelpSource and newHelpSource != helpSource: + self.userHelpList[itemIndex] = newHelpSource + self.listHelp.delete(itemIndex) + self.listHelp.insert(itemIndex, newHelpSource[0]) + self.UpdateUserHelpChangedItems() + self.SetHelpListButtonStates() def HelpListItemRemove(self): itemIndex = self.listHelp.index(ANCHOR) diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py --- a/Lib/idlelib/idle_test/htest.py +++ b/Lib/idlelib/idle_test/htest.py @@ -137,18 +137,6 @@ "Best to close editor first." } -GetHelpSourceDialog_spec = { - 'file': 'config_help', - 'kwds': {'title': 'Get helpsource', - '_htest': True}, - 'msg': "Enter menu item name and help file path\n " - " and more than 30 chars are invalid menu item names.\n" - ", file does not exist are invalid path items.\n" - "Test for incomplete web address for help file path.\n" - "A valid entry will be printed to shell with [0k].\n" - "[Cancel] will print None to shell", - } - # Update once issue21519 is resolved. GetKeysDialog_spec = { 'file': 'config_key', @@ -175,6 +163,22 @@ "should open that file \nin a new EditorWindow." } +HelpSource_spec = { + 'file': 'query', + 'kwds': {'title': 'Help name and source', + 'menuitem': 'test', + 'filepath': __file__, + 'used_names': {'abc'}, + '_htest': True}, + 'msg': "Enter menu item name and help file path\n" + "'', > than 30 chars, and 'abc' are invalid menu item names.\n" + "'' and file does not exist are invalid path items.\n" + "Any url ('www...', 'http...') is accepted.\n" + "Test Browse with and without path, as cannot unittest.\n" + "A valid entry will be printed to shell with [0k]\n" + "or . [Cancel] will print None to shell" + } + _io_binding_spec = { 'file': 'iomenu', 'kwds': {}, @@ -241,7 +245,7 @@ '_htest': True}, 'msg': "Enter with or [Ok]. Print valid entry to Shell\n" "Blank line, after stripping, is ignored\n" - "Close dialog with valid entry, [Cancel] or [X]", + "Close dialog with valid entry, [Cancel] or [X]" } diff --git a/Lib/idlelib/idle_test/test_config_help.py b/Lib/idlelib/idle_test/test_config_help.py deleted file mode 100644 --- a/Lib/idlelib/idle_test/test_config_help.py +++ /dev/null @@ -1,106 +0,0 @@ -"""Unittests for idlelib.config_help.py""" -import unittest -from idlelib.idle_test.mock_tk import Var, Mbox, Entry -from idlelib import config_help as help_dialog_module - -help_dialog = help_dialog_module.GetHelpSourceDialog - - -class Dummy_help_dialog: - # Mock for testing the following methods of help_dialog - menu_ok = help_dialog.menu_ok - path_ok = help_dialog.path_ok - ok = help_dialog.ok - cancel = help_dialog.cancel - # Attributes, constant or variable, needed for tests - menu = Var() - entryMenu = Entry() - path = Var() - entryPath = Entry() - result = None - destroyed = False - - def destroy(self): - self.destroyed = True - - -# menu_ok and path_ok call Mbox.showerror if menu and path are not ok. -orig_mbox = help_dialog_module.tkMessageBox -showerror = Mbox.showerror - - -class ConfigHelpTest(unittest.TestCase): - dialog = Dummy_help_dialog() - - @classmethod - def setUpClass(cls): - help_dialog_module.tkMessageBox = Mbox - - @classmethod - def tearDownClass(cls): - help_dialog_module.tkMessageBox = orig_mbox - - def test_blank_menu(self): - self.dialog.menu.set('') - self.assertFalse(self.dialog.menu_ok()) - self.assertEqual(showerror.title, 'Menu Item Error') - self.assertIn('No', showerror.message) - - def test_long_menu(self): - self.dialog.menu.set('hello' * 10) - self.assertFalse(self.dialog.menu_ok()) - self.assertEqual(showerror.title, 'Menu Item Error') - self.assertIn('long', showerror.message) - - def test_good_menu(self): - self.dialog.menu.set('help') - showerror.title = 'No Error' # should not be called - self.assertTrue(self.dialog.menu_ok()) - self.assertEqual(showerror.title, 'No Error') - - def test_blank_path(self): - self.dialog.path.set('') - self.assertFalse(self.dialog.path_ok()) - self.assertEqual(showerror.title, 'File Path Error') - self.assertIn('No', showerror.message) - - def test_invalid_file_path(self): - self.dialog.path.set('foobar' * 100) - self.assertFalse(self.dialog.path_ok()) - self.assertEqual(showerror.title, 'File Path Error') - self.assertIn('not exist', showerror.message) - - def test_invalid_url_path(self): - self.dialog.path.set('ww.foobar.com') - self.assertFalse(self.dialog.path_ok()) - self.assertEqual(showerror.title, 'File Path Error') - self.assertIn('not exist', showerror.message) - - self.dialog.path.set('htt.foobar.com') - self.assertFalse(self.dialog.path_ok()) - self.assertEqual(showerror.title, 'File Path Error') - self.assertIn('not exist', showerror.message) - - def test_good_path(self): - self.dialog.path.set('https://docs.python.org') - showerror.title = 'No Error' # should not be called - self.assertTrue(self.dialog.path_ok()) - self.assertEqual(showerror.title, 'No Error') - - def test_ok(self): - self.dialog.destroyed = False - self.dialog.menu.set('help') - self.dialog.path.set('https://docs.python.org') - self.dialog.ok() - self.assertEqual(self.dialog.result, ('help', - 'https://docs.python.org')) - self.assertTrue(self.dialog.destroyed) - - def test_cancel(self): - self.dialog.destroyed = False - self.dialog.cancel() - self.assertEqual(self.dialog.result, None) - self.assertTrue(self.dialog.destroyed) - -if __name__ == '__main__': - unittest.main(verbosity=2, exit=False) diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py --- a/Lib/idlelib/idle_test/test_query.py +++ b/Lib/idlelib/idle_test/test_query.py @@ -1,6 +1,16 @@ """Test idlelib.query. -Coverage: 100%. +Non-gui tests for Query, SectionName, ModuleName, and HelpSource use +dummy versions that extract the non-gui methods and add other needed +attributes. GUI tests create an instance of each class and simulate +entries and button clicks. Subclass tests only target the new code in +the subclass definition. + +The appearance of the widgets is checked by the Query and +HelpSource htests. These are run by running query.py. + +Coverage: 94% (100% for Query and SectionName). +6 of 8 missing are ModuleName exceptions I don't know how to trigger. """ from test.support import requires from tkinter import Tk @@ -9,21 +19,9 @@ from idlelib.idle_test.mock_tk import Var, Mbox_func from idlelib import query -Query = query.Query -class Dummy_Query: - # Mock for testing the following methods Query - entry_ok = Query.entry_ok - ok = Query.ok - cancel = Query.cancel - # Attributes, constant or variable, needed for tests - entry = Var() - result = None - destroyed = False - def destroy(self): - self.destroyed = True +# Mock entry.showerror messagebox so don't need click to continue +# when entry_ok and path_ok methods call it to display errors. -# entry_ok calls modal messagebox.showerror if entry is not ok. -# Mock showerrer so don't need to click to continue. orig_showerror = query.showerror showerror = Mbox_func() # Instance has __call__ method. @@ -34,7 +32,23 @@ query.showerror = orig_showerror +# NON-GUI TESTS + class QueryTest(unittest.TestCase): + "Test Query base class." + + class Dummy_Query: + # Test the following Query methods. + entry_ok = query.Query.entry_ok + ok = query.Query.ok + cancel = query.Query.cancel + # Add attributes needed for the tests. + entry = Var() + result = None + destroyed = False + def destroy(self): + self.destroyed = True + dialog = Dummy_Query() def setUp(self): @@ -42,7 +56,7 @@ self.dialog.result = None self.dialog.destroyed = False - def test_blank_entry(self): + def test_entry_ok_blank(self): dialog = self.dialog Equal = self.assertEqual dialog.entry.set(' ') @@ -51,7 +65,7 @@ Equal(showerror.title, 'Entry Error') self.assertIn('Blank', showerror.message) - def test_good_entry(self): + def test_entry_ok_good(self): dialog = self.dialog Equal = self.assertEqual dialog.entry.set(' good ') @@ -59,7 +73,17 @@ Equal((dialog.result, dialog.destroyed), (None, False)) Equal(showerror.title, None) - def test_ok(self): + def test_ok_blank(self): + dialog = self.dialog + Equal = self.assertEqual + dialog.entry.set('') + dialog.entry.focus_set = mock.Mock() + Equal(dialog.ok(), None) + self.assertTrue(dialog.entry.focus_set.called) + del dialog.entry.focus_set + Equal((dialog.result, dialog.destroyed), (None, False)) + + def test_ok_good(self): dialog = self.dialog Equal = self.assertEqual dialog.entry.set('good') @@ -73,12 +97,14 @@ Equal((dialog.result, dialog.destroyed), (None, True)) -class Dummy_SectionName: - entry_ok = query.SectionName.entry_ok # Test override. - used_names = ['used'] - entry = Var() +class SectionNameTest(unittest.TestCase): + "Test SectionName subclass of Query." -class SectionNameTest(unittest.TestCase): + class Dummy_SectionName: + entry_ok = query.SectionName.entry_ok # Function being tested. + used_names = ['used'] + entry = Var() + dialog = Dummy_SectionName() def setUp(self): @@ -116,12 +142,14 @@ Equal(showerror.title, None) -class Dummy_ModuleName: - entry_ok = query.ModuleName.entry_ok # Test override - text0 = '' - entry = Var() +class ModuleNameTest(unittest.TestCase): + "Test ModuleName subclass of Query." -class ModuleNameTest(unittest.TestCase): + class Dummy_ModuleName: + entry_ok = query.ModuleName.entry_ok # Funtion being tested. + text0 = '' + entry = Var() + dialog = Dummy_ModuleName() def setUp(self): @@ -159,13 +187,119 @@ Equal(showerror.title, None) +# 3 HelpSource test classes each test one function. + +orig_platform = query.platform + +class HelpsourceBrowsefileTest(unittest.TestCase): + "Test browse_file method of ModuleName subclass of Query." + + class Dummy_HelpSource: + browse_file = query.HelpSource.browse_file + pathvar = Var() + + dialog = Dummy_HelpSource() + + def test_file_replaces_path(self): + # Path is widget entry, file is file dialog return. + dialog = self.dialog + for path, func, result in ( + # We need all combination to test all (most) code paths. + ('', lambda a,b,c:'', ''), + ('', lambda a,b,c: __file__, __file__), + ('htest', lambda a,b,c:'', 'htest'), + ('htest', lambda a,b,c: __file__, __file__)): + with self.subTest(): + dialog.pathvar.set(path) + dialog.askfilename = func + dialog.browse_file() + self.assertEqual(dialog.pathvar.get(), result) + + +class HelpsourcePathokTest(unittest.TestCase): + "Test path_ok method of ModuleName subclass of Query." + + class Dummy_HelpSource: + path_ok = query.HelpSource.path_ok + path = Var() + + dialog = Dummy_HelpSource() + + @classmethod + def tearDownClass(cls): + query.platform = orig_platform + + def setUp(self): + showerror.title = None + + def test_path_ok_blank(self): + dialog = self.dialog + Equal = self.assertEqual + dialog.path.set(' ') + Equal(dialog.path_ok(), None) + Equal(showerror.title, 'File Path Error') + self.assertIn('No help', showerror.message) + + def test_path_ok_bad(self): + dialog = self.dialog + Equal = self.assertEqual + dialog.path.set(__file__ + 'bad-bad-bad') + Equal(dialog.path_ok(), None) + Equal(showerror.title, 'File Path Error') + self.assertIn('not exist', showerror.message) + + def test_path_ok_web(self): + dialog = self.dialog + Equal = self.assertEqual + for url in 'www.py.org', 'http://py.org': + with self.subTest(): + dialog.path.set(url) + Equal(dialog.path_ok(), url) + Equal(showerror.title, None) + + def test_path_ok_file(self): + dialog = self.dialog + Equal = self.assertEqual + for platform, prefix in ('darwin', 'file://'), ('other', ''): + with self.subTest(): + query.platform = platform + dialog.path.set(__file__) + Equal(dialog.path_ok(), prefix + __file__) + Equal(showerror.title, None) + + +class HelpsourceEntryokTest(unittest.TestCase): + "Test entry_ok method of ModuleName subclass of Query." + + class Dummy_HelpSource: + entry_ok = query.HelpSource.entry_ok + def item_ok(self): + return self.name + def path_ok(self): + return self.path + + dialog = Dummy_HelpSource() + + def test_entry_ok_helpsource(self): + dialog = self.dialog + for name, path, result in ((None, None, None), + (None, 'doc.txt', None), + ('doc', None, None), + ('doc', 'doc.txt', ('doc', 'doc.txt'))): + with self.subTest(): + dialog.name, dialog.path = name, path + self.assertEqual(self.dialog.entry_ok(), result) + + +# GUI TESTS + class QueryGuiTest(unittest.TestCase): @classmethod def setUpClass(cls): requires('gui') cls.root = root = Tk() - cls.dialog = Query(root, 'TEST', 'test', _utest=True) + cls.dialog = query.Query(root, 'TEST', 'test', _utest=True) cls.dialog.destroy = mock.Mock() @classmethod @@ -238,5 +372,25 @@ del root +class HelpsourceGuiTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + + def test_click_help_source(self): + root = Tk() + dialog = query.HelpSource(root, 'T', menuitem='__test__', + filepath=__file__, _utest=True) + Equal = self.assertEqual + Equal(dialog.entry.get(), '__test__') + Equal(dialog.path.get(), __file__) + dialog.button_ok.invoke() + Equal(dialog.result, ('__test__', __file__)) + del dialog + root.destroy() + del root + + if __name__ == '__main__': unittest.main(verbosity=2, exit=False) diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py --- a/Lib/idlelib/query.py +++ b/Lib/idlelib/query.py @@ -13,10 +13,16 @@ """ # Query and Section name result from splitting GetCfgSectionNameDialog # of configSectionNameDialog.py (temporarily config_sec.py) into -# generic and specific parts. +# generic and specific parts. 3.6 only, July 2016. +# ModuleName.entry_ok came from editor.EditorWindow.load_module. +# HelpSource was extracted from configHelpSourceEdit.py (temporarily +# config_help.py), with darwin code moved from ok to path_ok. import importlib +import os +from sys import executable, platform # Platform is set for one test. from tkinter import Toplevel, StringVar +from tkinter import filedialog from tkinter.messagebox import showerror from tkinter.ttk import Frame, Button, Entry, Label @@ -25,8 +31,8 @@ For this base class, accept any non-blank string. """ - def __init__(self, parent, title, message, text0='', - *, _htest=False, _utest=False): + def __init__(self, parent, title, message, *, text0='', used_names={}, + _htest=False, _utest=False): """Create popup, do not return until tk widget destroyed. Additional subclass init must be done before calling this @@ -35,10 +41,12 @@ title - string, title of popup dialog message - string, informational message to display text0 - initial value for entry + used_names - names already in use _htest - bool, change box location when running htest _utest - bool, leave window hidden and not modal """ Toplevel.__init__(self, parent) + self.withdraw() # Hide while configuring, especially geometry. self.configure(borderwidth=5) self.resizable(height=False, width=False) self.title(title) @@ -49,27 +57,26 @@ self.parent = parent self.message = message self.text0 = text0 + self.used_names = used_names self.create_widgets() - self.update_idletasks() - #needs to be done here so that the winfo_reqwidth is valid - self.withdraw() # Hide while configuring, especially geometry. - self.geometry( + self.update_idletasks() # Needed here for winfo_reqwidth below. + self.geometry( # Center dialog over parent (or below htest box). "+%d+%d" % ( parent.winfo_rootx() + (parent.winfo_width()/2 - self.winfo_reqwidth()/2), parent.winfo_rooty() + ((parent.winfo_height()/2 - self.winfo_reqheight()/2) if not _htest else 150) - ) ) #centre dialog over parent (or below htest box) + ) ) if not _utest: - self.deiconify() #geometry set, unhide + self.deiconify() # Unhide now that geometry set. self.wait_window() def create_widgets(self): # Call from override, if any. - # Bind widgets needed for entry_ok or unittest to self. - frame = Frame(self, borderwidth=2, relief='sunken', ) - label = Label(frame, anchor='w', justify='left', - text=self.message) + # Bind to self widgets needed for entry_ok or unittest. + self.frame = frame = Frame(self, borderwidth=2, relief='sunken', ) + entrylabel = Label(frame, anchor='w', justify='left', + text=self.message) self.entryvar = StringVar(self, self.text0) self.entry = Entry(frame, width=30, textvariable=self.entryvar) self.entry.focus_set() @@ -81,7 +88,7 @@ width=8, command=self.cancel) frame.pack(side='top', expand=True, fill='both') - label.pack(padx=5, pady=5) + entrylabel.pack(padx=5, pady=5) self.entry.pack(padx=5, pady=5) buttons.pack(side='bottom') self.button_ok.pack(side='left', padx=5) @@ -93,7 +100,7 @@ if not entry: showerror(title='Entry Error', message='Blank line.', parent=self) - return + return None return entry def ok(self, event=None): # Do not replace. @@ -106,7 +113,7 @@ self.result = entry self.destroy() else: - # [Ok] (but not ) moves focus. Move it back. + # [Ok] moves focus. ( does not.) Move it back. self.entry.focus_set() def cancel(self, event=None): # Do not replace. @@ -117,13 +124,12 @@ class SectionName(Query): "Get a name for a config file section name." + # Used in ConfigDialog.GetNewKeysName, .GetNewThemeName (837) def __init__(self, parent, title, message, used_names, *, _htest=False, _utest=False): - "used_names - collection of strings already in use" - self.used_names = used_names - Query.__init__(self, parent, title, message, - _htest=_htest, _utest=_utest) + super().__init__(parent, title, message, used_names=used_names, + _htest=_htest, _utest=_utest) def entry_ok(self): "Return sensible ConfigParser section name or None." @@ -131,16 +137,16 @@ if not name: showerror(title='Name Error', message='No name specified.', parent=self) - return + return None elif len(name)>30: showerror(title='Name Error', message='Name too long. It should be no more than '+ '30 characters.', parent=self) - return + return None elif name in self.used_names: showerror(title='Name Error', message='This name is already in use.', parent=self) - return + return None return name @@ -148,48 +154,133 @@ "Get a module name for Open Module menu entry." # Used in open_module (editor.EditorWindow until move to iobinding). - def __init__(self, parent, title, message, text0='', + def __init__(self, parent, title, message, text0, *, _htest=False, _utest=False): - """text0 - name selected in text before Open Module invoked" - """ - Query.__init__(self, parent, title, message, text0=text0, - _htest=_htest, _utest=_utest) + super().__init__(parent, title, message, text0=text0, + _htest=_htest, _utest=_utest) def entry_ok(self): "Return entered module name as file path or None." - # Moved here from Editor_Window.load_module 2016 July. name = self.entry.get().strip() if not name: showerror(title='Name Error', message='No name specified.', parent=self) - return - # XXX Ought to insert current file's directory in front of path + return None + # XXX Ought to insert current file's directory in front of path. try: spec = importlib.util.find_spec(name) except (ValueError, ImportError) as msg: showerror("Import Error", str(msg), parent=self) - return + return None if spec is None: showerror("Import Error", "module not found", parent=self) - return + return None if not isinstance(spec.loader, importlib.abc.SourceLoader): showerror("Import Error", "not a source-based module", parent=self) - return + return None try: file_path = spec.loader.get_filename(name) except AttributeError: showerror("Import Error", "loader does not support get_filename", parent=self) - return + return None return file_path +class HelpSource(Query): + "Get menu name and help source for Help menu." + # Used in ConfigDialog.HelpListItemAdd/Edit, (941/9) + + def __init__(self, parent, title, *, menuitem='', filepath='', + used_names={}, _htest=False, _utest=False): + """Get menu entry and url/local file for Additional Help. + + User enters a name for the Help resource and a web url or file + name. The user can browse for the file. + """ + self.filepath = filepath + message = 'Name for item on Help menu:' + super().__init__(parent, title, message, text0=menuitem, + used_names=used_names, _htest=_htest, _utest=_utest) + + def create_widgets(self): + super().create_widgets() + frame = self.frame + pathlabel = Label(frame, anchor='w', justify='left', + text='Help File Path: Enter URL or browse for file') + self.pathvar = StringVar(self, self.filepath) + self.path = Entry(frame, textvariable=self.pathvar, width=40) + browse = Button(frame, text='Browse', width=8, + command=self.browse_file) + + pathlabel.pack(anchor='w', padx=5, pady=3) + self.path.pack(anchor='w', padx=5, pady=3) + browse.pack(pady=3) + + def askfilename(self, filetypes, initdir, initfile): # htest # + # Extracted from browse_file so can mock for unittests. + # Cannot unittest as cannot simulate button clicks. + # Test by running htest, such as by running this file. + return filedialog.Open(parent=self, filetypes=filetypes)\ + .show(initialdir=initdir, initialfile=initfile) + + def browse_file(self): + filetypes = [ + ("HTML Files", "*.htm *.html", "TEXT"), + ("PDF Files", "*.pdf", "TEXT"), + ("Windows Help Files", "*.chm"), + ("Text Files", "*.txt", "TEXT"), + ("All Files", "*")] + path = self.pathvar.get() + if path: + dir, base = os.path.split(path) + else: + base = None + if platform[:3] == 'win': + dir = os.path.join(os.path.dirname(executable), 'Doc') + if not os.path.isdir(dir): + dir = os.getcwd() + else: + dir = os.getcwd() + file = self.askfilename(filetypes, dir, base) + if file: + self.pathvar.set(file) + + item_ok = SectionName.entry_ok # localize for test override + + def path_ok(self): + "Simple validity check for menu file path" + path = self.path.get().strip() + if not path: #no path specified + showerror(title='File Path Error', + message='No help file path specified.', + parent=self) + return None + elif not path.startswith(('www.', 'http')): + if path[:5] == 'file:': + path = path[5:] + if not os.path.exists(path): + showerror(title='File Path Error', + message='Help file path does not exist.', + parent=self) + return None + if platform == 'darwin': # for Mac Safari + path = "file://" + path + return path + + def entry_ok(self): + "Return apparently valid (name, path) or None" + name = self.item_ok() + path = self.path_ok() + return None if name is None or path is None else (name, path) + + if __name__ == '__main__': import unittest unittest.main('idlelib.idle_test.test_query', verbosity=2, exit=False) from idlelib.idle_test.htest import run - run(Query) + run(Query, HelpSource) -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Fri Jul 8 05:00:41 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Fri, 08 Jul 2016 09:00:41 +0000 Subject: [Python-checkins] Daily reference leaks (a34cadc8ebf4): sum=4 Message-ID: <20160708090033.2287.83191.5479E657@psf.io> results for a34cadc8ebf4 on branch "default" -------------------------------------------- test_collections leaked [0, 4, -4] memory blocks, sum=0 test_functools leaked [0, 3, 1] memory blocks, sum=4 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogV5lqP4', '--timeout', '7200'] From lp_benchmark_robot at intel.com Fri Jul 8 05:28:57 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 8 Jul 2016 10:28:57 +0100 Subject: [Python-checkins] GOOD Benchmark Results for Python 2.7 2016-07-08 Message-ID: Results for project Python 2.7, build date 2016-07-08 02:47:28 +0000 commit: 228b23b58ed3 previous commit: 539b4e7a655e revision date: 2016-07-07 07:24:26 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.13% 0.26% 4.98% 4.53% :-) pybench 0.18% 1.06% 6.01% 4.23% :-( regex_v8 0.53% 0.22% -2.27% 11.22% :-) nbody 0.08% -0.61% 8.71% 3.02% :-| json_dump_v2 0.24% 1.14% 1.98% 11.20% :-( normal_startup 2.01% 0.33% -5.73% 2.36% :-) ssbench 0.18% 0.20% 2.50% 1.03% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/good-benchmark-results-for-python-2-7-2016-07-08/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Fri Jul 8 05:28:20 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 8 Jul 2016 10:28:20 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python Default 2016-07-08 Message-ID: <0466a849-cbb5-46ea-993a-8e8bf89505a6@irsmsx151.ger.corp.intel.com> Results for project Python default, build date 2016-07-08 02:03:16 +0000 commit: 47a0dd299fec previous commit: 85973348664c revision date: 2016-07-07 16:52:06 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.23% -1.58% 10.43% 16.16% :-| pybench 0.07% -0.14% 1.42% 7.78% :-( regex_v8 2.61% 0.92% -2.61% 7.91% :-| nbody 0.10% -1.40% -0.94% 10.85% :-( json_dump_v2 0.29% -1.42% -2.49% 13.51% :-| normal_startup 0.79% -0.52% 0.89% 6.56% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-default-2016-07-08/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Fri Jul 8 11:55:52 2016 From: python-checkins at python.org (victor.stinner) Date: Fri, 08 Jul 2016 15:55:52 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2322624=3A_Python_3?= =?utf-8?q?_requires_clock=28=29_to_build?= Message-ID: <20160708155550.14635.16538.5C1A0157@psf.io> https://hg.python.org/cpython/rev/1452520dfe7b changeset: 102287:1452520dfe7b user: Victor Stinner date: Fri Jul 08 17:55:01 2016 +0200 summary: Issue #22624: Python 3 requires clock() to build files: Modules/timemodule.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/Modules/timemodule.c b/Modules/timemodule.c --- a/Modules/timemodule.c +++ b/Modules/timemodule.c @@ -1034,6 +1034,7 @@ } #endif + /* Currently, Python 3 requires clock() to build: see issue #22624 */ return floatclock(info); #endif } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 8 13:46:27 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 08 Jul 2016 17:46:27 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327285=3A_Document?= =?utf-8?q?_the_deprecation_of_the_pyvenv_script=2E?= Message-ID: <20160708174626.107184.2648.B9446150@psf.io> https://hg.python.org/cpython/rev/414f67e000a7 changeset: 102288:414f67e000a7 user: Brett Cannon date: Fri Jul 08 10:46:21 2016 -0700 summary: Issue #27285: Document the deprecation of the pyvenv script. As part of the update, the documentation was updated to normalize around the term "virtual environment" instead of relying too heavily on "venv" for the same meaning and leading to inconsistent usage of either. Thanks to Steve Piercy for the patch. files: Doc/glossary.rst | 2 +- Doc/installing/index.rst | 61 ++++++++----- Doc/library/venv.rst | 118 ++++++++++++++----------- Doc/tutorial/venv.rst | 111 +++++++++++++---------- Doc/using/index.rst | 1 - Doc/using/scripts.rst | 12 -- Doc/using/venv-create.inc | 91 +++++++++++-------- Misc/ACKS | 1 + Misc/NEWS | 6 + 9 files changed, 222 insertions(+), 181 deletions(-) diff --git a/Doc/glossary.rst b/Doc/glossary.rst --- a/Doc/glossary.rst +++ b/Doc/glossary.rst @@ -970,7 +970,7 @@ without interfering with the behaviour of other Python applications running on the same system. - See also :ref:`scripts-pyvenv`. + See also :mod:`venv`. virtual machine A computer defined entirely in software. Python's virtual machine diff --git a/Doc/installing/index.rst b/Doc/installing/index.rst --- a/Doc/installing/index.rst +++ b/Doc/installing/index.rst @@ -2,9 +2,9 @@ .. _installing-index: -***************************** - Installing Python Modules -***************************** +************************* +Installing Python Modules +************************* :Email: distutils-sig at python.org @@ -34,24 +34,24 @@ * ``pip`` is the preferred installer program. Starting with Python 3.4, it is included by default with the Python binary installers. -* a virtual environment is a semi-isolated Python environment that allows +* A *virtual environment* is a semi-isolated Python environment that allows packages to be installed for use by a particular application, rather than - being installed system wide -* ``pyvenv`` is the standard tool for creating virtual environments, and has + being installed system wide. +* ``venv`` is the standard tool for creating virtual environments, and has been part of Python since Python 3.3. Starting with Python 3.4, it - defaults to installing ``pip`` into all created virtual environments + defaults to installing ``pip`` into all created virtual environments. * ``virtualenv`` is a third party alternative (and predecessor) to - ``pyvenv``. It allows virtual environments to be used on versions of - Python prior to 3.4, which either don't provide ``pyvenv`` at all, or + ``venv``. It allows virtual environments to be used on versions of + Python prior to 3.4, which either don't provide ``venv`` at all, or aren't able to automatically install ``pip`` into created environments. -* the `Python Packaging Index `__ is a public +* The `Python Packaging Index `__ is a public repository of open source licensed packages made available for use by - other Python users + other Python users. * the `Python Packaging Authority `__ are the group of developers and documentation authors responsible for the maintenance and evolution of the standard packaging tools and the associated metadata and - file format standards. They maintain a variety of tools, documentation + file format standards. They maintain a variety of tools, documentation, and issue trackers on both `GitHub `__ and `BitBucket `__. * ``distutils`` is the original build and distribution system first added to @@ -62,6 +62,19 @@ of the mailing list used to coordinate Python packaging standards development). +.. deprecated:: 3.6 + ``pyvenv`` was the recommended tool for creating virtual environments for + Python 3.3 and 3.4, and is `deprecated in Python 3.6 + `_. + +.. versionchanged:: 3.5 + The use of ``venv`` is now recommended for creating virtual environments. + +.. seealso:: + + `Python Packaging User Guide: Creating and using virtual environments + `__ + Basic usage =========== @@ -100,13 +113,14 @@ More information and resources regarding ``pip`` and its capabilities can be found in the `Python Packaging User Guide `__. -``pyvenv`` has its own documentation at :ref:`scripts-pyvenv`. Installing -into an active virtual environment uses the commands shown above. +Creation of virtual environments is done through the :mod:`venv` module. +Installing packages into an active virtual environment uses the commands shown +above. .. seealso:: `Python Packaging User Guide: Installing Python Distribution Packages - `__ + `__ How do I ...? @@ -124,7 +138,7 @@ .. seealso:: `Python Packaging User Guide: Requirements for Installing Packages - `__ + `__ .. installing-per-user-installation: @@ -142,20 +156,19 @@ A number of scientific Python packages have complex binary dependencies, and aren't currently easy to install using ``pip`` directly. At this point in time, it will often be easier for users to install these packages by -`other means -`__ +`other means `__ rather than attempting to install them with ``pip``. .. seealso:: `Python Packaging User Guide: Installing Scientific Packages - `__ + `__ ... work with multiple versions of Python installed in parallel? ---------------------------------------------------------------- -On Linux, Mac OS X and other POSIX systems, use the versioned Python commands +On Linux, Mac OS X, and other POSIX systems, use the versioned Python commands in combination with the ``-m`` switch to run the appropriate copy of ``pip``:: @@ -164,7 +177,7 @@ python3 -m pip install SomePackage # default Python 3 python3.4 -m pip install SomePackage # specifically Python 3.4 -(appropriately versioned ``pip`` commands may also be available) +Appropriately versioned ``pip`` commands may also be available. On Windows, use the ``py`` Python launcher in combination with the ``-m`` switch:: @@ -212,11 +225,11 @@ than needing to build them themselves. Some of the solutions for installing `scientific software -`__ -that is not yet available as pre-built ``wheel`` files may also help with +`__ +that are not yet available as pre-built ``wheel`` files may also help with obtaining other binary extensions without needing to build them locally. .. seealso:: `Python Packaging User Guide: Binary Extensions - `__ + `__ diff --git a/Doc/library/venv.rst b/Doc/library/venv.rst --- a/Doc/library/venv.rst +++ b/Doc/library/venv.rst @@ -31,44 +31,50 @@ .. _venv-def: -.. note:: A virtual environment (also called a ``venv``) is a Python - environment such that the Python interpreter, libraries and scripts - installed into it are isolated from those installed in other virtual - environments, and (by default) any libraries installed in a "system" Python, - i.e. one which is installed as part of your operating system. +.. note:: A virtual environment is a Python environment such that the Python + interpreter, libraries and scripts installed into it are isolated from those + installed in other virtual environments, and (by default) any libraries + installed in a "system" Python, i.e., one which is installed as part of your + operating system. - A venv is a directory tree which contains Python executable files and - other files which indicate that it is a venv. + A virtual environment is a directory tree which contains Python executable + files and other files which indicate that it is a virtual environment. Common installation tools such as ``Setuptools`` and ``pip`` work as - expected with venvs - i.e. when a venv is active, they install Python - packages into the venv without needing to be told to do so explicitly. + expected with virtual environments. In other words, when a virtual + environment is active, they install Python packages into the virtual + environment without needing to be told to do so explicitly. - When a venv is active (i.e. the venv's Python interpreter is running), the - attributes :attr:`sys.prefix` and :attr:`sys.exec_prefix` point to the base - directory of the venv, whereas :attr:`sys.base_prefix` and - :attr:`sys.base_exec_prefix` point to the non-venv Python installation - which was used to create the venv. If a venv is not active, then - :attr:`sys.prefix` is the same as :attr:`sys.base_prefix` and - :attr:`sys.exec_prefix` is the same as :attr:`sys.base_exec_prefix` (they - all point to a non-venv Python installation). + When a virtual environment is active (i.e., the virtual environment's Python + interpreter is running), the attributes :attr:`sys.prefix` and + :attr:`sys.exec_prefix` point to the base directory of the virtual + environment, whereas :attr:`sys.base_prefix` and + :attr:`sys.base_exec_prefix` point to the non-virtual environment Python + installation which was used to create the virtual environment. If a virtual + environment is not active, then :attr:`sys.prefix` is the same as + :attr:`sys.base_prefix` and :attr:`sys.exec_prefix` is the same as + :attr:`sys.base_exec_prefix` (they all point to a non-virtual environment + Python installation). - When a venv is active, any options that change the installation path will be - ignored from all distutils configuration files to prevent projects being - inadvertently installed outside of the virtual environment. + When a virtual environment is active, any options that change the + installation path will be ignored from all distutils configuration files to + prevent projects being inadvertently installed outside of the virtual + environment. - When working in a command shell, users can make a venv active by running an - ``activate`` script in the venv's executables directory (the precise filename - is shell-dependent), which prepends the venv's directory for executables to - the ``PATH`` environment variable for the running shell. There should be no - need in other circumstances to activate a venv -- scripts installed into - venvs have a shebang line which points to the venv's Python interpreter. This - means that the script will run with that interpreter regardless of the value - of ``PATH``. On Windows, shebang line processing is supported if you have the - Python Launcher for Windows installed (this was added to Python in 3.3 - see - :pep:`397` for more details). Thus, double-clicking an installed script in - a Windows Explorer window should run the script with the correct interpreter - without there needing to be any reference to its venv in ``PATH``. + When working in a command shell, users can make a virtual environment active + by running an ``activate`` script in the virtual environment's executables + directory (the precise filename is shell-dependent), which prepends the + virtual environment's directory for executables to the ``PATH`` environment + variable for the running shell. There should be no need in other + circumstances to activate a virtual environment?scripts installed into + virtual environments have a "shebang" line which points to the virtual + environment's Python interpreter. This means that the script will run with + that interpreter regardless of the value of ``PATH``. On Windows, "shebang" + line processing is supported if you have the Python Launcher for Windows + installed (this was added to Python in 3.3 - see :pep:`397` for more + details). Thus, double-clicking an installed script in a Windows Explorer + window should run the script with the correct interpreter without there + needing to be any reference to its virtual environment in ``PATH``. .. _venv-api: @@ -219,7 +225,7 @@ -------------------------------------- The following script shows how to extend :class:`EnvBuilder` by implementing a -subclass which installs setuptools and pip into a created venv:: +subclass which installs setuptools and pip into a created virtual environment:: import os import os.path @@ -233,12 +239,12 @@ class ExtendedEnvBuilder(venv.EnvBuilder): """ This builder installs setuptools and pip so that you can pip or - easy_install other packages into the created environment. + easy_install other packages into the created virtual environment. :param nodist: If True, setuptools and pip are not installed into the - created environment. + created virtual environment. :param nopip: If True, pip is not installed into the created - environment. + virtual environment. :param progress: If setuptools or pip are installed, the progress of the installation can be monitored by passing a progress callable. If specified, it is called with two @@ -264,10 +270,10 @@ def post_setup(self, context): """ Set up any packages which need to be pre-installed into the - environment being created. + virtual environment being created. - :param context: The information for the environment creation request - being processed. + :param context: The information for the virtual environment + creation request being processed. """ os.environ['VIRTUAL_ENV'] = context.env_dir if not self.nodist: @@ -301,7 +307,7 @@ fn = os.path.split(path)[-1] binpath = context.bin_path distpath = os.path.join(binpath, fn) - # Download script into the env's binaries folder + # Download script into the virtual environment's binaries folder urlretrieve(url, distpath) progress = self.progress if self.verbose: @@ -313,7 +319,7 @@ else: sys.stderr.write('Installing %s ...%s' % (name, term)) sys.stderr.flush() - # Install in the env + # Install in the virtual environment args = [context.env_exe, fn] p = Popen(args, stdout=PIPE, stderr=PIPE, cwd=binpath) t1 = Thread(target=self.reader, args=(p.stdout, 'stdout')) @@ -332,10 +338,10 @@ def install_setuptools(self, context): """ - Install setuptools in the environment. + Install setuptools in the virtual environment. - :param context: The information for the environment creation request - being processed. + :param context: The information for the virtual environment + creation request being processed. """ url = 'https://bitbucket.org/pypa/setuptools/downloads/ez_setup.py' self.install_script(context, 'setuptools', url) @@ -348,10 +354,10 @@ def install_pip(self, context): """ - Install pip in the environment. + Install pip in the virtual environment. - :param context: The information for the environment creation request - being processed. + :param context: The information for the virtual environment + creation request being processed. """ url = 'https://raw.github.com/pypa/pip/master/contrib/get-pip.py' self.install_script(context, 'pip', url) @@ -374,7 +380,8 @@ 'more target ' 'directories.') parser.add_argument('dirs', metavar='ENV_DIR', nargs='+', - help='A directory to create the environment in.') + help='A directory in which to create the + 'virtual environment.') parser.add_argument('--no-setuptools', default=False, action='store_true', dest='nodist', help="Don't install setuptools or pip in the " @@ -398,14 +405,17 @@ 'the platform.') parser.add_argument('--clear', default=False, action='store_true', dest='clear', help='Delete the contents of the ' - 'environment directory if it ' - 'already exists, before ' + 'virtual environment ' + 'directory if it already ' + 'exists, before virtual ' 'environment creation.') parser.add_argument('--upgrade', default=False, action='store_true', - dest='upgrade', help='Upgrade the environment ' - 'directory to use this version ' - 'of Python, assuming Python ' - 'has been upgraded in-place.') + dest='upgrade', help='Upgrade the virtual ' + 'environment directory to ' + 'use this version of ' + 'Python, assuming Python ' + 'has been upgraded ' + 'in-place.') parser.add_argument('--verbose', default=False, action='store_true', dest='verbose', help='Display the output ' 'from the scripts which ' diff --git a/Doc/tutorial/venv.rst b/Doc/tutorial/venv.rst --- a/Doc/tutorial/venv.rst +++ b/Doc/tutorial/venv.rst @@ -20,15 +20,14 @@ the requirements are in conflict and installing either version 1.0 or 2.0 will leave one application unable to run. -The solution for this problem is to create a :term:`virtual -environment` (often shortened to "virtualenv"), a self-contained -directory tree that contains a Python installation for a particular -version of Python, plus a number of additional packages. +The solution for this problem is to create a :term:`virtual environment`, a +self-contained directory tree that contains a Python installation for a +particular version of Python, plus a number of additional packages. Different applications can then use different virtual environments. To resolve the earlier example of conflicting requirements, application A can have its own virtual environment with version 1.0 -installed while application B has another virtualenv with version 2.0. +installed while application B has another virtual environment with version 2.0. If application B requires a library be upgraded to version 3.0, this will not affect application A's environment. @@ -36,29 +35,26 @@ Creating Virtual Environments ============================= -The script used to create and manage virtual environments is called -:program:`pyvenv`. :program:`pyvenv` will usually install the most -recent version of Python that you have available; the script is also -installed with a version number, so if you have multiple versions of -Python on your system you can select a specific Python version by -running ``pyvenv-3.4`` or whichever version you want. +The module used to create and manage virtual environments is called +:mod:`venv`. :mod:`venv` will usually install the most recent version of +Python that you have available. If you have multiple versions of Python on your +system, you can select a specific Python version by running ``python3`` or +whichever version you want. -To create a virtualenv, decide upon a directory -where you want to place it and run :program:`pyvenv` with the -directory path:: +To create a virtual environment, decide upon a directory where you want to +place it, and run the :mod:`venv` module as a script with the directory path:: - pyvenv tutorial-env + python3 -m venv tutorial-env This will create the ``tutorial-env`` directory if it doesn't exist, and also create directories inside it containing a copy of the Python interpreter, the standard library, and various supporting files. -Once you've created a virtual environment, you need to -activate it. +Once you've created a virtual environment, you may activate it. On Windows, run:: - tutorial-env/Scripts/activate + tutorial-env\Scripts\activate.bat On Unix or MacOS, run:: @@ -69,33 +65,36 @@ ``activate.csh`` and ``activate.fish`` scripts you should use instead.) -Activating the virtualenv will change your shell's prompt to show what -virtualenv you're using, and modify the environment so that running -``python`` will get you that particular version and installation of -Python. For example:: +Activating the virtual environment will change your shell's prompt to show what +virtual environment you're using, and modify the environment so that running +``python`` will get you that particular version and installation of Python. +For example: - -> source ~/envs/tutorial-env/bin/activate - (tutorial-env) -> python - Python 3.4.3+ (3.4:c7b9645a6f35+, May 22 2015, 09:31:25) +.. code-block:: bash + + $ source ~/envs/tutorial-env/bin/activate + (tutorial-env) $ python + Python 3.5.1 (default, May 6 2016, 10:59:36) ... >>> import sys >>> sys.path - ['', '/usr/local/lib/python34.zip', ..., - '~/envs/tutorial-env/lib/python3.4/site-packages'] + ['', '/usr/local/lib/python35.zip', ..., + '~/envs/tutorial-env/lib/python3.5/site-packages'] >>> Managing Packages with pip ========================== -Once you've activated a virtual environment, you can install, upgrade, -and remove packages using a program called :program:`pip`. By default -``pip`` will install packages from the Python Package Index, -. You can browse the Python Package Index -by going to it in your web browser, or you can use ``pip``'s -limited search feature:: +You can install, upgrade, and remove packages using a program called +:program:`pip`. By default ``pip`` will install packages from the Python +Package Index, . You can browse the Python +Package Index by going to it in your web browser, or you can use ``pip``'s +limited search feature: - (tutorial-env) -> pip search astronomy +.. code-block:: bash + + (tutorial-env) $ pip search astronomy skyfield - Elegant astronomy for Python gary - Galactic astronomy and gravitational dynamics. novas - The United States Naval Observatory NOVAS astronomy library @@ -107,9 +106,11 @@ "freeze", etc. (Consult the :ref:`installing-index` guide for complete documentation for ``pip``.) -You can install the latest version of a package by specifying a package's name:: +You can install the latest version of a package by specifying a package's name: - -> pip install novas +.. code-block:: bash + + (tutorial-env) $ pip install novas Collecting novas Downloading novas-3.1.1.3.tar.gz (136kB) Installing collected packages: novas @@ -117,9 +118,11 @@ Successfully installed novas-3.1.1.3 You can also install a specific version of a package by giving the -package name followed by ``==`` and the version number:: +package name followed by ``==`` and the version number: - -> pip install requests==2.6.0 +.. code-block:: bash + + (tutorial-env) $ pip install requests==2.6.0 Collecting requests==2.6.0 Using cached requests-2.6.0-py2.py3-none-any.whl Installing collected packages: requests @@ -128,9 +131,11 @@ If you re-run this command, ``pip`` will notice that the requested version is already installed and do nothing. You can supply a different version number to get that version, or you can run ``pip -install --upgrade`` to upgrade the package to the latest version:: +install --upgrade`` to upgrade the package to the latest version: - -> pip install --upgrade requests +.. code-block:: bash + + (tutorial-env) $ pip install --upgrade requests Collecting requests Installing collected packages: requests Found existing installation: requests 2.6.0 @@ -141,9 +146,11 @@ ``pip uninstall`` followed by one or more package names will remove the packages from the virtual environment. -``pip show`` will display information about a particular package:: +``pip show`` will display information about a particular package: - (tutorial-env) -> pip show requests +.. code-block:: bash + + (tutorial-env) $ pip show requests --- Metadata-Version: 2.0 Name: requests @@ -157,9 +164,11 @@ Requires: ``pip list`` will display all of the packages installed in the virtual -environment:: +environment: - (tutorial-env) -> pip list +.. code-block:: bash + + (tutorial-env) $ pip list novas (3.1.1.3) numpy (1.9.2) pip (7.0.3) @@ -168,19 +177,23 @@ ``pip freeze`` will produce a similar list of the installed packages, but the output uses the format that ``pip install`` expects. -A common convention is to put this list in a ``requirements.txt`` file:: +A common convention is to put this list in a ``requirements.txt`` file: - (tutorial-env) -> pip freeze > requirements.txt - (tutorial-env) -> cat requirements.txt +.. code-block:: bash + + (tutorial-env) $ pip freeze > requirements.txt + (tutorial-env) $ cat requirements.txt novas==3.1.1.3 numpy==1.9.2 requests==2.7.0 The ``requirements.txt`` can then be committed to version control and shipped as part of an application. Users can then install all the -necessary packages with ``install -r``:: +necessary packages with ``install -r``: - -> pip install -r requirements.txt +.. code-block:: bash + + (tutorial-env) $ pip install -r requirements.txt Collecting novas==3.1.1.3 (from -r requirements.txt (line 1)) ... Collecting numpy==1.9.2 (from -r requirements.txt (line 2)) diff --git a/Doc/using/index.rst b/Doc/using/index.rst --- a/Doc/using/index.rst +++ b/Doc/using/index.rst @@ -17,4 +17,3 @@ unix.rst windows.rst mac.rst - scripts.rst diff --git a/Doc/using/scripts.rst b/Doc/using/scripts.rst deleted file mode 100644 --- a/Doc/using/scripts.rst +++ /dev/null @@ -1,12 +0,0 @@ -.. _tools-and-scripts: - -Additional Tools and Scripts -============================ - -.. _scripts-pyvenv: - -pyvenv - Creating virtual environments --------------------------------------- - -.. include:: venv-create.inc - diff --git a/Doc/using/venv-create.inc b/Doc/using/venv-create.inc --- a/Doc/using/venv-create.inc +++ b/Doc/using/venv-create.inc @@ -1,31 +1,39 @@ Creation of :ref:`virtual environments ` is done by executing the -``pyvenv`` script:: +command ``venv``:: - pyvenv /path/to/new/virtual/environment + python3 -m venv /path/to/new/virtual/environment Running this command creates the target directory (creating any parent directories that don't exist already) and places a ``pyvenv.cfg`` file in it -with a ``home`` key pointing to the Python installation the command was run -from. It also creates a ``bin`` (or ``Scripts`` on Windows) subdirectory +with a ``home`` key pointing to the Python installation from which the command +was run. It also creates a ``bin`` (or ``Scripts`` on Windows) subdirectory containing a copy of the ``python`` binary (or binaries, in the case of Windows). It also creates an (initially empty) ``lib/pythonX.Y/site-packages`` subdirectory (on Windows, this is ``Lib\site-packages``). +.. deprecated:: 3.6 + ``pyvenv`` was the recommended tool for creating virtual environments for + Python 3.3 and 3.4, and is `deprecated in Python 3.6 + `_. + +.. versionchanged:: 3.5 + The use of ``venv`` is now recommended for creating virtual environments. + .. seealso:: `Python Packaging User Guide: Creating and using virtual environments - `__ + `__ .. highlight:: none -On Windows, you may have to invoke the ``pyvenv`` script as follows, if you -don't have the relevant PATH and PATHEXT settings:: +On Windows, invoke the ``venv`` command as follows:: - c:\Temp>c:\Python35\python c:\Python35\Tools\Scripts\pyvenv.py myenv + c:\>c:\Python35\python -m venv c:\path\to\myenv -or equivalently:: +Alternatively, if you configured the ``PATH`` and ``PATHEXT`` variables for +your :ref:`Python installation `:: - c:\Temp>c:\Python35\python -m venv myenv + c:\>python -m venv myenv c:\path\to\myenv The command, if run with ``-h``, will show the available options:: @@ -36,25 +44,26 @@ Creates virtual Python environments in one or more target directories. positional arguments: - ENV_DIR A directory to create the environment in. + ENV_DIR A directory to create the environment in. optional arguments: - -h, --help show this help message and exit - --system-site-packages Give the virtual environment access to the system - site-packages dir. - --symlinks Try to use symlinks rather than copies, when symlinks - are not the default for the platform. - --copies Try to use copies rather than symlinks, even when - symlinks are the default for the platform. - --clear Delete the contents of the environment directory if it - already exists, before environment creation. - --upgrade Upgrade the environment directory to use this version - of Python, assuming Python has been upgraded in-place. - --without-pip Skips installing or upgrading pip in the virtual - environment (pip is bootstrapped by default) + -h, --help show this help message and exit + --system-site-packages + Give the virtual environment access to the system + site-packages dir. + --symlinks Try to use symlinks rather than copies, when symlinks + are not the default for the platform. + --copies Try to use copies rather than symlinks, even when + symlinks are the default for the platform. + --clear Delete the contents of the environment directory if it + already exists, before environment creation. + --upgrade Upgrade the environment directory to use this version + of Python, assuming Python has been upgraded in-place. + --without-pip Skips installing or upgrading pip in the virtual + environment (pip is bootstrapped by default) -Depending on how the ``venv`` functionality has been invoked, the usage message -may vary slightly, e.g. referencing ``pyvenv`` rather than ``venv``. + Once an environment has been created, you may wish to activate it, e.g. by + sourcing an activate script in its bin directory. .. versionchanged:: 3.4 Installs pip by default, added the ``--without-pip`` and ``--copies`` @@ -73,12 +82,13 @@ Unless the ``--without-pip`` option is given, :mod:`ensurepip` will be invoked to bootstrap ``pip`` into the virtual environment. -Multiple paths can be given to ``pyvenv``, in which case an identical -virtualenv will be created, according to the given options, at each -provided path. +Multiple paths can be given to ``venv``, in which case an identical virtual +environment will be created, according to the given options, at each provided +path. -Once a venv has been created, it can be "activated" using a script in the -venv's binary directory. The invocation of the script is platform-specific: +Once a virtual environment has been created, it can be "activated" using a +script in the virtual environment's binary directory. The invocation of the +script is platform-specific: +-------------+-----------------+-----------------------------------------+ | Platform | Shell | Command to activate virtual environment | @@ -95,16 +105,17 @@ +-------------+-----------------+-----------------------------------------+ You don't specifically *need* to activate an environment; activation just -prepends the venv's binary directory to your path, so that "python" invokes the -venv's Python interpreter and you can run installed scripts without having to -use their full path. However, all scripts installed in a venv should be -runnable without activating it, and run with the venv's Python automatically. +prepends the virtual environment's binary directory to your path, so that +"python" invokes the virtual environment's Python interpreter and you can run +installed scripts without having to use their full path. However, all scripts +installed in a virtual environment should be runnable without activating it, +and run with the virtual environment's Python automatically. -You can deactivate a venv by typing "deactivate" in your shell. The exact -mechanism is platform-specific: for example, the Bash activation script defines -a "deactivate" function, whereas on Windows there are separate scripts called -``deactivate.bat`` and ``Deactivate.ps1`` which are installed when the venv is -created. +You can deactivate a virtual environment by typing "deactivate" in your shell. +The exact mechanism is platform-specific: for example, the Bash activation +script defines a "deactivate" function, whereas on Windows there are separate +scripts called ``deactivate.bat`` and ``Deactivate.ps1`` which are installed +when the virtual environment is created. .. versionadded:: 3.4 ``fish`` and ``csh`` activation scripts. diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1150,6 +1150,7 @@ Christopher J. Phoenix James Pickering Neale Pickett +Steve Piercy Jim St. Pierre Dan Pierson Martijn Pieters diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -154,6 +154,12 @@ - Issue #27418: Fixed Tools/importbench/importbench.py. +Documentation +------------- + +- Issue #27285: Update documentation to reflect the deprecation of ``pyvenv`` + and normalize on the term "virtual environment". Patch by Steve Piercy. + What's New in Python 3.6.0 alpha 2 ================================== -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 8 14:00:06 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 08 Jul 2016 18:00:06 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2326896=3A_Disambig?= =?utf-8?q?uate_uses_of_=22importer=22_with_=22finder=22=2E?= Message-ID: <20160708180005.24055.38529.82315C62@psf.io> https://hg.python.org/cpython/rev/c65f34dafcc1 changeset: 102289:c65f34dafcc1 user: Brett Cannon date: Fri Jul 08 11:00:00 2016 -0700 summary: Issue #26896: Disambiguate uses of "importer" with "finder". Thanks to Oren Milman for the patch. files: Doc/c-api/import.rst | 8 +- Doc/library/pkgutil.rst | 18 ++++---- Lib/pkgutil.py | 22 +++++----- Lib/runpy.py | 4 +- Lib/test/test_importlib/import_/test_meta_path.py | 1 - Lib/test/test_importlib/util.py | 1 - Lib/test/test_pkgutil.py | 2 +- Misc/ACKS | 1 + Python/import.c | 7 +- 9 files changed, 32 insertions(+), 32 deletions(-) diff --git a/Doc/c-api/import.rst b/Doc/c-api/import.rst --- a/Doc/c-api/import.rst +++ b/Doc/c-api/import.rst @@ -207,13 +207,13 @@ .. c:function:: PyObject* PyImport_GetImporter(PyObject *path) - Return an importer object for a :data:`sys.path`/:attr:`pkg.__path__` item + Return a finder object for a :data:`sys.path`/:attr:`pkg.__path__` item *path*, possibly by fetching it from the :data:`sys.path_importer_cache` dict. If it wasn't yet cached, traverse :data:`sys.path_hooks` until a hook is found that can handle the path item. Return ``None`` if no hook could; - this tells our caller it should fall back to the built-in import mechanism. - Cache the result in :data:`sys.path_importer_cache`. Return a new reference - to the importer object. + this tells our caller that the :term:`path based finder` could not find a + finder for this path item. Cache the result in :data:`sys.path_importer_cache`. + Return a new reference to the finder object. .. c:function:: void _PyImport_Init() diff --git a/Doc/library/pkgutil.rst b/Doc/library/pkgutil.rst --- a/Doc/library/pkgutil.rst +++ b/Doc/library/pkgutil.rst @@ -46,10 +46,10 @@ .. class:: ImpImporter(dirname=None) - :pep:`302` Importer that wraps Python's "classic" import algorithm. + :pep:`302` Finder that wraps Python's "classic" import algorithm. - If *dirname* is a string, a :pep:`302` importer is created that searches that - directory. If *dirname* is ``None``, a :pep:`302` importer is created that + If *dirname* is a string, a :pep:`302` finder is created that searches that + directory. If *dirname* is ``None``, a :pep:`302` finder is created that searches the current :data:`sys.path`, plus any modules that are frozen or built-in. @@ -88,9 +88,9 @@ .. function:: get_importer(path_item) - Retrieve a :pep:`302` importer for the given *path_item*. + Retrieve a :pep:`302` finder for the given *path_item*. - The returned importer is cached in :data:`sys.path_importer_cache` if it was + The returned finder is cached in :data:`sys.path_importer_cache` if it was newly created by a path hook. The cache (or part of it) can be cleared manually if a rescan of @@ -121,16 +121,16 @@ .. function:: iter_importers(fullname='') - Yield :pep:`302` importers for the given module name. + Yield :pep:`302` finders for the given module name. - If fullname contains a '.', the importers will be for the package + If fullname contains a '.', the finders will be for the package containing fullname, otherwise they will be all registered top level - importers (i.e. those on both sys.meta_path and sys.path_hooks). + finders (i.e. those on both sys.meta_path and sys.path_hooks). If the named module is in a package, that package is imported as a side effect of invoking this function. - If no module name is specified, all top level importers are produced. + If no module name is specified, all top level finders are produced. .. versionchanged:: 3.3 Updated to be based directly on :mod:`importlib` rather than relying diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py --- a/Lib/pkgutil.py +++ b/Lib/pkgutil.py @@ -45,7 +45,7 @@ def walk_packages(path=None, prefix='', onerror=None): - """Yields (module_loader, name, ispkg) for all modules recursively + """Yields (module_finder, name, ispkg) for all modules recursively on path, or, if path is None, all accessible modules. 'path' should be either None or a list of paths to look for @@ -102,7 +102,7 @@ def iter_modules(path=None, prefix=''): - """Yields (module_loader, name, ispkg) for all submodules on path, + """Yields (module_finder, name, ispkg) for all submodules on path, or, if path is None, all top-level modules on sys.path. 'path' should be either None or a list of paths to look for @@ -184,10 +184,10 @@ imp = importlib.import_module('imp') class ImpImporter: - """PEP 302 Importer that wraps Python's "classic" import algorithm + """PEP 302 Finder that wraps Python's "classic" import algorithm - ImpImporter(dirname) produces a PEP 302 importer that searches that - directory. ImpImporter(None) produces a PEP 302 importer that searches + ImpImporter(dirname) produces a PEP 302 finder that searches that + directory. ImpImporter(None) produces a PEP 302 finder that searches the current sys.path, plus any modules that are frozen or built-in. Note that ImpImporter does not currently support being used by placement @@ -395,9 +395,9 @@ def get_importer(path_item): - """Retrieve a PEP 302 importer for the given path item + """Retrieve a PEP 302 finder for the given path item - The returned importer is cached in sys.path_importer_cache + The returned finder is cached in sys.path_importer_cache if it was newly created by a path hook. The cache (or part of it) can be cleared manually if a @@ -419,16 +419,16 @@ def iter_importers(fullname=""): - """Yield PEP 302 importers for the given module name + """Yield PEP 302 finders for the given module name - If fullname contains a '.', the importers will be for the package + If fullname contains a '.', the finders will be for the package containing fullname, otherwise they will be all registered top level - importers (i.e. those on both sys.meta_path and sys.path_hooks). + finders (i.e. those on both sys.meta_path and sys.path_hooks). If the named module is in a package, that package is imported as a side effect of invoking this function. - If no module name is specified, all top level importers are produced. + If no module name is specified, all top level finders are produced. """ if fullname.startswith('.'): msg = "Relative module name {!r} not supported".format(fullname) diff --git a/Lib/runpy.py b/Lib/runpy.py --- a/Lib/runpy.py +++ b/Lib/runpy.py @@ -98,7 +98,7 @@ # may be cleared when the temporary module goes away return mod_globals.copy() -# Helper to get the loader, code and filename for a module +# Helper to get the full name, spec and code for a module def _get_module_details(mod_name, error=ImportError): if mod_name.startswith("."): raise error("Relative module names not supported") @@ -253,7 +253,7 @@ return _run_module_code(code, init_globals, run_name, pkg_name=pkg_name, script_name=fname) else: - # Importer is defined for path, so add it to + # Finder is defined for path, so add it to # the start of sys.path sys.path.insert(0, path_name) try: diff --git a/Lib/test/test_importlib/import_/test_meta_path.py b/Lib/test/test_importlib/import_/test_meta_path.py --- a/Lib/test/test_importlib/import_/test_meta_path.py +++ b/Lib/test/test_importlib/import_/test_meta_path.py @@ -76,7 +76,6 @@ self.__import__(mod_name) assert len(log) == 1 args = log[0][0] - kwargs = log[0][1] # Assuming all arguments are positional. self.assertEqual(args[0], mod_name) self.assertIsNone(args[1]) diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py --- a/Lib/test/test_importlib/util.py +++ b/Lib/test/test_importlib/util.py @@ -266,7 +266,6 @@ module = self.modules[fullname] except KeyError: return None - is_package = hasattr(module, '__path__') spec = util.spec_from_file_location( fullname, module.__file__, loader=self, submodule_search_locations=getattr(module, '__path__', None)) diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py --- a/Lib/test/test_pkgutil.py +++ b/Lib/test/test_pkgutil.py @@ -205,7 +205,7 @@ del sys.meta_path[0] def test_getdata_pep302(self): - # Use a dummy importer/loader + # Use a dummy finder/loader self.assertEqual(pkgutil.get_data('foo', 'dummy'), "Hello, world!") del sys.modules['foo'] diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -998,6 +998,7 @@ Jason V. Miller Jay T. Miller Katie Miller +Oren Milman Roman Milner Julien Miotte Andrii V. Mishkovskyi diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -950,12 +950,13 @@ } -/* Return an importer object for a sys.path/pkg.__path__ item 'p', +/* Return a finder object for a sys.path/pkg.__path__ item 'p', possibly by fetching it from the path_importer_cache dict. If it wasn't yet cached, traverse path_hooks until a hook is found that can handle the path item. Return None if no hook could; - this tells our caller it should fall back to the builtin - import mechanism. Cache the result in path_importer_cache. + this tells our caller that the path based finder could not find + a finder for this path item. Cache the result in + path_importer_cache. Returns a borrowed reference. */ static PyObject * -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 8 14:09:39 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 08 Jul 2016 18:09:39 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2326972=3A_Fix_some?= =?utf-8?q?_mistakes_in_importlib-related_docstrings=2E?= Message-ID: <20160708180939.6275.38674.BEA72793@psf.io> https://hg.python.org/cpython/rev/d32517de5d8c changeset: 102290:d32517de5d8c user: Brett Cannon date: Fri Jul 08 11:09:35 2016 -0700 summary: Issue #26972: Fix some mistakes in importlib-related docstrings. Thanks to Oren Milman for the patch. files: Lib/importlib/_bootstrap.py | 6 ++-- Lib/importlib/_bootstrap_external.py | 18 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -270,7 +270,7 @@ # Module specifications ####################################################### def _module_repr(module): - # The implementation of ModuleType__repr__(). + # The implementation of ModuleType.__repr__(). loader = getattr(module, '__loader__', None) if hasattr(loader, 'module_repr'): # As soon as BuiltinImporter, FrozenImporter, and NamespaceLoader @@ -603,7 +603,7 @@ # Used by importlib.reload() and _load_module_shim(). def _exec(spec, module): - """Execute the spec in an existing module's namespace.""" + """Execute the spec's specified module in an existing module's namespace.""" name = spec.name _imp.acquire_lock() with _ModuleLockManager(name): @@ -877,7 +877,7 @@ def _find_spec(name, path, target=None): - """Find a module's loader.""" + """Find a module's spec.""" meta_path = sys.meta_path if meta_path is None: # PyImport_Cleanup() is running or has been called. diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -1048,11 +1048,7 @@ @classmethod def _path_hooks(cls, path): - """Search sequence of hooks for a finder for 'path'. - - If 'hooks' is false then use sys.path_hooks. - - """ + """Search sys.path_hooks for a finder for 'path'.""" if sys.path_hooks is not None and not sys.path_hooks: _warnings.warn('sys.path_hooks is empty', ImportWarning) for hook in sys.path_hooks: @@ -1134,8 +1130,10 @@ @classmethod def find_spec(cls, fullname, path=None, target=None): - """find the module on sys.path or 'path' based on sys.path_hooks and - sys.path_importer_cache.""" + """Try to find a spec for 'fullname' on sys.path or 'path'. + + The search is based on sys.path_hooks and sys.path_importer_cache. + """ if path is None: path = sys.path spec = cls._get_spec(fullname, path, target) @@ -1215,8 +1213,10 @@ submodule_search_locations=smsl) def find_spec(self, fullname, target=None): - """Try to find a spec for the specified module. Returns the - matching spec, or None if not found.""" + """Try to find a spec for the specified module. + + Returns the matching spec, or None if not found. + """ is_namespace = False tail_module = fullname.rpartition('.')[2] try: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 8 19:44:58 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 08 Jul 2016 23:44:58 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Update_frozen_importlib_co?= =?utf-8?q?de?= Message-ID: <20160708234458.59397.39921.A3ED3AE7@psf.io> https://hg.python.org/cpython/rev/d56dc6327de8 changeset: 102291:d56dc6327de8 user: Brett Cannon date: Fri Jul 08 16:44:54 2016 -0700 summary: Update frozen importlib code files: Python/importlib.h | 1687 +++++++++++----------- Python/importlib_external.h | 1193 ++++++++-------- 2 files changed, 1440 insertions(+), 1440 deletions(-) diff --git a/Python/importlib.h b/Python/importlib.h --- a/Python/importlib.h +++ b/Python/importlib.h [stripped] diff --git a/Python/importlib_external.h b/Python/importlib_external.h --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1821,606 +1821,605 @@ 106,1,68,0,93,36,125,2,121,8,124,2,124,1,131,1, 83,0,4,0,116,5,107,10,114,72,1,0,1,0,1,0, 119,38,89,0,113,38,88,0,113,38,87,0,100,1,83,0, - 100,1,83,0,41,3,122,113,83,101,97,114,99,104,32,115, - 101,113,117,101,110,99,101,32,111,102,32,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,10,10,32,32,32,32,32, - 32,32,32,73,102,32,39,104,111,111,107,115,39,32,105,115, - 32,102,97,108,115,101,32,116,104,101,110,32,117,115,101,32, - 115,121,115,46,112,97,116,104,95,104,111,111,107,115,46,10, - 10,32,32,32,32,32,32,32,32,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,7,0,0,0,218,10,112,97,116,104, - 95,104,111,111,107,115,114,61,0,0,0,114,62,0,0,0, - 114,119,0,0,0,114,100,0,0,0,41,3,114,165,0,0, - 0,114,35,0,0,0,90,4,104,111,111,107,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, - 116,104,95,104,111,111,107,115,25,4,0,0,115,16,0,0, - 0,0,7,18,1,12,1,12,1,2,1,8,1,14,1,12, - 2,122,22,80,97,116,104,70,105,110,100,101,114,46,95,112, - 97,116,104,95,104,111,111,107,115,99,2,0,0,0,0,0, - 0,0,3,0,0,0,19,0,0,0,67,0,0,0,115,102, - 0,0,0,124,1,100,1,107,2,114,42,121,12,116,0,106, - 1,131,0,125,1,87,0,110,20,4,0,116,2,107,10,114, - 40,1,0,1,0,1,0,100,2,83,0,88,0,121,14,116, - 3,106,4,124,1,25,0,125,2,87,0,110,40,4,0,116, - 5,107,10,114,96,1,0,1,0,1,0,124,0,106,6,124, - 1,131,1,125,2,124,2,116,3,106,4,124,1,60,0,89, - 0,110,2,88,0,124,2,83,0,41,3,122,210,71,101,116, - 32,116,104,101,32,102,105,110,100,101,114,32,102,111,114,32, - 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,102, - 114,111,109,32,115,121,115,46,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, - 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, - 104,32,101,110,116,114,121,32,105,115,32,110,111,116,32,105, - 110,32,116,104,101,32,99,97,99,104,101,44,32,102,105,110, - 100,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116, - 101,32,102,105,110,100,101,114,10,32,32,32,32,32,32,32, - 32,97,110,100,32,99,97,99,104,101,32,105,116,46,32,73, - 102,32,110,111,32,102,105,110,100,101,114,32,105,115,32,97, - 118,97,105,108,97,98,108,101,44,32,115,116,111,114,101,32, - 78,111,110,101,46,10,10,32,32,32,32,32,32,32,32,114, - 30,0,0,0,78,41,7,114,3,0,0,0,114,45,0,0, - 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, - 114,114,111,114,114,7,0,0,0,114,248,0,0,0,114,132, - 0,0,0,114,252,0,0,0,41,3,114,165,0,0,0,114, - 35,0,0,0,114,250,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,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,42,4, - 0,0,115,22,0,0,0,0,8,8,1,2,1,12,1,14, - 3,6,1,2,1,14,1,14,1,10,1,16,1,122,31,80, - 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, - 105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3, - 0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,67, - 0,0,0,115,82,0,0,0,116,0,124,2,100,1,131,2, - 114,26,124,2,106,1,124,1,131,1,92,2,125,3,125,4, - 110,14,124,2,106,2,124,1,131,1,125,3,103,0,125,4, - 124,3,100,0,107,9,114,60,116,3,106,4,124,1,124,3, - 131,2,83,0,116,3,106,5,124,1,100,0,131,2,125,5, - 124,4,124,5,95,6,124,5,83,0,41,2,78,114,118,0, - 0,0,41,7,114,109,0,0,0,114,118,0,0,0,114,177, - 0,0,0,114,115,0,0,0,114,174,0,0,0,114,155,0, - 0,0,114,151,0,0,0,41,6,114,165,0,0,0,114,120, - 0,0,0,114,250,0,0,0,114,121,0,0,0,114,122,0, - 0,0,114,159,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,16,95,108,101,103,97,99,121,95, - 103,101,116,95,115,112,101,99,64,4,0,0,115,18,0,0, - 0,0,4,10,1,16,2,10,1,4,1,8,1,12,1,12, - 1,6,1,122,27,80,97,116,104,70,105,110,100,101,114,46, - 95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99, - 78,99,4,0,0,0,0,0,0,0,9,0,0,0,5,0, - 0,0,67,0,0,0,115,170,0,0,0,103,0,125,4,120, - 160,124,2,68,0,93,130,125,5,116,0,124,5,116,1,116, - 2,102,2,131,2,115,30,113,10,124,0,106,3,124,5,131, - 1,125,6,124,6,100,1,107,9,114,10,116,4,124,6,100, - 2,131,2,114,72,124,6,106,5,124,1,124,3,131,2,125, - 7,110,12,124,0,106,6,124,1,124,6,131,2,125,7,124, - 7,100,1,107,8,114,94,113,10,124,7,106,7,100,1,107, - 9,114,108,124,7,83,0,124,7,106,8,125,8,124,8,100, - 1,107,8,114,130,116,9,100,3,131,1,130,1,124,4,106, - 10,124,8,131,1,1,0,113,10,87,0,116,11,106,12,124, - 1,100,1,131,2,125,7,124,4,124,7,95,8,124,7,83, - 0,100,1,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,176,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,138,0,0,0,114,70,0,0,0,218, - 5,98,121,116,101,115,114,254,0,0,0,114,109,0,0,0, - 114,176,0,0,0,114,255,0,0,0,114,121,0,0,0,114, - 151,0,0,0,114,100,0,0,0,114,144,0,0,0,114,115, - 0,0,0,114,155,0,0,0,41,9,114,165,0,0,0,114, - 120,0,0,0,114,35,0,0,0,114,175,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,250,0,0,0,114,159,0,0,0,114, - 122,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,9,95,103,101,116,95,115,112,101,99,79,4, - 0,0,115,40,0,0,0,0,5,4,1,10,1,14,1,2, - 1,10,1,8,1,10,1,14,2,12,1,8,1,2,1,10, - 1,4,1,6,1,8,1,8,5,14,2,12,1,6,1,122, - 20,80,97,116,104,70,105,110,100,101,114,46,95,103,101,116, - 95,115,112,101,99,99,4,0,0,0,0,0,0,0,6,0, - 0,0,4,0,0,0,67,0,0,0,115,104,0,0,0,124, - 2,100,1,107,8,114,14,116,0,106,1,125,2,124,0,106, - 2,124,1,124,2,124,3,131,3,125,4,124,4,100,1,107, - 8,114,42,100,1,83,0,110,58,124,4,106,3,100,1,107, - 8,114,96,124,4,106,4,125,5,124,5,114,90,100,2,124, - 4,95,5,116,6,124,1,124,5,124,0,106,2,131,3,124, - 4,95,4,124,4,83,0,113,100,100,1,83,0,110,4,124, - 4,83,0,100,1,83,0,41,3,122,98,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,78,90,9, - 110,97,109,101,115,112,97,99,101,41,7,114,7,0,0,0, - 114,35,0,0,0,114,2,1,0,0,114,121,0,0,0,114, - 151,0,0,0,114,153,0,0,0,114,225,0,0,0,41,6, - 114,165,0,0,0,114,120,0,0,0,114,35,0,0,0,114, - 175,0,0,0,114,159,0,0,0,114,1,1,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,176,0, - 0,0,111,4,0,0,115,26,0,0,0,0,4,8,1,6, - 1,14,1,8,1,6,1,10,1,6,1,4,3,6,1,16, - 1,6,2,6,2,122,20,80,97,116,104,70,105,110,100,101, - 114,46,102,105,110,100,95,115,112,101,99,99,3,0,0,0, - 0,0,0,0,4,0,0,0,3,0,0,0,67,0,0,0, - 115,30,0,0,0,124,0,106,0,124,1,124,2,131,2,125, - 3,124,3,100,1,107,8,114,24,100,1,83,0,124,3,106, - 1,83,0,41,2,122,170,102,105,110,100,32,116,104,101,32, - 109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,97, - 116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,115, - 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, - 111,111,107,115,32,97,110,100,10,32,32,32,32,32,32,32, + 100,1,83,0,41,3,122,46,83,101,97,114,99,104,32,115, + 121,115,46,112,97,116,104,95,104,111,111,107,115,32,102,111, + 114,32,97,32,102,105,110,100,101,114,32,102,111,114,32,39, + 112,97,116,104,39,46,78,122,23,115,121,115,46,112,97,116, + 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, + 41,6,114,7,0,0,0,218,10,112,97,116,104,95,104,111, + 111,107,115,114,61,0,0,0,114,62,0,0,0,114,119,0, + 0,0,114,100,0,0,0,41,3,114,165,0,0,0,114,35, + 0,0,0,90,4,104,111,111,107,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,11,95,112,97,116,104,95, + 104,111,111,107,115,25,4,0,0,115,16,0,0,0,0,3, + 18,1,12,1,12,1,2,1,8,1,14,1,12,2,122,22, + 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, + 95,104,111,111,107,115,99,2,0,0,0,0,0,0,0,3, + 0,0,0,19,0,0,0,67,0,0,0,115,102,0,0,0, + 124,1,100,1,107,2,114,42,121,12,116,0,106,1,131,0, + 125,1,87,0,110,20,4,0,116,2,107,10,114,40,1,0, + 1,0,1,0,100,2,83,0,88,0,121,14,116,3,106,4, + 124,1,25,0,125,2,87,0,110,40,4,0,116,5,107,10, + 114,96,1,0,1,0,1,0,124,0,106,6,124,1,131,1, + 125,2,124,2,116,3,106,4,124,1,60,0,89,0,110,2, + 88,0,124,2,83,0,41,3,122,210,71,101,116,32,116,104, + 101,32,102,105,110,100,101,114,32,102,111,114,32,116,104,101, + 32,112,97,116,104,32,101,110,116,114,121,32,102,114,111,109, 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, - 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, - 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, - 32,78,41,2,114,176,0,0,0,114,121,0,0,0,41,4, - 114,165,0,0,0,114,120,0,0,0,114,35,0,0,0,114, + 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,30,0,0, + 0,78,41,7,114,3,0,0,0,114,45,0,0,0,218,17, + 70,105,108,101,78,111,116,70,111,117,110,100,69,114,114,111, + 114,114,7,0,0,0,114,248,0,0,0,114,132,0,0,0, + 114,252,0,0,0,41,3,114,165,0,0,0,114,35,0,0, + 0,114,250,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,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,38,4,0,0,115, + 22,0,0,0,0,8,8,1,2,1,12,1,14,3,6,1, + 2,1,14,1,14,1,10,1,16,1,122,31,80,97,116,104, + 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, + 0,0,0,0,6,0,0,0,3,0,0,0,67,0,0,0, + 115,82,0,0,0,116,0,124,2,100,1,131,2,114,26,124, + 2,106,1,124,1,131,1,92,2,125,3,125,4,110,14,124, + 2,106,2,124,1,131,1,125,3,103,0,125,4,124,3,100, + 0,107,9,114,60,116,3,106,4,124,1,124,3,131,2,83, + 0,116,3,106,5,124,1,100,0,131,2,125,5,124,4,124, + 5,95,6,124,5,83,0,41,2,78,114,118,0,0,0,41, + 7,114,109,0,0,0,114,118,0,0,0,114,177,0,0,0, + 114,115,0,0,0,114,174,0,0,0,114,155,0,0,0,114, + 151,0,0,0,41,6,114,165,0,0,0,114,120,0,0,0, + 114,250,0,0,0,114,121,0,0,0,114,122,0,0,0,114, 159,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,177,0,0,0,133,4,0,0,115,8,0,0, - 0,0,8,12,1,8,1,4,1,122,22,80,97,116,104,70, - 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, - 101,41,1,78,41,2,78,78,41,1,78,41,12,114,106,0, - 0,0,114,105,0,0,0,114,107,0,0,0,114,108,0,0, - 0,114,178,0,0,0,114,247,0,0,0,114,252,0,0,0, - 114,254,0,0,0,114,255,0,0,0,114,2,1,0,0,114, - 176,0,0,0,114,177,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,246,0, - 0,0,13,4,0,0,115,22,0,0,0,8,2,4,2,12, - 8,12,17,12,22,12,15,2,1,12,31,2,1,12,21,2, - 1,114,246,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,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,5, - 0,0,0,5,0,0,0,7,0,0,0,115,88,0,0,0, - 103,0,125,3,120,40,124,2,68,0,93,32,92,2,137,0, - 125,4,124,3,106,0,135,0,102,1,100,1,100,2,132,8, - 124,4,68,0,131,1,131,1,1,0,113,10,87,0,124,3, - 124,0,95,1,124,1,112,58,100,3,124,0,95,2,100,6, - 124,0,95,3,116,4,131,0,124,0,95,5,116,4,131,0, - 124,0,95,6,100,5,83,0,41,7,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,2, - 0,0,0,3,0,0,0,51,0,0,0,115,22,0,0,0, - 124,0,93,14,125,1,124,1,136,0,102,2,86,0,1,0, - 113,2,100,0,83,0,41,1,78,114,4,0,0,0,41,2, - 114,22,0,0,0,114,220,0,0,0,41,1,114,121,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,222,0,0,0, - 162,4,0,0,115,2,0,0,0,4,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,59,0,0,0,114,29,0,0,0,78,114,88, - 0,0,0,41,7,114,144,0,0,0,218,8,95,108,111,97, - 100,101,114,115,114,35,0,0,0,218,11,95,112,97,116,104, - 95,109,116,105,109,101,218,3,115,101,116,218,11,95,112,97, - 116,104,95,99,97,99,104,101,218,19,95,114,101,108,97,120, - 101,100,95,112,97,116,104,95,99,97,99,104,101,41,5,114, - 101,0,0,0,114,35,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,161,0,0,0,114,4,0,0,0,41,1,114,121, - 0,0,0,114,5,0,0,0,114,180,0,0,0,156,4,0, - 0,115,16,0,0,0,0,4,4,1,14,1,28,1,6,2, - 10,1,6,1,8,1,122,19,70,105,108,101,70,105,110,100, - 101,114,46,95,95,105,110,105,116,95,95,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, - 115,10,0,0,0,100,3,124,0,95,0,100,2,83,0,41, - 4,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,29,0,0,0,78,114,88,0,0,0,41,1,114, - 5,1,0,0,41,1,114,101,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,247,0,0,0,170, - 4,0,0,115,2,0,0,0,0,2,122,28,70,105,108,101, - 70,105,110,100,101,114,46,105,110,118,97,108,105,100,97,116, - 101,95,99,97,99,104,101,115,99,2,0,0,0,0,0,0, - 0,3,0,0,0,2,0,0,0,67,0,0,0,115,42,0, - 0,0,124,0,106,0,124,1,131,1,125,2,124,2,100,1, - 107,8,114,26,100,1,103,0,102,2,83,0,124,2,106,1, - 124,2,106,2,112,38,103,0,102,2,83,0,41,2,122,197, - 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, - 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, - 99,105,102,105,101,100,32,109,111,100,117,108,101,44,32,111, - 114,32,116,104,101,32,110,97,109,101,115,112,97,99,101,10, - 32,32,32,32,32,32,32,32,112,97,99,107,97,103,101,32, - 112,111,114,116,105,111,110,115,46,32,82,101,116,117,114,110, - 115,32,40,108,111,97,100,101,114,44,32,108,105,115,116,45, - 111,102,45,112,111,114,116,105,111,110,115,41,46,10,10,32, - 32,32,32,32,32,32,32,84,104,105,115,32,109,101,116,104, - 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 46,32,32,85,115,101,32,102,105,110,100,95,115,112,101,99, - 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, - 32,32,32,32,32,78,41,3,114,176,0,0,0,114,121,0, - 0,0,114,151,0,0,0,41,3,114,101,0,0,0,114,120, - 0,0,0,114,159,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,118,0,0,0,176,4,0,0, - 115,8,0,0,0,0,7,10,1,8,1,8,1,122,22,70, - 105,108,101,70,105,110,100,101,114,46,102,105,110,100,95,108, - 111,97,100,101,114,99,6,0,0,0,0,0,0,0,7,0, - 0,0,7,0,0,0,67,0,0,0,115,30,0,0,0,124, - 1,124,2,124,3,131,2,125,6,116,0,124,2,124,3,100, - 1,124,6,100,2,124,4,144,2,131,2,83,0,41,3,78, - 114,121,0,0,0,114,151,0,0,0,41,1,114,162,0,0, - 0,41,7,114,101,0,0,0,114,160,0,0,0,114,120,0, - 0,0,114,35,0,0,0,90,4,115,109,115,108,114,175,0, - 0,0,114,121,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,2,1,0,0,188,4,0,0,115, - 6,0,0,0,0,1,10,1,12,1,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,14,0,0,0,15,0, - 0,0,67,0,0,0,115,100,1,0,0,100,1,125,3,124, - 1,106,0,100,2,131,1,100,3,25,0,125,4,121,24,116, - 1,124,0,106,2,112,34,116,3,106,4,131,0,131,1,106, - 5,125,5,87,0,110,24,4,0,116,6,107,10,114,66,1, - 0,1,0,1,0,100,10,125,5,89,0,110,2,88,0,124, - 5,124,0,106,7,107,3,114,92,124,0,106,8,131,0,1, - 0,124,5,124,0,95,7,116,9,131,0,114,114,124,0,106, - 10,125,6,124,4,106,11,131,0,125,7,110,10,124,0,106, - 12,125,6,124,4,125,7,124,7,124,6,107,6,114,218,116, - 13,124,0,106,2,124,4,131,2,125,8,120,72,124,0,106, - 14,68,0,93,54,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,152,124,0,106,16,124,10,124,1,124,12,124, - 8,103,1,124,2,131,5,83,0,113,152,87,0,116,17,124, - 8,131,1,125,3,120,90,124,0,106,14,68,0,93,80,92, - 2,125,9,125,10,116,13,124,0,106,2,124,4,124,9,23, - 0,131,2,125,12,116,18,106,19,100,6,124,12,100,7,100, - 3,144,1,131,2,1,0,124,7,124,9,23,0,124,6,107, - 6,114,226,116,15,124,12,131,1,114,226,124,0,106,16,124, - 10,124,1,124,12,100,8,124,2,131,5,83,0,113,226,87, - 0,124,3,144,1,114,96,116,18,106,19,100,9,124,8,131, - 2,1,0,116,18,106,20,124,1,100,8,131,2,125,13,124, - 8,103,1,124,13,95,21,124,13,83,0,100,8,83,0,41, - 11,122,102,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,32, - 32,82,101,116,117,114,110,115,32,116,104,101,10,32,32,32, - 32,32,32,32,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,70,114,59,0,0,0,114, - 57,0,0,0,114,29,0,0,0,114,180,0,0,0,122,9, - 116,114,121,105,110,103,32,123,125,90,9,118,101,114,98,111, - 115,105,116,121,78,122,25,112,111,115,115,105,98,108,101,32, - 110,97,109,101,115,112,97,99,101,32,102,111,114,32,123,125, - 114,88,0,0,0,41,22,114,32,0,0,0,114,39,0,0, - 0,114,35,0,0,0,114,3,0,0,0,114,45,0,0,0, - 114,214,0,0,0,114,40,0,0,0,114,5,1,0,0,218, - 11,95,102,105,108,108,95,99,97,99,104,101,114,6,0,0, - 0,114,8,1,0,0,114,89,0,0,0,114,7,1,0,0, - 114,28,0,0,0,114,4,1,0,0,114,44,0,0,0,114, - 2,1,0,0,114,46,0,0,0,114,115,0,0,0,114,130, - 0,0,0,114,155,0,0,0,114,151,0,0,0,41,14,114, - 101,0,0,0,114,120,0,0,0,114,175,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,127,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,220, - 0,0,0,114,160,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,159,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,176,0,0,0,193,4,0,0,115, - 70,0,0,0,0,3,4,1,14,1,2,1,24,1,14,1, - 10,1,10,1,8,1,6,2,6,1,6,1,10,2,6,1, - 4,2,8,1,12,1,16,1,8,1,10,1,8,1,24,4, - 8,2,16,1,16,1,18,1,12,1,8,1,10,1,12,1, - 6,1,12,1,12,1,8,1,4,1,122,20,70,105,108,101, - 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, - 99,1,0,0,0,0,0,0,0,9,0,0,0,13,0,0, - 0,67,0,0,0,115,194,0,0,0,124,0,106,0,125,1, - 121,22,116,1,106,2,124,1,112,22,116,1,106,3,131,0, - 131,1,125,2,87,0,110,30,4,0,116,4,116,5,116,6, - 102,3,107,10,114,58,1,0,1,0,1,0,103,0,125,2, - 89,0,110,2,88,0,116,7,106,8,106,9,100,1,131,1, - 115,84,116,10,124,2,131,1,124,0,95,11,110,78,116,10, - 131,0,125,3,120,64,124,2,68,0,93,56,125,4,124,4, - 106,12,100,2,131,1,92,3,125,5,125,6,125,7,124,6, - 114,138,100,3,106,13,124,5,124,7,106,14,131,0,131,2, - 125,8,110,4,124,5,125,8,124,3,106,15,124,8,131,1, - 1,0,113,96,87,0,124,3,124,0,95,11,116,7,106,8, - 106,9,116,16,131,1,114,190,100,4,100,5,132,0,124,2, - 68,0,131,1,124,0,95,17,100,6,83,0,41,7,122,68, - 70,105,108,108,32,116,104,101,32,99,97,99,104,101,32,111, - 102,32,112,111,116,101,110,116,105,97,108,32,109,111,100,117, - 108,101,115,32,97,110,100,32,112,97,99,107,97,103,101,115, - 32,102,111,114,32,116,104,105,115,32,100,105,114,101,99,116, - 111,114,121,46,114,0,0,0,0,114,59,0,0,0,122,5, - 123,125,46,123,125,99,1,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,83,0,0,0,115,20,0,0,0,104, - 0,124,0,93,12,125,1,124,1,106,0,131,0,146,2,113, - 4,83,0,114,4,0,0,0,41,1,114,89,0,0,0,41, - 2,114,22,0,0,0,90,2,102,110,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,250,9,60,115,101,116,99, - 111,109,112,62,12,5,0,0,115,2,0,0,0,6,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,35,0, - 0,0,114,3,0,0,0,90,7,108,105,115,116,100,105,114, - 114,45,0,0,0,114,253,0,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, - 7,0,0,0,114,8,0,0,0,114,9,0,0,0,114,6, - 1,0,0,114,7,1,0,0,114,84,0,0,0,114,48,0, - 0,0,114,89,0,0,0,218,3,97,100,100,114,10,0,0, - 0,114,8,1,0,0,41,9,114,101,0,0,0,114,35,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,242,0,0,0,114,99,0,0,0,114,232,0, - 0,0,114,220,0,0,0,90,8,110,101,119,95,110,97,109, - 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,10,1,0,0,239,4,0,0,115,34,0,0,0,0,2, - 6,1,2,1,22,1,20,3,10,3,12,1,12,7,6,1, - 10,1,16,1,4,1,18,2,4,1,14,1,6,1,12,1, - 122,22,70,105,108,101,70,105,110,100,101,114,46,95,102,105, - 108,108,95,99,97,99,104,101,99,1,0,0,0,0,0,0, - 0,3,0,0,0,3,0,0,0,7,0,0,0,115,18,0, - 0,0,135,0,135,1,102,2,100,1,100,2,132,8,125,2, - 124,2,83,0,41,3,97,20,1,0,0,65,32,99,108,97, - 115,115,32,109,101,116,104,111,100,32,119,104,105,99,104,32, - 114,101,116,117,114,110,115,32,97,32,99,108,111,115,117,114, - 101,32,116,111,32,117,115,101,32,111,110,32,115,121,115,46, - 112,97,116,104,95,104,111,111,107,10,32,32,32,32,32,32, - 32,32,119,104,105,99,104,32,119,105,108,108,32,114,101,116, - 117,114,110,32,97,110,32,105,110,115,116,97,110,99,101,32, - 117,115,105,110,103,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,108,111,97,100,101,114,115,32,97,110,100,32, - 116,104,101,32,112,97,116,104,10,32,32,32,32,32,32,32, - 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, - 108,111,115,117,114,101,46,10,10,32,32,32,32,32,32,32, - 32,73,102,32,116,104,101,32,112,97,116,104,32,99,97,108, - 108,101,100,32,111,110,32,116,104,101,32,99,108,111,115,117, - 114,101,32,105,115,32,110,111,116,32,97,32,100,105,114,101, - 99,116,111,114,121,44,32,73,109,112,111,114,116,69,114,114, - 111,114,32,105,115,10,32,32,32,32,32,32,32,32,114,97, - 105,115,101,100,46,10,10,32,32,32,32,32,32,32,32,99, - 1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,0, - 19,0,0,0,115,32,0,0,0,116,0,124,0,131,1,115, - 22,116,1,100,1,100,2,124,0,144,1,131,1,130,1,136, - 0,124,0,136,1,140,1,83,0,41,3,122,45,80,97,116, - 104,32,104,111,111,107,32,102,111,114,32,105,109,112,111,114, - 116,108,105,98,46,109,97,99,104,105,110,101,114,121,46,70, - 105,108,101,70,105,110,100,101,114,46,122,30,111,110,108,121, - 32,100,105,114,101,99,116,111,114,105,101,115,32,97,114,101, - 32,115,117,112,112,111,114,116,101,100,114,35,0,0,0,41, - 2,114,46,0,0,0,114,100,0,0,0,41,1,114,35,0, - 0,0,41,2,114,165,0,0,0,114,9,1,0,0,114,4, - 0,0,0,114,5,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,24,5,0,0,115,6,0,0,0,0,2,8,1,14, - 1,122,54,70,105,108,101,70,105,110,100,101,114,46,112,97, - 116,104,95,104,111,111,107,46,60,108,111,99,97,108,115,62, - 46,112,97,116,104,95,104,111,111,107,95,102,111,114,95,70, - 105,108,101,70,105,110,100,101,114,114,4,0,0,0,41,3, - 114,165,0,0,0,114,9,1,0,0,114,15,1,0,0,114, - 4,0,0,0,41,2,114,165,0,0,0,114,9,1,0,0, - 114,5,0,0,0,218,9,112,97,116,104,95,104,111,111,107, - 14,5,0,0,115,4,0,0,0,0,10,14,6,122,20,70, - 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, - 111,111,107,99,1,0,0,0,0,0,0,0,1,0,0,0, - 2,0,0,0,67,0,0,0,115,12,0,0,0,100,1,106, - 0,124,0,106,1,131,1,83,0,41,2,78,122,16,70,105, - 108,101,70,105,110,100,101,114,40,123,33,114,125,41,41,2, - 114,48,0,0,0,114,35,0,0,0,41,1,114,101,0,0, + 0,0,0,218,16,95,108,101,103,97,99,121,95,103,101,116, + 95,115,112,101,99,60,4,0,0,115,18,0,0,0,0,4, + 10,1,16,2,10,1,4,1,8,1,12,1,12,1,6,1, + 122,27,80,97,116,104,70,105,110,100,101,114,46,95,108,101, + 103,97,99,121,95,103,101,116,95,115,112,101,99,78,99,4, + 0,0,0,0,0,0,0,9,0,0,0,5,0,0,0,67, + 0,0,0,115,170,0,0,0,103,0,125,4,120,160,124,2, + 68,0,93,130,125,5,116,0,124,5,116,1,116,2,102,2, + 131,2,115,30,113,10,124,0,106,3,124,5,131,1,125,6, + 124,6,100,1,107,9,114,10,116,4,124,6,100,2,131,2, + 114,72,124,6,106,5,124,1,124,3,131,2,125,7,110,12, + 124,0,106,6,124,1,124,6,131,2,125,7,124,7,100,1, + 107,8,114,94,113,10,124,7,106,7,100,1,107,9,114,108, + 124,7,83,0,124,7,106,8,125,8,124,8,100,1,107,8, + 114,130,116,9,100,3,131,1,130,1,124,4,106,10,124,8, + 131,1,1,0,113,10,87,0,116,11,106,12,124,1,100,1, + 131,2,125,7,124,4,124,7,95,8,124,7,83,0,100,1, + 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,176,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,138,0,0,0,114,70,0,0,0,218,5,98,121, + 116,101,115,114,254,0,0,0,114,109,0,0,0,114,176,0, + 0,0,114,255,0,0,0,114,121,0,0,0,114,151,0,0, + 0,114,100,0,0,0,114,144,0,0,0,114,115,0,0,0, + 114,155,0,0,0,41,9,114,165,0,0,0,114,120,0,0, + 0,114,35,0,0,0,114,175,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,250,0,0,0,114,159,0,0,0,114,122,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,241,0,0,0,32,5,0,0,115,2,0,0,0,0,1, - 122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,114, - 101,112,114,95,95,41,1,78,41,15,114,106,0,0,0,114, - 105,0,0,0,114,107,0,0,0,114,108,0,0,0,114,180, - 0,0,0,114,247,0,0,0,114,124,0,0,0,114,177,0, - 0,0,114,118,0,0,0,114,2,1,0,0,114,176,0,0, - 0,114,10,1,0,0,114,178,0,0,0,114,16,1,0,0, - 114,241,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,3,1,0,0,147,4, - 0,0,115,20,0,0,0,8,7,4,2,8,14,8,4,4, - 2,8,12,8,5,10,46,8,31,12,18,114,3,1,0,0, - 99,4,0,0,0,0,0,0,0,6,0,0,0,11,0,0, - 0,67,0,0,0,115,148,0,0,0,124,0,106,0,100,1, - 131,1,125,4,124,0,106,0,100,2,131,1,125,5,124,4, - 115,66,124,5,114,36,124,5,106,1,125,4,110,30,124,2, - 124,3,107,2,114,56,116,2,124,1,124,2,131,2,125,4, - 110,10,116,3,124,1,124,2,131,2,125,4,124,5,115,86, - 116,4,124,1,124,2,100,3,124,4,144,1,131,2,125,5, - 121,36,124,5,124,0,100,2,60,0,124,4,124,0,100,1, - 60,0,124,2,124,0,100,4,60,0,124,3,124,0,100,5, - 60,0,87,0,110,20,4,0,116,5,107,10,114,142,1,0, - 1,0,1,0,89,0,110,2,88,0,100,0,83,0,41,6, - 78,218,10,95,95,108,111,97,100,101,114,95,95,218,8,95, - 95,115,112,101,99,95,95,114,121,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,121,0,0,0,114,218, - 0,0,0,114,213,0,0,0,114,162,0,0,0,218,9,69, - 120,99,101,112,116,105,111,110,41,6,90,2,110,115,114,99, - 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,121,0,0,0,114,159,0, + 218,9,95,103,101,116,95,115,112,101,99,75,4,0,0,115, + 40,0,0,0,0,5,4,1,10,1,14,1,2,1,10,1, + 8,1,10,1,14,2,12,1,8,1,2,1,10,1,4,1, + 6,1,8,1,8,5,14,2,12,1,6,1,122,20,80,97, + 116,104,70,105,110,100,101,114,46,95,103,101,116,95,115,112, + 101,99,99,4,0,0,0,0,0,0,0,6,0,0,0,4, + 0,0,0,67,0,0,0,115,104,0,0,0,124,2,100,1, + 107,8,114,14,116,0,106,1,125,2,124,0,106,2,124,1, + 124,2,124,3,131,3,125,4,124,4,100,1,107,8,114,42, + 100,1,83,0,110,58,124,4,106,3,100,1,107,8,114,96, + 124,4,106,4,125,5,124,5,114,90,100,2,124,4,95,5, + 116,6,124,1,124,5,124,0,106,2,131,3,124,4,95,4, + 124,4,83,0,113,100,100,1,83,0,110,4,124,4,83,0, + 100,1,83,0,41,3,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,90,9,110,97,109,101,115,112,97,99, + 101,41,7,114,7,0,0,0,114,35,0,0,0,114,2,1, + 0,0,114,121,0,0,0,114,151,0,0,0,114,153,0,0, + 0,114,225,0,0,0,41,6,114,165,0,0,0,114,120,0, + 0,0,114,35,0,0,0,114,175,0,0,0,114,159,0,0, + 0,114,1,1,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,176,0,0,0,107,4,0,0,115,26, + 0,0,0,0,6,8,1,6,1,14,1,8,1,6,1,10, + 1,6,1,4,3,6,1,16,1,6,2,6,2,122,20,80, + 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,115, + 112,101,99,99,3,0,0,0,0,0,0,0,4,0,0,0, + 3,0,0,0,67,0,0,0,115,30,0,0,0,124,0,106, + 0,124,1,124,2,131,2,125,3,124,3,100,1,107,8,114, + 24,100,1,83,0,124,3,106,1,83,0,41,2,122,170,102, + 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, + 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, + 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, + 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, + 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, + 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, + 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, + 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,2,114,176,0,0, + 0,114,121,0,0,0,41,4,114,165,0,0,0,114,120,0, + 0,0,114,35,0,0,0,114,159,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,177,0,0,0, + 131,4,0,0,115,8,0,0,0,0,8,12,1,8,1,4, + 1,122,22,80,97,116,104,70,105,110,100,101,114,46,102,105, + 110,100,95,109,111,100,117,108,101,41,1,78,41,2,78,78, + 41,1,78,41,12,114,106,0,0,0,114,105,0,0,0,114, + 107,0,0,0,114,108,0,0,0,114,178,0,0,0,114,247, + 0,0,0,114,252,0,0,0,114,254,0,0,0,114,255,0, + 0,0,114,2,1,0,0,114,176,0,0,0,114,177,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,246,0,0,0,13,4,0,0,115,22, + 0,0,0,8,2,4,2,12,8,12,13,12,22,12,15,2, + 1,12,31,2,1,12,23,2,1,114,246,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,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,5,0,0,0,5,0,0,0,7, + 0,0,0,115,88,0,0,0,103,0,125,3,120,40,124,2, + 68,0,93,32,92,2,137,0,125,4,124,3,106,0,135,0, + 102,1,100,1,100,2,132,8,124,4,68,0,131,1,131,1, + 1,0,113,10,87,0,124,3,124,0,95,1,124,1,112,58, + 100,3,124,0,95,2,100,6,124,0,95,3,116,4,131,0, + 124,0,95,5,116,4,131,0,124,0,95,6,100,5,83,0, + 41,7,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,2,0,0,0,3,0,0,0,51, + 0,0,0,115,22,0,0,0,124,0,93,14,125,1,124,1, + 136,0,102,2,86,0,1,0,113,2,100,0,83,0,41,1, + 78,114,4,0,0,0,41,2,114,22,0,0,0,114,220,0, + 0,0,41,1,114,121,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,222,0,0,0,160,4,0,0,115,2,0,0, + 0,4,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,59,0,0,0, + 114,29,0,0,0,78,114,88,0,0,0,41,7,114,144,0, + 0,0,218,8,95,108,111,97,100,101,114,115,114,35,0,0, + 0,218,11,95,112,97,116,104,95,109,116,105,109,101,218,3, + 115,101,116,218,11,95,112,97,116,104,95,99,97,99,104,101, + 218,19,95,114,101,108,97,120,101,100,95,112,97,116,104,95, + 99,97,99,104,101,41,5,114,101,0,0,0,114,35,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,161,0,0,0,114, + 4,0,0,0,41,1,114,121,0,0,0,114,5,0,0,0, + 114,180,0,0,0,154,4,0,0,115,16,0,0,0,0,4, + 4,1,14,1,28,1,6,2,10,1,6,1,8,1,122,19, + 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,10,0,0,0,100,3,124, + 0,95,0,100,2,83,0,41,4,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,29,0,0,0,78, + 114,88,0,0,0,41,1,114,5,1,0,0,41,1,114,101, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,247,0,0,0,168,4,0,0,115,2,0,0,0, + 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, + 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, + 99,2,0,0,0,0,0,0,0,3,0,0,0,2,0,0, + 0,67,0,0,0,115,42,0,0,0,124,0,106,0,124,1, + 131,1,125,2,124,2,100,1,107,8,114,26,100,1,103,0, + 102,2,83,0,124,2,106,1,124,2,106,2,112,38,103,0, + 102,2,83,0,41,2,122,197,84,114,121,32,116,111,32,102, + 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, + 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, + 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, + 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, + 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, + 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, + 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, + 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, + 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, + 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, + 114,176,0,0,0,114,121,0,0,0,114,151,0,0,0,41, + 3,114,101,0,0,0,114,120,0,0,0,114,159,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 118,0,0,0,174,4,0,0,115,8,0,0,0,0,7,10, + 1,8,1,8,1,122,22,70,105,108,101,70,105,110,100,101, + 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, + 0,0,0,0,0,0,7,0,0,0,7,0,0,0,67,0, + 0,0,115,30,0,0,0,124,1,124,2,124,3,131,2,125, + 6,116,0,124,2,124,3,100,1,124,6,100,2,124,4,144, + 2,131,2,83,0,41,3,78,114,121,0,0,0,114,151,0, + 0,0,41,1,114,162,0,0,0,41,7,114,101,0,0,0, + 114,160,0,0,0,114,120,0,0,0,114,35,0,0,0,90, + 4,115,109,115,108,114,175,0,0,0,114,121,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,2, + 1,0,0,186,4,0,0,115,6,0,0,0,0,1,10,1, + 12,1,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,14,0,0,0,15,0,0,0,67,0,0,0,115,100, + 1,0,0,100,1,125,3,124,1,106,0,100,2,131,1,100, + 3,25,0,125,4,121,24,116,1,124,0,106,2,112,34,116, + 3,106,4,131,0,131,1,106,5,125,5,87,0,110,24,4, + 0,116,6,107,10,114,66,1,0,1,0,1,0,100,10,125, + 5,89,0,110,2,88,0,124,5,124,0,106,7,107,3,114, + 92,124,0,106,8,131,0,1,0,124,5,124,0,95,7,116, + 9,131,0,114,114,124,0,106,10,125,6,124,4,106,11,131, + 0,125,7,110,10,124,0,106,12,125,6,124,4,125,7,124, + 7,124,6,107,6,114,218,116,13,124,0,106,2,124,4,131, + 2,125,8,120,72,124,0,106,14,68,0,93,54,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,152,124,0,106, + 16,124,10,124,1,124,12,124,8,103,1,124,2,131,5,83, + 0,113,152,87,0,116,17,124,8,131,1,125,3,120,90,124, + 0,106,14,68,0,93,80,92,2,125,9,125,10,116,13,124, + 0,106,2,124,4,124,9,23,0,131,2,125,12,116,18,106, + 19,100,6,124,12,100,7,100,3,144,1,131,2,1,0,124, + 7,124,9,23,0,124,6,107,6,114,226,116,15,124,12,131, + 1,114,226,124,0,106,16,124,10,124,1,124,12,100,8,124, + 2,131,5,83,0,113,226,87,0,124,3,144,1,114,96,116, + 18,106,19,100,9,124,8,131,2,1,0,116,18,106,20,124, + 1,100,8,131,2,125,13,124,8,103,1,124,13,95,21,124, + 13,83,0,100,8,83,0,41,11,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,59,0,0,0, + 114,57,0,0,0,114,29,0,0,0,114,180,0,0,0,122, + 9,116,114,121,105,110,103,32,123,125,90,9,118,101,114,98, + 111,115,105,116,121,78,122,25,112,111,115,115,105,98,108,101, + 32,110,97,109,101,115,112,97,99,101,32,102,111,114,32,123, + 125,114,88,0,0,0,41,22,114,32,0,0,0,114,39,0, + 0,0,114,35,0,0,0,114,3,0,0,0,114,45,0,0, + 0,114,214,0,0,0,114,40,0,0,0,114,5,1,0,0, + 218,11,95,102,105,108,108,95,99,97,99,104,101,114,6,0, + 0,0,114,8,1,0,0,114,89,0,0,0,114,7,1,0, + 0,114,28,0,0,0,114,4,1,0,0,114,44,0,0,0, + 114,2,1,0,0,114,46,0,0,0,114,115,0,0,0,114, + 130,0,0,0,114,155,0,0,0,114,151,0,0,0,41,14, + 114,101,0,0,0,114,120,0,0,0,114,175,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,127,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, + 220,0,0,0,114,160,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,159,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,114,176,0,0,0,191,4,0,0, + 115,70,0,0,0,0,5,4,1,14,1,2,1,24,1,14, + 1,10,1,10,1,8,1,6,2,6,1,6,1,10,2,6, + 1,4,2,8,1,12,1,16,1,8,1,10,1,8,1,24, + 4,8,2,16,1,16,1,18,1,12,1,8,1,10,1,12, + 1,6,1,12,1,12,1,8,1,4,1,122,20,70,105,108, + 101,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, + 99,99,1,0,0,0,0,0,0,0,9,0,0,0,13,0, + 0,0,67,0,0,0,115,194,0,0,0,124,0,106,0,125, + 1,121,22,116,1,106,2,124,1,112,22,116,1,106,3,131, + 0,131,1,125,2,87,0,110,30,4,0,116,4,116,5,116, + 6,102,3,107,10,114,58,1,0,1,0,1,0,103,0,125, + 2,89,0,110,2,88,0,116,7,106,8,106,9,100,1,131, + 1,115,84,116,10,124,2,131,1,124,0,95,11,110,78,116, + 10,131,0,125,3,120,64,124,2,68,0,93,56,125,4,124, + 4,106,12,100,2,131,1,92,3,125,5,125,6,125,7,124, + 6,114,138,100,3,106,13,124,5,124,7,106,14,131,0,131, + 2,125,8,110,4,124,5,125,8,124,3,106,15,124,8,131, + 1,1,0,113,96,87,0,124,3,124,0,95,11,116,7,106, + 8,106,9,116,16,131,1,114,190,100,4,100,5,132,0,124, + 2,68,0,131,1,124,0,95,17,100,6,83,0,41,7,122, + 68,70,105,108,108,32,116,104,101,32,99,97,99,104,101,32, + 111,102,32,112,111,116,101,110,116,105,97,108,32,109,111,100, + 117,108,101,115,32,97,110,100,32,112,97,99,107,97,103,101, + 115,32,102,111,114,32,116,104,105,115,32,100,105,114,101,99, + 116,111,114,121,46,114,0,0,0,0,114,59,0,0,0,122, + 5,123,125,46,123,125,99,1,0,0,0,0,0,0,0,2, + 0,0,0,3,0,0,0,83,0,0,0,115,20,0,0,0, + 104,0,124,0,93,12,125,1,124,1,106,0,131,0,146,2, + 113,4,83,0,114,4,0,0,0,41,1,114,89,0,0,0, + 41,2,114,22,0,0,0,90,2,102,110,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,250,9,60,115,101,116, + 99,111,109,112,62,12,5,0,0,115,2,0,0,0,6,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,35, + 0,0,0,114,3,0,0,0,90,7,108,105,115,116,100,105, + 114,114,45,0,0,0,114,253,0,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,7,0,0,0,114,8,0,0,0,114,9,0,0,0,114, + 6,1,0,0,114,7,1,0,0,114,84,0,0,0,114,48, + 0,0,0,114,89,0,0,0,218,3,97,100,100,114,10,0, + 0,0,114,8,1,0,0,41,9,114,101,0,0,0,114,35, + 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,242,0,0,0,114,99,0,0,0,114,232, + 0,0,0,114,220,0,0,0,90,8,110,101,119,95,110,97, + 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,10,1,0,0,239,4,0,0,115,34,0,0,0,0, + 2,6,1,2,1,22,1,20,3,10,3,12,1,12,7,6, + 1,10,1,16,1,4,1,18,2,4,1,14,1,6,1,12, + 1,122,22,70,105,108,101,70,105,110,100,101,114,46,95,102, + 105,108,108,95,99,97,99,104,101,99,1,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,7,0,0,0,115,18, + 0,0,0,135,0,135,1,102,2,100,1,100,2,132,8,125, + 2,124,2,83,0,41,3,97,20,1,0,0,65,32,99,108, + 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, + 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, + 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, + 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, + 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, + 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, + 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, + 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, + 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, + 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, + 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, + 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, + 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, + 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, + 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, + 0,19,0,0,0,115,32,0,0,0,116,0,124,0,131,1, + 115,22,116,1,100,1,100,2,124,0,144,1,131,1,130,1, + 136,0,124,0,136,1,140,1,83,0,41,3,122,45,80,97, + 116,104,32,104,111,111,107,32,102,111,114,32,105,109,112,111, + 114,116,108,105,98,46,109,97,99,104,105,110,101,114,121,46, + 70,105,108,101,70,105,110,100,101,114,46,122,30,111,110,108, + 121,32,100,105,114,101,99,116,111,114,105,101,115,32,97,114, + 101,32,115,117,112,112,111,114,116,101,100,114,35,0,0,0, + 41,2,114,46,0,0,0,114,100,0,0,0,41,1,114,35, + 0,0,0,41,2,114,165,0,0,0,114,9,1,0,0,114, + 4,0,0,0,114,5,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,24,5,0,0,115,6,0,0,0,0,2,8,1, + 14,1,122,54,70,105,108,101,70,105,110,100,101,114,46,112, + 97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,115, + 62,46,112,97,116,104,95,104,111,111,107,95,102,111,114,95, + 70,105,108,101,70,105,110,100,101,114,114,4,0,0,0,41, + 3,114,165,0,0,0,114,9,1,0,0,114,15,1,0,0, + 114,4,0,0,0,41,2,114,165,0,0,0,114,9,1,0, + 0,114,5,0,0,0,218,9,112,97,116,104,95,104,111,111, + 107,14,5,0,0,115,4,0,0,0,0,10,14,6,122,20, + 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, + 104,111,111,107,99,1,0,0,0,0,0,0,0,1,0,0, + 0,2,0,0,0,67,0,0,0,115,12,0,0,0,100,1, + 106,0,124,0,106,1,131,1,83,0,41,2,78,122,16,70, + 105,108,101,70,105,110,100,101,114,40,123,33,114,125,41,41, + 2,114,48,0,0,0,114,35,0,0,0,41,1,114,101,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,14,95,102,105,120,95,117,112,95,109,111,100,117,108, - 101,38,5,0,0,115,34,0,0,0,0,2,10,1,10,1, - 4,1,4,1,8,1,8,1,12,2,10,1,4,1,16,1, - 2,1,8,1,8,1,8,1,12,1,14,2,114,21,1,0, - 0,99,0,0,0,0,0,0,0,0,3,0,0,0,3,0, - 0,0,67,0,0,0,115,38,0,0,0,116,0,116,1,106, - 2,131,0,102,2,125,0,116,3,116,4,102,2,125,1,116, - 5,116,6,102,2,125,2,124,0,124,1,124,2,103,3,83, - 0,41,1,122,95,82,101,116,117,114,110,115,32,97,32,108, - 105,115,116,32,111,102,32,102,105,108,101,45,98,97,115,101, - 100,32,109,111,100,117,108,101,32,108,111,97,100,101,114,115, - 46,10,10,32,32,32,32,69,97,99,104,32,105,116,101,109, - 32,105,115,32,97,32,116,117,112,108,101,32,40,108,111,97, - 100,101,114,44,32,115,117,102,102,105,120,101,115,41,46,10, - 32,32,32,32,41,7,114,219,0,0,0,114,140,0,0,0, - 218,18,101,120,116,101,110,115,105,111,110,95,115,117,102,102, - 105,120,101,115,114,213,0,0,0,114,85,0,0,0,114,218, - 0,0,0,114,75,0,0,0,41,3,90,10,101,120,116,101, - 110,115,105,111,110,115,90,6,115,111,117,114,99,101,90,8, - 98,121,116,101,99,111,100,101,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,156,0,0,0,61,5,0,0, - 115,8,0,0,0,0,5,12,1,8,1,8,1,114,156,0, - 0,0,99,1,0,0,0,0,0,0,0,12,0,0,0,12, - 0,0,0,67,0,0,0,115,188,1,0,0,124,0,97,0, - 116,0,106,1,97,1,116,0,106,2,97,2,116,1,106,3, - 116,4,25,0,125,1,120,56,100,26,68,0,93,48,125,2, - 124,2,116,1,106,3,107,7,114,58,116,0,106,5,124,2, - 131,1,125,3,110,10,116,1,106,3,124,2,25,0,125,3, - 116,6,124,1,124,2,124,3,131,3,1,0,113,32,87,0, - 100,5,100,6,103,1,102,2,100,7,100,8,100,6,103,2, - 102,2,102,2,125,4,120,118,124,4,68,0,93,102,92,2, - 125,5,125,6,116,7,100,9,100,10,132,0,124,6,68,0, - 131,1,131,1,115,142,116,8,130,1,124,6,100,11,25,0, - 125,7,124,5,116,1,106,3,107,6,114,174,116,1,106,3, - 124,5,25,0,125,8,80,0,113,112,121,16,116,0,106,5, - 124,5,131,1,125,8,80,0,87,0,113,112,4,0,116,9, - 107,10,114,212,1,0,1,0,1,0,119,112,89,0,113,112, - 88,0,113,112,87,0,116,9,100,12,131,1,130,1,116,6, - 124,1,100,13,124,8,131,3,1,0,116,6,124,1,100,14, - 124,7,131,3,1,0,116,6,124,1,100,15,100,16,106,10, - 124,6,131,1,131,3,1,0,121,14,116,0,106,5,100,17, - 131,1,125,9,87,0,110,26,4,0,116,9,107,10,144,1, - 114,52,1,0,1,0,1,0,100,18,125,9,89,0,110,2, - 88,0,116,6,124,1,100,17,124,9,131,3,1,0,116,0, - 106,5,100,19,131,1,125,10,116,6,124,1,100,19,124,10, - 131,3,1,0,124,5,100,7,107,2,144,1,114,120,116,0, - 106,5,100,20,131,1,125,11,116,6,124,1,100,21,124,11, - 131,3,1,0,116,6,124,1,100,22,116,11,131,0,131,3, - 1,0,116,12,106,13,116,2,106,14,131,0,131,1,1,0, - 124,5,100,7,107,2,144,1,114,184,116,15,106,16,100,23, - 131,1,1,0,100,24,116,12,107,6,144,1,114,184,100,25, - 116,17,95,18,100,18,83,0,41,27,122,205,83,101,116,117, - 112,32,116,104,101,32,112,97,116,104,45,98,97,115,101,100, - 32,105,109,112,111,114,116,101,114,115,32,102,111,114,32,105, - 109,112,111,114,116,108,105,98,32,98,121,32,105,109,112,111, - 114,116,105,110,103,32,110,101,101,100,101,100,10,32,32,32, - 32,98,117,105,108,116,45,105,110,32,109,111,100,117,108,101, - 115,32,97,110,100,32,105,110,106,101,99,116,105,110,103,32, - 116,104,101,109,32,105,110,116,111,32,116,104,101,32,103,108, - 111,98,97,108,32,110,97,109,101,115,112,97,99,101,46,10, - 10,32,32,32,32,79,116,104,101,114,32,99,111,109,112,111, - 110,101,110,116,115,32,97,114,101,32,101,120,116,114,97,99, - 116,101,100,32,102,114,111,109,32,116,104,101,32,99,111,114, - 101,32,98,111,111,116,115,116,114,97,112,32,109,111,100,117, - 108,101,46,10,10,32,32,32,32,114,50,0,0,0,114,61, - 0,0,0,218,8,98,117,105,108,116,105,110,115,114,137,0, - 0,0,90,5,112,111,115,105,120,250,1,47,218,2,110,116, - 250,1,92,99,1,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,115,0,0,0,115,26,0,0,0,124,0,93, - 18,125,1,116,0,124,1,131,1,100,0,107,2,86,0,1, - 0,113,2,100,1,83,0,41,2,114,29,0,0,0,78,41, - 1,114,31,0,0,0,41,2,114,22,0,0,0,114,78,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,222,0,0,0,97,5,0,0,115,2,0,0,0,4, - 0,122,25,95,115,101,116,117,112,46,60,108,111,99,97,108, - 115,62,46,60,103,101,110,101,120,112,114,62,114,60,0,0, - 0,122,30,105,109,112,111,114,116,108,105,98,32,114,101,113, - 117,105,114,101,115,32,112,111,115,105,120,32,111,114,32,110, - 116,114,3,0,0,0,114,25,0,0,0,114,21,0,0,0, - 114,30,0,0,0,90,7,95,116,104,114,101,97,100,78,90, - 8,95,119,101,97,107,114,101,102,90,6,119,105,110,114,101, - 103,114,164,0,0,0,114,6,0,0,0,122,4,46,112,121, - 119,122,6,95,100,46,112,121,100,84,41,4,122,3,95,105, - 111,122,9,95,119,97,114,110,105,110,103,115,122,8,98,117, - 105,108,116,105,110,115,122,7,109,97,114,115,104,97,108,41, - 19,114,115,0,0,0,114,7,0,0,0,114,140,0,0,0, - 114,234,0,0,0,114,106,0,0,0,90,18,95,98,117,105, - 108,116,105,110,95,102,114,111,109,95,110,97,109,101,114,110, - 0,0,0,218,3,97,108,108,218,14,65,115,115,101,114,116, - 105,111,110,69,114,114,111,114,114,100,0,0,0,114,26,0, - 0,0,114,11,0,0,0,114,224,0,0,0,114,144,0,0, - 0,114,22,1,0,0,114,85,0,0,0,114,158,0,0,0, - 114,163,0,0,0,114,168,0,0,0,41,12,218,17,95,98, - 111,111,116,115,116,114,97,112,95,109,111,100,117,108,101,90, - 11,115,101,108,102,95,109,111,100,117,108,101,90,12,98,117, - 105,108,116,105,110,95,110,97,109,101,90,14,98,117,105,108, - 116,105,110,95,109,111,100,117,108,101,90,10,111,115,95,100, - 101,116,97,105,108,115,90,10,98,117,105,108,116,105,110,95, - 111,115,114,21,0,0,0,114,25,0,0,0,90,9,111,115, - 95,109,111,100,117,108,101,90,13,116,104,114,101,97,100,95, - 109,111,100,117,108,101,90,14,119,101,97,107,114,101,102,95, - 109,111,100,117,108,101,90,13,119,105,110,114,101,103,95,109, - 111,100,117,108,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,6,95,115,101,116,117,112,72,5,0,0, - 115,82,0,0,0,0,8,4,1,6,1,6,3,10,1,10, - 1,10,1,12,2,10,1,16,3,22,1,14,2,22,1,8, - 1,10,1,10,1,4,2,2,1,10,1,6,1,14,1,12, - 2,8,1,12,1,12,1,18,3,2,1,14,1,16,2,10, - 1,12,3,10,1,12,3,10,1,10,1,12,3,14,1,14, - 1,10,1,10,1,10,1,114,30,1,0,0,99,1,0,0, - 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, - 0,115,84,0,0,0,116,0,124,0,131,1,1,0,116,1, - 131,0,125,1,116,2,106,3,106,4,116,5,106,6,124,1, - 140,0,103,1,131,1,1,0,116,7,106,8,100,1,107,2, - 114,56,116,2,106,9,106,10,116,11,131,1,1,0,116,2, - 106,9,106,10,116,12,131,1,1,0,116,5,124,0,95,5, - 116,13,124,0,95,13,100,2,83,0,41,3,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,114,25,1,0,0,78,41,14,114, - 30,1,0,0,114,156,0,0,0,114,7,0,0,0,114,251, - 0,0,0,114,144,0,0,0,114,3,1,0,0,114,16,1, - 0,0,114,3,0,0,0,114,106,0,0,0,218,9,109,101, - 116,97,95,112,97,116,104,114,158,0,0,0,114,163,0,0, - 0,114,246,0,0,0,114,213,0,0,0,41,2,114,29,1, - 0,0,90,17,115,117,112,112,111,114,116,101,100,95,108,111, - 97,100,101,114,115,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,8,95,105,110,115,116,97,108,108,140,5, - 0,0,115,16,0,0,0,0,2,8,1,6,1,20,1,10, - 1,12,1,12,4,6,1,114,32,1,0,0,41,3,122,3, - 119,105,110,114,1,0,0,0,114,2,0,0,0,41,1,114, - 47,0,0,0,41,1,78,41,3,78,78,78,41,3,78,78, - 78,41,2,114,60,0,0,0,114,60,0,0,0,41,1,78, - 41,1,78,41,56,114,108,0,0,0,114,10,0,0,0,114, - 11,0,0,0,114,17,0,0,0,114,19,0,0,0,114,28, - 0,0,0,114,38,0,0,0,114,39,0,0,0,114,43,0, - 0,0,114,44,0,0,0,114,46,0,0,0,114,56,0,0, - 0,218,4,116,121,112,101,218,8,95,95,99,111,100,101,95, - 95,114,139,0,0,0,114,15,0,0,0,114,129,0,0,0, - 114,14,0,0,0,114,18,0,0,0,90,17,95,82,65,87, - 95,77,65,71,73,67,95,78,85,77,66,69,82,114,74,0, - 0,0,114,73,0,0,0,114,85,0,0,0,114,75,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,80,0,0,0,114,86,0,0, - 0,114,92,0,0,0,114,96,0,0,0,114,98,0,0,0, - 114,117,0,0,0,114,124,0,0,0,114,136,0,0,0,114, - 142,0,0,0,114,145,0,0,0,114,150,0,0,0,218,6, - 111,98,106,101,99,116,114,157,0,0,0,114,162,0,0,0, - 114,163,0,0,0,114,179,0,0,0,114,189,0,0,0,114, - 205,0,0,0,114,213,0,0,0,114,218,0,0,0,114,224, - 0,0,0,114,219,0,0,0,114,225,0,0,0,114,244,0, - 0,0,114,246,0,0,0,114,3,1,0,0,114,21,1,0, - 0,114,156,0,0,0,114,30,1,0,0,114,32,1,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,8,60,109,111,100,117,108,101,62,8,0, - 0,0,115,102,0,0,0,4,17,4,3,8,12,8,5,8, - 5,8,6,8,12,8,10,8,9,8,5,8,7,10,22,10, - 116,16,1,12,2,4,1,4,2,6,2,6,2,8,2,16, - 44,8,33,8,19,8,12,8,12,8,28,8,17,10,55,10, - 12,10,10,8,14,6,3,4,1,14,65,14,64,14,29,16, - 110,14,41,18,45,18,16,4,3,18,53,14,60,14,42,14, - 127,0,7,14,127,0,20,10,23,8,11,8,68, + 0,114,241,0,0,0,32,5,0,0,115,2,0,0,0,0, + 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, + 114,101,112,114,95,95,41,1,78,41,15,114,106,0,0,0, + 114,105,0,0,0,114,107,0,0,0,114,108,0,0,0,114, + 180,0,0,0,114,247,0,0,0,114,124,0,0,0,114,177, + 0,0,0,114,118,0,0,0,114,2,1,0,0,114,176,0, + 0,0,114,10,1,0,0,114,178,0,0,0,114,16,1,0, + 0,114,241,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,3,1,0,0,145, + 4,0,0,115,20,0,0,0,8,7,4,2,8,14,8,4, + 4,2,8,12,8,5,10,48,8,31,12,18,114,3,1,0, + 0,99,4,0,0,0,0,0,0,0,6,0,0,0,11,0, + 0,0,67,0,0,0,115,148,0,0,0,124,0,106,0,100, + 1,131,1,125,4,124,0,106,0,100,2,131,1,125,5,124, + 4,115,66,124,5,114,36,124,5,106,1,125,4,110,30,124, + 2,124,3,107,2,114,56,116,2,124,1,124,2,131,2,125, + 4,110,10,116,3,124,1,124,2,131,2,125,4,124,5,115, + 86,116,4,124,1,124,2,100,3,124,4,144,1,131,2,125, + 5,121,36,124,5,124,0,100,2,60,0,124,4,124,0,100, + 1,60,0,124,2,124,0,100,4,60,0,124,3,124,0,100, + 5,60,0,87,0,110,20,4,0,116,5,107,10,114,142,1, + 0,1,0,1,0,89,0,110,2,88,0,100,0,83,0,41, + 6,78,218,10,95,95,108,111,97,100,101,114,95,95,218,8, + 95,95,115,112,101,99,95,95,114,121,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,121,0,0,0,114, + 218,0,0,0,114,213,0,0,0,114,162,0,0,0,218,9, + 69,120,99,101,112,116,105,111,110,41,6,90,2,110,115,114, + 99,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,121,0,0,0,114,159, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,14,95,102,105,120,95,117,112,95,109,111,100,117, + 108,101,38,5,0,0,115,34,0,0,0,0,2,10,1,10, + 1,4,1,4,1,8,1,8,1,12,2,10,1,4,1,16, + 1,2,1,8,1,8,1,8,1,12,1,14,2,114,21,1, + 0,0,99,0,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,67,0,0,0,115,38,0,0,0,116,0,116,1, + 106,2,131,0,102,2,125,0,116,3,116,4,102,2,125,1, + 116,5,116,6,102,2,125,2,124,0,124,1,124,2,103,3, + 83,0,41,1,122,95,82,101,116,117,114,110,115,32,97,32, + 108,105,115,116,32,111,102,32,102,105,108,101,45,98,97,115, + 101,100,32,109,111,100,117,108,101,32,108,111,97,100,101,114, + 115,46,10,10,32,32,32,32,69,97,99,104,32,105,116,101, + 109,32,105,115,32,97,32,116,117,112,108,101,32,40,108,111, + 97,100,101,114,44,32,115,117,102,102,105,120,101,115,41,46, + 10,32,32,32,32,41,7,114,219,0,0,0,114,140,0,0, + 0,218,18,101,120,116,101,110,115,105,111,110,95,115,117,102, + 102,105,120,101,115,114,213,0,0,0,114,85,0,0,0,114, + 218,0,0,0,114,75,0,0,0,41,3,90,10,101,120,116, + 101,110,115,105,111,110,115,90,6,115,111,117,114,99,101,90, + 8,98,121,116,101,99,111,100,101,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,156,0,0,0,61,5,0, + 0,115,8,0,0,0,0,5,12,1,8,1,8,1,114,156, + 0,0,0,99,1,0,0,0,0,0,0,0,12,0,0,0, + 12,0,0,0,67,0,0,0,115,188,1,0,0,124,0,97, + 0,116,0,106,1,97,1,116,0,106,2,97,2,116,1,106, + 3,116,4,25,0,125,1,120,56,100,26,68,0,93,48,125, + 2,124,2,116,1,106,3,107,7,114,58,116,0,106,5,124, + 2,131,1,125,3,110,10,116,1,106,3,124,2,25,0,125, + 3,116,6,124,1,124,2,124,3,131,3,1,0,113,32,87, + 0,100,5,100,6,103,1,102,2,100,7,100,8,100,6,103, + 2,102,2,102,2,125,4,120,118,124,4,68,0,93,102,92, + 2,125,5,125,6,116,7,100,9,100,10,132,0,124,6,68, + 0,131,1,131,1,115,142,116,8,130,1,124,6,100,11,25, + 0,125,7,124,5,116,1,106,3,107,6,114,174,116,1,106, + 3,124,5,25,0,125,8,80,0,113,112,121,16,116,0,106, + 5,124,5,131,1,125,8,80,0,87,0,113,112,4,0,116, + 9,107,10,114,212,1,0,1,0,1,0,119,112,89,0,113, + 112,88,0,113,112,87,0,116,9,100,12,131,1,130,1,116, + 6,124,1,100,13,124,8,131,3,1,0,116,6,124,1,100, + 14,124,7,131,3,1,0,116,6,124,1,100,15,100,16,106, + 10,124,6,131,1,131,3,1,0,121,14,116,0,106,5,100, + 17,131,1,125,9,87,0,110,26,4,0,116,9,107,10,144, + 1,114,52,1,0,1,0,1,0,100,18,125,9,89,0,110, + 2,88,0,116,6,124,1,100,17,124,9,131,3,1,0,116, + 0,106,5,100,19,131,1,125,10,116,6,124,1,100,19,124, + 10,131,3,1,0,124,5,100,7,107,2,144,1,114,120,116, + 0,106,5,100,20,131,1,125,11,116,6,124,1,100,21,124, + 11,131,3,1,0,116,6,124,1,100,22,116,11,131,0,131, + 3,1,0,116,12,106,13,116,2,106,14,131,0,131,1,1, + 0,124,5,100,7,107,2,144,1,114,184,116,15,106,16,100, + 23,131,1,1,0,100,24,116,12,107,6,144,1,114,184,100, + 25,116,17,95,18,100,18,83,0,41,27,122,205,83,101,116, + 117,112,32,116,104,101,32,112,97,116,104,45,98,97,115,101, + 100,32,105,109,112,111,114,116,101,114,115,32,102,111,114,32, + 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, + 111,114,116,105,110,103,32,110,101,101,100,101,100,10,32,32, + 32,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, + 101,115,32,97,110,100,32,105,110,106,101,99,116,105,110,103, + 32,116,104,101,109,32,105,110,116,111,32,116,104,101,32,103, + 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, + 10,10,32,32,32,32,79,116,104,101,114,32,99,111,109,112, + 111,110,101,110,116,115,32,97,114,101,32,101,120,116,114,97, + 99,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111, + 114,101,32,98,111,111,116,115,116,114,97,112,32,109,111,100, + 117,108,101,46,10,10,32,32,32,32,114,50,0,0,0,114, + 61,0,0,0,218,8,98,117,105,108,116,105,110,115,114,137, + 0,0,0,90,5,112,111,115,105,120,250,1,47,218,2,110, + 116,250,1,92,99,1,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,115,0,0,0,115,26,0,0,0,124,0, + 93,18,125,1,116,0,124,1,131,1,100,0,107,2,86,0, + 1,0,113,2,100,1,83,0,41,2,114,29,0,0,0,78, + 41,1,114,31,0,0,0,41,2,114,22,0,0,0,114,78, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,222,0,0,0,97,5,0,0,115,2,0,0,0, + 4,0,122,25,95,115,101,116,117,112,46,60,108,111,99,97, + 108,115,62,46,60,103,101,110,101,120,112,114,62,114,60,0, + 0,0,122,30,105,109,112,111,114,116,108,105,98,32,114,101, + 113,117,105,114,101,115,32,112,111,115,105,120,32,111,114,32, + 110,116,114,3,0,0,0,114,25,0,0,0,114,21,0,0, + 0,114,30,0,0,0,90,7,95,116,104,114,101,97,100,78, + 90,8,95,119,101,97,107,114,101,102,90,6,119,105,110,114, + 101,103,114,164,0,0,0,114,6,0,0,0,122,4,46,112, + 121,119,122,6,95,100,46,112,121,100,84,41,4,122,3,95, + 105,111,122,9,95,119,97,114,110,105,110,103,115,122,8,98, + 117,105,108,116,105,110,115,122,7,109,97,114,115,104,97,108, + 41,19,114,115,0,0,0,114,7,0,0,0,114,140,0,0, + 0,114,234,0,0,0,114,106,0,0,0,90,18,95,98,117, + 105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,114, + 110,0,0,0,218,3,97,108,108,218,14,65,115,115,101,114, + 116,105,111,110,69,114,114,111,114,114,100,0,0,0,114,26, + 0,0,0,114,11,0,0,0,114,224,0,0,0,114,144,0, + 0,0,114,22,1,0,0,114,85,0,0,0,114,158,0,0, + 0,114,163,0,0,0,114,168,0,0,0,41,12,218,17,95, + 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, + 90,11,115,101,108,102,95,109,111,100,117,108,101,90,12,98, + 117,105,108,116,105,110,95,110,97,109,101,90,14,98,117,105, + 108,116,105,110,95,109,111,100,117,108,101,90,10,111,115,95, + 100,101,116,97,105,108,115,90,10,98,117,105,108,116,105,110, + 95,111,115,114,21,0,0,0,114,25,0,0,0,90,9,111, + 115,95,109,111,100,117,108,101,90,13,116,104,114,101,97,100, + 95,109,111,100,117,108,101,90,14,119,101,97,107,114,101,102, + 95,109,111,100,117,108,101,90,13,119,105,110,114,101,103,95, + 109,111,100,117,108,101,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,6,95,115,101,116,117,112,72,5,0, + 0,115,82,0,0,0,0,8,4,1,6,1,6,3,10,1, + 10,1,10,1,12,2,10,1,16,3,22,1,14,2,22,1, + 8,1,10,1,10,1,4,2,2,1,10,1,6,1,14,1, + 12,2,8,1,12,1,12,1,18,3,2,1,14,1,16,2, + 10,1,12,3,10,1,12,3,10,1,10,1,12,3,14,1, + 14,1,10,1,10,1,10,1,114,30,1,0,0,99,1,0, + 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, + 0,0,115,84,0,0,0,116,0,124,0,131,1,1,0,116, + 1,131,0,125,1,116,2,106,3,106,4,116,5,106,6,124, + 1,140,0,103,1,131,1,1,0,116,7,106,8,100,1,107, + 2,114,56,116,2,106,9,106,10,116,11,131,1,1,0,116, + 2,106,9,106,10,116,12,131,1,1,0,116,5,124,0,95, + 5,116,13,124,0,95,13,100,2,83,0,41,3,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,114,25,1,0,0,78,41,14, + 114,30,1,0,0,114,156,0,0,0,114,7,0,0,0,114, + 251,0,0,0,114,144,0,0,0,114,3,1,0,0,114,16, + 1,0,0,114,3,0,0,0,114,106,0,0,0,218,9,109, + 101,116,97,95,112,97,116,104,114,158,0,0,0,114,163,0, + 0,0,114,246,0,0,0,114,213,0,0,0,41,2,114,29, + 1,0,0,90,17,115,117,112,112,111,114,116,101,100,95,108, + 111,97,100,101,114,115,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,8,95,105,110,115,116,97,108,108,140, + 5,0,0,115,16,0,0,0,0,2,8,1,6,1,20,1, + 10,1,12,1,12,4,6,1,114,32,1,0,0,41,3,122, + 3,119,105,110,114,1,0,0,0,114,2,0,0,0,41,1, + 114,47,0,0,0,41,1,78,41,3,78,78,78,41,3,78, + 78,78,41,2,114,60,0,0,0,114,60,0,0,0,41,1, + 78,41,1,78,41,56,114,108,0,0,0,114,10,0,0,0, + 114,11,0,0,0,114,17,0,0,0,114,19,0,0,0,114, + 28,0,0,0,114,38,0,0,0,114,39,0,0,0,114,43, + 0,0,0,114,44,0,0,0,114,46,0,0,0,114,56,0, + 0,0,218,4,116,121,112,101,218,8,95,95,99,111,100,101, + 95,95,114,139,0,0,0,114,15,0,0,0,114,129,0,0, + 0,114,14,0,0,0,114,18,0,0,0,90,17,95,82,65, + 87,95,77,65,71,73,67,95,78,85,77,66,69,82,114,74, + 0,0,0,114,73,0,0,0,114,85,0,0,0,114,75,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,80,0,0,0,114,86,0, + 0,0,114,92,0,0,0,114,96,0,0,0,114,98,0,0, + 0,114,117,0,0,0,114,124,0,0,0,114,136,0,0,0, + 114,142,0,0,0,114,145,0,0,0,114,150,0,0,0,218, + 6,111,98,106,101,99,116,114,157,0,0,0,114,162,0,0, + 0,114,163,0,0,0,114,179,0,0,0,114,189,0,0,0, + 114,205,0,0,0,114,213,0,0,0,114,218,0,0,0,114, + 224,0,0,0,114,219,0,0,0,114,225,0,0,0,114,244, + 0,0,0,114,246,0,0,0,114,3,1,0,0,114,21,1, + 0,0,114,156,0,0,0,114,30,1,0,0,114,32,1,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,8,60,109,111,100,117,108,101,62,8, + 0,0,0,115,102,0,0,0,4,17,4,3,8,12,8,5, + 8,5,8,6,8,12,8,10,8,9,8,5,8,7,10,22, + 10,116,16,1,12,2,4,1,4,2,6,2,6,2,8,2, + 16,44,8,33,8,19,8,12,8,12,8,28,8,17,10,55, + 10,12,10,10,8,14,6,3,4,1,14,65,14,64,14,29, + 16,110,14,41,18,45,18,16,4,3,18,53,14,60,14,42, + 14,127,0,5,14,127,0,22,10,23,8,11,8,68, }; -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Sat Jul 9 04:52:59 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sat, 09 Jul 2016 08:52:59 +0000 Subject: [Python-checkins] Daily reference leaks (d56dc6327de8): sum=4 Message-ID: <20160709085259.17356.95840.0E5A4FC1@psf.io> results for d56dc6327de8 on branch "default" -------------------------------------------- test_collections leaked [-4, 0, 4] memory blocks, sum=0 test_functools leaked [0, 3, 1] memory blocks, sum=4 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogGaksSE', '--timeout', '7200'] From python-checkins at python.org Sat Jul 9 05:06:36 2016 From: python-checkins at python.org (xavier.degaye) Date: Sat, 09 Jul 2016 09:06:36 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327442=3A_Expose_t?= =?utf-8?q?he_Android_API_level_in_sysconfig=2Eget=5Fconfig=5Fvars=28=29?= Message-ID: <20160709090636.31633.7556.3734A8E2@psf.io> https://hg.python.org/cpython/rev/46567fda0b29 changeset: 102292:46567fda0b29 user: Xavier de Gaye date: Sat Jul 09 11:05:42 2016 +0200 summary: Issue #27442: Expose the Android API level in sysconfig.get_config_vars() as 'ANDROID_API_LEVEL'. files: Misc/NEWS | 3 +++ configure | 26 ++++++++++++++++++++++++++ configure.ac | 19 +++++++++++++++++++ pyconfig.h.in | 3 +++ 4 files changed, 51 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -132,6 +132,9 @@ Build ----- +- Issue #27442: Expose the Android API level that python was built against, in + sysconfig.get_config_vars() as 'ANDROID_API_LEVEL'. + - Issue #27434: The interpreter that runs the cross-build, found in PATH, must now be of the same feature version (e.g. 3.6) as the source being built. diff --git a/configure b/configure --- a/configure +++ b/configure @@ -5648,6 +5648,32 @@ +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Android API level" >&5 +$as_echo_n "checking for the Android API level... " >&6; } +cat >> conftest.c < +__ANDROID_API__ +#else +#error not Android +#endif +EOF + +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then + ANDROID_API_LEVEL=`grep -v '^#' conftest.out | grep -v '^ *$'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ANDROID_API_LEVEL" >&5 +$as_echo "$ANDROID_API_LEVEL" >&6; } + +cat >>confdefs.h <<_ACEOF +#define ANDROID_API_LEVEL $ANDROID_API_LEVEL +_ACEOF + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not Android" >&5 +$as_echo "not Android" >&6; } +fi +rm -f conftest.c conftest.out + # Check for unsupported systems case $ac_sys_system/$ac_sys_release in atheos*|Linux*/1*) diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -899,6 +899,25 @@ # checks for UNIX variants that set C preprocessor variables AC_USE_SYSTEM_EXTENSIONS +AC_MSG_CHECKING([for the Android API level]) +cat >> conftest.c < +__ANDROID_API__ +#else +#error not Android +#endif +EOF + +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then + ANDROID_API_LEVEL=`grep -v '^#' conftest.out | grep -v '^ *$'` + AC_MSG_RESULT([$ANDROID_API_LEVEL]) + AC_DEFINE_UNQUOTED(ANDROID_API_LEVEL, $ANDROID_API_LEVEL, [The Android API level.]) +else + AC_MSG_RESULT([not Android]) +fi +rm -f conftest.c conftest.out + # Check for unsupported systems case $ac_sys_system/$ac_sys_release in atheos*|Linux*/1*) diff --git a/pyconfig.h.in b/pyconfig.h.in --- a/pyconfig.h.in +++ b/pyconfig.h.in @@ -12,6 +12,9 @@ support for AIX C++ shared extension modules. */ #undef AIX_GENUINE_CPLUSPLUS +/* The Android API level. */ +#undef ANDROID_API_LEVEL + /* Define if C doubles are 64-bit IEEE 754 binary format, stored in ARM mixed-endian order (byte order 45670123) */ #undef DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754 -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 05:39:04 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 10 Jul 2016 09:39:04 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327474=3A_Unified_?= =?utf-8?q?error_messages_in_the_=5F=5Fcontains=5F=5F_method_of_bytes_and?= Message-ID: <20160710093827.6988.91369.3E2087BA@psf.io> https://hg.python.org/cpython/rev/93ab72de7431 changeset: 102293:93ab72de7431 user: Serhiy Storchaka date: Sun Jul 10 12:37:30 2016 +0300 summary: Issue #27474: Unified error messages in the __contains__ method of bytes and bytearray for integers in and out of the Py_ssize_t range. Patch by Xiang Zhang. files: Lib/test/test_bytes.py | 1 + Objects/bytes_methods.c | 2 +- 2 files changed, 2 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -269,6 +269,7 @@ self.assertNotIn(200, b) self.assertRaises(ValueError, lambda: 300 in b) self.assertRaises(ValueError, lambda: -1 in b) + self.assertRaises(ValueError, lambda: sys.maxsize+1 in b) self.assertRaises(TypeError, lambda: None in b) self.assertRaises(TypeError, lambda: float(ord('a')) in b) self.assertRaises(TypeError, lambda: "a" in b) diff --git a/Objects/bytes_methods.c b/Objects/bytes_methods.c --- a/Objects/bytes_methods.c +++ b/Objects/bytes_methods.c @@ -645,7 +645,7 @@ int _Py_bytes_contains(const char *str, Py_ssize_t len, PyObject *arg) { - Py_ssize_t ival = PyNumber_AsSsize_t(arg, PyExc_ValueError); + Py_ssize_t ival = PyNumber_AsSsize_t(arg, NULL); if (ival == -1 && PyErr_Occurred()) { Py_buffer varg; Py_ssize_t pos; -- Repository URL: https://hg.python.org/cpython From solipsis at pitrou.net Sun Jul 10 05:57:30 2016 From: solipsis at pitrou.net (solipsis at pitrou.net) Date: Sun, 10 Jul 2016 09:57:30 +0000 Subject: [Python-checkins] Daily reference leaks (46567fda0b29): sum=-1 Message-ID: <20160710095725.115767.91414.819AD7E7@psf.io> results for 46567fda0b29 on branch "default" -------------------------------------------- test_collections leaked [-4, 4, -4] memory blocks, sum=-4 test_functools leaked [0, 3, 1] memory blocks, sum=4 test_multiprocessing_spawn leaked [0, -2, 1] memory blocks, sum=-1 Command line was: ['./python', '-m', 'test.regrtest', '-uall', '-R', '3:3:/home/psf-users/antoine/refleaks/reflogg4t6L2', '--timeout', '7200'] From python-checkins at python.org Sun Jul 10 09:49:56 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 10 Jul 2016 13:49:56 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDY2?= =?utf-8?q?=3A_Change_time_format_returned_by_http=2Ecookie=2Etime2netscap?= =?utf-8?q?e=2C?= Message-ID: <20160710134956.1022.10616.32D65806@psf.io> https://hg.python.org/cpython/rev/3356d7c57750 changeset: 102294:3356d7c57750 branch: 3.5 parent: 102280:870e02f86e08 user: Senthil Kumaran date: Sun Jul 10 06:45:38 2016 -0700 summary: Issue #27466: Change time format returned by http.cookie.time2netscape, confirming the netscape cookie format. files: Lib/http/cookiejar.py | 2 +- Lib/test/test_http_cookiejar.py | 22 +++++++++++++++++++++ Misc/NEWS | 4 +++ 3 files changed, 27 insertions(+), 1 deletions(-) diff --git a/Lib/http/cookiejar.py b/Lib/http/cookiejar.py --- a/Lib/http/cookiejar.py +++ b/Lib/http/cookiejar.py @@ -120,7 +120,7 @@ dt = datetime.datetime.utcnow() else: dt = datetime.datetime.utcfromtimestamp(t) - return "%s %02d-%s-%04d %02d:%02d:%02d GMT" % ( + return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % ( DAYS[dt.weekday()], dt.day, MONTHS[dt.month-1], dt.year, dt.hour, dt.minute, dt.second) diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -31,6 +31,28 @@ self.assertRegex(text, r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$", "bad time2isoz format: %s %s" % (az, bz)) + def test_time2netscape(self): + base = 1019227000 + day = 24*3600 + self.assertEqual(time2netscape(base), "Fri, 19-Apr-2002 14:36:40 GMT") + self.assertEqual(time2netscape(base+day), + "Sat, 20-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+2*day), + "Sun, 21-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+3*day), + "Mon, 22-Apr-2002 14:36:40 GMT") + + az = time2netscape() + bz = time2netscape(500000) + for text in (az, bz): + # Format "%s, %02d-%s-%04d %02d:%02d:%02d GMT" + self.assertRegex( + text, + r"[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$", + "bad time2netscape format: %s %s" % (az, bz)) + def test_http2time(self): def parse_date(text): return time.gmtime(http2time(text))[:6] diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -16,6 +16,10 @@ Library ------- +- Issue #27466: Change time format returned by http.cookie.time2netscape, + confirming the netscape cookie format and making it consistent with + documentation. + - Issue #26664: Fix activate.fish by removing mis-use of ``$``. - Issue #22115: Fixed tracing Tkinter variables: trace_vdelete() with wrong -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 09:49:56 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 10 Jul 2016 13:49:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_=5Bmerge_from_3=2E5=5D_-_Issue_=2327466=3A_Change_time_f?= =?utf-8?q?ormat_returned_by?= Message-ID: <20160710134956.16265.44440.B365180C@psf.io> https://hg.python.org/cpython/rev/324ade62c0f0 changeset: 102295:324ade62c0f0 parent: 102293:93ab72de7431 parent: 102294:3356d7c57750 user: Senthil Kumaran date: Sun Jul 10 06:49:49 2016 -0700 summary: [merge from 3.5] - Issue #27466: Change time format returned by http.cookie.time2netscape, confirming the netscape cookie format. files: Lib/http/cookiejar.py | 2 +- Lib/test/test_http_cookiejar.py | 22 +++++++++++++++++++++ Misc/NEWS | 4 +++ 3 files changed, 27 insertions(+), 1 deletions(-) diff --git a/Lib/http/cookiejar.py b/Lib/http/cookiejar.py --- a/Lib/http/cookiejar.py +++ b/Lib/http/cookiejar.py @@ -120,7 +120,7 @@ dt = datetime.datetime.utcnow() else: dt = datetime.datetime.utcfromtimestamp(t) - return "%s %02d-%s-%04d %02d:%02d:%02d GMT" % ( + return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % ( DAYS[dt.weekday()], dt.day, MONTHS[dt.month-1], dt.year, dt.hour, dt.minute, dt.second) diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -31,6 +31,28 @@ self.assertRegex(text, r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$", "bad time2isoz format: %s %s" % (az, bz)) + def test_time2netscape(self): + base = 1019227000 + day = 24*3600 + self.assertEqual(time2netscape(base), "Fri, 19-Apr-2002 14:36:40 GMT") + self.assertEqual(time2netscape(base+day), + "Sat, 20-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+2*day), + "Sun, 21-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+3*day), + "Mon, 22-Apr-2002 14:36:40 GMT") + + az = time2netscape() + bz = time2netscape(500000) + for text in (az, bz): + # Format "%s, %02d-%s-%04d %02d:%02d:%02d GMT" + self.assertRegex( + text, + r"[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$", + "bad time2netscape format: %s %s" % (az, bz)) + def test_http2time(self): def parse_date(text): return time.gmtime(http2time(text))[:6] diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -24,6 +24,10 @@ Library ------- +- Issue #27466: Change time format returned by http.cookie.time2netscape, + confirming the netscape cookie format and making it consistent with + documentation. + - Issue #21708: Deprecated dbm.dumb behavior that differs from common dbm behavior: creating a database in 'r' and 'w' modes and modifying a database in 'r' mode. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 11:34:27 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 10 Jul 2016 15:34:27 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogW3BvcnQgdG8gMi43?= =?utf-8?q?=5D_-_Issue_=2327466=3A_Change_time_format_returned_by?= Message-ID: <20160710153426.115745.79396.D9EA071F@psf.io> https://hg.python.org/cpython/rev/c613d8885054 changeset: 102296:c613d8885054 branch: 2.7 parent: 102279:228b23b58ed3 user: Senthil Kumaran date: Sun Jul 10 08:34:21 2016 -0700 summary: [port to 2.7] - Issue #27466: Change time format returned by http.cookie.time2netscape, confirming the netscape cookie format. files: Lib/cookielib.py | 2 +- Lib/test/test_cookielib.py | 31 ++++++++++++++++++++----- Misc/NEWS | 4 +++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/Lib/cookielib.py b/Lib/cookielib.py --- a/Lib/cookielib.py +++ b/Lib/cookielib.py @@ -113,7 +113,7 @@ """ if t is None: t = time.time() year, mon, mday, hour, min, sec, wday = time.gmtime(t)[:7] - return "%s %02d-%s-%04d %02d:%02d:%02d GMT" % ( + return "%s, %02d-%s-%04d %02d:%02d:%02d GMT" % ( DAYS[wday], mday, MONTHS[mon-1], year, hour, min, sec) diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py --- a/Lib/test/test_cookielib.py +++ b/Lib/test/test_cookielib.py @@ -6,6 +6,7 @@ import re import time +from cookielib import http2time, time2isoz, time2netscape from unittest import TestCase from test import test_support @@ -14,8 +15,6 @@ class DateTimeTests(TestCase): def test_time2isoz(self): - from cookielib import time2isoz - base = 1019227000 day = 24*3600 self.assertEqual(time2isoz(base), "2002-04-19 14:36:40Z") @@ -30,9 +29,29 @@ r"^\d{4}-\d\d-\d\d \d\d:\d\d:\d\dZ$", "bad time2isoz format: %s %s" % (az, bz)) + def test_time2netscape(self): + base = 1019227000 + day = 24*3600 + self.assertEqual(time2netscape(base), "Fri, 19-Apr-2002 14:36:40 GMT") + self.assertEqual(time2netscape(base+day), + "Sat, 20-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+2*day), + "Sun, 21-Apr-2002 14:36:40 GMT") + + self.assertEqual(time2netscape(base+3*day), + "Mon, 22-Apr-2002 14:36:40 GMT") + + az = time2netscape() + bz = time2netscape(500000) + for text in (az, bz): + # Format "%s, %02d-%s-%04d %02d:%02d:%02d GMT" + self.assertRegexpMatches( + text, + r"[a-zA-Z]{3}, \d{2}-[a-zA-Z]{3}-\d{4} \d{2}:\d{2}:\d{2} GMT$", + "bad time2netscape format: %s %s" % (az, bz)) + def test_http2time(self): - from cookielib import http2time - def parse_date(text): return time.gmtime(http2time(text))[:6] @@ -45,7 +64,7 @@ self.assertEqual(parse_date("03-Feb-98"), (1998, 2, 3, 0, 0, 0.0)) def test_http2time_formats(self): - from cookielib import http2time, time2isoz + # test http2time for supported dates. Test cases with 2 digit year # will probably break in year 2044. @@ -81,8 +100,6 @@ self.assertEqual(http2time(s.upper()), test_t, s.upper()) def test_http2time_garbage(self): - from cookielib import http2time - for test in [ '', 'Garbage', diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -17,6 +17,10 @@ Library ------- +- Issue #27466: Change time format returned by http.cookie.time2netscape, + confirming the netscape cookie format and making it consistent with + documentation. + - Issue #22115: Fixed tracing Tkinter variables: trace_vdelete() with wrong mode no longer break tracing, trace_vinfo() now always returns a list of pairs of strings. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 12:21:28 2016 From: python-checkins at python.org (xavier.degaye) Date: Sun, 10 Jul 2016 16:21:28 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327027=3A_Added_te?= =?utf-8?q?st=2Esupport=2Eis=5Fandroid_that_is_True_when_this_is_an?= Message-ID: <20160710162128.16304.32247.63242238@psf.io> https://hg.python.org/cpython/rev/41dfd92f48f0 changeset: 102297:41dfd92f48f0 parent: 102295:324ade62c0f0 user: Xavier de Gaye date: Sun Jul 10 18:20:15 2016 +0200 summary: Issue #27027: Added test.support.is_android that is True when this is an Android build. files: Lib/test/support/__init__.py | 4 +++- Misc/NEWS | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -92,7 +92,7 @@ "anticipate_failure", "load_package_tests", "detect_api_mismatch", "check__all__", # sys - "is_jython", "check_impl_detail", + "is_jython", "is_android", "check_impl_detail", # network "HOST", "IPV6_ENABLED", "find_unused_port", "bind_port", "open_urlresource", # processes @@ -734,6 +734,8 @@ is_jython = sys.platform.startswith('java') +is_android = bool(sysconfig.get_config_var('ANDROID_API_LEVEL')) + # Filename used for testing if os.name == 'java': # Jython disallows @ in module names diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -167,6 +167,12 @@ - Issue #27285: Update documentation to reflect the deprecation of ``pyvenv`` and normalize on the term "virtual environment". Patch by Steve Piercy. +Tests +----- + +- Issue #27027: Added test.support.is_android that is True when this is an + Android build. + What's New in Python 3.6.0 alpha 2 ================================== -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 12:48:08 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 16:48:08 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge=3A_=2320647=3A_Update_dictobject=2Ec_comments_to_a?= =?utf-8?q?ccount_for_randomized_string?= Message-ID: <20160710164808.29872.63370.39302549@psf.io> https://hg.python.org/cpython/rev/31cdf23da19d changeset: 102299:31cdf23da19d parent: 102297:41dfd92f48f0 parent: 102298:74109d87283f user: R David Murray date: Sun Jul 10 12:40:03 2016 -0400 summary: Merge: #20647: Update dictobject.c comments to account for randomized string hashes. files: Objects/dictobject.c | 13 +++++-------- 1 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -88,20 +88,17 @@ /* Major subtleties ahead: Most hash schemes depend on having a "good" hash function, in the sense of simulating randomness. Python doesn't: its most -important hash functions (for strings and ints) are very regular in common +important hash functions (for ints) are very regular in common cases: - >>> map(hash, (0, 1, 2, 3)) + >>>[hash(i) for i in range(4)] [0, 1, 2, 3] - >>> map(hash, ("namea", "nameb", "namec", "named")) - [-1658398457, -1658398460, -1658398459, -1658398462] - >>> This isn't necessarily bad! To the contrary, in a table of size 2**i, taking the low-order i bits as the initial table index is extremely fast, and there -are no collisions at all for dicts indexed by a contiguous range of ints. -The same is approximately true when keys are "consecutive" strings. So this -gives better-than-random behavior in common cases, and that's very desirable. +are no collisions at all for dicts indexed by a contiguous range of ints. So +this gives better-than-random behavior in common cases, and that's very +desirable. OTOH, when collisions occur, the tendency to fill contiguous slices of the hash table makes a good collision resolution strategy crucial. Taking only -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 12:48:08 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 16:48:08 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogIzIwNjQ3OiBVcGRh?= =?utf-8?q?te_dictobject=2Ec_comments_to_account_for_randomized_string_has?= =?utf-8?q?hes=2E?= Message-ID: <20160710164808.29717.63559.236497B2@psf.io> https://hg.python.org/cpython/rev/74109d87283f changeset: 102298:74109d87283f branch: 3.5 parent: 102294:3356d7c57750 user: R David Murray date: Sun Jul 10 12:33:18 2016 -0400 summary: #20647: Update dictobject.c comments to account for randomized string hashes. Patch by Jaysinh Shukla. files: Objects/dictobject.c | 13 +++++-------- 1 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -88,20 +88,17 @@ /* Major subtleties ahead: Most hash schemes depend on having a "good" hash function, in the sense of simulating randomness. Python doesn't: its most -important hash functions (for strings and ints) are very regular in common +important hash functions (for ints) are very regular in common cases: - >>> map(hash, (0, 1, 2, 3)) + >>>[hash(i) for i in range(4)] [0, 1, 2, 3] - >>> map(hash, ("namea", "nameb", "namec", "named")) - [-1658398457, -1658398460, -1658398459, -1658398462] - >>> This isn't necessarily bad! To the contrary, in a table of size 2**i, taking the low-order i bits as the initial table index is extremely fast, and there -are no collisions at all for dicts indexed by a contiguous range of ints. -The same is approximately true when keys are "consecutive" strings. So this -gives better-than-random behavior in common cases, and that's very desirable. +are no collisions at all for dicts indexed by a contiguous range of ints. So +this gives better-than-random behavior in common cases, and that's very +desirable. OTOH, when collisions occur, the tendency to fill contiguous slices of the hash table makes a good collision resolution strategy crucial. Taking only -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 13:46:45 2016 From: python-checkins at python.org (terry.reedy) Date: Sun, 10 Jul 2016 17:46:45 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327173=3A_Add_=27I?= =?utf-8?q?DLE_Modern_Unix=27_to_the_built-in_key_sets=2E?= Message-ID: <20160710174645.29235.51239.7A45B264@psf.io> https://hg.python.org/cpython/rev/e6e6c71776b0 changeset: 102300:e6e6c71776b0 user: Terry Jan Reedy date: Sun Jul 10 13:46:34 2016 -0400 summary: Issue #27173: Add 'IDLE Modern Unix' to the built-in key sets. Make the default key set depend on the platform. Add tests for changes to the config module. files: Lib/idlelib/config-keys.def | 51 +++++ Lib/idlelib/config-main.def | 4 +- Lib/idlelib/config.py | 130 +++++++++----- Lib/idlelib/configdialog.py | 44 ++++- Lib/idlelib/idle_test/test_config.py | 98 +++++++++++ 5 files changed, 270 insertions(+), 57 deletions(-) diff --git a/Lib/idlelib/config-keys.def b/Lib/idlelib/config-keys.def --- a/Lib/idlelib/config-keys.def +++ b/Lib/idlelib/config-keys.def @@ -109,6 +109,57 @@ del-word-left= del-word-right= +[IDLE Modern Unix] +copy = +cut = +paste = +beginning-of-line = +center-insert = +close-all-windows = +close-window = +do-nothing = +end-of-file = +history-next = +history-previous = +interrupt-execution = +view-restart = +restart-shell = +open-class-browser = +open-module = +open-new-window = +open-window-from-file = +plain-newline-and-indent = +print-window = +python-context-help = +python-docs = +redo = +remove-selection = +save-copy-of-window-as-file = +save-window-as-file = +save-window = +select-all = +toggle-auto-coloring = +undo = +find = +find-again = +find-in-files = +find-selection = +replace = +goto-line = +smart-backspace = +newline-and-indent = +smart-indent = +indent-region = +dedent-region = +comment-region = +uncomment-region = +tabify-region = +untabify-region = +toggle-tabs = +change-indentwidth = +del-word-left = +del-word-right = + [IDLE Classic Mac] copy= cut= diff --git a/Lib/idlelib/config-main.def b/Lib/idlelib/config-main.def --- a/Lib/idlelib/config-main.def +++ b/Lib/idlelib/config-main.def @@ -70,7 +70,9 @@ [Keys] default= 1 -name= IDLE Classic Windows +name= +name2= +# name2 set in user config-main.cfg for keys added after 2016 July 1 [History] cyclic=1 diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py --- a/Lib/idlelib/config.py +++ b/Lib/idlelib/config.py @@ -234,10 +234,7 @@ ' from section %r: %r' % (type, option, section, self.userCfg[configType].Get(section, option, raw=raw))) - try: - print(warning, file=sys.stderr) - except OSError: - pass + _warn(warning, configType, section, option) try: if self.defaultCfg[configType].has_option(section,option): return self.defaultCfg[configType].Get( @@ -251,10 +248,7 @@ ' from section %r.\n' ' returning default value: %r' % (option, section, default)) - try: - print(warning, file=sys.stderr) - except OSError: - pass + _warn(warning, configType, section, option) return default def SetOption(self, configType, section, option, value): @@ -362,47 +356,68 @@ '\n from theme %r.\n' ' returning default color: %r' % (element, themeName, theme[element])) - try: - print(warning, file=sys.stderr) - except OSError: - pass + _warn(warning, 'highlight', themeName, element) theme[element] = cfgParser.Get( themeName, element, default=theme[element]) return theme def CurrentTheme(self): - """Return the name of the currently active text color theme. + "Return the name of the currently active text color theme." + return self.current_colors_and_keys('Theme') - idlelib.config-main.def includes this section + def CurrentKeys(self): + """Return the name of the currently active key set.""" + return self.current_colors_and_keys('Keys') + + def current_colors_and_keys(self, section): + """Return the currently active name for Theme or Keys section. + + idlelib.config-main.def ('default') includes these sections + [Theme] default= 1 name= IDLE Classic name2= - # name2 set in user config-main.cfg for themes added after 2015 Oct 1 - Item name2 is needed because setting name to a new builtin - causes older IDLEs to display multiple error messages or quit. + [Keys] + default= 1 + name= + name2= + + Item 'name2', is used for built-in ('default') themes and keys + added after 2015 Oct 1 and 2016 July 1. This kludge is needed + because setting 'name' to a builtin not defined in older IDLEs + to display multiple error messages or quit. See https://bugs.python.org/issue25313. - When default = True, name2 takes precedence over name, - while older IDLEs will just use name. + When default = True, 'name2' takes precedence over 'name', + while older IDLEs will just use name. When default = False, + 'name2' may still be set, but it is ignored. """ + cfgname = 'highlight' if section == 'Theme' else 'keys' default = self.GetOption('main', 'Theme', 'default', type='bool', default=True) + name = '' if default: - theme = self.GetOption('main', 'Theme', 'name2', default='') - if default and not theme or not default: - theme = self.GetOption('main', 'Theme', 'name', default='') - source = self.defaultCfg if default else self.userCfg - if source['highlight'].has_section(theme): - return theme + name = self.GetOption('main', section, 'name2', default='') + if not name: + name = self.GetOption('main', section, 'name', default='') + if name: + source = self.defaultCfg if default else self.userCfg + if source[cfgname].has_section(name): + return name + return "IDLE Classic" if section == 'Theme' else self.default_keys() + + @staticmethod + def default_keys(): + if sys.platform[:3] == 'win': + return 'IDLE Classic Windows' + elif sys.platform == 'darwin': + return 'IDLE Classic OSX' else: - return "IDLE Classic" + return 'IDLE Modern Unix' - def CurrentKeys(self): - "Return the name of the currently active key set." - return self.GetOption('main', 'Keys', 'name', default='') - - def GetExtensions(self, active_only=True, editor_only=False, shell_only=False): + def GetExtensions(self, active_only=True, + editor_only=False, shell_only=False): """Return extensions in default and user config-extensions files. If active_only True, only return active (enabled) extensions @@ -422,7 +437,7 @@ if self.GetOption('extensions', extn, 'enable', default=True, type='bool'): #the extension is enabled - if editor_only or shell_only: # TODO if both, contradictory + if editor_only or shell_only: # TODO both True contradict if editor_only: option = "enable_editor" else: @@ -527,7 +542,8 @@ eventStr - virtual event, including brackets, as in '<>'. """ eventName = eventStr[2:-2] #trim off the angle brackets - binding = self.GetOption('keys', keySetName, eventName, default='').split() + binding = self.GetOption('keys', keySetName, eventName, default='', + warn_on_default=False).split() return binding def GetCurrentKeySet(self): @@ -638,20 +654,28 @@ '<>': [''] } if keySetName: - for event in keyBindings: - binding = self.GetKeyBinding(keySetName, event) - if binding: - keyBindings[event] = binding - else: #we are going to return a default, print warning - warning=('\n Warning: config.py - IdleConf.GetCoreKeys' - ' -\n problem retrieving key binding for event %r' - '\n from key set %r.\n' - ' returning default value: %r' % - (event, keySetName, keyBindings[event])) - try: - print(warning, file=sys.stderr) - except OSError: - pass + if not (self.userCfg['keys'].has_section(keySetName) or + self.defaultCfg['keys'].has_section(keySetName)): + warning = ( + '\n Warning: config.py - IdleConf.GetCoreKeys -\n' + ' key set %r is not defined, using default bindings.' % + (keySetName,) + ) + _warn(warning, 'keys', keySetName) + else: + for event in keyBindings: + binding = self.GetKeyBinding(keySetName, event) + if binding: + keyBindings[event] = binding + else: #we are going to return a default, print warning + warning = ( + '\n Warning: config.py - IdleConf.GetCoreKeys -\n' + ' problem retrieving key binding for event %r\n' + ' from key set %r.\n' + ' returning default value: %r' % + (event, keySetName, keyBindings[event]) + ) + _warn(warning, 'keys', keySetName, event) return keyBindings def GetExtraHelpSourceList(self, configSet): @@ -735,6 +759,18 @@ idleConf = IdleConf() + +_warned = set() +def _warn(msg, *key): + key = (msg,) + key + if key not in _warned: + try: + print(msg, file=sys.stderr) + except OSError: + pass + _warned.add(key) + + # TODO Revise test output, write expanded unittest # if __name__ == '__main__': diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py --- a/Lib/idlelib/configdialog.py +++ b/Lib/idlelib/configdialog.py @@ -341,6 +341,7 @@ buttonSaveCustomKeys = Button( frames[1], text='Save as New Custom Key Set', command=self.SaveAsNewKeySet) + self.new_custom_keys = Label(frames[0], bd=2) ##widget packing #body @@ -361,6 +362,7 @@ self.radioKeysCustom.grid(row=1, column=0, sticky=W+NS) self.optMenuKeysBuiltin.grid(row=0, column=1, sticky=NSEW) self.optMenuKeysCustom.grid(row=1, column=1, sticky=NSEW) + self.new_custom_keys.grid(row=0, column=2, sticky=NSEW, padx=5, pady=5) self.buttonDeleteCustomKeys.pack(side=LEFT, fill=X, expand=True, padx=2) buttonSaveCustomKeys.pack(side=LEFT, fill=X, expand=True, padx=2) frames[0].pack(side=TOP, fill=BOTH, expand=True) @@ -514,10 +516,11 @@ self.OnNewColourSet() def VarChanged_builtinTheme(self, *params): + oldthemes = ('IDLE Classic', 'IDLE New') value = self.builtinTheme.get() - if value == 'IDLE Dark': - if idleConf.GetOption('main', 'Theme', 'name') != 'IDLE New': - self.AddChangedItem('main', 'Theme', 'name', 'IDLE Classic') + if value not in oldthemes: + if idleConf.GetOption('main', 'Theme', 'name') not in oldthemes: + self.AddChangedItem('main', 'Theme', 'name', oldthemes[0]) self.AddChangedItem('main', 'Theme', 'name2', value) self.new_custom_theme.config(text='New theme, see Help', fg='#500000') @@ -557,8 +560,23 @@ self.AddChangedItem('extensions', extKeybindSection, event, value) def VarChanged_builtinKeys(self, *params): + oldkeys = ( + 'IDLE Classic Windows', + 'IDLE Classic Unix', + 'IDLE Classic Mac', + 'IDLE Classic OSX', + ) value = self.builtinKeys.get() - self.AddChangedItem('main', 'Keys', 'name', value) + if value not in oldkeys: + if idleConf.GetOption('main', 'Keys', 'name') not in oldkeys: + self.AddChangedItem('main', 'Keys', 'name', oldkeys[0]) + self.AddChangedItem('main', 'Keys', 'name2', value) + self.new_custom_keys.config(text='New key set, see Help', + fg='#500000') + else: + self.AddChangedItem('main', 'Keys', 'name', value) + self.AddChangedItem('main', 'Keys', 'name2', '') + self.new_custom_keys.config(text='', fg='black') self.LoadKeysList(value) def VarChanged_customKeys(self, *params): @@ -767,8 +785,10 @@ else: self.optMenuKeysCustom.SetMenu(itemList, itemList[0]) #revert to default key set - self.keysAreBuiltin.set(idleConf.defaultCfg['main'].Get('Keys', 'default')) - self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys', 'name')) + self.keysAreBuiltin.set(idleConf.defaultCfg['main'] + .Get('Keys', 'default')) + self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys', 'name') + or idleConf.default_keys()) #user can't back out of these changes, they must be applied now self.SaveAllChangedConfigs() self.ActivateConfigChanges() @@ -1067,7 +1087,7 @@ self.optMenuKeysCustom.SetMenu(itemList, currentOption) itemList = idleConf.GetSectionList('default', 'keys') itemList.sort() - self.optMenuKeysBuiltin.SetMenu(itemList, itemList[0]) + self.optMenuKeysBuiltin.SetMenu(itemList, idleConf.default_keys()) self.SetKeysType() ##load keyset element list keySetName = idleConf.CurrentKeys() @@ -1369,12 +1389,18 @@ [Cancel] only cancels changes made since the last save. ''' help_pages = { - 'Highlighting':''' + 'Highlighting': ''' Highlighting: The IDLE Dark color theme is new in October 2015. It can only be used with older IDLE releases if it is saved as a custom theme, with a different name. -''' +''', + 'Keys': ''' +Keys: +The IDLE Modern Unix key set is new in June 2016. It can only +be used with older IDLE releases if it is saved as a custom +key set, with a different name. +''', } diff --git a/Lib/idlelib/idle_test/test_config.py b/Lib/idlelib/idle_test/test_config.py new file mode 100644 --- /dev/null +++ b/Lib/idlelib/idle_test/test_config.py @@ -0,0 +1,98 @@ +'''Test idlelib.config. + +Much is tested by opening config dialog live or in test_configdialog. +Coverage: 27% +''' +from sys import modules +from test.support import captured_stderr +from tkinter import Tk +import unittest +from idlelib import config + +# Tests should not depend on fortuitous user configurations. +# They must not affect actual user .cfg files. +# Replace user parsers with empty parsers that cannot be saved. + +idleConf = config.idleConf +usercfg = idleConf.userCfg +testcfg = {} +usermain = testcfg['main'] = config.IdleUserConfParser('') # filename +userhigh = testcfg['highlight'] = config.IdleUserConfParser('') +userkeys = testcfg['keys'] = config.IdleUserConfParser('') + +def setUpModule(): + idleConf.userCfg = testcfg + +def tearDownModule(): + idleConf.userCfg = testcfg + + +class CurrentColorKeysTest(unittest.TestCase): + """Test correct scenarios for colorkeys and wrap functions. + + The 5 correct patterns are possible results of config dialog. + """ + colorkeys = idleConf.current_colors_and_keys + + def test_old_default(self): + # name2 must be blank + usermain.read_string(''' + [Theme] + default= 1 + ''') + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + usermain['Theme']['name'] = 'IDLE New' + self.assertEqual(self.colorkeys('Theme'), 'IDLE New') + usermain['Theme']['name'] = 'non-default' # error + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + usermain.remove_section('Theme') + + def test_new_default(self): + # name2 overrides name + usermain.read_string(''' + [Theme] + default= 1 + name= IDLE New + name2= IDLE Dark + ''') + self.assertEqual(self.colorkeys('Theme'), 'IDLE Dark') + usermain['Theme']['name2'] = 'non-default' # error + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + usermain.remove_section('Theme') + + def test_user_override(self): + # name2 does not matter + usermain.read_string(''' + [Theme] + default= 0 + name= Custom Dark + ''') # error until set userhigh + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + userhigh.read_string('[Custom Dark]\na=b') + self.assertEqual(self.colorkeys('Theme'), 'Custom Dark') + usermain['Theme']['name2'] = 'IDLE Dark' + self.assertEqual(self.colorkeys('Theme'), 'Custom Dark') + usermain.remove_section('Theme') + userhigh.remove_section('Custom Dark') + + +class WarningTest(unittest.TestCase): + + def test_warn(self): + Equal = self.assertEqual + config._warned = set() + with captured_stderr() as stderr: + config._warn('warning', 'key') + Equal(config._warned, {('warning','key')}) + Equal(stderr.getvalue(), 'warning'+'\n') + with captured_stderr() as stderr: + config._warn('warning', 'key') + Equal(stderr.getvalue(), '') + with captured_stderr() as stderr: + config._warn('warn2', 'yek') + Equal(config._warned, {('warning','key'), ('warn2','yek')}) + Equal(stderr.getvalue(), 'warn2'+'\n') + + +if __name__ == '__main__': + unittest.main(verbosity=2) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:01:09 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 18:01:09 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge=3A_=2326176=3A_fix_usage_of_Address_constructor_in?= =?utf-8?q?_email_examples=2E?= Message-ID: <20160710180109.29872.6803.2421DF43@psf.io> https://hg.python.org/cpython/rev/a9c11fecd83b changeset: 102303:a9c11fecd83b parent: 102300:e6e6c71776b0 parent: 102302:1530fd9a7089 user: R David Murray date: Sun Jul 10 14:00:51 2016 -0400 summary: Merge: #26176: fix usage of Address constructor in email examples. files: Doc/includes/email-alternative-new-api.py | 6 +++--- Doc/library/email-examples.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/includes/email-alternative-new-api.py b/Doc/includes/email-alternative-new-api.py --- a/Doc/includes/email-alternative-new-api.py +++ b/Doc/includes/email-alternative-new-api.py @@ -9,9 +9,9 @@ # Create the base text message. msg = EmailMessage() msg['Subject'] = "Ayons asperges pour le d?jeuner" -msg['From'] = Address("Pep? Le Pew", "pepe at example.com") -msg['To'] = (Address("Penelope Pussycat", "penelope at example.com"), - Address("Fabrette Pussycat", "fabrette at example.com")) +msg['From'] = Address("Pep? Le Pew", "pepe", "example.com") +msg['To'] = (Address("Penelope Pussycat", "penelope", "example.com"), + Address("Fabrette Pussycat", "fabrette", "example.com")) msg.set_content("""\ Salut! diff --git a/Doc/library/email-examples.rst b/Doc/library/email-examples.rst --- a/Doc/library/email-examples.rst +++ b/Doc/library/email-examples.rst @@ -61,7 +61,7 @@ Up to the prompt, the output from the above is:: - To: Penelope Pussycat <"penelope at example.com">, Fabrette Pussycat <"fabrette at example.com"> + To: Penelope Pussycat , Fabrette Pussycat From: Pep? Le Pew Subject: Ayons asperges pour le d?jeuner -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:01:09 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 18:01:09 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy4yKTogIzIyNzU4OiBmaXgg?= =?utf-8?q?regression_in_handling_of_secure_cookies=2E?= Message-ID: <20160710180109.17515.86707.EB5296E2@psf.io> https://hg.python.org/cpython/rev/d22fadc18d01 changeset: 102301:d22fadc18d01 branch: 3.2 parent: 99897:b2036b717028 user: R David Murray date: Sun Jul 10 13:32:43 2016 -0400 summary: #22758: fix regression in handling of secure cookies. This backports the fix from #16611, per discussion with the release manager. files: Lib/http/cookies.py | 29 ++++++++++----- Lib/test/test_http_cookies.py | 40 ++++++++++++++++++++++- Misc/NEWS | 3 + 3 files changed, 61 insertions(+), 11 deletions(-) diff --git a/Lib/http/cookies.py b/Lib/http/cookies.py --- a/Lib/http/cookies.py +++ b/Lib/http/cookies.py @@ -338,6 +338,8 @@ "version" : "Version", } + _flags = {'secure', 'httponly'} + def __init__(self): # Set defaults self.key = self.value = self.coded_value = None @@ -437,15 +439,18 @@ (?P # Start of group 'key' [""" + _LegalKeyChars + r"""]+? # Any word of at least one letter ) # End of group 'key' - \s*=\s* # Equal Sign - (?P # Start of group 'val' - "(?:[^\\"]|\\.)*" # Any doublequoted string - | # or + ( # Optional group: there may not be a value. + \s*=\s* # Equal Sign + (?P # Start of group 'val' + "(?:[^\\"]|\\.)*" # Any doublequoted string + | # or \w{3},\s[\w\d\s-]{9,11}\s[\d:]{8}\sGMT # Special case for "expires" attr - | # or - [""" + _LegalValueChars + r"""]* # Any word or empty string - ) # End of group 'val' - \s*;? # Probably ending in a semi-colon + | # or + [""" + _LegalValueChars + r"""]* # Any word or empty string + ) # End of group 'val' + )? # End of optional value group + \s* # Any number of spaces. + (\s+|;|$) # Ending either at space, semicolon, or EOS. """, re.ASCII) # May be removed if safe. @@ -551,8 +556,12 @@ M[key[1:]] = value elif key.lower() in Morsel._reserved: if M: - M[key] = _unquote(value) - else: + if value is None: + if key.lower() in Morsel._flags: + M[key] = True + else: + M[key] = _unquote(value) + elif value is not None: rval, cval = self.value_decode(value) self.__set(key, rval, cval) M = self[key] diff --git a/Lib/test/test_http_cookies.py b/Lib/test/test_http_cookies.py --- a/Lib/test/test_http_cookies.py +++ b/Lib/test/test_http_cookies.py @@ -114,13 +114,51 @@ self.assertEqual(C.output(), 'Set-Cookie: Customer="WILE_E_COYOTE"; Max-Age=10') - # others + def test_set_secure_httponly_attrs(self): C = cookies.SimpleCookie('Customer="WILE_E_COYOTE"') C['Customer']['secure'] = True C['Customer']['httponly'] = True self.assertEqual(C.output(), 'Set-Cookie: Customer="WILE_E_COYOTE"; httponly; secure') + def test_secure_httponly_false_if_not_present(self): + C = cookies.SimpleCookie() + C.load('eggs=scrambled; Path=/bacon') + self.assertFalse(C['eggs']['httponly']) + self.assertFalse(C['eggs']['secure']) + + def test_secure_httponly_true_if_present(self): + # Issue 16611 + C = cookies.SimpleCookie() + C.load('eggs=scrambled; httponly; secure; Path=/bacon') + self.assertTrue(C['eggs']['httponly']) + self.assertTrue(C['eggs']['secure']) + + def test_secure_httponly_true_if_have_value(self): + # This isn't really valid, but demonstrates what the current code + # is expected to do in this case. + C = cookies.SimpleCookie() + C.load('eggs=scrambled; httponly=foo; secure=bar; Path=/bacon') + self.assertTrue(C['eggs']['httponly']) + self.assertTrue(C['eggs']['secure']) + # Here is what it actually does; don't depend on this behavior. These + # checks are testing backward compatibility for issue 16611. + self.assertEqual(C['eggs']['httponly'], 'foo') + self.assertEqual(C['eggs']['secure'], 'bar') + + def test_bad_attrs(self): + # issue 16611: make sure we don't break backward compatibility. + C = cookies.SimpleCookie() + C.load('cookie=with; invalid; version; second=cookie;') + self.assertEqual(C.output(), + 'Set-Cookie: cookie=with\r\nSet-Cookie: second=cookie') + + def test_extra_spaces(self): + C = cookies.SimpleCookie() + C.load('eggs = scrambled ; secure ; path = bar ; foo=foo ') + self.assertEqual(C.output(), + 'Set-Cookie: eggs=scrambled; Path=bar; secure\r\nSet-Cookie: foo=foo') + def test_quoted_meta(self): # Try cookie with quoted meta-data C = cookies.SimpleCookie() diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -28,6 +28,9 @@ self-signed.pythontest.net. This avoids relying on svn.python.org, which recently changed root certificate. +- Issue #22758: Fix a regression that no longer allowed secure and httponly + cookies to be parsed. + What's New in Python 3.2.6? =========================== -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:01:09 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 18:01:09 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogIzI2MTc2OiBmaXgg?= =?utf-8?q?usage_of_Address_constructor_in_email_examples=2E?= Message-ID: <20160710180109.59490.29449.7CB894B6@psf.io> https://hg.python.org/cpython/rev/1530fd9a7089 changeset: 102302:1530fd9a7089 branch: 3.5 parent: 102298:74109d87283f user: R David Murray date: Sun Jul 10 13:59:01 2016 -0400 summary: #26176: fix usage of Address constructor in email examples. Patch by Nathan Harold. files: Doc/includes/email-alternative-new-api.py | 6 +++--- Doc/library/email-examples.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/includes/email-alternative-new-api.py b/Doc/includes/email-alternative-new-api.py --- a/Doc/includes/email-alternative-new-api.py +++ b/Doc/includes/email-alternative-new-api.py @@ -9,9 +9,9 @@ # Create the base text message. msg = EmailMessage() msg['Subject'] = "Ayons asperges pour le d?jeuner" -msg['From'] = Address("Pep? Le Pew", "pepe at example.com") -msg['To'] = (Address("Penelope Pussycat", "penelope at example.com"), - Address("Fabrette Pussycat", "fabrette at example.com")) +msg['From'] = Address("Pep? Le Pew", "pepe", "example.com") +msg['To'] = (Address("Penelope Pussycat", "penelope", "example.com"), + Address("Fabrette Pussycat", "fabrette", "example.com")) msg.set_content("""\ Salut! diff --git a/Doc/library/email-examples.rst b/Doc/library/email-examples.rst --- a/Doc/library/email-examples.rst +++ b/Doc/library/email-examples.rst @@ -61,7 +61,7 @@ Up to the prompt, the output from the above is:: - To: Penelope Pussycat <"penelope at example.com">, Fabrette Pussycat <"fabrette at example.com"> + To: Penelope Pussycat , Fabrette Pussycat From: Pep? Le Pew Subject: Ayons asperges pour le d?jeuner -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:13:22 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 18:13:22 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_=2322758_null_merge?= Message-ID: <20160710181322.115826.91383.8CD4DFEA@psf.io> https://hg.python.org/cpython/rev/ce140ed0a56c changeset: 102307:ce140ed0a56c parent: 102303:a9c11fecd83b parent: 102306:26342c9e8c1d user: R David Murray date: Sun Jul 10 14:12:43 2016 -0400 summary: #22758 null merge files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:13:22 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 18:13:22 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy4zIC0+IDMuNCk6?= =?utf-8?q?_=2322758_null_merge?= Message-ID: <20160710181321.19830.55953.701EA069@psf.io> https://hg.python.org/cpython/rev/5b712993dce5 changeset: 102305:5b712993dce5 branch: 3.4 parent: 102266:6303eccebc12 parent: 102304:1c07bd735282 user: R David Murray date: Sun Jul 10 14:10:56 2016 -0400 summary: #22758 null merge files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:13:49 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 18:13:49 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy40IC0+IDMuNSk6?= =?utf-8?q?_=2322758_null_merge?= Message-ID: <20160710181322.17466.24046.5EC602C3@psf.io> https://hg.python.org/cpython/rev/26342c9e8c1d changeset: 102306:26342c9e8c1d branch: 3.5 parent: 102302:1530fd9a7089 parent: 102305:5b712993dce5 user: R David Murray date: Sun Jul 10 14:11:36 2016 -0400 summary: #22758 null merge files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:13:49 2016 From: python-checkins at python.org (r.david.murray) Date: Sun, 10 Jul 2016 18:13:49 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy4yIC0+IDMuMyk6?= =?utf-8?q?_=2322758_null_merge?= Message-ID: <20160710181321.16329.51396.FACDD8C2@psf.io> https://hg.python.org/cpython/rev/1c07bd735282 changeset: 102304:1c07bd735282 branch: 3.3 parent: 102262:9d09703a890d parent: 102301:d22fadc18d01 user: R David Murray date: Sun Jul 10 14:10:08 2016 -0400 summary: #22758 null merge files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:35:13 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 10 Jul 2016 18:35:13 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327473=3A_Fixed_possible_integer_overflow_in_byt?= =?utf-8?q?es_and_bytearray?= Message-ID: <20160710183513.7908.60220.3C6A687F@psf.io> https://hg.python.org/cpython/rev/de8f0e9196d8 changeset: 102309:de8f0e9196d8 parent: 102299:31cdf23da19d parent: 102308:dac248056b20 user: Serhiy Storchaka date: Sun Jul 10 20:51:35 2016 +0300 summary: Issue #27473: Fixed possible integer overflow in bytes and bytearray concatenations. Patch by Xiang Zhang. files: Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 21 +++++++++------------ Objects/bytesobject.c | 6 ++---- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27473: Fixed possible integer overflow in bytes and bytearray + concatenations. Patch by Xiang Zhang. + - Issue #23034: The output of a special Python build with defined COUNT_ALLOCS, SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now off by default. It can be re-enabled using the "-X showalloccount" option. It now outputs to stderr diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -246,7 +246,6 @@ PyObject * PyByteArray_Concat(PyObject *a, PyObject *b) { - Py_ssize_t size; Py_buffer va, vb; PyByteArrayObject *result = NULL; @@ -259,13 +258,13 @@ goto done; } - size = va.len + vb.len; - if (size < 0) { - PyErr_NoMemory(); - goto done; + if (va.len > PY_SSIZE_T_MAX - vb.len) { + PyErr_NoMemory(); + goto done; } - result = (PyByteArrayObject *) PyByteArray_FromStringAndSize(NULL, size); + result = (PyByteArrayObject *) \ + PyByteArray_FromStringAndSize(NULL, va.len + vb.len); if (result != NULL) { memcpy(result->ob_bytes, va.buf, va.len); memcpy(result->ob_bytes + va.len, vb.buf, vb.len); @@ -290,7 +289,6 @@ static PyObject * bytearray_iconcat(PyByteArrayObject *self, PyObject *other) { - Py_ssize_t mysize; Py_ssize_t size; Py_buffer vo; @@ -300,17 +298,16 @@ return NULL; } - mysize = Py_SIZE(self); - size = mysize + vo.len; - if (size < 0) { + size = Py_SIZE(self); + if (size > PY_SSIZE_T_MAX - vo.len) { PyBuffer_Release(&vo); return PyErr_NoMemory(); } - if (PyByteArray_Resize((PyObject *)self, size) < 0) { + if (PyByteArray_Resize((PyObject *)self, size + vo.len) < 0) { PyBuffer_Release(&vo); return NULL; } - memcpy(PyByteArray_AS_STRING(self) + mysize, vo.buf, vo.len); + memcpy(PyByteArray_AS_STRING(self) + size, vo.buf, vo.len); PyBuffer_Release(&vo); Py_INCREF(self); return (PyObject *)self; diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -1388,7 +1388,6 @@ static PyObject * bytes_concat(PyObject *a, PyObject *b) { - Py_ssize_t size; Py_buffer va, vb; PyObject *result = NULL; @@ -1413,13 +1412,12 @@ goto done; } - size = va.len + vb.len; - if (size < 0) { + if (va.len > PY_SSIZE_T_MAX - vb.len) { PyErr_NoMemory(); goto done; } - result = PyBytes_FromStringAndSize(NULL, size); + result = PyBytes_FromStringAndSize(NULL, va.len + vb.len); if (result != NULL) { memcpy(PyBytes_AS_STRING(result), va.buf, va.len); memcpy(PyBytes_AS_STRING(result) + va.len, vb.buf, vb.len); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:35:13 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 10 Jul 2016 18:35:13 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDcz?= =?utf-8?q?=3A_Fixed_possible_integer_overflow_in_bytes_and_bytearray?= Message-ID: <20160710183513.16461.36952.E09B5E75@psf.io> https://hg.python.org/cpython/rev/dac248056b20 changeset: 102308:dac248056b20 branch: 3.5 parent: 102298:74109d87283f user: Serhiy Storchaka date: Sun Jul 10 20:48:43 2016 +0300 summary: Issue #27473: Fixed possible integer overflow in bytes and bytearray concatenations. Patch by Xiang Zhang. files: Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 21 +++++++++------------ Objects/bytesobject.c | 6 ++---- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27473: Fixed possible integer overflow in bytes and bytearray + concatenations. Patch by Xiang Zhang. + - Issue #27443: __length_hint__() of bytearray itearator no longer return negative integer for resized bytearray. diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -246,7 +246,6 @@ PyObject * PyByteArray_Concat(PyObject *a, PyObject *b) { - Py_ssize_t size; Py_buffer va, vb; PyByteArrayObject *result = NULL; @@ -259,13 +258,13 @@ goto done; } - size = va.len + vb.len; - if (size < 0) { - PyErr_NoMemory(); - goto done; + if (va.len > PY_SSIZE_T_MAX - vb.len) { + PyErr_NoMemory(); + goto done; } - result = (PyByteArrayObject *) PyByteArray_FromStringAndSize(NULL, size); + result = (PyByteArrayObject *) \ + PyByteArray_FromStringAndSize(NULL, va.len + vb.len); if (result != NULL) { memcpy(result->ob_bytes, va.buf, va.len); memcpy(result->ob_bytes + va.len, vb.buf, vb.len); @@ -315,7 +314,6 @@ static PyObject * bytearray_iconcat(PyByteArrayObject *self, PyObject *other) { - Py_ssize_t mysize; Py_ssize_t size; Py_buffer vo; @@ -325,17 +323,16 @@ return NULL; } - mysize = Py_SIZE(self); - size = mysize + vo.len; - if (size < 0) { + size = Py_SIZE(self); + if (size > PY_SSIZE_T_MAX - vo.len) { PyBuffer_Release(&vo); return PyErr_NoMemory(); } - if (PyByteArray_Resize((PyObject *)self, size) < 0) { + if (PyByteArray_Resize((PyObject *)self, size + vo.len) < 0) { PyBuffer_Release(&vo); return NULL; } - memcpy(PyByteArray_AS_STRING(self) + mysize, vo.buf, vo.len); + memcpy(PyByteArray_AS_STRING(self) + size, vo.buf, vo.len); PyBuffer_Release(&vo); Py_INCREF(self); return (PyObject *)self; diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -1265,7 +1265,6 @@ static PyObject * bytes_concat(PyObject *a, PyObject *b) { - Py_ssize_t size; Py_buffer va, vb; PyObject *result = NULL; @@ -1290,13 +1289,12 @@ goto done; } - size = va.len + vb.len; - if (size < 0) { + if (va.len > PY_SSIZE_T_MAX - vb.len) { PyErr_NoMemory(); goto done; } - result = PyBytes_FromStringAndSize(NULL, size); + result = PyBytes_FromStringAndSize(NULL, va.len + vb.len); if (result != NULL) { memcpy(PyBytes_AS_STRING(result), va.buf, va.len); memcpy(PyBytes_AS_STRING(result) + va.len, vb.buf, vb.len); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:35:14 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 10 Jul 2016 18:35:14 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy41IC0+IDMuNSk6?= =?utf-8?q?_Merge_heads?= Message-ID: <20160710183514.1022.7170.8E4C6366@psf.io> https://hg.python.org/cpython/rev/f0a86a0d303a changeset: 102310:f0a86a0d303a branch: 3.5 parent: 102308:dac248056b20 parent: 102306:26342c9e8c1d user: Serhiy Storchaka date: Sun Jul 10 21:34:05 2016 +0300 summary: Merge heads files: Doc/includes/email-alternative-new-api.py | 6 +++--- Doc/library/email-examples.rst | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Doc/includes/email-alternative-new-api.py b/Doc/includes/email-alternative-new-api.py --- a/Doc/includes/email-alternative-new-api.py +++ b/Doc/includes/email-alternative-new-api.py @@ -9,9 +9,9 @@ # Create the base text message. msg = EmailMessage() msg['Subject'] = "Ayons asperges pour le d?jeuner" -msg['From'] = Address("Pep? Le Pew", "pepe at example.com") -msg['To'] = (Address("Penelope Pussycat", "penelope at example.com"), - Address("Fabrette Pussycat", "fabrette at example.com")) +msg['From'] = Address("Pep? Le Pew", "pepe", "example.com") +msg['To'] = (Address("Penelope Pussycat", "penelope", "example.com"), + Address("Fabrette Pussycat", "fabrette", "example.com")) msg.set_content("""\ Salut! diff --git a/Doc/library/email-examples.rst b/Doc/library/email-examples.rst --- a/Doc/library/email-examples.rst +++ b/Doc/library/email-examples.rst @@ -61,7 +61,7 @@ Up to the prompt, the output from the above is:: - To: Penelope Pussycat <"penelope at example.com">, Fabrette Pussycat <"fabrette at example.com"> + To: Penelope Pussycat , Fabrette Pussycat From: Pep? Le Pew Subject: Ayons asperges pour le d?jeuner -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:35:14 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 10 Jul 2016 18:35:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Null_merge?= Message-ID: <20160710183514.29717.59058.0FF8BFCC@psf.io> https://hg.python.org/cpython/rev/54ad5a0fae29 changeset: 102312:54ad5a0fae29 parent: 102311:4294dd8a6805 parent: 102310:f0a86a0d303a user: Serhiy Storchaka date: Sun Jul 10 21:34:50 2016 +0300 summary: Null merge files: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 14:35:14 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 10 Jul 2016 18:35:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_default_-=3E_default?= =?utf-8?q?=29=3A_Merge_heads?= Message-ID: <20160710183514.31419.45343.EE260133@psf.io> https://hg.python.org/cpython/rev/4294dd8a6805 changeset: 102311:4294dd8a6805 parent: 102309:de8f0e9196d8 parent: 102307:ce140ed0a56c user: Serhiy Storchaka date: Sun Jul 10 21:34:25 2016 +0300 summary: Merge heads files: Doc/includes/email-alternative-new-api.py | 6 +- Doc/library/email-examples.rst | 2 +- Lib/idlelib/config-keys.def | 51 +++ Lib/idlelib/config-main.def | 4 +- Lib/idlelib/config.py | 130 ++++++--- Lib/idlelib/configdialog.py | 44 ++- Lib/idlelib/idle_test/test_config.py | 98 +++++++ 7 files changed, 274 insertions(+), 61 deletions(-) diff --git a/Doc/includes/email-alternative-new-api.py b/Doc/includes/email-alternative-new-api.py --- a/Doc/includes/email-alternative-new-api.py +++ b/Doc/includes/email-alternative-new-api.py @@ -9,9 +9,9 @@ # Create the base text message. msg = EmailMessage() msg['Subject'] = "Ayons asperges pour le d?jeuner" -msg['From'] = Address("Pep? Le Pew", "pepe at example.com") -msg['To'] = (Address("Penelope Pussycat", "penelope at example.com"), - Address("Fabrette Pussycat", "fabrette at example.com")) +msg['From'] = Address("Pep? Le Pew", "pepe", "example.com") +msg['To'] = (Address("Penelope Pussycat", "penelope", "example.com"), + Address("Fabrette Pussycat", "fabrette", "example.com")) msg.set_content("""\ Salut! diff --git a/Doc/library/email-examples.rst b/Doc/library/email-examples.rst --- a/Doc/library/email-examples.rst +++ b/Doc/library/email-examples.rst @@ -61,7 +61,7 @@ Up to the prompt, the output from the above is:: - To: Penelope Pussycat <"penelope at example.com">, Fabrette Pussycat <"fabrette at example.com"> + To: Penelope Pussycat , Fabrette Pussycat From: Pep? Le Pew Subject: Ayons asperges pour le d?jeuner diff --git a/Lib/idlelib/config-keys.def b/Lib/idlelib/config-keys.def --- a/Lib/idlelib/config-keys.def +++ b/Lib/idlelib/config-keys.def @@ -109,6 +109,57 @@ del-word-left= del-word-right= +[IDLE Modern Unix] +copy = +cut = +paste = +beginning-of-line = +center-insert = +close-all-windows = +close-window = +do-nothing = +end-of-file = +history-next = +history-previous = +interrupt-execution = +view-restart = +restart-shell = +open-class-browser = +open-module = +open-new-window = +open-window-from-file = +plain-newline-and-indent = +print-window = +python-context-help = +python-docs = +redo = +remove-selection = +save-copy-of-window-as-file = +save-window-as-file = +save-window = +select-all = +toggle-auto-coloring = +undo = +find = +find-again = +find-in-files = +find-selection = +replace = +goto-line = +smart-backspace = +newline-and-indent = +smart-indent = +indent-region = +dedent-region = +comment-region = +uncomment-region = +tabify-region = +untabify-region = +toggle-tabs = +change-indentwidth = +del-word-left = +del-word-right = + [IDLE Classic Mac] copy= cut= diff --git a/Lib/idlelib/config-main.def b/Lib/idlelib/config-main.def --- a/Lib/idlelib/config-main.def +++ b/Lib/idlelib/config-main.def @@ -70,7 +70,9 @@ [Keys] default= 1 -name= IDLE Classic Windows +name= +name2= +# name2 set in user config-main.cfg for keys added after 2016 July 1 [History] cyclic=1 diff --git a/Lib/idlelib/config.py b/Lib/idlelib/config.py --- a/Lib/idlelib/config.py +++ b/Lib/idlelib/config.py @@ -234,10 +234,7 @@ ' from section %r: %r' % (type, option, section, self.userCfg[configType].Get(section, option, raw=raw))) - try: - print(warning, file=sys.stderr) - except OSError: - pass + _warn(warning, configType, section, option) try: if self.defaultCfg[configType].has_option(section,option): return self.defaultCfg[configType].Get( @@ -251,10 +248,7 @@ ' from section %r.\n' ' returning default value: %r' % (option, section, default)) - try: - print(warning, file=sys.stderr) - except OSError: - pass + _warn(warning, configType, section, option) return default def SetOption(self, configType, section, option, value): @@ -362,47 +356,68 @@ '\n from theme %r.\n' ' returning default color: %r' % (element, themeName, theme[element])) - try: - print(warning, file=sys.stderr) - except OSError: - pass + _warn(warning, 'highlight', themeName, element) theme[element] = cfgParser.Get( themeName, element, default=theme[element]) return theme def CurrentTheme(self): - """Return the name of the currently active text color theme. + "Return the name of the currently active text color theme." + return self.current_colors_and_keys('Theme') - idlelib.config-main.def includes this section + def CurrentKeys(self): + """Return the name of the currently active key set.""" + return self.current_colors_and_keys('Keys') + + def current_colors_and_keys(self, section): + """Return the currently active name for Theme or Keys section. + + idlelib.config-main.def ('default') includes these sections + [Theme] default= 1 name= IDLE Classic name2= - # name2 set in user config-main.cfg for themes added after 2015 Oct 1 - Item name2 is needed because setting name to a new builtin - causes older IDLEs to display multiple error messages or quit. + [Keys] + default= 1 + name= + name2= + + Item 'name2', is used for built-in ('default') themes and keys + added after 2015 Oct 1 and 2016 July 1. This kludge is needed + because setting 'name' to a builtin not defined in older IDLEs + to display multiple error messages or quit. See https://bugs.python.org/issue25313. - When default = True, name2 takes precedence over name, - while older IDLEs will just use name. + When default = True, 'name2' takes precedence over 'name', + while older IDLEs will just use name. When default = False, + 'name2' may still be set, but it is ignored. """ + cfgname = 'highlight' if section == 'Theme' else 'keys' default = self.GetOption('main', 'Theme', 'default', type='bool', default=True) + name = '' if default: - theme = self.GetOption('main', 'Theme', 'name2', default='') - if default and not theme or not default: - theme = self.GetOption('main', 'Theme', 'name', default='') - source = self.defaultCfg if default else self.userCfg - if source['highlight'].has_section(theme): - return theme + name = self.GetOption('main', section, 'name2', default='') + if not name: + name = self.GetOption('main', section, 'name', default='') + if name: + source = self.defaultCfg if default else self.userCfg + if source[cfgname].has_section(name): + return name + return "IDLE Classic" if section == 'Theme' else self.default_keys() + + @staticmethod + def default_keys(): + if sys.platform[:3] == 'win': + return 'IDLE Classic Windows' + elif sys.platform == 'darwin': + return 'IDLE Classic OSX' else: - return "IDLE Classic" + return 'IDLE Modern Unix' - def CurrentKeys(self): - "Return the name of the currently active key set." - return self.GetOption('main', 'Keys', 'name', default='') - - def GetExtensions(self, active_only=True, editor_only=False, shell_only=False): + def GetExtensions(self, active_only=True, + editor_only=False, shell_only=False): """Return extensions in default and user config-extensions files. If active_only True, only return active (enabled) extensions @@ -422,7 +437,7 @@ if self.GetOption('extensions', extn, 'enable', default=True, type='bool'): #the extension is enabled - if editor_only or shell_only: # TODO if both, contradictory + if editor_only or shell_only: # TODO both True contradict if editor_only: option = "enable_editor" else: @@ -527,7 +542,8 @@ eventStr - virtual event, including brackets, as in '<>'. """ eventName = eventStr[2:-2] #trim off the angle brackets - binding = self.GetOption('keys', keySetName, eventName, default='').split() + binding = self.GetOption('keys', keySetName, eventName, default='', + warn_on_default=False).split() return binding def GetCurrentKeySet(self): @@ -638,20 +654,28 @@ '<>': [''] } if keySetName: - for event in keyBindings: - binding = self.GetKeyBinding(keySetName, event) - if binding: - keyBindings[event] = binding - else: #we are going to return a default, print warning - warning=('\n Warning: config.py - IdleConf.GetCoreKeys' - ' -\n problem retrieving key binding for event %r' - '\n from key set %r.\n' - ' returning default value: %r' % - (event, keySetName, keyBindings[event])) - try: - print(warning, file=sys.stderr) - except OSError: - pass + if not (self.userCfg['keys'].has_section(keySetName) or + self.defaultCfg['keys'].has_section(keySetName)): + warning = ( + '\n Warning: config.py - IdleConf.GetCoreKeys -\n' + ' key set %r is not defined, using default bindings.' % + (keySetName,) + ) + _warn(warning, 'keys', keySetName) + else: + for event in keyBindings: + binding = self.GetKeyBinding(keySetName, event) + if binding: + keyBindings[event] = binding + else: #we are going to return a default, print warning + warning = ( + '\n Warning: config.py - IdleConf.GetCoreKeys -\n' + ' problem retrieving key binding for event %r\n' + ' from key set %r.\n' + ' returning default value: %r' % + (event, keySetName, keyBindings[event]) + ) + _warn(warning, 'keys', keySetName, event) return keyBindings def GetExtraHelpSourceList(self, configSet): @@ -735,6 +759,18 @@ idleConf = IdleConf() + +_warned = set() +def _warn(msg, *key): + key = (msg,) + key + if key not in _warned: + try: + print(msg, file=sys.stderr) + except OSError: + pass + _warned.add(key) + + # TODO Revise test output, write expanded unittest # if __name__ == '__main__': diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py --- a/Lib/idlelib/configdialog.py +++ b/Lib/idlelib/configdialog.py @@ -341,6 +341,7 @@ buttonSaveCustomKeys = Button( frames[1], text='Save as New Custom Key Set', command=self.SaveAsNewKeySet) + self.new_custom_keys = Label(frames[0], bd=2) ##widget packing #body @@ -361,6 +362,7 @@ self.radioKeysCustom.grid(row=1, column=0, sticky=W+NS) self.optMenuKeysBuiltin.grid(row=0, column=1, sticky=NSEW) self.optMenuKeysCustom.grid(row=1, column=1, sticky=NSEW) + self.new_custom_keys.grid(row=0, column=2, sticky=NSEW, padx=5, pady=5) self.buttonDeleteCustomKeys.pack(side=LEFT, fill=X, expand=True, padx=2) buttonSaveCustomKeys.pack(side=LEFT, fill=X, expand=True, padx=2) frames[0].pack(side=TOP, fill=BOTH, expand=True) @@ -514,10 +516,11 @@ self.OnNewColourSet() def VarChanged_builtinTheme(self, *params): + oldthemes = ('IDLE Classic', 'IDLE New') value = self.builtinTheme.get() - if value == 'IDLE Dark': - if idleConf.GetOption('main', 'Theme', 'name') != 'IDLE New': - self.AddChangedItem('main', 'Theme', 'name', 'IDLE Classic') + if value not in oldthemes: + if idleConf.GetOption('main', 'Theme', 'name') not in oldthemes: + self.AddChangedItem('main', 'Theme', 'name', oldthemes[0]) self.AddChangedItem('main', 'Theme', 'name2', value) self.new_custom_theme.config(text='New theme, see Help', fg='#500000') @@ -557,8 +560,23 @@ self.AddChangedItem('extensions', extKeybindSection, event, value) def VarChanged_builtinKeys(self, *params): + oldkeys = ( + 'IDLE Classic Windows', + 'IDLE Classic Unix', + 'IDLE Classic Mac', + 'IDLE Classic OSX', + ) value = self.builtinKeys.get() - self.AddChangedItem('main', 'Keys', 'name', value) + if value not in oldkeys: + if idleConf.GetOption('main', 'Keys', 'name') not in oldkeys: + self.AddChangedItem('main', 'Keys', 'name', oldkeys[0]) + self.AddChangedItem('main', 'Keys', 'name2', value) + self.new_custom_keys.config(text='New key set, see Help', + fg='#500000') + else: + self.AddChangedItem('main', 'Keys', 'name', value) + self.AddChangedItem('main', 'Keys', 'name2', '') + self.new_custom_keys.config(text='', fg='black') self.LoadKeysList(value) def VarChanged_customKeys(self, *params): @@ -767,8 +785,10 @@ else: self.optMenuKeysCustom.SetMenu(itemList, itemList[0]) #revert to default key set - self.keysAreBuiltin.set(idleConf.defaultCfg['main'].Get('Keys', 'default')) - self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys', 'name')) + self.keysAreBuiltin.set(idleConf.defaultCfg['main'] + .Get('Keys', 'default')) + self.builtinKeys.set(idleConf.defaultCfg['main'].Get('Keys', 'name') + or idleConf.default_keys()) #user can't back out of these changes, they must be applied now self.SaveAllChangedConfigs() self.ActivateConfigChanges() @@ -1067,7 +1087,7 @@ self.optMenuKeysCustom.SetMenu(itemList, currentOption) itemList = idleConf.GetSectionList('default', 'keys') itemList.sort() - self.optMenuKeysBuiltin.SetMenu(itemList, itemList[0]) + self.optMenuKeysBuiltin.SetMenu(itemList, idleConf.default_keys()) self.SetKeysType() ##load keyset element list keySetName = idleConf.CurrentKeys() @@ -1369,12 +1389,18 @@ [Cancel] only cancels changes made since the last save. ''' help_pages = { - 'Highlighting':''' + 'Highlighting': ''' Highlighting: The IDLE Dark color theme is new in October 2015. It can only be used with older IDLE releases if it is saved as a custom theme, with a different name. -''' +''', + 'Keys': ''' +Keys: +The IDLE Modern Unix key set is new in June 2016. It can only +be used with older IDLE releases if it is saved as a custom +key set, with a different name. +''', } diff --git a/Lib/idlelib/idle_test/test_config.py b/Lib/idlelib/idle_test/test_config.py new file mode 100644 --- /dev/null +++ b/Lib/idlelib/idle_test/test_config.py @@ -0,0 +1,98 @@ +'''Test idlelib.config. + +Much is tested by opening config dialog live or in test_configdialog. +Coverage: 27% +''' +from sys import modules +from test.support import captured_stderr +from tkinter import Tk +import unittest +from idlelib import config + +# Tests should not depend on fortuitous user configurations. +# They must not affect actual user .cfg files. +# Replace user parsers with empty parsers that cannot be saved. + +idleConf = config.idleConf +usercfg = idleConf.userCfg +testcfg = {} +usermain = testcfg['main'] = config.IdleUserConfParser('') # filename +userhigh = testcfg['highlight'] = config.IdleUserConfParser('') +userkeys = testcfg['keys'] = config.IdleUserConfParser('') + +def setUpModule(): + idleConf.userCfg = testcfg + +def tearDownModule(): + idleConf.userCfg = testcfg + + +class CurrentColorKeysTest(unittest.TestCase): + """Test correct scenarios for colorkeys and wrap functions. + + The 5 correct patterns are possible results of config dialog. + """ + colorkeys = idleConf.current_colors_and_keys + + def test_old_default(self): + # name2 must be blank + usermain.read_string(''' + [Theme] + default= 1 + ''') + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + usermain['Theme']['name'] = 'IDLE New' + self.assertEqual(self.colorkeys('Theme'), 'IDLE New') + usermain['Theme']['name'] = 'non-default' # error + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + usermain.remove_section('Theme') + + def test_new_default(self): + # name2 overrides name + usermain.read_string(''' + [Theme] + default= 1 + name= IDLE New + name2= IDLE Dark + ''') + self.assertEqual(self.colorkeys('Theme'), 'IDLE Dark') + usermain['Theme']['name2'] = 'non-default' # error + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + usermain.remove_section('Theme') + + def test_user_override(self): + # name2 does not matter + usermain.read_string(''' + [Theme] + default= 0 + name= Custom Dark + ''') # error until set userhigh + self.assertEqual(self.colorkeys('Theme'), 'IDLE Classic') + userhigh.read_string('[Custom Dark]\na=b') + self.assertEqual(self.colorkeys('Theme'), 'Custom Dark') + usermain['Theme']['name2'] = 'IDLE Dark' + self.assertEqual(self.colorkeys('Theme'), 'Custom Dark') + usermain.remove_section('Theme') + userhigh.remove_section('Custom Dark') + + +class WarningTest(unittest.TestCase): + + def test_warn(self): + Equal = self.assertEqual + config._warned = set() + with captured_stderr() as stderr: + config._warn('warning', 'key') + Equal(config._warned, {('warning','key')}) + Equal(stderr.getvalue(), 'warning'+'\n') + with captured_stderr() as stderr: + config._warn('warning', 'key') + Equal(stderr.getvalue(), '') + with captured_stderr() as stderr: + config._warn('warn2', 'yek') + Equal(config._warned, {('warning','key'), ('warn2','yek')}) + Equal(stderr.getvalue(), 'warn2'+'\n') + + +if __name__ == '__main__': + unittest.main(verbosity=2) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 15:24:47 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 10 Jul 2016 19:24:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_issue27476_-_Introduce_a_?= =?utf-8?q?=2Egithub_template_to_discourage_github_pull_requests?= Message-ID: <20160710192447.31453.64453.24D1215F@psf.io> https://hg.python.org/cpython/rev/40e2dd4f7612 changeset: 102313:40e2dd4f7612 user: Senthil Kumaran date: Sun Jul 10 12:24:41 2016 -0700 summary: issue27476 - Introduce a .github template to discourage github pull requests and point users to developers guide. files: .github/PULL_REQUEST_TEMPLATE.md | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,9 @@ +## CPython Mirror + +https://github.com/python/cpython is a cpython mirror repository. Pull requests +are not accepted on this repo and will be automatically closed. + +### Submit patches at https://bugs.python.org + +For additional information about contributing to CPython, see the +[developer's guide](https://docs.python.org/devguide/#contributing). -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 17:26:44 2016 From: python-checkins at python.org (terry.reedy) Date: Sun, 10 Jul 2016 21:26:44 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327173=3A_Fix_erro?= =?utf-8?q?r_in_test=5Fconfig_that_caused_test=5Fidle_to_fail=2E?= Message-ID: <20160710212644.59397.56019.57A7424B@psf.io> https://hg.python.org/cpython/rev/792e3294b59e changeset: 102314:792e3294b59e user: Terry Jan Reedy date: Sun Jul 10 17:26:24 2016 -0400 summary: Issue #27173: Fix error in test_config that caused test_idle to fail. files: Lib/idlelib/idle_test/test_config.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/idlelib/idle_test/test_config.py b/Lib/idlelib/idle_test/test_config.py --- a/Lib/idlelib/idle_test/test_config.py +++ b/Lib/idlelib/idle_test/test_config.py @@ -24,7 +24,7 @@ idleConf.userCfg = testcfg def tearDownModule(): - idleConf.userCfg = testcfg + idleConf.userCfg = usercfg class CurrentColorKeysTest(unittest.TestCase): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 17:28:22 2016 From: python-checkins at python.org (terry.reedy) Date: Sun, 10 Jul 2016 21:28:22 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Refine_geometry_of_idlelib?= =?utf-8?q?_htests_=28and_a_few_other_fix-ups=29=2E?= Message-ID: <20160710212822.28989.24309.B5FF7346@psf.io> https://hg.python.org/cpython/rev/fdf4d1984659 changeset: 102315:fdf4d1984659 user: Terry Jan Reedy date: Sun Jul 10 17:28:10 2016 -0400 summary: Refine geometry of idlelib htests (and a few other fix-ups). files: Lib/idlelib/calltip_w.py | 4 +- Lib/idlelib/colorizer.py | 5 ++- Lib/idlelib/debugobj.py | 6 +-- Lib/idlelib/dynoption.py | 4 +- Lib/idlelib/grep.py | 5 +-- Lib/idlelib/idle_test/test_configdialog.py | 2 +- Lib/idlelib/iomenu.py | 4 +- Lib/idlelib/multicall.py | 4 +- Lib/idlelib/percolator.py | 5 +-- Lib/idlelib/redirector.py | 6 ++-- Lib/idlelib/replace.py | 6 ++-- Lib/idlelib/scrolledlist.py | 4 +- Lib/idlelib/search.py | 7 ++-- Lib/idlelib/stackviewer.py | 6 ++-- Lib/idlelib/statusbar.py | 9 ++--- Lib/idlelib/tabbedpages.py | 5 +-- Lib/idlelib/tooltip.py | 15 ++++----- Lib/idlelib/tree.py | 4 +- Lib/idlelib/undo.py | 9 ++--- 19 files changed, 52 insertions(+), 58 deletions(-) diff --git a/Lib/idlelib/calltip_w.py b/Lib/idlelib/calltip_w.py --- a/Lib/idlelib/calltip_w.py +++ b/Lib/idlelib/calltip_w.py @@ -138,8 +138,8 @@ top = Toplevel(parent) top.title("Test calltips") - top.geometry("200x100+%d+%d" % (parent.winfo_rootx() + 200, - parent.winfo_rooty() + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("200x100+%d+%d" % (x + 250, y + 175)) text = Text(top) text.pack(side=LEFT, fill=BOTH, expand=1) text.insert("insert", "string.split") diff --git a/Lib/idlelib/colorizer.py b/Lib/idlelib/colorizer.py --- a/Lib/idlelib/colorizer.py +++ b/Lib/idlelib/colorizer.py @@ -259,8 +259,8 @@ top = Toplevel(parent) top.title("Test ColorDelegator") - top.geometry("200x100+%d+%d" % (parent.winfo_rootx() + 200, - parent.winfo_rooty() + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("200x100+%d+%d" % (x + 250, y + 175)) source = "if somename: x = 'abc' # comment\nprint\n" text = Text(top, background="white") text.pack(expand=1, fill="both") @@ -276,5 +276,6 @@ import unittest unittest.main('idlelib.idle_test.test_colorizer', verbosity=2, exit=False) + from idlelib.idle_test.htest import run run(_color_delegator) diff --git a/Lib/idlelib/debugobj.py b/Lib/idlelib/debugobj.py --- a/Lib/idlelib/debugobj.py +++ b/Lib/idlelib/debugobj.py @@ -9,8 +9,6 @@ # XXX TO DO: # - for classes/modules, add "open source" to object browser -import re - from idlelib.tree import TreeItem, TreeNode, ScrolledCanvas from reprlib import Repr @@ -127,8 +125,8 @@ from tkinter import Toplevel top = Toplevel(parent) top.title("Test debug object browser") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x + 100, y + 175)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x + 100, y + 175)) top.configure(bd=0, bg="yellow") top.focus_set() sc = ScrolledCanvas(top, bg="white", highlightthickness=0, takefocus=1) diff --git a/Lib/idlelib/dynoption.py b/Lib/idlelib/dynoption.py --- a/Lib/idlelib/dynoption.py +++ b/Lib/idlelib/dynoption.py @@ -38,8 +38,8 @@ top = Toplevel(parent) top.title("Tets dynamic option menu") - top.geometry("200x100+%d+%d" % (parent.winfo_rootx() + 200, - parent.winfo_rooty() + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("200x100+%d+%d" % (x + 250, y + 175)) top.focus_set() var = StringVar(top) diff --git a/Lib/idlelib/grep.py b/Lib/idlelib/grep.py --- a/Lib/idlelib/grep.py +++ b/Lib/idlelib/grep.py @@ -1,6 +1,5 @@ import os import fnmatch -import re # for htest import sys from tkinter import StringVar, BooleanVar, Checkbutton # for GrepDialog from idlelib import searchengine @@ -134,8 +133,8 @@ from tkinter import Toplevel, Text, Button, SEL, END top = Toplevel(parent) top.title("Test GrepDialog") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x, y + 175)) flist = PyShellFileList(top) text = Text(top, height=5) diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py --- a/Lib/idlelib/idle_test/test_configdialog.py +++ b/Lib/idlelib/idle_test/test_configdialog.py @@ -21,7 +21,7 @@ cls.root.destroy() del cls.root - def test_dialog(self): + def test_configdialog(self): d = ConfigDialog(self.root, 'Test', _utest=True) d.remove_var_callbacks() diff --git a/Lib/idlelib/iomenu.py b/Lib/idlelib/iomenu.py --- a/Lib/idlelib/iomenu.py +++ b/Lib/idlelib/iomenu.py @@ -535,8 +535,8 @@ root = Toplevel(parent) root.title("Test IOBinding") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - root.geometry("+%d+%d"%(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + root.geometry("+%d+%d" % (x, y + 175)) class MyEditWin: def __init__(self, text): self.text = text diff --git a/Lib/idlelib/multicall.py b/Lib/idlelib/multicall.py --- a/Lib/idlelib/multicall.py +++ b/Lib/idlelib/multicall.py @@ -417,8 +417,8 @@ def _multi_call(parent): # htest # top = tkinter.Toplevel(parent) top.title("Test MultiCall") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x, y + 175)) text = MultiCallCreator(tkinter.Text)(top) text.pack() def bindseq(seq, n=[0]): diff --git a/Lib/idlelib/percolator.py b/Lib/idlelib/percolator.py --- a/Lib/idlelib/percolator.py +++ b/Lib/idlelib/percolator.py @@ -57,7 +57,6 @@ def _percolator(parent): # htest # import tkinter as tk - import re class Tracer(Delegator): def __init__(self, name): @@ -74,8 +73,8 @@ box = tk.Toplevel(parent) box.title("Test Percolator") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - box.geometry("+%d+%d" % (x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + box.geometry("+%d+%d" % (x, y + 175)) text = tk.Text(box) p = Percolator(text) pin = p.insertfilter diff --git a/Lib/idlelib/redirector.py b/Lib/idlelib/redirector.py --- a/Lib/idlelib/redirector.py +++ b/Lib/idlelib/redirector.py @@ -152,12 +152,11 @@ def _widget_redirector(parent): # htest # from tkinter import Toplevel, Text - import re top = Toplevel(parent) top.title("Test WidgetRedirector") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x, y + 175)) text = Text(top) text.pack() text.focus_set() @@ -171,5 +170,6 @@ import unittest unittest.main('idlelib.idle_test.test_redirector', verbosity=2, exit=False) + from idlelib.idle_test.htest import run run(_widget_redirector) diff --git a/Lib/idlelib/replace.py b/Lib/idlelib/replace.py --- a/Lib/idlelib/replace.py +++ b/Lib/idlelib/replace.py @@ -207,8 +207,8 @@ """htest wrapper function""" box = Toplevel(parent) box.title("Test ReplaceDialog") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - box.geometry("+%d+%d"%(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + box.geometry("+%d+%d" % (x, y + 175)) # mock undo delegator methods def undo_block_start(): @@ -234,7 +234,7 @@ if __name__ == '__main__': import unittest - unittest.main('idlelib.idle_test.test_replacedialog', + unittest.main('idlelib.idle_test.test_replace', verbosity=2, exit=False) from idlelib.idle_test.htest import run diff --git a/Lib/idlelib/scrolledlist.py b/Lib/idlelib/scrolledlist.py --- a/Lib/idlelib/scrolledlist.py +++ b/Lib/idlelib/scrolledlist.py @@ -127,8 +127,8 @@ def _scrolled_list(parent): # htest # top = Toplevel(parent) - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x+200, y + 175)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x+200, y + 175)) class MyScrolledList(ScrolledList): def fill_menu(self): self.menu.add_command(label="right click") def on_select(self, index): print("select", self.get(index)) diff --git a/Lib/idlelib/search.py b/Lib/idlelib/search.py --- a/Lib/idlelib/search.py +++ b/Lib/idlelib/search.py @@ -75,8 +75,8 @@ '''Display search test box.''' box = Toplevel(parent) box.title("Test SearchDialog") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - box.geometry("+%d+%d"%(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + box.geometry("+%d+%d" % (x, y + 175)) text = Text(box, inactiveselectbackground='gray') text.pack() text.insert("insert","This is a sample string.\n"*5) @@ -91,7 +91,8 @@ if __name__ == '__main__': import unittest - unittest.main('idlelib.idle_test.test_searchdialog', + unittest.main('idlelib.idle_test.test_search', verbosity=2, exit=False) + from idlelib.idle_test.htest import run run(_search_dialog) diff --git a/Lib/idlelib/stackviewer.py b/Lib/idlelib/stackviewer.py --- a/Lib/idlelib/stackviewer.py +++ b/Lib/idlelib/stackviewer.py @@ -120,11 +120,11 @@ sublist.append(item) return sublist -def _stack_viewer(parent): +def _stack_viewer(parent): # htest # top = tk.Toplevel(parent) top.title("Test StackViewer") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x + 50, y + 175)) flist = PyShellFileList(top) try: # to obtain a traceback object intentional_name_error diff --git a/Lib/idlelib/statusbar.py b/Lib/idlelib/statusbar.py --- a/Lib/idlelib/statusbar.py +++ b/Lib/idlelib/statusbar.py @@ -17,15 +17,14 @@ label.config(width=width) label.config(text=text) -def _multistatus_bar(parent): - import re +def _multistatus_bar(parent): # htest # from tkinter import Toplevel, Frame, Text, Button top = Toplevel(parent) - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d" %(x, y + 150)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" %(x, y + 175)) top.title("Test multistatus bar") frame = Frame(top) - text = Text(frame) + text = Text(frame, height=5, width=40) text.pack() msb = MultiStatusBar(frame) msb.set_label("one", "hello") diff --git a/Lib/idlelib/tabbedpages.py b/Lib/idlelib/tabbedpages.py --- a/Lib/idlelib/tabbedpages.py +++ b/Lib/idlelib/tabbedpages.py @@ -468,10 +468,9 @@ self._tab_set.set_selected_tab(page_name) def _tabbed_pages(parent): # htest # - import re top=Toplevel(parent) - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x, y + 175)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x, y + 175)) top.title("Test tabbed pages") tabPage=TabbedPageSet(top, page_names=['Foobar','Baz'], n_rows=0, expand_tabs=False, diff --git a/Lib/idlelib/tooltip.py b/Lib/idlelib/tooltip.py --- a/Lib/idlelib/tooltip.py +++ b/Lib/idlelib/tooltip.py @@ -77,20 +77,19 @@ listbox.insert(END, item) def _tooltip(parent): # htest # - root = Tk() - root.title("Test tooltip") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - root.geometry("+%d+%d"%(x, y + 150)) - label = Label(root, text="Place your mouse over buttons") + top = Toplevel(parent) + top.title("Test tooltip") + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x, y + 150)) + label = Label(top, text="Place your mouse over buttons") label.pack() - button1 = Button(root, text="Button 1") - button2 = Button(root, text="Button 2") + button1 = Button(top, text="Button 1") + button2 = Button(top, text="Button 2") button1.pack() button2.pack() ToolTip(button1, "This is tooltip text for button1.") ListboxToolTip(button2, ["This is","multiple line", "tooltip text","for button2"]) - root.mainloop() if __name__ == '__main__': from idlelib.idle_test.htest import run diff --git a/Lib/idlelib/tree.py b/Lib/idlelib/tree.py --- a/Lib/idlelib/tree.py +++ b/Lib/idlelib/tree.py @@ -451,8 +451,8 @@ def _tree_widget(parent): # htest # top = Toplevel(parent) - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - top.geometry("+%d+%d"%(x+50, y+175)) + x, y = map(int, parent.geometry().split('+')[1:]) + top.geometry("+%d+%d" % (x+50, y+175)) sc = ScrolledCanvas(top, bg="white", highlightthickness=0, takefocus=1) sc.frame.pack(expand=1, fill="both", side=LEFT) item = FileTreeItem(ICONDIR) diff --git a/Lib/idlelib/undo.py b/Lib/idlelib/undo.py --- a/Lib/idlelib/undo.py +++ b/Lib/idlelib/undo.py @@ -338,13 +338,12 @@ def _undo_delegator(parent): # htest # - import re from tkinter import Toplevel, Text, Button from idlelib.percolator import Percolator undowin = Toplevel(parent) undowin.title("Test UndoDelegator") - width, height, x, y = list(map(int, re.split('[x+]', parent.geometry()))) - undowin.geometry("+%d+%d"%(x, y + 175)) + x, y = map(int, parent.geometry().split('+')[1:]) + undowin.geometry("+%d+%d" % (x, y + 175)) text = Text(undowin, height=10) text.pack() @@ -362,7 +361,7 @@ if __name__ == "__main__": import unittest - unittest.main('idlelib.idle_test.test_undo', verbosity=2, - exit=False) + unittest.main('idlelib.idle_test.test_undo', verbosity=2, exit=False) + from idlelib.idle_test.htest import run run(_undo_delegator) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 20:21:43 2016 From: python-checkins at python.org (terry.reedy) Date: Mon, 11 Jul 2016 00:21:43 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327477=3A_Convert_?= =?utf-8?q?IDLE_search_dialogs_to_using_ttk_widgets=2E?= Message-ID: <20160711002143.8356.53251.97F4D674@psf.io> https://hg.python.org/cpython/rev/91fe65e3d7bb changeset: 102316:91fe65e3d7bb user: Terry Jan Reedy date: Sun Jul 10 20:21:31 2016 -0400 summary: Issue #27477: Convert IDLE search dialogs to using ttk widgets. files: Lib/idlelib/grep.py | 13 ++-- Lib/idlelib/idle_test/htest.py | 7 ++ Lib/idlelib/idle_test/test_searchbase.py | 13 +---- Lib/idlelib/replace.py | 6 +- Lib/idlelib/search.py | 11 ++- Lib/idlelib/searchbase.py | 36 ++++++++--- 6 files changed, 50 insertions(+), 36 deletions(-) diff --git a/Lib/idlelib/grep.py b/Lib/idlelib/grep.py --- a/Lib/idlelib/grep.py +++ b/Lib/idlelib/grep.py @@ -1,7 +1,8 @@ import os import fnmatch import sys -from tkinter import StringVar, BooleanVar, Checkbutton # for GrepDialog +from tkinter import StringVar, BooleanVar +from tkinter.ttk import Checkbutton from idlelib import searchengine from idlelib.searchbase import SearchDialogBase # Importing OutputWindow fails due to import loop @@ -45,13 +46,10 @@ self.globent = self.make_entry("In files:", self.globvar)[0] def create_other_buttons(self): - f = self.make_frame()[0] - - btn = Checkbutton(f, anchor="w", - variable=self.recvar, + btn = Checkbutton( + self.make_frame()[0], variable=self.recvar, text="Recurse down subdirectories") btn.pack(side="top", fill="both") - btn.select() def create_command_buttons(self): SearchDialogBase.create_command_buttons(self) @@ -130,7 +128,8 @@ def _grep_dialog(parent): # htest # from idlelib.pyshell import PyShellFileList - from tkinter import Toplevel, Text, Button, SEL, END + from tkinter import Toplevel, Text, SEL, END + from tkinter.ttk import Button top = Toplevel(parent) top.title("Test GrepDialog") x, y = map(int, parent.geometry().split('+')[1:]) diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py --- a/Lib/idlelib/idle_test/htest.py +++ b/Lib/idlelib/idle_test/htest.py @@ -265,6 +265,13 @@ "Click [Close] or [X] to close the 'Search Dialog'." } +_searchbase_spec = { + 'file': 'searchbase', + 'kwds': {}, + 'msg': "Check the appearance of the base search dialog\n" + "Its only action is to close." + } + _scrolled_list_spec = { 'file': 'scrolledlist', 'kwds': {}, diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py --- a/Lib/idlelib/idle_test/test_searchbase.py +++ b/Lib/idlelib/idle_test/test_searchbase.py @@ -1,8 +1,7 @@ -'''Unittests for idlelib/searchbase.py +'''tests idlelib.searchbase. Coverage: 99%. The only thing not covered is inconsequential -- testing skipping of suite when self.needwrapbutton is false. - ''' import unittest from test.support import requires @@ -120,11 +119,6 @@ var, label = spec self.assertEqual(button['text'], label) self.assertEqual(var.get(), state) - if state == 1: - button.deselect() - else: - button.select() - self.assertEqual(var.get(), 1 - state) def test_create_other_buttons(self): for state in (False, True): @@ -140,10 +134,6 @@ # hit other button, then this one # indexes depend on button order self.assertEqual(var.get(), state) - buttons[val].select() - self.assertEqual(var.get(), 1 - state) - buttons[1-val].select() - self.assertEqual(var.get(), state) def test_make_button(self): self.dialog.top = self.root @@ -162,6 +152,5 @@ self.assertIn('close', closebuttoncommand) - if __name__ == '__main__': unittest.main(verbosity=2, exit=2) diff --git a/Lib/idlelib/replace.py b/Lib/idlelib/replace.py --- a/Lib/idlelib/replace.py +++ b/Lib/idlelib/replace.py @@ -3,7 +3,7 @@ Defines various replace related functions like replace, replace all, replace+find. """ -from tkinter import * +from tkinter import StringVar, TclError from idlelib import searchengine from idlelib.searchbase import SearchDialogBase @@ -204,7 +204,9 @@ def _replace_dialog(parent): # htest # - """htest wrapper function""" + from tkinter import Toplevel, Text + from tkiter.ttk import Button + box = Toplevel(parent) box.title("Test ReplaceDialog") x, y = map(int, parent.geometry().split('+')[1:]) diff --git a/Lib/idlelib/search.py b/Lib/idlelib/search.py --- a/Lib/idlelib/search.py +++ b/Lib/idlelib/search.py @@ -1,4 +1,4 @@ -from tkinter import * +from tkinter import TclError from idlelib import searchengine from idlelib.searchbase import SearchDialogBase @@ -72,7 +72,10 @@ def _search_dialog(parent): # htest # - '''Display search test box.''' + "Display search test box." + from tkinter import Toplevel, Text + from tkinter.ttk import Button + box = Toplevel(parent) box.title("Test SearchDialog") x, y = map(int, parent.geometry().split('+')[1:]) @@ -82,9 +85,9 @@ text.insert("insert","This is a sample string.\n"*5) def show_find(): - text.tag_add(SEL, "1.0", END) + text.tag_add('sel', '1.0', 'end') _setup(text).open(text) - text.tag_remove(SEL, "1.0", END) + text.tag_remove('sel', '1.0', 'end') button = Button(box, text="Search (selection ignored)", command=show_find) button.pack() diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -1,7 +1,7 @@ '''Define SearchDialogBase used by Search, Replace, and Grep dialogs.''' -from tkinter import (Toplevel, Frame, Entry, Label, Button, - Checkbutton, Radiobutton) +from tkinter import Toplevel, Frame +from tkinter.ttk import Entry, Label, Button, Checkbutton, Radiobutton class SearchDialogBase: '''Create most of a 3 or 4 row, 3 column search dialog. @@ -137,10 +137,8 @@ if self.needwrapbutton: options.append((engine.wrapvar, "Wrap around")) for var, label in options: - btn = Checkbutton(frame, anchor="w", variable=var, text=label) + btn = Checkbutton(frame, variable=var, text=label) btn.pack(side="left", fill="both") - if var.get(): - btn.select() return frame, options def create_other_buttons(self): @@ -153,11 +151,8 @@ var = self.engine.backvar others = [(1, 'Up'), (0, 'Down')] for val, label in others: - btn = Radiobutton(frame, anchor="w", - variable=var, value=val, text=label) + btn = Radiobutton(frame, variable=var, value=val, text=label) btn.pack(side="left", fill="both") - if var.get() == val: - btn.select() return frame, others def make_button(self, label, command, isdef=0): @@ -178,7 +173,26 @@ b = self.make_button("close", self.close) b.lower() + +class _searchbase(SearchDialogBase): # htest # + "Create auto-opening dialog with no text connection." + + def __init__(self, parent): + import re + from idlelib import searchengine + + self.root = parent + self.engine = searchengine.get(parent) + self.create_widgets() + print(parent.geometry()) + width,height, x,y = list(map(int, re.split('[x+]', parent.geometry()))) + self.top.geometry("+%d+%d" % (x + 40, y + 175)) + + def default_command(self): pass + if __name__ == '__main__': import unittest - unittest.main( - 'idlelib.idle_test.test_searchdialogbase', verbosity=2) + unittest.main('idlelib.idle_test.test_searchbase', verbosity=2, exit=False) + + from idlelib.idle_test.htest import run + run(_searchbase) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 20:30:56 2016 From: python-checkins at python.org (terry.reedy) Date: Mon, 11 Jul 2016 00:30:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_IDLE_NEWS_items=2E?= Message-ID: <20160711003056.17282.11873.A27FE38B@psf.io> https://hg.python.org/cpython/rev/bd90a39c9d66 changeset: 102317:bd90a39c9d66 user: Terry Jan Reedy date: Sun Jul 10 20:30:43 2016 -0400 summary: IDLE NEWS items. files: Lib/idlelib/NEWS.txt | 18 ++++++++++++++++++ Misc/NEWS | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+), 0 deletions(-) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -2,6 +2,24 @@ =========================== *Release date: 2016-09-??* +- Issue #27477: IDLE search dialogs now use ttk widgets. + +- Issue #27173: Add 'IDLE Modern Unix' to the built-in key sets. + Make the default key set depend on the platform. + Add tests for the changes to the config module. + +- Issue #27452: make command line "idle-test> python test_help.py" work. + __file__ is relative when python is started in the file's directory. + +- Issue #27452: add line counter and crc to IDLE configHandler test dump. + +- Issue #27380: IDLE: add query.py with base Query dialog and ttk widgets. + Module had subclasses SectionName, ModuleName, and HelpSource, which are + used to get information from users by configdialog and file =>Load Module. + Each subclass has itw own validity checks. Using ModuleName allows users + to edit bad module names instead of starting over. + Add tests and delete the two files combined into the new one. + - Issue #27372: Test_idle no longer changes the locale. - Issue #27365: Allow non-ascii chars in IDLE NEWS.txt, for contributor names. diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -116,6 +116,24 @@ IDLE ---- +- Issue #27477: IDLE search dialogs now use ttk widgets. + +- Issue #27173: Add 'IDLE Modern Unix' to the built-in key sets. + Make the default key set depend on the platform. + Add tests for the changes to the config module. + +- Issue #27452: make command line "idle-test> python test_help.py" work. + __file__ is relative when python is started in the file's directory. + +- Issue #27452: add line counter and crc to IDLE configHandler test dump. + +- Issue #27380: IDLE: add query.py with base Query dialog and ttk widgets. + Module had subclasses SectionName, ModuleName, and HelpSource, which are + used to get information from users by configdialog and file =>Load Module. + Each subclass has itw own validity checks. Using ModuleName allows users + to edit bad module names instead of starting over. + Add tests and delete the two files combined into the new one. + - Issue #27372: Test_idle no longer changes the locale. - Issue #27365: Allow non-ascii chars in IDLE NEWS.txt, for contributor names. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 21:38:07 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 01:38:07 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzIzODA0?= =?utf-8?q?=3A_Fix_SSL_zero-length_recv=28=29_calls_to_not_block_and_raise?= =?utf-8?q?_EOF?= Message-ID: <20160711013807.7927.90565.1C37AEE5@psf.io> https://hg.python.org/cpython/rev/43d7e5fb3bc2 changeset: 102319:43d7e5fb3bc2 branch: 2.7 parent: 102296:c613d8885054 user: Martin Panter date: Mon Jul 11 00:17:13 2016 +0000 summary: Issue #23804: Fix SSL zero-length recv() calls to not block and raise EOF files: Lib/test/test_ssl.py | 29 +++++++++++++++++++++-------- Misc/NEWS | 3 +++ Modules/_ssl.c | 8 ++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -2622,20 +2622,13 @@ # consume data s.read() + # read(-1, buffer) is supported, even though read(-1) is not data = b"data" - - # read(-1, buffer) is supported, even though read(-1) is not s.send(data) buffer = bytearray(len(data)) self.assertEqual(s.read(-1, buffer), len(data)) self.assertEqual(buffer, data) - # recv/read(0) should return no data - s.send(data) - self.assertEqual(s.recv(0), b"") - self.assertEqual(s.read(0), b"") - self.assertEqual(s.read(), data) - s.write(b"over\n") self.assertRaises(ValueError, s.recv, -1) @@ -2643,6 +2636,26 @@ s.close() + def test_recv_zero(self): + server = ThreadedEchoServer(CERTFILE) + server.__enter__() + self.addCleanup(server.__exit__, None, None) + s = socket.create_connection((HOST, server.port)) + self.addCleanup(s.close) + s = ssl.wrap_socket(s, suppress_ragged_eofs=False) + self.addCleanup(s.close) + + # recv/read(0) should return no data + s.send(b"data") + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.read(0), b"") + self.assertEqual(s.read(), b"data") + + # Should not block if the other end sends no data + s.setblocking(False) + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.recv_into(bytearray()), 0) + def test_handshake_timeout(self): # Issue #5103: SSL handshake must respect the socket timeout server = socket.socket(socket.AF_INET) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -17,6 +17,9 @@ Library ------- +- Issue #23804: Fix SSL zero-length recv() calls to not block and not raise + an error about unclean EOF. + - Issue #27466: Change time format returned by http.cookie.time2netscape, confirming the netscape cookie format and making it consistent with documentation. diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1702,6 +1702,10 @@ dest = PyBytes_FromStringAndSize(NULL, len); if (dest == NULL) goto error; + if (len == 0) { + Py_XDECREF(sock); + return dest; + } mem = PyBytes_AS_STRING(dest); } else { @@ -1714,6 +1718,10 @@ "maximum length can't fit in a C 'int'"); goto error; } + if (len == 0) { + count = 0; + goto done; + } } } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 21:38:07 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 01:38:07 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzIzODA0?= =?utf-8?q?=3A_Fix_SSL_zero-length_recv=28=29_calls_to_not_block_and_raise?= =?utf-8?q?_EOF?= Message-ID: <20160711013807.19850.95457.0EF603ED@psf.io> https://hg.python.org/cpython/rev/74856df7e55b changeset: 102318:74856df7e55b branch: 3.5 parent: 102310:f0a86a0d303a user: Martin Panter date: Mon Jul 11 00:17:13 2016 +0000 summary: Issue #23804: Fix SSL zero-length recv() calls to not block and raise EOF files: Lib/test/test_ssl.py | 29 +++++++++++++++++++++-------- Misc/NEWS | 3 +++ Modules/_ssl.c | 8 ++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -2793,20 +2793,13 @@ # consume data s.read() + # read(-1, buffer) is supported, even though read(-1) is not data = b"data" - - # read(-1, buffer) is supported, even though read(-1) is not s.send(data) buffer = bytearray(len(data)) self.assertEqual(s.read(-1, buffer), len(data)) self.assertEqual(buffer, data) - # recv/read(0) should return no data - s.send(data) - self.assertEqual(s.recv(0), b"") - self.assertEqual(s.read(0), b"") - self.assertEqual(s.read(), data) - # Make sure sendmsg et al are disallowed to avoid # inadvertent disclosure of data and/or corruption # of the encrypted data stream @@ -2822,6 +2815,26 @@ s.close() + def test_recv_zero(self): + server = ThreadedEchoServer(CERTFILE) + server.__enter__() + self.addCleanup(server.__exit__, None, None) + s = socket.create_connection((HOST, server.port)) + self.addCleanup(s.close) + s = ssl.wrap_socket(s, suppress_ragged_eofs=False) + self.addCleanup(s.close) + + # recv/read(0) should return no data + s.send(b"data") + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.read(0), b"") + self.assertEqual(s.read(), b"data") + + # Should not block if the other end sends no data + s.setblocking(False) + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.recv_into(bytearray()), 0) + def test_nonblocking_send(self): server = ThreadedEchoServer(CERTFILE, certreqs=ssl.CERT_NONE, diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -19,6 +19,9 @@ Library ------- +- Issue #23804: Fix SSL zero-length recv() calls to not block and not raise + an error about unclean EOF. + - Issue #27466: Change time format returned by http.cookie.time2netscape, confirming the netscape cookie format and making it consistent with documentation. diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1913,6 +1913,10 @@ dest = PyBytes_FromStringAndSize(NULL, len); if (dest == NULL) goto error; + if (len == 0) { + Py_XDECREF(sock); + return dest; + } mem = PyBytes_AS_STRING(dest); } else { @@ -1924,6 +1928,10 @@ "maximum length can't fit in a C 'int'"); goto error; } + if (len == 0) { + count = 0; + goto done; + } } } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 10 21:38:07 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 01:38:07 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2323804=3A_Merge_SSL_recv=28=29_fix_from_3=2E5?= Message-ID: <20160711013807.115807.81563.8AC9760A@psf.io> https://hg.python.org/cpython/rev/4ef2404d343e changeset: 102320:4ef2404d343e parent: 102317:bd90a39c9d66 parent: 102318:74856df7e55b user: Martin Panter date: Mon Jul 11 01:32:09 2016 +0000 summary: Issue #23804: Merge SSL recv() fix from 3.5 files: Lib/test/test_ssl.py | 29 +++++++++++++++++++++-------- Misc/NEWS | 3 +++ Modules/_ssl.c | 8 ++++++++ 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -2788,20 +2788,13 @@ # consume data s.read() + # read(-1, buffer) is supported, even though read(-1) is not data = b"data" - - # read(-1, buffer) is supported, even though read(-1) is not s.send(data) buffer = bytearray(len(data)) self.assertEqual(s.read(-1, buffer), len(data)) self.assertEqual(buffer, data) - # recv/read(0) should return no data - s.send(data) - self.assertEqual(s.recv(0), b"") - self.assertEqual(s.read(0), b"") - self.assertEqual(s.read(), data) - # Make sure sendmsg et al are disallowed to avoid # inadvertent disclosure of data and/or corruption # of the encrypted data stream @@ -2817,6 +2810,26 @@ s.close() + def test_recv_zero(self): + server = ThreadedEchoServer(CERTFILE) + server.__enter__() + self.addCleanup(server.__exit__, None, None) + s = socket.create_connection((HOST, server.port)) + self.addCleanup(s.close) + s = ssl.wrap_socket(s, suppress_ragged_eofs=False) + self.addCleanup(s.close) + + # recv/read(0) should return no data + s.send(b"data") + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.read(0), b"") + self.assertEqual(s.read(), b"data") + + # Should not block if the other end sends no data + s.setblocking(False) + self.assertEqual(s.recv(0), b"") + self.assertEqual(s.recv_into(bytearray()), 0) + def test_nonblocking_send(self): server = ThreadedEchoServer(CERTFILE, certreqs=ssl.CERT_NONE, diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -27,6 +27,9 @@ Library ------- +- Issue #23804: Fix SSL zero-length recv() calls to not block and not raise + an error about unclean EOF. + - Issue #27466: Change time format returned by http.cookie.time2netscape, confirming the netscape cookie format and making it consistent with documentation. diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -1913,6 +1913,10 @@ dest = PyBytes_FromStringAndSize(NULL, len); if (dest == NULL) goto error; + if (len == 0) { + Py_XDECREF(sock); + return dest; + } mem = PyBytes_AS_STRING(dest); } else { @@ -1924,6 +1928,10 @@ "maximum length can't fit in a C 'int'"); goto error; } + if (len == 0) { + count = 0; + goto done; + } } } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 11 09:20:52 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 13:20:52 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Restore_NEWS_e?= =?utf-8?q?ntries_lost_in_revision_8145f25f26aa?= Message-ID: <20160711132051.31801.60827.816D6122@psf.io> https://hg.python.org/cpython/rev/bff61d3da57b changeset: 102323:bff61d3da57b branch: 3.5 parent: 102318:74856df7e55b user: Martin Panter date: Mon Jul 11 12:43:38 2016 +0000 summary: Restore NEWS entries lost in revision 8145f25f26aa files: Misc/NEWS | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -3218,6 +3218,12 @@ - Issue #20218: Added convenience methods read_text/write_text and read_bytes/ write_bytes to pathlib.Path objects. +- Issue #22396: On 32-bit AIX platform, don't expose os.posix_fadvise() nor + os.posix_fallocate() because their prototypes in system headers are wrong. + +- Issue #22517: When a io.BufferedRWPair object is deallocated, clear its + weakrefs. + - Issue #22437: Number of capturing groups in regular expression is no longer limited by 100. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 11 09:20:52 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 13:20:52 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_English_spelli?= =?utf-8?q?ng_and_grammar_fixes?= Message-ID: <20160711132051.115786.97186.471271EA@psf.io> https://hg.python.org/cpython/rev/6aca24745831 changeset: 102324:6aca24745831 branch: 3.5 user: Martin Panter date: Mon Jul 11 07:51:37 2016 +0000 summary: English spelling and grammar fixes files: Doc/library/pyexpat.rst | 2 +- Doc/library/urllib.request.rst | 2 +- Doc/library/xml.dom.minidom.rst | 2 +- Doc/library/xmlrpc.server.rst | 2 +- Lib/distutils/tests/test_build_ext.py | 2 +- Lib/idlelib/NEWS.txt | 2 +- Lib/test/test_ipaddress.py | 4 ++-- Lib/unittest/mock.py | 2 +- Lib/xml/dom/expatbuilder.py | 2 +- Lib/xmlrpc/server.py | 2 +- Misc/NEWS | 12 ++++++------ 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -244,7 +244,7 @@ The following attributes contain values relating to the most recent error encountered by an :class:`xmlparser` object, and will only have correct values -once a call to :meth:`Parse` or :meth:`ParseFile` has raised a +once a call to :meth:`Parse` or :meth:`ParseFile` has raised an :exc:`xml.parsers.expat.ExpatError` exception. diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -1138,7 +1138,7 @@ the appropriate encoding. The following W3C document, https://www.w3.org/International/O-charset\ , lists -the various ways in which a (X)HTML or a XML document could have specified its +the various ways in which an (X)HTML or an XML document could have specified its encoding information. As the python.org website uses *utf-8* encoding as specified in its meta tag, we diff --git a/Doc/library/xml.dom.minidom.rst b/Doc/library/xml.dom.minidom.rst --- a/Doc/library/xml.dom.minidom.rst +++ b/Doc/library/xml.dom.minidom.rst @@ -94,7 +94,7 @@ When you are finished with a DOM tree, you may optionally call the :meth:`unlink` method to encourage early cleanup of the now-unneeded -objects. :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific +objects. :meth:`unlink` is an :mod:`xml.dom.minidom`\ -specific extension to the DOM API that renders the node and its descendants are essentially useless. Otherwise, Python's garbage collector will eventually take care of the objects in the tree. diff --git a/Doc/library/xmlrpc.server.rst b/Doc/library/xmlrpc.server.rst --- a/Doc/library/xmlrpc.server.rst +++ b/Doc/library/xmlrpc.server.rst @@ -293,7 +293,7 @@ .. method:: CGIXMLRPCRequestHandler.handle_request(request_text=None) - Handle a XML-RPC request. If *request_text* is given, it should be the POST + Handle an XML-RPC request. If *request_text* is given, it should be the POST data provided by the HTTP server, otherwise the contents of stdin will be used. Example:: diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -243,7 +243,7 @@ self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) # second element of each tuple in 'ext_modules' - # must be a ary (build info) + # must be a dictionary (build info) exts = [('foo.bar', '')] self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -195,7 +195,7 @@ Changes are written to HOME/.idlerc/config-extensions.cfg. Original patch by Tal Einat. -- Issue #16233: A module browser (File : Class Browser, Alt+C) requires a +- Issue #16233: A module browser (File : Class Browser, Alt+C) requires an editor window with a filename. When Class Browser is requested otherwise, from a shell, output window, or 'Untitled' editor, Idle no longer displays an error box. It now pops up an Open Module box (Alt+M). If a valid name diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -734,7 +734,7 @@ self.assertEqual("IPv6Interface('::1/128')", repr(ipaddress.IPv6Interface('::1'))) - # issue #16531: constructing IPv4Network from a (address, mask) tuple + # issue #16531: constructing IPv4Network from an (address, mask) tuple def testIPv4Tuple(self): # /32 ip = ipaddress.IPv4Address('192.0.2.1') @@ -797,7 +797,7 @@ self.assertEqual(ipaddress.IPv4Interface((3221225985, 24)), ipaddress.IPv4Interface('192.0.2.1/24')) - # issue #16531: constructing IPv6Network from a (address, mask) tuple + # issue #16531: constructing IPv6Network from an (address, mask) tuple def testIPv6Tuple(self): # /128 ip = ipaddress.IPv6Address('2001:db8::') diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -744,7 +744,7 @@ def _call_matcher(self, _call): """ - Given a call (or simply a (args, kwargs) tuple), return a + Given a call (or simply an (args, kwargs) tuple), return a comparison key suitable for matching with other calls. This is a best effort method which relies on the spec's signature, if available, or falls back on the arguments themselves. diff --git a/Lib/xml/dom/expatbuilder.py b/Lib/xml/dom/expatbuilder.py --- a/Lib/xml/dom/expatbuilder.py +++ b/Lib/xml/dom/expatbuilder.py @@ -10,7 +10,7 @@ # minidom DOM and can't be used with other DOM implementations. This # is due, in part, to a lack of appropriate methods in the DOM (there is # no way to create Entity and Notation nodes via the DOM Level 2 -# interface), and for performance. The later is the cause of some fairly +# interface), and for performance. The latter is the cause of some fairly # cryptic code. # # Performance hacks: diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py --- a/Lib/xmlrpc/server.py +++ b/Lib/xmlrpc/server.py @@ -184,7 +184,7 @@ are considered private and will not be called by SimpleXMLRPCServer. - If a registered function matches a XML-RPC request, then it + If a registered function matches an XML-RPC request, then it will be called instead of the registered instance. If the optional allow_dotted_names argument is true and the diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,8 +13,8 @@ - Issue #27473: Fixed possible integer overflow in bytes and bytearray concatenations. Patch by Xiang Zhang. -- Issue #27443: __length_hint__() of bytearray itearator no longer return - negative integer for resized bytearray. +- Issue #27443: __length_hint__() of bytearray iterators no longer return a + negative integer for a resized bytearray. Library ------- @@ -1965,7 +1965,7 @@ JoinableQueue was merged with Queue). - Issue #23908: os functions now reject paths with embedded null character - on Windows instead of silently truncate them. + on Windows instead of silently truncating them. - Issue #23728: binascii.crc_hqx() could return an integer outside of the range 0-0xffff for empty data. @@ -3221,7 +3221,7 @@ - Issue #22396: On 32-bit AIX platform, don't expose os.posix_fadvise() nor os.posix_fallocate() because their prototypes in system headers are wrong. -- Issue #22517: When a io.BufferedRWPair object is deallocated, clear its +- Issue #22517: When an io.BufferedRWPair object is deallocated, clear its weakrefs. - Issue #22437: Number of capturing groups in regular expression is no longer @@ -3301,7 +3301,7 @@ - Issue #22168: Prevent turtle AttributeError with non-default Canvas on OS X. - Issue #21147: sqlite3 now raises an exception if the request contains a null - character instead of truncate it. Based on patch by Victor Stinner. + character instead of truncating it. Based on patch by Victor Stinner. - Issue #13968: The glob module now supports recursive search in subdirectories using the "**" pattern. @@ -4153,7 +4153,7 @@ an explicit runtime library dependency. - Issue #17861: Tools/scripts/generate_opcode_h.py automatically regenerates - Include/opcode.h from Lib/opcode.py if the later gets any change. + Include/opcode.h from Lib/opcode.py if the latter gets any change. - Issue #20644: OS X installer build support for documentation build changes in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 11 09:20:52 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 13:20:52 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2323804=3A_Merge_spelling_and_NEWS_fixes_from_3?= =?utf-8?q?=2E5?= Message-ID: <20160711132051.59329.31179.D35D5FB8@psf.io> https://hg.python.org/cpython/rev/df908a9d97a6 changeset: 102325:df908a9d97a6 parent: 102320:4ef2404d343e parent: 102324:6aca24745831 user: Martin Panter date: Mon Jul 11 12:54:44 2016 +0000 summary: Issue #23804: Merge spelling and NEWS fixes from 3.5 files: Doc/library/pyexpat.rst | 2 +- Doc/library/urllib.request.rst | 2 +- Doc/library/xml.dom.minidom.rst | 2 +- Doc/library/xmlrpc.server.rst | 2 +- Lib/distutils/tests/test_build_ext.py | 2 +- Lib/idlelib/NEWS.txt | 2 +- Lib/test/test_ipaddress.py | 4 +- Lib/unittest/mock.py | 2 +- Lib/xml/dom/expatbuilder.py | 2 +- Lib/xmlrpc/server.py | 2 +- Misc/NEWS | 16 ++++++++++---- 11 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -244,7 +244,7 @@ The following attributes contain values relating to the most recent error encountered by an :class:`xmlparser` object, and will only have correct values -once a call to :meth:`Parse` or :meth:`ParseFile` has raised a +once a call to :meth:`Parse` or :meth:`ParseFile` has raised an :exc:`xml.parsers.expat.ExpatError` exception. diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -1138,7 +1138,7 @@ the appropriate encoding. The following W3C document, https://www.w3.org/International/O-charset\ , lists -the various ways in which a (X)HTML or a XML document could have specified its +the various ways in which an (X)HTML or an XML document could have specified its encoding information. As the python.org website uses *utf-8* encoding as specified in its meta tag, we diff --git a/Doc/library/xml.dom.minidom.rst b/Doc/library/xml.dom.minidom.rst --- a/Doc/library/xml.dom.minidom.rst +++ b/Doc/library/xml.dom.minidom.rst @@ -94,7 +94,7 @@ When you are finished with a DOM tree, you may optionally call the :meth:`unlink` method to encourage early cleanup of the now-unneeded -objects. :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific +objects. :meth:`unlink` is an :mod:`xml.dom.minidom`\ -specific extension to the DOM API that renders the node and its descendants are essentially useless. Otherwise, Python's garbage collector will eventually take care of the objects in the tree. diff --git a/Doc/library/xmlrpc.server.rst b/Doc/library/xmlrpc.server.rst --- a/Doc/library/xmlrpc.server.rst +++ b/Doc/library/xmlrpc.server.rst @@ -292,7 +292,7 @@ .. method:: CGIXMLRPCRequestHandler.handle_request(request_text=None) - Handle a XML-RPC request. If *request_text* is given, it should be the POST + Handle an XML-RPC request. If *request_text* is given, it should be the POST data provided by the HTTP server, otherwise the contents of stdin will be used. Example:: diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -242,7 +242,7 @@ self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) # second element of each tuple in 'ext_modules' - # must be a ary (build info) + # must be a dictionary (build info) exts = [('foo.bar', '')] self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -239,7 +239,7 @@ Changes are written to HOME/.idlerc/config-extensions.cfg. Original patch by Tal Einat. -- Issue #16233: A module browser (File : Class Browser, Alt+C) requires a +- Issue #16233: A module browser (File : Class Browser, Alt+C) requires an editor window with a filename. When Class Browser is requested otherwise, from a shell, output window, or 'Untitled' editor, Idle no longer displays an error box. It now pops up an Open Module box (Alt+M). If a valid name diff --git a/Lib/test/test_ipaddress.py b/Lib/test/test_ipaddress.py --- a/Lib/test/test_ipaddress.py +++ b/Lib/test/test_ipaddress.py @@ -734,7 +734,7 @@ self.assertEqual("IPv6Interface('::1/128')", repr(ipaddress.IPv6Interface('::1'))) - # issue #16531: constructing IPv4Network from a (address, mask) tuple + # issue #16531: constructing IPv4Network from an (address, mask) tuple def testIPv4Tuple(self): # /32 ip = ipaddress.IPv4Address('192.0.2.1') @@ -797,7 +797,7 @@ self.assertEqual(ipaddress.IPv4Interface((3221225985, 24)), ipaddress.IPv4Interface('192.0.2.1/24')) - # issue #16531: constructing IPv6Network from a (address, mask) tuple + # issue #16531: constructing IPv6Network from an (address, mask) tuple def testIPv6Tuple(self): # /128 ip = ipaddress.IPv6Address('2001:db8::') diff --git a/Lib/unittest/mock.py b/Lib/unittest/mock.py --- a/Lib/unittest/mock.py +++ b/Lib/unittest/mock.py @@ -749,7 +749,7 @@ def _call_matcher(self, _call): """ - Given a call (or simply a (args, kwargs) tuple), return a + Given a call (or simply an (args, kwargs) tuple), return a comparison key suitable for matching with other calls. This is a best effort method which relies on the spec's signature, if available, or falls back on the arguments themselves. diff --git a/Lib/xml/dom/expatbuilder.py b/Lib/xml/dom/expatbuilder.py --- a/Lib/xml/dom/expatbuilder.py +++ b/Lib/xml/dom/expatbuilder.py @@ -10,7 +10,7 @@ # minidom DOM and can't be used with other DOM implementations. This # is due, in part, to a lack of appropriate methods in the DOM (there is # no way to create Entity and Notation nodes via the DOM Level 2 -# interface), and for performance. The later is the cause of some fairly +# interface), and for performance. The latter is the cause of some fairly # cryptic code. # # Performance hacks: diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py --- a/Lib/xmlrpc/server.py +++ b/Lib/xmlrpc/server.py @@ -184,7 +184,7 @@ are considered private and will not be called by SimpleXMLRPCServer. - If a registered function matches a XML-RPC request, then it + If a registered function matches an XML-RPC request, then it will be called instead of the registered instance. If the optional allow_dotted_names argument is true and the diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,8 +18,8 @@ be re-enabled using the "-X showalloccount" option. It now outputs to stderr instead of stdout. -- Issue #27443: __length_hint__() of bytearray itearator no longer return - negative integer for resized bytearray. +- Issue #27443: __length_hint__() of bytearray iterators no longer return a + negative integer for a resized bytearray. - Issue #27007: The fromhex() class methods of bytes and bytearray subclasses now return an instance of corresponding subclass. @@ -2891,7 +2891,7 @@ JoinableQueue was merged with Queue). - Issue #23908: os functions now reject paths with embedded null character - on Windows instead of silently truncate them. + on Windows instead of silently truncating them. - Issue #23728: binascii.crc_hqx() could return an integer outside of the range 0-0xffff for empty data. @@ -4144,6 +4144,12 @@ - Issue #20218: Added convenience methods read_text/write_text and read_bytes/ write_bytes to pathlib.Path objects. +- Issue #22396: On 32-bit AIX platform, don't expose os.posix_fadvise() nor + os.posix_fallocate() because their prototypes in system headers are wrong. + +- Issue #22517: When an io.BufferedRWPair object is deallocated, clear its + weakrefs. + - Issue #22437: Number of capturing groups in regular expression is no longer limited by 100. @@ -4221,7 +4227,7 @@ - Issue #22168: Prevent turtle AttributeError with non-default Canvas on OS X. - Issue #21147: sqlite3 now raises an exception if the request contains a null - character instead of truncate it. Based on patch by Victor Stinner. + character instead of truncating it. Based on patch by Victor Stinner. - Issue #13968: The glob module now supports recursive search in subdirectories using the "**" pattern. @@ -5073,7 +5079,7 @@ an explicit runtime library dependency. - Issue #17861: Tools/scripts/generate_opcode_h.py automatically regenerates - Include/opcode.h from Lib/opcode.py if the later gets any change. + Include/opcode.h from Lib/opcode.py if the latter gets any change. - Issue #20644: OS X installer build support for documentation build changes in 3.4.1: assume externally supplied sphinx-build is available in /usr/bin. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 11 09:20:52 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 13:20:52 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI1NTIz?= =?utf-8?q?=3A_Correct_=22a=22_article_to_=22an=22_article?= Message-ID: <20160711132050.31633.84029.35E3F0A8@psf.io> https://hg.python.org/cpython/rev/651f7addf4a8 changeset: 102321:651f7addf4a8 branch: 2.7 parent: 102319:43d7e5fb3bc2 user: Martin Panter date: Mon Nov 02 03:37:02 2015 +0000 summary: Issue #25523: Correct "a" article to "an" article This changes the main documentation, doc strings, source code comments, and a couple error messages in the test suite. In some cases the word was removed to fix the grammar. files: Demo/tix/INSTALL.txt | 2 +- Doc/howto/sorting.rst | 2 +- Doc/library/chunk.rst | 2 +- Doc/library/difflib.rst | 2 +- Doc/library/ftplib.rst | 4 +- Doc/library/io.rst | 2 +- Doc/library/optparse.rst | 2 +- Doc/library/os.path.rst | 2 +- Doc/library/smtplib.rst | 4 +- Doc/library/socket.rst | 2 +- Doc/library/sqlite3.rst | 2 +- Doc/library/sunau.rst | 4 +- Doc/library/webbrowser.rst | 2 +- Doc/reference/datamodel.rst | 2 +- Doc/tutorial/errors.rst | 2 +- Doc/whatsnew/2.1.rst | 2 +- Include/abstract.h | 2 +- Include/codecs.h | 4 +- Lib/_pyio.py | 2 +- Lib/chunk.py | 2 +- Lib/codecs.py | 6 ++-- Lib/distutils/cygwinccompiler.py | 2 +- Lib/ftplib.py | 4 +- Lib/idlelib/EditorWindow.py | 2 +- Lib/idlelib/ReplaceDialog.py | 2 +- Lib/io.py | 2 +- Lib/lib2to3/fixes/fix_input.py | 2 +- Lib/msilib/schema.py | 2 +- Lib/test/decimaltestdata/fma.decTest | 1 + Lib/test/decimaltestdata/multiply.decTest | 1 + Lib/test/test_os.py | 2 +- Lib/test/test_support.py | 2 +- Lib/xmlrpclib.py | 4 +- Misc/HISTORY | 6 ++-- Misc/NEWS | 12 +++++----- Misc/cheatsheet | 2 +- Modules/_ctypes/libffi/src/x86/darwin64.S | 2 +- Modules/_ctypes/libffi/src/x86/unix64.S | 2 +- Modules/_ctypes/libffi_osx/x86/darwin64.S | 2 +- Modules/_hashopenssl.c | 2 +- Modules/_io/_iomodule.c | 2 +- Modules/_io/iobase.c | 2 +- Modules/_io/textio.c | 4 +- Modules/audioop.c | 2 +- Modules/expat/pyexpatns.h | 2 +- Modules/readline.c | 2 +- Objects/abstract.c | 2 +- PC/msvcrtmodule.c | 2 +- PC/os2emx/Makefile | 2 +- Python/thread.c | 2 +- Tools/msi/schema.py | 2 +- Tools/msi/uisample.py | 2 +- 52 files changed, 68 insertions(+), 66 deletions(-) diff --git a/Demo/tix/INSTALL.txt b/Demo/tix/INSTALL.txt --- a/Demo/tix/INSTALL.txt +++ b/Demo/tix/INSTALL.txt @@ -4,7 +4,7 @@ ---------------- 0) To use Tix.py, you need Tcl/Tk (V8.3.3), Tix (V8.1.1) and Python (V2.1.1). - Tix.py has been written and tested on a Intel Pentium running RH Linux 5.2 + Tix.py has been written and tested on an Intel Pentium running RH Linux 5.2 and Mandrake Linux 7.0 and Windows with the above mentioned packages. Older versions, e.g. Tix 4.1 and Tk 8.0, might also work. diff --git a/Doc/howto/sorting.rst b/Doc/howto/sorting.rst --- a/Doc/howto/sorting.rst +++ b/Doc/howto/sorting.rst @@ -90,7 +90,7 @@ The key-function patterns shown above are very common, so Python provides convenience functions to make accessor functions easier and faster. The operator module has :func:`operator.itemgetter`, :func:`operator.attrgetter`, and -starting in Python 2.5 a :func:`operator.methodcaller` function. +starting in Python 2.5 an :func:`operator.methodcaller` function. Using those functions, the above examples become simpler and faster: diff --git a/Doc/library/chunk.rst b/Doc/library/chunk.rst --- a/Doc/library/chunk.rst +++ b/Doc/library/chunk.rst @@ -48,7 +48,7 @@ the :class:`Chunk` class defined here is to instantiate an instance at the start of each chunk and read from the instance until it reaches the end, after which a new instance can be instantiated. At the end of the file, creating a new -instance will fail with a :exc:`EOFError` exception. +instance will fail with an :exc:`EOFError` exception. .. class:: Chunk(file[, align, bigendian, inclheader]) diff --git a/Doc/library/difflib.rst b/Doc/library/difflib.rst --- a/Doc/library/difflib.rst +++ b/Doc/library/difflib.rst @@ -276,7 +276,7 @@ generating the delta lines) in unified diff format. Unified diffs are a compact way of showing just the lines that have changed plus - a few lines of context. The changes are shown in a inline style (instead of + a few lines of context. The changes are shown in an inline style (instead of separate before/after blocks). The number of context lines is set by *n* which defaults to three. diff --git a/Doc/library/ftplib.rst b/Doc/library/ftplib.rst --- a/Doc/library/ftplib.rst +++ b/Doc/library/ftplib.rst @@ -283,9 +283,9 @@ .. method:: FTP.transfercmd(cmd[, rest]) - Initiate a transfer over the data connection. If the transfer is active, send a + Initiate a transfer over the data connection. If the transfer is active, send an ``EPRT`` or ``PORT`` command and the transfer command specified by *cmd*, and - accept the connection. If the server is passive, send a ``EPSV`` or ``PASV`` + accept the connection. If the server is passive, send an ``EPSV`` or ``PASV`` command, connect to it, and start the transfer command. Either way, return the socket for the connection. diff --git a/Doc/library/io.rst b/Doc/library/io.rst --- a/Doc/library/io.rst +++ b/Doc/library/io.rst @@ -221,7 +221,7 @@ Even though :class:`IOBase` does not declare :meth:`read`, :meth:`readinto`, or :meth:`write` because their signatures will vary, implementations and clients should consider those methods part of the interface. Also, - implementations may raise a :exc:`IOError` when operations they do not + implementations may raise an :exc:`IOError` when operations they do not support are called. The basic type used for binary data read from or written to a file is diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst --- a/Doc/library/optparse.rst +++ b/Doc/library/optparse.rst @@ -1327,7 +1327,7 @@ the list of arguments to process (default: ``sys.argv[1:]``) ``values`` - a :class:`optparse.Values` object to store option arguments in (default: a + an :class:`optparse.Values` object to store option arguments in (default: a new instance of :class:`Values`) -- if you give an existing object, the option defaults will not be initialized on it diff --git a/Doc/library/os.path.rst b/Doc/library/os.path.rst --- a/Doc/library/os.path.rst +++ b/Doc/library/os.path.rst @@ -256,7 +256,7 @@ .. function:: samefile(path1, path2) Return ``True`` if both pathname arguments refer to the same file or directory - (as indicated by device number and i-node number). Raise an exception if a + (as indicated by device number and i-node number). Raise an exception if an :func:`os.stat` call on either pathname fails. Availability: Unix. diff --git a/Doc/library/smtplib.rst b/Doc/library/smtplib.rst --- a/Doc/library/smtplib.rst +++ b/Doc/library/smtplib.rst @@ -22,7 +22,7 @@ .. class:: SMTP([host[, port[, local_hostname[, timeout]]]]) - A :class:`SMTP` instance encapsulates an SMTP connection. It has methods + An :class:`SMTP` instance encapsulates an SMTP connection. It has methods that support a full repertoire of SMTP and ESMTP operations. If the optional host and port parameters are given, the SMTP :meth:`connect` method is called with those parameters during initialization. If specified, @@ -45,7 +45,7 @@ .. class:: SMTP_SSL([host[, port[, local_hostname[, keyfile[, certfile[, timeout]]]]]]) - A :class:`SMTP_SSL` instance behaves exactly the same as instances of + An :class:`SMTP_SSL` instance behaves exactly the same as instances of :class:`SMTP`. :class:`SMTP_SSL` should be used for situations where SSL is required from the beginning of the connection and using :meth:`starttls` is not appropriate. If *host* is not specified, the local host is used. If diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -757,7 +757,7 @@ Set blocking or non-blocking mode of the socket: if *flag* is 0, the socket is set to non-blocking, else to blocking mode. Initially all sockets are in blocking mode. In non-blocking mode, if a :meth:`recv` call doesn't find any - data, or if a :meth:`send` call can't immediately dispose of the data, a + data, or if a :meth:`send` call can't immediately dispose of the data, an :exc:`error` exception is raised; in blocking mode, the calls block until they can proceed. ``s.setblocking(0)`` is equivalent to ``s.settimeout(0.0)``; ``s.setblocking(1)`` is equivalent to ``s.settimeout(None)``. diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -583,7 +583,7 @@ .. attribute:: lastrowid This read-only attribute provides the rowid of the last modified row. It is - only set if you issued a ``INSERT`` statement using the :meth:`execute` + only set if you issued an ``INSERT`` statement using the :meth:`execute` method. For operations other than ``INSERT`` or when :meth:`executemany` is called, :attr:`lastrowid` is set to :const:`None`. diff --git a/Doc/library/sunau.rst b/Doc/library/sunau.rst --- a/Doc/library/sunau.rst +++ b/Doc/library/sunau.rst @@ -54,8 +54,8 @@ Note that it does not allow read/write files. - A *mode* of ``'r'`` returns a :class:`AU_read` object, while a *mode* of ``'w'`` - or ``'wb'`` returns a :class:`AU_write` object. + A *mode* of ``'r'`` returns an :class:`AU_read` object, while a *mode* of ``'w'`` + or ``'wb'`` returns an :class:`AU_write` object. .. function:: openfp(file, mode) diff --git a/Doc/library/webbrowser.rst b/Doc/library/webbrowser.rst --- a/Doc/library/webbrowser.rst +++ b/Doc/library/webbrowser.rst @@ -20,7 +20,7 @@ the user exits the browser. If the environment variable :envvar:`BROWSER` exists, it is interpreted to -override the platform default list of browsers, as a :data:`os.pathsep`-separated +override the platform default list of browsers, as an :data:`os.pathsep`-separated list of browsers to try in order. When the value of a list part contains the string ``%s``, then it is interpreted as a literal browser command line to be used with the argument URL substituted for ``%s``; if the part does not contain diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1418,7 +1418,7 @@ will not be usable in hashed collections. If a class defines mutable objects and implements a :meth:`__cmp__` or :meth:`__eq__` method, it should not implement :meth:`__hash__`, since hashable collection implementations require - that a object's hash value is immutable (if the object's hash value changes, + that an object's hash value is immutable (if the object's hash value changes, it will be in the wrong hash bucket). User-defined classes have :meth:`__cmp__` and :meth:`__hash__` methods diff --git a/Doc/tutorial/errors.rst b/Doc/tutorial/errors.rst --- a/Doc/tutorial/errors.rst +++ b/Doc/tutorial/errors.rst @@ -345,7 +345,7 @@ A *finally clause* is always executed before leaving the :keyword:`try` statement, whether an exception has occurred or not. When an exception has occurred in the :keyword:`try` clause and has not been handled by an -:keyword:`except` clause (or it has occurred in a :keyword:`except` or +:keyword:`except` clause (or it has occurred in an :keyword:`except` or :keyword:`else` clause), it is re-raised after the :keyword:`finally` clause has been executed. The :keyword:`finally` clause is also executed "on the way out" when any other clause of the :keyword:`try` statement is left via a diff --git a/Doc/whatsnew/2.1.rst b/Doc/whatsnew/2.1.rst --- a/Doc/whatsnew/2.1.rst +++ b/Doc/whatsnew/2.1.rst @@ -555,7 +555,7 @@ and experiment with them. With the result experience, perhaps it'll be possible to design a really good catalog and then build support for it into Python 2.2. For example, the Distutils :command:`sdist` and :command:`bdist_\*` commands -could support a ``upload`` option that would automatically upload your +could support an ``upload`` option that would automatically upload your package to a catalog server. You can start creating packages containing :file:`PKG-INFO` even if you're not diff --git a/Include/abstract.h b/Include/abstract.h --- a/Include/abstract.h +++ b/Include/abstract.h @@ -94,7 +94,7 @@ numeric, sequence, and mapping. Each protocol consists of a collection of related operations. If an operation that is not provided by a particular type is invoked, then a standard exception, - NotImplementedError is raised with a operation name as an argument. + NotImplementedError is raised with an operation name as an argument. In addition, for convenience this interface defines a set of constructors for building objects of built-in types. This is needed so new objects can be returned from C functions that otherwise treat diff --git a/Include/codecs.h b/Include/codecs.h --- a/Include/codecs.h +++ b/Include/codecs.h @@ -146,14 +146,14 @@ const char *encoding ); -/* Get a IncrementalEncoder object for the given encoding. */ +/* Get an IncrementalEncoder object for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_IncrementalEncoder( const char *encoding, const char *errors ); -/* Get a IncrementalDecoder object function for the given encoding. */ +/* Get an IncrementalDecoder object function for the given encoding. */ PyAPI_FUNC(PyObject *) PyCodec_IncrementalDecoder( const char *encoding, diff --git a/Lib/_pyio.py b/Lib/_pyio.py --- a/Lib/_pyio.py +++ b/Lib/_pyio.py @@ -274,7 +274,7 @@ Even though IOBase does not declare read, readinto, or write because their signatures will vary, implementations and clients should consider those methods part of the interface. Also, implementations - may raise a IOError when operations they do not support are called. + may raise an IOError when operations they do not support are called. The basic type used for binary data read from or written to a file is the bytes type. Method arguments may also be bytearray or memoryview of diff --git a/Lib/chunk.py b/Lib/chunk.py --- a/Lib/chunk.py +++ b/Lib/chunk.py @@ -21,7 +21,7 @@ usage of the Chunk class defined here is to instantiate an instance at the start of each chunk and read from the instance until it reaches the end, after which a new instance can be instantiated. At the end -of the file, creating a new instance will fail with a EOFError +of the file, creating a new instance will fail with an EOFError exception. Usage: diff --git a/Lib/codecs.py b/Lib/codecs.py --- a/Lib/codecs.py +++ b/Lib/codecs.py @@ -252,7 +252,7 @@ """ def __init__(self, errors='strict'): """ - Creates a IncrementalDecoder instance. + Creates an IncrementalDecoder instance. The IncrementalDecoder may use different error handling schemes by providing the errors keyword argument. See the module docstring @@ -1012,7 +1012,7 @@ """ Encoding iterator. - Encodes the input strings from the iterator using a IncrementalEncoder. + Encodes the input strings from the iterator using an IncrementalEncoder. errors and kwargs are passed through to the IncrementalEncoder constructor. @@ -1030,7 +1030,7 @@ """ Decoding iterator. - Decodes the input strings from the iterator using a IncrementalDecoder. + Decodes the input strings from the iterator using an IncrementalDecoder. errors and kwargs are passed through to the IncrementalDecoder constructor. diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py --- a/Lib/distutils/cygwinccompiler.py +++ b/Lib/distutils/cygwinccompiler.py @@ -347,7 +347,7 @@ # class Mingw32CCompiler # Because these compilers aren't configured in Python's pyconfig.h file by -# default, we should at least warn the user if he is using a unmodified +# default, we should at least warn the user if he is using an unmodified # version. CONFIG_H_OK = "ok" diff --git a/Lib/ftplib.py b/Lib/ftplib.py --- a/Lib/ftplib.py +++ b/Lib/ftplib.py @@ -264,7 +264,7 @@ return self.voidcmd(cmd) def sendeprt(self, host, port): - '''Send a EPRT command with the current host and the given port number.''' + '''Send an EPRT command with the current host and the given port number.''' af = 0 if self.af == socket.AF_INET: af = 1 @@ -842,7 +842,7 @@ def parse229(resp, peer): - '''Parse the '229' response for a EPSV request. + '''Parse the '229' response for an EPSV request. Raises error_proto if it does not contain '(|||port|)' Return ('host.addr.as.numbers', port#) tuple.''' diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py --- a/Lib/idlelib/EditorWindow.py +++ b/Lib/idlelib/EditorWindow.py @@ -1384,7 +1384,7 @@ text.see("insert") text.undo_block_stop() - # Our editwin provides a is_char_in_string function that works + # Our editwin provides an is_char_in_string function that works # with a Tk text index, but PyParse only knows about offsets into # a string. This builds a function for PyParse that accepts an # offset. diff --git a/Lib/idlelib/ReplaceDialog.py b/Lib/idlelib/ReplaceDialog.py --- a/Lib/idlelib/ReplaceDialog.py +++ b/Lib/idlelib/ReplaceDialog.py @@ -59,7 +59,7 @@ def default_command(self, event=None): if self.do_find(self.ok): if self.do_replace(): # Only find next match if replace succeeded. - # A bad re can cause a it to fail. + # A bad re can cause it to fail. self.do_find(0) def _replace_expand(self, m, repl): diff --git a/Lib/io.py b/Lib/io.py --- a/Lib/io.py +++ b/Lib/io.py @@ -19,7 +19,7 @@ Another IOBase subclass, TextIOBase, deals with the encoding and decoding of streams into text. TextIOWrapper, which extends it, is a buffered text interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO -is a in-memory stream for text. +is an in-memory stream for text. Argument names are not part of the specification, and only the arguments of open() are intended to be used as keyword arguments. diff --git a/Lib/lib2to3/fixes/fix_input.py b/Lib/lib2to3/fixes/fix_input.py --- a/Lib/lib2to3/fixes/fix_input.py +++ b/Lib/lib2to3/fixes/fix_input.py @@ -17,7 +17,7 @@ """ def transform(self, node, results): - # If we're already wrapped in a eval() call, we're done. + # If we're already wrapped in an eval() call, we're done. if context.match(node.parent.parent): return diff --git a/Lib/msilib/schema.py b/Lib/msilib/schema.py --- a/Lib/msilib/schema.py +++ b/Lib/msilib/schema.py @@ -733,7 +733,7 @@ (u'CustomAction',u'Source',u'Y',None, None, None, None, u'CustomSource',None, u'The table reference of the source of the code.',), (u'CustomAction',u'Target',u'Y',None, None, None, None, u'Formatted',None, u'Execution parameter, depends on the type of custom action',), (u'DrLocator',u'Signature_',u'N',None, None, None, None, u'Identifier',None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature table.',), -(u'DrLocator',u'Path',u'Y',None, None, None, None, u'AnyPath',None, u'The path on the user system. This is a either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.',), +(u'DrLocator',u'Path',u'Y',None, None, None, None, u'AnyPath',None, u'The path on the user system. This is either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.',), (u'DrLocator',u'Depth',u'Y',0,32767,None, None, None, None, u'The depth below the path to which the Signature_ is recursively searched. If absent, the depth is assumed to be 0.',), (u'DrLocator',u'Parent',u'Y',None, None, None, None, u'Identifier',None, u'The parent file signature. It is also a foreign key in the Signature table. If null and the Path column does not expand to a full path, then all the fixed drives of the user system are searched using the Path.',), (u'DuplicateFile',u'File_',u'N',None, None, u'File',1,u'Identifier',None, u'Foreign key referencing the source file to be duplicated.',), diff --git a/Lib/test/decimaltestdata/fma.decTest b/Lib/test/decimaltestdata/fma.decTest --- a/Lib/test/decimaltestdata/fma.decTest +++ b/Lib/test/decimaltestdata/fma.decTest @@ -148,7 +148,7 @@ fmax2019 fma -9.999999 9.999999 0E+999999 -> -100.000 Inexact Rounded fmax2020 fma -9.999999 -9.999999 0E+999999 -> 100.000 Inexact Rounded --- 1999.12.21: next one is a edge case if intermediate longs are used +-- 1999.12.21: next one is an edge case if intermediate longs are used precision: 15 fmax2059 fma 999999999999 9765625 0E+999999 -> 9.76562499999023E+18 Inexact Rounded precision: 30 diff --git a/Lib/test/decimaltestdata/multiply.decTest b/Lib/test/decimaltestdata/multiply.decTest --- a/Lib/test/decimaltestdata/multiply.decTest +++ b/Lib/test/decimaltestdata/multiply.decTest @@ -49,7 +49,7 @@ mulx019 multiply -9.999999999 9.999999999 -> -100.000 Inexact Rounded mulx020 multiply -9.999999999 -9.999999999 -> 100.000 Inexact Rounded --- 1999.12.21: next one is a edge case if intermediate longs are used +-- 1999.12.21: next one is an edge case if intermediate longs are used precision: 15 mulx059 multiply 999999999999 9765625 -> 9.76562499999023E+18 Inexact Rounded precision: 30 diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -649,7 +649,7 @@ except OSError as e: self.assertEqual(e.errno, errno.EBADF) else: - self.fail("%r didn't raise a OSError with a bad file descriptor" + self.fail("%r didn't raise an OSError with a bad file descriptor" % f) @unittest.skipUnless(hasattr(os, 'isatty'), 'test needs os.isatty()') diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py --- a/Lib/test/test_support.py +++ b/Lib/test/test_support.py @@ -196,7 +196,7 @@ # The exponential backoff of the timeout amounts to a total # of ~1 second after which the deletion is probably an error # anyway. - # Testing on a i7 at 4.3GHz shows that usually only 1 iteration is + # Testing on an i7 at 4.3GHz shows that usually only 1 iteration is # required when contention occurs. timeout = 0.001 while timeout < 1.0: diff --git a/Lib/xmlrpclib.py b/Lib/xmlrpclib.py --- a/Lib/xmlrpclib.py +++ b/Lib/xmlrpclib.py @@ -970,7 +970,7 @@ "unexpected type in multicall result" class MultiCall: - """server -> a object used to boxcar method calls + """server -> an object used to boxcar method calls server should be a ServerProxy object. @@ -1334,7 +1334,7 @@ ## # Create parser. # - # @return A 2-tuple containing a parser and a unmarshaller. + # @return A 2-tuple containing a parser and an unmarshaller. def getparser(self): # get parser and unmarshaller diff --git a/Misc/HISTORY b/Misc/HISTORY --- a/Misc/HISTORY +++ b/Misc/HISTORY @@ -388,7 +388,7 @@ ----------------- - Bug #1441486: The literal representation of -(sys.maxint - 1) - again evaluates to a int object, not a long. + again evaluates to an int object, not a long. - Bug #1501934: The scope of global variables that are locally assigned using augmented assignment is now correctly determined. @@ -4295,7 +4295,7 @@ interpreter executions, would fail. - "%c" % u"a" now returns a unicode string instead of raising a - TypeError. u"%c" % 0xffffffff now raises a OverflowError instead + TypeError. u"%c" % 0xffffffff now raises an OverflowError instead of a ValueError to be consistent with "%c" % 256. See SF patch #710127. Extension modules @@ -12193,7 +12193,7 @@ - The interfaces for the bind*() and unbind() widget methods have been redesigned; the bind*() methods now return the name of the Tcl command -created for the callback, and this can be passed as a optional +created for the callback, and this can be passed as an optional argument to unbind() in order to delete the command (normally, such commands are automatically unbound when the widget is destroyed, but for some applications this isn't enough). diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -1324,7 +1324,7 @@ - Issue #22530: Allow the ``group()`` method of regular expression match objects to take a ``long`` as an index. -- Issue #22517: When a io.BufferedRWPair object is deallocated, clear its +- Issue #22517: When an io.BufferedRWPair object is deallocated, clear its weakrefs. - Issue #10510: distutils register and upload methods now use HTML standards @@ -2989,7 +2989,7 @@ created with PyFile_FromString(). - Issue #14474: Save and restore exception state in thread.start_new_thread() - while writing error message if the thread leaves a unhandled exception. + while writing error message if the thread leaves an unhandled exception. - Issue #13019: Fix potential reference leaks in bytearray.extend(). Patch by Suman Saha. @@ -3965,7 +3965,7 @@ - Issues #12610 and #12609: Verify that user generated AST has correct string and identifier types before compiling. -- Issue #11627: Fix segfault when __new__ on a exception returns a +- Issue #11627: Fix segfault when __new__ on an exception returns a non-exception class. - Issue #12149: Update the method cache after a type's dictionnary gets @@ -4281,7 +4281,7 @@ - Issue #12502: asyncore: fix polling loop with AF_UNIX sockets. -- Issue #4376: ctypes now supports nested structures in a endian different than +- Issue #4376: ctypes now supports nested structures in an endian different than the parent structure. Patch by Vlad Riscutia. - Issue #12493: subprocess: Popen.communicate() now also handles EINTR errors @@ -6697,7 +6697,7 @@ - Issue #7610: Reworked implementation of the internal ``zipfile.ZipExtFile`` class used to represent files stored inside an archive. The new - implementation is significantly faster and can be wrapped in a + implementation is significantly faster and can be wrapped in an ``io.BufferedReader`` object for more speedups. It also solves an issue where interleaved calls to ``read()`` and ``readline()`` give wrong results. Patch by Nir Aides. @@ -7952,7 +7952,7 @@ mulitiprocessing.manager so that users can install custom handlers/etc. - Issue #3551: Patch multiprocessing to raise a proper exception if the size of - the object when writefile is called causes a ERROR_NO_SYSTEM_RESOURCES. Added + the object when writefile is called causes an ERROR_NO_SYSTEM_RESOURCES. Added docs to note the limitation. - unittest.assertNotEqual() now uses the inequality operator (!=) instead of the diff --git a/Misc/cheatsheet b/Misc/cheatsheet --- a/Misc/cheatsheet +++ b/Misc/cheatsheet @@ -953,7 +953,7 @@ instanceobject as arg, returns list of names in its attr. dict. divmod(a,b) Returns tuple of (a/b, a%b) -enumerate(seq) Return a iterator giving: (0, seq[0]), (1, seq[1]), ... +enumerate(seq) Return an iterator giving: (0, seq[0]), (1, seq[1]), ... eval(s[, globals[, Eval string s in (optional) globals, locals contexts.s must locals]]) have no NUL's or newlines. s can also be acode object. Example: x = 1; incr_x = eval('x + 1') diff --git a/Modules/_ctypes/libffi/src/x86/darwin64.S b/Modules/_ctypes/libffi/src/x86/darwin64.S --- a/Modules/_ctypes/libffi/src/x86/darwin64.S +++ b/Modules/_ctypes/libffi/src/x86/darwin64.S @@ -350,7 +350,7 @@ .set L$set$3,LUW1-LUW0 .long L$set$3 - /* New stack frame based off rbp. This is a itty bit of unwind + /* New stack frame based off rbp. This is an itty bit of unwind trickery in that the CFA *has* changed. There is no easy way to describe it correctly on entry to the function. Fortunately, it doesn't matter too much since at all points we can correctly diff --git a/Modules/_ctypes/libffi/src/x86/unix64.S b/Modules/_ctypes/libffi/src/x86/unix64.S --- a/Modules/_ctypes/libffi/src/x86/unix64.S +++ b/Modules/_ctypes/libffi/src/x86/unix64.S @@ -366,7 +366,7 @@ .byte 0x4 /* DW_CFA_advance_loc4 */ .long .LUW1-.LUW0 - /* New stack frame based off rbp. This is a itty bit of unwind + /* New stack frame based off rbp. This is an itty bit of unwind trickery in that the CFA *has* changed. There is no easy way to describe it correctly on entry to the function. Fortunately, it doesn't matter too much since at all points we can correctly diff --git a/Modules/_ctypes/libffi_osx/x86/darwin64.S b/Modules/_ctypes/libffi_osx/x86/darwin64.S --- a/Modules/_ctypes/libffi_osx/x86/darwin64.S +++ b/Modules/_ctypes/libffi_osx/x86/darwin64.S @@ -351,7 +351,7 @@ .set L$set$3,LUW1-LUW0 .long L$set$3 - /* New stack frame based off rbp. This is a itty bit of unwind + /* New stack frame based off rbp. This is an itty bit of unwind trickery in that the CFA *has* changed. There is no easy way to describe it correctly on entry to the function. Fortunately, it doesn't matter too much since at all points we can correctly diff --git a/Modules/_hashopenssl.c b/Modules/_hashopenssl.c --- a/Modules/_hashopenssl.c +++ b/Modules/_hashopenssl.c @@ -730,7 +730,7 @@ if (openssl_obj_name == NULL) return; /* Ignore aliased names, they pollute the list and OpenSSL appears to - * have a its own definition of alias as the resulting list still + * have its own definition of alias as the resulting list still * contains duplicate and alternate names for several algorithms. */ if (openssl_obj_name->alias) return; diff --git a/Modules/_io/_iomodule.c b/Modules/_io/_iomodule.c --- a/Modules/_io/_iomodule.c +++ b/Modules/_io/_iomodule.c @@ -74,7 +74,7 @@ "Another IOBase subclass, TextIOBase, deals with the encoding and decoding\n" "of streams into text. TextIOWrapper, which extends it, is a buffered text\n" "interface to a buffered raw stream (`BufferedIOBase`). Finally, StringIO\n" -"is a in-memory stream for text.\n" +"is an in-memory stream for text.\n" "\n" "Argument names are not part of the specification, and only the arguments\n" "of open() are intended to be used as keyword arguments.\n" diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c --- a/Modules/_io/iobase.c +++ b/Modules/_io/iobase.c @@ -35,7 +35,7 @@ "Even though IOBase does not declare read, readinto, or write because\n" "their signatures will vary, implementations and clients should\n" "consider those methods part of the interface. Also, implementations\n" - "may raise a IOError when operations they do not support are called.\n" + "may raise an IOError when operations they do not support are called.\n" "\n" "The basic type used for binary data read from or written to a file is\n" "the bytes type. Method arguments may also be bytearray or memoryview\n" diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c --- a/Modules/_io/textio.c +++ b/Modules/_io/textio.c @@ -881,8 +881,8 @@ if (self->encoding == NULL) { catch_ImportError: /* - Importing locale can raise a ImportError because of - _functools, and locale.getpreferredencoding can raise a + Importing locale can raise an ImportError because of + _functools, and locale.getpreferredencoding can raise an ImportError if _locale is not available. These will happen during module building. */ diff --git a/Modules/audioop.c b/Modules/audioop.c --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -121,7 +121,7 @@ /* * linear2ulaw() accepts a 14-bit signed integer and encodes it as u-law data - * stored in a unsigned char. This function should only be called with + * stored in an unsigned char. This function should only be called with * the data shifted such that it only contains information in the lower * 14-bits. * diff --git a/Modules/expat/pyexpatns.h b/Modules/expat/pyexpatns.h --- a/Modules/expat/pyexpatns.h +++ b/Modules/expat/pyexpatns.h @@ -21,7 +21,7 @@ * * * The Solution: - * Prefix all a exported symbols with "PyExpat_". This is similar to + * Prefix all exported symbols with "PyExpat_". This is similar to * what Mozilla does for some common libs: * http://lxr.mozilla.org/seamonkey/source/modules/libimg/png/mozpngconf.h#115 * diff --git a/Modules/readline.c b/Modules/readline.c --- a/Modules/readline.c +++ b/Modules/readline.c @@ -1144,7 +1144,7 @@ return NULL; } - /* We got an EOF, return a empty string. */ + /* We got an EOF, return an empty string. */ if (p == NULL) { p = PyMem_Malloc(1); if (p != NULL) diff --git a/Objects/abstract.c b/Objects/abstract.c --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1641,7 +1641,7 @@ } return res; } - if (PyInt_Check(o)) { /* A int subclass without nb_int */ + if (PyInt_Check(o)) { /* An int subclass without nb_int */ PyIntObject *io = (PyIntObject*)o; return PyInt_FromLong(io->ob_ival); } diff --git a/PC/msvcrtmodule.c b/PC/msvcrtmodule.c --- a/PC/msvcrtmodule.c +++ b/PC/msvcrtmodule.c @@ -148,7 +148,7 @@ if (handle == -1) return PyErr_SetFromErrno(PyExc_IOError); - /* technically 'handle' is not a pointer, but a integer as + /* technically 'handle' is not a pointer, but an integer as large as a pointer, Python's *VoidPtr interface is the most appropriate here */ return PyLong_FromVoidPtr((void*)handle); diff --git a/PC/os2emx/Makefile b/PC/os2emx/Makefile --- a/PC/os2emx/Makefile +++ b/PC/os2emx/Makefile @@ -102,7 +102,7 @@ CFLAGS+= -DPREFIX=$(DQUOTE)$(LIB_DIR)$(DQUOTE) endif -# We're using the OMF format since EMX's ld has a obscure bug +# We're using the OMF format since EMX's ld has an obscure bug # because of which it sometimes fails to build relocations # in .data segment that point to another .data locations # (except for the final linking if the .EXEs) diff --git a/Python/thread.c b/Python/thread.c --- a/Python/thread.c +++ b/Python/thread.c @@ -50,7 +50,7 @@ threads. This is valid for HP-UX 11.23 running on an ia64 system. If needed, add - a check of __ia64 to verify that we're running on a ia64 system instead + a check of __ia64 to verify that we're running on an ia64 system instead of a pa-risc system. */ #ifdef __hpux diff --git a/Tools/msi/schema.py b/Tools/msi/schema.py --- a/Tools/msi/schema.py +++ b/Tools/msi/schema.py @@ -733,7 +733,7 @@ (u'CustomAction',u'Source',u'Y',None, None, None, None, u'CustomSource',None, u'The table reference of the source of the code.',), (u'CustomAction',u'Target',u'Y',None, None, None, None, u'Formatted',None, u'Execution parameter, depends on the type of custom action',), (u'DrLocator',u'Signature_',u'N',None, None, None, None, u'Identifier',None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature table.',), -(u'DrLocator',u'Path',u'Y',None, None, None, None, u'AnyPath',None, u'The path on the user system. This is a either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.',), +(u'DrLocator',u'Path',u'Y',None, None, None, None, u'AnyPath',None, u'The path on the user system. This is either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.',), (u'DrLocator',u'Depth',u'Y',0,32767,None, None, None, None, u'The depth below the path to which the Signature_ is recursively searched. If absent, the depth is assumed to be 0.',), (u'DrLocator',u'Parent',u'Y',None, None, None, None, u'Identifier',None, u'The parent file signature. It is also a foreign key in the Signature table. If null and the Path column does not expand to a full path, then all the fixed drives of the user system are searched using the Path.',), (u'DuplicateFile',u'File_',u'N',None, None, u'File',1,u'Identifier',None, u'Foreign key referencing the source file to be duplicated.',), diff --git a/Tools/msi/uisample.py b/Tools/msi/uisample.py --- a/Tools/msi/uisample.py +++ b/Tools/msi/uisample.py @@ -998,7 +998,7 @@ (u'CustomAction', u'Source', u'Y', None, None, None, None, u'CustomSource', None, u'The table reference of the source of the code.'), (u'CustomAction', u'Target', u'Y', None, None, None, None, u'Formatted', None, u'Execution parameter, depends on the type of custom action'), (u'DrLocator', u'Signature_', u'N', None, None, None, None, u'Identifier', None, u'The Signature_ represents a unique file signature and is also the foreign key in the Signature table.'), -(u'DrLocator', u'Path', u'Y', None, None, None, None, u'AnyPath', None, u'The path on the user system. This is a either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.'), +(u'DrLocator', u'Path', u'Y', None, None, None, None, u'AnyPath', None, u'The path on the user system. This is either a subpath below the value of the Parent or a full path. The path may contain properties enclosed within [ ] that will be expanded.'), (u'DrLocator', u'Depth', u'Y', 0, 32767, None, None, None, None, u'The depth below the path to which the Signature_ is recursively searched. If absent, the depth is assumed to be 0.'), (u'DrLocator', u'Parent', u'Y', None, None, None, None, u'Identifier', None, u'The parent file signature. It is also a foreign key in the Signature table. If null and the Path column does not expand to a full path, then all the fixed drives of the user system are searched using the Path.'), (u'DuplicateFile', u'File_', u'N', None, None, u'File', 1, u'Identifier', None, u'Foreign key referencing the source file to be duplicated.'), -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 11 09:20:53 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 11 Jul 2016 13:20:53 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_English_spelli?= =?utf-8?q?ng_and_grammar_fixes?= Message-ID: <20160711132050.8022.93612.09CCFA0C@psf.io> https://hg.python.org/cpython/rev/f7f0f1aecbfa changeset: 102322:f7f0f1aecbfa branch: 2.7 user: Martin Panter date: Mon Jul 11 07:51:37 2016 +0000 summary: English spelling and grammar fixes files: Doc/library/aetypes.rst | 2 +- Doc/library/pyexpat.rst | 2 +- Doc/library/simplexmlrpcserver.rst | 2 +- Doc/library/xml.dom.minidom.rst | 2 +- Lib/SimpleXMLRPCServer.py | 2 +- Lib/distutils/tests/test_build_ext.py | 2 +- Lib/idlelib/NEWS.txt | 2 +- Lib/plat-mac/findertools.py | 2 +- Lib/plat-mac/macresource.py | 4 ++-- Lib/sqlite3/test/regression.py | 2 +- Lib/test/_mock_backport.py | 2 +- Lib/xml/dom/expatbuilder.py | 2 +- Misc/NEWS | 4 ++-- Modules/_sqlite/connection.c | 2 +- Modules/_sqlite/connection.h | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Doc/library/aetypes.rst b/Doc/library/aetypes.rst --- a/Doc/library/aetypes.rst +++ b/Doc/library/aetypes.rst @@ -19,7 +19,7 @@ classes. Packing and unpacking instances of these classes is handled automatically by :mod:`aepack`. -An object specifier is essentially an address of an object implemented in a +An object specifier is essentially an address of an object implemented in an Apple Event server. An Apple Event specifier is used as the direct object for an Apple Event or as the argument of an optional parameter. The :mod:`aetypes` module contains the base classes for OSA classes and properties, which are used diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -270,7 +270,7 @@ The following attributes contain values relating to the most recent error encountered by an :class:`xmlparser` object, and will only have correct values -once a call to :meth:`Parse` or :meth:`ParseFile` has raised a +once a call to :meth:`Parse` or :meth:`ParseFile` has raised an :exc:`xml.parsers.expat.ExpatError` exception. diff --git a/Doc/library/simplexmlrpcserver.rst b/Doc/library/simplexmlrpcserver.rst --- a/Doc/library/simplexmlrpcserver.rst +++ b/Doc/library/simplexmlrpcserver.rst @@ -273,7 +273,7 @@ .. method:: CGIXMLRPCRequestHandler.handle_request([request_text = None]) - Handle a XML-RPC request. If *request_text* is given, it should be the POST + Handle an XML-RPC request. If *request_text* is given, it should be the POST data provided by the HTTP server, otherwise the contents of stdin will be used. Example:: diff --git a/Doc/library/xml.dom.minidom.rst b/Doc/library/xml.dom.minidom.rst --- a/Doc/library/xml.dom.minidom.rst +++ b/Doc/library/xml.dom.minidom.rst @@ -100,7 +100,7 @@ When you are finished with a DOM tree, you may optionally call the :meth:`unlink` method to encourage early cleanup of the now-unneeded -objects. :meth:`unlink` is a :mod:`xml.dom.minidom`\ -specific +objects. :meth:`unlink` is an :mod:`xml.dom.minidom`\ -specific extension to the DOM API that renders the node and its descendants are essentially useless. Otherwise, Python's garbage collector will eventually take care of the objects in the tree. diff --git a/Lib/SimpleXMLRPCServer.py b/Lib/SimpleXMLRPCServer.py --- a/Lib/SimpleXMLRPCServer.py +++ b/Lib/SimpleXMLRPCServer.py @@ -188,7 +188,7 @@ are considered private and will not be called by SimpleXMLRPCServer. - If a registered function matches a XML-RPC request, then it + If a registered function matches an XML-RPC request, then it will be called instead of the registered instance. If the optional allow_dotted_names argument is true and the diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -215,7 +215,7 @@ self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) # second element of each tuple in 'ext_modules' - # must be a ary (build info) + # must be a dictionary (build info) exts = [('foo.bar', '')] self.assertRaises(DistutilsSetupError, cmd.check_extensions_list, exts) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -185,7 +185,7 @@ Changes are written to HOME/.idlerc/config-extensions.cfg. Original patch by Tal Einat. -- Issue #16233: A module browser (File : Class Browser, Alt+C) requires a +- Issue #16233: A module browser (File : Class Browser, Alt+C) requires an editor window with a filename. When Class Browser is requested otherwise, from a shell, output window, or 'Untitled' editor, Idle no longer displays an error box. It now pops up an Open Module box (Alt+M). If a valid name diff --git a/Lib/plat-mac/findertools.py b/Lib/plat-mac/findertools.py --- a/Lib/plat-mac/findertools.py +++ b/Lib/plat-mac/findertools.py @@ -580,7 +580,7 @@ def mountvolume(volume, server=None, username=None, password=None): """mount a volume, local or on a server on AppleTalk. - Note: mounting a ASIP server requires a different operation. + Note: mounting an ASIP server requires a different operation. server is the name of the server where the volume belongs username, password belong to a registered user of the volume.""" finder = _getfinder() diff --git a/Lib/plat-mac/macresource.py b/Lib/plat-mac/macresource.py --- a/Lib/plat-mac/macresource.py +++ b/Lib/plat-mac/macresource.py @@ -78,7 +78,7 @@ """Open a resource file given by pathname, possibly decoding an AppleSingle file""" # No resource fork. We may be on OSX, and this may be either - # a data-fork based resource file or a AppleSingle file + # a data-fork based resource file or an AppleSingle file # from the CVS repository. try: refno = Res.FSOpenResourceFile(pathname, u'', 1) @@ -97,7 +97,7 @@ If the pathname given already refers to such a file simply return it, otherwise first decode it.""" # No resource fork. We may be on OSX, and this may be either - # a data-fork based resource file or a AppleSingle file + # a data-fork based resource file or an AppleSingle file # from the CVS repository. try: refno = Res.FSOpenResourceFile(pathname, u'', 1) diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py --- a/Lib/sqlite3/test/regression.py +++ b/Lib/sqlite3/test/regression.py @@ -118,7 +118,7 @@ def CheckUnicodeConnect(self): """ - With pysqlite 2.4.0 you needed to use a string or a APSW connection + With pysqlite 2.4.0 you needed to use a string or an APSW connection object for opening database connections. Formerly, both bytestrings and unicode strings used to work. diff --git a/Lib/test/_mock_backport.py b/Lib/test/_mock_backport.py --- a/Lib/test/_mock_backport.py +++ b/Lib/test/_mock_backport.py @@ -740,7 +740,7 @@ def _call_matcher(self, _call): """ - Given a call (or simply a (args, kwargs) tuple), return a + Given a call (or simply an (args, kwargs) tuple), return a comparison key suitable for matching with other calls. This is a best effort method which relies on the spec's signature, if available, or falls back on the arguments themselves. diff --git a/Lib/xml/dom/expatbuilder.py b/Lib/xml/dom/expatbuilder.py --- a/Lib/xml/dom/expatbuilder.py +++ b/Lib/xml/dom/expatbuilder.py @@ -10,7 +10,7 @@ # minidom DOM and can't be used with other DOM implementations. This # is due, in part, to a lack of appropriate methods in the DOM (there is # no way to create Entity and Notation nodes via the DOM Level 2 -# interface), and for performance. The later is the cause of some fairly +# interface), and for performance. The latter is the cause of some fairly # cryptic code. # # Performance hacks: diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,7 +12,7 @@ - Issue #23908: os functions, open() and the io.FileIO constructor now reject unicode paths with embedded null character on Windows instead of silently - truncate them. + truncating them. Library ------- @@ -1354,7 +1354,7 @@ Sergey Bobrov. - Issue #21147: sqlite3 now raises an exception if the request contains a null - character instead of truncate it. Based on patch by Victor Stinner. + character instead of truncating it. Based on patch by Victor Stinner. - Issue #21951: Fixed a crash in Tkinter on AIX when called Tcl command with empty string or tuple argument. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -116,7 +116,7 @@ return -1; } } else { - /* Create a pysqlite connection from a APSW connection */ + /* Create a pysqlite connection from an APSW connection */ class_attr = PyObject_GetAttrString(database, "__class__"); if (class_attr) { class_attr_str = PyObject_Str(class_attr); diff --git a/Modules/_sqlite/connection.h b/Modules/_sqlite/connection.h --- a/Modules/_sqlite/connection.h +++ b/Modules/_sqlite/connection.h @@ -99,7 +99,7 @@ /* a dictionary of registered collation name => collation callable mappings */ PyObject* collations; - /* if our connection was created from a APSW connection, we keep a + /* if our connection was created from an APSW connection, we keep a * reference to the APSW connection around and get rid of it in our * destructor */ PyObject* apsw_connection; -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Mon Jul 11 09:39:44 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 11 Jul 2016 14:39:44 +0100 Subject: [Python-checkins] GOOD Benchmark Results for Python Default 2016-07-11 Message-ID: <11cd14a3-351c-4842-9e6f-585e3a7f6c8a@irsmsx101.ger.corp.intel.com> Results for project Python default, build date 2016-07-11 02:02:59 +0000 commit: 4ef2404d343e previous commit: 47a0dd299fec revision date: 2016-07-11 01:32:09 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.27% 2.18% 12.38% 13.61% :-| pybench 0.13% -0.03% 1.39% 8.15% :-( regex_v8 2.66% 0.54% -2.06% 3.49% :-| nbody 0.09% 0.38% -0.56% 10.12% :-| json_dump_v2 0.29% 0.97% -1.50% 12.35% :-| normal_startup 0.82% 0.49% 1.01% 5.76% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/good-benchmark-results-for-python-default-2016-07-11/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Mon Jul 11 09:41:00 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 11 Jul 2016 14:41:00 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-11 Message-ID: Results for project Python 2.7, build date 2016-07-11 02:48:57 +0000 commit: 43d7e5fb3bc2 previous commit: 228b23b58ed3 revision date: 2016-07-11 00:17:13 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.14% 0.00% 4.98% 4.45% :-) pybench 0.21% -0.09% 5.92% 3.63% :-( regex_v8 0.56% -0.13% -2.40% 10.58% :-) nbody 0.10% 0.01% 8.72% 1.50% :-) json_dump_v2 0.30% 0.53% 2.51% 10.81% :-( normal_startup 1.80% -0.22% -5.96% 1.63% :-) ssbench 0.20% 0.24% 2.74% 1.12% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-11/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Mon Jul 11 12:57:24 2016 From: python-checkins at python.org (zach.ware) Date: Mon, 11 Jul 2016 16:57:24 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Add_a_bit_about_updating_?= =?utf-8?q?latent_slaves?= Message-ID: <20160711165723.1166.9380.8F8A87D3@psf.io> https://hg.python.org/devguide/rev/bfa490460e88 changeset: 812:bfa490460e88 user: Zachary Ware date: Mon Jul 11 11:57:00 2016 -0500 summary: Add a bit about updating latent slaves files: buildslave.rst | 16 ++++++++++++++++ 1 files changed, 16 insertions(+), 0 deletions(-) diff --git a/buildslave.rst b/buildslave.rst --- a/buildslave.rst +++ b/buildslave.rst @@ -222,6 +222,22 @@ `_ list to request that the master be restarted. +Latent slaves should also be updated periodically to include operating system +or other software updates, but when do do such maintenance is largely up to you +as the slave owner. There are a couple different options for doing such +updates: + + * Start an instance from your existing AMI, do updates on that instance, + and save a new AMI from the updated instance. Note that (especially for + Windows slaves) you should do at least one restart of the instance after + doing updates to be sure that any post-reboot update work is done before + creating the new AMI. + * Create an entirely new setup from a newer base AMI using your existing + slave name and password. + +Whichever way you choose to update your AMI, you'll need to provide the +buildmaster administrators with the new AMI ID. + Buildslave operation -------------------- -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Mon Jul 11 14:23:39 2016 From: python-checkins at python.org (ned.deily) Date: Mon, 11 Jul 2016 18:23:39 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327285=3A_Cleanup_?= =?utf-8?q?=22suspicious=22_warnings=2E?= Message-ID: <20160711182339.62731.24916.34363EF1@psf.io> https://hg.python.org/cpython/rev/2a34cef7681b changeset: 102326:2a34cef7681b user: Ned Deily date: Mon Jul 11 14:21:58 2016 -0400 summary: Issue #27285: Cleanup "suspicious" warnings. files: Doc/tools/susp-ignored.csv | 2 +- Doc/whatsnew/3.3.rst | 2 +- Doc/whatsnew/3.4.rst | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -205,7 +205,7 @@ library/venv,,:param,":param nodist: If True, setuptools and pip are not installed into the" library/venv,,:param,":param progress: If setuptools or pip are installed, the progress of the" library/venv,,:param,":param nopip: If True, pip is not installed into the created" -library/venv,,:param,:param context: The information for the environment creation request +library/venv,,:param,:param context: The information for the virtual environment library/xmlrpc.client,,:pass,http://user:pass at host:port/path library/xmlrpc.client,,:pass,user:pass library/xmlrpc.client,,:port,http://user:pass at host:port/path diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst --- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -108,7 +108,7 @@ with the interpreter core. This PEP adds the :mod:`venv` module for programmatic access, and the -:ref:`pyvenv ` script for command-line access and +``pyvenv`` script for command-line access and administration. The Python interpreter checks for a ``pyvenv.cfg``, file whose existence signals the base of a virtual environment's directory tree. diff --git a/Doc/whatsnew/3.4.rst b/Doc/whatsnew/3.4.rst --- a/Doc/whatsnew/3.4.rst +++ b/Doc/whatsnew/3.4.rst @@ -197,7 +197,7 @@ ``pip`` command typically refers to the separately installed Python 2 version. -The :ref:`pyvenv ` command line utility and the :mod:`venv` +The ``pyvenv`` command line utility and the :mod:`venv` module make use of the :mod:`ensurepip` module to make ``pip`` readily available in virtual environments. When using the command line utility, ``pip`` is installed by default, while when using the :mod:`venv` module @@ -1989,11 +1989,11 @@ Stinner using his :pep:`445`-based ``pyfailmalloc`` tool (:issue:`18408`, :issue:`18520`). -* The :ref:`pyvenv ` command now accepts a ``--copies`` option +* The ``pyvenv`` command now accepts a ``--copies`` option to use copies rather than symlinks even on systems where symlinks are the default. (Contributed by Vinay Sajip in :issue:`18807`.) -* The :ref:`pyvenv ` command also accepts a ``--without-pip`` +* The ``pyvenv`` command also accepts a ``--without-pip`` option to suppress the otherwise-automatic bootstrapping of pip into the virtual environment. (Contributed by Nick Coghlan in :issue:`19552` as part of the :pep:`453` implementation.) @@ -2459,7 +2459,7 @@ stream in :mod:`~io.TextIOWrapper` to use its *newline* argument (:issue:`15204`). -* If you use :ref:`pyvenv ` in a script and desire that pip +* If you use ``pyvenv`` in a script and desire that pip *not* be installed, you must add ``--without-pip`` to your command invocation. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 11 23:47:13 2016 From: python-checkins at python.org (terry.reedy) Date: Tue, 12 Jul 2016 03:47:13 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Augment_faq_section_with_?= =?utf-8?q?information_given_in_last_round_of_email_about_keys=2E?= Message-ID: <20160712034713.1500.45262.52F3EF68@psf.io> https://hg.python.org/devguide/rev/3cfb0322f08f changeset: 814:3cfb0322f08f user: Terry Jan Reedy date: Mon Jul 11 23:46:58 2016 -0400 summary: Augment faq section with information given in last round of email about keys. files: faq.rst | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-) diff --git a/faq.rst b/faq.rst --- a/faq.rst +++ b/faq.rst @@ -877,7 +877,9 @@ -------------------------------------- All generated SSH keys should be sent to hgaccounts at python.org for adding to the -list of keys. DSA keys are unacceptable. +list of keys. DSA keys are unacceptable. To avoid a spam classification, +give a non-empty subject and body. A reply will be sent, usually within a day +or two, when the key can be used. UNIX '''' -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Mon Jul 11 23:47:13 2016 From: python-checkins at python.org (terry.reedy) Date: Tue, 12 Jul 2016 03:47:13 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Star_self_as_idlelib_expe?= =?utf-8?q?rt=2E__Mark_other_2_as_inactive=2E?= Message-ID: <20160712034713.20043.55391.F4E01A58@psf.io> https://hg.python.org/devguide/rev/cc1c0dd798e7 changeset: 813:cc1c0dd798e7 user: Terry Jan Reedy date: Mon Jul 11 23:44:52 2016 -0400 summary: Star self as idlelib expert. Mark other 2 as inactive. files: experts.rst | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/experts.rst b/experts.rst --- a/experts.rst +++ b/experts.rst @@ -128,7 +128,7 @@ hmac christian.heimes, gregory.p.smith html ezio.melotti http -idlelib kbk, terry.reedy, roger.serwy +idlelib kbk (inactive), terry.reedy*, roger.serwy (inactive) imaplib imghdr imp @@ -262,8 +262,8 @@ xml.dom.minidom xml.dom.pulldom xml.etree effbot (inactive), eli.bendersky*, scoder -xml.parsers.expat -xml.sax +xml.parsers.expat christian.heimes +xml.sax christian.heimes xml.sax.handler xml.sax.saxutils xml.sax.xmlreader @@ -319,7 +319,7 @@ bytecode benjamin.peterson, pitrou, georg.brandl, yselivanov context managers ncoghlan coverity scan christian.heimes, brett.cannon, twouters -cryptography gregory.p.smith, dstufft +cryptography christian.heimes, gregory.p.smith, dstufft data formats mark.dickinson, georg.brandl database lemburg devguide ncoghlan, eric.araujo, ezio.melotti, willingc @@ -341,7 +341,7 @@ georg.brandl str.format eric.smith testing michael.foord, pitrou, ezio.melotti -test coverage giampaolo.rodola +test coverage giampaolo.rodola, christian.heimes threads pitrou time and dates lemburg, belopolsky unicode lemburg, ezio.melotti, haypo, benjamin.peterson, pitrou -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Tue Jul 12 00:00:29 2016 From: python-checkins at python.org (terry.reedy) Date: Tue, 12 Jul 2016 04:00:29 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Backout_most_of_cc1c0dd79?= =?utf-8?q?8e7=2C_changes_not_intended=2E?= Message-ID: <20160712040028.1582.5100.45F58620@psf.io> https://hg.python.org/devguide/rev/85d7b36c7525 changeset: 815:85d7b36c7525 user: Terry Jan Reedy date: Mon Jul 11 23:58:51 2016 -0400 summary: Backout most of cc1c0dd798e7, changes not intended. files: experts.rst | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/experts.rst b/experts.rst --- a/experts.rst +++ b/experts.rst @@ -262,8 +262,8 @@ xml.dom.minidom xml.dom.pulldom xml.etree effbot (inactive), eli.bendersky*, scoder -xml.parsers.expat christian.heimes -xml.sax christian.heimes +xml.parsers.expat +xml.sax xml.sax.handler xml.sax.saxutils xml.sax.xmlreader @@ -319,7 +319,7 @@ bytecode benjamin.peterson, pitrou, georg.brandl, yselivanov context managers ncoghlan coverity scan christian.heimes, brett.cannon, twouters -cryptography christian.heimes, gregory.p.smith, dstufft +cryptography gregory.p.smith, dstufft data formats mark.dickinson, georg.brandl database lemburg devguide ncoghlan, eric.araujo, ezio.melotti, willingc @@ -341,7 +341,7 @@ georg.brandl str.format eric.smith testing michael.foord, pitrou, ezio.melotti -test coverage giampaolo.rodola, christian.heimes +test coverage giampaolo.rodola threads pitrou time and dates lemburg, belopolsky unicode lemburg, ezio.melotti, haypo, benjamin.peterson, pitrou -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Tue Jul 12 00:28:31 2016 From: python-checkins at python.org (ned.deily) Date: Tue, 12 Jul 2016 04:28:31 +0000 Subject: [Python-checkins] =?utf-8?q?release=3A_Issue_=2327337=3A_Ensure_t?= =?utf-8?q?hat_the_tar_program_in_use_for_building_source_tarballs?= Message-ID: <20160712042831.19920.484.B509148E@psf.io> https://hg.python.org/release/rev/42fbca9d4b53 changeset: 106:42fbca9d4b53 user: Ned Deily date: Mon Jul 11 15:19:10 2016 -0400 summary: Issue #27337: Ensure that the tar program in use for building source tarballs is a GNU tar. BSD tar, the default on current OS X systems, does not strip relative prefixes like GNU tar does. files: release.py | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) diff --git a/release.py b/release.py --- a/release.py +++ b/release.py @@ -54,10 +54,14 @@ def check_env(): if 'EDITOR' not in os.environ: error('editor not detected.', - 'Please set your EDITOR enviroment variable') + 'Please set your EDITOR environment variable') if not os.path.exists('.hg'): error('CWD is not a Mercurial clone') - + if 'TAR' not in os.environ: + os.environ['TAR'] = 'tar' + if 'GNU' not in get_output([os.environ['TAR'], '--version']).strip().decode(): + error('"tar" must be GNU tar.', + 'Please set your TAR environment variable') def get_arg_parser(): usage = '%prog [options] tagname' @@ -192,9 +196,9 @@ base = os.path.basename(source) tgz = base + '.tgz' xz = base + '.tar.xz' - run_cmd(['tar cf - %s | gzip -9 > %s' % (source, tgz)]) + run_cmd(['$TAR cf - %s | gzip -9 > %s' % (source, tgz)]) print("Making .tar.xz") - run_cmd(['tar cf - %s | xz > %s' % (source, xz)]) + run_cmd(['$TAR cf - %s | xz > %s' % (source, xz)]) print('Calculating md5 sums') checksum_tgz = hashlib.md5() with open(tgz, 'rb') as data: -- Repository URL: https://hg.python.org/release From python-checkins at python.org Tue Jul 12 01:22:56 2016 From: python-checkins at python.org (ned.deily) Date: Tue, 12 Jul 2016 05:22:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Update_pydoc_topics_for_3?= =?utf-8?b?LjYuMGEz?= Message-ID: <20160712052256.52892.87762.C3446E36@psf.io> https://hg.python.org/cpython/rev/f2b7418e2682 changeset: 102327:f2b7418e2682 user: Ned Deily date: Mon Jul 11 15:32:48 2016 -0400 summary: Update pydoc topics for 3.6.0a3 files: Lib/pydoc_data/topics.py | 20 ++++++++++++-------- 1 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Lib/pydoc_data/topics.py b/Lib/pydoc_data/topics.py --- a/Lib/pydoc_data/topics.py +++ b/Lib/pydoc_data/topics.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Autogenerated by Sphinx on Mon Jun 13 16:49:58 2016 +# Autogenerated by Sphinx on Mon Jul 11 15:30:24 2016 topics = {'assert': '\n' 'The "assert" statement\n' '**********************\n' @@ -7288,13 +7288,17 @@ '\n' ' The tuple of base classes of a class object.\n' '\n' - 'class.__name__\n' - '\n' - ' The name of the class or type.\n' - '\n' - 'class.__qualname__\n' - '\n' - ' The *qualified name* of the class or type.\n' + 'definition.__name__\n' + '\n' + ' The name of the class, function, method, descriptor, or ' + 'generator\n' + ' instance.\n' + '\n' + 'definition.__qualname__\n' + '\n' + ' The *qualified name* of the class, function, method, ' + 'descriptor, or\n' + ' generator instance.\n' '\n' ' New in version 3.3.\n' '\n' -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 12 01:22:56 2016 From: python-checkins at python.org (ned.deily) Date: Tue, 12 Jul 2016 05:22:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Version_bump_for_3=2E6=2E0?= =?utf-8?q?a3?= Message-ID: <20160712052256.29407.13542.178163A0@psf.io> https://hg.python.org/cpython/rev/f3edf13dc339 changeset: 102328:f3edf13dc339 tag: v3.6.0a3 user: Ned Deily date: Mon Jul 11 15:38:40 2016 -0400 summary: Version bump for 3.6.0a3 files: Include/patchlevel.h | 4 ++-- Misc/NEWS | 2 +- README | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Include/patchlevel.h b/Include/patchlevel.h --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -20,10 +20,10 @@ #define PY_MINOR_VERSION 6 #define PY_MICRO_VERSION 0 #define PY_RELEASE_LEVEL PY_RELEASE_LEVEL_ALPHA -#define PY_RELEASE_SERIAL 2 +#define PY_RELEASE_SERIAL 3 /* Version as a string */ -#define PY_VERSION "3.6.0a2+" +#define PY_VERSION "3.6.0a3" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -5,7 +5,7 @@ What's New in Python 3.6.0 alpha 3 ================================== -*Release date: XXXX-XX-XX* +*Release date: 2016-07-11* Core and Builtins ----------------- diff --git a/README b/README --- a/README +++ b/README @@ -1,4 +1,4 @@ -This is Python version 3.6.0 alpha 2 +This is Python version 3.6.0 alpha 3 ==================================== Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 12 01:22:56 2016 From: python-checkins at python.org (ned.deily) Date: Tue, 12 Jul 2016 05:22:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Added_tag_v3=2E6=2E0a3_for?= =?utf-8?q?_changeset_f3edf13dc339?= Message-ID: <20160712052256.1975.71860.A6521FDC@psf.io> https://hg.python.org/cpython/rev/3f3799b532b4 changeset: 102329:3f3799b532b4 user: Ned Deily date: Mon Jul 11 15:40:13 2016 -0400 summary: Added tag v3.6.0a3 for changeset f3edf13dc339 files: .hgtags | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -168,3 +168,4 @@ 4def2a2901a5618ea45bcc8f2a1411ef33af18ad v3.5.2 5896da372fb044e38595fb74495de1e1e7c8fb3c v3.6.0a1 37889342355223e2fc1438de3dc7ffcd625c60f7 v3.6.0a2 +f3edf13dc339b8942ae6b309771ab197dd8ce6fa v3.6.0a3 -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 12 01:22:56 2016 From: python-checkins at python.org (ned.deily) Date: Tue, 12 Jul 2016 05:22:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Start_3=2E6=2E0a4?= Message-ID: <20160712052256.100615.18469.67A37BC4@psf.io> https://hg.python.org/cpython/rev/d4ee9d0bcd5d changeset: 102330:d4ee9d0bcd5d user: Ned Deily date: Tue Jul 12 01:14:53 2016 -0400 summary: Start 3.6.0a4 files: Include/patchlevel.h | 2 +- Misc/NEWS | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletions(-) diff --git a/Include/patchlevel.h b/Include/patchlevel.h --- a/Include/patchlevel.h +++ b/Include/patchlevel.h @@ -23,7 +23,7 @@ #define PY_RELEASE_SERIAL 3 /* Version as a string */ -#define PY_VERSION "3.6.0a3" +#define PY_VERSION "3.6.0a3+" /*--end constants--*/ /* Version as a single 4-byte hex number, e.g. 0x010502B2 == 1.5.2b2. diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2,6 +2,18 @@ Python News +++++++++++ +What's New in Python 3.6.0 alpha 4 +================================== + +*Release date: XXXX-XX-XX* + +Core and Builtins +----------------- + +Library +------- + + What's New in Python 3.6.0 alpha 3 ================================== -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 12 02:15:31 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Tue, 12 Jul 2016 06:15:31 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDgx?= =?utf-8?q?=3A_Docummented_that_ValueError_is_now_raised_instead_of_TypeEr?= =?utf-8?q?ror?= Message-ID: <20160712061530.62675.73712.FD6B5EA2@psf.io> https://hg.python.org/cpython/rev/420030a5e854 changeset: 102331:420030a5e854 branch: 3.5 parent: 102324:6aca24745831 user: Serhiy Storchaka date: Tue Jul 12 09:14:15 2016 +0300 summary: Issue #27481: Docummented that ValueError is now raised instead of TypeError in case of embedded null characters/bytes. Patch by Xiang Zhang. files: Doc/c-api/arg.rst | 22 +++++++++++++++++----- Doc/c-api/bytes.rst | 6 +++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Doc/c-api/arg.rst b/Doc/c-api/arg.rst --- a/Doc/c-api/arg.rst +++ b/Doc/c-api/arg.rst @@ -59,8 +59,8 @@ Convert a Unicode object to a C pointer to a character string. A pointer to an existing string is stored in the character pointer variable whose address you pass. The C string is NUL-terminated. - The Python string must not contain embedded NUL bytes; if it does, - a :exc:`TypeError` exception is raised. Unicode objects are converted + The Python string must not contain embedded null characters; if it does, + a :exc:`ValueError` exception is raised. Unicode objects are converted to C strings using ``'utf-8'`` encoding. If this conversion fails, a :exc:`UnicodeError` is raised. @@ -71,6 +71,10 @@ preferable to use the ``O&`` format with :c:func:`PyUnicode_FSConverter` as *converter*. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null characters + were encountered in the Python string. + ``s*`` (:class:`str` or :term:`bytes-like object`) [Py_buffer] This format accepts Unicode objects as well as bytes-like objects. It fills a :c:type:`Py_buffer` structure provided by the caller. @@ -99,9 +103,13 @@ ``y`` (read-only :term:`bytes-like object`) [const char \*] This format converts a bytes-like object to a C pointer to a character string; it does not accept Unicode objects. The bytes buffer must not - contain embedded NUL bytes; if it does, a :exc:`TypeError` + contain embedded null bytes; if it does, a :exc:`ValueError` exception is raised. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null bytes were + encountered in the bytes buffer. + ``y*`` (:term:`bytes-like object`) [Py_buffer] This variant on ``s*`` doesn't accept Unicode objects, only bytes-like objects. **This is the recommended way to accept @@ -127,14 +135,18 @@ pointer variable, which will be filled with the pointer to an existing Unicode buffer. Please note that the width of a :c:type:`Py_UNICODE` character depends on compilation options (it is either 16 or 32 bits). - The Python string must not contain embedded NUL characters; if it does, - a :exc:`TypeError` exception is raised. + The Python string must not contain embedded null characters; if it does, + a :exc:`ValueError` exception is raised. .. note:: Since ``u`` doesn't give you back the length of the string, and it may contain embedded NUL characters, it is recommended to use ``u#`` or ``U`` instead. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null characters + were encountered in the Python string. + ``u#`` (:class:`str`) [Py_UNICODE \*, int] This variant on ``u`` stores into two C variables, the first one a pointer to a Unicode data buffer, the second one its length. diff --git a/Doc/c-api/bytes.rst b/Doc/c-api/bytes.rst --- a/Doc/c-api/bytes.rst +++ b/Doc/c-api/bytes.rst @@ -158,7 +158,7 @@ If *length* is *NULL*, the bytes object may not contain embedded null bytes; - if it does, the function returns ``-1`` and a :exc:`TypeError` is raised. + if it does, the function returns ``-1`` and a :exc:`ValueError` is raised. The buffer refers to an internal buffer of *obj*, which includes an additional null byte at the end (not counted in *length*). The data @@ -167,6 +167,10 @@ *obj* is not a bytes object at all, :c:func:`PyBytes_AsStringAndSize` returns ``-1`` and raises :exc:`TypeError`. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null bytes were + encountered in the bytes object. + .. c:function:: void PyBytes_Concat(PyObject **bytes, PyObject *newpart) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 12 02:15:31 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Tue, 12 Jul 2016 06:15:31 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327481=3A_Docummented_that_ValueError_is_now_rai?= =?utf-8?q?sed_instead_of_TypeError?= Message-ID: <20160712061530.29986.7329.6C98CBC3@psf.io> https://hg.python.org/cpython/rev/00b9c734af87 changeset: 102332:00b9c734af87 parent: 102330:d4ee9d0bcd5d parent: 102331:420030a5e854 user: Serhiy Storchaka date: Tue Jul 12 09:15:00 2016 +0300 summary: Issue #27481: Docummented that ValueError is now raised instead of TypeError in case of embedded null characters/bytes. Patch by Xiang Zhang. files: Doc/c-api/arg.rst | 22 +++++++++++++++++----- Doc/c-api/bytes.rst | 6 +++++- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/Doc/c-api/arg.rst b/Doc/c-api/arg.rst --- a/Doc/c-api/arg.rst +++ b/Doc/c-api/arg.rst @@ -59,8 +59,8 @@ Convert a Unicode object to a C pointer to a character string. A pointer to an existing string is stored in the character pointer variable whose address you pass. The C string is NUL-terminated. - The Python string must not contain embedded NUL bytes; if it does, - a :exc:`TypeError` exception is raised. Unicode objects are converted + The Python string must not contain embedded null characters; if it does, + a :exc:`ValueError` exception is raised. Unicode objects are converted to C strings using ``'utf-8'`` encoding. If this conversion fails, a :exc:`UnicodeError` is raised. @@ -71,6 +71,10 @@ preferable to use the ``O&`` format with :c:func:`PyUnicode_FSConverter` as *converter*. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null characters + were encountered in the Python string. + ``s*`` (:class:`str` or :term:`bytes-like object`) [Py_buffer] This format accepts Unicode objects as well as bytes-like objects. It fills a :c:type:`Py_buffer` structure provided by the caller. @@ -99,9 +103,13 @@ ``y`` (read-only :term:`bytes-like object`) [const char \*] This format converts a bytes-like object to a C pointer to a character string; it does not accept Unicode objects. The bytes buffer must not - contain embedded NUL bytes; if it does, a :exc:`TypeError` + contain embedded null bytes; if it does, a :exc:`ValueError` exception is raised. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null bytes were + encountered in the bytes buffer. + ``y*`` (:term:`bytes-like object`) [Py_buffer] This variant on ``s*`` doesn't accept Unicode objects, only bytes-like objects. **This is the recommended way to accept @@ -127,14 +135,18 @@ pointer variable, which will be filled with the pointer to an existing Unicode buffer. Please note that the width of a :c:type:`Py_UNICODE` character depends on compilation options (it is either 16 or 32 bits). - The Python string must not contain embedded NUL characters; if it does, - a :exc:`TypeError` exception is raised. + The Python string must not contain embedded null characters; if it does, + a :exc:`ValueError` exception is raised. .. note:: Since ``u`` doesn't give you back the length of the string, and it may contain embedded NUL characters, it is recommended to use ``u#`` or ``U`` instead. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null characters + were encountered in the Python string. + ``u#`` (:class:`str`) [Py_UNICODE \*, int] This variant on ``u`` stores into two C variables, the first one a pointer to a Unicode data buffer, the second one its length. diff --git a/Doc/c-api/bytes.rst b/Doc/c-api/bytes.rst --- a/Doc/c-api/bytes.rst +++ b/Doc/c-api/bytes.rst @@ -158,7 +158,7 @@ If *length* is *NULL*, the bytes object may not contain embedded null bytes; - if it does, the function returns ``-1`` and a :exc:`TypeError` is raised. + if it does, the function returns ``-1`` and a :exc:`ValueError` is raised. The buffer refers to an internal buffer of *obj*, which includes an additional null byte at the end (not counted in *length*). The data @@ -167,6 +167,10 @@ *obj* is not a bytes object at all, :c:func:`PyBytes_AsStringAndSize` returns ``-1`` and raises :exc:`TypeError`. + .. versionchanged:: 3.5 + Previously, :exc:`TypeError` was raised when embedded null bytes were + encountered in the bytes object. + .. c:function:: void PyBytes_Concat(PyObject **bytes, PyObject *newpart) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 12 08:47:17 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Tue, 12 Jul 2016 12:47:17 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3NDcz?= =?utf-8?q?=3A_Fixed_possible_integer_overflow_in_str=2C_unicode_and_bytea?= =?utf-8?q?rray?= Message-ID: <20160712124716.20083.66592.0F8B2313@psf.io> https://hg.python.org/cpython/rev/130d97217e36 changeset: 102333:130d97217e36 branch: 2.7 parent: 102322:f7f0f1aecbfa user: Serhiy Storchaka date: Tue Jul 12 15:46:57 2016 +0300 summary: Issue #27473: Fixed possible integer overflow in str, unicode and bytearray concatenations and repetitions. Based on patch by Xiang Zhang. files: Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 23 +++++++++++------------ Objects/stringobject.c | 8 ++++---- Objects/unicodeobject.c | 16 +++++++++++----- 4 files changed, 29 insertions(+), 21 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27473: Fixed possible integer overflow in str, unicode and bytearray + concatenations and repetitions. Based on patch by Xiang Zhang. + - Issue #23908: os functions, open() and the io.FileIO constructor now reject unicode paths with embedded null character on Windows instead of silently truncating them. diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -273,7 +273,6 @@ PyObject * PyByteArray_Concat(PyObject *a, PyObject *b) { - Py_ssize_t size; Py_buffer va, vb; PyByteArrayObject *result = NULL; @@ -286,13 +285,13 @@ goto done; } - size = va.len + vb.len; - if (size < 0) { - PyErr_NoMemory(); - goto done; + if (va.len > PY_SSIZE_T_MAX - vb.len) { + PyErr_NoMemory(); + goto done; } - result = (PyByteArrayObject *) PyByteArray_FromStringAndSize(NULL, size); + result = (PyByteArrayObject *) \ + PyByteArray_FromStringAndSize(NULL, va.len + vb.len); if (result != NULL) { memcpy(result->ob_bytes, va.buf, va.len); memcpy(result->ob_bytes + va.len, vb.buf, vb.len); @@ -328,11 +327,11 @@ } mysize = Py_SIZE(self); - size = mysize + vo.len; - if (size < 0) { + if (mysize > PY_SSIZE_T_MAX - vo.len) { PyBuffer_Release(&vo); return PyErr_NoMemory(); } + size = mysize + vo.len; if (size < self->ob_alloc) { Py_SIZE(self) = size; self->ob_bytes[Py_SIZE(self)] = '\0'; /* Trailing null byte */ @@ -357,9 +356,9 @@ if (count < 0) count = 0; mysize = Py_SIZE(self); + if (count != 0 && mysize > PY_SSIZE_T_MAX / count) + return PyErr_NoMemory(); size = mysize * count; - if (count != 0 && size / count != mysize) - return PyErr_NoMemory(); result = (PyByteArrayObject *)PyByteArray_FromStringAndSize(NULL, size); if (result != NULL && size != 0) { if (mysize == 1) @@ -382,9 +381,9 @@ if (count < 0) count = 0; mysize = Py_SIZE(self); + if (count != 0 && mysize > PY_SSIZE_T_MAX / count) + return PyErr_NoMemory(); size = mysize * count; - if (count != 0 && size / count != mysize) - return PyErr_NoMemory(); if (size < self->ob_alloc) { Py_SIZE(self) = size; self->ob_bytes[Py_SIZE(self)] = '\0'; /* Trailing null byte */ diff --git a/Objects/stringobject.c b/Objects/stringobject.c --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -1040,7 +1040,6 @@ Py_INCREF(a); return (PyObject *)a; } - size = Py_SIZE(a) + Py_SIZE(b); /* Check that string sizes are not negative, to prevent an overflow in cases where we are passed incorrectly-created strings with negative lengths (due to a bug in other code). @@ -1051,6 +1050,7 @@ "strings are too large to concat"); return NULL; } + size = Py_SIZE(a) + Py_SIZE(b); /* Inline PyObject_NewVar */ if (size > PY_SSIZE_T_MAX - PyStringObject_SIZE) { @@ -1081,15 +1081,15 @@ size_t nbytes; if (n < 0) n = 0; - /* watch out for overflows: the size can overflow int, + /* watch out for overflows: the size can overflow Py_ssize_t, * and the # of bytes needed can overflow size_t */ - size = Py_SIZE(a) * n; - if (n && size / n != Py_SIZE(a)) { + if (n && Py_SIZE(a) > PY_SSIZE_T_MAX / n) { PyErr_SetString(PyExc_OverflowError, "repeated string is too long"); return NULL; } + size = Py_SIZE(a) * n; if (size == Py_SIZE(a) && PyString_CheckExact(a)) { Py_INCREF(a); return (PyObject *)a; diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -6378,6 +6378,12 @@ return (PyObject *)v; } + if (u->length > PY_SSIZE_T_MAX - v->length) { + PyErr_SetString(PyExc_OverflowError, + "strings are too large to concat"); + goto onError; + } + /* Concat the two Unicode strings */ w = _PyUnicode_New(u->length + v->length); if (w == NULL) @@ -7223,17 +7229,17 @@ return (PyObject*) str; } - /* ensure # of chars needed doesn't overflow int and # of bytes + /* ensure # of chars needed doesn't overflow Py_ssize_t and # of bytes * needed doesn't overflow size_t */ - nchars = len * str->length; - if (len && nchars / len != str->length) { + if (len && str->length > PY_SSIZE_T_MAX / len) { PyErr_SetString(PyExc_OverflowError, "repeated string is too long"); return NULL; } - nbytes = (nchars + 1) * sizeof(Py_UNICODE); - if (nbytes / sizeof(Py_UNICODE) != (size_t)(nchars + 1)) { + nchars = len * str->length; + nbytes = ((size_t)nchars + 1u) * sizeof(Py_UNICODE); + if (nbytes / sizeof(Py_UNICODE) != ((size_t)nchars + 1u)) { PyErr_SetString(PyExc_OverflowError, "repeated string is too long"); return NULL; -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Tue Jul 12 09:37:32 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 12 Jul 2016 14:37:32 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-12 Message-ID: <4dda6271-0f15-4a4f-91ec-4984589e7870@irsmsx153.ger.corp.intel.com> Results for project Python default, build date 2016-07-12 02:03:12 +0000 commit: 2a34cef7681b previous commit: 4ef2404d343e revision date: 2016-07-11 18:21:58 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.27% -0.34% 12.09% 15.04% :-| pybench 0.10% 0.06% 1.45% 8.10% :-( regex_v8 2.65% 0.00% -2.06% 3.42% :-| nbody 0.21% -0.07% -0.63% 11.23% :-| json_dump_v2 0.27% -0.22% -1.72% 11.65% :-| normal_startup 0.78% 0.18% 1.00% 5.67% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-12/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Tue Jul 12 09:38:24 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 12 Jul 2016 14:38:24 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-12 Message-ID: Results for project Python 2.7, build date 2016-07-12 06:47:13 +0000 commit: f7f0f1aecbfa previous commit: 43d7e5fb3bc2 revision date: 2016-07-11 07:51:37 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.18% -0.30% 4.69% 5.54% :-) pybench 0.29% 0.03% 5.95% 4.15% :-( regex_v8 0.66% -0.14% -2.55% 11.44% :-) nbody 0.13% -0.11% 8.63% 2.89% :-) json_dump_v2 0.53% 0.60% 3.10% 10.70% :-( normal_startup 1.85% -0.02% -5.99% 2.13% :-) ssbench 0.20% -0.17% 2.57% 1.65% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-12/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Tue Jul 12 18:24:31 2016 From: python-checkins at python.org (yury.selivanov) Date: Tue, 12 Jul 2016 22:24:31 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3Mzky?= =?utf-8?q?=3A_Add_loop=2Econnect=5Faccepted=5Fsocket=28=29=2E?= Message-ID: <20160712222430.6375.80957.20C13DCE@psf.io> https://hg.python.org/cpython/rev/3e44c449433a changeset: 102334:3e44c449433a branch: 3.5 parent: 102331:420030a5e854 user: Yury Selivanov date: Tue Jul 12 18:23:10 2016 -0400 summary: Issue #27392: Add loop.connect_accepted_socket(). Patch by Jim Fulton. files: Lib/asyncio/base_events.py | 28 ++++- Lib/test/test_asyncio/test_events.py | 79 ++++++++++++++++ Misc/NEWS | 3 + 3 files changed, 106 insertions(+), 4 deletions(-) diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -707,8 +707,6 @@ raise ValueError( 'host and port was not specified and no sock specified') - sock.setblocking(False) - transport, protocol = yield from self._create_connection_transport( sock, protocol_factory, ssl, server_hostname) if self._debug: @@ -721,14 +719,17 @@ @coroutine def _create_connection_transport(self, sock, protocol_factory, ssl, - server_hostname): + server_hostname, server_side=False): + + sock.setblocking(False) + protocol = protocol_factory() waiter = self.create_future() if ssl: sslcontext = None if isinstance(ssl, bool) else ssl transport = self._make_ssl_transport( sock, protocol, sslcontext, waiter, - server_side=False, server_hostname=server_hostname) + server_side=server_side, server_hostname=server_hostname) else: transport = self._make_socket_transport(sock, protocol, waiter) @@ -980,6 +981,25 @@ return server @coroutine + def connect_accepted_socket(self, protocol_factory, sock, *, ssl=None): + """Handle an accepted connection. + + This is used by servers that accept connections outside of + asyncio but that use asyncio to handle connections. + + This method is a coroutine. When completed, the coroutine + returns a (transport, protocol) pair. + """ + transport, protocol = yield from self._create_connection_transport( + sock, protocol_factory, ssl, '', server_side=True) + if self._debug: + # Get the socket from the transport because SSL transport closes + # the old socket and creates a new SSL socket + sock = transport.get_extra_info('socket') + logger.debug("%r handled: (%r, %r)", sock, transport, protocol) + return transport, protocol + + @coroutine def connect_read_pipe(self, protocol_factory, pipe): protocol = protocol_factory() waiter = self.create_future() diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -744,6 +744,85 @@ self.assertEqual(cm.exception.errno, errno.EADDRINUSE) self.assertIn(str(httpd.address), cm.exception.strerror) + def test_connect_accepted_socket(self, server_ssl=None, client_ssl=None): + loop = self.loop + + class MyProto(MyBaseProto): + + def connection_lost(self, exc): + super().connection_lost(exc) + loop.call_soon(loop.stop) + + def data_received(self, data): + super().data_received(data) + self.transport.write(expected_response) + + lsock = socket.socket() + lsock.bind(('127.0.0.1', 0)) + lsock.listen(1) + addr = lsock.getsockname() + + message = b'test data' + reponse = None + expected_response = b'roger' + + def client(): + global response + try: + csock = socket.socket() + if client_ssl is not None: + csock = client_ssl.wrap_socket(csock) + csock.connect(addr) + csock.sendall(message) + response = csock.recv(99) + csock.close() + except Exception as exc: + print( + "Failure in client thread in test_connect_accepted_socket", + exc) + + thread = threading.Thread(target=client, daemon=True) + thread.start() + + conn, _ = lsock.accept() + proto = MyProto(loop=loop) + proto.loop = loop + f = loop.create_task( + loop.connect_accepted_socket( + (lambda : proto), conn, ssl=server_ssl)) + loop.run_forever() + conn.close() + lsock.close() + + thread.join(1) + self.assertFalse(thread.is_alive()) + self.assertEqual(proto.state, 'CLOSED') + self.assertEqual(proto.nbytes, len(message)) + self.assertEqual(response, expected_response) + + @unittest.skipIf(ssl is None, 'No ssl module') + def test_ssl_connect_accepted_socket(self): + if (sys.platform == 'win32' and + sys.version_info < (3, 5) and + isinstance(self.loop, proactor_events.BaseProactorEventLoop) + ): + raise unittest.SkipTest( + 'SSL not supported with proactor event loops before Python 3.5' + ) + + server_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + server_context.load_cert_chain(ONLYCERT, ONLYKEY) + if hasattr(server_context, 'check_hostname'): + server_context.check_hostname = False + server_context.verify_mode = ssl.CERT_NONE + + client_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + if hasattr(server_context, 'check_hostname'): + client_context.check_hostname = False + client_context.verify_mode = ssl.CERT_NONE + + self.test_connect_accepted_socket(server_context, client_context) + @mock.patch('asyncio.base_events.socket') def create_server_multiple_hosts(self, family, hosts, mock_sock): @asyncio.coroutine diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -72,6 +72,9 @@ - Issue #26930: Update Windows builds to use OpenSSL 1.0.2h. +- Issue #27392: Add loop.connect_accepted_socket(). + Patch by Jim Fulton. + IDLE ---- -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 12 18:24:31 2016 From: python-checkins at python.org (yury.selivanov) Date: Tue, 12 Jul 2016 22:24:31 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogTWVyZ2UgMy41IChpc3N1ZSAjMjczOTIp?= Message-ID: <20160712222431.19897.72898.76CC4398@psf.io> https://hg.python.org/cpython/rev/2f0716009132 changeset: 102335:2f0716009132 parent: 102332:00b9c734af87 parent: 102334:3e44c449433a user: Yury Selivanov date: Tue Jul 12 18:24:25 2016 -0400 summary: Merge 3.5 (issue #27392) files: Lib/asyncio/base_events.py | 28 ++++- Lib/test/test_asyncio/test_events.py | 79 ++++++++++++++++ Misc/NEWS | 3 + 3 files changed, 106 insertions(+), 4 deletions(-) diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -708,8 +708,6 @@ raise ValueError( 'host and port was not specified and no sock specified') - sock.setblocking(False) - transport, protocol = yield from self._create_connection_transport( sock, protocol_factory, ssl, server_hostname) if self._debug: @@ -722,14 +720,17 @@ @coroutine def _create_connection_transport(self, sock, protocol_factory, ssl, - server_hostname): + server_hostname, server_side=False): + + sock.setblocking(False) + protocol = protocol_factory() waiter = self.create_future() if ssl: sslcontext = None if isinstance(ssl, bool) else ssl transport = self._make_ssl_transport( sock, protocol, sslcontext, waiter, - server_side=False, server_hostname=server_hostname) + server_side=server_side, server_hostname=server_hostname) else: transport = self._make_socket_transport(sock, protocol, waiter) @@ -981,6 +982,25 @@ return server @coroutine + def connect_accepted_socket(self, protocol_factory, sock, *, ssl=None): + """Handle an accepted connection. + + This is used by servers that accept connections outside of + asyncio but that use asyncio to handle connections. + + This method is a coroutine. When completed, the coroutine + returns a (transport, protocol) pair. + """ + transport, protocol = yield from self._create_connection_transport( + sock, protocol_factory, ssl, '', server_side=True) + if self._debug: + # Get the socket from the transport because SSL transport closes + # the old socket and creates a new SSL socket + sock = transport.get_extra_info('socket') + logger.debug("%r handled: (%r, %r)", sock, transport, protocol) + return transport, protocol + + @coroutine def connect_read_pipe(self, protocol_factory, pipe): protocol = protocol_factory() waiter = self.create_future() diff --git a/Lib/test/test_asyncio/test_events.py b/Lib/test/test_asyncio/test_events.py --- a/Lib/test/test_asyncio/test_events.py +++ b/Lib/test/test_asyncio/test_events.py @@ -744,6 +744,85 @@ self.assertEqual(cm.exception.errno, errno.EADDRINUSE) self.assertIn(str(httpd.address), cm.exception.strerror) + def test_connect_accepted_socket(self, server_ssl=None, client_ssl=None): + loop = self.loop + + class MyProto(MyBaseProto): + + def connection_lost(self, exc): + super().connection_lost(exc) + loop.call_soon(loop.stop) + + def data_received(self, data): + super().data_received(data) + self.transport.write(expected_response) + + lsock = socket.socket() + lsock.bind(('127.0.0.1', 0)) + lsock.listen(1) + addr = lsock.getsockname() + + message = b'test data' + reponse = None + expected_response = b'roger' + + def client(): + global response + try: + csock = socket.socket() + if client_ssl is not None: + csock = client_ssl.wrap_socket(csock) + csock.connect(addr) + csock.sendall(message) + response = csock.recv(99) + csock.close() + except Exception as exc: + print( + "Failure in client thread in test_connect_accepted_socket", + exc) + + thread = threading.Thread(target=client, daemon=True) + thread.start() + + conn, _ = lsock.accept() + proto = MyProto(loop=loop) + proto.loop = loop + f = loop.create_task( + loop.connect_accepted_socket( + (lambda : proto), conn, ssl=server_ssl)) + loop.run_forever() + conn.close() + lsock.close() + + thread.join(1) + self.assertFalse(thread.is_alive()) + self.assertEqual(proto.state, 'CLOSED') + self.assertEqual(proto.nbytes, len(message)) + self.assertEqual(response, expected_response) + + @unittest.skipIf(ssl is None, 'No ssl module') + def test_ssl_connect_accepted_socket(self): + if (sys.platform == 'win32' and + sys.version_info < (3, 5) and + isinstance(self.loop, proactor_events.BaseProactorEventLoop) + ): + raise unittest.SkipTest( + 'SSL not supported with proactor event loops before Python 3.5' + ) + + server_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + server_context.load_cert_chain(ONLYCERT, ONLYKEY) + if hasattr(server_context, 'check_hostname'): + server_context.check_hostname = False + server_context.verify_mode = ssl.CERT_NONE + + client_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) + if hasattr(server_context, 'check_hostname'): + client_context.check_hostname = False + client_context.verify_mode = ssl.CERT_NONE + + self.test_connect_accepted_socket(server_context, client_context) + @mock.patch('asyncio.base_events.socket') def create_server_multiple_hosts(self, family, hosts, mock_sock): @asyncio.coroutine diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -128,6 +128,9 @@ locale encoding, and fix get_begidx() and get_endidx() to return code point indexes. +- Issue #27392: Add loop.connect_accepted_socket(). + Patch by Jim Fulton. + IDLE ---- -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Wed Jul 13 08:40:41 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 13 Jul 2016 13:40:41 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python Default 2016-07-13 Message-ID: <515d499e-23d6-4904-9a96-650de2d376a4@irsmsx153.ger.corp.intel.com> Results for project Python default, build date 2016-07-13 02:03:13 +0000 commit: 2f0716009132 previous commit: 2a34cef7681b revision date: 2016-07-12 22:24:25 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.24% -1.09% 11.13% 15.32% :-| pybench 0.09% 0.04% 1.49% 8.29% :-( regex_v8 2.65% -0.06% -2.11% 3.25% :-| nbody 0.09% 0.09% -0.54% 11.27% :-( json_dump_v2 0.26% -0.32% -2.05% 10.46% :-| normal_startup 0.77% -0.24% 0.20% 5.88% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-default-2016-07-13/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Wed Jul 13 08:41:14 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 13 Jul 2016 13:41:14 +0100 Subject: [Python-checkins] UGLY Benchmark Results for Python 2.7 2016-07-13 Message-ID: Results for project Python 2.7, build date 2016-07-13 02:47:29 +0000 commit: 130d97217e36 previous commit: f7f0f1aecbfa revision date: 2016-07-12 12:46:57 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.18% 1.16% 5.80% 3.55% :-) pybench 0.20% 0.02% 5.96% 3.97% :-( regex_v8 0.64% 0.22% -2.32% 11.03% :-) nbody 0.11% -0.92% 7.78% 3.08% :-| json_dump_v2 0.29% -1.71% 1.44% 11.74% :-( normal_startup 1.90% 0.33% -5.64% 1.76% :-) ssbench 0.17% 0.18% 2.76% 1.88% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/ugly-benchmark-results-for-python-2-7-2016-07-13/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Wed Jul 13 22:59:29 2016 From: python-checkins at python.org (steve.dower) Date: Thu, 14 Jul 2016 02:59:29 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Fixes_build_or?= =?utf-8?q?der_and_lingering_intermediate_files=2E?= Message-ID: <20160714025929.44362.16789.31D39934@psf.io> https://hg.python.org/cpython/rev/6c7f356737a8 changeset: 102336:6c7f356737a8 branch: 3.5 parent: 102334:3e44c449433a user: Steve Dower date: Wed Jul 13 19:58:21 2016 -0700 summary: Fixes build order and lingering intermediate files. files: PCbuild/pcbuild.proj | 8 ++++++-- PCbuild/python3dll.vcxproj | 6 +----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -33,8 +33,6 @@ false - - @@ -58,12 +56,18 @@ false + + + + false + diff --git a/PCbuild/python3dll.vcxproj b/PCbuild/python3dll.vcxproj --- a/PCbuild/python3dll.vcxproj +++ b/PCbuild/python3dll.vcxproj @@ -58,6 +58,7 @@ <_ProjectFileVersion>10.0.30319.1 <_Machine>X86 <_Machine Condition="$(Platform) == 'x64'">X64 + $(ExtensionsToDeleteOnClean);$(IntDir)python3_d.def;$(IntDir)python3stub.def @@ -133,9 +134,4 @@ - - - - - \ No newline at end of file -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 22:59:29 2016 From: python-checkins at python.org (steve.dower) Date: Thu, 14 Jul 2016 02:59:29 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_from_3=2E5?= Message-ID: <20160714025929.124709.29103.DA257DB8@psf.io> https://hg.python.org/cpython/rev/c821709a9275 changeset: 102337:c821709a9275 parent: 102335:2f0716009132 parent: 102336:6c7f356737a8 user: Steve Dower date: Wed Jul 13 19:58:47 2016 -0700 summary: Merge from 3.5 files: PCbuild/pcbuild.proj | 8 ++++++-- PCbuild/python3dll.vcxproj | 6 +----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -33,8 +33,6 @@ false - - @@ -58,12 +56,18 @@ false + + + + false + diff --git a/PCbuild/python3dll.vcxproj b/PCbuild/python3dll.vcxproj --- a/PCbuild/python3dll.vcxproj +++ b/PCbuild/python3dll.vcxproj @@ -58,6 +58,7 @@ <_ProjectFileVersion>10.0.30319.1 <_Machine>X86 <_Machine Condition="$(Platform) == 'x64'">X64 + $(ExtensionsToDeleteOnClean);$(IntDir)python3_d.def;$(IntDir)python3stub.def @@ -133,9 +134,4 @@ - - - - - \ No newline at end of file -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 23:37:14 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 14 Jul 2016 03:37:14 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy4yIC0+IDMuMyk6?= =?utf-8?q?_Issue_=2327369=3A_Merge_test=5Fpyexpat_from_3=2E2_into_3=2E3?= Message-ID: <20160714033714.66625.92536.0F7AE93B@psf.io> https://hg.python.org/cpython/rev/1c06e02b968a changeset: 102340:1c06e02b968a branch: 3.3 parent: 102304:1c07bd735282 parent: 102339:5b64175c6c24 user: Martin Panter date: Thu Jul 14 01:42:53 2016 +0000 summary: Issue #27369: Merge test_pyexpat from 3.2 into 3.3 files: Lib/test/test_pyexpat.py | 6 ++---- Misc/NEWS | 3 +++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -603,11 +603,9 @@ # \xc2\x85 is UTF-8 encoded U+0085 (NEXT LINE) xml = b"\r\n" parser = expat.ParserCreate() - try: + err_pattern = r'XML declaration not well-formed: line 1, column \d+' + with self.assertRaisesRegex(expat.ExpatError, err_pattern): parser.Parse(xml, True) - self.fail() - except expat.ExpatError as e: - self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') class ErrorMessageTest(unittest.TestCase): def test_codes(self): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -60,6 +60,9 @@ Tests ----- +- Issue #27369: In test_pyexpat, avoid testing an error message detail that + changed in Expat 2.2.0. + - Issue #25940: Changed test_ssl and test_httplib to use self-signed.pythontest.net. This avoids relying on svn.python.org, which recently changed root certificate. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 23:37:14 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 14 Jul 2016 03:37:14 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy4yKTogSXNzdWUgIzI3MzY5?= =?utf-8?q?=3A_Don=E2=80=99t_test_error_message_detail_that_changed_in_Exp?= =?utf-8?q?at_2=2E2=2E0?= Message-ID: <20160714033714.79211.32741.A8C69A6A@psf.io> https://hg.python.org/cpython/rev/5b64175c6c24 changeset: 102339:5b64175c6c24 branch: 3.2 user: Martin Panter date: Thu Jul 14 01:31:46 2016 +0000 summary: Issue #27369: Don?t test error message detail that changed in Expat 2.2.0 files: Lib/test/test_pyexpat.py | 6 ++---- Misc/NEWS | 3 +++ 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -603,11 +603,9 @@ # \xc2\x85 is UTF-8 encoded U+0085 (NEXT LINE) xml = b"\r\n" parser = expat.ParserCreate() - try: + err_pattern = r'XML declaration not well-formed: line 1, column \d+' + with self.assertRaisesRegex(expat.ExpatError, err_pattern): parser.Parse(xml, True) - self.fail() - except expat.ExpatError as e: - self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') class ErrorMessageTest(unittest.TestCase): def test_codes(self): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -27,6 +27,9 @@ Tests ----- +- Issue #27369: In test_pyexpat, avoid testing an error message detail that + changed in Expat 2.2.0. + - Issue #25940: Changed test_ssl and test_httplib to use self-signed.pythontest.net. This avoids relying on svn.python.org, which recently changed root certificate. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 23:37:15 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 14 Jul 2016 03:37:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy4yKTogSXNzdWUgIzIyNzU4?= =?utf-8?q?=3A_Move_NEWS_entry_to_Library_section?= Message-ID: <20160714033714.124324.74701.114726E9@psf.io> https://hg.python.org/cpython/rev/a0bf31e50da5 changeset: 102338:a0bf31e50da5 branch: 3.2 parent: 102301:d22fadc18d01 user: Martin Panter date: Thu Jul 14 01:17:03 2016 +0000 summary: Issue #22758: Move NEWS entry to Library section files: Misc/NEWS | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -21,6 +21,9 @@ - Issue #22931: Allow '[' and ']' in cookie values. +- Issue #22758: Fix a regression that no longer allowed secure and httponly + cookies to be parsed. + Tests ----- @@ -28,9 +31,6 @@ self-signed.pythontest.net. This avoids relying on svn.python.org, which recently changed root certificate. -- Issue #22758: Fix a regression that no longer allowed secure and httponly - cookies to be parsed. - What's New in Python 3.2.6? =========================== -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 23:37:15 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 14 Jul 2016 03:37:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy4zIC0+IDMuNCk6?= =?utf-8?q?_Issue_=2327369=3A_Merge_test=5Fpyexpat_from_3=2E3_into_3=2E4?= Message-ID: <20160714033714.19174.22809.FDFC9A3C@psf.io> https://hg.python.org/cpython/rev/17ec4d58c046 changeset: 102341:17ec4d58c046 branch: 3.4 parent: 102305:5b712993dce5 parent: 102340:1c06e02b968a user: Martin Panter date: Thu Jul 14 02:09:17 2016 +0000 summary: Issue #27369: Merge test_pyexpat from 3.3 into 3.4 files: Lib/test/test_pyexpat.py | 6 ++---- Misc/NEWS | 6 ++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -662,11 +662,9 @@ # \xc2\x85 is UTF-8 encoded U+0085 (NEXT LINE) xml = b"\r\n" parser = expat.ParserCreate() - try: + err_pattern = r'XML declaration not well-formed: line 1, column \d+' + with self.assertRaisesRegex(expat.ExpatError, err_pattern): parser.Parse(xml, True) - self.fail() - except expat.ExpatError as e: - self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') class ErrorMessageTest(unittest.TestCase): def test_codes(self): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,12 @@ Library ------- +Tests +----- + +- Issue #27369: In test_pyexpat, avoid testing an error message detail that + changed in Expat 2.2.0. + What's New in Python 3.4.5? =========================== -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 23:37:15 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 14 Jul 2016 03:37:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3MzY5?= =?utf-8?q?=3A_Don=E2=80=99t_test_error_message_detail_that_changed_in_Exp?= =?utf-8?q?at_2=2E2=2E0?= Message-ID: <20160714033714.28077.28179.9DA6C815@psf.io> https://hg.python.org/cpython/rev/2d6e6600c210 changeset: 102342:2d6e6600c210 branch: 2.7 parent: 102333:130d97217e36 user: Martin Panter date: Thu Jul 14 01:31:46 2016 +0000 summary: Issue #27369: Don?t test error message detail that changed in Expat 2.2.0 files: Lib/test/test_pyexpat.py | 6 ++---- Misc/NEWS | 6 ++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -610,11 +610,9 @@ def test2(self): xml = "\r\n" parser = expat.ParserCreate() - try: + err_pattern = r'XML declaration not well-formed: line 1, column \d+' + with self.assertRaisesRegexp(expat.ExpatError, err_pattern): parser.Parse(xml, True) - self.fail() - except expat.ExpatError as e: - self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') class ForeignDTDTests(unittest.TestCase): """ diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -62,6 +62,12 @@ resulting links to use lowercase. Patch by Sean Rodman, test by Kaushik Nadikuditi. +Tests +----- + +- Issue #27369: In test_pyexpat, avoid testing an error message detail that + changed in Expat 2.2.0. + What's New in Python 2.7.12? ============================ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 23:37:15 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 14 Jul 2016 03:37:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy40IC0+IDMuNSk6?= =?utf-8?q?_Issue_=2327369=3A_Merge_test=5Fpyexpat_from_3=2E4_into_3=2E5?= Message-ID: <20160714033715.14507.27813.80F3EFFC@psf.io> https://hg.python.org/cpython/rev/0fbf3b88eed8 changeset: 102343:0fbf3b88eed8 branch: 3.5 parent: 102336:6c7f356737a8 parent: 102341:17ec4d58c046 user: Martin Panter date: Thu Jul 14 03:35:15 2016 +0000 summary: Issue #27369: Merge test_pyexpat from 3.4 into 3.5 files: Lib/test/test_pyexpat.py | 6 ++---- Misc/NEWS | 6 ++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -656,11 +656,9 @@ # \xc2\x85 is UTF-8 encoded U+0085 (NEXT LINE) xml = b"\r\n" parser = expat.ParserCreate() - try: + err_pattern = r'XML declaration not well-formed: line 1, column \d+' + with self.assertRaisesRegex(expat.ExpatError, err_pattern): parser.Parse(xml, True) - self.fail() - except expat.ExpatError as e: - self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') class ErrorMessageTest(unittest.TestCase): def test_codes(self): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -90,6 +90,12 @@ - Issue #26754: PyUnicode_FSDecoder() accepted a filename argument encoded as an iterable of integers. Now only strings and bytes-like objects are accepted. +Tests +----- + +- Issue #27369: In test_pyexpat, avoid testing an error message detail that + changed in Expat 2.2.0. + Tools/Demos ----------- -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 13 23:37:20 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 14 Jul 2016 03:37:20 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327369=3A_Merge_test=5Fpyexpat_from_3=2E5?= Message-ID: <20160714033720.9214.28200.819260C1@psf.io> https://hg.python.org/cpython/rev/31dc480102fc changeset: 102344:31dc480102fc parent: 102337:c821709a9275 parent: 102343:0fbf3b88eed8 user: Martin Panter date: Thu Jul 14 03:36:53 2016 +0000 summary: Issue #27369: Merge test_pyexpat from 3.5 files: Lib/test/test_pyexpat.py | 6 ++---- Misc/NEWS | 6 ++++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Lib/test/test_pyexpat.py b/Lib/test/test_pyexpat.py --- a/Lib/test/test_pyexpat.py +++ b/Lib/test/test_pyexpat.py @@ -656,11 +656,9 @@ # \xc2\x85 is UTF-8 encoded U+0085 (NEXT LINE) xml = b"\r\n" parser = expat.ParserCreate() - try: + err_pattern = r'XML declaration not well-formed: line 1, column \d+' + with self.assertRaisesRegex(expat.ExpatError, err_pattern): parser.Parse(xml, True) - self.fail() - except expat.ExpatError as e: - self.assertEqual(str(e), 'XML declaration not well-formed: line 1, column 14') class ErrorMessageTest(unittest.TestCase): def test_codes(self): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,12 @@ Library ------- +Tests +----- + +- Issue #27369: In test_pyexpat, avoid testing an error message detail that + changed in Expat 2.2.0. + What's New in Python 3.6.0 alpha 3 ================================== -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 14 00:13:40 2016 From: python-checkins at python.org (benjamin.peterson) Date: Thu, 14 Jul 2016 04:13:40 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Backed_out_changeset_af29d?= =?utf-8?q?89083b3_=28closes_=2325548=29_=28closes_=2327498=29?= Message-ID: <20160714041340.28456.606.DBE330C7@psf.io> https://hg.python.org/cpython/rev/4f11e6b72e8f changeset: 102345:4f11e6b72e8f user: Benjamin Peterson date: Wed Jul 13 21:13:29 2016 -0700 summary: Backed out changeset af29d89083b3 (closes #25548) (closes #27498) files: Lib/ctypes/test/test_structures.py | 10 ++-- Lib/statistics.py | 8 +- Lib/test/test_class.py | 10 ---- Lib/test/test_cmd_line_script.py | 9 +--- Lib/test/test_defaultdict.py | 2 +- Lib/test/test_descr.py | 4 +- Lib/test/test_descrtut.py | 31 +++++++------- Lib/test/test_doctest.py | 2 +- Lib/test/test_doctest3.txt | 2 +- Lib/test/test_functools.py | 33 ++++++++++----- Lib/test/test_generators.py | 37 ++++++++--------- Lib/test/test_genexps.py | 5 +- Lib/test/test_metaclass.py | 9 +-- Lib/test/test_pprint.py | 9 ++- Lib/test/test_reprlib.py | 6 +- Lib/test/test_statistics.py | 2 +- Lib/test/test_wsgiref.py | 6 +- Lib/test/test_xmlrpc.py | 4 +- Misc/NEWS | 2 - Objects/typeobject.c | 6 +- 20 files changed, 92 insertions(+), 105 deletions(-) diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -320,14 +320,14 @@ cls, msg = self.get_except(Person, b"Someone", (1, 2)) self.assertEqual(cls, RuntimeError) - self.assertRegex(msg, - r"\(Phone\) : " - r"expected bytes, int found") + self.assertEqual(msg, + "(Phone) : " + "expected bytes, int found") cls, msg = self.get_except(Person, b"Someone", (b"a", b"b", b"c")) self.assertEqual(cls, RuntimeError) - self.assertRegex(msg, - r"\(Phone\) : too many initializers") + self.assertEqual(msg, + "(Phone) : too many initializers") def test_huge_field_name(self): # issue12881: segfault with large structure field names diff --git a/Lib/statistics.py b/Lib/statistics.py --- a/Lib/statistics.py +++ b/Lib/statistics.py @@ -131,23 +131,23 @@ -------- >>> _sum([3, 2.25, 4.5, -0.5, 1.0], 0.75) - (, Fraction(11, 1), 5) + (, Fraction(11, 1), 5) Some sources of round-off error will be avoided: >>> _sum([1e50, 1, -1e50] * 1000) # Built-in sum returns zero. - (, Fraction(1000, 1), 3000) + (, Fraction(1000, 1), 3000) Fractions and Decimals are also supported: >>> from fractions import Fraction as F >>> _sum([F(2, 3), F(7, 5), F(1, 4), F(5, 6)]) - (, Fraction(63, 20), 4) + (, Fraction(63, 20), 4) >>> from decimal import Decimal as D >>> data = [D("0.1375"), D("0.2108"), D("0.3061"), D("0.0419")] >>> _sum(data) - (, Fraction(6963, 10000), 4) + (, Fraction(6963, 10000), 4) Mixed types are currently treated as an error, except that int is allowed. diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py --- a/Lib/test/test_class.py +++ b/Lib/test/test_class.py @@ -568,15 +568,5 @@ a = A(hash(A.f)^(-1)) hash(a.f) - def test_class_repr(self): - # We should get the address of the object - class A: - pass - - result = repr(A) - self.assertRegex(result, - ".A'" - " at 0x.+>") - if __name__ == '__main__': unittest.main() diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py --- a/Lib/test/test_cmd_line_script.py +++ b/Lib/test/test_cmd_line_script.py @@ -127,10 +127,7 @@ print(printed_package) print(printed_argv0) print(printed_cwd) - expected = printed_loader.encode('utf-8') - idx = expected.find(b"at 0x") - expected = expected[:idx] - self.assertIn(expected, data) + self.assertIn(printed_loader.encode('utf-8'), data) self.assertIn(printed_file.encode('utf-8'), data) self.assertIn(printed_package.encode('utf-8'), data) self.assertIn(printed_argv0.encode('utf-8'), data) @@ -161,8 +158,6 @@ def test_dash_c_loader(self): rc, out, err = assert_python_ok("-c", "print(__loader__)") expected = repr(importlib.machinery.BuiltinImporter).encode("utf-8") - idx = expected.find(b"at 0x") - expected = expected[:idx] self.assertIn(expected, out) def test_stdin_loader(self): @@ -176,8 +171,6 @@ finally: out = kill_python(p) expected = repr(importlib.machinery.BuiltinImporter).encode("utf-8") - idx = expected.find(b"at 0x") - expected = expected[:idx] self.assertIn(expected, out) @contextlib.contextmanager diff --git a/Lib/test/test_defaultdict.py b/Lib/test/test_defaultdict.py --- a/Lib/test/test_defaultdict.py +++ b/Lib/test/test_defaultdict.py @@ -65,7 +65,7 @@ d2 = defaultdict(int) self.assertEqual(d2.default_factory, int) d2[12] = 42 - self.assertRegex(repr(d2), r"defaultdict\(, {12: 42}\)") + self.assertEqual(repr(d2), "defaultdict(, {12: 42})") def foo(): return 43 d3 = defaultdict(foo) self.assertTrue(d3.default_factory is foo) diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -4544,9 +4544,9 @@ pass foo = Foo() self.assertRegex(repr(foo.method), # access via instance - r">") + r">") self.assertRegex(repr(Foo.method), # access via the class - r">") + r">") class MyCallable: diff --git a/Lib/test/test_descrtut.py b/Lib/test/test_descrtut.py --- a/Lib/test/test_descrtut.py +++ b/Lib/test/test_descrtut.py @@ -37,16 +37,16 @@ Here's the new type at work: >>> print(defaultdict) # show our type - + >>> print(type(defaultdict)) # its metatype - + >>> a = defaultdict(default=0.0) # create an instance >>> print(a) # show the instance {} >>> print(type(a)) # show its type - + >>> print(a.__class__) # show its class - + >>> print(type(a) is a.__class__) # its type is its class True >>> a[1] = 3.25 # modify the instance @@ -149,11 +149,11 @@ For instance of built-in types, x.__class__ is now the same as type(x): >>> type([]) - + >>> [].__class__ - + >>> list - + >>> isinstance([], list) True >>> isinstance([], dict) @@ -258,19 +258,19 @@ ... print("classmethod", cls, y) >>> C.foo(1) - classmethod 1 + classmethod 1 >>> c = C() >>> c.foo(1) - classmethod 1 + classmethod 1 >>> class D(C): ... pass >>> D.foo(1) - classmethod 1 + classmethod 1 >>> d = D() >>> d.foo(1) - classmethod 1 + classmethod 1 This prints "classmethod __main__.D 1" both times; in other words, the class passed as the first argument of foo() is the class involved in the @@ -286,11 +286,11 @@ >>> E.foo(1) E.foo() called - classmethod 1 + classmethod 1 >>> e = E() >>> e.foo(1) E.foo() called - classmethod 1 + classmethod 1 In this example, the call to C.foo() from E.foo() will see class C as its first argument, not class E. This is to be expected, since the call @@ -350,7 +350,7 @@ >>> del property # unmask the builtin >>> property - + >>> class C(object): ... def __init__(self): @@ -478,8 +478,7 @@ # business is used the name can change depending on how the test is # invoked. from test import support, test_descrtut - import doctest - support.run_doctest(test_descrtut, verbose, optionflags=doctest.ELLIPSIS) + support.run_doctest(test_descrtut, verbose) # This part isn't needed for regrtest, but for running the test directly. if __name__ == "__main__": diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -2338,7 +2338,7 @@ `__file__` global, which is set to the name of the file containing the tests: - >>> suite = doctest.DocFileSuite('test_doctest3.txt', optionflags=doctest.ELLIPSIS) + >>> suite = doctest.DocFileSuite('test_doctest3.txt') >>> suite.run(unittest.TestResult()) diff --git a/Lib/test/test_doctest3.txt b/Lib/test/test_doctest3.txt --- a/Lib/test/test_doctest3.txt +++ b/Lib/test/test_doctest3.txt @@ -2,4 +2,4 @@ Here we check that `__file__` is provided: >>> type(__file__) - + diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -1758,10 +1758,13 @@ c.Container.register(P) with self.assertRaises(RuntimeError) as re_one: g(p) - self.assertIn("Ambiguous dispatch:", str(re_one.exception)) - self.assertIn(" " + "or "), + ("Ambiguous dispatch: " + "or ")), + ) class Q(c.Sized): def __len__(self): return 0 @@ -1787,10 +1790,13 @@ # perspective. with self.assertRaises(RuntimeError) as re_two: h(c.defaultdict(lambda: 0)) - self.assertIn("Ambiguous dispatch:", str(re_two.exception)) - self.assertIn(" " + "or "), + ("Ambiguous dispatch: " + "or ")), + ) class R(c.defaultdict): pass c.MutableSequence.register(R) @@ -1824,10 +1830,13 @@ # There is no preference for registered versus inferred ABCs. with self.assertRaises(RuntimeError) as re_three: h(u) - self.assertIn("Ambiguous dispatch:", str(re_three.exception)) - self.assertIn(" " + "or "), + ("Ambiguous dispatch: " + "or ")), + ) class V(c.Sized, S): def __len__(self): return 0 diff --git a/Lib/test/test_generators.py b/Lib/test/test_generators.py --- a/Lib/test/test_generators.py +++ b/Lib/test/test_generators.py @@ -671,10 +671,10 @@ ... yield 1 ... >>> type(g) - + >>> i = g() >>> type(i) - + >>> [s for s in dir(i) if not s.startswith('_')] ['close', 'gi_code', 'gi_frame', 'gi_running', 'gi_yieldfrom', 'send', 'throw'] >>> from test.support import HAVE_DOCSTRINGS @@ -691,7 +691,7 @@ >>> i.gi_running 0 >>> type(i.gi_frame) - + >>> i.gi_running = 42 Traceback (most recent call last): ... @@ -1066,27 +1066,27 @@ >>> def f(): ... yield >>> type(f()) - + >>> def f(): ... if 0: ... yield >>> type(f()) - + >>> def f(): ... if 0: ... yield 1 >>> type(f()) - + >>> def f(): ... if "": ... yield None >>> type(f()) - + >>> def f(): ... return @@ -1110,7 +1110,7 @@ ... x = 1 ... return >>> type(f()) - + >>> def f(): ... if 0: @@ -1118,7 +1118,7 @@ ... yield 1 ... >>> type(f()) - + >>> def f(): ... if 0: @@ -1128,7 +1128,7 @@ ... def f(self): ... yield 2 >>> type(f()) - + >>> def f(): ... if 0: @@ -1136,7 +1136,7 @@ ... if 0: ... yield 2 >>> type(f()) - + This one caused a crash (see SF bug 567538): @@ -1791,7 +1791,7 @@ >>> def f(): list(i for i in [(yield 26)]) >>> type(f()) - + A yield expression with augmented assignment. @@ -2047,25 +2047,25 @@ >>> def f(): x += yield >>> type(f()) - + >>> def f(): x = yield >>> type(f()) - + >>> def f(): lambda x=(yield): 1 >>> type(f()) - + >>> def f(): x=(i for i in (yield) if (yield)) >>> type(f()) - + >>> def f(d): d[(yield "a")] = d[(yield "b")] = 27 >>> data = [1,2] >>> g = f(data) >>> type(g) - + >>> g.send(None) 'a' >>> data @@ -2174,9 +2174,8 @@ # so this works as expected in both ways of running regrtest. def test_main(verbose=None): from test import support, test_generators - import doctest support.run_unittest(__name__) - support.run_doctest(test_generators, verbose, optionflags=doctest.ELLIPSIS) + support.run_doctest(test_generators, verbose) # This part isn't needed for regrtest, but for running the test directly. if __name__ == "__main__": diff --git a/Lib/test/test_genexps.py b/Lib/test/test_genexps.py --- a/Lib/test/test_genexps.py +++ b/Lib/test/test_genexps.py @@ -27,7 +27,7 @@ >>> g = (i*i for i in range(4)) >>> type(g) - + >>> list(g) [0, 1, 4, 9] @@ -269,8 +269,7 @@ def test_main(verbose=None): from test import support from test import test_genexps - import doctest - support.run_doctest(test_genexps, verbose, optionflags=doctest.ELLIPSIS) + support.run_doctest(test_genexps, verbose) # verify reference counting if verbose and hasattr(sys, "gettotalrefcount"): diff --git a/Lib/test/test_metaclass.py b/Lib/test/test_metaclass.py --- a/Lib/test/test_metaclass.py +++ b/Lib/test/test_metaclass.py @@ -78,7 +78,7 @@ >>> class C(object, metaclass=M, other="haha"): ... pass ... - Prepare called: ('C', (,)) {'other': 'haha'} + Prepare called: ('C', (,)) {'other': 'haha'} New called: {'other': 'haha'} >>> C.__class__ is M True @@ -104,7 +104,7 @@ >>> kwds = {'metaclass': M, 'other': 'haha'} >>> class C(*bases, **kwds): pass ... - Prepare called: ('C', (,)) {'other': 'haha'} + Prepare called: ('C', (,)) {'other': 'haha'} New called: {'other': 'haha'} >>> C.__class__ is M True @@ -114,7 +114,7 @@ >>> kwds = {'other': 'haha'} >>> class C(B, metaclass=M, *bases, **kwds): pass ... - Prepare called: ('C', (, )) {'other': 'haha'} + Prepare called: ('C', (, )) {'other': 'haha'} New called: {'other': 'haha'} >>> C.__class__ is M True @@ -259,8 +259,7 @@ def test_main(verbose=False): from test import support from test import test_metaclass - import doctest - support.run_doctest(test_metaclass, verbose, optionflags=doctest.ELLIPSIS) + support.run_doctest(test_metaclass, verbose) if __name__ == "__main__": test_main(verbose=True) diff --git a/Lib/test/test_pprint.py b/Lib/test/test_pprint.py --- a/Lib/test/test_pprint.py +++ b/Lib/test/test_pprint.py @@ -848,11 +848,12 @@ def test_default_dict(self): d = collections.defaultdict(int) - self.assertRegex(pprint.pformat(d, width=1), r"defaultdict\(, {}\)") + self.assertEqual(pprint.pformat(d, width=1), "defaultdict(, {})") words = 'the quick brown fox jumped over a lazy dog'.split() d = collections.defaultdict(int, zip(words, itertools.count())) - self.assertRegex(pprint.pformat(d), -r"""defaultdict\(, + self.assertEqual(pprint.pformat(d), +"""\ +defaultdict(, {'a': 6, 'brown': 2, 'dog': 8, @@ -861,7 +862,7 @@ 'lazy': 7, 'over': 5, 'quick': 1, - 'the': 0}\)""") + 'the': 0})""") def test_counter(self): d = collections.Counter() diff --git a/Lib/test/test_reprlib.py b/Lib/test/test_reprlib.py --- a/Lib/test/test_reprlib.py +++ b/Lib/test/test_reprlib.py @@ -292,8 +292,8 @@ ''') importlib.invalidate_caches() from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import foo - self.assertRegex(repr(foo.foo), - r"" % foo.__name__) + eq(repr(foo.foo), + "" % foo.__name__) @unittest.skip('need a suitable object') def test_object(self): @@ -310,7 +310,7 @@ importlib.invalidate_caches() from areallylongpackageandmodulenametotestreprtruncation.areallylongpackageandmodulenametotestreprtruncation import bar # Module name may be prefixed with "test.", depending on how run. - self.assertRegex(repr(bar.bar), r"" % bar.__name__) + self.assertEqual(repr(bar.bar), "" % bar.__name__) def test_instance(self): self._check_path_limitations('baz') diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py --- a/Lib/test/test_statistics.py +++ b/Lib/test/test_statistics.py @@ -659,7 +659,7 @@ @unittest.skipIf(sys.flags.optimize >= 2, "Docstrings are omitted with -OO and above") def test_doc_tests(self): - failed, tried = doctest.testmod(statistics, optionflags=doctest.ELLIPSIS) + failed, tried = doctest.testmod(statistics) self.assertGreater(tried, 0) self.assertEqual(failed, 0) diff --git a/Lib/test/test_wsgiref.py b/Lib/test/test_wsgiref.py --- a/Lib/test/test_wsgiref.py +++ b/Lib/test/test_wsgiref.py @@ -165,10 +165,10 @@ self.assertTrue(out.endswith( b"A server error occurred. Please contact the administrator." )) - self.assertRegex( + self.assertEqual( err.splitlines()[-2], - r"AssertionError: Headers \(\('Content-Type', 'text/plain'\)\) must" - r" be of type list: " + "AssertionError: Headers (('Content-Type', 'text/plain')) must" + " be of type list: " ) def test_status_validation_errors(self): diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -775,8 +775,8 @@ # 'method "this_is_not_exists" is not supported'>}] self.assertEqual(result.results[0]['faultCode'], 1) - self.assertRegex(result.results[0]['faultString'], - ':method "this_is_not_exists" ' + self.assertEqual(result.results[0]['faultString'], + ':method "this_is_not_exists" ' 'is not supported') except (xmlrpclib.ProtocolError, OSError) as e: # ignore failures due to non-blocking socket 'unavailable' errors diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -386,8 +386,6 @@ - Issue #21271: New keyword only parameters in reset_mock call. -- Issue #25548: Showing memory address of class objects in repl. - IDLE ---- diff --git a/Objects/typeobject.c b/Objects/typeobject.c --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -859,9 +859,9 @@ } if (mod != NULL && _PyUnicode_CompareWithId(mod, &PyId_builtins)) - rtn = PyUnicode_FromFormat("", mod, name, type); - else - rtn = PyUnicode_FromFormat("", type->tp_name, type); + rtn = PyUnicode_FromFormat("", mod, name); + else + rtn = PyUnicode_FromFormat("", type->tp_name); Py_XDECREF(mod); Py_DECREF(name); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 14 00:32:53 2016 From: python-checkins at python.org (berker.peksag) Date: Thu, 14 Jul 2016 04:32:53 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDU1?= =?utf-8?q?=3A_Improve_examples_in_tkinter_documentation?= Message-ID: <20160714043253.14378.20158.3F3A005A@psf.io> https://hg.python.org/cpython/rev/453a88a41a58 changeset: 102346:453a88a41a58 branch: 3.5 parent: 102343:0fbf3b88eed8 user: Berker Peksag date: Thu Jul 14 07:32:43 2016 +0300 summary: Issue #27455: Improve examples in tkinter documentation Patch by John Hagen. files: Doc/library/tkinter.rst | 26 +++++++++++++------------- 1 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst --- a/Doc/library/tkinter.rst +++ b/Doc/library/tkinter.rst @@ -199,19 +199,19 @@ class Application(tk.Frame): def __init__(self, master=None): - tk.Frame.__init__(self, master) + super().__init__(master) self.pack() - self.createWidgets() + self.create_widgets() - def createWidgets(self): + def create_widgets(self): self.hi_there = tk.Button(self) self.hi_there["text"] = "Hello World\n(click me)" self.hi_there["command"] = self.say_hi self.hi_there.pack(side="top") - self.QUIT = tk.Button(self, text="QUIT", fg="red", + self.quit = tk.Button(self, text="QUIT", fg="red", command=root.destroy) - self.QUIT.pack(side="bottom") + self.quit.pack(side="bottom") def say_hi(self): print("hi there, everyone!") @@ -536,7 +536,7 @@ class App(Frame): def __init__(self, master=None): - Frame.__init__(self, master) + super().__init__(master) self.pack() self.entrythingy = Entry() @@ -581,13 +581,13 @@ Here are some examples of typical usage:: - from tkinter import * - class App(Frame): + import tkinter as tk + + class App(tk.Frame): def __init__(self, master=None): - Frame.__init__(self, master) + super().__init__(master) self.pack() - # create the application myapp = App() @@ -708,13 +708,13 @@ For example:: - def turnRed(self, event): + def turn_red(self, event): event.widget["activeforeground"] = "red" - self.button.bind("", self.turnRed) + self.button.bind("", self.turn_red) Notice how the widget field of the event is being accessed in the -:meth:`turnRed` callback. This field contains the widget that caught the X +``turn_red()`` callback. This field contains the widget that caught the X event. The following table lists the other event fields you can access, and how they are denoted in Tk, which can be useful when referring to the Tk man pages. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 14 00:32:53 2016 From: python-checkins at python.org (berker.peksag) Date: Thu, 14 Jul 2016 04:32:53 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327455=3A_Merge_from_3=2E5?= Message-ID: <20160714043253.66533.36682.29ADDCBA@psf.io> https://hg.python.org/cpython/rev/800c069e16a0 changeset: 102347:800c069e16a0 parent: 102345:4f11e6b72e8f parent: 102346:453a88a41a58 user: Berker Peksag date: Thu Jul 14 07:33:16 2016 +0300 summary: Issue #27455: Merge from 3.5 files: Doc/library/tkinter.rst | 26 +++++++++++++------------- 1 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Doc/library/tkinter.rst b/Doc/library/tkinter.rst --- a/Doc/library/tkinter.rst +++ b/Doc/library/tkinter.rst @@ -199,19 +199,19 @@ class Application(tk.Frame): def __init__(self, master=None): - tk.Frame.__init__(self, master) + super().__init__(master) self.pack() - self.createWidgets() + self.create_widgets() - def createWidgets(self): + def create_widgets(self): self.hi_there = tk.Button(self) self.hi_there["text"] = "Hello World\n(click me)" self.hi_there["command"] = self.say_hi self.hi_there.pack(side="top") - self.QUIT = tk.Button(self, text="QUIT", fg="red", + self.quit = tk.Button(self, text="QUIT", fg="red", command=root.destroy) - self.QUIT.pack(side="bottom") + self.quit.pack(side="bottom") def say_hi(self): print("hi there, everyone!") @@ -536,7 +536,7 @@ class App(Frame): def __init__(self, master=None): - Frame.__init__(self, master) + super().__init__(master) self.pack() self.entrythingy = Entry() @@ -581,13 +581,13 @@ Here are some examples of typical usage:: - from tkinter import * - class App(Frame): + import tkinter as tk + + class App(tk.Frame): def __init__(self, master=None): - Frame.__init__(self, master) + super().__init__(master) self.pack() - # create the application myapp = App() @@ -708,13 +708,13 @@ For example:: - def turnRed(self, event): + def turn_red(self, event): event.widget["activeforeground"] = "red" - self.button.bind("", self.turnRed) + self.button.bind("", self.turn_red) Notice how the widget field of the event is being accessed in the -:meth:`turnRed` callback. This field contains the widget that caught the X +``turn_red()`` callback. This field contains the widget that caught the X event. The following table lists the other event fields you can access, and how they are denoted in Tk, which can be useful when referring to the Tk man pages. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 14 00:45:00 2016 From: python-checkins at python.org (berker.peksag) Date: Thu, 14 Jul 2016 04:45:00 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3MTgw?= =?utf-8?q?=3A_Clarify_Path=2Erename=28=29_behavior_on_Unix_systems?= Message-ID: <20160714044500.19724.5777.30EF9A24@psf.io> https://hg.python.org/cpython/rev/270fd4493195 changeset: 102348:270fd4493195 branch: 3.5 parent: 102346:453a88a41a58 user: Berker Peksag date: Thu Jul 14 07:44:59 2016 +0300 summary: Issue #27180: Clarify Path.rename() behavior on Unix systems Patch by Evelyn Mitchell. files: Doc/library/pathlib.rst | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -891,8 +891,9 @@ .. method:: Path.rename(target) - Rename this file or directory to the given *target*. *target* can be - either a string or another path object:: + Rename this file or directory to the given *target*. On Unix, if + *target* exists and is a file, it will be replaced silently if the user + has permission. *target* can be either a string or another path object:: >>> p = Path('foo') >>> p.open('w').write('some text') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 14 00:45:01 2016 From: python-checkins at python.org (berker.peksag) Date: Thu, 14 Jul 2016 04:45:01 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327180=3A_Merge_from_3=2E5?= Message-ID: <20160714044500.124370.63141.ED88DB6D@psf.io> https://hg.python.org/cpython/rev/89821243621b changeset: 102349:89821243621b parent: 102347:800c069e16a0 parent: 102348:270fd4493195 user: Berker Peksag date: Thu Jul 14 07:45:24 2016 +0300 summary: Issue #27180: Merge from 3.5 files: Doc/library/pathlib.rst | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Doc/library/pathlib.rst b/Doc/library/pathlib.rst --- a/Doc/library/pathlib.rst +++ b/Doc/library/pathlib.rst @@ -900,8 +900,9 @@ .. method:: Path.rename(target) - Rename this file or directory to the given *target*. *target* can be - either a string or another path object:: + Rename this file or directory to the given *target*. On Unix, if + *target* exists and is a file, it will be replaced silently if the user + has permission. *target* can be either a string or another path object:: >>> p = Path('foo') >>> p.open('w').write('some text') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 14 01:05:53 2016 From: python-checkins at python.org (berker.peksag) Date: Thu, 14 Jul 2016 05:05:53 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Issue_=2326446=3A_Mention?= =?utf-8?q?_PSF_CoC_in_core_developer_responsibilities?= Message-ID: <20160714045245.28275.29566.1981F6CA@psf.io> https://hg.python.org/devguide/rev/6b4b73ebb054 changeset: 816:6b4b73ebb054 user: Berker Peksag date: Thu Jul 14 07:53:11 2016 +0300 summary: Issue #26446: Mention PSF CoC in core developer responsibilities Patch by Evelyn Mitchell. files: coredev.rst | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/coredev.rst b/coredev.rst --- a/coredev.rst +++ b/coredev.rst @@ -131,7 +131,8 @@ are now a member of the Python project and thus represent the project and your fellow core developers whenever you discuss Python with anyone. We have a reputation for being a very nice group of people and we would like to keep it -that way. +that way. Core developers responsibilities include following the `PSF Code of +Conduct`_. Second, please be prompt in responding to questions. Many contributors to Python are volunteers so what little free time they can dedicate to Python should be @@ -161,3 +162,6 @@ And finally, enjoy yourself! Contributing to open source software should be fun (overall). If you find yourself no longer enjoying the work then either take a break or figure out what you need to do to make it enjoyable again. + + +.. _PSF Code of Conduct: https://www.python.org/psf/codeofconduct/ -- Repository URL: https://hg.python.org/devguide From lp_benchmark_robot at intel.com Thu Jul 14 08:28:06 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Thu, 14 Jul 2016 13:28:06 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python Default 2016-07-14 Message-ID: <079cf889-d4d1-424d-b089-a9573fd46714@irsmsx103.ger.corp.intel.com> No new revisions. Here are the previous results: Results for project Python default, build date 2016-07-14 02:02:56 +0000 commit: 2f0716009132 previous commit: 2a34cef7681b revision date: 2016-07-12 22:24:25 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.24% -1.09% 11.13% 15.32% :-| pybench 0.09% 0.04% 1.49% 8.29% :-( regex_v8 2.65% -0.06% -2.11% 3.25% :-| nbody 0.09% 0.09% -0.54% 11.27% :-( json_dump_v2 0.26% -0.32% -2.05% 10.46% :-| normal_startup 0.77% -0.24% 0.20% 5.88% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-default-2016-07-14/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Thu Jul 14 08:28:33 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Thu, 14 Jul 2016 13:28:33 +0100 Subject: [Python-checkins] UGLY Benchmark Results for Python 2.7 2016-07-14 Message-ID: <42132839-1d8d-49f7-acfb-7a53736c1d28@irsmsx103.ger.corp.intel.com> No new revisions. Here are the previous results: Results for project Python 2.7, build date 2016-07-14 02:04:55 +0000 commit: 130d97217e36 previous commit: f7f0f1aecbfa revision date: 2016-07-12 12:46:57 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.18% 1.16% 5.80% 3.55% :-) pybench 0.20% 0.02% 5.96% 3.97% :-( regex_v8 0.64% 0.22% -2.32% 11.03% :-) nbody 0.11% -0.92% 7.78% 3.08% :-| json_dump_v2 0.29% -1.71% 1.44% 11.74% :-( normal_startup 1.90% 0.33% -5.64% 1.76% :-) ssbench 0.17% 0.18% 2.76% 1.88% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/ugly-benchmark-results-for-python-2-7-2016-07-14/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Fri Jul 15 01:02:18 2016 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 15 Jul 2016 05:02:18 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_make_too_many_?= =?utf-8?q?nested_blocks_be_a_SyntaxError_instead_of_a_SystemError_=28clos?= =?utf-8?q?es?= Message-ID: <20160715050218.94278.16725.F10BFC3A@psf.io> https://hg.python.org/cpython/rev/e6e7c8368c70 changeset: 102350:e6e7c8368c70 branch: 3.5 parent: 102348:270fd4493195 user: Benjamin Peterson date: Thu Jul 14 22:00:03 2016 -0700 summary: make too many nested blocks be a SyntaxError instead of a SystemError (closes #27514) Patch by Ammar Askar. files: Lib/test/test_syntax.py | 6 ++++-- Misc/NEWS | 3 +++ Python/compile.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -342,7 +342,9 @@ ... SyntaxError: 'break' outside loop -This should probably raise a better error than a SystemError (or none at all). +This raises a SyntaxError, it used to raise a SystemError. +Context for this change can be found on issue #27514 + In 2.5 there was a missing exception and an assert was triggered in a debug build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514 @@ -370,7 +372,7 @@ ... break Traceback (most recent call last): ... - SystemError: too many statically nested blocks + SyntaxError: too many statically nested blocks Misuse of the nonlocal statement can lead to a few unique syntax errors. diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27514: Make having too many statically nested blocks a SyntaxError + instead of SystemError. + - Issue #27473: Fixed possible integer overflow in bytes and bytearray concatenations. Patch by Xiang Zhang. diff --git a/Python/compile.c b/Python/compile.c --- a/Python/compile.c +++ b/Python/compile.c @@ -3980,7 +3980,7 @@ { struct fblockinfo *f; if (c->u->u_nfblocks >= CO_MAXBLOCKS) { - PyErr_SetString(PyExc_SystemError, + PyErr_SetString(PyExc_SyntaxError, "too many statically nested blocks"); return 0; } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 01:02:18 2016 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 15 Jul 2016 05:02:18 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_make_too_many_?= =?utf-8?q?nested_blocks_be_a_SyntaxError_instead_of_a_SystemError_=28clos?= =?utf-8?q?es?= Message-ID: <20160715050218.19806.23482.794C22FB@psf.io> https://hg.python.org/cpython/rev/345ec7455b75 changeset: 102351:345ec7455b75 branch: 2.7 parent: 102342:2d6e6600c210 user: Benjamin Peterson date: Thu Jul 14 22:00:03 2016 -0700 summary: make too many nested blocks be a SyntaxError instead of a SystemError (closes #27514) Patch by Ammar Askar. files: Lib/test/test_syntax.py | 6 ++++-- Misc/NEWS | 3 +++ Python/compile.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -371,7 +371,9 @@ File "", line 3 SyntaxError: 'break' outside loop -This should probably raise a better error than a SystemError (or none at all). +This raises a SyntaxError, it used to raise a SystemError. +Context for this change can be found on issue #27514 + In 2.5 there was a missing exception and an assert was triggered in a debug build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514 @@ -399,7 +401,7 @@ ... break Traceback (most recent call last): ... - SystemError: too many statically nested blocks + SyntaxError: too many statically nested blocks This tests assignment-context; there was a bug in Python 2.5 where compiling a complex 'if' (one with 'elif') would fail to notice an invalid suite, diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -17,6 +17,9 @@ unicode paths with embedded null character on Windows instead of silently truncating them. +- Issue #27514: Make having too many statically nested blocks a SyntaxError + instead of SystemError. + Library ------- diff --git a/Python/compile.c b/Python/compile.c --- a/Python/compile.c +++ b/Python/compile.c @@ -3147,7 +3147,7 @@ { struct fblockinfo *f; if (c->u->u_nfblocks >= CO_MAXBLOCKS) { - PyErr_SetString(PyExc_SystemError, + PyErr_SetString(PyExc_SyntaxError, "too many statically nested blocks"); return 0; } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 01:02:18 2016 From: python-checkins at python.org (benjamin.peterson) Date: Fri, 15 Jul 2016 05:02:18 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogbWVyZ2UgMy41ICgjMjc1MTQp?= Message-ID: <20160715050218.129389.32313.DA076B62@psf.io> https://hg.python.org/cpython/rev/d1da87d8b29c changeset: 102352:d1da87d8b29c parent: 102349:89821243621b parent: 102350:e6e7c8368c70 user: Benjamin Peterson date: Thu Jul 14 22:02:09 2016 -0700 summary: merge 3.5 (#27514) files: Lib/test/test_syntax.py | 6 ++++-- Misc/NEWS | 3 +++ Python/compile.c | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_syntax.py b/Lib/test/test_syntax.py --- a/Lib/test/test_syntax.py +++ b/Lib/test/test_syntax.py @@ -334,7 +334,9 @@ ... SyntaxError: 'break' outside loop -This should probably raise a better error than a SystemError (or none at all). +This raises a SyntaxError, it used to raise a SystemError. +Context for this change can be found on issue #27514 + In 2.5 there was a missing exception and an assert was triggered in a debug build. The number of blocks must be greater than CO_MAXBLOCKS. SF #1565514 @@ -362,7 +364,7 @@ ... break Traceback (most recent call last): ... - SystemError: too many statically nested blocks + SyntaxError: too many statically nested blocks Misuse of the nonlocal statement can lead to a few unique syntax errors. diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27514: Make having too many statically nested blocks a SyntaxError + instead of SystemError. + Library ------- diff --git a/Python/compile.c b/Python/compile.c --- a/Python/compile.c +++ b/Python/compile.c @@ -4249,7 +4249,7 @@ { struct fblockinfo *f; if (c->u->u_nfblocks >= CO_MAXBLOCKS) { - PyErr_SetString(PyExc_SystemError, + PyErr_SetString(PyExc_SyntaxError, "too many statically nested blocks"); return 0; } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 02:43:20 2016 From: python-checkins at python.org (terry.reedy) Date: Fri, 15 Jul 2016 06:43:20 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2325507=3A_Move_4_o?= =?utf-8?q?bjects_from_pyshell_to_run_and_switch_inports=2E?= Message-ID: <20160715064315.129364.83458.A964B563@psf.io> https://hg.python.org/cpython/rev/93d325c64104 changeset: 102353:93d325c64104 user: Terry Jan Reedy date: Fri Jul 15 02:43:03 2016 -0400 summary: Issue #25507: Move 4 objects from pyshell to run and switch inports. This removes one problem inport and reduces len(sys.modules) by 37. files: Lib/idlelib/pyshell.py | 101 +-------------------- Lib/idlelib/run.py | 121 +++++++++++++++++++++++- Lib/idlelib/stackviewer.py | 2 +- 3 files changed, 114 insertions(+), 110 deletions(-) diff --git a/Lib/idlelib/pyshell.py b/Lib/idlelib/pyshell.py --- a/Lib/idlelib/pyshell.py +++ b/Lib/idlelib/pyshell.py @@ -25,7 +25,6 @@ import threading import time import tokenize -import io import linecache from code import InteractiveInterpreter @@ -37,6 +36,7 @@ from idlelib.undo import UndoDelegator from idlelib.outwin import OutputWindow from idlelib.config import idleConf +from idlelib.run import idle_formatwarning, PseudoInputFile, PseudoOutputFile from idlelib import rpc from idlelib import debugger from idlelib import debugger_r @@ -52,19 +52,6 @@ warning_stream = sys.__stderr__ # None, at least on Windows, if no console. import warnings -def idle_formatwarning(message, category, filename, lineno, line=None): - """Format warnings the IDLE way.""" - - s = "\nWarning (from warnings module):\n" - s += ' File \"%s\", line %s\n' % (filename, lineno) - if line is None: - line = linecache.getline(filename, lineno) - line = line.strip() - if line: - s += " %s\n" % line - s += "%s: %s\n" % (category.__name__, message) - return s - def idle_showwarning( message, category, filename, lineno, file=None, line=None): """Show Idle-format warning (after replacing warnings.showwarning). @@ -1316,92 +1303,6 @@ return 'disabled' return super().rmenu_check_paste() -class PseudoFile(io.TextIOBase): - - def __init__(self, shell, tags, encoding=None): - self.shell = shell - self.tags = tags - self._encoding = encoding - - @property - def encoding(self): - return self._encoding - - @property - def name(self): - return '<%s>' % self.tags - - def isatty(self): - return True - - -class PseudoOutputFile(PseudoFile): - - def writable(self): - return True - - def write(self, s): - if self.closed: - raise ValueError("write to closed file") - if type(s) is not str: - if not isinstance(s, str): - raise TypeError('must be str, not ' + type(s).__name__) - # See issue #19481 - s = str.__str__(s) - return self.shell.write(s, self.tags) - - -class PseudoInputFile(PseudoFile): - - def __init__(self, shell, tags, encoding=None): - PseudoFile.__init__(self, shell, tags, encoding) - self._line_buffer = '' - - def readable(self): - return True - - def read(self, size=-1): - if self.closed: - raise ValueError("read from closed file") - if size is None: - size = -1 - elif not isinstance(size, int): - raise TypeError('must be int, not ' + type(size).__name__) - result = self._line_buffer - self._line_buffer = '' - if size < 0: - while True: - line = self.shell.readline() - if not line: break - result += line - else: - while len(result) < size: - line = self.shell.readline() - if not line: break - result += line - self._line_buffer = result[size:] - result = result[:size] - return result - - def readline(self, size=-1): - if self.closed: - raise ValueError("read from closed file") - if size is None: - size = -1 - elif not isinstance(size, int): - raise TypeError('must be int, not ' + type(size).__name__) - line = self._line_buffer or self.shell.readline() - if size < 0: - size = len(line) - eol = line.find('\n', 0, size) - if eol >= 0: - size = eol + 1 - self._line_buffer = line[size:] - return line[:size] - - def close(self): - self.shell.close() - def fix_x11_paste(root): "Make paste replace selection on x11. See issue #5124." diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -1,10 +1,11 @@ +import io +import linecache +import queue import sys -import linecache +import _thread as thread +import threading import time import traceback -import _thread as thread -import threading -import queue import tkinter from idlelib import calltips @@ -14,7 +15,6 @@ from idlelib import debugobj_r from idlelib import stackviewer from idlelib import rpc -from idlelib import pyshell from idlelib import iomenu import __main__ @@ -23,6 +23,19 @@ import warnings +def idle_formatwarning(message, category, filename, lineno, line=None): + """Format warnings the IDLE way.""" + + s = "\nWarning (from warnings module):\n" + s += ' File \"%s\", line %s\n' % (filename, lineno) + if line is None: + line = linecache.getline(filename, lineno) + line = line.strip() + if line: + s += " %s\n" % line + s += "%s: %s\n" % (category.__name__, message) + return s + def idle_showwarning_subproc( message, category, filename, lineno, file=None, line=None): """Show Idle-format warning after replacing warnings.showwarning. @@ -32,7 +45,7 @@ if file is None: file = sys.stderr try: - file.write(pyshell.idle_formatwarning( + file.write(idle_formatwarning( message, category, filename, lineno, line)) except IOError: pass # the file (probably stderr) is invalid - this warning gets lost. @@ -291,6 +304,96 @@ quitting = True thread.interrupt_main() + +# Pseudofiles for shell-remote communication (also used in pyshell) + +class PseudoFile(io.TextIOBase): + + def __init__(self, shell, tags, encoding=None): + self.shell = shell + self.tags = tags + self._encoding = encoding + + @property + def encoding(self): + return self._encoding + + @property + def name(self): + return '<%s>' % self.tags + + def isatty(self): + return True + + +class PseudoOutputFile(PseudoFile): + + def writable(self): + return True + + def write(self, s): + if self.closed: + raise ValueError("write to closed file") + if type(s) is not str: + if not isinstance(s, str): + raise TypeError('must be str, not ' + type(s).__name__) + # See issue #19481 + s = str.__str__(s) + return self.shell.write(s, self.tags) + + +class PseudoInputFile(PseudoFile): + + def __init__(self, shell, tags, encoding=None): + PseudoFile.__init__(self, shell, tags, encoding) + self._line_buffer = '' + + def readable(self): + return True + + def read(self, size=-1): + if self.closed: + raise ValueError("read from closed file") + if size is None: + size = -1 + elif not isinstance(size, int): + raise TypeError('must be int, not ' + type(size).__name__) + result = self._line_buffer + self._line_buffer = '' + if size < 0: + while True: + line = self.shell.readline() + if not line: break + result += line + else: + while len(result) < size: + line = self.shell.readline() + if not line: break + result += line + self._line_buffer = result[size:] + result = result[:size] + return result + + def readline(self, size=-1): + if self.closed: + raise ValueError("read from closed file") + if size is None: + size = -1 + elif not isinstance(size, int): + raise TypeError('must be int, not ' + type(size).__name__) + line = self._line_buffer or self.shell.readline() + if size < 0: + size = len(line) + eol = line.find('\n', 0, size) + if eol >= 0: + size = eol + 1 + self._line_buffer = line[size:] + return line[:size] + + def close(self): + self.shell.close() + + class MyHandler(rpc.RPCHandler): def handle(self): @@ -298,11 +401,11 @@ executive = Executive(self) self.register("exec", executive) self.console = self.get_remote_proxy("console") - sys.stdin = pyshell.PseudoInputFile(self.console, "stdin", + sys.stdin = PseudoInputFile(self.console, "stdin", iomenu.encoding) - sys.stdout = pyshell.PseudoOutputFile(self.console, "stdout", + sys.stdout = PseudoOutputFile(self.console, "stdout", iomenu.encoding) - sys.stderr = pyshell.PseudoOutputFile(self.console, "stderr", + sys.stderr = PseudoOutputFile(self.console, "stderr", iomenu.encoding) sys.displayhook = rpc.displayhook diff --git a/Lib/idlelib/stackviewer.py b/Lib/idlelib/stackviewer.py --- a/Lib/idlelib/stackviewer.py +++ b/Lib/idlelib/stackviewer.py @@ -6,7 +6,6 @@ from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas from idlelib.debugobj import ObjectTreeItem, make_objecttreeitem -from idlelib.pyshell import PyShellFileList def StackBrowser(root, flist=None, tb=None, top=None): if top is None: @@ -121,6 +120,7 @@ return sublist def _stack_viewer(parent): # htest # + from idlelib.pyshell import PyShellFileList top = tk.Toplevel(parent) top.title("Test StackViewer") x, y = map(int, parent.geometry().split('+')[1:]) -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Fri Jul 15 08:16:01 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 15 Jul 2016 13:16:01 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-15 Message-ID: <78cff896-c0ef-4ba4-823c-3f41cafc04c2@irsmsx104.ger.corp.intel.com> Results for project Python default, build date 2016-07-15 02:02:55 +0000 commit: 89821243621b previous commit: 2f0716009132 revision date: 2016-07-14 04:45:24 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.19% 0.28% 11.38% 15.49% :-| pybench 0.13% 0.03% 1.52% 7.40% :-( regex_v8 2.59% -0.52% -2.64% 3.84% :-| nbody 0.12% -0.02% -0.56% 9.21% :-( json_dump_v2 0.28% -0.77% -2.83% 14.18% :-| normal_startup 0.80% 0.05% 0.55% 5.40% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-15/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Fri Jul 15 08:16:36 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 15 Jul 2016 13:16:36 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-15 Message-ID: <71cc49ab-662b-4af5-a455-22cba8192106@irsmsx104.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-15 02:46:53 +0000 commit: 2d6e6600c210 previous commit: 130d97217e36 revision date: 2016-07-14 01:31:46 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.21% 0.28% 6.07% 4.28% :-) pybench 0.18% -0.07% 5.90% 4.96% :-( regex_v8 0.63% -0.04% -2.36% 10.78% :-) nbody 0.13% -0.08% 7.71% 4.81% :-| json_dump_v2 0.35% -0.43% 1.02% 12.57% :-( normal_startup 1.87% -0.21% -5.86% 2.10% :-) ssbench 0.31% -0.51% 2.24% 1.89% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-15/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Fri Jul 15 09:12:36 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 15 Jul 2016 13:12:36 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NTE4?= =?utf-8?q?=3A_Fix_typo_in_Grammar/Grammar?= Message-ID: <20160715131236.129290.96149.0C73A088@psf.io> https://hg.python.org/cpython/rev/db5a5679a9de changeset: 102354:db5a5679a9de branch: 3.5 parent: 102350:e6e7c8368c70 user: Berker Peksag date: Fri Jul 15 16:12:39 2016 +0300 summary: Issue #27518: Fix typo in Grammar/Grammar Patch by St?phane Wirtel. files: Grammar/Grammar | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Grammar/Grammar b/Grammar/Grammar --- a/Grammar/Grammar +++ b/Grammar/Grammar @@ -132,7 +132,7 @@ # to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, # we explicitly match '*' here, too, to give it proper precedence. # Illegal combinations and orderings are blocked in ast.c: -# multiple (test comp_for) arguements are blocked; keyword unpackings +# multiple (test comp_for) arguments are blocked; keyword unpackings # that precede iterable unpackings are blocked; etc. argument: ( test [comp_for] | test '=' test | -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 09:12:44 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 15 Jul 2016 13:12:44 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327518=3A_Merge_from_3=2E5?= Message-ID: <20160715131236.28098.56824.E2A03916@psf.io> https://hg.python.org/cpython/rev/bae0d7389e96 changeset: 102355:bae0d7389e96 parent: 102353:93d325c64104 parent: 102354:db5a5679a9de user: Berker Peksag date: Fri Jul 15 16:13:05 2016 +0300 summary: Issue #27518: Merge from 3.5 files: Grammar/Grammar | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Grammar/Grammar b/Grammar/Grammar --- a/Grammar/Grammar +++ b/Grammar/Grammar @@ -137,7 +137,7 @@ # to our LL(1) parser. Even though 'test' includes '*expr' in star_expr, # we explicitly match '*' here, too, to give it proper precedence. # Illegal combinations and orderings are blocked in ast.c: -# multiple (test comp_for) arguements are blocked; keyword unpackings +# multiple (test comp_for) arguments are blocked; keyword unpackings # that precede iterable unpackings are blocked; etc. argument: ( test [comp_for] | test '=' test | -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 09:18:25 2016 From: python-checkins at python.org (berker.peksag) Date: Fri, 15 Jul 2016 13:18:25 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Issue_=2327519=3A_Update_?= =?utf-8?q?Mercurial_links_to_mercurial-scm=2Eorg?= Message-ID: <20160715131825.129323.46967.6476E69D@psf.io> https://hg.python.org/devguide/rev/2edae149e8c5 changeset: 817:2edae149e8c5 user: Berker Peksag date: Fri Jul 15 16:18:56 2016 +0300 summary: Issue #27519: Update Mercurial links to mercurial-scm.org Patch by St?phane Wirtel. files: committing.rst | 12 ++++++------ faq.rst | 20 ++++++++++---------- gitdevs.rst | 8 ++++---- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/committing.rst b/committing.rst --- a/committing.rst +++ b/committing.rst @@ -275,9 +275,9 @@ .. _Mercurial: http://www.hg-scm.org/ -.. _mq: http://mercurial.selenic.com/wiki/MqExtension -.. _rebase: http://mercurial.selenic.com/wiki/RebaseExtension -.. _collapse: http://mercurial.selenic.com/wiki/CollapseExtension +.. _mq: https://www.mercurial-scm.org/wiki/MqExtension +.. _rebase: https://www.mercurial-scm.org/wiki/RebaseExtension +.. _collapse: https://www.mercurial-scm.org/wiki/CollapseExtension Minimal Configuration @@ -340,7 +340,7 @@ .. _configuration file: http://www.selenic.com/mercurial/hgrc.5.html#files .. _extended diff format: http://www.selenic.com/mercurial/hg.1.html#diffs -.. _eol extension: http://mercurial.selenic.com/wiki/EolExtension +.. _eol extension: https://www.mercurial-scm.org/wiki/EolExtension .. _hooks repository: https://hg.python.org/hooks @@ -428,7 +428,7 @@ `, etc., see the :ref:`FAQs for core developers `. -.. _share extension: http://mercurial.selenic.com/wiki/ShareExtension +.. _share extension: https://www.mercurial-scm.org/wiki/ShareExtension Active branches @@ -598,7 +598,7 @@ Bitbucket_ also maintain an `up to date clone`_ of the main ``cpython`` repository that can be used as the basis for a new clone or patch queue. -.. _named branch: http://mercurial.selenic.com/wiki/NamedBranches +.. _named branch: https://www.mercurial-scm.org/wiki/NamedBranches .. _Bitbucket: http://www.bitbucket.org .. _up to date clone: https://bitbucket.org/mirror/cpython/overview diff --git a/faq.rst b/faq.rst --- a/faq.rst +++ b/faq.rst @@ -141,7 +141,7 @@ '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Mercurial_'s (also known as ``hg``) official web site is at -http://mercurial.selenic.com/. A book on Mercurial published by +https://www.mercurial-scm.org/. A book on Mercurial published by `O'Reilly Media`_, `Mercurial: The Definitive Guide`_, is available for free online. Another resource is `Hg Init: a Mercurial tutorial`_ by Joel Spolsky. @@ -155,7 +155,7 @@ various commands, but doesn't provide any guidance on overall workflow. -.. _Mercurial: http://mercurial.selenic.com/ +.. _Mercurial: https://www.mercurial-scm.org/ .. _O'Reilly Media: http://www.oreilly.com/ .. _Mercurial\: The Definitive Guide: http://hgbook.red-bean.com/ .. _man page: http://www.selenic.com/mercurial/hg.1.html @@ -209,7 +209,7 @@ Host hg.python.org Compression yes -.. _download Mercurial: http://mercurial.selenic.com/downloads +.. _download Mercurial: https://www.mercurial-scm.org/downloads .. _OpenSSH: http://www.openssh.org/ @@ -353,7 +353,7 @@ The current branch in a working copy is "sticky": if you pull in some new changes, ``hg update`` will update to the head of the *current branch*. -.. _share extension: http://mercurial.selenic.com/wiki/ShareExtension +.. _share extension: https://www.mercurial-scm.org/wiki/ShareExtension .. _hg-paths: @@ -489,7 +489,7 @@ hg qdelete somework.patch .. _extended diff format: http://www.selenic.com/mercurial/hg.1.html#diffs -.. _mq: http://mercurial.selenic.com/wiki/MqExtension +.. _mq: https://www.mercurial-scm.org/wiki/MqExtension .. _merge-patch: @@ -660,7 +660,7 @@ Graphical tools, such as TortoiseHG, will display the changeset graph by default. -.. _graphlog: http://mercurial.selenic.com/wiki/GraphlogExtension +.. _graphlog: https://www.mercurial-scm.org/wiki/GraphlogExtension How do I update to a specific release tag? @@ -722,9 +722,9 @@ .. _man hgrc: http://www.selenic.com/mercurial/hgrc.5.html -.. _wiki: http://mercurial.selenic.com/wiki/ -.. _extensions: http://mercurial.selenic.com/wiki/UsingExtensions -.. _tips and tricks: http://mercurial.selenic.com/wiki/TipsAndTricks +.. _wiki: https://www.mercurial-scm.org/wiki/ +.. _extensions: https://www.mercurial-scm.org/wiki/UsingExtensions +.. _tips and tricks: https://www.mercurial-scm.org/wiki/TipsAndTricks .. _configuration options: http://www.selenic.com/mercurial/hgrc.5.html @@ -788,7 +788,7 @@ Mercurial will use KDiff3 automatically if it's installed and it can find it --- you don't need to change any settings. KDiff3 is also already included in the installer of TortoiseHg. For more information, see - http://mercurial.selenic.com/wiki/KDiff3. + https://www.mercurial-scm.org/wiki/KDiff3. .. _hg-null-merge: diff --git a/gitdevs.rst b/gitdevs.rst --- a/gitdevs.rst +++ b/gitdevs.rst @@ -101,7 +101,7 @@ rather longer lived concepts like "release branches" (rel-1, rel-2, etc) and rather not for short lived work of single developers. - -- http://mercurial.selenic.com/wiki/Branch#Named_branches + -- https://www.mercurial-scm.org/wiki/Branch#Named_branches If you routinely create short-lived branches for development work and then @@ -189,10 +189,10 @@ Note that deleting a bookmark does not mean that the releated changesets are also deleted. You must use the `strip extension`_ to do that. Bookmarks can be published to a remote repo to be shared, but must explicitly be pushed (see -http://mercurial.selenic.com/wiki/Bookmarks#Working_with_remote_repositories +https://www.mercurial-scm.org/wiki/Bookmarks#Working_with_remote_repositories for details). -.. _`strip extension`: http://mercurial.selenic.com/wiki/StripExtension +.. _`strip extension`: https://www.mercurial-scm.org/wiki/StripExtension @@ -506,4 +506,4 @@ hg update issueB -.. _NamedBranches: http://mercurial.selenic.com/wiki/NamedBranches +.. _NamedBranches: https://www.mercurial-scm.org/wiki/NamedBranches -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Fri Jul 15 13:41:56 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 17:41:56 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327512=3A_Don=27t_?= =?utf-8?q?segfault_when_os=2Efspath=28=29_calls_an_object_whose?= Message-ID: <20160715174155.129449.91327.49E28765@psf.io> https://hg.python.org/cpython/rev/35bf83ff0828 changeset: 102356:35bf83ff0828 user: Brett Cannon date: Fri Jul 15 10:41:49 2016 -0700 summary: Issue #27512: Don't segfault when os.fspath() calls an object whose __fspath__() raises an exception. Thanks to Xiang Zhang for the patch. files: Lib/test/test_os.py | 24 +++++++++++++++++------- Misc/NEWS | 3 +++ Modules/posixmodule.c | 4 ++++ 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -3122,7 +3122,10 @@ def __init__(self, path=''): self.path = path def __fspath__(self): - return self.path + if isinstance(self.path, BaseException): + raise self.path + else: + return self.path def test_return_bytes(self): for b in b'hello', b'goodbye', b'some/path/and/file': @@ -3145,18 +3148,25 @@ self.assertTrue(issubclass(self.PathLike, os.PathLike)) self.assertTrue(isinstance(self.PathLike(), os.PathLike)) - with self.assertRaises(TypeError): - self.fspath(self.PathLike(42)) - def test_garbage_in_exception_out(self): vapor = type('blah', (), {}) for o in int, type, os, vapor(): self.assertRaises(TypeError, self.fspath, o) def test_argument_required(self): - with self.assertRaises(TypeError): - self.fspath() - + self.assertRaises(TypeError, self.fspath) + + def test_bad_pathlike(self): + # __fspath__ returns a value other than str or bytes. + self.assertRaises(TypeError, self.fspath, self.PathLike(42)) + # __fspath__ attribute that is not callable. + c = type('foo', (), {}) + c.__fspath__ = 1 + self.assertRaises(TypeError, self.fspath, c()) + # __fspath__ raises an exception. + c.__fspath__ = lambda self: self.__not_exist + self.assertRaises(ZeroDivisionError, self.fspath, + self.PathLike(ZeroDivisionError)) # Only test if the C version is provided, otherwise TestPEP519 already tested # the pure Python implementation. diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -16,6 +16,9 @@ Library ------- +- Issue 27512: Fix a segfault when os.fspath() called a an __fspath__() method + that raised an exception. Patch by Xiang Zhang. + Tests ----- diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12319,6 +12319,10 @@ path_repr = PyObject_CallFunctionObjArgs(func, NULL); Py_DECREF(func); + if (NULL == path_repr) { + return NULL; + } + if (!(PyUnicode_Check(path_repr) || PyBytes_Check(path_repr))) { PyErr_Format(PyExc_TypeError, "expected %.200s.__fspath__() to return str or bytes, " -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 13:59:16 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 17:59:16 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_for_=2326844?= Message-ID: <20160715175916.94046.62543.B58A2982@psf.io> https://hg.python.org/cpython/rev/46da639f7114 changeset: 102358:46da639f7114 parent: 102356:35bf83ff0828 parent: 102357:22eaf6158e7b user: Brett Cannon date: Fri Jul 15 10:59:11 2016 -0700 summary: Merge for #26844 files: Lib/imp.py | 4 ++-- Misc/ACKS | 1 + Misc/NEWS | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Lib/imp.py b/Lib/imp.py --- a/Lib/imp.py +++ b/Lib/imp.py @@ -266,8 +266,8 @@ raise TypeError("'name' must be a str, not {}".format(type(name))) elif not isinstance(path, (type(None), list)): # Backwards-compatibility - raise RuntimeError("'list' must be None or a list, " - "not {}".format(type(name))) + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) if path is None: if is_builtin(name): diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -949,6 +949,7 @@ mattip Martin Matusiak Dieter Maurer +Lev Maximov Daniel May Madison May Lucas Maystre diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -51,6 +51,9 @@ Library ------- +- Issue #26844: Fix error message for imp.find_module() to refer to 'path' + instead of 'name'. Patch by Lev Maximov. + - Issue #23804: Fix SSL zero-length recv() calls to not block and not raise an error about unclean EOF. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 13:59:16 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 17:59:16 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI2ODQ0?= =?utf-8?q?=3A_Fix_imp=2Efind=5Fmodule=28=29_to_have_the_exception_related?= =?utf-8?q?_to?= Message-ID: <20160715175916.129109.33778.76155C81@psf.io> https://hg.python.org/cpython/rev/22eaf6158e7b changeset: 102357:22eaf6158e7b branch: 3.5 parent: 102354:db5a5679a9de user: Brett Cannon date: Fri Jul 15 10:58:54 2016 -0700 summary: Issue #26844: Fix imp.find_module() to have the exception related to type issues be about 'path' instead of 'name'. Thanks to Lev Maximov for the patch. files: Lib/imp.py | 4 ++-- Misc/ACKS | 1 + Misc/NEWS | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Lib/imp.py b/Lib/imp.py --- a/Lib/imp.py +++ b/Lib/imp.py @@ -266,8 +266,8 @@ raise TypeError("'name' must be a str, not {}".format(type(name))) elif not isinstance(path, (type(None), list)): # Backwards-compatibility - raise RuntimeError("'list' must be None or a list, " - "not {}".format(type(name))) + raise RuntimeError("'path' must be None or a list, " + "not {}".format(type(path))) if path is None: if is_builtin(name): diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -939,6 +939,7 @@ mattip Martin Matusiak Dieter Maurer +Lev Maximov Daniel May Madison May Lucas Maystre diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -22,6 +22,9 @@ Library ------- +- Issue #26844: Fix error message for imp.find_module() to refer to 'path' + instead of 'name'. Patch by Lev Maximov. + - Issue #23804: Fix SSL zero-length recv() calls to not block and not raise an error about unclean EOF. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 14:27:06 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 18:27:06 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Fix_a_failing_test_introdu?= =?utf-8?q?ced_as_part_of_issue_=2327512?= Message-ID: <20160715182657.1674.78488.759B5D09@psf.io> https://hg.python.org/cpython/rev/bb7686a555cc changeset: 102359:bb7686a555cc user: Brett Cannon date: Fri Jul 15 11:26:53 2016 -0700 summary: Fix a failing test introduced as part of issue #27512 files: Lib/test/test_os.py | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -3164,9 +3164,8 @@ c.__fspath__ = 1 self.assertRaises(TypeError, self.fspath, c()) # __fspath__ raises an exception. - c.__fspath__ = lambda self: self.__not_exist self.assertRaises(ZeroDivisionError, self.fspath, - self.PathLike(ZeroDivisionError)) + self.PathLike(ZeroDivisionError())) # Only test if the C version is provided, otherwise TestPEP519 already tested # the pure Python implementation. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 14:55:27 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 18:55:27 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3MDgz?= =?utf-8?q?=3A_Respect_the_PYTHONCASEOK_environment_variable_under?= Message-ID: <20160715185527.62638.31826.6C0380B3@psf.io> https://hg.python.org/cpython/rev/bedcb9ec3f26 changeset: 102360:bedcb9ec3f26 branch: 3.5 parent: 102357:22eaf6158e7b user: Brett Cannon date: Fri Jul 15 11:54:38 2016 -0700 summary: Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. Originally only b'PYTHONCASEOK' was being checked for in os.environ, but that won't work under Windows where all environment variables are strings (on OS X they are bytes). Thanks to Eryk Sun for the bug report. files: Lib/importlib/_bootstrap_external.py | 3 +- Lib/test/test_importlib/source/test_case_sensitivity.py | 15 ++++++---- Misc/NEWS | 2 + 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -29,7 +29,8 @@ if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): def _relax_case(): """True if filenames must be checked case-insensitively.""" - return b'PYTHONCASEOK' in _os.environ + return (b'PYTHONCASEOK' in _os.environ + or 'PYTHONCASEOK' in _os.environ) else: def _relax_case(): """True if filenames must be checked case-insensitively.""" diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py --- a/Lib/test/test_importlib/source/test_case_sensitivity.py +++ b/Lib/test/test_importlib/source/test_case_sensitivity.py @@ -39,12 +39,17 @@ insensitive_finder = self.finder(insensitive_path) return self.find(sensitive_finder), self.find(insensitive_finder) + def env_changed(self, *, should_exist): + possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' + if any(x in self.importlib._bootstrap_external._os.environ + for x in possibilities) == should_exist: + self.skipTest('os.environ changes not reflected in ' + '_os.environ') + def test_sensitive(self): with test_support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.env_changed(should_exist=False) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) @@ -53,9 +58,7 @@ def test_insensitive(self): with test_support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.env_changed(should_exist=True) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,8 @@ Core and Builtins ----------------- +- Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. + - Issue #27514: Make having too many statically nested blocks a SyntaxError instead of SystemError. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 14:55:27 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 18:55:27 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_for_=2327083?= Message-ID: <20160715185527.16738.96936.2ACDE0EB@psf.io> https://hg.python.org/cpython/rev/777da58794ca changeset: 102361:777da58794ca parent: 102359:bb7686a555cc parent: 102360:bedcb9ec3f26 user: Brett Cannon date: Fri Jul 15 11:55:21 2016 -0700 summary: Merge for #27083 files: Lib/importlib/_bootstrap_external.py | 3 +- Lib/test/test_importlib/source/test_case_sensitivity.py | 15 +- Misc/NEWS | 2 + Python/importlib_external.h | 4694 +++++---- 4 files changed, 2361 insertions(+), 2353 deletions(-) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -29,7 +29,8 @@ if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): def _relax_case(): """True if filenames must be checked case-insensitively.""" - return b'PYTHONCASEOK' in _os.environ + return (b'PYTHONCASEOK' in _os.environ + or 'PYTHONCASEOK' in _os.environ) else: def _relax_case(): """True if filenames must be checked case-insensitively.""" diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py --- a/Lib/test/test_importlib/source/test_case_sensitivity.py +++ b/Lib/test/test_importlib/source/test_case_sensitivity.py @@ -38,12 +38,17 @@ insensitive_finder = self.finder(insensitive_path) return self.find(sensitive_finder), self.find(insensitive_finder) + def env_changed(self, *, should_exist): + possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' + if any(x in self.importlib._bootstrap_external._os.environ + for x in possibilities) == should_exist: + self.skipTest('os.environ changes not reflected in ' + '_os.environ') + def test_sensitive(self): with test_support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.env_changed(should_exist=False) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) @@ -52,9 +57,7 @@ def test_insensitive(self): with test_support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in self.importlib._bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.env_changed(should_exist=True) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,8 @@ Core and Builtins ----------------- +- Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. + - Issue #27514: Make having too many statically nested blocks a SyntaxError instead of SystemError. diff --git a/Python/importlib_external.h b/Python/importlib_external.h --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -61,2365 +61,2367 @@ 116,3,131,1,114,22,100,1,100,2,132,0,125,0,110,8, 100,3,100,2,132,0,125,0,124,0,83,0,41,4,78,99, 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 83,0,0,0,115,10,0,0,0,100,1,116,0,106,1,107, - 6,83,0,41,2,122,53,84,114,117,101,32,105,102,32,102, - 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, - 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, - 115,101,110,115,105,116,105,118,101,108,121,46,115,12,0,0, - 0,80,89,84,72,79,78,67,65,83,69,79,75,41,2,218, - 3,95,111,115,90,7,101,110,118,105,114,111,110,169,0,114, - 4,0,0,0,114,4,0,0,0,250,38,60,102,114,111,122, - 101,110,32,105,109,112,111,114,116,108,105,98,46,95,98,111, - 111,116,115,116,114,97,112,95,101,120,116,101,114,110,97,108, - 62,218,11,95,114,101,108,97,120,95,99,97,115,101,30,0, - 0,0,115,2,0,0,0,0,2,122,37,95,109,97,107,101, - 95,114,101,108,97,120,95,99,97,115,101,46,60,108,111,99, - 97,108,115,62,46,95,114,101,108,97,120,95,99,97,115,101, - 99,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, - 0,83,0,0,0,115,4,0,0,0,100,1,83,0,41,2, - 122,53,84,114,117,101,32,105,102,32,102,105,108,101,110,97, - 109,101,115,32,109,117,115,116,32,98,101,32,99,104,101,99, - 107,101,100,32,99,97,115,101,45,105,110,115,101,110,115,105, - 116,105,118,101,108,121,46,70,114,4,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,6,0,0,0,34,0,0,0,115,2,0,0,0,0, - 2,41,4,218,3,115,121,115,218,8,112,108,97,116,102,111, - 114,109,218,10,115,116,97,114,116,115,119,105,116,104,218,27, - 95,67,65,83,69,95,73,78,83,69,78,83,73,84,73,86, - 69,95,80,76,65,84,70,79,82,77,83,41,1,114,6,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,16,95,109,97,107,101,95,114,101,108,97,120,95,99, - 97,115,101,28,0,0,0,115,8,0,0,0,0,1,12,1, - 10,4,8,3,114,11,0,0,0,99,1,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,20, - 0,0,0,116,0,124,0,131,1,100,1,64,0,106,1,100, - 2,100,3,131,2,83,0,41,4,122,42,67,111,110,118,101, - 114,116,32,97,32,51,50,45,98,105,116,32,105,110,116,101, - 103,101,114,32,116,111,32,108,105,116,116,108,101,45,101,110, - 100,105,97,110,46,108,3,0,0,0,255,127,255,127,3,0, - 233,4,0,0,0,218,6,108,105,116,116,108,101,41,2,218, - 3,105,110,116,218,8,116,111,95,98,121,116,101,115,41,1, - 218,1,120,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,7,95,119,95,108,111,110,103,40,0,0,0,115, - 2,0,0,0,0,2,114,17,0,0,0,99,1,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,116,0,106,1,124,0,100,1,131,2,83, - 0,41,2,122,47,67,111,110,118,101,114,116,32,52,32,98, - 121,116,101,115,32,105,110,32,108,105,116,116,108,101,45,101, - 110,100,105,97,110,32,116,111,32,97,110,32,105,110,116,101, - 103,101,114,46,114,13,0,0,0,41,2,114,14,0,0,0, - 218,10,102,114,111,109,95,98,121,116,101,115,41,1,90,9, - 105,110,116,95,98,121,116,101,115,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,7,95,114,95,108,111,110, - 103,45,0,0,0,115,2,0,0,0,0,2,114,19,0,0, - 0,99,0,0,0,0,0,0,0,0,1,0,0,0,3,0, - 0,0,71,0,0,0,115,20,0,0,0,116,0,106,1,100, - 1,100,2,132,0,124,0,68,0,131,1,131,1,83,0,41, - 3,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, - 111,114,32,111,115,46,112,97,116,104,46,106,111,105,110,40, - 41,46,99,1,0,0,0,0,0,0,0,2,0,0,0,4, - 0,0,0,83,0,0,0,115,26,0,0,0,103,0,124,0, - 93,18,125,1,124,1,114,4,124,1,106,0,116,1,131,1, - 145,2,113,4,83,0,114,4,0,0,0,41,2,218,6,114, - 115,116,114,105,112,218,15,112,97,116,104,95,115,101,112,97, - 114,97,116,111,114,115,41,2,218,2,46,48,218,4,112,97, - 114,116,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,250,10,60,108,105,115,116,99,111,109,112,62,52,0,0, - 0,115,2,0,0,0,6,1,122,30,95,112,97,116,104,95, - 106,111,105,110,46,60,108,111,99,97,108,115,62,46,60,108, - 105,115,116,99,111,109,112,62,41,2,218,8,112,97,116,104, - 95,115,101,112,218,4,106,111,105,110,41,1,218,10,112,97, - 116,104,95,112,97,114,116,115,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,10,95,112,97,116,104,95,106, - 111,105,110,50,0,0,0,115,4,0,0,0,0,2,10,1, - 114,28,0,0,0,99,1,0,0,0,0,0,0,0,5,0, - 0,0,5,0,0,0,67,0,0,0,115,98,0,0,0,116, - 0,116,1,131,1,100,1,107,2,114,36,124,0,106,2,116, - 3,131,1,92,3,125,1,125,2,125,3,124,1,124,3,102, - 2,83,0,120,52,116,4,124,0,131,1,68,0,93,40,125, - 4,124,4,116,1,107,6,114,46,124,0,106,5,124,4,100, - 2,100,1,144,1,131,1,92,2,125,1,125,3,124,1,124, - 3,102,2,83,0,113,46,87,0,100,3,124,0,102,2,83, - 0,41,4,122,32,82,101,112,108,97,99,101,109,101,110,116, - 32,102,111,114,32,111,115,46,112,97,116,104,46,115,112,108, - 105,116,40,41,46,233,1,0,0,0,90,8,109,97,120,115, - 112,108,105,116,218,0,41,6,218,3,108,101,110,114,21,0, - 0,0,218,10,114,112,97,114,116,105,116,105,111,110,114,25, - 0,0,0,218,8,114,101,118,101,114,115,101,100,218,6,114, - 115,112,108,105,116,41,5,218,4,112,97,116,104,90,5,102, - 114,111,110,116,218,1,95,218,4,116,97,105,108,114,16,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,11,95,112,97,116,104,95,115,112,108,105,116,56,0, - 0,0,115,16,0,0,0,0,2,12,1,16,1,8,1,14, - 1,8,1,20,1,12,1,114,38,0,0,0,99,1,0,0, - 0,0,0,0,0,1,0,0,0,2,0,0,0,67,0,0, - 0,115,10,0,0,0,116,0,106,1,124,0,131,1,83,0, - 41,1,122,126,83,116,97,116,32,116,104,101,32,112,97,116, - 104,46,10,10,32,32,32,32,77,97,100,101,32,97,32,115, - 101,112,97,114,97,116,101,32,102,117,110,99,116,105,111,110, - 32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,105, - 101,114,32,116,111,32,111,118,101,114,114,105,100,101,32,105, - 110,32,101,120,112,101,114,105,109,101,110,116,115,10,32,32, - 32,32,40,101,46,103,46,32,99,97,99,104,101,32,115,116, - 97,116,32,114,101,115,117,108,116,115,41,46,10,10,32,32, - 32,32,41,2,114,3,0,0,0,90,4,115,116,97,116,41, + 83,0,0,0,115,20,0,0,0,100,1,116,0,106,1,107, + 6,112,18,100,2,116,0,106,1,107,6,83,0,41,3,122, + 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, + 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, + 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, + 105,118,101,108,121,46,115,12,0,0,0,80,89,84,72,79, + 78,67,65,83,69,79,75,90,12,80,89,84,72,79,78,67, + 65,83,69,79,75,41,2,218,3,95,111,115,90,7,101,110, + 118,105,114,111,110,169,0,114,4,0,0,0,114,4,0,0, + 0,250,38,60,102,114,111,122,101,110,32,105,109,112,111,114, + 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,95, + 101,120,116,101,114,110,97,108,62,218,11,95,114,101,108,97, + 120,95,99,97,115,101,30,0,0,0,115,4,0,0,0,0, + 2,10,1,122,37,95,109,97,107,101,95,114,101,108,97,120, + 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, + 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, + 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, + 4,0,0,0,100,1,83,0,41,2,122,53,84,114,117,101, + 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, + 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, + 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, + 46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0, + 35,0,0,0,115,2,0,0,0,0,2,41,4,218,3,115, + 121,115,218,8,112,108,97,116,102,111,114,109,218,10,115,116, + 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, + 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, + 70,79,82,77,83,41,1,114,6,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,16,95,109,97, + 107,101,95,114,101,108,97,120,95,99,97,115,101,28,0,0, + 0,115,8,0,0,0,0,1,12,1,10,5,8,3,114,11, + 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,20,0,0,0,116,0,124, + 0,131,1,100,1,64,0,106,1,100,2,100,3,131,2,83, + 0,41,4,122,42,67,111,110,118,101,114,116,32,97,32,51, + 50,45,98,105,116,32,105,110,116,101,103,101,114,32,116,111, + 32,108,105,116,116,108,101,45,101,110,100,105,97,110,46,108, + 3,0,0,0,255,127,255,127,3,0,233,4,0,0,0,218, + 6,108,105,116,116,108,101,41,2,218,3,105,110,116,218,8, + 116,111,95,98,121,116,101,115,41,1,218,1,120,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,119, + 95,108,111,110,103,41,0,0,0,115,2,0,0,0,0,2, + 114,17,0,0,0,99,1,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,116, + 0,106,1,124,0,100,1,131,2,83,0,41,2,122,47,67, + 111,110,118,101,114,116,32,52,32,98,121,116,101,115,32,105, + 110,32,108,105,116,116,108,101,45,101,110,100,105,97,110,32, + 116,111,32,97,110,32,105,110,116,101,103,101,114,46,114,13, + 0,0,0,41,2,114,14,0,0,0,218,10,102,114,111,109, + 95,98,121,116,101,115,41,1,90,9,105,110,116,95,98,121, + 116,101,115,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,7,95,114,95,108,111,110,103,46,0,0,0,115, + 2,0,0,0,0,2,114,19,0,0,0,99,0,0,0,0, + 0,0,0,0,1,0,0,0,3,0,0,0,71,0,0,0, + 115,20,0,0,0,116,0,106,1,100,1,100,2,132,0,124, + 0,68,0,131,1,131,1,83,0,41,3,122,31,82,101,112, + 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, + 112,97,116,104,46,106,111,105,110,40,41,46,99,1,0,0, + 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, + 0,115,26,0,0,0,103,0,124,0,93,18,125,1,124,1, + 114,4,124,1,106,0,116,1,131,1,145,2,113,4,83,0, + 114,4,0,0,0,41,2,218,6,114,115,116,114,105,112,218, + 15,112,97,116,104,95,115,101,112,97,114,97,116,111,114,115, + 41,2,218,2,46,48,218,4,112,97,114,116,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,250,10,60,108,105, + 115,116,99,111,109,112,62,53,0,0,0,115,2,0,0,0, + 6,1,122,30,95,112,97,116,104,95,106,111,105,110,46,60, + 108,111,99,97,108,115,62,46,60,108,105,115,116,99,111,109, + 112,62,41,2,218,8,112,97,116,104,95,115,101,112,218,4, + 106,111,105,110,41,1,218,10,112,97,116,104,95,112,97,114, + 116,115,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,10,95,112,97,116,104,95,106,111,105,110,51,0,0, + 0,115,4,0,0,0,0,2,10,1,114,28,0,0,0,99, + 1,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, + 67,0,0,0,115,98,0,0,0,116,0,116,1,131,1,100, + 1,107,2,114,36,124,0,106,2,116,3,131,1,92,3,125, + 1,125,2,125,3,124,1,124,3,102,2,83,0,120,52,116, + 4,124,0,131,1,68,0,93,40,125,4,124,4,116,1,107, + 6,114,46,124,0,106,5,124,4,100,2,100,1,144,1,131, + 1,92,2,125,1,125,3,124,1,124,3,102,2,83,0,113, + 46,87,0,100,3,124,0,102,2,83,0,41,4,122,32,82, + 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, + 115,46,112,97,116,104,46,115,112,108,105,116,40,41,46,233, + 1,0,0,0,90,8,109,97,120,115,112,108,105,116,218,0, + 41,6,218,3,108,101,110,114,21,0,0,0,218,10,114,112, + 97,114,116,105,116,105,111,110,114,25,0,0,0,218,8,114, + 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41, + 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1, + 95,218,4,116,97,105,108,114,16,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, + 116,104,95,115,112,108,105,116,57,0,0,0,115,16,0,0, + 0,0,2,12,1,16,1,8,1,14,1,8,1,20,1,12, + 1,114,38,0,0,0,99,1,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, + 116,0,106,1,124,0,131,1,83,0,41,1,122,126,83,116, + 97,116,32,116,104,101,32,112,97,116,104,46,10,10,32,32, + 32,32,77,97,100,101,32,97,32,115,101,112,97,114,97,116, + 101,32,102,117,110,99,116,105,111,110,32,116,111,32,109,97, + 107,101,32,105,116,32,101,97,115,105,101,114,32,116,111,32, + 111,118,101,114,114,105,100,101,32,105,110,32,101,120,112,101, + 114,105,109,101,110,116,115,10,32,32,32,32,40,101,46,103, + 46,32,99,97,99,104,101,32,115,116,97,116,32,114,101,115, + 117,108,116,115,41,46,10,10,32,32,32,32,41,2,114,3, + 0,0,0,90,4,115,116,97,116,41,1,114,35,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 10,95,112,97,116,104,95,115,116,97,116,69,0,0,0,115, + 2,0,0,0,0,7,114,39,0,0,0,99,2,0,0,0, + 0,0,0,0,3,0,0,0,11,0,0,0,67,0,0,0, + 115,48,0,0,0,121,12,116,0,124,0,131,1,125,2,87, + 0,110,20,4,0,116,1,107,10,114,32,1,0,1,0,1, + 0,100,1,83,0,88,0,124,2,106,2,100,2,64,0,124, + 1,107,2,83,0,41,3,122,49,84,101,115,116,32,119,104, + 101,116,104,101,114,32,116,104,101,32,112,97,116,104,32,105, + 115,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,101,32,116,121,112,101,46,70,105,0,240,0,0, + 41,3,114,39,0,0,0,218,7,79,83,69,114,114,111,114, + 218,7,115,116,95,109,111,100,101,41,3,114,35,0,0,0, + 218,4,109,111,100,101,90,9,115,116,97,116,95,105,110,102, + 111,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,18,95,112,97,116,104,95,105,115,95,109,111,100,101,95, + 116,121,112,101,79,0,0,0,115,10,0,0,0,0,2,2, + 1,12,1,14,1,6,1,114,43,0,0,0,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,10,0,0,0,116,0,124,0,100,1,131,2,83,0, + 41,2,122,31,82,101,112,108,97,99,101,109,101,110,116,32, + 102,111,114,32,111,115,46,112,97,116,104,46,105,115,102,105, + 108,101,46,105,0,128,0,0,41,1,114,43,0,0,0,41, 1,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,10,95,112,97,116,104,95,115,116,97, - 116,68,0,0,0,115,2,0,0,0,0,7,114,39,0,0, - 0,99,2,0,0,0,0,0,0,0,3,0,0,0,11,0, - 0,0,67,0,0,0,115,48,0,0,0,121,12,116,0,124, - 0,131,1,125,2,87,0,110,20,4,0,116,1,107,10,114, - 32,1,0,1,0,1,0,100,1,83,0,88,0,124,2,106, - 2,100,2,64,0,124,1,107,2,83,0,41,3,122,49,84, - 101,115,116,32,119,104,101,116,104,101,114,32,116,104,101,32, - 112,97,116,104,32,105,115,32,116,104,101,32,115,112,101,99, - 105,102,105,101,100,32,109,111,100,101,32,116,121,112,101,46, - 70,105,0,240,0,0,41,3,114,39,0,0,0,218,7,79, - 83,69,114,114,111,114,218,7,115,116,95,109,111,100,101,41, - 3,114,35,0,0,0,218,4,109,111,100,101,90,9,115,116, - 97,116,95,105,110,102,111,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,18,95,112,97,116,104,95,105,115, - 95,109,111,100,101,95,116,121,112,101,78,0,0,0,115,10, - 0,0,0,0,2,2,1,12,1,14,1,6,1,114,43,0, - 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,115,10,0,0,0,116,0,124,0, - 100,1,131,2,83,0,41,2,122,31,82,101,112,108,97,99, - 101,109,101,110,116,32,102,111,114,32,111,115,46,112,97,116, - 104,46,105,115,102,105,108,101,46,105,0,128,0,0,41,1, - 114,43,0,0,0,41,1,114,35,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,12,95,112,97, - 116,104,95,105,115,102,105,108,101,87,0,0,0,115,2,0, - 0,0,0,2,114,44,0,0,0,99,1,0,0,0,0,0, - 0,0,1,0,0,0,3,0,0,0,67,0,0,0,115,22, - 0,0,0,124,0,115,12,116,0,106,1,131,0,125,0,116, - 2,124,0,100,1,131,2,83,0,41,2,122,30,82,101,112, - 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, - 112,97,116,104,46,105,115,100,105,114,46,105,0,64,0,0, - 41,3,114,3,0,0,0,218,6,103,101,116,99,119,100,114, - 43,0,0,0,41,1,114,35,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,116, - 104,95,105,115,100,105,114,92,0,0,0,115,6,0,0,0, - 0,2,4,1,8,1,114,46,0,0,0,233,182,1,0,0, - 99,3,0,0,0,0,0,0,0,6,0,0,0,17,0,0, - 0,67,0,0,0,115,162,0,0,0,100,1,106,0,124,0, - 116,1,124,0,131,1,131,2,125,3,116,2,106,3,124,3, - 116,2,106,4,116,2,106,5,66,0,116,2,106,6,66,0, - 124,2,100,2,64,0,131,3,125,4,121,50,116,7,106,8, - 124,4,100,3,131,2,143,16,125,5,124,5,106,9,124,1, - 131,1,1,0,87,0,100,4,81,0,82,0,88,0,116,2, - 106,10,124,3,124,0,131,2,1,0,87,0,110,58,4,0, - 116,11,107,10,114,156,1,0,1,0,1,0,121,14,116,2, - 106,12,124,3,131,1,1,0,87,0,110,20,4,0,116,11, - 107,10,114,148,1,0,1,0,1,0,89,0,110,2,88,0, - 130,0,89,0,110,2,88,0,100,4,83,0,41,5,122,162, - 66,101,115,116,45,101,102,102,111,114,116,32,102,117,110,99, - 116,105,111,110,32,116,111,32,119,114,105,116,101,32,100,97, - 116,97,32,116,111,32,97,32,112,97,116,104,32,97,116,111, - 109,105,99,97,108,108,121,46,10,32,32,32,32,66,101,32, - 112,114,101,112,97,114,101,100,32,116,111,32,104,97,110,100, - 108,101,32,97,32,70,105,108,101,69,120,105,115,116,115,69, - 114,114,111,114,32,105,102,32,99,111,110,99,117,114,114,101, - 110,116,32,119,114,105,116,105,110,103,32,111,102,32,116,104, - 101,10,32,32,32,32,116,101,109,112,111,114,97,114,121,32, - 102,105,108,101,32,105,115,32,97,116,116,101,109,112,116,101, - 100,46,122,5,123,125,46,123,125,105,182,1,0,0,90,2, - 119,98,78,41,13,218,6,102,111,114,109,97,116,218,2,105, - 100,114,3,0,0,0,90,4,111,112,101,110,90,6,79,95, - 69,88,67,76,90,7,79,95,67,82,69,65,84,90,8,79, - 95,87,82,79,78,76,89,218,3,95,105,111,218,6,70,105, - 108,101,73,79,218,5,119,114,105,116,101,218,7,114,101,112, - 108,97,99,101,114,40,0,0,0,90,6,117,110,108,105,110, - 107,41,6,114,35,0,0,0,218,4,100,97,116,97,114,42, - 0,0,0,90,8,112,97,116,104,95,116,109,112,90,2,102, - 100,218,4,102,105,108,101,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,13,95,119,114,105,116,101,95,97, - 116,111,109,105,99,99,0,0,0,115,26,0,0,0,0,5, - 16,1,6,1,26,1,2,3,14,1,20,1,16,1,14,1, - 2,1,14,1,14,1,6,1,114,56,0,0,0,105,44,13, - 0,0,233,2,0,0,0,114,13,0,0,0,115,2,0,0, - 0,13,10,90,11,95,95,112,121,99,97,99,104,101,95,95, - 122,4,111,112,116,45,122,3,46,112,121,122,4,46,112,121, - 99,78,41,1,218,12,111,112,116,105,109,105,122,97,116,105, - 111,110,99,2,0,0,0,1,0,0,0,11,0,0,0,6, - 0,0,0,67,0,0,0,115,234,0,0,0,124,1,100,1, - 107,9,114,52,116,0,106,1,100,2,116,2,131,2,1,0, - 124,2,100,1,107,9,114,40,100,3,125,3,116,3,124,3, - 131,1,130,1,124,1,114,48,100,4,110,2,100,5,125,2, - 116,4,124,0,131,1,92,2,125,4,125,5,124,5,106,5, - 100,6,131,1,92,3,125,6,125,7,125,8,116,6,106,7, - 106,8,125,9,124,9,100,1,107,8,114,104,116,9,100,7, - 131,1,130,1,100,4,106,10,124,6,114,116,124,6,110,2, - 124,8,124,7,124,9,103,3,131,1,125,10,124,2,100,1, - 107,8,114,162,116,6,106,11,106,12,100,8,107,2,114,154, - 100,4,125,2,110,8,116,6,106,11,106,12,125,2,116,13, - 124,2,131,1,125,2,124,2,100,4,107,3,114,214,124,2, - 106,14,131,0,115,200,116,15,100,9,106,16,124,2,131,1, - 131,1,130,1,100,10,106,16,124,10,116,17,124,2,131,3, - 125,10,116,18,124,4,116,19,124,10,116,20,100,8,25,0, - 23,0,131,3,83,0,41,11,97,254,2,0,0,71,105,118, + 114,5,0,0,0,218,12,95,112,97,116,104,95,105,115,102, + 105,108,101,88,0,0,0,115,2,0,0,0,0,2,114,44, + 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, + 3,0,0,0,67,0,0,0,115,22,0,0,0,124,0,115, + 12,116,0,106,1,131,0,125,0,116,2,124,0,100,1,131, + 2,83,0,41,2,122,30,82,101,112,108,97,99,101,109,101, + 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, + 115,100,105,114,46,105,0,64,0,0,41,3,114,3,0,0, + 0,218,6,103,101,116,99,119,100,114,43,0,0,0,41,1, + 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,11,95,112,97,116,104,95,105,115,100,105, + 114,93,0,0,0,115,6,0,0,0,0,2,4,1,8,1, + 114,46,0,0,0,233,182,1,0,0,99,3,0,0,0,0, + 0,0,0,6,0,0,0,17,0,0,0,67,0,0,0,115, + 162,0,0,0,100,1,106,0,124,0,116,1,124,0,131,1, + 131,2,125,3,116,2,106,3,124,3,116,2,106,4,116,2, + 106,5,66,0,116,2,106,6,66,0,124,2,100,2,64,0, + 131,3,125,4,121,50,116,7,106,8,124,4,100,3,131,2, + 143,16,125,5,124,5,106,9,124,1,131,1,1,0,87,0, + 100,4,81,0,82,0,88,0,116,2,106,10,124,3,124,0, + 131,2,1,0,87,0,110,58,4,0,116,11,107,10,114,156, + 1,0,1,0,1,0,121,14,116,2,106,12,124,3,131,1, + 1,0,87,0,110,20,4,0,116,11,107,10,114,148,1,0, + 1,0,1,0,89,0,110,2,88,0,130,0,89,0,110,2, + 88,0,100,4,83,0,41,5,122,162,66,101,115,116,45,101, + 102,102,111,114,116,32,102,117,110,99,116,105,111,110,32,116, + 111,32,119,114,105,116,101,32,100,97,116,97,32,116,111,32, + 97,32,112,97,116,104,32,97,116,111,109,105,99,97,108,108, + 121,46,10,32,32,32,32,66,101,32,112,114,101,112,97,114, + 101,100,32,116,111,32,104,97,110,100,108,101,32,97,32,70, + 105,108,101,69,120,105,115,116,115,69,114,114,111,114,32,105, + 102,32,99,111,110,99,117,114,114,101,110,116,32,119,114,105, + 116,105,110,103,32,111,102,32,116,104,101,10,32,32,32,32, + 116,101,109,112,111,114,97,114,121,32,102,105,108,101,32,105, + 115,32,97,116,116,101,109,112,116,101,100,46,122,5,123,125, + 46,123,125,105,182,1,0,0,90,2,119,98,78,41,13,218, + 6,102,111,114,109,97,116,218,2,105,100,114,3,0,0,0, + 90,4,111,112,101,110,90,6,79,95,69,88,67,76,90,7, + 79,95,67,82,69,65,84,90,8,79,95,87,82,79,78,76, + 89,218,3,95,105,111,218,6,70,105,108,101,73,79,218,5, + 119,114,105,116,101,218,7,114,101,112,108,97,99,101,114,40, + 0,0,0,90,6,117,110,108,105,110,107,41,6,114,35,0, + 0,0,218,4,100,97,116,97,114,42,0,0,0,90,8,112, + 97,116,104,95,116,109,112,90,2,102,100,218,4,102,105,108, + 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,13,95,119,114,105,116,101,95,97,116,111,109,105,99,100, + 0,0,0,115,26,0,0,0,0,5,16,1,6,1,26,1, + 2,3,14,1,20,1,16,1,14,1,2,1,14,1,14,1, + 6,1,114,56,0,0,0,105,44,13,0,0,233,2,0,0, + 0,114,13,0,0,0,115,2,0,0,0,13,10,90,11,95, + 95,112,121,99,97,99,104,101,95,95,122,4,111,112,116,45, + 122,3,46,112,121,122,4,46,112,121,99,78,41,1,218,12, + 111,112,116,105,109,105,122,97,116,105,111,110,99,2,0,0, + 0,1,0,0,0,11,0,0,0,6,0,0,0,67,0,0, + 0,115,234,0,0,0,124,1,100,1,107,9,114,52,116,0, + 106,1,100,2,116,2,131,2,1,0,124,2,100,1,107,9, + 114,40,100,3,125,3,116,3,124,3,131,1,130,1,124,1, + 114,48,100,4,110,2,100,5,125,2,116,4,124,0,131,1, + 92,2,125,4,125,5,124,5,106,5,100,6,131,1,92,3, + 125,6,125,7,125,8,116,6,106,7,106,8,125,9,124,9, + 100,1,107,8,114,104,116,9,100,7,131,1,130,1,100,4, + 106,10,124,6,114,116,124,6,110,2,124,8,124,7,124,9, + 103,3,131,1,125,10,124,2,100,1,107,8,114,162,116,6, + 106,11,106,12,100,8,107,2,114,154,100,4,125,2,110,8, + 116,6,106,11,106,12,125,2,116,13,124,2,131,1,125,2, + 124,2,100,4,107,3,114,214,124,2,106,14,131,0,115,200, + 116,15,100,9,106,16,124,2,131,1,131,1,130,1,100,10, + 106,16,124,10,116,17,124,2,131,3,125,10,116,18,124,4, + 116,19,124,10,116,20,100,8,25,0,23,0,131,3,83,0, + 41,11,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,30,0,0,0,114,29,0,0,0,218,1,46,122, + 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, + 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, + 32,78,111,110,101,233,0,0,0,0,122,24,123,33,114,125, + 32,105,115,32,110,111,116,32,97,108,112,104,97,110,117,109, + 101,114,105,99,122,7,123,125,46,123,125,123,125,41,21,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, + 38,0,0,0,114,32,0,0,0,114,7,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,26, + 0,0,0,218,5,102,108,97,103,115,218,8,111,112,116,105, + 109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,110, + 117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,48, + 0,0,0,218,4,95,79,80,84,114,28,0,0,0,218,8, + 95,80,89,67,65,67,72,69,218,17,66,89,84,69,67,79, + 68,69,95,83,85,70,70,73,88,69,83,41,11,114,35,0, + 0,0,90,14,100,101,98,117,103,95,111,118,101,114,114,105, + 100,101,114,58,0,0,0,218,7,109,101,115,115,97,103,101, + 218,4,104,101,97,100,114,37,0,0,0,90,4,98,97,115, + 101,218,3,115,101,112,218,4,114,101,115,116,90,3,116,97, + 103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97, + 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, + 117,114,99,101,250,0,0,0,115,46,0,0,0,0,18,8, + 1,6,1,6,1,8,1,4,1,8,1,12,1,12,1,16, + 1,8,1,8,1,8,1,24,1,8,1,12,1,6,2,8, + 1,8,1,8,1,8,1,14,1,14,1,114,80,0,0,0, + 99,1,0,0,0,0,0,0,0,8,0,0,0,5,0,0, + 0,67,0,0,0,115,220,0,0,0,116,0,106,1,106,2, + 100,1,107,8,114,20,116,3,100,2,131,1,130,1,116,4, + 124,0,131,1,92,2,125,1,125,2,116,4,124,1,131,1, + 92,2,125,1,125,3,124,3,116,5,107,3,114,68,116,6, + 100,3,106,7,116,5,124,0,131,2,131,1,130,1,124,2, + 106,8,100,4,131,1,125,4,124,4,100,11,107,7,114,102, + 116,6,100,7,106,7,124,2,131,1,131,1,130,1,110,86, + 124,4,100,6,107,2,114,188,124,2,106,9,100,4,100,5, + 131,2,100,12,25,0,125,5,124,5,106,10,116,11,131,1, + 115,150,116,6,100,8,106,7,116,11,131,1,131,1,130,1, + 124,5,116,12,116,11,131,1,100,1,133,2,25,0,125,6, + 124,6,106,13,131,0,115,188,116,6,100,9,106,7,124,5, + 131,1,131,1,130,1,124,2,106,14,100,4,131,1,100,10, + 25,0,125,7,116,15,124,1,124,7,116,16,100,10,25,0, + 23,0,131,2,83,0,41,13,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,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, + 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,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,30,0,0,0,114,29,0, - 0,0,218,1,46,122,36,115,121,115,46,105,109,112,108,101, - 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, - 116,97,103,32,105,115,32,78,111,110,101,233,0,0,0,0, - 122,24,123,33,114,125,32,105,115,32,110,111,116,32,97,108, - 112,104,97,110,117,109,101,114,105,99,122,7,123,125,46,123, - 125,123,125,41,21,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,38,0,0,0,114,32,0,0,0,114, - 7,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,26,0,0,0,218,5,102,108,97,103,115, - 218,8,111,112,116,105,109,105,122,101,218,3,115,116,114,218, - 7,105,115,97,108,110,117,109,218,10,86,97,108,117,101,69, - 114,114,111,114,114,48,0,0,0,218,4,95,79,80,84,114, - 28,0,0,0,218,8,95,80,89,67,65,67,72,69,218,17, - 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, - 83,41,11,114,35,0,0,0,90,14,100,101,98,117,103,95, - 111,118,101,114,114,105,100,101,114,58,0,0,0,218,7,109, - 101,115,115,97,103,101,218,4,104,101,97,100,114,37,0,0, - 0,90,4,98,97,115,101,218,3,115,101,112,218,4,114,101, - 115,116,90,3,116,97,103,90,15,97,108,109,111,115,116,95, - 102,105,108,101,110,97,109,101,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,17,99,97,99,104,101,95,102, - 114,111,109,95,115,111,117,114,99,101,249,0,0,0,115,46, - 0,0,0,0,18,8,1,6,1,6,1,8,1,4,1,8, - 1,12,1,12,1,16,1,8,1,8,1,8,1,24,1,8, - 1,12,1,6,2,8,1,8,1,8,1,8,1,14,1,14, - 1,114,80,0,0,0,99,1,0,0,0,0,0,0,0,8, - 0,0,0,5,0,0,0,67,0,0,0,115,220,0,0,0, - 116,0,106,1,106,2,100,1,107,8,114,20,116,3,100,2, - 131,1,130,1,116,4,124,0,131,1,92,2,125,1,125,2, - 116,4,124,1,131,1,92,2,125,1,125,3,124,3,116,5, - 107,3,114,68,116,6,100,3,106,7,116,5,124,0,131,2, - 131,1,130,1,124,2,106,8,100,4,131,1,125,4,124,4, - 100,11,107,7,114,102,116,6,100,7,106,7,124,2,131,1, - 131,1,130,1,110,86,124,4,100,6,107,2,114,188,124,2, - 106,9,100,4,100,5,131,2,100,12,25,0,125,5,124,5, - 106,10,116,11,131,1,115,150,116,6,100,8,106,7,116,11, - 131,1,131,1,130,1,124,5,116,12,116,11,131,1,100,1, - 133,2,25,0,125,6,124,6,106,13,131,0,115,188,116,6, - 100,9,106,7,124,5,131,1,131,1,130,1,124,2,106,14, - 100,4,131,1,100,10,25,0,125,7,116,15,124,1,124,7, - 116,16,100,10,25,0,23,0,131,2,83,0,41,13,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,122,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,122,37,123,125,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,123,33,114,125,114, - 59,0,0,0,114,57,0,0,0,233,3,0,0,0,122,33, - 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,123,33,114, - 125,122,57,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,123,33,114,125,122,52,111,112, - 116,105,109,105,122,97,116,105,111,110,32,108,101,118,101,108, - 32,123,33,114,125,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,60,0,0,0,62,2,0,0,0,114,57,0,0, - 0,114,81,0,0,0,233,254,255,255,255,41,17,114,7,0, - 0,0,114,65,0,0,0,114,66,0,0,0,114,67,0,0, - 0,114,38,0,0,0,114,74,0,0,0,114,72,0,0,0, - 114,48,0,0,0,218,5,99,111,117,110,116,114,34,0,0, - 0,114,9,0,0,0,114,73,0,0,0,114,31,0,0,0, - 114,71,0,0,0,218,9,112,97,114,116,105,116,105,111,110, - 114,28,0,0,0,218,15,83,79,85,82,67,69,95,83,85, - 70,70,73,88,69,83,41,8,114,35,0,0,0,114,77,0, - 0,0,90,16,112,121,99,97,99,104,101,95,102,105,108,101, - 110,97,109,101,90,7,112,121,99,97,99,104,101,90,9,100, - 111,116,95,99,111,117,110,116,114,58,0,0,0,90,9,111, - 112,116,95,108,101,118,101,108,90,13,98,97,115,101,95,102, - 105,108,101,110,97,109,101,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,17,115,111,117,114,99,101,95,102, - 114,111,109,95,99,97,99,104,101,37,1,0,0,115,44,0, - 0,0,0,9,12,1,8,1,12,1,12,1,8,1,6,1, - 10,1,10,1,8,1,6,1,10,1,8,1,16,1,10,1, - 6,1,8,1,16,1,8,1,6,1,8,1,14,1,114,86, - 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, - 12,0,0,0,67,0,0,0,115,128,0,0,0,116,0,124, - 0,131,1,100,1,107,2,114,16,100,2,83,0,124,0,106, - 1,100,3,131,1,92,3,125,1,125,2,125,3,124,1,12, - 0,115,58,124,3,106,2,131,0,100,7,100,8,133,2,25, - 0,100,6,107,3,114,62,124,0,83,0,121,12,116,3,124, - 0,131,1,125,4,87,0,110,36,4,0,116,4,116,5,102, - 2,107,10,114,110,1,0,1,0,1,0,124,0,100,2,100, - 9,133,2,25,0,125,4,89,0,110,2,88,0,116,6,124, - 4,131,1,114,124,124,4,83,0,124,0,83,0,41,10,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,60,0, - 0,0,78,114,59,0,0,0,114,81,0,0,0,114,29,0, - 0,0,90,2,112,121,233,253,255,255,255,233,255,255,255,255, - 114,88,0,0,0,41,7,114,31,0,0,0,114,32,0,0, - 0,218,5,108,111,119,101,114,114,86,0,0,0,114,67,0, - 0,0,114,72,0,0,0,114,44,0,0,0,41,5,218,13, - 98,121,116,101,99,111,100,101,95,112,97,116,104,114,79,0, - 0,0,114,36,0,0,0,90,9,101,120,116,101,110,115,105, - 111,110,218,11,115,111,117,114,99,101,95,112,97,116,104,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,15, - 95,103,101,116,95,115,111,117,114,99,101,102,105,108,101,70, - 1,0,0,115,20,0,0,0,0,7,12,1,4,1,16,1, - 26,1,4,1,2,1,12,1,18,1,18,1,114,92,0,0, - 0,99,1,0,0,0,0,0,0,0,1,0,0,0,11,0, - 0,0,67,0,0,0,115,74,0,0,0,124,0,106,0,116, - 1,116,2,131,1,131,1,114,46,121,8,116,3,124,0,131, - 1,83,0,4,0,116,4,107,10,114,42,1,0,1,0,1, - 0,89,0,113,70,88,0,110,24,124,0,106,0,116,1,116, - 5,131,1,131,1,114,66,124,0,83,0,110,4,100,0,83, - 0,100,0,83,0,41,1,78,41,6,218,8,101,110,100,115, - 119,105,116,104,218,5,116,117,112,108,101,114,85,0,0,0, - 114,80,0,0,0,114,67,0,0,0,114,75,0,0,0,41, - 1,218,8,102,105,108,101,110,97,109,101,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,11,95,103,101,116, - 95,99,97,99,104,101,100,89,1,0,0,115,16,0,0,0, - 0,1,14,1,2,1,8,1,14,1,8,1,14,1,6,2, - 114,96,0,0,0,99,1,0,0,0,0,0,0,0,2,0, - 0,0,11,0,0,0,67,0,0,0,115,52,0,0,0,121, - 14,116,0,124,0,131,1,106,1,125,1,87,0,110,24,4, - 0,116,2,107,10,114,38,1,0,1,0,1,0,100,1,125, - 1,89,0,110,2,88,0,124,1,100,2,79,0,125,1,124, - 1,83,0,41,3,122,51,67,97,108,99,117,108,97,116,101, - 32,116,104,101,32,109,111,100,101,32,112,101,114,109,105,115, - 115,105,111,110,115,32,102,111,114,32,97,32,98,121,116,101, - 99,111,100,101,32,102,105,108,101,46,105,182,1,0,0,233, - 128,0,0,0,41,3,114,39,0,0,0,114,41,0,0,0, - 114,40,0,0,0,41,2,114,35,0,0,0,114,42,0,0, + 105,115,101,100,46,10,10,32,32,32,32,78,122,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,122,37,123,125,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,123,33,114,125,114,59,0,0,0,114,57, + 0,0,0,233,3,0,0,0,122,33,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,123,33,114,125,122,57,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,123,33,114,125,122,52,111,112,116,105,109,105,122,97, + 116,105,111,110,32,108,101,118,101,108,32,123,33,114,125,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,60,0,0, + 0,62,2,0,0,0,114,57,0,0,0,114,81,0,0,0, + 233,254,255,255,255,41,17,114,7,0,0,0,114,65,0,0, + 0,114,66,0,0,0,114,67,0,0,0,114,38,0,0,0, + 114,74,0,0,0,114,72,0,0,0,114,48,0,0,0,218, + 5,99,111,117,110,116,114,34,0,0,0,114,9,0,0,0, + 114,73,0,0,0,114,31,0,0,0,114,71,0,0,0,218, + 9,112,97,114,116,105,116,105,111,110,114,28,0,0,0,218, + 15,83,79,85,82,67,69,95,83,85,70,70,73,88,69,83, + 41,8,114,35,0,0,0,114,77,0,0,0,90,16,112,121, + 99,97,99,104,101,95,102,105,108,101,110,97,109,101,90,7, + 112,121,99,97,99,104,101,90,9,100,111,116,95,99,111,117, + 110,116,114,58,0,0,0,90,9,111,112,116,95,108,101,118, + 101,108,90,13,98,97,115,101,95,102,105,108,101,110,97,109, + 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, + 218,17,115,111,117,114,99,101,95,102,114,111,109,95,99,97, + 99,104,101,38,1,0,0,115,44,0,0,0,0,9,12,1, + 8,1,12,1,12,1,8,1,6,1,10,1,10,1,8,1, + 6,1,10,1,8,1,16,1,10,1,6,1,8,1,16,1, + 8,1,6,1,8,1,14,1,114,86,0,0,0,99,1,0, + 0,0,0,0,0,0,5,0,0,0,12,0,0,0,67,0, + 0,0,115,128,0,0,0,116,0,124,0,131,1,100,1,107, + 2,114,16,100,2,83,0,124,0,106,1,100,3,131,1,92, + 3,125,1,125,2,125,3,124,1,12,0,115,58,124,3,106, + 2,131,0,100,7,100,8,133,2,25,0,100,6,107,3,114, + 62,124,0,83,0,121,12,116,3,124,0,131,1,125,4,87, + 0,110,36,4,0,116,4,116,5,102,2,107,10,114,110,1, + 0,1,0,1,0,124,0,100,2,100,9,133,2,25,0,125, + 4,89,0,110,2,88,0,116,6,124,4,131,1,114,124,124, + 4,83,0,124,0,83,0,41,10,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,60,0,0,0,78,114,59,0, + 0,0,114,81,0,0,0,114,29,0,0,0,90,2,112,121, + 233,253,255,255,255,233,255,255,255,255,114,88,0,0,0,41, + 7,114,31,0,0,0,114,32,0,0,0,218,5,108,111,119, + 101,114,114,86,0,0,0,114,67,0,0,0,114,72,0,0, + 0,114,44,0,0,0,41,5,218,13,98,121,116,101,99,111, + 100,101,95,112,97,116,104,114,79,0,0,0,114,36,0,0, + 0,90,9,101,120,116,101,110,115,105,111,110,218,11,115,111, + 117,114,99,101,95,112,97,116,104,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,15,95,103,101,116,95,115, + 111,117,114,99,101,102,105,108,101,71,1,0,0,115,20,0, + 0,0,0,7,12,1,4,1,16,1,26,1,4,1,2,1, + 12,1,18,1,18,1,114,92,0,0,0,99,1,0,0,0, + 0,0,0,0,1,0,0,0,11,0,0,0,67,0,0,0, + 115,74,0,0,0,124,0,106,0,116,1,116,2,131,1,131, + 1,114,46,121,8,116,3,124,0,131,1,83,0,4,0,116, + 4,107,10,114,42,1,0,1,0,1,0,89,0,113,70,88, + 0,110,24,124,0,106,0,116,1,116,5,131,1,131,1,114, + 66,124,0,83,0,110,4,100,0,83,0,100,0,83,0,41, + 1,78,41,6,218,8,101,110,100,115,119,105,116,104,218,5, + 116,117,112,108,101,114,85,0,0,0,114,80,0,0,0,114, + 67,0,0,0,114,75,0,0,0,41,1,218,8,102,105,108, + 101,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,218,11,95,103,101,116,95,99,97,99,104,101, + 100,90,1,0,0,115,16,0,0,0,0,1,14,1,2,1, + 8,1,14,1,8,1,14,1,6,2,114,96,0,0,0,99, + 1,0,0,0,0,0,0,0,2,0,0,0,11,0,0,0, + 67,0,0,0,115,52,0,0,0,121,14,116,0,124,0,131, + 1,106,1,125,1,87,0,110,24,4,0,116,2,107,10,114, + 38,1,0,1,0,1,0,100,1,125,1,89,0,110,2,88, + 0,124,1,100,2,79,0,125,1,124,1,83,0,41,3,122, + 51,67,97,108,99,117,108,97,116,101,32,116,104,101,32,109, + 111,100,101,32,112,101,114,109,105,115,115,105,111,110,115,32, + 102,111,114,32,97,32,98,121,116,101,99,111,100,101,32,102, + 105,108,101,46,105,182,1,0,0,233,128,0,0,0,41,3, + 114,39,0,0,0,114,41,0,0,0,114,40,0,0,0,41, + 2,114,35,0,0,0,114,42,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,10,95,99,97,108, + 99,95,109,111,100,101,102,1,0,0,115,12,0,0,0,0, + 2,2,1,14,1,14,1,10,3,8,1,114,98,0,0,0, + 99,1,0,0,0,0,0,0,0,3,0,0,0,11,0,0, + 0,3,0,0,0,115,68,0,0,0,100,6,135,0,102,1, + 100,2,100,3,132,9,125,1,121,10,116,0,106,1,125,2, + 87,0,110,28,4,0,116,2,107,10,114,52,1,0,1,0, + 1,0,100,4,100,5,132,0,125,2,89,0,110,2,88,0, + 124,2,124,1,136,0,131,2,1,0,124,1,83,0,41,7, + 122,252,68,101,99,111,114,97,116,111,114,32,116,111,32,118, + 101,114,105,102,121,32,116,104,97,116,32,116,104,101,32,109, + 111,100,117,108,101,32,98,101,105,110,103,32,114,101,113,117, + 101,115,116,101,100,32,109,97,116,99,104,101,115,32,116,104, + 101,32,111,110,101,32,116,104,101,10,32,32,32,32,108,111, + 97,100,101,114,32,99,97,110,32,104,97,110,100,108,101,46, + 10,10,32,32,32,32,84,104,101,32,102,105,114,115,116,32, + 97,114,103,117,109,101,110,116,32,40,115,101,108,102,41,32, + 109,117,115,116,32,100,101,102,105,110,101,32,95,110,97,109, + 101,32,119,104,105,99,104,32,116,104,101,32,115,101,99,111, + 110,100,32,97,114,103,117,109,101,110,116,32,105,115,10,32, + 32,32,32,99,111,109,112,97,114,101,100,32,97,103,97,105, + 110,115,116,46,32,73,102,32,116,104,101,32,99,111,109,112, + 97,114,105,115,111,110,32,102,97,105,108,115,32,116,104,101, + 110,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, + 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,99, + 2,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0, + 31,0,0,0,115,64,0,0,0,124,1,100,0,107,8,114, + 16,124,0,106,0,125,1,110,34,124,0,106,0,124,1,107, + 3,114,50,116,1,100,1,124,0,106,0,124,1,102,2,22, + 0,100,2,124,1,144,1,131,1,130,1,136,0,124,0,124, + 1,124,2,124,3,142,2,83,0,41,3,78,122,30,108,111, + 97,100,101,114,32,102,111,114,32,37,115,32,99,97,110,110, + 111,116,32,104,97,110,100,108,101,32,37,115,218,4,110,97, + 109,101,41,2,114,99,0,0,0,218,11,73,109,112,111,114, + 116,69,114,114,111,114,41,4,218,4,115,101,108,102,114,99, + 0,0,0,218,4,97,114,103,115,90,6,107,119,97,114,103, + 115,41,1,218,6,109,101,116,104,111,100,114,4,0,0,0, + 114,5,0,0,0,218,19,95,99,104,101,99,107,95,110,97, + 109,101,95,119,114,97,112,112,101,114,122,1,0,0,115,12, + 0,0,0,0,1,8,1,8,1,10,1,4,1,20,1,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,3,0,0,0,7,0,0,0,83,0,0,0,115,60, + 0,0,0,120,40,100,5,68,0,93,32,125,2,116,0,124, + 1,124,2,131,2,114,6,116,1,124,0,124,2,116,2,124, + 1,124,2,131,2,131,3,1,0,113,6,87,0,124,0,106, + 3,106,4,124,1,106,3,131,1,1,0,100,0,83,0,41, + 6,78,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, + 4,122,10,95,95,109,111,100,117,108,101,95,95,122,8,95, + 95,110,97,109,101,95,95,122,12,95,95,113,117,97,108,110, + 97,109,101,95,95,122,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,53,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,5,95, + 119,114,97,112,133,1,0,0,115,8,0,0,0,0,1,10, + 1,10,1,22,1,122,26,95,99,104,101,99,107,95,110,97, + 109,101,46,60,108,111,99,97,108,115,62,46,95,119,114,97, + 112,41,1,78,41,3,218,10,95,98,111,111,116,115,116,114, + 97,112,114,114,0,0,0,218,9,78,97,109,101,69,114,114, + 111,114,41,3,114,103,0,0,0,114,104,0,0,0,114,114, + 0,0,0,114,4,0,0,0,41,1,114,103,0,0,0,114, + 5,0,0,0,218,11,95,99,104,101,99,107,95,110,97,109, + 101,114,1,0,0,115,14,0,0,0,0,8,14,7,2,1, + 10,1,14,2,14,5,10,1,114,117,0,0,0,99,2,0, + 0,0,0,0,0,0,5,0,0,0,4,0,0,0,67,0, + 0,0,115,60,0,0,0,124,0,106,0,124,1,131,1,92, + 2,125,2,125,3,124,2,100,1,107,8,114,56,116,1,124, + 3,131,1,114,56,100,2,125,4,116,2,106,3,124,4,106, + 4,124,3,100,3,25,0,131,1,116,5,131,2,1,0,124, + 2,83,0,41,4,122,155,84,114,121,32,116,111,32,102,105, + 110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,32, + 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, + 100,117,108,101,32,98,121,32,100,101,108,101,103,97,116,105, + 110,103,32,116,111,10,32,32,32,32,115,101,108,102,46,102, + 105,110,100,95,108,111,97,100,101,114,40,41,46,10,10,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,32,105,110,32, + 102,97,118,111,114,32,111,102,32,102,105,110,100,101,114,46, + 102,105,110,100,95,115,112,101,99,40,41,46,10,10,32,32, + 32,32,78,122,44,78,111,116,32,105,109,112,111,114,116,105, + 110,103,32,100,105,114,101,99,116,111,114,121,32,123,125,58, + 32,109,105,115,115,105,110,103,32,95,95,105,110,105,116,95, + 95,114,60,0,0,0,41,6,218,11,102,105,110,100,95,108, + 111,97,100,101,114,114,31,0,0,0,114,61,0,0,0,114, + 62,0,0,0,114,48,0,0,0,218,13,73,109,112,111,114, + 116,87,97,114,110,105,110,103,41,5,114,101,0,0,0,218, + 8,102,117,108,108,110,97,109,101,218,6,108,111,97,100,101, + 114,218,8,112,111,114,116,105,111,110,115,218,3,109,115,103, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 17,95,102,105,110,100,95,109,111,100,117,108,101,95,115,104, + 105,109,142,1,0,0,115,10,0,0,0,0,10,14,1,16, + 1,4,1,22,1,114,124,0,0,0,99,4,0,0,0,0, + 0,0,0,11,0,0,0,19,0,0,0,67,0,0,0,115, + 128,1,0,0,105,0,125,4,124,2,100,1,107,9,114,22, + 124,2,124,4,100,2,60,0,110,4,100,3,125,2,124,3, + 100,1,107,9,114,42,124,3,124,4,100,4,60,0,124,0, + 100,1,100,5,133,2,25,0,125,5,124,0,100,5,100,6, + 133,2,25,0,125,6,124,0,100,6,100,7,133,2,25,0, + 125,7,124,5,116,0,107,3,114,122,100,8,106,1,124,2, + 124,5,131,2,125,8,116,2,106,3,100,9,124,8,131,2, + 1,0,116,4,124,8,124,4,141,1,130,1,110,86,116,5, + 124,6,131,1,100,5,107,3,114,166,100,10,106,1,124,2, + 131,1,125,8,116,2,106,3,100,9,124,8,131,2,1,0, + 116,6,124,8,131,1,130,1,110,42,116,5,124,7,131,1, + 100,5,107,3,114,208,100,11,106,1,124,2,131,1,125,8, + 116,2,106,3,100,9,124,8,131,2,1,0,116,6,124,8, + 131,1,130,1,124,1,100,1,107,9,144,1,114,116,121,16, + 116,7,124,1,100,12,25,0,131,1,125,9,87,0,110,20, + 4,0,116,8,107,10,114,254,1,0,1,0,1,0,89,0, + 110,48,88,0,116,9,124,6,131,1,124,9,107,3,144,1, + 114,46,100,13,106,1,124,2,131,1,125,8,116,2,106,3, + 100,9,124,8,131,2,1,0,116,4,124,8,124,4,141,1, + 130,1,121,16,124,1,100,14,25,0,100,15,64,0,125,10, + 87,0,110,22,4,0,116,8,107,10,144,1,114,84,1,0, + 1,0,1,0,89,0,110,32,88,0,116,9,124,7,131,1, + 124,10,107,3,144,1,114,116,116,4,100,13,106,1,124,2, + 131,1,124,4,141,1,130,1,124,0,100,7,100,1,133,2, + 25,0,83,0,41,16,97,122,1,0,0,86,97,108,105,100, + 97,116,101,32,116,104,101,32,104,101,97,100,101,114,32,111, + 102,32,116,104,101,32,112,97,115,115,101,100,45,105,110,32, + 98,121,116,101,99,111,100,101,32,97,103,97,105,110,115,116, + 32,115,111,117,114,99,101,95,115,116,97,116,115,32,40,105, + 102,10,32,32,32,32,103,105,118,101,110,41,32,97,110,100, + 32,114,101,116,117,114,110,105,110,103,32,116,104,101,32,98, + 121,116,101,99,111,100,101,32,116,104,97,116,32,99,97,110, + 32,98,101,32,99,111,109,112,105,108,101,100,32,98,121,32, + 99,111,109,112,105,108,101,40,41,46,10,10,32,32,32,32, + 65,108,108,32,111,116,104,101,114,32,97,114,103,117,109,101, + 110,116,115,32,97,114,101,32,117,115,101,100,32,116,111,32, + 101,110,104,97,110,99,101,32,101,114,114,111,114,32,114,101, + 112,111,114,116,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,116,104,101,32,98,121, + 116,101,99,111,100,101,32,105,115,10,32,32,32,32,102,111, + 117,110,100,32,116,111,32,98,101,32,115,116,97,108,101,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, + 10,32,32,32,32,116,114,117,110,99,97,116,101,100,46,10, + 10,32,32,32,32,78,114,99,0,0,0,122,10,60,98,121, + 116,101,99,111,100,101,62,114,35,0,0,0,114,12,0,0, + 0,233,8,0,0,0,233,12,0,0,0,122,30,98,97,100, + 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110, + 32,123,33,114,125,58,32,123,33,114,125,122,2,123,125,122, + 43,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,116,105,109,101,115, + 116,97,109,112,32,105,110,32,123,33,114,125,122,48,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,115,105,122,101,32,111,102,32, + 115,111,117,114,99,101,32,105,110,32,123,33,114,125,218,5, + 109,116,105,109,101,122,26,98,121,116,101,99,111,100,101,32, + 105,115,32,115,116,97,108,101,32,102,111,114,32,123,33,114, + 125,218,4,115,105,122,101,108,3,0,0,0,255,127,255,127, + 3,0,41,10,218,12,77,65,71,73,67,95,78,85,77,66, + 69,82,114,48,0,0,0,114,115,0,0,0,218,16,95,118, + 101,114,98,111,115,101,95,109,101,115,115,97,103,101,114,100, + 0,0,0,114,31,0,0,0,218,8,69,79,70,69,114,114, + 111,114,114,14,0,0,0,218,8,75,101,121,69,114,114,111, + 114,114,19,0,0,0,41,11,114,54,0,0,0,218,12,115, + 111,117,114,99,101,95,115,116,97,116,115,114,99,0,0,0, + 114,35,0,0,0,90,11,101,120,99,95,100,101,116,97,105, + 108,115,90,5,109,97,103,105,99,90,13,114,97,119,95,116, + 105,109,101,115,116,97,109,112,90,8,114,97,119,95,115,105, + 122,101,114,76,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,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,25,95,118,97,108,105,100,97,116,101,95,98,121,116, + 101,99,111,100,101,95,104,101,97,100,101,114,159,1,0,0, + 115,76,0,0,0,0,11,4,1,8,1,10,3,4,1,8, + 1,8,1,12,1,12,1,12,1,8,1,12,1,12,1,12, + 1,12,1,10,1,12,1,10,1,12,1,10,1,12,1,8, + 1,10,1,2,1,16,1,14,1,6,2,14,1,10,1,12, + 1,10,1,2,1,16,1,16,1,6,2,14,1,10,1,6, + 1,114,136,0,0,0,99,4,0,0,0,0,0,0,0,5, + 0,0,0,6,0,0,0,67,0,0,0,115,86,0,0,0, + 116,0,106,1,124,0,131,1,125,4,116,2,124,4,116,3, + 131,2,114,58,116,4,106,5,100,1,124,2,131,2,1,0, + 124,3,100,2,107,9,114,52,116,6,106,7,124,4,124,3, + 131,2,1,0,124,4,83,0,110,24,116,8,100,3,106,9, + 124,2,131,1,100,4,124,1,100,5,124,2,144,2,131,1, + 130,1,100,2,83,0,41,6,122,60,67,111,109,112,105,108, + 101,32,98,121,116,101,99,111,100,101,32,97,115,32,114,101, + 116,117,114,110,101,100,32,98,121,32,95,118,97,108,105,100, + 97,116,101,95,98,121,116,101,99,111,100,101,95,104,101,97, + 100,101,114,40,41,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,114,99,0,0,0,114,35,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,115,0,0,0, + 114,130,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,100,0, + 0,0,114,48,0,0,0,41,5,114,54,0,0,0,114,99, + 0,0,0,114,90,0,0,0,114,91,0,0,0,218,4,99, + 111,100,101,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,17,95,99,111,109,112,105,108,101,95,98,121,116, + 101,99,111,100,101,214,1,0,0,115,16,0,0,0,0,2, + 10,1,10,1,12,1,8,1,12,1,6,2,12,1,114,142, + 0,0,0,114,60,0,0,0,99,3,0,0,0,0,0,0, + 0,4,0,0,0,3,0,0,0,67,0,0,0,115,56,0, + 0,0,116,0,116,1,131,1,125,3,124,3,106,2,116,3, + 124,1,131,1,131,1,1,0,124,3,106,2,116,3,124,2, + 131,1,131,1,1,0,124,3,106,2,116,4,106,5,124,0, + 131,1,131,1,1,0,124,3,83,0,41,1,122,80,67,111, + 109,112,105,108,101,32,97,32,99,111,100,101,32,111,98,106, + 101,99,116,32,105,110,116,111,32,98,121,116,101,99,111,100, + 101,32,102,111,114,32,119,114,105,116,105,110,103,32,111,117, + 116,32,116,111,32,97,32,98,121,116,101,45,99,111,109,112, + 105,108,101,100,10,32,32,32,32,102,105,108,101,46,41,6, + 218,9,98,121,116,101,97,114,114,97,121,114,129,0,0,0, + 218,6,101,120,116,101,110,100,114,17,0,0,0,114,137,0, + 0,0,90,5,100,117,109,112,115,41,4,114,141,0,0,0, + 114,127,0,0,0,114,135,0,0,0,114,54,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, + 95,99,111,100,101,95,116,111,95,98,121,116,101,99,111,100, + 101,226,1,0,0,115,10,0,0,0,0,3,8,1,14,1, + 14,1,16,1,114,145,0,0,0,99,1,0,0,0,0,0, + 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,62, + 0,0,0,100,1,100,2,108,0,125,1,116,1,106,2,124, + 0,131,1,106,3,125,2,124,1,106,4,124,2,131,1,125, + 3,116,1,106,5,100,2,100,3,131,2,125,4,124,4,106, + 6,124,0,106,6,124,3,100,1,25,0,131,1,131,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,60, + 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122, + 101,114,50,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,146,0, + 0,0,90,21,115,111,117,114,99,101,95,98,121,116,101,115, + 95,114,101,97,100,108,105,110,101,218,8,101,110,99,111,100, + 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99, + 111,100,101,114,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, + 99,101,236,1,0,0,115,10,0,0,0,0,5,8,1,12, + 1,10,1,12,1,114,150,0,0,0,41,2,114,121,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,2,0,0,0,9,0,0,0,19,0,0,0,67,0, + 0,0,115,8,1,0,0,124,1,100,1,107,8,114,58,100, + 2,125,1,116,0,124,2,100,3,131,2,114,58,121,14,124, + 2,106,1,124,0,131,1,125,1,87,0,110,20,4,0,116, + 2,107,10,114,56,1,0,1,0,1,0,89,0,110,2,88, + 0,116,3,106,4,124,0,124,2,100,4,124,1,144,1,131, + 2,125,4,100,5,124,4,95,5,124,2,100,1,107,8,114, + 146,120,54,116,6,131,0,68,0,93,40,92,2,125,5,125, + 6,124,1,106,7,116,8,124,6,131,1,131,1,114,98,124, + 5,124,0,124,1,131,2,125,2,124,2,124,4,95,9,80, + 0,113,98,87,0,100,1,83,0,124,3,116,10,107,8,114, + 212,116,0,124,2,100,6,131,2,114,218,121,14,124,2,106, + 11,124,0,131,1,125,7,87,0,110,20,4,0,116,2,107, + 10,114,198,1,0,1,0,1,0,89,0,113,218,88,0,124, + 7,114,218,103,0,124,4,95,12,110,6,124,3,124,4,95, + 12,124,4,106,12,103,0,107,2,144,1,114,4,124,1,144, + 1,114,4,116,13,124,1,131,1,100,7,25,0,125,8,124, + 4,106,12,106,14,124,8,131,1,1,0,124,4,83,0,41, + 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, + 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, + 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, + 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, + 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, + 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, + 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, + 111,100,117,108,101,95,115,101,97,114,99,104,95,108,111,99, + 97,116,105,111,110,115,32,116,111,32,97,32,108,105,115,116, + 32,111,102,32,100,105,114,101,99,116,111,114,121,32,112,97, + 116,104,115,46,32,32,65,110,10,32,32,32,32,101,109,112, + 116,121,32,108,105,115,116,32,105,115,32,115,117,102,102,105, + 99,105,101,110,116,44,32,116,104,111,117,103,104,32,105,116, + 115,32,110,111,116,32,111,116,104,101,114,119,105,115,101,32, + 117,115,101,102,117,108,32,116,111,32,116,104,101,10,32,32, + 32,32,105,109,112,111,114,116,32,115,121,115,116,101,109,46, + 10,10,32,32,32,32,84,104,101,32,108,111,97,100,101,114, + 32,109,117,115,116,32,116,97,107,101,32,97,32,115,112,101, + 99,32,97,115,32,105,116,115,32,111,110,108,121,32,95,95, + 105,110,105,116,95,95,40,41,32,97,114,103,46,10,10,32, + 32,32,32,78,122,9,60,117,110,107,110,111,119,110,62,218, + 12,103,101,116,95,102,105,108,101,110,97,109,101,218,6,111, + 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, + 103,101,114,60,0,0,0,41,15,114,109,0,0,0,114,152, + 0,0,0,114,100,0,0,0,114,115,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,93,0,0,0,114,94,0,0,0,114, + 121,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, + 154,0,0,0,114,151,0,0,0,114,38,0,0,0,218,6, + 97,112,112,101,110,100,41,9,114,99,0,0,0,90,8,108, + 111,99,97,116,105,111,110,114,121,0,0,0,114,151,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, + 154,0,0,0,90,7,100,105,114,110,97,109,101,114,4,0, + 0,0,114,4,0,0,0,114,5,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,253,1,0,0,115,60,0,0,0,0,12, + 8,4,4,1,10,2,2,1,14,1,14,1,6,8,18,1, + 6,3,8,1,16,1,14,1,10,1,6,1,6,2,4,3, + 8,2,10,1,2,1,14,1,14,1,6,2,4,1,8,2, + 6,1,12,1,6,1,12,1,12,2,114,162,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,80,0,0,0,101,0,90,1,100,0,90, + 2,100,1,90,3,100,2,90,4,100,3,90,5,100,4,90, + 6,101,7,100,5,100,6,132,0,131,1,90,8,101,7,100, + 7,100,8,132,0,131,1,90,9,101,7,100,14,100,10,100, + 11,132,1,131,1,90,10,101,7,100,15,100,12,100,13,132, + 1,131,1,90,11,100,9,83,0,41,16,218,21,87,105,110, + 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, + 101,114,122,62,77,101,116,97,32,112,97,116,104,32,102,105, + 110,100,101,114,32,102,111,114,32,109,111,100,117,108,101,115, + 32,100,101,99,108,97,114,101,100,32,105,110,32,116,104,101, + 32,87,105,110,100,111,119,115,32,114,101,103,105,115,116,114, + 121,46,122,59,83,111,102,116,119,97,114,101,92,80,121,116, + 104,111,110,92,80,121,116,104,111,110,67,111,114,101,92,123, + 115,121,115,95,118,101,114,115,105,111,110,125,92,77,111,100, + 117,108,101,115,92,123,102,117,108,108,110,97,109,101,125,122, + 65,83,111,102,116,119,97,114,101,92,80,121,116,104,111,110, + 92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,115, + 95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,101, + 115,92,123,102,117,108,108,110,97,109,101,125,92,68,101,98, + 117,103,70,99,2,0,0,0,0,0,0,0,2,0,0,0, + 11,0,0,0,67,0,0,0,115,50,0,0,0,121,14,116, + 0,106,1,116,0,106,2,124,1,131,2,83,0,4,0,116, + 3,107,10,114,44,1,0,1,0,1,0,116,0,106,1,116, + 0,106,4,124,1,131,2,83,0,88,0,100,0,83,0,41, + 1,78,41,5,218,7,95,119,105,110,114,101,103,90,7,79, + 112,101,110,75,101,121,90,17,72,75,69,89,95,67,85,82, + 82,69,78,84,95,85,83,69,82,114,40,0,0,0,90,18, + 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, + 78,69,41,2,218,3,99,108,115,218,3,107,101,121,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,14,95, + 111,112,101,110,95,114,101,103,105,115,116,114,121,75,2,0, + 0,115,8,0,0,0,0,2,2,1,14,1,14,1,122,36, + 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, + 105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105, + 115,116,114,121,99,2,0,0,0,0,0,0,0,6,0,0, + 0,16,0,0,0,67,0,0,0,115,116,0,0,0,124,0, + 106,0,114,14,124,0,106,1,125,2,110,6,124,0,106,2, + 125,2,124,2,106,3,100,1,124,1,100,2,100,3,116,4, + 106,5,100,0,100,4,133,2,25,0,22,0,144,2,131,0, + 125,3,121,38,124,0,106,6,124,3,131,1,143,18,125,4, + 116,7,106,8,124,4,100,5,131,2,125,5,87,0,100,0, + 81,0,82,0,88,0,87,0,110,20,4,0,116,9,107,10, + 114,110,1,0,1,0,1,0,100,0,83,0,88,0,124,5, + 83,0,41,6,78,114,120,0,0,0,90,11,115,121,115,95, + 118,101,114,115,105,111,110,122,5,37,100,46,37,100,114,57, + 0,0,0,114,30,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,48,0,0,0,114,7, + 0,0,0,218,12,118,101,114,115,105,111,110,95,105,110,102, + 111,114,167,0,0,0,114,164,0,0,0,90,10,81,117,101, + 114,121,86,97,108,117,101,114,40,0,0,0,41,6,114,165, + 0,0,0,114,120,0,0,0,90,12,114,101,103,105,115,116, + 114,121,95,107,101,121,114,166,0,0,0,90,4,104,107,101, + 121,218,8,102,105,108,101,112,97,116,104,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,16,95,115,101,97, + 114,99,104,95,114,101,103,105,115,116,114,121,82,2,0,0, + 115,22,0,0,0,0,2,6,1,8,2,6,1,10,1,22, + 1,2,1,12,1,26,1,14,1,6,1,122,38,87,105,110, + 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, + 101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115, + 116,114,121,78,99,4,0,0,0,0,0,0,0,8,0,0, + 0,14,0,0,0,67,0,0,0,115,122,0,0,0,124,0, + 106,0,124,1,131,1,125,4,124,4,100,0,107,8,114,22, + 100,0,83,0,121,12,116,1,124,4,131,1,1,0,87,0, + 110,20,4,0,116,2,107,10,114,54,1,0,1,0,1,0, + 100,0,83,0,88,0,120,60,116,3,131,0,68,0,93,50, + 92,2,125,5,125,6,124,4,106,4,116,5,124,6,131,1, + 131,1,114,64,116,6,106,7,124,1,124,5,124,1,124,4, + 131,2,100,1,124,4,144,1,131,2,125,7,124,7,83,0, + 113,64,87,0,100,0,83,0,41,2,78,114,153,0,0,0, + 41,8,114,173,0,0,0,114,39,0,0,0,114,40,0,0, + 0,114,156,0,0,0,114,93,0,0,0,114,94,0,0,0, + 114,115,0,0,0,218,16,115,112,101,99,95,102,114,111,109, + 95,108,111,97,100,101,114,41,8,114,165,0,0,0,114,120, + 0,0,0,114,35,0,0,0,218,6,116,97,114,103,101,116, + 114,172,0,0,0,114,121,0,0,0,114,161,0,0,0,114, + 159,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,9,102,105,110,100,95,115,112,101,99,97,2, + 0,0,115,26,0,0,0,0,2,10,1,8,1,4,1,2, + 1,12,1,14,1,6,1,16,1,14,1,6,1,10,1,8, + 1,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,4,0,0,0,3, + 0,0,0,67,0,0,0,115,36,0,0,0,124,0,106,0, + 124,1,124,2,131,2,125,3,124,3,100,1,107,9,114,28, + 124,3,106,1,83,0,110,4,100,1,83,0,100,1,83,0, + 41,2,122,108,70,105,110,100,32,109,111,100,117,108,101,32, + 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103, + 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32, + 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, + 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, + 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 78,41,2,114,176,0,0,0,114,121,0,0,0,41,4,114, + 165,0,0,0,114,120,0,0,0,114,35,0,0,0,114,159, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,113, + 2,0,0,115,8,0,0,0,0,7,12,1,8,1,8,2, + 122,33,87,105,110,100,111,119,115,82,101,103,105,115,116,114, + 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, + 117,108,101,41,2,78,78,41,1,78,41,12,114,106,0,0, + 0,114,105,0,0,0,114,107,0,0,0,114,108,0,0,0, + 114,170,0,0,0,114,169,0,0,0,114,168,0,0,0,218, + 11,99,108,97,115,115,109,101,116,104,111,100,114,167,0,0, + 0,114,173,0,0,0,114,176,0,0,0,114,177,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,163,0,0,0,63,2,0,0,115,20,0, + 0,0,8,2,4,3,4,3,4,2,4,2,12,7,12,15, + 2,1,12,15,2,1,114,163,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,5,0,0,0,3,0,0,0,67,0,0,0, + 115,64,0,0,0,116,0,124,0,106,1,124,1,131,1,131, + 1,100,1,25,0,125,2,124,2,106,2,100,2,100,1,131, + 2,100,3,25,0,125,3,124,1,106,3,100,2,131,1,100, + 4,25,0,125,4,124,3,100,5,107,2,111,62,124,4,100, + 5,107,3,83,0,41,6,122,141,67,111,110,99,114,101,116, + 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, + 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, + 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, + 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, + 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, + 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, + 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, + 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, + 95,46,112,121,39,46,114,29,0,0,0,114,59,0,0,0, + 114,60,0,0,0,114,57,0,0,0,218,8,95,95,105,110, + 105,116,95,95,41,4,114,38,0,0,0,114,152,0,0,0, + 114,34,0,0,0,114,32,0,0,0,41,5,114,101,0,0, + 0,114,120,0,0,0,114,95,0,0,0,90,13,102,105,108, + 101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,108, + 95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,154,0,0,0,132,2,0,0,115,8,0, + 0,0,0,3,18,1,16,1,14,1,122,24,95,76,111,97, + 100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,99, + 107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, + 83,0,41,2,122,42,85,115,101,32,100,101,102,97,117,108, + 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, + 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, + 78,114,4,0,0,0,41,2,114,101,0,0,0,114,159,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,101, + 140,2,0,0,115,0,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,3, + 0,0,0,4,0,0,0,67,0,0,0,115,56,0,0,0, + 124,0,106,0,124,1,106,1,131,1,125,2,124,2,100,1, + 107,8,114,36,116,2,100,2,106,3,124,1,106,1,131,1, + 131,1,130,1,116,4,106,5,116,6,124,2,124,1,106,7, + 131,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,106,0,0,0,114,100,0,0,0,114,48,0,0, + 0,114,115,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,112,0,0,0,41,3,114,101, + 0,0,0,218,6,109,111,100,117,108,101,114,141,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 11,101,120,101,99,95,109,111,100,117,108,101,143,2,0,0, + 115,10,0,0,0,0,2,12,1,8,1,6,1,10,1,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,2,0,0,0,3,0,0,0,67,0,0,0,115, + 12,0,0,0,116,0,106,1,124,0,124,1,131,2,83,0, + 41,1,122,26,84,104,105,115,32,109,111,100,117,108,101,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,41,2, + 114,115,0,0,0,218,17,95,108,111,97,100,95,109,111,100, + 117,108,101,95,115,104,105,109,41,2,114,101,0,0,0,114, + 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, + 151,2,0,0,115,2,0,0,0,0,2,122,25,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,95, + 109,111,100,117,108,101,78,41,8,114,106,0,0,0,114,105, + 0,0,0,114,107,0,0,0,114,108,0,0,0,114,154,0, + 0,0,114,181,0,0,0,114,186,0,0,0,114,188,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,179,0,0,0,127,2,0,0,115,10, + 0,0,0,8,3,4,2,8,8,8,3,8,8,114,179,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,18,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,19,218,12,83,111,117,114,99,101, + 76,111,97,100,101,114,99,2,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, + 116,0,130,1,100,1,83,0,41,2,122,178,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,44,32,119,104,101,114,101,32,112,97, + 116,104,32,105,115,32,97,32,115,116,114,46,10,10,32,32, + 32,32,32,32,32,32,82,97,105,115,101,115,32,73,79,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,218,7,73,79,69,114,114,111,114,41,2,114,101,0,0, + 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,10,112,97,116,104,95,109,116,105,109, + 101,158,2,0,0,115,2,0,0,0,0,6,122,23,83,111, + 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, + 109,116,105,109,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,3,0,0,0,67,0,0,0,115,14,0,0,0,100, + 1,124,0,106,0,124,1,131,1,105,1,83,0,41,2,97, + 170,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,32, + 112,97,116,104,10,32,32,32,32,32,32,32,32,116,111,32, + 98,121,32,116,104,101,32,112,97,116,104,32,40,115,116,114, + 41,46,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,73,79,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,127, + 0,0,0,41,1,114,191,0,0,0,41,2,114,101,0,0, + 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,218,10,112,97,116,104,95,115,116,97,116, + 115,166,2,0,0,115,2,0,0,0,0,11,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,4,0, + 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,124, + 0,106,0,124,2,124,3,131,2,83,0,41,1,122,228,79, + 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,119, + 104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,97, + 32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,105, + 108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,46, + 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, + 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, + 111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,104, + 101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,116, + 101,99,111,100,101,32,102,105,108,101,115,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,115,111,117,114,99,101, + 32,112,97,116,104,32,105,115,32,110,101,101,100,101,100,32, + 105,110,32,111,114,100,101,114,32,116,111,32,99,111,114,114, + 101,99,116,108,121,32,116,114,97,110,115,102,101,114,32,112, + 101,114,109,105,115,115,105,111,110,115,10,32,32,32,32,32, + 32,32,32,41,1,218,8,115,101,116,95,100,97,116,97,41, + 4,114,101,0,0,0,114,91,0,0,0,90,10,99,97,99, + 104,101,95,112,97,116,104,114,54,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,15,95,99,97, + 99,104,101,95,98,121,116,101,99,111,100,101,179,2,0,0, + 115,2,0,0,0,0,8,122,28,83,111,117,114,99,101,76, + 111,97,100,101,114,46,95,99,97,99,104,101,95,98,121,116, + 101,99,111,100,101,99,3,0,0,0,0,0,0,0,3,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,83,0,41,2,122,150,79,112,116,105,111,110,97,108,32, + 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105, + 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41, + 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32, + 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, + 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, + 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, + 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110, + 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105, + 108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,4, + 0,0,0,41,3,114,101,0,0,0,114,35,0,0,0,114, + 54,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,193,0,0,0,189,2,0,0,115,0,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,5,0,0,0,16,0,0,0,67,0,0,0,115,84,0, + 0,0,124,0,106,0,124,1,131,1,125,2,121,14,124,0, + 106,1,124,2,131,1,125,3,87,0,110,50,4,0,116,2, + 107,10,114,74,1,0,125,4,1,0,122,22,116,3,100,1, + 100,2,124,1,144,1,131,1,124,4,130,2,87,0,89,0, + 100,3,100,3,125,4,126,4,88,0,110,2,88,0,116,4, + 124,3,131,1,83,0,41,4,122,52,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, + 101,114,46,103,101,116,95,115,111,117,114,99,101,46,122,39, + 115,111,117,114,99,101,32,110,111,116,32,97,118,97,105,108, + 97,98,108,101,32,116,104,114,111,117,103,104,32,103,101,116, + 95,100,97,116,97,40,41,114,99,0,0,0,78,41,5,114, + 152,0,0,0,218,8,103,101,116,95,100,97,116,97,114,40, + 0,0,0,114,100,0,0,0,114,150,0,0,0,41,5,114, + 101,0,0,0,114,120,0,0,0,114,35,0,0,0,114,148, + 0,0,0,218,3,101,120,99,114,4,0,0,0,114,4,0, + 0,0,114,5,0,0,0,218,10,103,101,116,95,115,111,117, + 114,99,101,196,2,0,0,115,14,0,0,0,0,2,10,1, + 2,1,14,1,16,1,6,1,28,1,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,29,0,0,0,41,1,218,9,95,111,112,116, + 105,109,105,122,101,99,3,0,0,0,1,0,0,0,4,0, + 0,0,9,0,0,0,67,0,0,0,115,26,0,0,0,116, + 0,106,1,116,2,124,1,124,2,100,1,100,2,100,3,100, + 4,124,3,144,2,131,4,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, + 184,0,0,0,218,12,100,111,110,116,95,105,110,104,101,114, + 105,116,84,114,69,0,0,0,41,3,114,115,0,0,0,114, + 183,0,0,0,218,7,99,111,109,112,105,108,101,41,4,114, + 101,0,0,0,114,54,0,0,0,114,35,0,0,0,114,198, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,14,115,111,117,114,99,101,95,116,111,95,99,111, + 100,101,206,2,0,0,115,4,0,0,0,0,5,14,1,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,10,0,0,0,43,0,0,0,67,0,0, + 0,115,106,1,0,0,124,0,106,0,124,1,131,1,125,2, + 100,1,125,3,121,12,116,1,124,2,131,1,125,4,87,0, + 110,24,4,0,116,2,107,10,114,50,1,0,1,0,1,0, + 100,1,125,4,89,0,110,174,88,0,121,14,124,0,106,3, + 124,2,131,1,125,5,87,0,110,20,4,0,116,4,107,10, + 114,86,1,0,1,0,1,0,89,0,110,138,88,0,116,5, + 124,5,100,2,25,0,131,1,125,3,121,14,124,0,106,6, + 124,4,131,1,125,6,87,0,110,20,4,0,116,7,107,10, + 114,134,1,0,1,0,1,0,89,0,110,90,88,0,121,26, + 116,8,124,6,100,3,124,5,100,4,124,1,100,5,124,4, + 144,3,131,1,125,7,87,0,110,24,4,0,116,9,116,10, + 102,2,107,10,114,186,1,0,1,0,1,0,89,0,110,38, + 88,0,116,11,106,12,100,6,124,4,124,2,131,3,1,0, + 116,13,124,7,100,4,124,1,100,7,124,4,100,8,124,2, + 144,3,131,1,83,0,124,0,106,6,124,2,131,1,125,8, + 124,0,106,14,124,8,124,2,131,2,125,9,116,11,106,12, + 100,9,124,2,131,2,1,0,116,15,106,16,12,0,144,1, + 114,102,124,4,100,1,107,9,144,1,114,102,124,3,100,1, + 107,9,144,1,114,102,116,17,124,9,124,3,116,18,124,8, + 131,1,131,3,125,6,121,30,124,0,106,19,124,2,124,4, + 124,6,131,3,1,0,116,11,106,12,100,10,124,4,131,2, + 1,0,87,0,110,22,4,0,116,2,107,10,144,1,114,100, + 1,0,1,0,1,0,89,0,110,2,88,0,124,9,83,0, + 41,11,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,114,127,0,0,0,114,133,0,0,0,114,99,0, + 0,0,114,35,0,0,0,122,13,123,125,32,109,97,116,99, + 104,101,115,32,123,125,114,90,0,0,0,114,91,0,0,0, + 122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,114, + 111,109,32,123,125,122,10,119,114,111,116,101,32,123,33,114, + 125,41,20,114,152,0,0,0,114,80,0,0,0,114,67,0, + 0,0,114,192,0,0,0,114,190,0,0,0,114,14,0,0, + 0,114,195,0,0,0,114,40,0,0,0,114,136,0,0,0, + 114,100,0,0,0,114,131,0,0,0,114,115,0,0,0,114, + 130,0,0,0,114,142,0,0,0,114,201,0,0,0,114,7, + 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,145,0,0,0,114,31,0, + 0,0,114,194,0,0,0,41,10,114,101,0,0,0,114,120, + 0,0,0,114,91,0,0,0,114,134,0,0,0,114,90,0, + 0,0,218,2,115,116,114,54,0,0,0,218,10,98,121,116, + 101,115,95,100,97,116,97,114,148,0,0,0,90,11,99,111, + 100,101,95,111,98,106,101,99,116,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,182,0,0,0,214,2,0, + 0,115,78,0,0,0,0,7,10,1,4,1,2,1,12,1, + 14,1,10,2,2,1,14,1,14,1,6,2,12,1,2,1, + 14,1,14,1,6,2,2,1,6,1,8,1,12,1,18,1, + 6,2,8,1,6,1,10,1,4,1,8,1,10,1,12,1, + 12,1,20,1,10,1,6,1,10,1,2,1,14,1,16,1, + 16,1,6,1,122,21,83,111,117,114,99,101,76,111,97,100, + 101,114,46,103,101,116,95,99,111,100,101,78,114,88,0,0, + 0,41,10,114,106,0,0,0,114,105,0,0,0,114,107,0, + 0,0,114,191,0,0,0,114,192,0,0,0,114,194,0,0, + 0,114,193,0,0,0,114,197,0,0,0,114,201,0,0,0, + 114,182,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,189,0,0,0,156,2, + 0,0,115,14,0,0,0,8,2,8,8,8,13,8,10,8, + 7,8,10,14,8,114,189,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, + 76,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, + 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, + 100,6,100,7,132,0,90,6,101,7,135,0,102,1,100,8, + 100,9,132,8,131,1,90,8,101,7,100,10,100,11,132,0, + 131,1,90,9,100,12,100,13,132,0,90,10,135,0,83,0, + 41,14,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, + 3,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, + 0,124,1,124,0,95,0,124,2,124,0,95,1,100,1,83, + 0,41,2,122,75,67,97,99,104,101,32,116,104,101,32,109, + 111,100,117,108,101,32,110,97,109,101,32,97,110,100,32,116, + 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,102, + 105,108,101,32,102,111,117,110,100,32,98,121,32,116,104,101, + 10,32,32,32,32,32,32,32,32,102,105,110,100,101,114,46, + 78,41,2,114,99,0,0,0,114,35,0,0,0,41,3,114, + 101,0,0,0,114,120,0,0,0,114,35,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,180,0, + 0,0,15,3,0,0,115,4,0,0,0,0,3,6,1,122, + 19,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, + 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, + 0,2,0,0,0,67,0,0,0,115,24,0,0,0,124,0, + 106,0,124,1,106,0,107,2,111,22,124,0,106,1,124,1, + 106,1,107,2,83,0,41,1,78,41,2,218,9,95,95,99, + 108,97,115,115,95,95,114,112,0,0,0,41,2,114,101,0, + 0,0,218,5,111,116,104,101,114,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,218,6,95,95,101,113,95,95, + 21,3,0,0,115,4,0,0,0,0,1,12,1,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,1,0,0,0,3,0,0, + 0,67,0,0,0,115,20,0,0,0,116,0,124,0,106,1, + 131,1,116,0,124,0,106,2,131,1,65,0,83,0,41,1, + 78,41,3,218,4,104,97,115,104,114,99,0,0,0,114,35, + 0,0,0,41,1,114,101,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,8,95,95,104,97,115, + 104,95,95,25,3,0,0,115,2,0,0,0,0,1,122,19, + 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, + 104,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,3,0,0,0,115,16,0,0,0,116,0,116, + 1,124,0,131,2,106,2,124,1,131,1,83,0,41,1,122, + 100,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102, + 114,111,109,32,97,32,102,105,108,101,46,10,10,32,32,32, + 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101, + 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, + 32,32,32,32,32,41,3,218,5,115,117,112,101,114,114,205, + 0,0,0,114,188,0,0,0,41,2,114,101,0,0,0,114, + 120,0,0,0,41,1,114,206,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,188,0,0,0,28,3,0,0,115,2, + 0,0,0,0,10,122,22,70,105,108,101,76,111,97,100,101, + 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,115,6,0,0,0,124,0,106,0,83,0,41,1,122, + 58,82,101,116,117,114,110,32,116,104,101,32,112,97,116,104, + 32,116,111,32,116,104,101,32,115,111,117,114,99,101,32,102, + 105,108,101,32,97,115,32,102,111,117,110,100,32,98,121,32, + 116,104,101,32,102,105,110,100,101,114,46,41,1,114,35,0, + 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,152,0, + 0,0,40,3,0,0,115,2,0,0,0,0,3,122,23,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, + 108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,3, + 0,0,0,9,0,0,0,67,0,0,0,115,32,0,0,0, + 116,0,106,1,124,1,100,1,131,2,143,10,125,2,124,2, + 106,2,131,0,83,0,81,0,82,0,88,0,100,2,83,0, + 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, + 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, + 32,114,97,119,32,98,121,116,101,115,46,218,1,114,78,41, + 3,114,50,0,0,0,114,51,0,0,0,90,4,114,101,97, + 100,41,3,114,101,0,0,0,114,35,0,0,0,114,55,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,195,0,0,0,45,3,0,0,115,4,0,0,0,0, + 2,14,1,122,19,70,105,108,101,76,111,97,100,101,114,46, + 103,101,116,95,100,97,116,97,41,11,114,106,0,0,0,114, + 105,0,0,0,114,107,0,0,0,114,108,0,0,0,114,180, + 0,0,0,114,208,0,0,0,114,210,0,0,0,114,117,0, + 0,0,114,188,0,0,0,114,152,0,0,0,114,195,0,0, + 0,114,4,0,0,0,114,4,0,0,0,41,1,114,206,0, + 0,0,114,5,0,0,0,114,205,0,0,0,10,3,0,0, + 115,14,0,0,0,8,3,4,2,8,6,8,4,8,3,16, + 12,12,5,114,205,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,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,3,0,0, + 0,3,0,0,0,67,0,0,0,115,22,0,0,0,116,0, + 124,1,131,1,125,2,124,2,106,1,124,2,106,2,100,1, + 156,2,83,0,41,2,122,33,82,101,116,117,114,110,32,116, + 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32, + 116,104,101,32,112,97,116,104,46,41,2,122,5,109,116,105, + 109,101,122,4,115,105,122,101,41,3,114,39,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,101,0,0,0,114,35,0,0,0,114,203, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,192,0,0,0,55,3,0,0,115,4,0,0,0, + 0,2,8,1,122,27,83,111,117,114,99,101,70,105,108,101, + 76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116, + 115,99,4,0,0,0,0,0,0,0,5,0,0,0,5,0, + 0,0,67,0,0,0,115,26,0,0,0,116,0,124,1,131, + 1,125,4,124,0,106,1,124,2,124,3,100,1,124,4,144, + 1,131,2,83,0,41,2,78,218,5,95,109,111,100,101,41, + 2,114,98,0,0,0,114,193,0,0,0,41,5,114,101,0, + 0,0,114,91,0,0,0,114,90,0,0,0,114,54,0,0, + 0,114,42,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,194,0,0,0,60,3,0,0,115,4, + 0,0,0,0,2,8,1,122,32,83,111,117,114,99,101,70, + 105,108,101,76,111,97,100,101,114,46,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,105,182,1,0,0,41,1, + 114,215,0,0,0,99,3,0,0,0,1,0,0,0,9,0, + 0,0,17,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,120, + 40,124,4,114,56,116,1,124,4,131,1,12,0,114,56,116, + 0,124,4,131,1,92,2,125,4,125,7,124,6,106,2,124, + 7,131,1,1,0,113,18,87,0,120,108,116,3,124,6,131, + 1,68,0,93,96,125,7,116,4,124,4,124,7,131,2,125, + 4,121,14,116,5,106,6,124,4,131,1,1,0,87,0,113, + 68,4,0,116,7,107,10,114,118,1,0,1,0,1,0,119, + 68,89,0,113,68,4,0,116,8,107,10,114,162,1,0,125, + 8,1,0,122,18,116,9,106,10,100,1,124,4,124,8,131, + 3,1,0,100,2,83,0,100,2,125,8,126,8,88,0,113, + 68,88,0,113,68,87,0,121,28,116,11,124,1,124,2,124, + 3,131,3,1,0,116,9,106,10,100,3,124,1,131,2,1, + 0,87,0,110,48,4,0,116,8,107,10,114,244,1,0,125, + 8,1,0,122,20,116,9,106,10,100,1,124,1,124,8,131, + 3,1,0,87,0,89,0,100,2,100,2,125,8,126,8,88, + 0,110,2,88,0,100,2,83,0,41,4,122,27,87,114,105, + 116,101,32,98,121,116,101,115,32,100,97,116,97,32,116,111, + 32,97,32,102,105,108,101,46,122,27,99,111,117,108,100,32, + 110,111,116,32,99,114,101,97,116,101,32,123,33,114,125,58, + 32,123,33,114,125,78,122,12,99,114,101,97,116,101,100,32, + 123,33,114,125,41,12,114,38,0,0,0,114,46,0,0,0, + 114,158,0,0,0,114,33,0,0,0,114,28,0,0,0,114, + 3,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,40,0,0, + 0,114,115,0,0,0,114,130,0,0,0,114,56,0,0,0, + 41,9,114,101,0,0,0,114,35,0,0,0,114,54,0,0, + 0,114,215,0,0,0,218,6,112,97,114,101,110,116,114,95, + 0,0,0,114,27,0,0,0,114,23,0,0,0,114,196,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,193,0,0,0,65,3,0,0,115,42,0,0,0,0, + 2,12,1,4,2,16,1,12,1,14,2,14,1,10,1,2, + 1,14,1,14,2,6,1,16,3,6,1,8,1,20,1,2, + 1,12,1,16,1,16,2,8,1,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,106,0,0,0,114,105,0,0, + 0,114,107,0,0,0,114,108,0,0,0,114,192,0,0,0, + 114,194,0,0,0,114,193,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,213, + 0,0,0,51,3,0,0,115,8,0,0,0,8,2,4,2, + 8,5,8,5,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,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,5,0,0,0,6,0,0,0,67,0,0,0,115, + 56,0,0,0,124,0,106,0,124,1,131,1,125,2,124,0, + 106,1,124,2,131,1,125,3,116,2,124,3,100,1,124,1, + 100,2,124,2,144,2,131,1,125,4,116,3,124,4,100,1, + 124,1,100,3,124,2,144,2,131,1,83,0,41,4,78,114, + 99,0,0,0,114,35,0,0,0,114,90,0,0,0,41,4, + 114,152,0,0,0,114,195,0,0,0,114,136,0,0,0,114, + 142,0,0,0,41,5,114,101,0,0,0,114,120,0,0,0, + 114,35,0,0,0,114,54,0,0,0,114,204,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,182, + 0,0,0,100,3,0,0,115,8,0,0,0,0,1,10,1, + 10,1,18,1,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,2,0,0,0, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, + 0,41,2,122,39,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32, + 115,111,117,114,99,101,32,99,111,100,101,46,78,114,4,0, + 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,197,0, + 0,0,106,3,0,0,115,2,0,0,0,0,2,122,31,83, + 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, + 100,101,114,46,103,101,116,95,115,111,117,114,99,101,78,41, + 6,114,106,0,0,0,114,105,0,0,0,114,107,0,0,0, + 114,108,0,0,0,114,182,0,0,0,114,197,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,218,0,0,0,96,3,0,0,115,6,0,0, + 0,8,2,4,2,8,6,114,218,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,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,218,19,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,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,3,0,0,0,2,0,0,0,67,0,0,0,115,16,0, + 0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,0, + 83,0,41,1,78,41,2,114,99,0,0,0,114,35,0,0, + 0,41,3,114,101,0,0,0,114,99,0,0,0,114,35,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,180,0,0,0,123,3,0,0,115,4,0,0,0,0, + 1,6,1,122,28,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, + 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, + 0,0,67,0,0,0,115,24,0,0,0,124,0,106,0,124, + 1,106,0,107,2,111,22,124,0,106,1,124,1,106,1,107, + 2,83,0,41,1,78,41,2,114,206,0,0,0,114,112,0, + 0,0,41,2,114,101,0,0,0,114,207,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,208,0, + 0,0,127,3,0,0,115,4,0,0,0,0,1,12,1,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,1,0,0,0,3,0,0,0,67,0,0,0, + 115,20,0,0,0,116,0,124,0,106,1,131,1,116,0,124, + 0,106,2,131,1,65,0,83,0,41,1,78,41,3,114,209, + 0,0,0,114,99,0,0,0,114,35,0,0,0,41,1,114, + 101,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,114,210,0,0,0,131,3,0,0,115,2,0,0, + 0,0,1,122,28,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, + 95,99,2,0,0,0,0,0,0,0,3,0,0,0,4,0, + 0,0,67,0,0,0,115,36,0,0,0,116,0,106,1,116, + 2,106,3,124,1,131,2,125,2,116,0,106,4,100,1,124, + 1,106,5,124,0,106,6,131,3,1,0,124,2,83,0,41, + 2,122,38,67,114,101,97,116,101,32,97,110,32,117,110,105, + 116,105,97,108,105,122,101,100,32,101,120,116,101,110,115,105, + 111,110,32,109,111,100,117,108,101,122,38,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,32,123,33,114,125, + 32,108,111,97,100,101,100,32,102,114,111,109,32,123,33,114, + 125,41,7,114,115,0,0,0,114,183,0,0,0,114,140,0, + 0,0,90,14,99,114,101,97,116,101,95,100,121,110,97,109, + 105,99,114,130,0,0,0,114,99,0,0,0,114,35,0,0, + 0,41,3,114,101,0,0,0,114,159,0,0,0,114,185,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,181,0,0,0,134,3,0,0,115,10,0,0,0,0, + 2,4,1,10,1,6,1,12,1,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,2,0,0,0,4,0,0,0,67,0,0, + 0,115,36,0,0,0,116,0,106,1,116,2,106,3,124,1, + 131,2,1,0,116,0,106,4,100,1,124,0,106,5,124,0, + 106,6,131,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,115,0,0,0,114,183, + 0,0,0,114,140,0,0,0,90,12,101,120,101,99,95,100, + 121,110,97,109,105,99,114,130,0,0,0,114,99,0,0,0, + 114,35,0,0,0,41,2,114,101,0,0,0,114,185,0,0, 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,10,95,99,97,108,99,95,109,111,100,101,101,1,0,0, - 115,12,0,0,0,0,2,2,1,14,1,14,1,10,3,8, - 1,114,98,0,0,0,99,1,0,0,0,0,0,0,0,3, - 0,0,0,11,0,0,0,3,0,0,0,115,68,0,0,0, - 100,6,135,0,102,1,100,2,100,3,132,9,125,1,121,10, - 116,0,106,1,125,2,87,0,110,28,4,0,116,2,107,10, - 114,52,1,0,1,0,1,0,100,4,100,5,132,0,125,2, - 89,0,110,2,88,0,124,2,124,1,136,0,131,2,1,0, - 124,1,83,0,41,7,122,252,68,101,99,111,114,97,116,111, - 114,32,116,111,32,118,101,114,105,102,121,32,116,104,97,116, - 32,116,104,101,32,109,111,100,117,108,101,32,98,101,105,110, - 103,32,114,101,113,117,101,115,116,101,100,32,109,97,116,99, - 104,101,115,32,116,104,101,32,111,110,101,32,116,104,101,10, - 32,32,32,32,108,111,97,100,101,114,32,99,97,110,32,104, - 97,110,100,108,101,46,10,10,32,32,32,32,84,104,101,32, - 102,105,114,115,116,32,97,114,103,117,109,101,110,116,32,40, - 115,101,108,102,41,32,109,117,115,116,32,100,101,102,105,110, - 101,32,95,110,97,109,101,32,119,104,105,99,104,32,116,104, - 101,32,115,101,99,111,110,100,32,97,114,103,117,109,101,110, - 116,32,105,115,10,32,32,32,32,99,111,109,112,97,114,101, - 100,32,97,103,97,105,110,115,116,46,32,73,102,32,116,104, - 101,32,99,111,109,112,97,114,105,115,111,110,32,102,97,105, - 108,115,32,116,104,101,110,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,115,32,114,97,105,115,101,100,46,10,10, - 32,32,32,32,78,99,2,0,0,0,0,0,0,0,4,0, - 0,0,5,0,0,0,31,0,0,0,115,64,0,0,0,124, - 1,100,0,107,8,114,16,124,0,106,0,125,1,110,34,124, - 0,106,0,124,1,107,3,114,50,116,1,100,1,124,0,106, - 0,124,1,102,2,22,0,100,2,124,1,144,1,131,1,130, - 1,136,0,124,0,124,1,124,2,124,3,142,2,83,0,41, - 3,78,122,30,108,111,97,100,101,114,32,102,111,114,32,37, - 115,32,99,97,110,110,111,116,32,104,97,110,100,108,101,32, - 37,115,218,4,110,97,109,101,41,2,114,99,0,0,0,218, - 11,73,109,112,111,114,116,69,114,114,111,114,41,4,218,4, - 115,101,108,102,114,99,0,0,0,218,4,97,114,103,115,90, - 6,107,119,97,114,103,115,41,1,218,6,109,101,116,104,111, - 100,114,4,0,0,0,114,5,0,0,0,218,19,95,99,104, - 101,99,107,95,110,97,109,101,95,119,114,97,112,112,101,114, - 121,1,0,0,115,12,0,0,0,0,1,8,1,8,1,10, - 1,4,1,20,1,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,3,0,0,0,7,0,0,0, - 83,0,0,0,115,60,0,0,0,120,40,100,5,68,0,93, - 32,125,2,116,0,124,1,124,2,131,2,114,6,116,1,124, - 0,124,2,116,2,124,1,124,2,131,2,131,3,1,0,113, - 6,87,0,124,0,106,3,106,4,124,1,106,3,131,1,1, - 0,100,0,83,0,41,6,78,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,4,122,10,95,95,109,111,100,117,108, - 101,95,95,122,8,95,95,110,97,109,101,95,95,122,12,95, - 95,113,117,97,108,110,97,109,101,95,95,122,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, - 53,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,5,95,119,114,97,112,132,1,0,0,115,8, - 0,0,0,0,1,10,1,10,1,22,1,122,26,95,99,104, - 101,99,107,95,110,97,109,101,46,60,108,111,99,97,108,115, - 62,46,95,119,114,97,112,41,1,78,41,3,218,10,95,98, - 111,111,116,115,116,114,97,112,114,114,0,0,0,218,9,78, - 97,109,101,69,114,114,111,114,41,3,114,103,0,0,0,114, - 104,0,0,0,114,114,0,0,0,114,4,0,0,0,41,1, - 114,103,0,0,0,114,5,0,0,0,218,11,95,99,104,101, - 99,107,95,110,97,109,101,113,1,0,0,115,14,0,0,0, - 0,8,14,7,2,1,10,1,14,2,14,5,10,1,114,117, - 0,0,0,99,2,0,0,0,0,0,0,0,5,0,0,0, - 4,0,0,0,67,0,0,0,115,60,0,0,0,124,0,106, - 0,124,1,131,1,92,2,125,2,125,3,124,2,100,1,107, - 8,114,56,116,1,124,3,131,1,114,56,100,2,125,4,116, - 2,106,3,124,4,106,4,124,3,100,3,25,0,131,1,116, - 5,131,2,1,0,124,2,83,0,41,4,122,155,84,114,121, - 32,116,111,32,102,105,110,100,32,97,32,108,111,97,100,101, - 114,32,102,111,114,32,116,104,101,32,115,112,101,99,105,102, - 105,101,100,32,109,111,100,117,108,101,32,98,121,32,100,101, - 108,101,103,97,116,105,110,103,32,116,111,10,32,32,32,32, - 115,101,108,102,46,102,105,110,100,95,108,111,97,100,101,114, - 40,41,46,10,10,32,32,32,32,84,104,105,115,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,32,105,110,32,102,97,118,111,114,32,111,102,32,102, - 105,110,100,101,114,46,102,105,110,100,95,115,112,101,99,40, - 41,46,10,10,32,32,32,32,78,122,44,78,111,116,32,105, - 109,112,111,114,116,105,110,103,32,100,105,114,101,99,116,111, - 114,121,32,123,125,58,32,109,105,115,115,105,110,103,32,95, - 95,105,110,105,116,95,95,114,60,0,0,0,41,6,218,11, - 102,105,110,100,95,108,111,97,100,101,114,114,31,0,0,0, - 114,61,0,0,0,114,62,0,0,0,114,48,0,0,0,218, - 13,73,109,112,111,114,116,87,97,114,110,105,110,103,41,5, - 114,101,0,0,0,218,8,102,117,108,108,110,97,109,101,218, - 6,108,111,97,100,101,114,218,8,112,111,114,116,105,111,110, - 115,218,3,109,115,103,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,17,95,102,105,110,100,95,109,111,100, - 117,108,101,95,115,104,105,109,141,1,0,0,115,10,0,0, - 0,0,10,14,1,16,1,4,1,22,1,114,124,0,0,0, - 99,4,0,0,0,0,0,0,0,11,0,0,0,19,0,0, - 0,67,0,0,0,115,128,1,0,0,105,0,125,4,124,2, - 100,1,107,9,114,22,124,2,124,4,100,2,60,0,110,4, - 100,3,125,2,124,3,100,1,107,9,114,42,124,3,124,4, - 100,4,60,0,124,0,100,1,100,5,133,2,25,0,125,5, - 124,0,100,5,100,6,133,2,25,0,125,6,124,0,100,6, - 100,7,133,2,25,0,125,7,124,5,116,0,107,3,114,122, - 100,8,106,1,124,2,124,5,131,2,125,8,116,2,106,3, - 100,9,124,8,131,2,1,0,116,4,124,8,124,4,141,1, - 130,1,110,86,116,5,124,6,131,1,100,5,107,3,114,166, - 100,10,106,1,124,2,131,1,125,8,116,2,106,3,100,9, - 124,8,131,2,1,0,116,6,124,8,131,1,130,1,110,42, - 116,5,124,7,131,1,100,5,107,3,114,208,100,11,106,1, - 124,2,131,1,125,8,116,2,106,3,100,9,124,8,131,2, - 1,0,116,6,124,8,131,1,130,1,124,1,100,1,107,9, - 144,1,114,116,121,16,116,7,124,1,100,12,25,0,131,1, - 125,9,87,0,110,20,4,0,116,8,107,10,114,254,1,0, - 1,0,1,0,89,0,110,48,88,0,116,9,124,6,131,1, - 124,9,107,3,144,1,114,46,100,13,106,1,124,2,131,1, - 125,8,116,2,106,3,100,9,124,8,131,2,1,0,116,4, - 124,8,124,4,141,1,130,1,121,16,124,1,100,14,25,0, - 100,15,64,0,125,10,87,0,110,22,4,0,116,8,107,10, - 144,1,114,84,1,0,1,0,1,0,89,0,110,32,88,0, - 116,9,124,7,131,1,124,10,107,3,144,1,114,116,116,4, - 100,13,106,1,124,2,131,1,124,4,141,1,130,1,124,0, - 100,7,100,1,133,2,25,0,83,0,41,16,97,122,1,0, - 0,86,97,108,105,100,97,116,101,32,116,104,101,32,104,101, - 97,100,101,114,32,111,102,32,116,104,101,32,112,97,115,115, - 101,100,45,105,110,32,98,121,116,101,99,111,100,101,32,97, - 103,97,105,110,115,116,32,115,111,117,114,99,101,95,115,116, - 97,116,115,32,40,105,102,10,32,32,32,32,103,105,118,101, - 110,41,32,97,110,100,32,114,101,116,117,114,110,105,110,103, - 32,116,104,101,32,98,121,116,101,99,111,100,101,32,116,104, - 97,116,32,99,97,110,32,98,101,32,99,111,109,112,105,108, - 101,100,32,98,121,32,99,111,109,112,105,108,101,40,41,46, - 10,10,32,32,32,32,65,108,108,32,111,116,104,101,114,32, - 97,114,103,117,109,101,110,116,115,32,97,114,101,32,117,115, - 101,100,32,116,111,32,101,110,104,97,110,99,101,32,101,114, - 114,111,114,32,114,101,112,111,114,116,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, - 116,104,101,32,98,121,116,101,99,111,100,101,32,105,115,10, - 32,32,32,32,102,111,117,110,100,32,116,111,32,98,101,32, - 115,116,97,108,101,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,10,32,32,32,32,116,114,117,110,99, - 97,116,101,100,46,10,10,32,32,32,32,78,114,99,0,0, - 0,122,10,60,98,121,116,101,99,111,100,101,62,114,35,0, - 0,0,114,12,0,0,0,233,8,0,0,0,233,12,0,0, - 0,122,30,98,97,100,32,109,97,103,105,99,32,110,117,109, - 98,101,114,32,105,110,32,123,33,114,125,58,32,123,33,114, - 125,122,2,123,125,122,43,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,116,105,109,101,115,116,97,109,112,32,105,110,32,123,33, - 114,125,122,48,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,115,105, - 122,101,32,111,102,32,115,111,117,114,99,101,32,105,110,32, - 123,33,114,125,218,5,109,116,105,109,101,122,26,98,121,116, - 101,99,111,100,101,32,105,115,32,115,116,97,108,101,32,102, - 111,114,32,123,33,114,125,218,4,115,105,122,101,108,3,0, - 0,0,255,127,255,127,3,0,41,10,218,12,77,65,71,73, - 67,95,78,85,77,66,69,82,114,48,0,0,0,114,115,0, - 0,0,218,16,95,118,101,114,98,111,115,101,95,109,101,115, - 115,97,103,101,114,100,0,0,0,114,31,0,0,0,218,8, - 69,79,70,69,114,114,111,114,114,14,0,0,0,218,8,75, - 101,121,69,114,114,111,114,114,19,0,0,0,41,11,114,54, - 0,0,0,218,12,115,111,117,114,99,101,95,115,116,97,116, - 115,114,99,0,0,0,114,35,0,0,0,90,11,101,120,99, - 95,100,101,116,97,105,108,115,90,5,109,97,103,105,99,90, - 13,114,97,119,95,116,105,109,101,115,116,97,109,112,90,8, - 114,97,119,95,115,105,122,101,114,76,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,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,25,95,118,97,108,105,100,97, - 116,101,95,98,121,116,101,99,111,100,101,95,104,101,97,100, - 101,114,158,1,0,0,115,76,0,0,0,0,11,4,1,8, - 1,10,3,4,1,8,1,8,1,12,1,12,1,12,1,8, - 1,12,1,12,1,12,1,12,1,10,1,12,1,10,1,12, - 1,10,1,12,1,8,1,10,1,2,1,16,1,14,1,6, - 2,14,1,10,1,12,1,10,1,2,1,16,1,16,1,6, - 2,14,1,10,1,6,1,114,136,0,0,0,99,4,0,0, - 0,0,0,0,0,5,0,0,0,6,0,0,0,67,0,0, - 0,115,86,0,0,0,116,0,106,1,124,0,131,1,125,4, - 116,2,124,4,116,3,131,2,114,58,116,4,106,5,100,1, - 124,2,131,2,1,0,124,3,100,2,107,9,114,52,116,6, - 106,7,124,4,124,3,131,2,1,0,124,4,83,0,110,24, - 116,8,100,3,106,9,124,2,131,1,100,4,124,1,100,5, - 124,2,144,2,131,1,130,1,100,2,83,0,41,6,122,60, - 67,111,109,112,105,108,101,32,98,121,116,101,99,111,100,101, - 32,97,115,32,114,101,116,117,114,110,101,100,32,98,121,32, - 95,118,97,108,105,100,97,116,101,95,98,121,116,101,99,111, - 100,101,95,104,101,97,100,101,114,40,41,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,114,99,0, - 0,0,114,35,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,115,0,0,0,114,130,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,100,0,0,0,114,48,0,0,0,41,5,114, - 54,0,0,0,114,99,0,0,0,114,90,0,0,0,114,91, - 0,0,0,218,4,99,111,100,101,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,17,95,99,111,109,112,105, - 108,101,95,98,121,116,101,99,111,100,101,213,1,0,0,115, - 16,0,0,0,0,2,10,1,10,1,12,1,8,1,12,1, - 6,2,12,1,114,142,0,0,0,114,60,0,0,0,99,3, - 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, - 0,0,0,115,56,0,0,0,116,0,116,1,131,1,125,3, - 124,3,106,2,116,3,124,1,131,1,131,1,1,0,124,3, - 106,2,116,3,124,2,131,1,131,1,1,0,124,3,106,2, - 116,4,106,5,124,0,131,1,131,1,1,0,124,3,83,0, - 41,1,122,80,67,111,109,112,105,108,101,32,97,32,99,111, - 100,101,32,111,98,106,101,99,116,32,105,110,116,111,32,98, - 121,116,101,99,111,100,101,32,102,111,114,32,119,114,105,116, - 105,110,103,32,111,117,116,32,116,111,32,97,32,98,121,116, - 101,45,99,111,109,112,105,108,101,100,10,32,32,32,32,102, - 105,108,101,46,41,6,218,9,98,121,116,101,97,114,114,97, - 121,114,129,0,0,0,218,6,101,120,116,101,110,100,114,17, - 0,0,0,114,137,0,0,0,90,5,100,117,109,112,115,41, - 4,114,141,0,0,0,114,127,0,0,0,114,135,0,0,0, - 114,54,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,17,95,99,111,100,101,95,116,111,95,98, - 121,116,101,99,111,100,101,225,1,0,0,115,10,0,0,0, - 0,3,8,1,14,1,14,1,16,1,114,145,0,0,0,99, - 1,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, - 67,0,0,0,115,62,0,0,0,100,1,100,2,108,0,125, - 1,116,1,106,2,124,0,131,1,106,3,125,2,124,1,106, - 4,124,2,131,1,125,3,116,1,106,5,100,2,100,3,131, - 2,125,4,124,4,106,6,124,0,106,6,124,3,100,1,25, - 0,131,1,131,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,60,0,0,0,78,84,41,7,218,8,116, - 111,107,101,110,105,122,101,114,50,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,146,0,0,0,90,21,115,111,117,114,99,101, - 95,98,121,116,101,115,95,114,101,97,100,108,105,110,101,218, - 8,101,110,99,111,100,105,110,103,90,15,110,101,119,108,105, - 110,101,95,100,101,99,111,100,101,114,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,13,100,101,99,111,100, - 101,95,115,111,117,114,99,101,235,1,0,0,115,10,0,0, - 0,0,5,8,1,12,1,10,1,12,1,114,150,0,0,0, - 41,2,114,121,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,2,0,0,0,9,0,0,0, - 19,0,0,0,67,0,0,0,115,8,1,0,0,124,1,100, - 1,107,8,114,58,100,2,125,1,116,0,124,2,100,3,131, - 2,114,58,121,14,124,2,106,1,124,0,131,1,125,1,87, - 0,110,20,4,0,116,2,107,10,114,56,1,0,1,0,1, - 0,89,0,110,2,88,0,116,3,106,4,124,0,124,2,100, - 4,124,1,144,1,131,2,125,4,100,5,124,4,95,5,124, - 2,100,1,107,8,114,146,120,54,116,6,131,0,68,0,93, - 40,92,2,125,5,125,6,124,1,106,7,116,8,124,6,131, - 1,131,1,114,98,124,5,124,0,124,1,131,2,125,2,124, - 2,124,4,95,9,80,0,113,98,87,0,100,1,83,0,124, - 3,116,10,107,8,114,212,116,0,124,2,100,6,131,2,114, - 218,121,14,124,2,106,11,124,0,131,1,125,7,87,0,110, - 20,4,0,116,2,107,10,114,198,1,0,1,0,1,0,89, - 0,113,218,88,0,124,7,114,218,103,0,124,4,95,12,110, - 6,124,3,124,4,95,12,124,4,106,12,103,0,107,2,144, - 1,114,4,124,1,144,1,114,4,116,13,124,1,131,1,100, - 7,25,0,125,8,124,4,106,12,106,14,124,8,131,1,1, - 0,124,4,83,0,41,8,97,61,1,0,0,82,101,116,117, - 114,110,32,97,32,109,111,100,117,108,101,32,115,112,101,99, - 32,98,97,115,101,100,32,111,110,32,97,32,102,105,108,101, - 32,108,111,99,97,116,105,111,110,46,10,10,32,32,32,32, - 84,111,32,105,110,100,105,99,97,116,101,32,116,104,97,116, - 32,116,104,101,32,109,111,100,117,108,101,32,105,115,32,97, - 32,112,97,99,107,97,103,101,44,32,115,101,116,10,32,32, - 32,32,115,117,98,109,111,100,117,108,101,95,115,101,97,114, - 99,104,95,108,111,99,97,116,105,111,110,115,32,116,111,32, - 97,32,108,105,115,116,32,111,102,32,100,105,114,101,99,116, - 111,114,121,32,112,97,116,104,115,46,32,32,65,110,10,32, - 32,32,32,101,109,112,116,121,32,108,105,115,116,32,105,115, - 32,115,117,102,102,105,99,105,101,110,116,44,32,116,104,111, - 117,103,104,32,105,116,115,32,110,111,116,32,111,116,104,101, - 114,119,105,115,101,32,117,115,101,102,117,108,32,116,111,32, - 116,104,101,10,32,32,32,32,105,109,112,111,114,116,32,115, - 121,115,116,101,109,46,10,10,32,32,32,32,84,104,101,32, - 108,111,97,100,101,114,32,109,117,115,116,32,116,97,107,101, - 32,97,32,115,112,101,99,32,97,115,32,105,116,115,32,111, - 110,108,121,32,95,95,105,110,105,116,95,95,40,41,32,97, - 114,103,46,10,10,32,32,32,32,78,122,9,60,117,110,107, - 110,111,119,110,62,218,12,103,101,116,95,102,105,108,101,110, - 97,109,101,218,6,111,114,105,103,105,110,84,218,10,105,115, - 95,112,97,99,107,97,103,101,114,60,0,0,0,41,15,114, - 109,0,0,0,114,152,0,0,0,114,100,0,0,0,114,115, - 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,93,0,0,0, - 114,94,0,0,0,114,121,0,0,0,218,9,95,80,79,80, - 85,76,65,84,69,114,154,0,0,0,114,151,0,0,0,114, - 38,0,0,0,218,6,97,112,112,101,110,100,41,9,114,99, - 0,0,0,90,8,108,111,99,97,116,105,111,110,114,121,0, - 0,0,114,151,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,154,0,0,0,90,7,100,105,114,110, - 97,109,101,114,4,0,0,0,114,4,0,0,0,114,5,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,252,1,0,0,115, - 60,0,0,0,0,12,8,4,4,1,10,2,2,1,14,1, - 14,1,6,8,18,1,6,3,8,1,16,1,14,1,10,1, - 6,1,6,2,4,3,8,2,10,1,2,1,14,1,14,1, - 6,2,4,1,8,2,6,1,12,1,6,1,12,1,12,2, - 114,162,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,80,0,0,0,101, - 0,90,1,100,0,90,2,100,1,90,3,100,2,90,4,100, - 3,90,5,100,4,90,6,101,7,100,5,100,6,132,0,131, - 1,90,8,101,7,100,7,100,8,132,0,131,1,90,9,101, - 7,100,14,100,10,100,11,132,1,131,1,90,10,101,7,100, - 15,100,12,100,13,132,1,131,1,90,11,100,9,83,0,41, - 16,218,21,87,105,110,100,111,119,115,82,101,103,105,115,116, - 114,121,70,105,110,100,101,114,122,62,77,101,116,97,32,112, - 97,116,104,32,102,105,110,100,101,114,32,102,111,114,32,109, - 111,100,117,108,101,115,32,100,101,99,108,97,114,101,100,32, - 105,110,32,116,104,101,32,87,105,110,100,111,119,115,32,114, - 101,103,105,115,116,114,121,46,122,59,83,111,102,116,119,97, - 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, - 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, - 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, - 110,97,109,101,125,122,65,83,111,102,116,119,97,114,101,92, - 80,121,116,104,111,110,92,80,121,116,104,111,110,67,111,114, - 101,92,123,115,121,115,95,118,101,114,115,105,111,110,125,92, - 77,111,100,117,108,101,115,92,123,102,117,108,108,110,97,109, - 101,125,92,68,101,98,117,103,70,99,2,0,0,0,0,0, - 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,50, - 0,0,0,121,14,116,0,106,1,116,0,106,2,124,1,131, - 2,83,0,4,0,116,3,107,10,114,44,1,0,1,0,1, - 0,116,0,106,1,116,0,106,4,124,1,131,2,83,0,88, - 0,100,0,83,0,41,1,78,41,5,218,7,95,119,105,110, - 114,101,103,90,7,79,112,101,110,75,101,121,90,17,72,75, - 69,89,95,67,85,82,82,69,78,84,95,85,83,69,82,114, - 40,0,0,0,90,18,72,75,69,89,95,76,79,67,65,76, - 95,77,65,67,72,73,78,69,41,2,218,3,99,108,115,218, - 3,107,101,121,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,14,95,111,112,101,110,95,114,101,103,105,115, - 116,114,121,74,2,0,0,115,8,0,0,0,0,2,2,1, - 14,1,14,1,122,36,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,46,95,111,112,101, - 110,95,114,101,103,105,115,116,114,121,99,2,0,0,0,0, - 0,0,0,6,0,0,0,16,0,0,0,67,0,0,0,115, - 116,0,0,0,124,0,106,0,114,14,124,0,106,1,125,2, - 110,6,124,0,106,2,125,2,124,2,106,3,100,1,124,1, - 100,2,100,3,116,4,106,5,100,0,100,4,133,2,25,0, - 22,0,144,2,131,0,125,3,121,38,124,0,106,6,124,3, - 131,1,143,18,125,4,116,7,106,8,124,4,100,5,131,2, - 125,5,87,0,100,0,81,0,82,0,88,0,87,0,110,20, - 4,0,116,9,107,10,114,110,1,0,1,0,1,0,100,0, - 83,0,88,0,124,5,83,0,41,6,78,114,120,0,0,0, - 90,11,115,121,115,95,118,101,114,115,105,111,110,122,5,37, - 100,46,37,100,114,57,0,0,0,114,30,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, - 48,0,0,0,114,7,0,0,0,218,12,118,101,114,115,105, - 111,110,95,105,110,102,111,114,167,0,0,0,114,164,0,0, - 0,90,10,81,117,101,114,121,86,97,108,117,101,114,40,0, - 0,0,41,6,114,165,0,0,0,114,120,0,0,0,90,12, - 114,101,103,105,115,116,114,121,95,107,101,121,114,166,0,0, - 0,90,4,104,107,101,121,218,8,102,105,108,101,112,97,116, - 104,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,16,95,115,101,97,114,99,104,95,114,101,103,105,115,116, - 114,121,81,2,0,0,115,22,0,0,0,0,2,6,1,8, - 2,6,1,10,1,22,1,2,1,12,1,26,1,14,1,6, - 1,122,38,87,105,110,100,111,119,115,82,101,103,105,115,116, - 114,121,70,105,110,100,101,114,46,95,115,101,97,114,99,104, - 95,114,101,103,105,115,116,114,121,78,99,4,0,0,0,0, - 0,0,0,8,0,0,0,14,0,0,0,67,0,0,0,115, - 122,0,0,0,124,0,106,0,124,1,131,1,125,4,124,4, - 100,0,107,8,114,22,100,0,83,0,121,12,116,1,124,4, - 131,1,1,0,87,0,110,20,4,0,116,2,107,10,114,54, - 1,0,1,0,1,0,100,0,83,0,88,0,120,60,116,3, - 131,0,68,0,93,50,92,2,125,5,125,6,124,4,106,4, - 116,5,124,6,131,1,131,1,114,64,116,6,106,7,124,1, - 124,5,124,1,124,4,131,2,100,1,124,4,144,1,131,2, - 125,7,124,7,83,0,113,64,87,0,100,0,83,0,41,2, - 78,114,153,0,0,0,41,8,114,173,0,0,0,114,39,0, - 0,0,114,40,0,0,0,114,156,0,0,0,114,93,0,0, - 0,114,94,0,0,0,114,115,0,0,0,218,16,115,112,101, - 99,95,102,114,111,109,95,108,111,97,100,101,114,41,8,114, - 165,0,0,0,114,120,0,0,0,114,35,0,0,0,218,6, - 116,97,114,103,101,116,114,172,0,0,0,114,121,0,0,0, - 114,161,0,0,0,114,159,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,9,102,105,110,100,95, - 115,112,101,99,96,2,0,0,115,26,0,0,0,0,2,10, - 1,8,1,4,1,2,1,12,1,14,1,6,1,16,1,14, - 1,6,1,10,1,8,1,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,4,0,0,0,3,0,0,0,67,0,0,0,115,36,0, - 0,0,124,0,106,0,124,1,124,2,131,2,125,3,124,3, - 100,1,107,9,114,28,124,3,106,1,83,0,110,4,100,1, - 83,0,100,1,83,0,41,2,122,108,70,105,110,100,32,109, - 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, - 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, - 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,41,2,114,176,0,0,0,114,121, - 0,0,0,41,4,114,165,0,0,0,114,120,0,0,0,114, - 35,0,0,0,114,159,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,11,102,105,110,100,95,109, - 111,100,117,108,101,112,2,0,0,115,8,0,0,0,0,7, - 12,1,8,1,8,2,122,33,87,105,110,100,111,119,115,82, - 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,41,2,78,78,41,1,78, - 41,12,114,106,0,0,0,114,105,0,0,0,114,107,0,0, - 0,114,108,0,0,0,114,170,0,0,0,114,169,0,0,0, - 114,168,0,0,0,218,11,99,108,97,115,115,109,101,116,104, - 111,100,114,167,0,0,0,114,173,0,0,0,114,176,0,0, - 0,114,177,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,163,0,0,0,62, - 2,0,0,115,20,0,0,0,8,2,4,3,4,3,4,2, - 4,2,12,7,12,15,2,1,12,15,2,1,114,163,0,0, + 114,186,0,0,0,142,3,0,0,115,6,0,0,0,0,2, + 14,1,6,1,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,2,0, + 0,0,4,0,0,0,3,0,0,0,115,36,0,0,0,116, + 0,124,0,106,1,131,1,100,1,25,0,137,0,116,2,135, + 0,102,1,100,2,100,3,132,8,116,3,68,0,131,1,131, + 1,83,0,41,4,122,49,82,101,116,117,114,110,32,84,114, + 117,101,32,105,102,32,116,104,101,32,101,120,116,101,110,115, + 105,111,110,32,109,111,100,117,108,101,32,105,115,32,97,32, + 112,97,99,107,97,103,101,46,114,29,0,0,0,99,1,0, + 0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0, + 0,0,115,26,0,0,0,124,0,93,18,125,1,136,0,100, + 0,124,1,23,0,107,2,86,0,1,0,113,2,100,1,83, + 0,41,2,114,180,0,0,0,78,114,4,0,0,0,41,2, + 114,22,0,0,0,218,6,115,117,102,102,105,120,41,1,218, + 9,102,105,108,101,95,110,97,109,101,114,4,0,0,0,114, + 5,0,0,0,250,9,60,103,101,110,101,120,112,114,62,151, + 3,0,0,115,2,0,0,0,4,1,122,49,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,97, + 108,115,62,46,60,103,101,110,101,120,112,114,62,41,4,114, + 38,0,0,0,114,35,0,0,0,218,3,97,110,121,218,18, + 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, + 69,83,41,2,114,101,0,0,0,114,120,0,0,0,114,4, + 0,0,0,41,1,114,221,0,0,0,114,5,0,0,0,114, + 154,0,0,0,148,3,0,0,115,6,0,0,0,0,2,14, + 1,12,1,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,2,0,0,0, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, + 0,41,2,122,63,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,110, + 32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,99, + 114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,106, + 101,99,116,46,78,114,4,0,0,0,41,2,114,101,0,0, + 0,114,120,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,182,0,0,0,154,3,0,0,115,2, + 0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, + 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, + 0,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, + 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, + 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, + 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,197,0,0,0, + 158,3,0,0,115,2,0,0,0,0,2,122,30,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, + 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, + 115,6,0,0,0,124,0,106,0,83,0,41,1,122,58,82, + 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, + 111,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, + 101,32,97,115,32,102,111,117,110,100,32,98,121,32,116,104, + 101,32,102,105,110,100,101,114,46,41,1,114,35,0,0,0, + 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,152,0,0,0, + 162,3,0,0,115,2,0,0,0,0,3,122,32,69,120,116, + 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 46,103,101,116,95,102,105,108,101,110,97,109,101,78,41,14, + 114,106,0,0,0,114,105,0,0,0,114,107,0,0,0,114, + 108,0,0,0,114,180,0,0,0,114,208,0,0,0,114,210, + 0,0,0,114,181,0,0,0,114,186,0,0,0,114,154,0, + 0,0,114,182,0,0,0,114,197,0,0,0,114,117,0,0, + 0,114,152,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,115, + 3,0,0,115,20,0,0,0,8,6,4,2,8,4,8,4, + 8,3,8,8,8,6,8,6,8,4,8,4,114,219,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,0,64,0,0,0,115,96,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,5,0,0,0,3,0, - 0,0,67,0,0,0,115,64,0,0,0,116,0,124,0,106, - 1,124,1,131,1,131,1,100,1,25,0,125,2,124,2,106, - 2,100,2,100,1,131,2,100,3,25,0,125,3,124,1,106, - 3,100,2,131,1,100,4,25,0,125,4,124,3,100,5,107, - 2,111,62,124,4,100,5,107,3,83,0,41,6,122,141,67, - 111,110,99,114,101,116,101,32,105,109,112,108,101,109,101,110, - 116,97,116,105,111,110,32,111,102,32,73,110,115,112,101,99, - 116,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,32,98,121,32,99,104,101,99,107,105,110,103,32,105, - 102,10,32,32,32,32,32,32,32,32,116,104,101,32,112,97, - 116,104,32,114,101,116,117,114,110,101,100,32,98,121,32,103, - 101,116,95,102,105,108,101,110,97,109,101,32,104,97,115,32, - 97,32,102,105,108,101,110,97,109,101,32,111,102,32,39,95, - 95,105,110,105,116,95,95,46,112,121,39,46,114,29,0,0, - 0,114,59,0,0,0,114,60,0,0,0,114,57,0,0,0, - 218,8,95,95,105,110,105,116,95,95,41,4,114,38,0,0, - 0,114,152,0,0,0,114,34,0,0,0,114,32,0,0,0, - 41,5,114,101,0,0,0,114,120,0,0,0,114,95,0,0, - 0,90,13,102,105,108,101,110,97,109,101,95,98,97,115,101, - 90,9,116,97,105,108,95,110,97,109,101,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,154,0,0,0,131, - 2,0,0,115,8,0,0,0,0,3,18,1,16,1,14,1, - 122,24,95,76,111,97,100,101,114,66,97,115,105,99,115,46, - 105,115,95,112,97,99,107,97,103,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,1,0,0,0,67,0,0,0,115, - 4,0,0,0,100,1,83,0,41,2,122,42,85,115,101,32, - 100,101,102,97,117,108,116,32,115,101,109,97,110,116,105,99, - 115,32,102,111,114,32,109,111,100,117,108,101,32,99,114,101, - 97,116,105,111,110,46,78,114,4,0,0,0,41,2,114,101, - 0,0,0,114,159,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,13,99,114,101,97,116,101,95, - 109,111,100,117,108,101,139,2,0,0,115,0,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,3,0,0,0,4,0,0,0,67,0,0, - 0,115,56,0,0,0,124,0,106,0,124,1,106,1,131,1, - 125,2,124,2,100,1,107,8,114,36,116,2,100,2,106,3, - 124,1,106,1,131,1,131,1,130,1,116,4,106,5,116,6, - 124,2,124,1,106,7,131,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,106,0,0,0,114,100,0, - 0,0,114,48,0,0,0,114,115,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,112,0, - 0,0,41,3,114,101,0,0,0,218,6,109,111,100,117,108, - 101,114,141,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,11,101,120,101,99,95,109,111,100,117, - 108,101,142,2,0,0,115,10,0,0,0,0,2,12,1,8, - 1,6,1,10,1,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,2,0,0,0,3,0,0, - 0,67,0,0,0,115,12,0,0,0,116,0,106,1,124,0, - 124,1,131,2,83,0,41,1,122,26,84,104,105,115,32,109, - 111,100,117,108,101,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,41,2,114,115,0,0,0,218,17,95,108,111, - 97,100,95,109,111,100,117,108,101,95,115,104,105,109,41,2, - 114,101,0,0,0,114,120,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,11,108,111,97,100,95, - 109,111,100,117,108,101,150,2,0,0,115,2,0,0,0,0, - 2,122,25,95,76,111,97,100,101,114,66,97,115,105,99,115, - 46,108,111,97,100,95,109,111,100,117,108,101,78,41,8,114, + 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,83,0,41,23,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,4,0,0,0,2,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,106,3,131,0,131,1,124,0,95,4,124,3,124,0, + 95,5,100,0,83,0,41,1,78,41,6,218,5,95,110,97, + 109,101,218,5,95,112,97,116,104,114,94,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,41,4,114,101,0,0,0,114,99,0,0,0,114,35,0, + 0,0,218,11,112,97,116,104,95,102,105,110,100,101,114,114, + 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,180, + 0,0,0,175,3,0,0,115,8,0,0,0,0,1,6,1, + 6,1,14,1,122,23,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,0, + 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, + 0,0,115,38,0,0,0,124,0,106,0,106,1,100,1,131, + 1,92,3,125,1,125,2,125,3,124,2,100,2,107,2,114, + 30,100,6,83,0,124,1,100,5,102,2,83,0,41,7,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, + 59,0,0,0,114,30,0,0,0,114,7,0,0,0,114,35, + 0,0,0,90,8,95,95,112,97,116,104,95,95,41,2,122, + 3,115,121,115,122,4,112,97,116,104,41,2,114,226,0,0, + 0,114,32,0,0,0,41,4,114,101,0,0,0,114,217,0, + 0,0,218,3,100,111,116,90,2,109,101,114,4,0,0,0, + 114,4,0,0,0,114,5,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,181,3,0,0,115,8,0,0,0,0,2,18,1, + 8,2,4,3,122,38,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,102,105,110,100,95,112,97,114,101,110, + 116,95,112,97,116,104,95,110,97,109,101,115,99,1,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,28,0,0,0,124,0,106,0,131,0,92,2,125,1, + 125,2,116,1,116,2,106,3,124,1,25,0,124,2,131,2, + 83,0,41,1,78,41,4,114,233,0,0,0,114,111,0,0, + 0,114,7,0,0,0,218,7,109,111,100,117,108,101,115,41, + 3,114,101,0,0,0,90,18,112,97,114,101,110,116,95,109, + 111,100,117,108,101,95,110,97,109,101,90,14,112,97,116,104, + 95,97,116,116,114,95,110,97,109,101,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,228,0,0,0,191,3, + 0,0,115,4,0,0,0,0,1,12,1,122,31,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,116, + 95,112,97,114,101,110,116,95,112,97,116,104,99,1,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,80,0,0,0,116,0,124,0,106,1,131,0,131,1, + 125,1,124,1,124,0,106,2,107,3,114,74,124,0,106,3, + 124,0,106,4,124,1,131,2,125,2,124,2,100,0,107,9, + 114,68,124,2,106,5,100,0,107,8,114,68,124,2,106,6, + 114,68,124,2,106,6,124,0,95,7,124,1,124,0,95,2, + 124,0,106,7,83,0,41,1,78,41,8,114,94,0,0,0, + 114,228,0,0,0,114,229,0,0,0,114,230,0,0,0,114, + 226,0,0,0,114,121,0,0,0,114,151,0,0,0,114,227, + 0,0,0,41,3,114,101,0,0,0,90,11,112,97,114,101, + 110,116,95,112,97,116,104,114,159,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,12,95,114,101, + 99,97,108,99,117,108,97,116,101,195,3,0,0,115,16,0, + 0,0,0,2,12,1,10,1,14,3,18,1,6,1,8,1, + 6,1,122,27,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,114,101,99,97,108,99,117,108,97,116,101,99, + 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, + 67,0,0,0,115,12,0,0,0,116,0,124,0,106,1,131, + 0,131,1,83,0,41,1,78,41,2,218,4,105,116,101,114, + 114,235,0,0,0,41,1,114,101,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,218,8,95,95,105, + 116,101,114,95,95,208,3,0,0,115,2,0,0,0,0,1, + 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,105,116,101,114,95,95,99,3,0,0,0,0,0, + 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,14, + 0,0,0,124,2,124,0,106,0,124,1,60,0,100,0,83, + 0,41,1,78,41,1,114,227,0,0,0,41,3,114,101,0, + 0,0,218,5,105,110,100,101,120,114,35,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,11,95, + 95,115,101,116,105,116,101,109,95,95,211,3,0,0,115,2, + 0,0,0,0,1,122,26,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,115,101,116,105,116,101,109,95, + 95,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, + 0,0,67,0,0,0,115,12,0,0,0,116,0,124,0,106, + 1,131,0,131,1,83,0,41,1,78,41,2,114,31,0,0, + 0,114,235,0,0,0,41,1,114,101,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,95, + 108,101,110,95,95,214,3,0,0,115,2,0,0,0,0,1, + 122,22,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,108,101,110,95,95,99,1,0,0,0,0,0,0, + 0,1,0,0,0,2,0,0,0,67,0,0,0,115,12,0, + 0,0,100,1,106,0,124,0,106,1,131,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,48,0,0,0,114,227, + 0,0,0,41,1,114,101,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,218,8,95,95,114,101,112, + 114,95,95,217,3,0,0,115,2,0,0,0,0,1,122,23, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,0, + 2,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, + 0,124,1,124,0,106,0,131,0,107,6,83,0,41,1,78, + 41,1,114,235,0,0,0,41,2,114,101,0,0,0,218,4, + 105,116,101,109,114,4,0,0,0,114,4,0,0,0,114,5, + 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, + 95,220,3,0,0,115,2,0,0,0,0,1,122,27,95,78, + 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, + 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, + 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,124,0,106,0,106,1,124,1,131,1,1,0,100, + 0,83,0,41,1,78,41,2,114,227,0,0,0,114,158,0, + 0,0,41,2,114,101,0,0,0,114,242,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,158,0, + 0,0,223,3,0,0,115,2,0,0,0,0,1,122,21,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,97,112, + 112,101,110,100,78,41,14,114,106,0,0,0,114,105,0,0, + 0,114,107,0,0,0,114,108,0,0,0,114,180,0,0,0, + 114,233,0,0,0,114,228,0,0,0,114,235,0,0,0,114, + 237,0,0,0,114,239,0,0,0,114,240,0,0,0,114,241, + 0,0,0,114,243,0,0,0,114,158,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, + 0,114,225,0,0,0,168,3,0,0,115,22,0,0,0,8, + 5,4,2,8,6,8,10,8,4,8,13,8,3,8,3,8, + 3,8,3,8,3,114,225,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, + 80,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, + 132,0,90,3,101,4,100,3,100,4,132,0,131,1,90,5, + 100,5,100,6,132,0,90,6,100,7,100,8,132,0,90,7, + 100,9,100,10,132,0,90,8,100,11,100,12,132,0,90,9, + 100,13,100,14,132,0,90,10,100,15,100,16,132,0,90,11, + 100,17,83,0,41,18,218,16,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,99,4,0,0,0,0,0,0, + 0,4,0,0,0,4,0,0,0,67,0,0,0,115,18,0, + 0,0,116,0,124,1,124,2,124,3,131,3,124,0,95,1, + 100,0,83,0,41,1,78,41,2,114,225,0,0,0,114,227, + 0,0,0,41,4,114,101,0,0,0,114,99,0,0,0,114, + 35,0,0,0,114,231,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,180,0,0,0,229,3,0, + 0,115,2,0,0,0,0,1,122,25,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, + 116,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, + 2,0,0,0,67,0,0,0,115,12,0,0,0,100,1,106, + 0,124,1,106,1,131,1,83,0,41,2,122,115,82,101,116, + 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, + 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, + 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, + 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, + 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, + 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, + 110,97,109,101,115,112,97,99,101,41,62,41,2,114,48,0, + 0,0,114,106,0,0,0,41,2,114,165,0,0,0,114,185, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,11,109,111,100,117,108,101,95,114,101,112,114,232, + 3,0,0,115,2,0,0,0,0,7,122,28,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, + 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,83,0,41,2,78,84,114,4,0,0,0,41, + 2,114,101,0,0,0,114,120,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,114,154,0,0,0,241, + 3,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, + 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, + 0,100,1,83,0,41,2,78,114,30,0,0,0,114,4,0, + 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,197,0, + 0,0,244,3,0,0,115,2,0,0,0,0,1,122,27,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, + 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, + 18,0,0,0,116,0,100,1,100,2,100,3,100,4,100,5, + 144,1,131,3,83,0,41,6,78,114,30,0,0,0,122,8, + 60,115,116,114,105,110,103,62,114,184,0,0,0,114,199,0, + 0,0,84,41,1,114,200,0,0,0,41,2,114,101,0,0, + 0,114,120,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,182,0,0,0,247,3,0,0,115,2, + 0,0,0,0,1,122,25,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, + 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, + 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2, + 122,42,85,115,101,32,100,101,102,97,117,108,116,32,115,101, + 109,97,110,116,105,99,115,32,102,111,114,32,109,111,100,117, + 108,101,32,99,114,101,97,116,105,111,110,46,78,114,4,0, + 0,0,41,2,114,101,0,0,0,114,159,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,181,0, + 0,0,250,3,0,0,115,0,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,2,0,0,0,1,0,0,0,67,0,0,0, + 115,4,0,0,0,100,0,83,0,41,1,78,114,4,0,0, + 0,41,2,114,101,0,0,0,114,185,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,186,0,0, + 0,253,3,0,0,115,2,0,0,0,0,1,122,28,95,78, + 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,101, + 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 26,0,0,0,116,0,106,1,100,1,124,0,106,2,131,2, + 1,0,116,0,106,3,124,0,124,1,131,2,83,0,41,2, + 122,98,76,111,97,100,32,97,32,110,97,109,101,115,112,97, + 99,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32, + 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, + 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, + 85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, + 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, + 32,32,32,32,122,38,110,97,109,101,115,112,97,99,101,32, + 109,111,100,117,108,101,32,108,111,97,100,101,100,32,119,105, + 116,104,32,112,97,116,104,32,123,33,114,125,41,4,114,115, + 0,0,0,114,130,0,0,0,114,227,0,0,0,114,187,0, + 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,188,0, + 0,0,0,4,0,0,115,6,0,0,0,0,7,6,1,8, + 1,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,78, + 41,12,114,106,0,0,0,114,105,0,0,0,114,107,0,0, + 0,114,180,0,0,0,114,178,0,0,0,114,245,0,0,0, + 114,154,0,0,0,114,197,0,0,0,114,182,0,0,0,114, + 181,0,0,0,114,186,0,0,0,114,188,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,244,0,0,0,228,3,0,0,115,16,0,0,0, + 8,1,8,3,12,9,8,3,8,3,8,3,8,3,8,3, + 114,244,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,106,0,0,0,101, + 0,90,1,100,0,90,2,100,1,90,3,101,4,100,2,100, + 3,132,0,131,1,90,5,101,4,100,4,100,5,132,0,131, + 1,90,6,101,4,100,6,100,7,132,0,131,1,90,7,101, + 4,100,8,100,9,132,0,131,1,90,8,101,4,100,17,100, + 11,100,12,132,1,131,1,90,9,101,4,100,18,100,13,100, + 14,132,1,131,1,90,10,101,4,100,19,100,15,100,16,132, + 1,131,1,90,11,100,10,83,0,41,20,218,10,80,97,116, + 104,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, + 116,104,32,102,105,110,100,101,114,32,102,111,114,32,115,121, + 115,46,112,97,116,104,32,97,110,100,32,112,97,99,107,97, + 103,101,32,95,95,112,97,116,104,95,95,32,97,116,116,114, + 105,98,117,116,101,115,46,99,1,0,0,0,0,0,0,0, + 2,0,0,0,4,0,0,0,67,0,0,0,115,42,0,0, + 0,120,36,116,0,106,1,106,2,131,0,68,0,93,22,125, + 1,116,3,124,1,100,1,131,2,114,12,124,1,106,4,131, + 0,1,0,113,12,87,0,100,2,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,218,17,105,110, + 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,78, + 41,5,114,7,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,6,118,97, + 108,117,101,115,114,109,0,0,0,114,247,0,0,0,41,2, + 114,165,0,0,0,218,6,102,105,110,100,101,114,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,247,0,0, + 0,18,4,0,0,115,6,0,0,0,0,4,16,1,10,1, + 122,28,80,97,116,104,70,105,110,100,101,114,46,105,110,118, + 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, + 0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,67, + 0,0,0,115,86,0,0,0,116,0,106,1,100,1,107,9, + 114,30,116,0,106,1,12,0,114,30,116,2,106,3,100,2, + 116,4,131,2,1,0,120,50,116,0,106,1,68,0,93,36, + 125,2,121,8,124,2,124,1,131,1,83,0,4,0,116,5, + 107,10,114,72,1,0,1,0,1,0,119,38,89,0,113,38, + 88,0,113,38,87,0,100,1,83,0,100,1,83,0,41,3, + 122,46,83,101,97,114,99,104,32,115,121,115,46,112,97,116, + 104,95,104,111,111,107,115,32,102,111,114,32,97,32,102,105, + 110,100,101,114,32,102,111,114,32,39,112,97,116,104,39,46, + 78,122,23,115,121,115,46,112,97,116,104,95,104,111,111,107, + 115,32,105,115,32,101,109,112,116,121,41,6,114,7,0,0, + 0,218,10,112,97,116,104,95,104,111,111,107,115,114,61,0, + 0,0,114,62,0,0,0,114,119,0,0,0,114,100,0,0, + 0,41,3,114,165,0,0,0,114,35,0,0,0,90,4,104, + 111,111,107,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,26, + 4,0,0,115,16,0,0,0,0,3,18,1,12,1,12,1, + 2,1,8,1,14,1,12,2,122,22,80,97,116,104,70,105, + 110,100,101,114,46,95,112,97,116,104,95,104,111,111,107,115, + 99,2,0,0,0,0,0,0,0,3,0,0,0,19,0,0, + 0,67,0,0,0,115,102,0,0,0,124,1,100,1,107,2, + 114,42,121,12,116,0,106,1,131,0,125,1,87,0,110,20, + 4,0,116,2,107,10,114,40,1,0,1,0,1,0,100,2, + 83,0,88,0,121,14,116,3,106,4,124,1,25,0,125,2, + 87,0,110,40,4,0,116,5,107,10,114,96,1,0,1,0, + 1,0,124,0,106,6,124,1,131,1,125,2,124,2,116,3, + 106,4,124,1,60,0,89,0,110,2,88,0,124,2,83,0, + 41,3,122,210,71,101,116,32,116,104,101,32,102,105,110,100, + 101,114,32,102,111,114,32,116,104,101,32,112,97,116,104,32, + 101,110,116,114,121,32,102,114,111,109,32,115,121,115,46,112, + 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, + 104,101,46,10,10,32,32,32,32,32,32,32,32,73,102,32, + 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,105, + 115,32,110,111,116,32,105,110,32,116,104,101,32,99,97,99, + 104,101,44,32,102,105,110,100,32,116,104,101,32,97,112,112, + 114,111,112,114,105,97,116,101,32,102,105,110,100,101,114,10, + 32,32,32,32,32,32,32,32,97,110,100,32,99,97,99,104, + 101,32,105,116,46,32,73,102,32,110,111,32,102,105,110,100, + 101,114,32,105,115,32,97,118,97,105,108,97,98,108,101,44, + 32,115,116,111,114,101,32,78,111,110,101,46,10,10,32,32, + 32,32,32,32,32,32,114,30,0,0,0,78,41,7,114,3, + 0,0,0,114,45,0,0,0,218,17,70,105,108,101,78,111, + 116,70,111,117,110,100,69,114,114,111,114,114,7,0,0,0, + 114,248,0,0,0,114,132,0,0,0,114,252,0,0,0,41, + 3,114,165,0,0,0,114,35,0,0,0,114,250,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,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,39,4,0,0,115,22,0,0,0,0,8, + 8,1,2,1,12,1,14,3,6,1,2,1,14,1,14,1, + 10,1,16,1,122,31,80,97,116,104,70,105,110,100,101,114, + 46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,99,3,0,0,0,0,0,0,0,6,0, + 0,0,3,0,0,0,67,0,0,0,115,82,0,0,0,116, + 0,124,2,100,1,131,2,114,26,124,2,106,1,124,1,131, + 1,92,2,125,3,125,4,110,14,124,2,106,2,124,1,131, + 1,125,3,103,0,125,4,124,3,100,0,107,9,114,60,116, + 3,106,4,124,1,124,3,131,2,83,0,116,3,106,5,124, + 1,100,0,131,2,125,5,124,4,124,5,95,6,124,5,83, + 0,41,2,78,114,118,0,0,0,41,7,114,109,0,0,0, + 114,118,0,0,0,114,177,0,0,0,114,115,0,0,0,114, + 174,0,0,0,114,155,0,0,0,114,151,0,0,0,41,6, + 114,165,0,0,0,114,120,0,0,0,114,250,0,0,0,114, + 121,0,0,0,114,122,0,0,0,114,159,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,5,0,0,0,218,16,95, + 108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,61, + 4,0,0,115,18,0,0,0,0,4,10,1,16,2,10,1, + 4,1,8,1,12,1,12,1,6,1,122,27,80,97,116,104, + 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, + 101,116,95,115,112,101,99,78,99,4,0,0,0,0,0,0, + 0,9,0,0,0,5,0,0,0,67,0,0,0,115,170,0, + 0,0,103,0,125,4,120,160,124,2,68,0,93,130,125,5, + 116,0,124,5,116,1,116,2,102,2,131,2,115,30,113,10, + 124,0,106,3,124,5,131,1,125,6,124,6,100,1,107,9, + 114,10,116,4,124,6,100,2,131,2,114,72,124,6,106,5, + 124,1,124,3,131,2,125,7,110,12,124,0,106,6,124,1, + 124,6,131,2,125,7,124,7,100,1,107,8,114,94,113,10, + 124,7,106,7,100,1,107,9,114,108,124,7,83,0,124,7, + 106,8,125,8,124,8,100,1,107,8,114,130,116,9,100,3, + 131,1,130,1,124,4,106,10,124,8,131,1,1,0,113,10, + 87,0,116,11,106,12,124,1,100,1,131,2,125,7,124,4, + 124,7,95,8,124,7,83,0,100,1,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,176,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,138,0,0, + 0,114,70,0,0,0,218,5,98,121,116,101,115,114,254,0, + 0,0,114,109,0,0,0,114,176,0,0,0,114,255,0,0, + 0,114,121,0,0,0,114,151,0,0,0,114,100,0,0,0, + 114,144,0,0,0,114,115,0,0,0,114,155,0,0,0,41, + 9,114,165,0,0,0,114,120,0,0,0,114,35,0,0,0, + 114,175,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,250,0,0, + 0,114,159,0,0,0,114,122,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,5,0,0,0,218,9,95,103,101,116, + 95,115,112,101,99,76,4,0,0,115,40,0,0,0,0,5, + 4,1,10,1,14,1,2,1,10,1,8,1,10,1,14,2, + 12,1,8,1,2,1,10,1,4,1,6,1,8,1,8,5, + 14,2,12,1,6,1,122,20,80,97,116,104,70,105,110,100, + 101,114,46,95,103,101,116,95,115,112,101,99,99,4,0,0, + 0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0, + 0,115,104,0,0,0,124,2,100,1,107,8,114,14,116,0, + 106,1,125,2,124,0,106,2,124,1,124,2,124,3,131,3, + 125,4,124,4,100,1,107,8,114,42,100,1,83,0,110,58, + 124,4,106,3,100,1,107,8,114,96,124,4,106,4,125,5, + 124,5,114,90,100,2,124,4,95,5,116,6,124,1,124,5, + 124,0,106,2,131,3,124,4,95,4,124,4,83,0,113,100, + 100,1,83,0,110,4,124,4,83,0,100,1,83,0,41,3, + 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, + 90,9,110,97,109,101,115,112,97,99,101,41,7,114,7,0, + 0,0,114,35,0,0,0,114,2,1,0,0,114,121,0,0, + 0,114,151,0,0,0,114,153,0,0,0,114,225,0,0,0, + 41,6,114,165,0,0,0,114,120,0,0,0,114,35,0,0, + 0,114,175,0,0,0,114,159,0,0,0,114,1,1,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 176,0,0,0,108,4,0,0,115,26,0,0,0,0,6,8, + 1,6,1,14,1,8,1,6,1,10,1,6,1,4,3,6, + 1,16,1,6,2,6,2,122,20,80,97,116,104,70,105,110, + 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, + 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, + 0,0,115,30,0,0,0,124,0,106,0,124,1,124,2,131, + 2,125,3,124,3,100,1,107,8,114,24,100,1,83,0,124, + 3,106,1,83,0,41,2,122,170,102,105,110,100,32,116,104, + 101,32,109,111,100,117,108,101,32,111,110,32,115,121,115,46, + 112,97,116,104,32,111,114,32,39,112,97,116,104,39,32,98, + 97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,104, + 95,104,111,111,107,115,32,97,110,100,10,32,32,32,32,32, + 32,32,32,115,121,115,46,112,97,116,104,95,105,109,112,111, + 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, + 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, + 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, + 32,32,32,78,41,2,114,176,0,0,0,114,121,0,0,0, + 41,4,114,165,0,0,0,114,120,0,0,0,114,35,0,0, + 0,114,159,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,5,0,0,0,114,177,0,0,0,132,4,0,0,115,8, + 0,0,0,0,8,12,1,8,1,4,1,122,22,80,97,116, + 104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, + 117,108,101,41,1,78,41,2,78,78,41,1,78,41,12,114, 106,0,0,0,114,105,0,0,0,114,107,0,0,0,114,108, - 0,0,0,114,154,0,0,0,114,181,0,0,0,114,186,0, - 0,0,114,188,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,179,0,0,0, - 126,2,0,0,115,10,0,0,0,8,3,4,2,8,8,8, - 3,8,8,114,179,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,18,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,19,218,12, - 83,111,117,114,99,101,76,111,97,100,101,114,99,2,0,0, - 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, - 0,115,8,0,0,0,116,0,130,1,100,1,83,0,41,2, - 122,178,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,44,32,119,104, - 101,114,101,32,112,97,116,104,32,105,115,32,97,32,115,116, - 114,46,10,10,32,32,32,32,32,32,32,32,82,97,105,115, - 101,115,32,73,79,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,218,7,73,79,69,114,114,111,114, - 41,2,114,101,0,0,0,114,35,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,10,112,97,116, - 104,95,109,116,105,109,101,157,2,0,0,115,2,0,0,0, - 0,6,122,23,83,111,117,114,99,101,76,111,97,100,101,114, - 46,112,97,116,104,95,109,116,105,109,101,99,2,0,0,0, - 0,0,0,0,2,0,0,0,3,0,0,0,67,0,0,0, - 115,14,0,0,0,100,1,124,0,106,0,124,1,131,1,105, - 1,83,0,41,2,97,170,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,32,112,97,116,104,10,32,32,32,32,32, - 32,32,32,116,111,32,98,121,32,116,104,101,32,112,97,116, - 104,32,40,115,116,114,41,46,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,73,79,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,127,0,0,0,41,1,114,191,0,0,0, - 41,2,114,101,0,0,0,114,35,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,10,112,97,116, - 104,95,115,116,97,116,115,165,2,0,0,115,2,0,0,0, - 0,11,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,4,0,0,0,3,0,0,0,67,0,0,0, - 115,12,0,0,0,124,0,106,0,124,2,124,3,131,2,83, - 0,41,1,122,228,79,112,116,105,111,110,97,108,32,109,101, - 116,104,111,100,32,119,104,105,99,104,32,119,114,105,116,101, - 115,32,100,97,116,97,32,40,98,121,116,101,115,41,32,116, - 111,32,97,32,102,105,108,101,32,112,97,116,104,32,40,97, - 32,115,116,114,41,46,10,10,32,32,32,32,32,32,32,32, - 73,109,112,108,101,109,101,110,116,105,110,103,32,116,104,105, - 115,32,109,101,116,104,111,100,32,97,108,108,111,119,115,32, - 102,111,114,32,116,104,101,32,119,114,105,116,105,110,103,32, - 111,102,32,98,121,116,101,99,111,100,101,32,102,105,108,101, - 115,46,10,10,32,32,32,32,32,32,32,32,84,104,101,32, - 115,111,117,114,99,101,32,112,97,116,104,32,105,115,32,110, - 101,101,100,101,100,32,105,110,32,111,114,100,101,114,32,116, - 111,32,99,111,114,114,101,99,116,108,121,32,116,114,97,110, - 115,102,101,114,32,112,101,114,109,105,115,115,105,111,110,115, - 10,32,32,32,32,32,32,32,32,41,1,218,8,115,101,116, - 95,100,97,116,97,41,4,114,101,0,0,0,114,91,0,0, - 0,90,10,99,97,99,104,101,95,112,97,116,104,114,54,0, + 0,0,0,114,178,0,0,0,114,247,0,0,0,114,252,0, + 0,0,114,254,0,0,0,114,255,0,0,0,114,2,1,0, + 0,114,176,0,0,0,114,177,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, + 246,0,0,0,14,4,0,0,115,22,0,0,0,8,2,4, + 2,12,8,12,13,12,22,12,15,2,1,12,31,2,1,12, + 23,2,1,114,246,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,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,5,0,0,0,5,0,0,0,7,0,0,0,115,88,0, + 0,0,103,0,125,3,120,40,124,2,68,0,93,32,92,2, + 137,0,125,4,124,3,106,0,135,0,102,1,100,1,100,2, + 132,8,124,4,68,0,131,1,131,1,1,0,113,10,87,0, + 124,3,124,0,95,1,124,1,112,58,100,3,124,0,95,2, + 100,6,124,0,95,3,116,4,131,0,124,0,95,5,116,4, + 131,0,124,0,95,6,100,5,83,0,41,7,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,2,0,0,0,3,0,0,0,51,0,0,0,115,22,0, + 0,0,124,0,93,14,125,1,124,1,136,0,102,2,86,0, + 1,0,113,2,100,0,83,0,41,1,78,114,4,0,0,0, + 41,2,114,22,0,0,0,114,220,0,0,0,41,1,114,121, + 0,0,0,114,4,0,0,0,114,5,0,0,0,114,222,0, + 0,0,161,4,0,0,115,2,0,0,0,4,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,59,0,0,0,114,29,0,0,0,78, + 114,88,0,0,0,41,7,114,144,0,0,0,218,8,95,108, + 111,97,100,101,114,115,114,35,0,0,0,218,11,95,112,97, + 116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,95, + 112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,108, + 97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,41, + 5,114,101,0,0,0,114,35,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,161,0,0,0,114,4,0,0,0,41,1, + 114,121,0,0,0,114,5,0,0,0,114,180,0,0,0,155, + 4,0,0,115,16,0,0,0,0,4,4,1,14,1,28,1, + 6,2,10,1,6,1,8,1,122,19,70,105,108,101,70,105, + 110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, + 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, + 0,0,115,10,0,0,0,100,3,124,0,95,0,100,2,83, + 0,41,4,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,29,0,0,0,78,114,88,0,0,0,41, + 1,114,5,1,0,0,41,1,114,101,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,247,0,0, + 0,169,4,0,0,115,2,0,0,0,0,2,122,28,70,105, + 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, + 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, + 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, + 42,0,0,0,124,0,106,0,124,1,131,1,125,2,124,2, + 100,1,107,8,114,26,100,1,103,0,102,2,83,0,124,2, + 106,1,124,2,106,2,112,38,103,0,102,2,83,0,41,2, + 122,197,84,114,121,32,116,111,32,102,105,110,100,32,97,32, + 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,44, + 32,111,114,32,116,104,101,32,110,97,109,101,115,112,97,99, + 101,10,32,32,32,32,32,32,32,32,112,97,99,107,97,103, + 101,32,112,111,114,116,105,111,110,115,46,32,82,101,116,117, + 114,110,115,32,40,108,111,97,100,101,114,44,32,108,105,115, + 116,45,111,102,45,112,111,114,116,105,111,110,115,41,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, + 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, + 32,32,32,32,32,32,32,78,41,3,114,176,0,0,0,114, + 121,0,0,0,114,151,0,0,0,41,3,114,101,0,0,0, + 114,120,0,0,0,114,159,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,5,0,0,0,114,118,0,0,0,175,4, + 0,0,115,8,0,0,0,0,7,10,1,8,1,8,1,122, + 22,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, + 95,108,111,97,100,101,114,99,6,0,0,0,0,0,0,0, + 7,0,0,0,7,0,0,0,67,0,0,0,115,30,0,0, + 0,124,1,124,2,124,3,131,2,125,6,116,0,124,2,124, + 3,100,1,124,6,100,2,124,4,144,2,131,2,83,0,41, + 3,78,114,121,0,0,0,114,151,0,0,0,41,1,114,162, + 0,0,0,41,7,114,101,0,0,0,114,160,0,0,0,114, + 120,0,0,0,114,35,0,0,0,90,4,115,109,115,108,114, + 175,0,0,0,114,121,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,5,0,0,0,114,2,1,0,0,187,4,0, + 0,115,6,0,0,0,0,1,10,1,12,1,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,14,0,0,0, + 15,0,0,0,67,0,0,0,115,100,1,0,0,100,1,125, + 3,124,1,106,0,100,2,131,1,100,3,25,0,125,4,121, + 24,116,1,124,0,106,2,112,34,116,3,106,4,131,0,131, + 1,106,5,125,5,87,0,110,24,4,0,116,6,107,10,114, + 66,1,0,1,0,1,0,100,10,125,5,89,0,110,2,88, + 0,124,5,124,0,106,7,107,3,114,92,124,0,106,8,131, + 0,1,0,124,5,124,0,95,7,116,9,131,0,114,114,124, + 0,106,10,125,6,124,4,106,11,131,0,125,7,110,10,124, + 0,106,12,125,6,124,4,125,7,124,7,124,6,107,6,114, + 218,116,13,124,0,106,2,124,4,131,2,125,8,120,72,124, + 0,106,14,68,0,93,54,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,152,124,0,106,16,124,10,124,1,124, + 12,124,8,103,1,124,2,131,5,83,0,113,152,87,0,116, + 17,124,8,131,1,125,3,120,90,124,0,106,14,68,0,93, + 80,92,2,125,9,125,10,116,13,124,0,106,2,124,4,124, + 9,23,0,131,2,125,12,116,18,106,19,100,6,124,12,100, + 7,100,3,144,1,131,2,1,0,124,7,124,9,23,0,124, + 6,107,6,114,226,116,15,124,12,131,1,114,226,124,0,106, + 16,124,10,124,1,124,12,100,8,124,2,131,5,83,0,113, + 226,87,0,124,3,144,1,114,96,116,18,106,19,100,9,124, + 8,131,2,1,0,116,18,106,20,124,1,100,8,131,2,125, + 13,124,8,103,1,124,13,95,21,124,13,83,0,100,8,83, + 0,41,11,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,59,0,0,0,114,57,0,0,0,114, + 29,0,0,0,114,180,0,0,0,122,9,116,114,121,105,110, + 103,32,123,125,90,9,118,101,114,98,111,115,105,116,121,78, + 122,25,112,111,115,115,105,98,108,101,32,110,97,109,101,115, + 112,97,99,101,32,102,111,114,32,123,125,114,88,0,0,0, + 41,22,114,32,0,0,0,114,39,0,0,0,114,35,0,0, + 0,114,3,0,0,0,114,45,0,0,0,114,214,0,0,0, + 114,40,0,0,0,114,5,1,0,0,218,11,95,102,105,108, + 108,95,99,97,99,104,101,114,6,0,0,0,114,8,1,0, + 0,114,89,0,0,0,114,7,1,0,0,114,28,0,0,0, + 114,4,1,0,0,114,44,0,0,0,114,2,1,0,0,114, + 46,0,0,0,114,115,0,0,0,114,130,0,0,0,114,155, + 0,0,0,114,151,0,0,0,41,14,114,101,0,0,0,114, + 120,0,0,0,114,175,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,127,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,220,0,0,0,114,160, + 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,159,0, 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,15,95,99,97,99,104,101,95,98,121,116,101,99,111, - 100,101,178,2,0,0,115,2,0,0,0,0,8,122,28,83, - 111,117,114,99,101,76,111,97,100,101,114,46,95,99,97,99, - 104,101,95,98,121,116,101,99,111,100,101,99,3,0,0,0, - 0,0,0,0,3,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,83,0,41,2,122,150,79,112,116, - 105,111,110,97,108,32,109,101,116,104,111,100,32,119,104,105, - 99,104,32,119,114,105,116,101,115,32,100,97,116,97,32,40, - 98,121,116,101,115,41,32,116,111,32,97,32,102,105,108,101, - 32,112,97,116,104,32,40,97,32,115,116,114,41,46,10,10, - 32,32,32,32,32,32,32,32,73,109,112,108,101,109,101,110, - 116,105,110,103,32,116,104,105,115,32,109,101,116,104,111,100, - 32,97,108,108,111,119,115,32,102,111,114,32,116,104,101,32, - 119,114,105,116,105,110,103,32,111,102,32,98,121,116,101,99, - 111,100,101,32,102,105,108,101,115,46,10,32,32,32,32,32, - 32,32,32,78,114,4,0,0,0,41,3,114,101,0,0,0, - 114,35,0,0,0,114,54,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,193,0,0,0,188,2, - 0,0,115,0,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,5,0,0,0,16,0,0,0,67, - 0,0,0,115,84,0,0,0,124,0,106,0,124,1,131,1, - 125,2,121,14,124,0,106,1,124,2,131,1,125,3,87,0, - 110,50,4,0,116,2,107,10,114,74,1,0,125,4,1,0, - 122,22,116,3,100,1,100,2,124,1,144,1,131,1,124,4, - 130,2,87,0,89,0,100,3,100,3,125,4,126,4,88,0, - 110,2,88,0,116,4,124,3,131,1,83,0,41,4,122,52, - 67,111,110,99,114,101,116,101,32,105,109,112,108,101,109,101, - 110,116,97,116,105,111,110,32,111,102,32,73,110,115,112,101, - 99,116,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,46,122,39,115,111,117,114,99,101,32,110,111,116, - 32,97,118,97,105,108,97,98,108,101,32,116,104,114,111,117, - 103,104,32,103,101,116,95,100,97,116,97,40,41,114,99,0, - 0,0,78,41,5,114,152,0,0,0,218,8,103,101,116,95, - 100,97,116,97,114,40,0,0,0,114,100,0,0,0,114,150, - 0,0,0,41,5,114,101,0,0,0,114,120,0,0,0,114, - 35,0,0,0,114,148,0,0,0,218,3,101,120,99,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,10,103, - 101,116,95,115,111,117,114,99,101,195,2,0,0,115,14,0, - 0,0,0,2,10,1,2,1,14,1,16,1,6,1,28,1, - 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,29,0,0,0,41,1, - 218,9,95,111,112,116,105,109,105,122,101,99,3,0,0,0, - 1,0,0,0,4,0,0,0,9,0,0,0,67,0,0,0, - 115,26,0,0,0,116,0,106,1,116,2,124,1,124,2,100, - 1,100,2,100,3,100,4,124,3,144,2,131,4,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,184,0,0,0,218,12,100,111,110,116, - 95,105,110,104,101,114,105,116,84,114,69,0,0,0,41,3, - 114,115,0,0,0,114,183,0,0,0,218,7,99,111,109,112, - 105,108,101,41,4,114,101,0,0,0,114,54,0,0,0,114, - 35,0,0,0,114,198,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,14,115,111,117,114,99,101, - 95,116,111,95,99,111,100,101,205,2,0,0,115,4,0,0, - 0,0,5,14,1,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,10,0,0,0,43, - 0,0,0,67,0,0,0,115,106,1,0,0,124,0,106,0, - 124,1,131,1,125,2,100,1,125,3,121,12,116,1,124,2, - 131,1,125,4,87,0,110,24,4,0,116,2,107,10,114,50, - 1,0,1,0,1,0,100,1,125,4,89,0,110,174,88,0, - 121,14,124,0,106,3,124,2,131,1,125,5,87,0,110,20, - 4,0,116,4,107,10,114,86,1,0,1,0,1,0,89,0, - 110,138,88,0,116,5,124,5,100,2,25,0,131,1,125,3, - 121,14,124,0,106,6,124,4,131,1,125,6,87,0,110,20, - 4,0,116,7,107,10,114,134,1,0,1,0,1,0,89,0, - 110,90,88,0,121,26,116,8,124,6,100,3,124,5,100,4, - 124,1,100,5,124,4,144,3,131,1,125,7,87,0,110,24, - 4,0,116,9,116,10,102,2,107,10,114,186,1,0,1,0, - 1,0,89,0,110,38,88,0,116,11,106,12,100,6,124,4, - 124,2,131,3,1,0,116,13,124,7,100,4,124,1,100,7, - 124,4,100,8,124,2,144,3,131,1,83,0,124,0,106,6, - 124,2,131,1,125,8,124,0,106,14,124,8,124,2,131,2, - 125,9,116,11,106,12,100,9,124,2,131,2,1,0,116,15, - 106,16,12,0,144,1,114,102,124,4,100,1,107,9,144,1, - 114,102,124,3,100,1,107,9,144,1,114,102,116,17,124,9, - 124,3,116,18,124,8,131,1,131,3,125,6,121,30,124,0, - 106,19,124,2,124,4,124,6,131,3,1,0,116,11,106,12, - 100,10,124,4,131,2,1,0,87,0,110,22,4,0,116,2, - 107,10,144,1,114,100,1,0,1,0,1,0,89,0,110,2, - 88,0,124,9,83,0,41,11,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,114,127,0,0,0,114,133, - 0,0,0,114,99,0,0,0,114,35,0,0,0,122,13,123, - 125,32,109,97,116,99,104,101,115,32,123,125,114,90,0,0, - 0,114,91,0,0,0,122,19,99,111,100,101,32,111,98,106, - 101,99,116,32,102,114,111,109,32,123,125,122,10,119,114,111, - 116,101,32,123,33,114,125,41,20,114,152,0,0,0,114,80, - 0,0,0,114,67,0,0,0,114,192,0,0,0,114,190,0, - 0,0,114,14,0,0,0,114,195,0,0,0,114,40,0,0, - 0,114,136,0,0,0,114,100,0,0,0,114,131,0,0,0, - 114,115,0,0,0,114,130,0,0,0,114,142,0,0,0,114, - 201,0,0,0,114,7,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,145, - 0,0,0,114,31,0,0,0,114,194,0,0,0,41,10,114, - 101,0,0,0,114,120,0,0,0,114,91,0,0,0,114,134, - 0,0,0,114,90,0,0,0,218,2,115,116,114,54,0,0, - 0,218,10,98,121,116,101,115,95,100,97,116,97,114,148,0, - 0,0,90,11,99,111,100,101,95,111,98,106,101,99,116,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,182, - 0,0,0,213,2,0,0,115,78,0,0,0,0,7,10,1, - 4,1,2,1,12,1,14,1,10,2,2,1,14,1,14,1, - 6,2,12,1,2,1,14,1,14,1,6,2,2,1,6,1, - 8,1,12,1,18,1,6,2,8,1,6,1,10,1,4,1, - 8,1,10,1,12,1,12,1,20,1,10,1,6,1,10,1, - 2,1,14,1,16,1,16,1,6,1,122,21,83,111,117,114, - 99,101,76,111,97,100,101,114,46,103,101,116,95,99,111,100, - 101,78,114,88,0,0,0,41,10,114,106,0,0,0,114,105, - 0,0,0,114,107,0,0,0,114,191,0,0,0,114,192,0, - 0,0,114,194,0,0,0,114,193,0,0,0,114,197,0,0, - 0,114,201,0,0,0,114,182,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 189,0,0,0,155,2,0,0,115,14,0,0,0,8,2,8, - 8,8,13,8,10,8,7,8,10,14,8,114,189,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,76,0,0,0,101,0,90,1,100,0, - 90,2,100,1,90,3,100,2,100,3,132,0,90,4,100,4, - 100,5,132,0,90,5,100,6,100,7,132,0,90,6,101,7, - 135,0,102,1,100,8,100,9,132,8,131,1,90,8,101,7, - 100,10,100,11,132,0,131,1,90,9,100,12,100,13,132,0, - 90,10,135,0,83,0,41,14,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,3,0,0,0,2,0,0,0,67,0, - 0,0,115,16,0,0,0,124,1,124,0,95,0,124,2,124, - 0,95,1,100,1,83,0,41,2,122,75,67,97,99,104,101, - 32,116,104,101,32,109,111,100,117,108,101,32,110,97,109,101, - 32,97,110,100,32,116,104,101,32,112,97,116,104,32,116,111, - 32,116,104,101,32,102,105,108,101,32,102,111,117,110,100,32, - 98,121,32,116,104,101,10,32,32,32,32,32,32,32,32,102, - 105,110,100,101,114,46,78,41,2,114,99,0,0,0,114,35, - 0,0,0,41,3,114,101,0,0,0,114,120,0,0,0,114, - 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,180,0,0,0,14,3,0,0,115,4,0,0, - 0,0,3,6,1,122,19,70,105,108,101,76,111,97,100,101, - 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, - 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, - 24,0,0,0,124,0,106,0,124,1,106,0,107,2,111,22, - 124,0,106,1,124,1,106,1,107,2,83,0,41,1,78,41, - 2,218,9,95,95,99,108,97,115,115,95,95,114,112,0,0, - 0,41,2,114,101,0,0,0,218,5,111,116,104,101,114,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,6, - 95,95,101,113,95,95,20,3,0,0,115,4,0,0,0,0, - 1,12,1,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,1, - 0,0,0,3,0,0,0,67,0,0,0,115,20,0,0,0, - 116,0,124,0,106,1,131,1,116,0,124,0,106,2,131,1, - 65,0,83,0,41,1,78,41,3,218,4,104,97,115,104,114, - 99,0,0,0,114,35,0,0,0,41,1,114,101,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 8,95,95,104,97,115,104,95,95,24,3,0,0,115,2,0, - 0,0,0,1,122,19,70,105,108,101,76,111,97,100,101,114, - 46,95,95,104,97,115,104,95,95,99,2,0,0,0,0,0, - 0,0,2,0,0,0,3,0,0,0,3,0,0,0,115,16, - 0,0,0,116,0,116,1,124,0,131,2,106,2,124,1,131, - 1,83,0,41,1,122,100,76,111,97,100,32,97,32,109,111, - 100,117,108,101,32,102,114,111,109,32,97,32,102,105,108,101, - 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, - 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,46,32,32,85,115,101,32,101,120,101,99,95, - 109,111,100,117,108,101,40,41,32,105,110,115,116,101,97,100, - 46,10,10,32,32,32,32,32,32,32,32,41,3,218,5,115, - 117,112,101,114,114,205,0,0,0,114,188,0,0,0,41,2, - 114,101,0,0,0,114,120,0,0,0,41,1,114,206,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,188,0,0,0, - 27,3,0,0,115,2,0,0,0,0,10,122,22,70,105,108, - 101,76,111,97,100,101,114,46,108,111,97,100,95,109,111,100, - 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,6,0,0,0,124,0,106, - 0,83,0,41,1,122,58,82,101,116,117,114,110,32,116,104, - 101,32,112,97,116,104,32,116,111,32,116,104,101,32,115,111, - 117,114,99,101,32,102,105,108,101,32,97,115,32,102,111,117, - 110,100,32,98,121,32,116,104,101,32,102,105,110,100,101,114, - 46,41,1,114,35,0,0,0,41,2,114,101,0,0,0,114, - 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,152,0,0,0,39,3,0,0,115,2,0,0, - 0,0,3,122,23,70,105,108,101,76,111,97,100,101,114,46, - 103,101,116,95,102,105,108,101,110,97,109,101,99,2,0,0, - 0,0,0,0,0,3,0,0,0,9,0,0,0,67,0,0, - 0,115,32,0,0,0,116,0,106,1,124,1,100,1,131,2, - 143,10,125,2,124,2,106,2,131,0,83,0,81,0,82,0, - 88,0,100,2,83,0,41,3,122,39,82,101,116,117,114,110, - 32,116,104,101,32,100,97,116,97,32,102,114,111,109,32,112, - 97,116,104,32,97,115,32,114,97,119,32,98,121,116,101,115, - 46,218,1,114,78,41,3,114,50,0,0,0,114,51,0,0, - 0,90,4,114,101,97,100,41,3,114,101,0,0,0,114,35, - 0,0,0,114,55,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,195,0,0,0,44,3,0,0, - 115,4,0,0,0,0,2,14,1,122,19,70,105,108,101,76, - 111,97,100,101,114,46,103,101,116,95,100,97,116,97,41,11, - 114,106,0,0,0,114,105,0,0,0,114,107,0,0,0,114, - 108,0,0,0,114,180,0,0,0,114,208,0,0,0,114,210, - 0,0,0,114,117,0,0,0,114,188,0,0,0,114,152,0, - 0,0,114,195,0,0,0,114,4,0,0,0,114,4,0,0, - 0,41,1,114,206,0,0,0,114,5,0,0,0,114,205,0, - 0,0,9,3,0,0,115,14,0,0,0,8,3,4,2,8, - 6,8,4,8,3,16,12,12,5,114,205,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,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,3,0,0,0,3,0,0,0,67,0,0,0,115, - 22,0,0,0,116,0,124,1,131,1,125,2,124,2,106,1, - 124,2,106,2,100,1,156,2,83,0,41,2,122,33,82,101, - 116,117,114,110,32,116,104,101,32,109,101,116,97,100,97,116, - 97,32,102,111,114,32,116,104,101,32,112,97,116,104,46,41, - 2,122,5,109,116,105,109,101,122,4,115,105,122,101,41,3, - 114,39,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,101,0,0,0,114, - 35,0,0,0,114,203,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,192,0,0,0,54,3,0, - 0,115,4,0,0,0,0,2,8,1,122,27,83,111,117,114, - 99,101,70,105,108,101,76,111,97,100,101,114,46,112,97,116, - 104,95,115,116,97,116,115,99,4,0,0,0,0,0,0,0, - 5,0,0,0,5,0,0,0,67,0,0,0,115,26,0,0, - 0,116,0,124,1,131,1,125,4,124,0,106,1,124,2,124, - 3,100,1,124,4,144,1,131,2,83,0,41,2,78,218,5, - 95,109,111,100,101,41,2,114,98,0,0,0,114,193,0,0, - 0,41,5,114,101,0,0,0,114,91,0,0,0,114,90,0, - 0,0,114,54,0,0,0,114,42,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,194,0,0,0, - 59,3,0,0,115,4,0,0,0,0,2,8,1,122,32,83, - 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, - 95,99,97,99,104,101,95,98,121,116,101,99,111,100,101,105, - 182,1,0,0,41,1,114,215,0,0,0,99,3,0,0,0, - 1,0,0,0,9,0,0,0,17,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,120,40,124,4,114,56,116,1,124,4,131, - 1,12,0,114,56,116,0,124,4,131,1,92,2,125,4,125, - 7,124,6,106,2,124,7,131,1,1,0,113,18,87,0,120, - 108,116,3,124,6,131,1,68,0,93,96,125,7,116,4,124, - 4,124,7,131,2,125,4,121,14,116,5,106,6,124,4,131, - 1,1,0,87,0,113,68,4,0,116,7,107,10,114,118,1, - 0,1,0,1,0,119,68,89,0,113,68,4,0,116,8,107, - 10,114,162,1,0,125,8,1,0,122,18,116,9,106,10,100, - 1,124,4,124,8,131,3,1,0,100,2,83,0,100,2,125, - 8,126,8,88,0,113,68,88,0,113,68,87,0,121,28,116, - 11,124,1,124,2,124,3,131,3,1,0,116,9,106,10,100, - 3,124,1,131,2,1,0,87,0,110,48,4,0,116,8,107, - 10,114,244,1,0,125,8,1,0,122,20,116,9,106,10,100, - 1,124,1,124,8,131,3,1,0,87,0,89,0,100,2,100, - 2,125,8,126,8,88,0,110,2,88,0,100,2,83,0,41, - 4,122,27,87,114,105,116,101,32,98,121,116,101,115,32,100, - 97,116,97,32,116,111,32,97,32,102,105,108,101,46,122,27, - 99,111,117,108,100,32,110,111,116,32,99,114,101,97,116,101, - 32,123,33,114,125,58,32,123,33,114,125,78,122,12,99,114, - 101,97,116,101,100,32,123,33,114,125,41,12,114,38,0,0, - 0,114,46,0,0,0,114,158,0,0,0,114,33,0,0,0, - 114,28,0,0,0,114,3,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,40,0,0,0,114,115,0,0,0,114,130,0,0, - 0,114,56,0,0,0,41,9,114,101,0,0,0,114,35,0, - 0,0,114,54,0,0,0,114,215,0,0,0,218,6,112,97, - 114,101,110,116,114,95,0,0,0,114,27,0,0,0,114,23, - 0,0,0,114,196,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,193,0,0,0,64,3,0,0, - 115,42,0,0,0,0,2,12,1,4,2,16,1,12,1,14, - 2,14,1,10,1,2,1,14,1,14,2,6,1,16,3,6, - 1,8,1,20,1,2,1,12,1,16,1,16,2,8,1,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,106,0, - 0,0,114,105,0,0,0,114,107,0,0,0,114,108,0,0, - 0,114,192,0,0,0,114,194,0,0,0,114,193,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,213,0,0,0,50,3,0,0,115,8,0, - 0,0,8,2,4,2,8,5,8,5,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,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,5,0,0,0,6,0,0, - 0,67,0,0,0,115,56,0,0,0,124,0,106,0,124,1, - 131,1,125,2,124,0,106,1,124,2,131,1,125,3,116,2, - 124,3,100,1,124,1,100,2,124,2,144,2,131,1,125,4, - 116,3,124,4,100,1,124,1,100,3,124,2,144,2,131,1, - 83,0,41,4,78,114,99,0,0,0,114,35,0,0,0,114, - 90,0,0,0,41,4,114,152,0,0,0,114,195,0,0,0, - 114,136,0,0,0,114,142,0,0,0,41,5,114,101,0,0, - 0,114,120,0,0,0,114,35,0,0,0,114,54,0,0,0, - 114,204,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,182,0,0,0,99,3,0,0,115,8,0, - 0,0,0,1,10,1,10,1,18,1,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,2,0,0,0,1,0,0,0,67,0,0,0,115,4, - 0,0,0,100,1,83,0,41,2,122,39,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,116,104,101,114,101,32, - 105,115,32,110,111,32,115,111,117,114,99,101,32,99,111,100, - 101,46,78,114,4,0,0,0,41,2,114,101,0,0,0,114, - 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,197,0,0,0,105,3,0,0,115,2,0,0, - 0,0,2,122,31,83,111,117,114,99,101,108,101,115,115,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, - 117,114,99,101,78,41,6,114,106,0,0,0,114,105,0,0, - 0,114,107,0,0,0,114,108,0,0,0,114,182,0,0,0, - 114,197,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,218,0,0,0,95,3, - 0,0,115,6,0,0,0,8,2,4,2,8,6,114,218,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,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,218,19,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,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,3,0,0,0,2,0,0,0,67, - 0,0,0,115,16,0,0,0,124,1,124,0,95,0,124,2, - 124,0,95,1,100,0,83,0,41,1,78,41,2,114,99,0, - 0,0,114,35,0,0,0,41,3,114,101,0,0,0,114,99, - 0,0,0,114,35,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,180,0,0,0,122,3,0,0, - 115,4,0,0,0,0,1,6,1,122,28,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, - 95,105,110,105,116,95,95,99,2,0,0,0,0,0,0,0, - 2,0,0,0,2,0,0,0,67,0,0,0,115,24,0,0, - 0,124,0,106,0,124,1,106,0,107,2,111,22,124,0,106, - 1,124,1,106,1,107,2,83,0,41,1,78,41,2,114,206, - 0,0,0,114,112,0,0,0,41,2,114,101,0,0,0,114, - 207,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,208,0,0,0,126,3,0,0,115,4,0,0, - 0,0,1,12,1,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,1,0,0,0,3,0, - 0,0,67,0,0,0,115,20,0,0,0,116,0,124,0,106, - 1,131,1,116,0,124,0,106,2,131,1,65,0,83,0,41, - 1,78,41,3,114,209,0,0,0,114,99,0,0,0,114,35, - 0,0,0,41,1,114,101,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,210,0,0,0,130,3, - 0,0,115,2,0,0,0,0,1,122,28,69,120,116,101,110, - 115,105,111,110,70,105,108,101,76,111,97,100,101,114,46,95, - 95,104,97,115,104,95,95,99,2,0,0,0,0,0,0,0, - 3,0,0,0,4,0,0,0,67,0,0,0,115,36,0,0, - 0,116,0,106,1,116,2,106,3,124,1,131,2,125,2,116, - 0,106,4,100,1,124,1,106,5,124,0,106,6,131,3,1, - 0,124,2,83,0,41,2,122,38,67,114,101,97,116,101,32, - 97,110,32,117,110,105,116,105,97,108,105,122,101,100,32,101, - 120,116,101,110,115,105,111,110,32,109,111,100,117,108,101,122, - 38,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, - 101,32,123,33,114,125,32,108,111,97,100,101,100,32,102,114, - 111,109,32,123,33,114,125,41,7,114,115,0,0,0,114,183, - 0,0,0,114,140,0,0,0,90,14,99,114,101,97,116,101, - 95,100,121,110,97,109,105,99,114,130,0,0,0,114,99,0, - 0,0,114,35,0,0,0,41,3,114,101,0,0,0,114,159, - 0,0,0,114,185,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,181,0,0,0,133,3,0,0, - 115,10,0,0,0,0,2,4,1,10,1,6,1,12,1,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,2,0,0,0,4, - 0,0,0,67,0,0,0,115,36,0,0,0,116,0,106,1, - 116,2,106,3,124,1,131,2,1,0,116,0,106,4,100,1, - 124,0,106,5,124,0,106,6,131,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, - 115,0,0,0,114,183,0,0,0,114,140,0,0,0,90,12, - 101,120,101,99,95,100,121,110,97,109,105,99,114,130,0,0, - 0,114,99,0,0,0,114,35,0,0,0,41,2,114,101,0, - 0,0,114,185,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,186,0,0,0,141,3,0,0,115, - 6,0,0,0,0,2,14,1,6,1,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,2,0,0,0,4,0,0,0,3,0,0,0, - 115,36,0,0,0,116,0,124,0,106,1,131,1,100,1,25, - 0,137,0,116,2,135,0,102,1,100,2,100,3,132,8,116, - 3,68,0,131,1,131,1,83,0,41,4,122,49,82,101,116, - 117,114,110,32,84,114,117,101,32,105,102,32,116,104,101,32, - 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, - 32,105,115,32,97,32,112,97,99,107,97,103,101,46,114,29, - 0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0, - 4,0,0,0,51,0,0,0,115,26,0,0,0,124,0,93, - 18,125,1,136,0,100,0,124,1,23,0,107,2,86,0,1, - 0,113,2,100,1,83,0,41,2,114,180,0,0,0,78,114, - 4,0,0,0,41,2,114,22,0,0,0,218,6,115,117,102, - 102,105,120,41,1,218,9,102,105,108,101,95,110,97,109,101, - 114,4,0,0,0,114,5,0,0,0,250,9,60,103,101,110, - 101,120,112,114,62,150,3,0,0,115,2,0,0,0,4,1, - 122,49,69,120,116,101,110,115,105,111,110,70,105,108,101,76, - 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, - 46,60,108,111,99,97,108,115,62,46,60,103,101,110,101,120, - 112,114,62,41,4,114,38,0,0,0,114,35,0,0,0,218, - 3,97,110,121,218,18,69,88,84,69,78,83,73,79,78,95, - 83,85,70,70,73,88,69,83,41,2,114,101,0,0,0,114, - 120,0,0,0,114,4,0,0,0,41,1,114,221,0,0,0, - 114,5,0,0,0,114,154,0,0,0,147,3,0,0,115,6, - 0,0,0,0,2,14,1,12,1,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,2,0,0,0,1,0,0,0,67,0,0,0,115,4, - 0,0,0,100,1,83,0,41,2,122,63,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,97,110,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,99,97, - 110,110,111,116,32,99,114,101,97,116,101,32,97,32,99,111, - 100,101,32,111,98,106,101,99,116,46,78,114,4,0,0,0, - 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,182,0,0,0, - 153,3,0,0,115,2,0,0,0,0,2,122,28,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, - 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, - 0,0,0,100,1,83,0,41,2,122,53,82,101,116,117,114, - 110,32,78,111,110,101,32,97,115,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,115,32,104,97,118,101, - 32,110,111,32,115,111,117,114,99,101,32,99,111,100,101,46, - 78,114,4,0,0,0,41,2,114,101,0,0,0,114,120,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,197,0,0,0,157,3,0,0,115,2,0,0,0,0, - 2,122,30,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,46,103,101,116,95,115,111,117,114,99, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,6,0,0,0,124,0,106,0,83, - 0,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, - 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, - 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, - 1,114,35,0,0,0,41,2,114,101,0,0,0,114,120,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,152,0,0,0,161,3,0,0,115,2,0,0,0,0, - 3,122,32,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,46,103,101,116,95,102,105,108,101,110, - 97,109,101,78,41,14,114,106,0,0,0,114,105,0,0,0, - 114,107,0,0,0,114,108,0,0,0,114,180,0,0,0,114, - 208,0,0,0,114,210,0,0,0,114,181,0,0,0,114,186, - 0,0,0,114,154,0,0,0,114,182,0,0,0,114,197,0, - 0,0,114,117,0,0,0,114,152,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,219,0,0,0,114,3,0,0,115,20,0,0,0,8,6, - 4,2,8,4,8,4,8,3,8,8,8,6,8,6,8,4, - 8,4,114,219,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,96,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,83, - 0,41,23,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,4,0,0,0,2,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,106,3,131,0,131,1,124,0, - 95,4,124,3,124,0,95,5,100,0,83,0,41,1,78,41, - 6,218,5,95,110,97,109,101,218,5,95,112,97,116,104,114, - 94,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,41,4,114,101,0,0,0,114,99, - 0,0,0,114,35,0,0,0,218,11,112,97,116,104,95,102, - 105,110,100,101,114,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,180,0,0,0,174,3,0,0,115,8,0, - 0,0,0,1,6,1,6,1,14,1,122,23,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,105,110,105, - 116,95,95,99,1,0,0,0,0,0,0,0,4,0,0,0, - 3,0,0,0,67,0,0,0,115,38,0,0,0,124,0,106, - 0,106,1,100,1,131,1,92,3,125,1,125,2,125,3,124, - 2,100,2,107,2,114,30,100,6,83,0,124,1,100,5,102, - 2,83,0,41,7,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,59,0,0,0,114,30,0,0,0,114, - 7,0,0,0,114,35,0,0,0,90,8,95,95,112,97,116, - 104,95,95,41,2,122,3,115,121,115,122,4,112,97,116,104, - 41,2,114,226,0,0,0,114,32,0,0,0,41,4,114,101, - 0,0,0,114,217,0,0,0,218,3,100,111,116,90,2,109, - 101,114,4,0,0,0,114,4,0,0,0,114,5,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,180,3,0,0,115,8,0, - 0,0,0,2,18,1,8,2,4,3,122,38,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,102,105,110,100, - 95,112,97,114,101,110,116,95,112,97,116,104,95,110,97,109, - 101,115,99,1,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,67,0,0,0,115,28,0,0,0,124,0,106,0, - 131,0,92,2,125,1,125,2,116,1,116,2,106,3,124,1, - 25,0,124,2,131,2,83,0,41,1,78,41,4,114,233,0, - 0,0,114,111,0,0,0,114,7,0,0,0,218,7,109,111, - 100,117,108,101,115,41,3,114,101,0,0,0,90,18,112,97, - 114,101,110,116,95,109,111,100,117,108,101,95,110,97,109,101, - 90,14,112,97,116,104,95,97,116,116,114,95,110,97,109,101, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 228,0,0,0,190,3,0,0,115,4,0,0,0,0,1,12, - 1,122,31,95,78,97,109,101,115,112,97,99,101,80,97,116, - 104,46,95,103,101,116,95,112,97,114,101,110,116,95,112,97, - 116,104,99,1,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,67,0,0,0,115,80,0,0,0,116,0,124,0, - 106,1,131,0,131,1,125,1,124,1,124,0,106,2,107,3, - 114,74,124,0,106,3,124,0,106,4,124,1,131,2,125,2, - 124,2,100,0,107,9,114,68,124,2,106,5,100,0,107,8, - 114,68,124,2,106,6,114,68,124,2,106,6,124,0,95,7, - 124,1,124,0,95,2,124,0,106,7,83,0,41,1,78,41, - 8,114,94,0,0,0,114,228,0,0,0,114,229,0,0,0, - 114,230,0,0,0,114,226,0,0,0,114,121,0,0,0,114, - 151,0,0,0,114,227,0,0,0,41,3,114,101,0,0,0, - 90,11,112,97,114,101,110,116,95,112,97,116,104,114,159,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,12,95,114,101,99,97,108,99,117,108,97,116,101,194, - 3,0,0,115,16,0,0,0,0,2,12,1,10,1,14,3, - 18,1,6,1,8,1,6,1,122,27,95,78,97,109,101,115, - 112,97,99,101,80,97,116,104,46,95,114,101,99,97,108,99, - 117,108,97,116,101,99,1,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,115,12,0,0,0,116, - 0,124,0,106,1,131,0,131,1,83,0,41,1,78,41,2, - 218,4,105,116,101,114,114,235,0,0,0,41,1,114,101,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,8,95,95,105,116,101,114,95,95,207,3,0,0,115, - 2,0,0,0,0,1,122,23,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,105,116,101,114,95,95,99, - 3,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0, - 67,0,0,0,115,14,0,0,0,124,2,124,0,106,0,124, - 1,60,0,100,0,83,0,41,1,78,41,1,114,227,0,0, - 0,41,3,114,101,0,0,0,218,5,105,110,100,101,120,114, - 35,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,11,95,95,115,101,116,105,116,101,109,95,95, - 210,3,0,0,115,2,0,0,0,0,1,122,26,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,95,115,101, - 116,105,116,101,109,95,95,99,1,0,0,0,0,0,0,0, - 1,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, - 0,116,0,124,0,106,1,131,0,131,1,83,0,41,1,78, - 41,2,114,31,0,0,0,114,235,0,0,0,41,1,114,101, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,7,95,95,108,101,110,95,95,213,3,0,0,115, - 2,0,0,0,0,1,122,22,95,78,97,109,101,115,112,97, - 99,101,80,97,116,104,46,95,95,108,101,110,95,95,99,1, + 0,114,176,0,0,0,192,4,0,0,115,70,0,0,0,0, + 5,4,1,14,1,2,1,24,1,14,1,10,1,10,1,8, + 1,6,2,6,1,6,1,10,2,6,1,4,2,8,1,12, + 1,16,1,8,1,10,1,8,1,24,4,8,2,16,1,16, + 1,18,1,12,1,8,1,10,1,12,1,6,1,12,1,12, + 1,8,1,4,1,122,20,70,105,108,101,70,105,110,100,101, + 114,46,102,105,110,100,95,115,112,101,99,99,1,0,0,0, + 0,0,0,0,9,0,0,0,13,0,0,0,67,0,0,0, + 115,194,0,0,0,124,0,106,0,125,1,121,22,116,1,106, + 2,124,1,112,22,116,1,106,3,131,0,131,1,125,2,87, + 0,110,30,4,0,116,4,116,5,116,6,102,3,107,10,114, + 58,1,0,1,0,1,0,103,0,125,2,89,0,110,2,88, + 0,116,7,106,8,106,9,100,1,131,1,115,84,116,10,124, + 2,131,1,124,0,95,11,110,78,116,10,131,0,125,3,120, + 64,124,2,68,0,93,56,125,4,124,4,106,12,100,2,131, + 1,92,3,125,5,125,6,125,7,124,6,114,138,100,3,106, + 13,124,5,124,7,106,14,131,0,131,2,125,8,110,4,124, + 5,125,8,124,3,106,15,124,8,131,1,1,0,113,96,87, + 0,124,3,124,0,95,11,116,7,106,8,106,9,116,16,131, + 1,114,190,100,4,100,5,132,0,124,2,68,0,131,1,124, + 0,95,17,100,6,83,0,41,7,122,68,70,105,108,108,32, + 116,104,101,32,99,97,99,104,101,32,111,102,32,112,111,116, + 101,110,116,105,97,108,32,109,111,100,117,108,101,115,32,97, + 110,100,32,112,97,99,107,97,103,101,115,32,102,111,114,32, + 116,104,105,115,32,100,105,114,101,99,116,111,114,121,46,114, + 0,0,0,0,114,59,0,0,0,122,5,123,125,46,123,125, + 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, + 0,83,0,0,0,115,20,0,0,0,104,0,124,0,93,12, + 125,1,124,1,106,0,131,0,146,2,113,4,83,0,114,4, + 0,0,0,41,1,114,89,0,0,0,41,2,114,22,0,0, + 0,90,2,102,110,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,250,9,60,115,101,116,99,111,109,112,62,13, + 5,0,0,115,2,0,0,0,6,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,35,0,0,0,114,3,0, + 0,0,90,7,108,105,115,116,100,105,114,114,45,0,0,0, + 114,253,0,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,7,0,0,0,114, + 8,0,0,0,114,9,0,0,0,114,6,1,0,0,114,7, + 1,0,0,114,84,0,0,0,114,48,0,0,0,114,89,0, + 0,0,218,3,97,100,100,114,10,0,0,0,114,8,1,0, + 0,41,9,114,101,0,0,0,114,35,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,242, + 0,0,0,114,99,0,0,0,114,232,0,0,0,114,220,0, + 0,0,90,8,110,101,119,95,110,97,109,101,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,10,1,0,0, + 240,4,0,0,115,34,0,0,0,0,2,6,1,2,1,22, + 1,20,3,10,3,12,1,12,7,6,1,10,1,16,1,4, + 1,18,2,4,1,14,1,6,1,12,1,122,22,70,105,108, + 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, + 99,104,101,99,1,0,0,0,0,0,0,0,3,0,0,0, + 3,0,0,0,7,0,0,0,115,18,0,0,0,135,0,135, + 1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41, + 3,97,20,1,0,0,65,32,99,108,97,115,115,32,109,101, + 116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,114, + 110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,32, + 117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,95, + 104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,105, + 99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,97, + 110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,103, + 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,108, + 111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,112, + 97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,108, + 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, + 101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116, + 104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,111, + 110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,115, + 32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121, + 44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, + 10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,46, + 10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,0, + 0,0,0,1,0,0,0,4,0,0,0,19,0,0,0,115, + 32,0,0,0,116,0,124,0,131,1,115,22,116,1,100,1, + 100,2,124,0,144,1,131,1,130,1,136,0,124,0,136,1, + 140,1,83,0,41,3,122,45,80,97,116,104,32,104,111,111, + 107,32,102,111,114,32,105,109,112,111,114,116,108,105,98,46, + 109,97,99,104,105,110,101,114,121,46,70,105,108,101,70,105, + 110,100,101,114,46,122,30,111,110,108,121,32,100,105,114,101, + 99,116,111,114,105,101,115,32,97,114,101,32,115,117,112,112, + 111,114,116,101,100,114,35,0,0,0,41,2,114,46,0,0, + 0,114,100,0,0,0,41,1,114,35,0,0,0,41,2,114, + 165,0,0,0,114,9,1,0,0,114,4,0,0,0,114,5, + 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,25,5,0, + 0,115,6,0,0,0,0,2,8,1,14,1,122,54,70,105, + 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, + 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, + 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, + 110,100,101,114,114,4,0,0,0,41,3,114,165,0,0,0, + 114,9,1,0,0,114,15,1,0,0,114,4,0,0,0,41, + 2,114,165,0,0,0,114,9,1,0,0,114,5,0,0,0, + 218,9,112,97,116,104,95,104,111,111,107,15,5,0,0,115, + 4,0,0,0,0,10,14,6,122,20,70,105,108,101,70,105, + 110,100,101,114,46,112,97,116,104,95,104,111,111,107,99,1, 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, 0,0,0,115,12,0,0,0,100,1,106,0,124,0,106,1, - 131,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, - 48,0,0,0,114,227,0,0,0,41,1,114,101,0,0,0, + 131,1,83,0,41,2,78,122,16,70,105,108,101,70,105,110, + 100,101,114,40,123,33,114,125,41,41,2,114,48,0,0,0, + 114,35,0,0,0,41,1,114,101,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,5,0,0,0,114,241,0,0,0, + 33,5,0,0,115,2,0,0,0,0,1,122,19,70,105,108, + 101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,95, + 41,1,78,41,15,114,106,0,0,0,114,105,0,0,0,114, + 107,0,0,0,114,108,0,0,0,114,180,0,0,0,114,247, + 0,0,0,114,124,0,0,0,114,177,0,0,0,114,118,0, + 0,0,114,2,1,0,0,114,176,0,0,0,114,10,1,0, + 0,114,178,0,0,0,114,16,1,0,0,114,241,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 5,0,0,0,114,3,1,0,0,146,4,0,0,115,20,0, + 0,0,8,7,4,2,8,14,8,4,4,2,8,12,8,5, + 10,48,8,31,12,18,114,3,1,0,0,99,4,0,0,0, + 0,0,0,0,6,0,0,0,11,0,0,0,67,0,0,0, + 115,148,0,0,0,124,0,106,0,100,1,131,1,125,4,124, + 0,106,0,100,2,131,1,125,5,124,4,115,66,124,5,114, + 36,124,5,106,1,125,4,110,30,124,2,124,3,107,2,114, + 56,116,2,124,1,124,2,131,2,125,4,110,10,116,3,124, + 1,124,2,131,2,125,4,124,5,115,86,116,4,124,1,124, + 2,100,3,124,4,144,1,131,2,125,5,121,36,124,5,124, + 0,100,2,60,0,124,4,124,0,100,1,60,0,124,2,124, + 0,100,4,60,0,124,3,124,0,100,5,60,0,87,0,110, + 20,4,0,116,5,107,10,114,142,1,0,1,0,1,0,89, + 0,110,2,88,0,100,0,83,0,41,6,78,218,10,95,95, + 108,111,97,100,101,114,95,95,218,8,95,95,115,112,101,99, + 95,95,114,121,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,121,0,0,0,114,218,0,0,0,114,213, + 0,0,0,114,162,0,0,0,218,9,69,120,99,101,112,116, + 105,111,110,41,6,90,2,110,115,114,99,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,121,0,0,0,114,159,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,218,14,95,102, + 105,120,95,117,112,95,109,111,100,117,108,101,39,5,0,0, + 115,34,0,0,0,0,2,10,1,10,1,4,1,4,1,8, + 1,8,1,12,2,10,1,4,1,16,1,2,1,8,1,8, + 1,8,1,12,1,14,2,114,21,1,0,0,99,0,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, + 0,115,38,0,0,0,116,0,116,1,106,2,131,0,102,2, + 125,0,116,3,116,4,102,2,125,1,116,5,116,6,102,2, + 125,2,124,0,124,1,124,2,103,3,83,0,41,1,122,95, + 82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111, + 102,32,102,105,108,101,45,98,97,115,101,100,32,109,111,100, + 117,108,101,32,108,111,97,100,101,114,115,46,10,10,32,32, + 32,32,69,97,99,104,32,105,116,101,109,32,105,115,32,97, + 32,116,117,112,108,101,32,40,108,111,97,100,101,114,44,32, + 115,117,102,102,105,120,101,115,41,46,10,32,32,32,32,41, + 7,114,219,0,0,0,114,140,0,0,0,218,18,101,120,116, + 101,110,115,105,111,110,95,115,117,102,102,105,120,101,115,114, + 213,0,0,0,114,85,0,0,0,114,218,0,0,0,114,75, + 0,0,0,41,3,90,10,101,120,116,101,110,115,105,111,110, + 115,90,6,115,111,117,114,99,101,90,8,98,121,116,101,99, + 111,100,101,114,4,0,0,0,114,4,0,0,0,114,5,0, + 0,0,114,156,0,0,0,62,5,0,0,115,8,0,0,0, + 0,5,12,1,8,1,8,1,114,156,0,0,0,99,1,0, + 0,0,0,0,0,0,12,0,0,0,12,0,0,0,67,0, + 0,0,115,188,1,0,0,124,0,97,0,116,0,106,1,97, + 1,116,0,106,2,97,2,116,1,106,3,116,4,25,0,125, + 1,120,56,100,26,68,0,93,48,125,2,124,2,116,1,106, + 3,107,7,114,58,116,0,106,5,124,2,131,1,125,3,110, + 10,116,1,106,3,124,2,25,0,125,3,116,6,124,1,124, + 2,124,3,131,3,1,0,113,32,87,0,100,5,100,6,103, + 1,102,2,100,7,100,8,100,6,103,2,102,2,102,2,125, + 4,120,118,124,4,68,0,93,102,92,2,125,5,125,6,116, + 7,100,9,100,10,132,0,124,6,68,0,131,1,131,1,115, + 142,116,8,130,1,124,6,100,11,25,0,125,7,124,5,116, + 1,106,3,107,6,114,174,116,1,106,3,124,5,25,0,125, + 8,80,0,113,112,121,16,116,0,106,5,124,5,131,1,125, + 8,80,0,87,0,113,112,4,0,116,9,107,10,114,212,1, + 0,1,0,1,0,119,112,89,0,113,112,88,0,113,112,87, + 0,116,9,100,12,131,1,130,1,116,6,124,1,100,13,124, + 8,131,3,1,0,116,6,124,1,100,14,124,7,131,3,1, + 0,116,6,124,1,100,15,100,16,106,10,124,6,131,1,131, + 3,1,0,121,14,116,0,106,5,100,17,131,1,125,9,87, + 0,110,26,4,0,116,9,107,10,144,1,114,52,1,0,1, + 0,1,0,100,18,125,9,89,0,110,2,88,0,116,6,124, + 1,100,17,124,9,131,3,1,0,116,0,106,5,100,19,131, + 1,125,10,116,6,124,1,100,19,124,10,131,3,1,0,124, + 5,100,7,107,2,144,1,114,120,116,0,106,5,100,20,131, + 1,125,11,116,6,124,1,100,21,124,11,131,3,1,0,116, + 6,124,1,100,22,116,11,131,0,131,3,1,0,116,12,106, + 13,116,2,106,14,131,0,131,1,1,0,124,5,100,7,107, + 2,144,1,114,184,116,15,106,16,100,23,131,1,1,0,100, + 24,116,12,107,6,144,1,114,184,100,25,116,17,95,18,100, + 18,83,0,41,27,122,205,83,101,116,117,112,32,116,104,101, + 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, + 114,116,101,114,115,32,102,111,114,32,105,109,112,111,114,116, + 108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,103, + 32,110,101,101,100,101,100,10,32,32,32,32,98,117,105,108, + 116,45,105,110,32,109,111,100,117,108,101,115,32,97,110,100, + 32,105,110,106,101,99,116,105,110,103,32,116,104,101,109,32, + 105,110,116,111,32,116,104,101,32,103,108,111,98,97,108,32, + 110,97,109,101,115,112,97,99,101,46,10,10,32,32,32,32, + 79,116,104,101,114,32,99,111,109,112,111,110,101,110,116,115, + 32,97,114,101,32,101,120,116,114,97,99,116,101,100,32,102, + 114,111,109,32,116,104,101,32,99,111,114,101,32,98,111,111, + 116,115,116,114,97,112,32,109,111,100,117,108,101,46,10,10, + 32,32,32,32,114,50,0,0,0,114,61,0,0,0,218,8, + 98,117,105,108,116,105,110,115,114,137,0,0,0,90,5,112, + 111,115,105,120,250,1,47,218,2,110,116,250,1,92,99,1, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115, + 0,0,0,115,26,0,0,0,124,0,93,18,125,1,116,0, + 124,1,131,1,100,0,107,2,86,0,1,0,113,2,100,1, + 83,0,41,2,114,29,0,0,0,78,41,1,114,31,0,0, + 0,41,2,114,22,0,0,0,114,78,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,5,0,0,0,114,222,0,0, + 0,98,5,0,0,115,2,0,0,0,4,0,122,25,95,115, + 101,116,117,112,46,60,108,111,99,97,108,115,62,46,60,103, + 101,110,101,120,112,114,62,114,60,0,0,0,122,30,105,109, + 112,111,114,116,108,105,98,32,114,101,113,117,105,114,101,115, + 32,112,111,115,105,120,32,111,114,32,110,116,114,3,0,0, + 0,114,25,0,0,0,114,21,0,0,0,114,30,0,0,0, + 90,7,95,116,104,114,101,97,100,78,90,8,95,119,101,97, + 107,114,101,102,90,6,119,105,110,114,101,103,114,164,0,0, + 0,114,6,0,0,0,122,4,46,112,121,119,122,6,95,100, + 46,112,121,100,84,41,4,122,3,95,105,111,122,9,95,119, + 97,114,110,105,110,103,115,122,8,98,117,105,108,116,105,110, + 115,122,7,109,97,114,115,104,97,108,41,19,114,115,0,0, + 0,114,7,0,0,0,114,140,0,0,0,114,234,0,0,0, + 114,106,0,0,0,90,18,95,98,117,105,108,116,105,110,95, + 102,114,111,109,95,110,97,109,101,114,110,0,0,0,218,3, + 97,108,108,218,14,65,115,115,101,114,116,105,111,110,69,114, + 114,111,114,114,100,0,0,0,114,26,0,0,0,114,11,0, + 0,0,114,224,0,0,0,114,144,0,0,0,114,22,1,0, + 0,114,85,0,0,0,114,158,0,0,0,114,163,0,0,0, + 114,168,0,0,0,41,12,218,17,95,98,111,111,116,115,116, + 114,97,112,95,109,111,100,117,108,101,90,11,115,101,108,102, + 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110, + 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109, + 111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108, + 115,90,10,98,117,105,108,116,105,110,95,111,115,114,21,0, + 0,0,114,25,0,0,0,90,9,111,115,95,109,111,100,117, + 108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108, + 101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108, + 101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101, 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 8,95,95,114,101,112,114,95,95,216,3,0,0,115,2,0, - 0,0,0,1,122,23,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,95,114,101,112,114,95,95,99,2,0, - 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, - 0,0,115,12,0,0,0,124,1,124,0,106,0,131,0,107, - 6,83,0,41,1,78,41,1,114,235,0,0,0,41,2,114, - 101,0,0,0,218,4,105,116,101,109,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,12,95,95,99,111,110, - 116,97,105,110,115,95,95,219,3,0,0,115,2,0,0,0, - 0,1,122,27,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,95,99,111,110,116,97,105,110,115,95,95,99, - 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, - 67,0,0,0,115,16,0,0,0,124,0,106,0,106,1,124, - 1,131,1,1,0,100,0,83,0,41,1,78,41,2,114,227, - 0,0,0,114,158,0,0,0,41,2,114,101,0,0,0,114, - 242,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,158,0,0,0,222,3,0,0,115,2,0,0, - 0,0,1,122,21,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,97,112,112,101,110,100,78,41,14,114,106,0, - 0,0,114,105,0,0,0,114,107,0,0,0,114,108,0,0, - 0,114,180,0,0,0,114,233,0,0,0,114,228,0,0,0, - 114,235,0,0,0,114,237,0,0,0,114,239,0,0,0,114, - 240,0,0,0,114,241,0,0,0,114,243,0,0,0,114,158, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,225,0,0,0,167,3,0,0, - 115,22,0,0,0,8,5,4,2,8,6,8,10,8,4,8, - 13,8,3,8,3,8,3,8,3,8,3,114,225,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,80,0,0,0,101,0,90,1,100,0, - 90,2,100,1,100,2,132,0,90,3,101,4,100,3,100,4, - 132,0,131,1,90,5,100,5,100,6,132,0,90,6,100,7, - 100,8,132,0,90,7,100,9,100,10,132,0,90,8,100,11, - 100,12,132,0,90,9,100,13,100,14,132,0,90,10,100,15, - 100,16,132,0,90,11,100,17,83,0,41,18,218,16,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,99,4, - 0,0,0,0,0,0,0,4,0,0,0,4,0,0,0,67, - 0,0,0,115,18,0,0,0,116,0,124,1,124,2,124,3, - 131,3,124,0,95,1,100,0,83,0,41,1,78,41,2,114, - 225,0,0,0,114,227,0,0,0,41,4,114,101,0,0,0, - 114,99,0,0,0,114,35,0,0,0,114,231,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,180, - 0,0,0,228,3,0,0,115,2,0,0,0,0,1,122,25, - 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, - 46,95,95,105,110,105,116,95,95,99,2,0,0,0,0,0, - 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,12, - 0,0,0,100,1,106,0,124,1,106,1,131,1,83,0,41, - 2,122,115,82,101,116,117,114,110,32,114,101,112,114,32,102, - 111,114,32,116,104,101,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,101,32,109,101,116,104, - 111,100,32,105,115,32,100,101,112,114,101,99,97,116,101,100, - 46,32,32,84,104,101,32,105,109,112,111,114,116,32,109,97, - 99,104,105,110,101,114,121,32,100,111,101,115,32,116,104,101, - 32,106,111,98,32,105,116,115,101,108,102,46,10,10,32,32, - 32,32,32,32,32,32,122,25,60,109,111,100,117,108,101,32, - 123,33,114,125,32,40,110,97,109,101,115,112,97,99,101,41, - 62,41,2,114,48,0,0,0,114,106,0,0,0,41,2,114, - 165,0,0,0,114,185,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,11,109,111,100,117,108,101, - 95,114,101,112,114,231,3,0,0,115,2,0,0,0,0,7, - 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,109,111,100,117,108,101,95,114,101,112,114,99,2, - 0,0,0,0,0,0,0,2,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,83,0,41,2,78,84, - 114,4,0,0,0,41,2,114,101,0,0,0,114,120,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,154,0,0,0,240,3,0,0,115,2,0,0,0,0,1, - 122,27,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,105,115,95,112,97,99,107,97,103,101,99,2,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,115,4,0,0,0,100,1,83,0,41,2,78,114,30, - 0,0,0,114,4,0,0,0,41,2,114,101,0,0,0,114, - 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,197,0,0,0,243,3,0,0,115,2,0,0, - 0,0,1,122,27,95,78,97,109,101,115,112,97,99,101,76, - 111,97,100,101,114,46,103,101,116,95,115,111,117,114,99,101, - 99,2,0,0,0,0,0,0,0,2,0,0,0,6,0,0, - 0,67,0,0,0,115,18,0,0,0,116,0,100,1,100,2, - 100,3,100,4,100,5,144,1,131,3,83,0,41,6,78,114, - 30,0,0,0,122,8,60,115,116,114,105,110,103,62,114,184, - 0,0,0,114,199,0,0,0,84,41,1,114,200,0,0,0, - 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,182,0,0,0, - 246,3,0,0,115,2,0,0,0,0,1,122,25,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,46,103,101, - 116,95,99,111,100,101,99,2,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,115,4,0,0,0, - 100,1,83,0,41,2,122,42,85,115,101,32,100,101,102,97, - 117,108,116,32,115,101,109,97,110,116,105,99,115,32,102,111, - 114,32,109,111,100,117,108,101,32,99,114,101,97,116,105,111, - 110,46,78,114,4,0,0,0,41,2,114,101,0,0,0,114, - 159,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,181,0,0,0,249,3,0,0,115,0,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,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,0,83,0,41, - 1,78,114,4,0,0,0,41,2,114,101,0,0,0,114,185, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,186,0,0,0,252,3,0,0,115,2,0,0,0, - 0,1,122,28,95,78,97,109,101,115,112,97,99,101,76,111, - 97,100,101,114,46,101,120,101,99,95,109,111,100,117,108,101, - 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,67,0,0,0,115,26,0,0,0,116,0,106,1,100,1, - 124,0,106,2,131,2,1,0,116,0,106,3,124,0,124,1, - 131,2,83,0,41,2,122,98,76,111,97,100,32,97,32,110, - 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,46, - 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, - 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, - 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109, - 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, - 10,10,32,32,32,32,32,32,32,32,122,38,110,97,109,101, - 115,112,97,99,101,32,109,111,100,117,108,101,32,108,111,97, - 100,101,100,32,119,105,116,104,32,112,97,116,104,32,123,33, - 114,125,41,4,114,115,0,0,0,114,130,0,0,0,114,227, - 0,0,0,114,187,0,0,0,41,2,114,101,0,0,0,114, - 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,188,0,0,0,255,3,0,0,115,6,0,0, - 0,0,7,6,1,8,1,122,28,95,78,97,109,101,115,112, - 97,99,101,76,111,97,100,101,114,46,108,111,97,100,95,109, - 111,100,117,108,101,78,41,12,114,106,0,0,0,114,105,0, - 0,0,114,107,0,0,0,114,180,0,0,0,114,178,0,0, - 0,114,245,0,0,0,114,154,0,0,0,114,197,0,0,0, - 114,182,0,0,0,114,181,0,0,0,114,186,0,0,0,114, - 188,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,244,0,0,0,227,3,0, - 0,115,16,0,0,0,8,1,8,3,12,9,8,3,8,3, - 8,3,8,3,8,3,114,244,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,106,0,0,0,101,0,90,1,100,0,90,2,100,1,90, - 3,101,4,100,2,100,3,132,0,131,1,90,5,101,4,100, - 4,100,5,132,0,131,1,90,6,101,4,100,6,100,7,132, - 0,131,1,90,7,101,4,100,8,100,9,132,0,131,1,90, - 8,101,4,100,17,100,11,100,12,132,1,131,1,90,9,101, - 4,100,18,100,13,100,14,132,1,131,1,90,10,101,4,100, - 19,100,15,100,16,132,1,131,1,90,11,100,10,83,0,41, - 20,218,10,80,97,116,104,70,105,110,100,101,114,122,62,77, - 101,116,97,32,112,97,116,104,32,102,105,110,100,101,114,32, - 102,111,114,32,115,121,115,46,112,97,116,104,32,97,110,100, - 32,112,97,99,107,97,103,101,32,95,95,112,97,116,104,95, - 95,32,97,116,116,114,105,98,117,116,101,115,46,99,1,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,67,0, - 0,0,115,42,0,0,0,120,36,116,0,106,1,106,2,131, - 0,68,0,93,22,125,1,116,3,124,1,100,1,131,2,114, - 12,124,1,106,4,131,0,1,0,113,12,87,0,100,2,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,218,17,105,110,118,97,108,105,100,97,116,101,95,99, - 97,99,104,101,115,78,41,5,114,7,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,6,118,97,108,117,101,115,114,109,0,0,0,114, - 247,0,0,0,41,2,114,165,0,0,0,218,6,102,105,110, - 100,101,114,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,247,0,0,0,17,4,0,0,115,6,0,0,0, - 0,4,16,1,10,1,122,28,80,97,116,104,70,105,110,100, - 101,114,46,105,110,118,97,108,105,100,97,116,101,95,99,97, - 99,104,101,115,99,2,0,0,0,0,0,0,0,3,0,0, - 0,12,0,0,0,67,0,0,0,115,86,0,0,0,116,0, - 106,1,100,1,107,9,114,30,116,0,106,1,12,0,114,30, - 116,2,106,3,100,2,116,4,131,2,1,0,120,50,116,0, - 106,1,68,0,93,36,125,2,121,8,124,2,124,1,131,1, - 83,0,4,0,116,5,107,10,114,72,1,0,1,0,1,0, - 119,38,89,0,113,38,88,0,113,38,87,0,100,1,83,0, - 100,1,83,0,41,3,122,46,83,101,97,114,99,104,32,115, - 121,115,46,112,97,116,104,95,104,111,111,107,115,32,102,111, - 114,32,97,32,102,105,110,100,101,114,32,102,111,114,32,39, - 112,97,116,104,39,46,78,122,23,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,105,115,32,101,109,112,116,121, - 41,6,114,7,0,0,0,218,10,112,97,116,104,95,104,111, - 111,107,115,114,61,0,0,0,114,62,0,0,0,114,119,0, - 0,0,114,100,0,0,0,41,3,114,165,0,0,0,114,35, - 0,0,0,90,4,104,111,111,107,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,11,95,112,97,116,104,95, - 104,111,111,107,115,25,4,0,0,115,16,0,0,0,0,3, - 18,1,12,1,12,1,2,1,8,1,14,1,12,2,122,22, - 80,97,116,104,70,105,110,100,101,114,46,95,112,97,116,104, - 95,104,111,111,107,115,99,2,0,0,0,0,0,0,0,3, - 0,0,0,19,0,0,0,67,0,0,0,115,102,0,0,0, - 124,1,100,1,107,2,114,42,121,12,116,0,106,1,131,0, - 125,1,87,0,110,20,4,0,116,2,107,10,114,40,1,0, - 1,0,1,0,100,2,83,0,88,0,121,14,116,3,106,4, - 124,1,25,0,125,2,87,0,110,40,4,0,116,5,107,10, - 114,96,1,0,1,0,1,0,124,0,106,6,124,1,131,1, - 125,2,124,2,116,3,106,4,124,1,60,0,89,0,110,2, - 88,0,124,2,83,0,41,3,122,210,71,101,116,32,116,104, - 101,32,102,105,110,100,101,114,32,102,111,114,32,116,104,101, - 32,112,97,116,104,32,101,110,116,114,121,32,102,114,111,109, - 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, - 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, - 32,32,32,73,102,32,116,104,101,32,112,97,116,104,32,101, - 110,116,114,121,32,105,115,32,110,111,116,32,105,110,32,116, - 104,101,32,99,97,99,104,101,44,32,102,105,110,100,32,116, - 104,101,32,97,112,112,114,111,112,114,105,97,116,101,32,102, - 105,110,100,101,114,10,32,32,32,32,32,32,32,32,97,110, - 100,32,99,97,99,104,101,32,105,116,46,32,73,102,32,110, - 111,32,102,105,110,100,101,114,32,105,115,32,97,118,97,105, - 108,97,98,108,101,44,32,115,116,111,114,101,32,78,111,110, - 101,46,10,10,32,32,32,32,32,32,32,32,114,30,0,0, - 0,78,41,7,114,3,0,0,0,114,45,0,0,0,218,17, - 70,105,108,101,78,111,116,70,111,117,110,100,69,114,114,111, - 114,114,7,0,0,0,114,248,0,0,0,114,132,0,0,0, - 114,252,0,0,0,41,3,114,165,0,0,0,114,35,0,0, - 0,114,250,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,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,38,4,0,0,115, - 22,0,0,0,0,8,8,1,2,1,12,1,14,3,6,1, - 2,1,14,1,14,1,10,1,16,1,122,31,80,97,116,104, - 70,105,110,100,101,114,46,95,112,97,116,104,95,105,109,112, - 111,114,116,101,114,95,99,97,99,104,101,99,3,0,0,0, - 0,0,0,0,6,0,0,0,3,0,0,0,67,0,0,0, - 115,82,0,0,0,116,0,124,2,100,1,131,2,114,26,124, - 2,106,1,124,1,131,1,92,2,125,3,125,4,110,14,124, - 2,106,2,124,1,131,1,125,3,103,0,125,4,124,3,100, - 0,107,9,114,60,116,3,106,4,124,1,124,3,131,2,83, - 0,116,3,106,5,124,1,100,0,131,2,125,5,124,4,124, - 5,95,6,124,5,83,0,41,2,78,114,118,0,0,0,41, - 7,114,109,0,0,0,114,118,0,0,0,114,177,0,0,0, - 114,115,0,0,0,114,174,0,0,0,114,155,0,0,0,114, - 151,0,0,0,41,6,114,165,0,0,0,114,120,0,0,0, - 114,250,0,0,0,114,121,0,0,0,114,122,0,0,0,114, - 159,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,16,95,108,101,103,97,99,121,95,103,101,116, - 95,115,112,101,99,60,4,0,0,115,18,0,0,0,0,4, - 10,1,16,2,10,1,4,1,8,1,12,1,12,1,6,1, - 122,27,80,97,116,104,70,105,110,100,101,114,46,95,108,101, - 103,97,99,121,95,103,101,116,95,115,112,101,99,78,99,4, - 0,0,0,0,0,0,0,9,0,0,0,5,0,0,0,67, - 0,0,0,115,170,0,0,0,103,0,125,4,120,160,124,2, - 68,0,93,130,125,5,116,0,124,5,116,1,116,2,102,2, - 131,2,115,30,113,10,124,0,106,3,124,5,131,1,125,6, - 124,6,100,1,107,9,114,10,116,4,124,6,100,2,131,2, - 114,72,124,6,106,5,124,1,124,3,131,2,125,7,110,12, - 124,0,106,6,124,1,124,6,131,2,125,7,124,7,100,1, - 107,8,114,94,113,10,124,7,106,7,100,1,107,9,114,108, - 124,7,83,0,124,7,106,8,125,8,124,8,100,1,107,8, - 114,130,116,9,100,3,131,1,130,1,124,4,106,10,124,8, - 131,1,1,0,113,10,87,0,116,11,106,12,124,1,100,1, - 131,2,125,7,124,4,124,7,95,8,124,7,83,0,100,1, - 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,176,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,138,0,0,0,114,70,0,0,0,218,5,98,121, - 116,101,115,114,254,0,0,0,114,109,0,0,0,114,176,0, - 0,0,114,255,0,0,0,114,121,0,0,0,114,151,0,0, - 0,114,100,0,0,0,114,144,0,0,0,114,115,0,0,0, - 114,155,0,0,0,41,9,114,165,0,0,0,114,120,0,0, - 0,114,35,0,0,0,114,175,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,250,0,0,0,114,159,0,0,0,114,122,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,9,95,103,101,116,95,115,112,101,99,75,4,0,0,115, - 40,0,0,0,0,5,4,1,10,1,14,1,2,1,10,1, - 8,1,10,1,14,2,12,1,8,1,2,1,10,1,4,1, - 6,1,8,1,8,5,14,2,12,1,6,1,122,20,80,97, - 116,104,70,105,110,100,101,114,46,95,103,101,116,95,115,112, - 101,99,99,4,0,0,0,0,0,0,0,6,0,0,0,4, - 0,0,0,67,0,0,0,115,104,0,0,0,124,2,100,1, - 107,8,114,14,116,0,106,1,125,2,124,0,106,2,124,1, - 124,2,124,3,131,3,125,4,124,4,100,1,107,8,114,42, - 100,1,83,0,110,58,124,4,106,3,100,1,107,8,114,96, - 124,4,106,4,125,5,124,5,114,90,100,2,124,4,95,5, - 116,6,124,1,124,5,124,0,106,2,131,3,124,4,95,4, - 124,4,83,0,113,100,100,1,83,0,110,4,124,4,83,0, - 100,1,83,0,41,3,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,90,9,110,97,109,101,115,112,97,99, - 101,41,7,114,7,0,0,0,114,35,0,0,0,114,2,1, - 0,0,114,121,0,0,0,114,151,0,0,0,114,153,0,0, - 0,114,225,0,0,0,41,6,114,165,0,0,0,114,120,0, - 0,0,114,35,0,0,0,114,175,0,0,0,114,159,0,0, - 0,114,1,1,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,176,0,0,0,107,4,0,0,115,26, - 0,0,0,0,6,8,1,6,1,14,1,8,1,6,1,10, - 1,6,1,4,3,6,1,16,1,6,2,6,2,122,20,80, - 97,116,104,70,105,110,100,101,114,46,102,105,110,100,95,115, - 112,101,99,99,3,0,0,0,0,0,0,0,4,0,0,0, - 3,0,0,0,67,0,0,0,115,30,0,0,0,124,0,106, - 0,124,1,124,2,131,2,125,3,124,3,100,1,107,8,114, - 24,100,1,83,0,124,3,106,1,83,0,41,2,122,170,102, - 105,110,100,32,116,104,101,32,109,111,100,117,108,101,32,111, - 110,32,115,121,115,46,112,97,116,104,32,111,114,32,39,112, - 97,116,104,39,32,98,97,115,101,100,32,111,110,32,115,121, - 115,46,112,97,116,104,95,104,111,111,107,115,32,97,110,100, - 10,32,32,32,32,32,32,32,32,115,121,115,46,112,97,116, - 104,95,105,109,112,111,114,116,101,114,95,99,97,99,104,101, - 46,10,10,32,32,32,32,32,32,32,32,84,104,105,115,32, - 109,101,116,104,111,100,32,105,115,32,100,101,112,114,101,99, - 97,116,101,100,46,32,32,85,115,101,32,102,105,110,100,95, - 115,112,101,99,40,41,32,105,110,115,116,101,97,100,46,10, - 10,32,32,32,32,32,32,32,32,78,41,2,114,176,0,0, - 0,114,121,0,0,0,41,4,114,165,0,0,0,114,120,0, - 0,0,114,35,0,0,0,114,159,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,177,0,0,0, - 131,4,0,0,115,8,0,0,0,0,8,12,1,8,1,4, - 1,122,22,80,97,116,104,70,105,110,100,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,41,1,78,41,2,78,78, - 41,1,78,41,12,114,106,0,0,0,114,105,0,0,0,114, - 107,0,0,0,114,108,0,0,0,114,178,0,0,0,114,247, - 0,0,0,114,252,0,0,0,114,254,0,0,0,114,255,0, - 0,0,114,2,1,0,0,114,176,0,0,0,114,177,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,246,0,0,0,13,4,0,0,115,22, - 0,0,0,8,2,4,2,12,8,12,13,12,22,12,15,2, - 1,12,31,2,1,12,23,2,1,114,246,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,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,5,0,0,0,5,0,0,0,7, - 0,0,0,115,88,0,0,0,103,0,125,3,120,40,124,2, - 68,0,93,32,92,2,137,0,125,4,124,3,106,0,135,0, - 102,1,100,1,100,2,132,8,124,4,68,0,131,1,131,1, - 1,0,113,10,87,0,124,3,124,0,95,1,124,1,112,58, - 100,3,124,0,95,2,100,6,124,0,95,3,116,4,131,0, - 124,0,95,5,116,4,131,0,124,0,95,6,100,5,83,0, - 41,7,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,2,0,0,0,3,0,0,0,51, - 0,0,0,115,22,0,0,0,124,0,93,14,125,1,124,1, - 136,0,102,2,86,0,1,0,113,2,100,0,83,0,41,1, - 78,114,4,0,0,0,41,2,114,22,0,0,0,114,220,0, - 0,0,41,1,114,121,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,222,0,0,0,160,4,0,0,115,2,0,0, - 0,4,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,59,0,0,0, - 114,29,0,0,0,78,114,88,0,0,0,41,7,114,144,0, - 0,0,218,8,95,108,111,97,100,101,114,115,114,35,0,0, - 0,218,11,95,112,97,116,104,95,109,116,105,109,101,218,3, - 115,101,116,218,11,95,112,97,116,104,95,99,97,99,104,101, - 218,19,95,114,101,108,97,120,101,100,95,112,97,116,104,95, - 99,97,99,104,101,41,5,114,101,0,0,0,114,35,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,161,0,0,0,114, - 4,0,0,0,41,1,114,121,0,0,0,114,5,0,0,0, - 114,180,0,0,0,154,4,0,0,115,16,0,0,0,0,4, - 4,1,14,1,28,1,6,2,10,1,6,1,8,1,122,19, - 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, - 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, - 2,0,0,0,67,0,0,0,115,10,0,0,0,100,3,124, - 0,95,0,100,2,83,0,41,4,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,29,0,0,0,78, - 114,88,0,0,0,41,1,114,5,1,0,0,41,1,114,101, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,247,0,0,0,168,4,0,0,115,2,0,0,0, - 0,2,122,28,70,105,108,101,70,105,110,100,101,114,46,105, - 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, - 99,2,0,0,0,0,0,0,0,3,0,0,0,2,0,0, - 0,67,0,0,0,115,42,0,0,0,124,0,106,0,124,1, - 131,1,125,2,124,2,100,1,107,8,114,26,100,1,103,0, - 102,2,83,0,124,2,106,1,124,2,106,2,112,38,103,0, - 102,2,83,0,41,2,122,197,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, - 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, - 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, - 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, - 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, - 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, - 114,176,0,0,0,114,121,0,0,0,114,151,0,0,0,41, - 3,114,101,0,0,0,114,120,0,0,0,114,159,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 118,0,0,0,174,4,0,0,115,8,0,0,0,0,7,10, - 1,8,1,8,1,122,22,70,105,108,101,70,105,110,100,101, - 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, - 0,0,0,0,0,0,7,0,0,0,7,0,0,0,67,0, - 0,0,115,30,0,0,0,124,1,124,2,124,3,131,2,125, - 6,116,0,124,2,124,3,100,1,124,6,100,2,124,4,144, - 2,131,2,83,0,41,3,78,114,121,0,0,0,114,151,0, - 0,0,41,1,114,162,0,0,0,41,7,114,101,0,0,0, - 114,160,0,0,0,114,120,0,0,0,114,35,0,0,0,90, - 4,115,109,115,108,114,175,0,0,0,114,121,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,2, - 1,0,0,186,4,0,0,115,6,0,0,0,0,1,10,1, - 12,1,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,14,0,0,0,15,0,0,0,67,0,0,0,115,100, - 1,0,0,100,1,125,3,124,1,106,0,100,2,131,1,100, - 3,25,0,125,4,121,24,116,1,124,0,106,2,112,34,116, - 3,106,4,131,0,131,1,106,5,125,5,87,0,110,24,4, - 0,116,6,107,10,114,66,1,0,1,0,1,0,100,10,125, - 5,89,0,110,2,88,0,124,5,124,0,106,7,107,3,114, - 92,124,0,106,8,131,0,1,0,124,5,124,0,95,7,116, - 9,131,0,114,114,124,0,106,10,125,6,124,4,106,11,131, - 0,125,7,110,10,124,0,106,12,125,6,124,4,125,7,124, - 7,124,6,107,6,114,218,116,13,124,0,106,2,124,4,131, - 2,125,8,120,72,124,0,106,14,68,0,93,54,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,152,124,0,106, - 16,124,10,124,1,124,12,124,8,103,1,124,2,131,5,83, - 0,113,152,87,0,116,17,124,8,131,1,125,3,120,90,124, - 0,106,14,68,0,93,80,92,2,125,9,125,10,116,13,124, - 0,106,2,124,4,124,9,23,0,131,2,125,12,116,18,106, - 19,100,6,124,12,100,7,100,3,144,1,131,2,1,0,124, - 7,124,9,23,0,124,6,107,6,114,226,116,15,124,12,131, - 1,114,226,124,0,106,16,124,10,124,1,124,12,100,8,124, - 2,131,5,83,0,113,226,87,0,124,3,144,1,114,96,116, - 18,106,19,100,9,124,8,131,2,1,0,116,18,106,20,124, - 1,100,8,131,2,125,13,124,8,103,1,124,13,95,21,124, - 13,83,0,100,8,83,0,41,11,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,59,0,0,0, - 114,57,0,0,0,114,29,0,0,0,114,180,0,0,0,122, - 9,116,114,121,105,110,103,32,123,125,90,9,118,101,114,98, - 111,115,105,116,121,78,122,25,112,111,115,115,105,98,108,101, - 32,110,97,109,101,115,112,97,99,101,32,102,111,114,32,123, - 125,114,88,0,0,0,41,22,114,32,0,0,0,114,39,0, - 0,0,114,35,0,0,0,114,3,0,0,0,114,45,0,0, - 0,114,214,0,0,0,114,40,0,0,0,114,5,1,0,0, - 218,11,95,102,105,108,108,95,99,97,99,104,101,114,6,0, - 0,0,114,8,1,0,0,114,89,0,0,0,114,7,1,0, - 0,114,28,0,0,0,114,4,1,0,0,114,44,0,0,0, - 114,2,1,0,0,114,46,0,0,0,114,115,0,0,0,114, - 130,0,0,0,114,155,0,0,0,114,151,0,0,0,41,14, - 114,101,0,0,0,114,120,0,0,0,114,175,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,127,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, - 220,0,0,0,114,160,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,159,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,176,0,0,0,191,4,0,0, - 115,70,0,0,0,0,5,4,1,14,1,2,1,24,1,14, - 1,10,1,10,1,8,1,6,2,6,1,6,1,10,2,6, - 1,4,2,8,1,12,1,16,1,8,1,10,1,8,1,24, - 4,8,2,16,1,16,1,18,1,12,1,8,1,10,1,12, - 1,6,1,12,1,12,1,8,1,4,1,122,20,70,105,108, - 101,70,105,110,100,101,114,46,102,105,110,100,95,115,112,101, - 99,99,1,0,0,0,0,0,0,0,9,0,0,0,13,0, - 0,0,67,0,0,0,115,194,0,0,0,124,0,106,0,125, - 1,121,22,116,1,106,2,124,1,112,22,116,1,106,3,131, - 0,131,1,125,2,87,0,110,30,4,0,116,4,116,5,116, - 6,102,3,107,10,114,58,1,0,1,0,1,0,103,0,125, - 2,89,0,110,2,88,0,116,7,106,8,106,9,100,1,131, - 1,115,84,116,10,124,2,131,1,124,0,95,11,110,78,116, - 10,131,0,125,3,120,64,124,2,68,0,93,56,125,4,124, - 4,106,12,100,2,131,1,92,3,125,5,125,6,125,7,124, - 6,114,138,100,3,106,13,124,5,124,7,106,14,131,0,131, - 2,125,8,110,4,124,5,125,8,124,3,106,15,124,8,131, - 1,1,0,113,96,87,0,124,3,124,0,95,11,116,7,106, - 8,106,9,116,16,131,1,114,190,100,4,100,5,132,0,124, - 2,68,0,131,1,124,0,95,17,100,6,83,0,41,7,122, - 68,70,105,108,108,32,116,104,101,32,99,97,99,104,101,32, - 111,102,32,112,111,116,101,110,116,105,97,108,32,109,111,100, - 117,108,101,115,32,97,110,100,32,112,97,99,107,97,103,101, - 115,32,102,111,114,32,116,104,105,115,32,100,105,114,101,99, - 116,111,114,121,46,114,0,0,0,0,114,59,0,0,0,122, - 5,123,125,46,123,125,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,83,0,0,0,115,20,0,0,0, - 104,0,124,0,93,12,125,1,124,1,106,0,131,0,146,2, - 113,4,83,0,114,4,0,0,0,41,1,114,89,0,0,0, - 41,2,114,22,0,0,0,90,2,102,110,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,250,9,60,115,101,116, - 99,111,109,112,62,12,5,0,0,115,2,0,0,0,6,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,35, - 0,0,0,114,3,0,0,0,90,7,108,105,115,116,100,105, - 114,114,45,0,0,0,114,253,0,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,7,0,0,0,114,8,0,0,0,114,9,0,0,0,114, - 6,1,0,0,114,7,1,0,0,114,84,0,0,0,114,48, - 0,0,0,114,89,0,0,0,218,3,97,100,100,114,10,0, - 0,0,114,8,1,0,0,41,9,114,101,0,0,0,114,35, - 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,242,0,0,0,114,99,0,0,0,114,232, - 0,0,0,114,220,0,0,0,90,8,110,101,119,95,110,97, - 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,10,1,0,0,239,4,0,0,115,34,0,0,0,0, - 2,6,1,2,1,22,1,20,3,10,3,12,1,12,7,6, - 1,10,1,16,1,4,1,18,2,4,1,14,1,6,1,12, - 1,122,22,70,105,108,101,70,105,110,100,101,114,46,95,102, - 105,108,108,95,99,97,99,104,101,99,1,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,7,0,0,0,115,18, - 0,0,0,135,0,135,1,102,2,100,1,100,2,132,8,125, - 2,124,2,83,0,41,3,97,20,1,0,0,65,32,99,108, - 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, - 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, - 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, - 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, - 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, - 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, - 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, - 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, - 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, - 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, - 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, - 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, - 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, - 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, - 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, - 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, - 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, - 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, - 0,19,0,0,0,115,32,0,0,0,116,0,124,0,131,1, - 115,22,116,1,100,1,100,2,124,0,144,1,131,1,130,1, - 136,0,124,0,136,1,140,1,83,0,41,3,122,45,80,97, - 116,104,32,104,111,111,107,32,102,111,114,32,105,109,112,111, - 114,116,108,105,98,46,109,97,99,104,105,110,101,114,121,46, - 70,105,108,101,70,105,110,100,101,114,46,122,30,111,110,108, - 121,32,100,105,114,101,99,116,111,114,105,101,115,32,97,114, - 101,32,115,117,112,112,111,114,116,101,100,114,35,0,0,0, - 41,2,114,46,0,0,0,114,100,0,0,0,41,1,114,35, - 0,0,0,41,2,114,165,0,0,0,114,9,1,0,0,114, - 4,0,0,0,114,5,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,24,5,0,0,115,6,0,0,0,0,2,8,1, - 14,1,122,54,70,105,108,101,70,105,110,100,101,114,46,112, - 97,116,104,95,104,111,111,107,46,60,108,111,99,97,108,115, - 62,46,112,97,116,104,95,104,111,111,107,95,102,111,114,95, - 70,105,108,101,70,105,110,100,101,114,114,4,0,0,0,41, - 3,114,165,0,0,0,114,9,1,0,0,114,15,1,0,0, - 114,4,0,0,0,41,2,114,165,0,0,0,114,9,1,0, - 0,114,5,0,0,0,218,9,112,97,116,104,95,104,111,111, - 107,14,5,0,0,115,4,0,0,0,0,10,14,6,122,20, - 70,105,108,101,70,105,110,100,101,114,46,112,97,116,104,95, - 104,111,111,107,99,1,0,0,0,0,0,0,0,1,0,0, - 0,2,0,0,0,67,0,0,0,115,12,0,0,0,100,1, - 106,0,124,0,106,1,131,1,83,0,41,2,78,122,16,70, - 105,108,101,70,105,110,100,101,114,40,123,33,114,125,41,41, - 2,114,48,0,0,0,114,35,0,0,0,41,1,114,101,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,241,0,0,0,32,5,0,0,115,2,0,0,0,0, - 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, - 114,101,112,114,95,95,41,1,78,41,15,114,106,0,0,0, - 114,105,0,0,0,114,107,0,0,0,114,108,0,0,0,114, - 180,0,0,0,114,247,0,0,0,114,124,0,0,0,114,177, - 0,0,0,114,118,0,0,0,114,2,1,0,0,114,176,0, - 0,0,114,10,1,0,0,114,178,0,0,0,114,16,1,0, - 0,114,241,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,3,1,0,0,145, - 4,0,0,115,20,0,0,0,8,7,4,2,8,14,8,4, - 4,2,8,12,8,5,10,48,8,31,12,18,114,3,1,0, - 0,99,4,0,0,0,0,0,0,0,6,0,0,0,11,0, - 0,0,67,0,0,0,115,148,0,0,0,124,0,106,0,100, - 1,131,1,125,4,124,0,106,0,100,2,131,1,125,5,124, - 4,115,66,124,5,114,36,124,5,106,1,125,4,110,30,124, - 2,124,3,107,2,114,56,116,2,124,1,124,2,131,2,125, - 4,110,10,116,3,124,1,124,2,131,2,125,4,124,5,115, - 86,116,4,124,1,124,2,100,3,124,4,144,1,131,2,125, - 5,121,36,124,5,124,0,100,2,60,0,124,4,124,0,100, - 1,60,0,124,2,124,0,100,4,60,0,124,3,124,0,100, - 5,60,0,87,0,110,20,4,0,116,5,107,10,114,142,1, - 0,1,0,1,0,89,0,110,2,88,0,100,0,83,0,41, - 6,78,218,10,95,95,108,111,97,100,101,114,95,95,218,8, - 95,95,115,112,101,99,95,95,114,121,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,121,0,0,0,114, - 218,0,0,0,114,213,0,0,0,114,162,0,0,0,218,9, - 69,120,99,101,112,116,105,111,110,41,6,90,2,110,115,114, - 99,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,121,0,0,0,114,159, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,14,95,102,105,120,95,117,112,95,109,111,100,117, - 108,101,38,5,0,0,115,34,0,0,0,0,2,10,1,10, - 1,4,1,4,1,8,1,8,1,12,2,10,1,4,1,16, - 1,2,1,8,1,8,1,8,1,12,1,14,2,114,21,1, - 0,0,99,0,0,0,0,0,0,0,0,3,0,0,0,3, - 0,0,0,67,0,0,0,115,38,0,0,0,116,0,116,1, - 106,2,131,0,102,2,125,0,116,3,116,4,102,2,125,1, - 116,5,116,6,102,2,125,2,124,0,124,1,124,2,103,3, - 83,0,41,1,122,95,82,101,116,117,114,110,115,32,97,32, - 108,105,115,116,32,111,102,32,102,105,108,101,45,98,97,115, - 101,100,32,109,111,100,117,108,101,32,108,111,97,100,101,114, - 115,46,10,10,32,32,32,32,69,97,99,104,32,105,116,101, - 109,32,105,115,32,97,32,116,117,112,108,101,32,40,108,111, - 97,100,101,114,44,32,115,117,102,102,105,120,101,115,41,46, - 10,32,32,32,32,41,7,114,219,0,0,0,114,140,0,0, - 0,218,18,101,120,116,101,110,115,105,111,110,95,115,117,102, - 102,105,120,101,115,114,213,0,0,0,114,85,0,0,0,114, - 218,0,0,0,114,75,0,0,0,41,3,90,10,101,120,116, - 101,110,115,105,111,110,115,90,6,115,111,117,114,99,101,90, - 8,98,121,116,101,99,111,100,101,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,156,0,0,0,61,5,0, - 0,115,8,0,0,0,0,5,12,1,8,1,8,1,114,156, - 0,0,0,99,1,0,0,0,0,0,0,0,12,0,0,0, - 12,0,0,0,67,0,0,0,115,188,1,0,0,124,0,97, - 0,116,0,106,1,97,1,116,0,106,2,97,2,116,1,106, - 3,116,4,25,0,125,1,120,56,100,26,68,0,93,48,125, - 2,124,2,116,1,106,3,107,7,114,58,116,0,106,5,124, - 2,131,1,125,3,110,10,116,1,106,3,124,2,25,0,125, - 3,116,6,124,1,124,2,124,3,131,3,1,0,113,32,87, - 0,100,5,100,6,103,1,102,2,100,7,100,8,100,6,103, - 2,102,2,102,2,125,4,120,118,124,4,68,0,93,102,92, - 2,125,5,125,6,116,7,100,9,100,10,132,0,124,6,68, - 0,131,1,131,1,115,142,116,8,130,1,124,6,100,11,25, - 0,125,7,124,5,116,1,106,3,107,6,114,174,116,1,106, - 3,124,5,25,0,125,8,80,0,113,112,121,16,116,0,106, - 5,124,5,131,1,125,8,80,0,87,0,113,112,4,0,116, - 9,107,10,114,212,1,0,1,0,1,0,119,112,89,0,113, - 112,88,0,113,112,87,0,116,9,100,12,131,1,130,1,116, - 6,124,1,100,13,124,8,131,3,1,0,116,6,124,1,100, - 14,124,7,131,3,1,0,116,6,124,1,100,15,100,16,106, - 10,124,6,131,1,131,3,1,0,121,14,116,0,106,5,100, - 17,131,1,125,9,87,0,110,26,4,0,116,9,107,10,144, - 1,114,52,1,0,1,0,1,0,100,18,125,9,89,0,110, - 2,88,0,116,6,124,1,100,17,124,9,131,3,1,0,116, - 0,106,5,100,19,131,1,125,10,116,6,124,1,100,19,124, - 10,131,3,1,0,124,5,100,7,107,2,144,1,114,120,116, - 0,106,5,100,20,131,1,125,11,116,6,124,1,100,21,124, - 11,131,3,1,0,116,6,124,1,100,22,116,11,131,0,131, - 3,1,0,116,12,106,13,116,2,106,14,131,0,131,1,1, - 0,124,5,100,7,107,2,144,1,114,184,116,15,106,16,100, - 23,131,1,1,0,100,24,116,12,107,6,144,1,114,184,100, - 25,116,17,95,18,100,18,83,0,41,27,122,205,83,101,116, - 117,112,32,116,104,101,32,112,97,116,104,45,98,97,115,101, - 100,32,105,109,112,111,114,116,101,114,115,32,102,111,114,32, - 105,109,112,111,114,116,108,105,98,32,98,121,32,105,109,112, - 111,114,116,105,110,103,32,110,101,101,100,101,100,10,32,32, - 32,32,98,117,105,108,116,45,105,110,32,109,111,100,117,108, - 101,115,32,97,110,100,32,105,110,106,101,99,116,105,110,103, - 32,116,104,101,109,32,105,110,116,111,32,116,104,101,32,103, - 108,111,98,97,108,32,110,97,109,101,115,112,97,99,101,46, - 10,10,32,32,32,32,79,116,104,101,114,32,99,111,109,112, - 111,110,101,110,116,115,32,97,114,101,32,101,120,116,114,97, - 99,116,101,100,32,102,114,111,109,32,116,104,101,32,99,111, - 114,101,32,98,111,111,116,115,116,114,97,112,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,114,50,0,0,0,114, - 61,0,0,0,218,8,98,117,105,108,116,105,110,115,114,137, - 0,0,0,90,5,112,111,115,105,120,250,1,47,218,2,110, - 116,250,1,92,99,1,0,0,0,0,0,0,0,2,0,0, - 0,3,0,0,0,115,0,0,0,115,26,0,0,0,124,0, - 93,18,125,1,116,0,124,1,131,1,100,0,107,2,86,0, - 1,0,113,2,100,1,83,0,41,2,114,29,0,0,0,78, - 41,1,114,31,0,0,0,41,2,114,22,0,0,0,114,78, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,222,0,0,0,97,5,0,0,115,2,0,0,0, - 4,0,122,25,95,115,101,116,117,112,46,60,108,111,99,97, - 108,115,62,46,60,103,101,110,101,120,112,114,62,114,60,0, - 0,0,122,30,105,109,112,111,114,116,108,105,98,32,114,101, - 113,117,105,114,101,115,32,112,111,115,105,120,32,111,114,32, - 110,116,114,3,0,0,0,114,25,0,0,0,114,21,0,0, - 0,114,30,0,0,0,90,7,95,116,104,114,101,97,100,78, - 90,8,95,119,101,97,107,114,101,102,90,6,119,105,110,114, - 101,103,114,164,0,0,0,114,6,0,0,0,122,4,46,112, - 121,119,122,6,95,100,46,112,121,100,84,41,4,122,3,95, - 105,111,122,9,95,119,97,114,110,105,110,103,115,122,8,98, - 117,105,108,116,105,110,115,122,7,109,97,114,115,104,97,108, - 41,19,114,115,0,0,0,114,7,0,0,0,114,140,0,0, - 0,114,234,0,0,0,114,106,0,0,0,90,18,95,98,117, - 105,108,116,105,110,95,102,114,111,109,95,110,97,109,101,114, - 110,0,0,0,218,3,97,108,108,218,14,65,115,115,101,114, - 116,105,111,110,69,114,114,111,114,114,100,0,0,0,114,26, - 0,0,0,114,11,0,0,0,114,224,0,0,0,114,144,0, - 0,0,114,22,1,0,0,114,85,0,0,0,114,158,0,0, - 0,114,163,0,0,0,114,168,0,0,0,41,12,218,17,95, - 98,111,111,116,115,116,114,97,112,95,109,111,100,117,108,101, - 90,11,115,101,108,102,95,109,111,100,117,108,101,90,12,98, - 117,105,108,116,105,110,95,110,97,109,101,90,14,98,117,105, - 108,116,105,110,95,109,111,100,117,108,101,90,10,111,115,95, - 100,101,116,97,105,108,115,90,10,98,117,105,108,116,105,110, - 95,111,115,114,21,0,0,0,114,25,0,0,0,90,9,111, - 115,95,109,111,100,117,108,101,90,13,116,104,114,101,97,100, - 95,109,111,100,117,108,101,90,14,119,101,97,107,114,101,102, - 95,109,111,100,117,108,101,90,13,119,105,110,114,101,103,95, - 109,111,100,117,108,101,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,6,95,115,101,116,117,112,72,5,0, - 0,115,82,0,0,0,0,8,4,1,6,1,6,3,10,1, - 10,1,10,1,12,2,10,1,16,3,22,1,14,2,22,1, - 8,1,10,1,10,1,4,2,2,1,10,1,6,1,14,1, - 12,2,8,1,12,1,12,1,18,3,2,1,14,1,16,2, - 10,1,12,3,10,1,12,3,10,1,10,1,12,3,14,1, - 14,1,10,1,10,1,10,1,114,30,1,0,0,99,1,0, - 0,0,0,0,0,0,2,0,0,0,3,0,0,0,67,0, - 0,0,115,84,0,0,0,116,0,124,0,131,1,1,0,116, - 1,131,0,125,1,116,2,106,3,106,4,116,5,106,6,124, - 1,140,0,103,1,131,1,1,0,116,7,106,8,100,1,107, - 2,114,56,116,2,106,9,106,10,116,11,131,1,1,0,116, - 2,106,9,106,10,116,12,131,1,1,0,116,5,124,0,95, - 5,116,13,124,0,95,13,100,2,83,0,41,3,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,114,25,1,0,0,78,41,14, - 114,30,1,0,0,114,156,0,0,0,114,7,0,0,0,114, - 251,0,0,0,114,144,0,0,0,114,3,1,0,0,114,16, - 1,0,0,114,3,0,0,0,114,106,0,0,0,218,9,109, - 101,116,97,95,112,97,116,104,114,158,0,0,0,114,163,0, - 0,0,114,246,0,0,0,114,213,0,0,0,41,2,114,29, - 1,0,0,90,17,115,117,112,112,111,114,116,101,100,95,108, - 111,97,100,101,114,115,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,8,95,105,110,115,116,97,108,108,140, - 5,0,0,115,16,0,0,0,0,2,8,1,6,1,20,1, - 10,1,12,1,12,4,6,1,114,32,1,0,0,41,3,122, - 3,119,105,110,114,1,0,0,0,114,2,0,0,0,41,1, - 114,47,0,0,0,41,1,78,41,3,78,78,78,41,3,78, - 78,78,41,2,114,60,0,0,0,114,60,0,0,0,41,1, - 78,41,1,78,41,56,114,108,0,0,0,114,10,0,0,0, - 114,11,0,0,0,114,17,0,0,0,114,19,0,0,0,114, - 28,0,0,0,114,38,0,0,0,114,39,0,0,0,114,43, - 0,0,0,114,44,0,0,0,114,46,0,0,0,114,56,0, - 0,0,218,4,116,121,112,101,218,8,95,95,99,111,100,101, - 95,95,114,139,0,0,0,114,15,0,0,0,114,129,0,0, - 0,114,14,0,0,0,114,18,0,0,0,90,17,95,82,65, - 87,95,77,65,71,73,67,95,78,85,77,66,69,82,114,74, - 0,0,0,114,73,0,0,0,114,85,0,0,0,114,75,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,80,0,0,0,114,86,0, - 0,0,114,92,0,0,0,114,96,0,0,0,114,98,0,0, - 0,114,117,0,0,0,114,124,0,0,0,114,136,0,0,0, - 114,142,0,0,0,114,145,0,0,0,114,150,0,0,0,218, - 6,111,98,106,101,99,116,114,157,0,0,0,114,162,0,0, - 0,114,163,0,0,0,114,179,0,0,0,114,189,0,0,0, - 114,205,0,0,0,114,213,0,0,0,114,218,0,0,0,114, - 224,0,0,0,114,219,0,0,0,114,225,0,0,0,114,244, - 0,0,0,114,246,0,0,0,114,3,1,0,0,114,21,1, - 0,0,114,156,0,0,0,114,30,1,0,0,114,32,1,0, - 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,8,60,109,111,100,117,108,101,62,8, - 0,0,0,115,102,0,0,0,4,17,4,3,8,12,8,5, - 8,5,8,6,8,12,8,10,8,9,8,5,8,7,10,22, - 10,116,16,1,12,2,4,1,4,2,6,2,6,2,8,2, - 16,44,8,33,8,19,8,12,8,12,8,28,8,17,10,55, - 10,12,10,10,8,14,6,3,4,1,14,65,14,64,14,29, - 16,110,14,41,18,45,18,16,4,3,18,53,14,60,14,42, - 14,127,0,5,14,127,0,22,10,23,8,11,8,68, + 6,95,115,101,116,117,112,73,5,0,0,115,82,0,0,0, + 0,8,4,1,6,1,6,3,10,1,10,1,10,1,12,2, + 10,1,16,3,22,1,14,2,22,1,8,1,10,1,10,1, + 4,2,2,1,10,1,6,1,14,1,12,2,8,1,12,1, + 12,1,18,3,2,1,14,1,16,2,10,1,12,3,10,1, + 12,3,10,1,10,1,12,3,14,1,14,1,10,1,10,1, + 10,1,114,30,1,0,0,99,1,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,67,0,0,0,115,84,0,0, + 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116, + 2,106,3,106,4,116,5,106,6,124,1,140,0,103,1,131, + 1,1,0,116,7,106,8,100,1,107,2,114,56,116,2,106, + 9,106,10,116,11,131,1,1,0,116,2,106,9,106,10,116, + 12,131,1,1,0,116,5,124,0,95,5,116,13,124,0,95, + 13,100,2,83,0,41,3,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,114,25,1,0,0,78,41,14,114,30,1,0,0,114, + 156,0,0,0,114,7,0,0,0,114,251,0,0,0,114,144, + 0,0,0,114,3,1,0,0,114,16,1,0,0,114,3,0, + 0,0,114,106,0,0,0,218,9,109,101,116,97,95,112,97, + 116,104,114,158,0,0,0,114,163,0,0,0,114,246,0,0, + 0,114,213,0,0,0,41,2,114,29,1,0,0,90,17,115, + 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 8,95,105,110,115,116,97,108,108,141,5,0,0,115,16,0, + 0,0,0,2,8,1,6,1,20,1,10,1,12,1,12,4, + 6,1,114,32,1,0,0,41,3,122,3,119,105,110,114,1, + 0,0,0,114,2,0,0,0,41,1,114,47,0,0,0,41, + 1,78,41,3,78,78,78,41,3,78,78,78,41,2,114,60, + 0,0,0,114,60,0,0,0,41,1,78,41,1,78,41,56, + 114,108,0,0,0,114,10,0,0,0,114,11,0,0,0,114, + 17,0,0,0,114,19,0,0,0,114,28,0,0,0,114,38, + 0,0,0,114,39,0,0,0,114,43,0,0,0,114,44,0, + 0,0,114,46,0,0,0,114,56,0,0,0,218,4,116,121, + 112,101,218,8,95,95,99,111,100,101,95,95,114,139,0,0, + 0,114,15,0,0,0,114,129,0,0,0,114,14,0,0,0, + 114,18,0,0,0,90,17,95,82,65,87,95,77,65,71,73, + 67,95,78,85,77,66,69,82,114,74,0,0,0,114,73,0, + 0,0,114,85,0,0,0,114,75,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,80,0,0,0,114,86,0,0,0,114,92,0,0, + 0,114,96,0,0,0,114,98,0,0,0,114,117,0,0,0, + 114,124,0,0,0,114,136,0,0,0,114,142,0,0,0,114, + 145,0,0,0,114,150,0,0,0,218,6,111,98,106,101,99, + 116,114,157,0,0,0,114,162,0,0,0,114,163,0,0,0, + 114,179,0,0,0,114,189,0,0,0,114,205,0,0,0,114, + 213,0,0,0,114,218,0,0,0,114,224,0,0,0,114,219, + 0,0,0,114,225,0,0,0,114,244,0,0,0,114,246,0, + 0,0,114,3,1,0,0,114,21,1,0,0,114,156,0,0, + 0,114,30,1,0,0,114,32,1,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, + 8,60,109,111,100,117,108,101,62,8,0,0,0,115,102,0, + 0,0,4,17,4,3,8,13,8,5,8,5,8,6,8,12, + 8,10,8,9,8,5,8,7,10,22,10,116,16,1,12,2, + 4,1,4,2,6,2,6,2,8,2,16,44,8,33,8,19, + 8,12,8,12,8,28,8,17,10,55,10,12,10,10,8,14, + 6,3,4,1,14,65,14,64,14,29,16,110,14,41,18,45, + 18,16,4,3,18,53,14,60,14,42,14,127,0,5,14,127, + 0,22,10,23,8,11,8,68, }; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 15:01:22 2016 From: python-checkins at python.org (steve.dower) Date: Fri, 15 Jul 2016 19:01:22 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Fix_building_t?= =?utf-8?q?cl/tk_with_only_the_VC_build_tools_installed=2E?= Message-ID: <20160715190121.62863.36699.D20B412A@psf.io> https://hg.python.org/cpython/rev/91ab24efba36 changeset: 102362:91ab24efba36 branch: 3.5 parent: 102360:bedcb9ec3f26 user: Steve Dower date: Fri Jul 15 11:55:52 2016 -0700 summary: Fix building tcl/tk with only the VC build tools installed. files: PCbuild/tcl.vcxproj | 2 ++ PCbuild/tix.vcxproj | 2 ++ PCbuild/tk.vcxproj | 2 ++ 3 files changed, 6 insertions(+), 0 deletions(-) diff --git a/PCbuild/tcl.vcxproj b/PCbuild/tcl.vcxproj --- a/PCbuild/tcl.vcxproj +++ b/PCbuild/tcl.vcxproj @@ -88,4 +88,6 @@ + + \ No newline at end of file diff --git a/PCbuild/tix.vcxproj b/PCbuild/tix.vcxproj --- a/PCbuild/tix.vcxproj +++ b/PCbuild/tix.vcxproj @@ -89,4 +89,6 @@ + + \ No newline at end of file diff --git a/PCbuild/tk.vcxproj b/PCbuild/tk.vcxproj --- a/PCbuild/tk.vcxproj +++ b/PCbuild/tk.vcxproj @@ -92,4 +92,6 @@ + + \ No newline at end of file -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 15:01:22 2016 From: python-checkins at python.org (steve.dower) Date: Fri, 15 Jul 2016 19:01:22 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_from_3=2E5?= Message-ID: <20160715190121.129424.15789.90D97F63@psf.io> https://hg.python.org/cpython/rev/260ec3f2d8cb changeset: 102363:260ec3f2d8cb parent: 102361:777da58794ca parent: 102362:91ab24efba36 user: Steve Dower date: Fri Jul 15 12:01:07 2016 -0700 summary: Merge from 3.5 files: PCbuild/tcl.vcxproj | 2 ++ PCbuild/tix.vcxproj | 2 ++ PCbuild/tk.vcxproj | 2 ++ 3 files changed, 6 insertions(+), 0 deletions(-) diff --git a/PCbuild/tcl.vcxproj b/PCbuild/tcl.vcxproj --- a/PCbuild/tcl.vcxproj +++ b/PCbuild/tcl.vcxproj @@ -88,4 +88,6 @@ + + \ No newline at end of file diff --git a/PCbuild/tix.vcxproj b/PCbuild/tix.vcxproj --- a/PCbuild/tix.vcxproj +++ b/PCbuild/tix.vcxproj @@ -89,4 +89,6 @@ + + \ No newline at end of file diff --git a/PCbuild/tk.vcxproj b/PCbuild/tk.vcxproj --- a/PCbuild/tk.vcxproj +++ b/PCbuild/tk.vcxproj @@ -92,4 +92,6 @@ + + \ No newline at end of file -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 15:16:48 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 19:16:48 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_for_=2326696?= Message-ID: <20160715191648.120098.40952.29EED776@psf.io> https://hg.python.org/cpython/rev/6ba86ca875a8 changeset: 102365:6ba86ca875a8 parent: 102363:260ec3f2d8cb parent: 102364:8be87fde577f user: Brett Cannon date: Fri Jul 15 12:16:42 2016 -0700 summary: Merge for #26696 files: Doc/library/collections.abc.rst | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/Doc/library/collections.abc.rst b/Doc/library/collections.abc.rst --- a/Doc/library/collections.abc.rst +++ b/Doc/library/collections.abc.rst @@ -56,6 +56,9 @@ ``__len__``, ``insert`` +:class:`ByteString` :class:`Sequence` ``__getitem__``, Inherited :class:`Sequence` methods + ``__len__`` + :class:`Set` :class:`Sized`, ``__contains__``, ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``, :class:`Iterable`, ``__iter__``, ``__gt__``, ``__ge__``, ``__and__``, ``__or__``, :class:`Container` ``__len__`` ``__sub__``, ``__xor__``, and ``isdisjoint`` @@ -126,6 +129,7 @@ .. class:: Sequence MutableSequence + ByteString ABCs for read-only and mutable :term:`sequences `. @@ -142,7 +146,6 @@ The index() method added support for *stop* and *start* arguments. - .. class:: Set MutableSet -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 15:16:48 2016 From: python-checkins at python.org (brett.cannon) Date: Fri, 15 Jul 2016 19:16:48 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI2Njk2?= =?utf-8?q?=3A_Document_collections=2Eabc=2EByteString=2E?= Message-ID: <20160715191647.120313.26448.4FB2E0D1@psf.io> https://hg.python.org/cpython/rev/8be87fde577f changeset: 102364:8be87fde577f branch: 3.5 parent: 102362:91ab24efba36 user: Brett Cannon date: Fri Jul 15 12:16:18 2016 -0700 summary: Issue #26696: Document collections.abc.ByteString. Thanks to Xiang Zhang for the patch. files: Doc/library/collections.abc.rst | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/Doc/library/collections.abc.rst b/Doc/library/collections.abc.rst --- a/Doc/library/collections.abc.rst +++ b/Doc/library/collections.abc.rst @@ -55,6 +55,9 @@ ``__len__``, ``insert`` +:class:`ByteString` :class:`Sequence` ``__getitem__``, Inherited :class:`Sequence` methods + ``__len__`` + :class:`Set` :class:`Sized`, ``__contains__``, ``__le__``, ``__lt__``, ``__eq__``, ``__ne__``, :class:`Iterable`, ``__iter__``, ``__gt__``, ``__ge__``, ``__and__``, ``__or__``, :class:`Container` ``__len__`` ``__sub__``, ``__xor__``, and ``isdisjoint`` @@ -119,6 +122,7 @@ .. class:: Sequence MutableSequence + ByteString ABCs for read-only and mutable :term:`sequences `. @@ -135,7 +139,6 @@ The index() method added support for *stop* and *start* arguments. - .. class:: Set MutableSet -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 21:30:32 2016 From: python-checkins at python.org (r.david.murray) Date: Sat, 16 Jul 2016 01:30:32 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogIzI3NTIyOiBicmVh?= =?utf-8?q?k_unintended_cycle_in_feedparser=2E?= Message-ID: <20160716013032.22538.27839.E265B39B@psf.io> https://hg.python.org/cpython/rev/6c7fd035bce3 changeset: 102366:6c7fd035bce3 branch: 3.5 parent: 102364:8be87fde577f user: R David Murray date: Fri Jul 15 21:29:13 2016 -0400 summary: #27522: break unintended cycle in feedparser. Patch by Costas. files: Lib/email/feedparser.py | 9 ++++++--- Misc/NEWS | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py --- a/Lib/email/feedparser.py +++ b/Lib/email/feedparser.py @@ -145,7 +145,7 @@ """ self.policy = policy - self._factory_kwds = lambda: {'policy': self.policy} + self._old_style_factory = False if _factory is None: # What this should be: #self._factory = policy.default_message_factory @@ -160,7 +160,7 @@ _factory(policy=self.policy) except TypeError: # Assume this is an old-style factory - self._factory_kwds = lambda: {} + self._old_style_factory = True self._input = BufferedSubFile() self._msgstack = [] self._parse = self._parsegen().__next__ @@ -197,7 +197,10 @@ return root def _new_message(self): - msg = self._factory(**self._factory_kwds()) + if self._old_style_factory: + msg = self._factory() + else: + msg = self._factory(policy=self.policy) if self._cur and self._cur.get_content_type() == 'multipart/digest': msg.set_default_type('message/rfc822') if self._msgstack: diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -24,6 +24,8 @@ Library ------- +- Issue #27522: Avoid an unintentional reference cycle in email.feedparser. + - Issue #26844: Fix error message for imp.find_module() to refer to 'path' instead of 'name'. Patch by Lev Maximov. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 15 21:30:33 2016 From: python-checkins at python.org (r.david.murray) Date: Sat, 16 Jul 2016 01:30:33 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge=3A_=2327522=3A_break_unintended_cycle_in_feedparse?= =?utf-8?q?r=2E?= Message-ID: <20160716013032.87464.81779.AE169C4A@psf.io> https://hg.python.org/cpython/rev/e1278508f3cb changeset: 102367:e1278508f3cb parent: 102365:6ba86ca875a8 parent: 102366:6c7fd035bce3 user: R David Murray date: Fri Jul 15 21:30:13 2016 -0400 summary: Merge: #27522: break unintended cycle in feedparser. files: Lib/email/feedparser.py | 9 ++++++--- Misc/NEWS | 2 ++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Lib/email/feedparser.py b/Lib/email/feedparser.py --- a/Lib/email/feedparser.py +++ b/Lib/email/feedparser.py @@ -145,7 +145,7 @@ """ self.policy = policy - self._factory_kwds = lambda: {'policy': self.policy} + self._old_style_factory = False if _factory is None: # What this should be: #self._factory = policy.default_message_factory @@ -160,7 +160,7 @@ _factory(policy=self.policy) except TypeError: # Assume this is an old-style factory - self._factory_kwds = lambda: {} + self._old_style_factory = True self._input = BufferedSubFile() self._msgstack = [] self._parse = self._parsegen().__next__ @@ -197,7 +197,10 @@ return root def _new_message(self): - msg = self._factory(**self._factory_kwds()) + if self._old_style_factory: + msg = self._factory() + else: + msg = self._factory(policy=self.policy) if self._cur and self._cur.get_content_type() == 'multipart/digest': msg.set_default_type('message/rfc822') if self._msgstack: diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,6 +18,8 @@ Library ------- +- Issue #27522: Avoid an unintentional reference cycle in email.feedparser. + - Issue 27512: Fix a segfault when os.fspath() called a an __fspath__() method that raised an exception. Patch by Xiang Zhang. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 03:29:14 2016 From: python-checkins at python.org (martin.panter) Date: Sat, 16 Jul 2016 07:29:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327285=3A_Cleanup_?= =?utf-8?q?leftover_susp-ignored_entry_after_text_was_changed?= Message-ID: <20160716072914.31307.43741.3E2AE645@psf.io> https://hg.python.org/cpython/rev/0d8f139a6e19 changeset: 102368:0d8f139a6e19 user: Martin Panter date: Sat Jul 16 07:17:46 2016 +0000 summary: Issue #27285: Cleanup leftover susp-ignored entry after text was changed files: Doc/tools/susp-ignored.csv | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/Doc/tools/susp-ignored.csv b/Doc/tools/susp-ignored.csv --- a/Doc/tools/susp-ignored.csv +++ b/Doc/tools/susp-ignored.csv @@ -291,7 +291,6 @@ library/zipapp,155,:callable,"""pkg.module:callable"" and the archive will be run by importing" library/stdtypes,,::,>>> m[::2].tolist() library/sys,,`,# ``wrapper`` creates a ``wrap(coro)`` coroutine: -tutorial/venv,77,:c7b9645a6f35,"Python 3.4.3+ (3.4:c7b9645a6f35+, May 22 2015, 09:31:25)" whatsnew/3.5,,:root,'WARNING:root:warning\n' whatsnew/3.5,,:warning,'WARNING:root:warning\n' whatsnew/3.5,,::,>>> addr6 = ipaddress.IPv6Address('::1') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 13:46:19 2016 From: python-checkins at python.org (brett.cannon) Date: Sat, 16 Jul 2016 17:46:19 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_for_=2327083?= Message-ID: <20160716174619.32516.10632.27B6D10F@psf.io> https://hg.python.org/cpython/rev/f4c91b883772 changeset: 102370:f4c91b883772 parent: 102368:0d8f139a6e19 parent: 102369:6b46c1510bfa user: Brett Cannon date: Sat Jul 16 10:45:16 2016 -0700 summary: Merge for #27083 files: Lib/importlib/_bootstrap_external.py | 14 +++++++-- Lib/test/test_importlib/extension/test_case_sensitivity.py | 14 ++++----- Lib/test/test_importlib/source/test_case_sensitivity.py | 13 ++------- Lib/test/test_importlib/util.py | 9 ++++++ 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -21,16 +21,22 @@ # anything specified at the class level. # Bootstrap-related code ###################################################### - -_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin' +_CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', +_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin' +_CASE_INSENSITIVE_PLATFORMS = (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY + + _CASE_INSENSITIVE_PLATFORMS_STR_KEY) def _make_relax_case(): if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): + if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS_STR_KEY): + key = 'PYTHONCASEOK' + else: + key = b'PYTHONCASEOK' + def _relax_case(): """True if filenames must be checked case-insensitively.""" - return (b'PYTHONCASEOK' in _os.environ - or 'PYTHONCASEOK' in _os.environ) + return key in _os.environ else: def _relax_case(): """True if filenames must be checked case-insensitively.""" diff --git a/Lib/test/test_importlib/extension/test_case_sensitivity.py b/Lib/test/test_importlib/extension/test_case_sensitivity.py --- a/Lib/test/test_importlib/extension/test_case_sensitivity.py +++ b/Lib/test/test_importlib/extension/test_case_sensitivity.py @@ -4,12 +4,13 @@ from .. import util +importlib = util.import_importlib('importlib') machinery = util.import_importlib('importlib.machinery') @unittest.skipIf(util.EXTENSIONS.filename is None, '_testcapi not available') @util.case_insensitive_tests -class ExtensionModuleCaseSensitivityTest: +class ExtensionModuleCaseSensitivityTest(util.CASEOKTestBase): def find_module(self): good_name = util.EXTENSIONS.name @@ -23,25 +24,22 @@ def test_case_sensitive(self): with support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in _bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=False) loader = self.find_module() self.assertIsNone(loader) def test_case_insensitivity(self): with support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in _bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=True) loader = self.find_module() self.assertTrue(hasattr(loader, 'load_module')) (Frozen_ExtensionCaseSensitivity, Source_ExtensionCaseSensitivity - ) = util.test_both(ExtensionModuleCaseSensitivityTest, machinery=machinery) + ) = util.test_both(ExtensionModuleCaseSensitivityTest, importlib=importlib, + machinery=machinery) if __name__ == '__main__': diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py --- a/Lib/test/test_importlib/source/test_case_sensitivity.py +++ b/Lib/test/test_importlib/source/test_case_sensitivity.py @@ -10,7 +10,7 @@ @util.case_insensitive_tests -class CaseSensitivityTest: +class CaseSensitivityTest(util.CASEOKTestBase): """PEP 235 dictates that on case-preserving, case-insensitive file systems that imports are case-sensitive unless the PYTHONCASEOK environment @@ -38,17 +38,10 @@ insensitive_finder = self.finder(insensitive_path) return self.find(sensitive_finder), self.find(insensitive_finder) - def env_changed(self, *, should_exist): - possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' - if any(x in self.importlib._bootstrap_external._os.environ - for x in possibilities) == should_exist: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') - def test_sensitive(self): with test_support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - self.env_changed(should_exist=False) + self.caseok_env_changed(should_exist=False) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) @@ -57,7 +50,7 @@ def test_insensitive(self): with test_support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - self.env_changed(should_exist=True) + self.caseok_env_changed(should_exist=True) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py --- a/Lib/test/test_importlib/util.py +++ b/Lib/test/test_importlib/util.py @@ -377,3 +377,12 @@ raise ImportError return importer return hook + + +class CASEOKTestBase: + + def caseok_env_changed(self, *, should_exist): + possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' + if any(x in self.importlib._bootstrap_external._os.environ + for x in possibilities) != should_exist: + self.skipTest('os.environ changes not reflected in _os.environ') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 13:46:19 2016 From: python-checkins at python.org (brett.cannon) Date: Sat, 16 Jul 2016 17:46:19 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Fix_regression?= =?utf-8?q?s_introduced_by_fixes_for_issue_=2327083=2E?= Message-ID: <20160716174619.32743.16494.00A5CA6D@psf.io> https://hg.python.org/cpython/rev/6b46c1510bfa changeset: 102369:6b46c1510bfa branch: 3.5 parent: 102366:6c7fd035bce3 user: Brett Cannon date: Sat Jul 16 10:44:13 2016 -0700 summary: Fix regressions introduced by fixes for issue #27083. files: Lib/importlib/_bootstrap_external.py | 14 +- Lib/test/test_importlib/extension/test_case_sensitivity.py | 14 +- Lib/test/test_importlib/source/test_case_sensitivity.py | 13 +- Lib/test/test_importlib/util.py | 9 + Python/importlib_external.h | 5122 +++++---- 5 files changed, 2594 insertions(+), 2578 deletions(-) diff --git a/Lib/importlib/_bootstrap_external.py b/Lib/importlib/_bootstrap_external.py --- a/Lib/importlib/_bootstrap_external.py +++ b/Lib/importlib/_bootstrap_external.py @@ -21,16 +21,22 @@ # anything specified at the class level. # Bootstrap-related code ###################################################### - -_CASE_INSENSITIVE_PLATFORMS = 'win', 'cygwin', 'darwin' +_CASE_INSENSITIVE_PLATFORMS_STR_KEY = 'win', +_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY = 'cygwin', 'darwin' +_CASE_INSENSITIVE_PLATFORMS = (_CASE_INSENSITIVE_PLATFORMS_BYTES_KEY + + _CASE_INSENSITIVE_PLATFORMS_STR_KEY) def _make_relax_case(): if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS): + if sys.platform.startswith(_CASE_INSENSITIVE_PLATFORMS_STR_KEY): + key = 'PYTHONCASEOK' + else: + key = b'PYTHONCASEOK' + def _relax_case(): """True if filenames must be checked case-insensitively.""" - return (b'PYTHONCASEOK' in _os.environ - or 'PYTHONCASEOK' in _os.environ) + return key in _os.environ else: def _relax_case(): """True if filenames must be checked case-insensitively.""" diff --git a/Lib/test/test_importlib/extension/test_case_sensitivity.py b/Lib/test/test_importlib/extension/test_case_sensitivity.py --- a/Lib/test/test_importlib/extension/test_case_sensitivity.py +++ b/Lib/test/test_importlib/extension/test_case_sensitivity.py @@ -5,6 +5,7 @@ from .. import util +importlib = util.import_importlib('importlib') machinery = util.import_importlib('importlib.machinery') @@ -12,7 +13,7 @@ @unittest.skipIf(util.EXTENSIONS.filename is None, '_testcapi not available') @util.case_insensitive_tests -class ExtensionModuleCaseSensitivityTest: +class ExtensionModuleCaseSensitivityTest(util.CASEOKTestBase): def find_module(self): good_name = util.EXTENSIONS.name @@ -26,25 +27,22 @@ def test_case_sensitive(self): with support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - if b'PYTHONCASEOK' in _bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=False) loader = self.find_module() self.assertIsNone(loader) def test_case_insensitivity(self): with support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - if b'PYTHONCASEOK' not in _bootstrap_external._os.environ: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') + self.caseok_env_changed(should_exist=True) loader = self.find_module() self.assertTrue(hasattr(loader, 'load_module')) (Frozen_ExtensionCaseSensitivity, Source_ExtensionCaseSensitivity - ) = util.test_both(ExtensionModuleCaseSensitivityTest, machinery=machinery) + ) = util.test_both(ExtensionModuleCaseSensitivityTest, importlib=importlib, + machinery=machinery) if __name__ == '__main__': diff --git a/Lib/test/test_importlib/source/test_case_sensitivity.py b/Lib/test/test_importlib/source/test_case_sensitivity.py --- a/Lib/test/test_importlib/source/test_case_sensitivity.py +++ b/Lib/test/test_importlib/source/test_case_sensitivity.py @@ -11,7 +11,7 @@ @util.case_insensitive_tests -class CaseSensitivityTest: +class CaseSensitivityTest(util.CASEOKTestBase): """PEP 235 dictates that on case-preserving, case-insensitive file systems that imports are case-sensitive unless the PYTHONCASEOK environment @@ -39,17 +39,10 @@ insensitive_finder = self.finder(insensitive_path) return self.find(sensitive_finder), self.find(insensitive_finder) - def env_changed(self, *, should_exist): - possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' - if any(x in self.importlib._bootstrap_external._os.environ - for x in possibilities) == should_exist: - self.skipTest('os.environ changes not reflected in ' - '_os.environ') - def test_sensitive(self): with test_support.EnvironmentVarGuard() as env: env.unset('PYTHONCASEOK') - self.env_changed(should_exist=False) + self.caseok_env_changed(should_exist=False) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) @@ -58,7 +51,7 @@ def test_insensitive(self): with test_support.EnvironmentVarGuard() as env: env.set('PYTHONCASEOK', '1') - self.env_changed(should_exist=True) + self.caseok_env_changed(should_exist=True) sensitive, insensitive = self.sensitivity_test() self.assertIsNotNone(sensitive) self.assertIn(self.name, sensitive.get_filename(self.name)) diff --git a/Lib/test/test_importlib/util.py b/Lib/test/test_importlib/util.py --- a/Lib/test/test_importlib/util.py +++ b/Lib/test/test_importlib/util.py @@ -378,3 +378,12 @@ raise ImportError return importer return hook + + +class CASEOKTestBase: + + def caseok_env_changed(self, *, should_exist): + possibilities = b'PYTHONCASEOK', 'PYTHONCASEOK' + if any(x in self.importlib._bootstrap_external._os.environ + for x in possibilities) != should_exist: + self.skipTest('os.environ changes not reflected in _os.environ') diff --git a/Python/importlib_external.h b/Python/importlib_external.h --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,53 +1,54 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, - 0,64,0,0,0,115,228,2,0,0,100,0,0,90,0,0, - 100,96,0,90,1,0,100,4,0,100,5,0,132,0,0,90, - 2,0,100,6,0,100,7,0,132,0,0,90,3,0,100,8, - 0,100,9,0,132,0,0,90,4,0,100,10,0,100,11,0, - 132,0,0,90,5,0,100,12,0,100,13,0,132,0,0,90, - 6,0,100,14,0,100,15,0,132,0,0,90,7,0,100,16, - 0,100,17,0,132,0,0,90,8,0,100,18,0,100,19,0, - 132,0,0,90,9,0,100,20,0,100,21,0,132,0,0,90, - 10,0,100,22,0,100,23,0,100,24,0,132,1,0,90,11, - 0,101,12,0,101,11,0,106,13,0,131,1,0,90,14,0, - 100,25,0,106,15,0,100,26,0,100,27,0,131,2,0,100, - 28,0,23,90,16,0,101,17,0,106,18,0,101,16,0,100, - 27,0,131,2,0,90,19,0,100,29,0,90,20,0,100,30, - 0,90,21,0,100,31,0,103,1,0,90,22,0,100,32,0, - 103,1,0,90,23,0,101,23,0,4,90,24,0,90,25,0, + 0,64,0,0,0,115,244,2,0,0,100,0,0,90,0,0, + 100,96,0,90,1,0,100,97,0,90,2,0,101,2,0,101, + 1,0,23,90,3,0,100,4,0,100,5,0,132,0,0,90, + 4,0,100,6,0,100,7,0,132,0,0,90,5,0,100,8, + 0,100,9,0,132,0,0,90,6,0,100,10,0,100,11,0, + 132,0,0,90,7,0,100,12,0,100,13,0,132,0,0,90, + 8,0,100,14,0,100,15,0,132,0,0,90,9,0,100,16, + 0,100,17,0,132,0,0,90,10,0,100,18,0,100,19,0, + 132,0,0,90,11,0,100,20,0,100,21,0,132,0,0,90, + 12,0,100,22,0,100,23,0,100,24,0,132,1,0,90,13, + 0,101,14,0,101,13,0,106,15,0,131,1,0,90,16,0, + 100,25,0,106,17,0,100,26,0,100,27,0,131,2,0,100, + 28,0,23,90,18,0,101,19,0,106,20,0,101,18,0,100, + 27,0,131,2,0,90,21,0,100,29,0,90,22,0,100,30, + 0,90,23,0,100,31,0,103,1,0,90,24,0,100,32,0, + 103,1,0,90,25,0,101,25,0,4,90,26,0,90,27,0, 100,33,0,100,34,0,100,33,0,100,35,0,100,36,0,132, - 1,1,90,26,0,100,37,0,100,38,0,132,0,0,90,27, - 0,100,39,0,100,40,0,132,0,0,90,28,0,100,41,0, - 100,42,0,132,0,0,90,29,0,100,43,0,100,44,0,132, - 0,0,90,30,0,100,45,0,100,46,0,100,47,0,100,48, - 0,132,0,1,90,31,0,100,49,0,100,50,0,132,0,0, - 90,32,0,100,51,0,100,52,0,132,0,0,90,33,0,100, + 1,1,90,28,0,100,37,0,100,38,0,132,0,0,90,29, + 0,100,39,0,100,40,0,132,0,0,90,30,0,100,41,0, + 100,42,0,132,0,0,90,31,0,100,43,0,100,44,0,132, + 0,0,90,32,0,100,45,0,100,46,0,100,47,0,100,48, + 0,132,0,1,90,33,0,100,49,0,100,50,0,132,0,0, + 90,34,0,100,51,0,100,52,0,132,0,0,90,35,0,100, 33,0,100,33,0,100,33,0,100,53,0,100,54,0,132,3, - 0,90,34,0,100,33,0,100,33,0,100,33,0,100,55,0, - 100,56,0,132,3,0,90,35,0,100,57,0,100,57,0,100, - 58,0,100,59,0,132,2,0,90,36,0,100,60,0,100,61, - 0,132,0,0,90,37,0,101,38,0,131,0,0,90,39,0, - 100,33,0,100,62,0,100,33,0,100,63,0,101,39,0,100, - 64,0,100,65,0,132,1,2,90,40,0,71,100,66,0,100, - 67,0,132,0,0,100,67,0,131,2,0,90,41,0,71,100, - 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,42, - 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,42, - 0,131,3,0,90,43,0,71,100,72,0,100,73,0,132,0, - 0,100,73,0,131,2,0,90,44,0,71,100,74,0,100,75, - 0,132,0,0,100,75,0,101,44,0,101,43,0,131,4,0, - 90,45,0,71,100,76,0,100,77,0,132,0,0,100,77,0, - 101,44,0,101,42,0,131,4,0,90,46,0,103,0,0,90, - 47,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, - 44,0,101,42,0,131,4,0,90,48,0,71,100,80,0,100, - 81,0,132,0,0,100,81,0,131,2,0,90,49,0,71,100, - 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,50, + 0,90,36,0,100,33,0,100,33,0,100,33,0,100,55,0, + 100,56,0,132,3,0,90,37,0,100,57,0,100,57,0,100, + 58,0,100,59,0,132,2,0,90,38,0,100,60,0,100,61, + 0,132,0,0,90,39,0,101,40,0,131,0,0,90,41,0, + 100,33,0,100,62,0,100,33,0,100,63,0,101,41,0,100, + 64,0,100,65,0,132,1,2,90,42,0,71,100,66,0,100, + 67,0,132,0,0,100,67,0,131,2,0,90,43,0,71,100, + 68,0,100,69,0,132,0,0,100,69,0,131,2,0,90,44, + 0,71,100,70,0,100,71,0,132,0,0,100,71,0,101,44, + 0,131,3,0,90,45,0,71,100,72,0,100,73,0,132,0, + 0,100,73,0,131,2,0,90,46,0,71,100,74,0,100,75, + 0,132,0,0,100,75,0,101,46,0,101,45,0,131,4,0, + 90,47,0,71,100,76,0,100,77,0,132,0,0,100,77,0, + 101,46,0,101,44,0,131,4,0,90,48,0,103,0,0,90, + 49,0,71,100,78,0,100,79,0,132,0,0,100,79,0,101, + 46,0,101,44,0,131,4,0,90,50,0,71,100,80,0,100, + 81,0,132,0,0,100,81,0,131,2,0,90,51,0,71,100, + 82,0,100,83,0,132,0,0,100,83,0,131,2,0,90,52, 0,71,100,84,0,100,85,0,132,0,0,100,85,0,131,2, - 0,90,51,0,71,100,86,0,100,87,0,132,0,0,100,87, - 0,131,2,0,90,52,0,100,33,0,100,88,0,100,89,0, - 132,1,0,90,53,0,100,90,0,100,91,0,132,0,0,90, - 54,0,100,92,0,100,93,0,132,0,0,90,55,0,100,94, - 0,100,95,0,132,0,0,90,56,0,100,33,0,83,41,97, + 0,90,53,0,71,100,86,0,100,87,0,132,0,0,100,87, + 0,131,2,0,90,54,0,100,33,0,100,88,0,100,89,0, + 132,1,0,90,55,0,100,90,0,100,91,0,132,0,0,90, + 56,0,100,92,0,100,93,0,132,0,0,90,57,0,100,94, + 0,100,95,0,132,0,0,90,58,0,100,33,0,83,41,98, 97,94,1,0,0,67,111,114,101,32,105,109,112,108,101,109, 101,110,116,97,116,105,111,110,32,111,102,32,112,97,116,104, 45,98,97,115,101,100,32,105,109,112,111,114,116,46,10,10, @@ -72,2525 +73,2534 @@ 110,32,111,102,32,116,104,105,115,32,109,111,100,117,108,101, 46,10,10,218,3,119,105,110,218,6,99,121,103,119,105,110, 218,6,100,97,114,119,105,110,99,0,0,0,0,0,0,0, - 0,1,0,0,0,2,0,0,0,67,0,0,0,115,49,0, + 0,1,0,0,0,3,0,0,0,3,0,0,0,115,88,0, 0,0,116,0,0,106,1,0,106,2,0,116,3,0,131,1, - 0,114,33,0,100,1,0,100,2,0,132,0,0,125,0,0, - 110,12,0,100,3,0,100,2,0,132,0,0,125,0,0,124, - 0,0,83,41,4,78,99,0,0,0,0,0,0,0,0,0, - 0,0,0,2,0,0,0,83,0,0,0,115,13,0,0,0, - 100,1,0,116,0,0,106,1,0,107,6,0,83,41,2,122, - 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, - 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, - 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, - 105,118,101,108,121,46,115,12,0,0,0,80,89,84,72,79, - 78,67,65,83,69,79,75,41,2,218,3,95,111,115,90,7, - 101,110,118,105,114,111,110,169,0,114,4,0,0,0,114,4, - 0,0,0,250,38,60,102,114,111,122,101,110,32,105,109,112, - 111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, - 112,95,101,120,116,101,114,110,97,108,62,218,11,95,114,101, - 108,97,120,95,99,97,115,101,30,0,0,0,115,2,0,0, - 0,0,2,122,37,95,109,97,107,101,95,114,101,108,97,120, - 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, - 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, - 4,0,0,0,100,1,0,83,41,2,122,53,84,114,117,101, - 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, - 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, - 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, - 46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0, - 34,0,0,0,115,2,0,0,0,0,2,41,4,218,3,115, - 121,115,218,8,112,108,97,116,102,111,114,109,218,10,115,116, - 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, - 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, - 70,79,82,77,83,41,1,114,6,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,16,95,109,97, - 107,101,95,114,101,108,97,120,95,99,97,115,101,28,0,0, - 0,115,8,0,0,0,0,1,18,1,15,4,12,3,114,11, - 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,26,0,0,0,116,0,0, - 124,0,0,131,1,0,100,1,0,64,106,1,0,100,2,0, - 100,3,0,131,2,0,83,41,4,122,42,67,111,110,118,101, - 114,116,32,97,32,51,50,45,98,105,116,32,105,110,116,101, - 103,101,114,32,116,111,32,108,105,116,116,108,101,45,101,110, - 100,105,97,110,46,108,3,0,0,0,255,127,255,127,3,0, - 233,4,0,0,0,218,6,108,105,116,116,108,101,41,2,218, - 3,105,110,116,218,8,116,111,95,98,121,116,101,115,41,1, - 218,1,120,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,7,95,119,95,108,111,110,103,40,0,0,0,115, - 2,0,0,0,0,2,114,17,0,0,0,99,1,0,0,0, + 0,114,72,0,116,0,0,106,1,0,106,2,0,116,4,0, + 131,1,0,114,45,0,100,1,0,137,0,0,110,6,0,100, + 2,0,137,0,0,135,0,0,102,1,0,100,3,0,100,4, + 0,134,0,0,125,0,0,110,12,0,100,5,0,100,4,0, + 132,0,0,125,0,0,124,0,0,83,41,6,78,90,12,80, + 89,84,72,79,78,67,65,83,69,79,75,115,12,0,0,0, + 80,89,84,72,79,78,67,65,83,69,79,75,99,0,0,0, + 0,0,0,0,0,0,0,0,0,2,0,0,0,19,0,0, + 0,115,13,0,0,0,136,0,0,116,0,0,106,1,0,107, + 6,0,83,41,1,122,53,84,114,117,101,32,105,102,32,102, + 105,108,101,110,97,109,101,115,32,109,117,115,116,32,98,101, + 32,99,104,101,99,107,101,100,32,99,97,115,101,45,105,110, + 115,101,110,115,105,116,105,118,101,108,121,46,41,2,218,3, + 95,111,115,90,7,101,110,118,105,114,111,110,169,0,41,1, + 218,3,107,101,121,114,4,0,0,0,250,38,60,102,114,111, + 122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98, + 111,111,116,115,116,114,97,112,95,101,120,116,101,114,110,97, + 108,62,218,11,95,114,101,108,97,120,95,99,97,115,101,37, + 0,0,0,115,2,0,0,0,0,2,122,37,95,109,97,107, + 101,95,114,101,108,97,120,95,99,97,115,101,46,60,108,111, + 99,97,108,115,62,46,95,114,101,108,97,120,95,99,97,115, + 101,99,0,0,0,0,0,0,0,0,0,0,0,0,1,0, + 0,0,83,0,0,0,115,4,0,0,0,100,1,0,83,41, + 2,122,53,84,114,117,101,32,105,102,32,102,105,108,101,110, + 97,109,101,115,32,109,117,115,116,32,98,101,32,99,104,101, + 99,107,101,100,32,99,97,115,101,45,105,110,115,101,110,115, + 105,116,105,118,101,108,121,46,70,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,7,0,0,0,41,0,0,0,115,2,0,0,0, + 0,2,41,5,218,3,115,121,115,218,8,112,108,97,116,102, + 111,114,109,218,10,115,116,97,114,116,115,119,105,116,104,218, + 27,95,67,65,83,69,95,73,78,83,69,78,83,73,84,73, + 86,69,95,80,76,65,84,70,79,82,77,83,218,35,95,67, + 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95, + 80,76,65,84,70,79,82,77,83,95,83,84,82,95,75,69, + 89,41,1,114,7,0,0,0,114,4,0,0,0,41,1,114, + 5,0,0,0,114,6,0,0,0,218,16,95,109,97,107,101, + 95,114,101,108,97,120,95,99,97,115,101,30,0,0,0,115, + 14,0,0,0,0,1,18,1,18,1,9,2,6,2,21,4, + 12,3,114,13,0,0,0,99,1,0,0,0,0,0,0,0, + 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, + 0,116,0,0,124,0,0,131,1,0,100,1,0,64,106,1, + 0,100,2,0,100,3,0,131,2,0,83,41,4,122,42,67, + 111,110,118,101,114,116,32,97,32,51,50,45,98,105,116,32, + 105,110,116,101,103,101,114,32,116,111,32,108,105,116,116,108, + 101,45,101,110,100,105,97,110,46,108,3,0,0,0,255,127, + 255,127,3,0,233,4,0,0,0,218,6,108,105,116,116,108, + 101,41,2,218,3,105,110,116,218,8,116,111,95,98,121,116, + 101,115,41,1,218,1,120,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,7,95,119,95,108,111,110,103,47, + 0,0,0,115,2,0,0,0,0,2,114,19,0,0,0,99, + 1,0,0,0,0,0,0,0,1,0,0,0,3,0,0,0, + 67,0,0,0,115,16,0,0,0,116,0,0,106,1,0,124, + 0,0,100,1,0,131,2,0,83,41,2,122,47,67,111,110, + 118,101,114,116,32,52,32,98,121,116,101,115,32,105,110,32, + 108,105,116,116,108,101,45,101,110,100,105,97,110,32,116,111, + 32,97,110,32,105,110,116,101,103,101,114,46,114,15,0,0, + 0,41,2,114,16,0,0,0,218,10,102,114,111,109,95,98, + 121,116,101,115,41,1,90,9,105,110,116,95,98,121,116,101, + 115,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,7,95,114,95,108,111,110,103,52,0,0,0,115,2,0, + 0,0,0,2,114,21,0,0,0,99,0,0,0,0,0,0, + 0,0,1,0,0,0,3,0,0,0,71,0,0,0,115,26, + 0,0,0,116,0,0,106,1,0,100,1,0,100,2,0,132, + 0,0,124,0,0,68,131,1,0,131,1,0,83,41,3,122, + 31,82,101,112,108,97,99,101,109,101,110,116,32,102,111,114, + 32,111,115,46,112,97,116,104,46,106,111,105,110,40,41,46, + 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,83,0,0,0,115,37,0,0,0,103,0,0,124,0,0, + 93,27,0,125,1,0,124,1,0,114,6,0,124,1,0,106, + 0,0,116,1,0,131,1,0,145,2,0,113,6,0,83,114, + 4,0,0,0,41,2,218,6,114,115,116,114,105,112,218,15, + 112,97,116,104,95,115,101,112,97,114,97,116,111,114,115,41, + 2,218,2,46,48,218,4,112,97,114,116,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,250,10,60,108,105,115, + 116,99,111,109,112,62,59,0,0,0,115,2,0,0,0,9, + 1,122,30,95,112,97,116,104,95,106,111,105,110,46,60,108, + 111,99,97,108,115,62,46,60,108,105,115,116,99,111,109,112, + 62,41,2,218,8,112,97,116,104,95,115,101,112,218,4,106, + 111,105,110,41,1,218,10,112,97,116,104,95,112,97,114,116, + 115,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,10,95,112,97,116,104,95,106,111,105,110,57,0,0,0, + 115,4,0,0,0,0,2,15,1,114,30,0,0,0,99,1, + 0,0,0,0,0,0,0,5,0,0,0,5,0,0,0,67, + 0,0,0,115,134,0,0,0,116,0,0,116,1,0,131,1, + 0,100,1,0,107,2,0,114,52,0,124,0,0,106,2,0, + 116,3,0,131,1,0,92,3,0,125,1,0,125,2,0,125, + 3,0,124,1,0,124,3,0,102,2,0,83,120,69,0,116, + 4,0,124,0,0,131,1,0,68,93,55,0,125,4,0,124, + 4,0,116,1,0,107,6,0,114,65,0,124,0,0,106,5, + 0,124,4,0,100,2,0,100,1,0,131,1,1,92,2,0, + 125,1,0,125,3,0,124,1,0,124,3,0,102,2,0,83, + 113,65,0,87,100,3,0,124,0,0,102,2,0,83,41,4, + 122,32,82,101,112,108,97,99,101,109,101,110,116,32,102,111, + 114,32,111,115,46,112,97,116,104,46,115,112,108,105,116,40, + 41,46,233,1,0,0,0,90,8,109,97,120,115,112,108,105, + 116,218,0,41,6,218,3,108,101,110,114,23,0,0,0,218, + 10,114,112,97,114,116,105,116,105,111,110,114,27,0,0,0, + 218,8,114,101,118,101,114,115,101,100,218,6,114,115,112,108, + 105,116,41,5,218,4,112,97,116,104,90,5,102,114,111,110, + 116,218,1,95,218,4,116,97,105,108,114,18,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,11, + 95,112,97,116,104,95,115,112,108,105,116,63,0,0,0,115, + 16,0,0,0,0,2,18,1,24,1,10,1,19,1,12,1, + 27,1,14,1,114,40,0,0,0,99,1,0,0,0,0,0, + 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,13, + 0,0,0,116,0,0,106,1,0,124,0,0,131,1,0,83, + 41,1,122,126,83,116,97,116,32,116,104,101,32,112,97,116, + 104,46,10,10,32,32,32,32,77,97,100,101,32,97,32,115, + 101,112,97,114,97,116,101,32,102,117,110,99,116,105,111,110, + 32,116,111,32,109,97,107,101,32,105,116,32,101,97,115,105, + 101,114,32,116,111,32,111,118,101,114,114,105,100,101,32,105, + 110,32,101,120,112,101,114,105,109,101,110,116,115,10,32,32, + 32,32,40,101,46,103,46,32,99,97,99,104,101,32,115,116, + 97,116,32,114,101,115,117,108,116,115,41,46,10,10,32,32, + 32,32,41,2,114,3,0,0,0,90,4,115,116,97,116,41, + 1,114,37,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,10,95,112,97,116,104,95,115,116,97, + 116,75,0,0,0,115,2,0,0,0,0,7,114,41,0,0, + 0,99,2,0,0,0,0,0,0,0,3,0,0,0,11,0, + 0,0,67,0,0,0,115,58,0,0,0,121,16,0,116,0, + 0,124,0,0,131,1,0,125,2,0,87,110,22,0,4,116, + 1,0,107,10,0,114,40,0,1,1,1,100,1,0,83,89, + 110,1,0,88,124,2,0,106,2,0,100,2,0,64,124,1, + 0,107,2,0,83,41,3,122,49,84,101,115,116,32,119,104, + 101,116,104,101,114,32,116,104,101,32,112,97,116,104,32,105, + 115,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, + 109,111,100,101,32,116,121,112,101,46,70,105,0,240,0,0, + 41,3,114,41,0,0,0,218,7,79,83,69,114,114,111,114, + 218,7,115,116,95,109,111,100,101,41,3,114,37,0,0,0, + 218,4,109,111,100,101,90,9,115,116,97,116,95,105,110,102, + 111,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,18,95,112,97,116,104,95,105,115,95,109,111,100,101,95, + 116,121,112,101,85,0,0,0,115,10,0,0,0,0,2,3, + 1,16,1,13,1,9,1,114,45,0,0,0,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,13,0,0,0,116,0,0,124,0,0,100,1,0,131, + 2,0,83,41,2,122,31,82,101,112,108,97,99,101,109,101, + 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, + 115,102,105,108,101,46,105,0,128,0,0,41,1,114,45,0, + 0,0,41,1,114,37,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,12,95,112,97,116,104,95, + 105,115,102,105,108,101,94,0,0,0,115,2,0,0,0,0, + 2,114,46,0,0,0,99,1,0,0,0,0,0,0,0,1, + 0,0,0,3,0,0,0,67,0,0,0,115,31,0,0,0, + 124,0,0,115,18,0,116,0,0,106,1,0,131,0,0,125, + 0,0,116,2,0,124,0,0,100,1,0,131,2,0,83,41, + 2,122,30,82,101,112,108,97,99,101,109,101,110,116,32,102, + 111,114,32,111,115,46,112,97,116,104,46,105,115,100,105,114, + 46,105,0,64,0,0,41,3,114,3,0,0,0,218,6,103, + 101,116,99,119,100,114,45,0,0,0,41,1,114,37,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,11,95,112,97,116,104,95,105,115,100,105,114,99,0,0, + 0,115,6,0,0,0,0,2,6,1,12,1,114,48,0,0, + 0,105,182,1,0,0,99,3,0,0,0,0,0,0,0,6, + 0,0,0,17,0,0,0,67,0,0,0,115,193,0,0,0, + 100,1,0,106,0,0,124,0,0,116,1,0,124,0,0,131, + 1,0,131,2,0,125,3,0,116,2,0,106,3,0,124,3, + 0,116,2,0,106,4,0,116,2,0,106,5,0,66,116,2, + 0,106,6,0,66,124,2,0,100,2,0,64,131,3,0,125, + 4,0,121,61,0,116,7,0,106,8,0,124,4,0,100,3, + 0,131,2,0,143,20,0,125,5,0,124,5,0,106,9,0, + 124,1,0,131,1,0,1,87,100,4,0,81,82,88,116,2, + 0,106,10,0,124,3,0,124,0,0,131,2,0,1,87,110, + 59,0,4,116,11,0,107,10,0,114,188,0,1,1,1,121, + 17,0,116,2,0,106,12,0,124,3,0,131,1,0,1,87, + 110,18,0,4,116,11,0,107,10,0,114,180,0,1,1,1, + 89,110,1,0,88,130,0,0,89,110,1,0,88,100,4,0, + 83,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,122,5,123,125,46,123,125,105,182, + 1,0,0,90,2,119,98,78,41,13,218,6,102,111,114,109, + 97,116,218,2,105,100,114,3,0,0,0,90,4,111,112,101, + 110,90,6,79,95,69,88,67,76,90,7,79,95,67,82,69, + 65,84,90,8,79,95,87,82,79,78,76,89,218,3,95,105, + 111,218,6,70,105,108,101,73,79,218,5,119,114,105,116,101, + 218,7,114,101,112,108,97,99,101,114,42,0,0,0,90,6, + 117,110,108,105,110,107,41,6,114,37,0,0,0,218,4,100, + 97,116,97,114,44,0,0,0,90,8,112,97,116,104,95,116, + 109,112,90,2,102,100,218,4,102,105,108,101,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,13,95,119,114, + 105,116,101,95,97,116,111,109,105,99,106,0,0,0,115,26, + 0,0,0,0,5,24,1,9,1,33,1,3,3,21,1,20, + 1,20,1,13,1,3,1,17,1,13,1,5,1,114,57,0, + 0,0,105,23,13,0,0,233,2,0,0,0,114,15,0,0, + 0,115,2,0,0,0,13,10,90,11,95,95,112,121,99,97, + 99,104,101,95,95,122,4,111,112,116,45,122,3,46,112,121, + 122,4,46,112,121,99,78,218,12,111,112,116,105,109,105,122, + 97,116,105,111,110,99,2,0,0,0,1,0,0,0,11,0, + 0,0,6,0,0,0,67,0,0,0,115,87,1,0,0,124, + 1,0,100,1,0,107,9,0,114,76,0,116,0,0,106,1, + 0,100,2,0,116,2,0,131,2,0,1,124,2,0,100,1, + 0,107,9,0,114,58,0,100,3,0,125,3,0,116,3,0, + 124,3,0,131,1,0,130,1,0,124,1,0,114,70,0,100, + 4,0,110,3,0,100,5,0,125,2,0,116,4,0,124,0, + 0,131,1,0,92,2,0,125,4,0,125,5,0,124,5,0, + 106,5,0,100,6,0,131,1,0,92,3,0,125,6,0,125, + 7,0,125,8,0,116,6,0,106,7,0,106,8,0,125,9, + 0,124,9,0,100,1,0,107,8,0,114,154,0,116,9,0, + 100,7,0,131,1,0,130,1,0,100,4,0,106,10,0,124, + 6,0,114,172,0,124,6,0,110,3,0,124,8,0,124,7, + 0,124,9,0,103,3,0,131,1,0,125,10,0,124,2,0, + 100,1,0,107,8,0,114,241,0,116,6,0,106,11,0,106, + 12,0,100,8,0,107,2,0,114,229,0,100,4,0,125,2, + 0,110,12,0,116,6,0,106,11,0,106,12,0,125,2,0, + 116,13,0,124,2,0,131,1,0,125,2,0,124,2,0,100, + 4,0,107,3,0,114,63,1,124,2,0,106,14,0,131,0, + 0,115,42,1,116,15,0,100,9,0,106,16,0,124,2,0, + 131,1,0,131,1,0,130,1,0,100,10,0,106,16,0,124, + 10,0,116,17,0,124,2,0,131,3,0,125,10,0,116,18, + 0,124,4,0,116,19,0,124,10,0,116,20,0,100,8,0, + 25,23,131,3,0,83,41,11,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,32,0,0,0,114,31,0, + 0,0,218,1,46,122,36,115,121,115,46,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,46,99,97,99,104,101,95, + 116,97,103,32,105,115,32,78,111,110,101,233,0,0,0,0, + 122,24,123,33,114,125,32,105,115,32,110,111,116,32,97,108, + 112,104,97,110,117,109,101,114,105,99,122,7,123,125,46,123, + 125,123,125,41,21,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,40,0,0,0,114,34,0,0,0,114, + 8,0,0,0,218,14,105,109,112,108,101,109,101,110,116,97, + 116,105,111,110,218,9,99,97,99,104,101,95,116,97,103,218, + 19,78,111,116,73,109,112,108,101,109,101,110,116,101,100,69, + 114,114,111,114,114,28,0,0,0,218,5,102,108,97,103,115, + 218,8,111,112,116,105,109,105,122,101,218,3,115,116,114,218, + 7,105,115,97,108,110,117,109,218,10,86,97,108,117,101,69, + 114,114,111,114,114,49,0,0,0,218,4,95,79,80,84,114, + 30,0,0,0,218,8,95,80,89,67,65,67,72,69,218,17, + 66,89,84,69,67,79,68,69,95,83,85,70,70,73,88,69, + 83,41,11,114,37,0,0,0,90,14,100,101,98,117,103,95, + 111,118,101,114,114,105,100,101,114,59,0,0,0,218,7,109, + 101,115,115,97,103,101,218,4,104,101,97,100,114,39,0,0, + 0,90,4,98,97,115,101,218,3,115,101,112,218,4,114,101, + 115,116,90,3,116,97,103,90,15,97,108,109,111,115,116,95, + 102,105,108,101,110,97,109,101,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,17,99,97,99,104,101,95,102, + 114,111,109,95,115,111,117,114,99,101,254,0,0,0,115,46, + 0,0,0,0,18,12,1,9,1,7,1,12,1,6,1,12, + 1,18,1,18,1,24,1,12,1,12,1,12,1,36,1,12, + 1,18,1,9,2,12,1,12,1,12,1,12,1,21,1,21, + 1,114,81,0,0,0,99,1,0,0,0,0,0,0,0,8, + 0,0,0,5,0,0,0,67,0,0,0,115,62,1,0,0, + 116,0,0,106,1,0,106,2,0,100,1,0,107,8,0,114, + 30,0,116,3,0,100,2,0,131,1,0,130,1,0,116,4, + 0,124,0,0,131,1,0,92,2,0,125,1,0,125,2,0, + 116,4,0,124,1,0,131,1,0,92,2,0,125,1,0,125, + 3,0,124,3,0,116,5,0,107,3,0,114,102,0,116,6, + 0,100,3,0,106,7,0,116,5,0,124,0,0,131,2,0, + 131,1,0,130,1,0,124,2,0,106,8,0,100,4,0,131, + 1,0,125,4,0,124,4,0,100,11,0,107,7,0,114,153, + 0,116,6,0,100,7,0,106,7,0,124,2,0,131,1,0, + 131,1,0,130,1,0,110,125,0,124,4,0,100,6,0,107, + 2,0,114,22,1,124,2,0,106,9,0,100,4,0,100,5, + 0,131,2,0,100,12,0,25,125,5,0,124,5,0,106,10, + 0,116,11,0,131,1,0,115,223,0,116,6,0,100,8,0, + 106,7,0,116,11,0,131,1,0,131,1,0,130,1,0,124, + 5,0,116,12,0,116,11,0,131,1,0,100,1,0,133,2, + 0,25,125,6,0,124,6,0,106,13,0,131,0,0,115,22, + 1,116,6,0,100,9,0,106,7,0,124,5,0,131,1,0, + 131,1,0,130,1,0,124,2,0,106,14,0,100,4,0,131, + 1,0,100,10,0,25,125,7,0,116,15,0,124,1,0,124, + 7,0,116,16,0,100,10,0,25,23,131,2,0,83,41,13, + 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,122,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,122,37,123,125,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,123,33,114, + 125,114,60,0,0,0,114,58,0,0,0,233,3,0,0,0, + 122,33,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,123, + 33,114,125,122,57,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,123,33,114,125,122,52, + 111,112,116,105,109,105,122,97,116,105,111,110,32,108,101,118, + 101,108,32,123,33,114,125,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,61,0,0,0,62,2,0,0,0,114,58, + 0,0,0,114,82,0,0,0,233,254,255,255,255,41,17,114, + 8,0,0,0,114,66,0,0,0,114,67,0,0,0,114,68, + 0,0,0,114,40,0,0,0,114,75,0,0,0,114,73,0, + 0,0,114,49,0,0,0,218,5,99,111,117,110,116,114,36, + 0,0,0,114,10,0,0,0,114,74,0,0,0,114,33,0, + 0,0,114,72,0,0,0,218,9,112,97,114,116,105,116,105, + 111,110,114,30,0,0,0,218,15,83,79,85,82,67,69,95, + 83,85,70,70,73,88,69,83,41,8,114,37,0,0,0,114, + 78,0,0,0,90,16,112,121,99,97,99,104,101,95,102,105, + 108,101,110,97,109,101,90,7,112,121,99,97,99,104,101,90, + 9,100,111,116,95,99,111,117,110,116,114,59,0,0,0,90, + 9,111,112,116,95,108,101,118,101,108,90,13,98,97,115,101, + 95,102,105,108,101,110,97,109,101,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,17,115,111,117,114,99,101, + 95,102,114,111,109,95,99,97,99,104,101,42,1,0,0,115, + 44,0,0,0,0,9,18,1,12,1,18,1,18,1,12,1, + 9,1,15,1,15,1,12,1,9,1,15,1,12,1,22,1, + 15,1,9,1,12,1,22,1,12,1,9,1,12,1,19,1, + 114,87,0,0,0,99,1,0,0,0,0,0,0,0,5,0, + 0,0,12,0,0,0,67,0,0,0,115,164,0,0,0,116, + 0,0,124,0,0,131,1,0,100,1,0,107,2,0,114,22, + 0,100,2,0,83,124,0,0,106,1,0,100,3,0,131,1, + 0,92,3,0,125,1,0,125,2,0,125,3,0,124,1,0, + 12,115,81,0,124,3,0,106,2,0,131,0,0,100,7,0, + 100,8,0,133,2,0,25,100,6,0,107,3,0,114,85,0, + 124,0,0,83,121,16,0,116,3,0,124,0,0,131,1,0, + 125,4,0,87,110,40,0,4,116,4,0,116,5,0,102,2, + 0,107,10,0,114,143,0,1,1,1,124,0,0,100,2,0, + 100,9,0,133,2,0,25,125,4,0,89,110,1,0,88,116, + 6,0,124,4,0,131,1,0,114,160,0,124,4,0,83,124, + 0,0,83,41,10,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,61,0,0,0,78,114,60,0,0,0,114,82, + 0,0,0,114,31,0,0,0,90,2,112,121,233,253,255,255, + 255,233,255,255,255,255,114,89,0,0,0,41,7,114,33,0, + 0,0,114,34,0,0,0,218,5,108,111,119,101,114,114,87, + 0,0,0,114,68,0,0,0,114,73,0,0,0,114,46,0, + 0,0,41,5,218,13,98,121,116,101,99,111,100,101,95,112, + 97,116,104,114,80,0,0,0,114,38,0,0,0,90,9,101, + 120,116,101,110,115,105,111,110,218,11,115,111,117,114,99,101, + 95,112,97,116,104,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,15,95,103,101,116,95,115,111,117,114,99, + 101,102,105,108,101,75,1,0,0,115,20,0,0,0,0,7, + 18,1,4,1,24,1,35,1,4,1,3,1,16,1,19,1, + 21,1,114,93,0,0,0,99,1,0,0,0,0,0,0,0, + 1,0,0,0,11,0,0,0,67,0,0,0,115,92,0,0, + 0,124,0,0,106,0,0,116,1,0,116,2,0,131,1,0, + 131,1,0,114,59,0,121,14,0,116,3,0,124,0,0,131, + 1,0,83,87,113,88,0,4,116,4,0,107,10,0,114,55, + 0,1,1,1,89,113,88,0,88,110,29,0,124,0,0,106, + 0,0,116,1,0,116,5,0,131,1,0,131,1,0,114,84, + 0,124,0,0,83,100,0,0,83,100,0,0,83,41,1,78, + 41,6,218,8,101,110,100,115,119,105,116,104,218,5,116,117, + 112,108,101,114,86,0,0,0,114,81,0,0,0,114,68,0, + 0,0,114,76,0,0,0,41,1,218,8,102,105,108,101,110, + 97,109,101,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,11,95,103,101,116,95,99,97,99,104,101,100,94, + 1,0,0,115,16,0,0,0,0,1,21,1,3,1,14,1, + 13,1,8,1,21,1,4,2,114,97,0,0,0,99,1,0, + 0,0,0,0,0,0,2,0,0,0,11,0,0,0,67,0, + 0,0,115,60,0,0,0,121,19,0,116,0,0,124,0,0, + 131,1,0,106,1,0,125,1,0,87,110,24,0,4,116,2, + 0,107,10,0,114,45,0,1,1,1,100,1,0,125,1,0, + 89,110,1,0,88,124,1,0,100,2,0,79,125,1,0,124, + 1,0,83,41,3,122,51,67,97,108,99,117,108,97,116,101, + 32,116,104,101,32,109,111,100,101,32,112,101,114,109,105,115, + 115,105,111,110,115,32,102,111,114,32,97,32,98,121,116,101, + 99,111,100,101,32,102,105,108,101,46,105,182,1,0,0,233, + 128,0,0,0,41,3,114,41,0,0,0,114,43,0,0,0, + 114,42,0,0,0,41,2,114,37,0,0,0,114,44,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,10,95,99,97,108,99,95,109,111,100,101,106,1,0,0, + 115,12,0,0,0,0,2,3,1,19,1,13,1,11,3,10, + 1,114,99,0,0,0,218,9,118,101,114,98,111,115,105,116, + 121,114,31,0,0,0,99,1,0,0,0,1,0,0,0,3, + 0,0,0,4,0,0,0,71,0,0,0,115,75,0,0,0, + 116,0,0,106,1,0,106,2,0,124,1,0,107,5,0,114, + 71,0,124,0,0,106,3,0,100,6,0,131,1,0,115,43, + 0,100,3,0,124,0,0,23,125,0,0,116,4,0,124,0, + 0,106,5,0,124,2,0,140,0,0,100,4,0,116,0,0, + 106,6,0,131,1,1,1,100,5,0,83,41,7,122,61,80, + 114,105,110,116,32,116,104,101,32,109,101,115,115,97,103,101, + 32,116,111,32,115,116,100,101,114,114,32,105,102,32,45,118, + 47,80,89,84,72,79,78,86,69,82,66,79,83,69,32,105, + 115,32,116,117,114,110,101,100,32,111,110,46,250,1,35,250, + 7,105,109,112,111,114,116,32,122,2,35,32,114,56,0,0, + 0,78,41,2,114,101,0,0,0,114,102,0,0,0,41,7, + 114,8,0,0,0,114,69,0,0,0,218,7,118,101,114,98, + 111,115,101,114,10,0,0,0,218,5,112,114,105,110,116,114, + 49,0,0,0,218,6,115,116,100,101,114,114,41,3,114,77, + 0,0,0,114,100,0,0,0,218,4,97,114,103,115,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,16,95, + 118,101,114,98,111,115,101,95,109,101,115,115,97,103,101,118, + 1,0,0,115,8,0,0,0,0,2,18,1,15,1,10,1, + 114,107,0,0,0,99,1,0,0,0,0,0,0,0,3,0, + 0,0,11,0,0,0,3,0,0,0,115,84,0,0,0,100, + 1,0,135,0,0,102,1,0,100,2,0,100,3,0,134,1, + 0,125,1,0,121,13,0,116,0,0,106,1,0,125,2,0, + 87,110,30,0,4,116,2,0,107,10,0,114,66,0,1,1, + 1,100,4,0,100,5,0,132,0,0,125,2,0,89,110,1, + 0,88,124,2,0,124,1,0,136,0,0,131,2,0,1,124, + 1,0,83,41,6,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,4,0,0, + 0,5,0,0,0,31,0,0,0,115,89,0,0,0,124,1, + 0,100,0,0,107,8,0,114,24,0,124,0,0,106,0,0, + 125,1,0,110,46,0,124,0,0,106,0,0,124,1,0,107, + 3,0,114,70,0,116,1,0,100,1,0,124,0,0,106,0, + 0,124,1,0,102,2,0,22,100,2,0,124,1,0,131,1, + 1,130,1,0,136,0,0,124,0,0,124,1,0,124,2,0, + 124,3,0,142,2,0,83,41,3,78,122,30,108,111,97,100, + 101,114,32,102,111,114,32,37,115,32,99,97,110,110,111,116, + 32,104,97,110,100,108,101,32,37,115,218,4,110,97,109,101, + 41,2,114,108,0,0,0,218,11,73,109,112,111,114,116,69, + 114,114,111,114,41,4,218,4,115,101,108,102,114,108,0,0, + 0,114,106,0,0,0,90,6,107,119,97,114,103,115,41,1, + 218,6,109,101,116,104,111,100,114,4,0,0,0,114,6,0, + 0,0,218,19,95,99,104,101,99,107,95,110,97,109,101,95, + 119,114,97,112,112,101,114,134,1,0,0,115,12,0,0,0, + 0,1,12,1,12,1,15,1,6,1,25,1,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,3, + 0,0,0,7,0,0,0,83,0,0,0,115,92,0,0,0, + 120,66,0,100,1,0,100,2,0,100,3,0,100,4,0,103, + 4,0,68,93,46,0,125,2,0,116,0,0,124,1,0,124, + 2,0,131,2,0,114,19,0,116,1,0,124,0,0,124,2, + 0,116,2,0,124,1,0,124,2,0,131,2,0,131,3,0, + 1,113,19,0,87,124,0,0,106,3,0,106,4,0,124,1, + 0,106,3,0,131,1,0,1,100,0,0,83,41,5,78,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,54,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,5,95,119,114, + 97,112,145,1,0,0,115,8,0,0,0,0,1,25,1,15, + 1,29,1,122,26,95,99,104,101,99,107,95,110,97,109,101, + 46,60,108,111,99,97,108,115,62,46,95,119,114,97,112,41, + 3,218,10,95,98,111,111,116,115,116,114,97,112,114,122,0, + 0,0,218,9,78,97,109,101,69,114,114,111,114,41,3,114, + 111,0,0,0,114,112,0,0,0,114,122,0,0,0,114,4, + 0,0,0,41,1,114,111,0,0,0,114,6,0,0,0,218, + 11,95,99,104,101,99,107,95,110,97,109,101,126,1,0,0, + 115,14,0,0,0,0,8,21,7,3,1,13,1,13,2,17, + 5,13,1,114,125,0,0,0,99,2,0,0,0,0,0,0, + 0,5,0,0,0,4,0,0,0,67,0,0,0,115,84,0, + 0,0,124,0,0,106,0,0,124,1,0,131,1,0,92,2, + 0,125,2,0,125,3,0,124,2,0,100,1,0,107,8,0, + 114,80,0,116,1,0,124,3,0,131,1,0,114,80,0,100, + 2,0,125,4,0,116,2,0,106,3,0,124,4,0,106,4, + 0,124,3,0,100,3,0,25,131,1,0,116,5,0,131,2, + 0,1,124,2,0,83,41,4,122,155,84,114,121,32,116,111, + 32,102,105,110,100,32,97,32,108,111,97,100,101,114,32,102, + 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, + 32,109,111,100,117,108,101,32,98,121,32,100,101,108,101,103, + 97,116,105,110,103,32,116,111,10,32,32,32,32,115,101,108, + 102,46,102,105,110,100,95,108,111,97,100,101,114,40,41,46, + 10,10,32,32,32,32,84,104,105,115,32,109,101,116,104,111, + 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,32, + 105,110,32,102,97,118,111,114,32,111,102,32,102,105,110,100, + 101,114,46,102,105,110,100,95,115,112,101,99,40,41,46,10, + 10,32,32,32,32,78,122,44,78,111,116,32,105,109,112,111, + 114,116,105,110,103,32,100,105,114,101,99,116,111,114,121,32, + 123,125,58,32,109,105,115,115,105,110,103,32,95,95,105,110, + 105,116,95,95,114,61,0,0,0,41,6,218,11,102,105,110, + 100,95,108,111,97,100,101,114,114,33,0,0,0,114,62,0, + 0,0,114,63,0,0,0,114,49,0,0,0,218,13,73,109, + 112,111,114,116,87,97,114,110,105,110,103,41,5,114,110,0, + 0,0,218,8,102,117,108,108,110,97,109,101,218,6,108,111, + 97,100,101,114,218,8,112,111,114,116,105,111,110,115,218,3, + 109,115,103,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,17,95,102,105,110,100,95,109,111,100,117,108,101, + 95,115,104,105,109,154,1,0,0,115,10,0,0,0,0,10, + 21,1,24,1,6,1,29,1,114,132,0,0,0,99,4,0, + 0,0,0,0,0,0,11,0,0,0,19,0,0,0,67,0, + 0,0,115,240,1,0,0,105,0,0,125,4,0,124,2,0, + 100,1,0,107,9,0,114,31,0,124,2,0,124,4,0,100, + 2,0,60,110,6,0,100,3,0,125,2,0,124,3,0,100, + 1,0,107,9,0,114,59,0,124,3,0,124,4,0,100,4, + 0,60,124,0,0,100,1,0,100,5,0,133,2,0,25,125, + 5,0,124,0,0,100,5,0,100,6,0,133,2,0,25,125, + 6,0,124,0,0,100,6,0,100,7,0,133,2,0,25,125, + 7,0,124,5,0,116,0,0,107,3,0,114,168,0,100,8, + 0,106,1,0,124,2,0,124,5,0,131,2,0,125,8,0, + 116,2,0,100,9,0,124,8,0,131,2,0,1,116,3,0, + 124,8,0,124,4,0,141,1,0,130,1,0,110,119,0,116, + 4,0,124,6,0,131,1,0,100,5,0,107,3,0,114,229, + 0,100,10,0,106,1,0,124,2,0,131,1,0,125,8,0, + 116,2,0,100,9,0,124,8,0,131,2,0,1,116,5,0, + 124,8,0,131,1,0,130,1,0,110,58,0,116,4,0,124, + 7,0,131,1,0,100,5,0,107,3,0,114,31,1,100,11, + 0,106,1,0,124,2,0,131,1,0,125,8,0,116,2,0, + 100,9,0,124,8,0,131,2,0,1,116,5,0,124,8,0, + 131,1,0,130,1,0,124,1,0,100,1,0,107,9,0,114, + 226,1,121,20,0,116,6,0,124,1,0,100,12,0,25,131, + 1,0,125,9,0,87,110,18,0,4,116,7,0,107,10,0, + 114,83,1,1,1,1,89,110,62,0,88,116,8,0,124,6, + 0,131,1,0,124,9,0,107,3,0,114,145,1,100,13,0, + 106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,100, + 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, + 4,0,141,1,0,130,1,0,121,18,0,124,1,0,100,14, + 0,25,100,15,0,64,125,10,0,87,110,18,0,4,116,7, + 0,107,10,0,114,183,1,1,1,1,89,110,43,0,88,116, + 8,0,124,7,0,131,1,0,124,10,0,107,3,0,114,226, + 1,116,3,0,100,13,0,106,1,0,124,2,0,131,1,0, + 124,4,0,141,1,0,130,1,0,124,0,0,100,7,0,100, + 1,0,133,2,0,25,83,41,16,97,122,1,0,0,86,97, + 108,105,100,97,116,101,32,116,104,101,32,104,101,97,100,101, + 114,32,111,102,32,116,104,101,32,112,97,115,115,101,100,45, + 105,110,32,98,121,116,101,99,111,100,101,32,97,103,97,105, + 110,115,116,32,115,111,117,114,99,101,95,115,116,97,116,115, + 32,40,105,102,10,32,32,32,32,103,105,118,101,110,41,32, + 97,110,100,32,114,101,116,117,114,110,105,110,103,32,116,104, + 101,32,98,121,116,101,99,111,100,101,32,116,104,97,116,32, + 99,97,110,32,98,101,32,99,111,109,112,105,108,101,100,32, + 98,121,32,99,111,109,112,105,108,101,40,41,46,10,10,32, + 32,32,32,65,108,108,32,111,116,104,101,114,32,97,114,103, + 117,109,101,110,116,115,32,97,114,101,32,117,115,101,100,32, + 116,111,32,101,110,104,97,110,99,101,32,101,114,114,111,114, + 32,114,101,112,111,114,116,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,116,104,101, + 32,98,121,116,101,99,111,100,101,32,105,115,10,32,32,32, + 32,102,111,117,110,100,32,116,111,32,98,101,32,115,116,97, + 108,101,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,10,32,32,32,32,116,114,117,110,99,97,116,101, + 100,46,10,10,32,32,32,32,78,114,108,0,0,0,122,10, + 60,98,121,116,101,99,111,100,101,62,114,37,0,0,0,114, + 14,0,0,0,233,8,0,0,0,233,12,0,0,0,122,30, + 98,97,100,32,109,97,103,105,99,32,110,117,109,98,101,114, + 32,105,110,32,123,33,114,125,58,32,123,33,114,125,122,2, + 123,125,122,43,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,116,105, + 109,101,115,116,97,109,112,32,105,110,32,123,33,114,125,122, + 48,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,115,105,122,101,32, + 111,102,32,115,111,117,114,99,101,32,105,110,32,123,33,114, + 125,218,5,109,116,105,109,101,122,26,98,121,116,101,99,111, + 100,101,32,105,115,32,115,116,97,108,101,32,102,111,114,32, + 123,33,114,125,218,4,115,105,122,101,108,3,0,0,0,255, + 127,255,127,3,0,41,9,218,12,77,65,71,73,67,95,78, + 85,77,66,69,82,114,49,0,0,0,114,107,0,0,0,114, + 109,0,0,0,114,33,0,0,0,218,8,69,79,70,69,114, + 114,111,114,114,16,0,0,0,218,8,75,101,121,69,114,114, + 111,114,114,21,0,0,0,41,11,114,55,0,0,0,218,12, + 115,111,117,114,99,101,95,115,116,97,116,115,114,108,0,0, + 0,114,37,0,0,0,90,11,101,120,99,95,100,101,116,97, + 105,108,115,90,5,109,97,103,105,99,90,13,114,97,119,95, + 116,105,109,101,115,116,97,109,112,90,8,114,97,119,95,115, + 105,122,101,114,77,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,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,25,95,118,97,108,105,100,97,116,101,95,98,121, + 116,101,99,111,100,101,95,104,101,97,100,101,114,171,1,0, + 0,115,76,0,0,0,0,11,6,1,12,1,13,3,6,1, + 12,1,10,1,16,1,16,1,16,1,12,1,18,1,13,1, + 18,1,18,1,15,1,13,1,15,1,18,1,15,1,13,1, + 12,1,12,1,3,1,20,1,13,1,5,2,18,1,15,1, + 13,1,15,1,3,1,18,1,13,1,5,2,18,1,15,1, + 9,1,114,143,0,0,0,99,4,0,0,0,0,0,0,0, + 5,0,0,0,6,0,0,0,67,0,0,0,115,112,0,0, + 0,116,0,0,106,1,0,124,0,0,131,1,0,125,4,0, + 116,2,0,124,4,0,116,3,0,131,2,0,114,75,0,116, + 4,0,100,1,0,124,2,0,131,2,0,1,124,3,0,100, + 2,0,107,9,0,114,71,0,116,5,0,106,6,0,124,4, + 0,124,3,0,131,2,0,1,124,4,0,83,116,7,0,100, + 3,0,106,8,0,124,2,0,131,1,0,100,4,0,124,1, + 0,100,5,0,124,2,0,131,1,2,130,1,0,100,2,0, + 83,41,6,122,60,67,111,109,112,105,108,101,32,98,121,116, + 101,99,111,100,101,32,97,115,32,114,101,116,117,114,110,101, + 100,32,98,121,32,95,118,97,108,105,100,97,116,101,95,98, + 121,116,101,99,111,100,101,95,104,101,97,100,101,114,40,41, + 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,114,108,0,0,0,114,37,0,0,0,41,9,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,107,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,109,0,0,0,114,49,0,0,0,41,5,114, + 55,0,0,0,114,108,0,0,0,114,91,0,0,0,114,92, + 0,0,0,218,4,99,111,100,101,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,17,95,99,111,109,112,105, + 108,101,95,98,121,116,101,99,111,100,101,226,1,0,0,115, + 16,0,0,0,0,2,15,1,15,1,13,1,12,1,16,1, + 4,2,18,1,114,149,0,0,0,114,61,0,0,0,99,3, + 0,0,0,0,0,0,0,4,0,0,0,3,0,0,0,67, + 0,0,0,115,76,0,0,0,116,0,0,116,1,0,131,1, + 0,125,3,0,124,3,0,106,2,0,116,3,0,124,1,0, + 131,1,0,131,1,0,1,124,3,0,106,2,0,116,3,0, + 124,2,0,131,1,0,131,1,0,1,124,3,0,106,2,0, + 116,4,0,106,5,0,124,0,0,131,1,0,131,1,0,1, + 124,3,0,83,41,1,122,80,67,111,109,112,105,108,101,32, + 97,32,99,111,100,101,32,111,98,106,101,99,116,32,105,110, + 116,111,32,98,121,116,101,99,111,100,101,32,102,111,114,32, + 119,114,105,116,105,110,103,32,111,117,116,32,116,111,32,97, + 32,98,121,116,101,45,99,111,109,112,105,108,101,100,10,32, + 32,32,32,102,105,108,101,46,41,6,218,9,98,121,116,101, + 97,114,114,97,121,114,137,0,0,0,218,6,101,120,116,101, + 110,100,114,19,0,0,0,114,144,0,0,0,90,5,100,117, + 109,112,115,41,4,114,148,0,0,0,114,135,0,0,0,114, + 142,0,0,0,114,55,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,17,95,99,111,100,101,95, + 116,111,95,98,121,116,101,99,111,100,101,238,1,0,0,115, + 10,0,0,0,0,3,12,1,19,1,19,1,22,1,114,152, + 0,0,0,99,1,0,0,0,0,0,0,0,5,0,0,0, + 4,0,0,0,67,0,0,0,115,89,0,0,0,100,1,0, + 100,2,0,108,0,0,125,1,0,116,1,0,106,2,0,124, + 0,0,131,1,0,106,3,0,125,2,0,124,1,0,106,4, + 0,124,2,0,131,1,0,125,3,0,116,1,0,106,5,0, + 100,2,0,100,3,0,131,2,0,125,4,0,124,4,0,106, + 6,0,124,0,0,106,6,0,124,3,0,100,1,0,25,131, + 1,0,131,1,0,83,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,61,0,0,0,78,84,41,7,218,8,116,111, + 107,101,110,105,122,101,114,51,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,153,0,0,0,90,21,115,111,117,114,99,101,95, + 98,121,116,101,115,95,114,101,97,100,108,105,110,101,218,8, + 101,110,99,111,100,105,110,103,90,15,110,101,119,108,105,110, + 101,95,100,101,99,111,100,101,114,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,13,100,101,99,111,100,101, + 95,115,111,117,114,99,101,248,1,0,0,115,10,0,0,0, + 0,5,12,1,18,1,15,1,18,1,114,157,0,0,0,114, + 129,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,2,0,0,0,9,0,0,0,19,0,0, + 0,67,0,0,0,115,89,1,0,0,124,1,0,100,1,0, + 107,8,0,114,73,0,100,2,0,125,1,0,116,0,0,124, + 2,0,100,3,0,131,2,0,114,73,0,121,19,0,124,2, + 0,106,1,0,124,0,0,131,1,0,125,1,0,87,110,18, + 0,4,116,2,0,107,10,0,114,72,0,1,1,1,89,110, + 1,0,88,116,3,0,106,4,0,124,0,0,124,2,0,100, + 4,0,124,1,0,131,2,1,125,4,0,100,5,0,124,4, + 0,95,5,0,124,2,0,100,1,0,107,8,0,114,194,0, + 120,73,0,116,6,0,131,0,0,68,93,58,0,92,2,0, + 125,5,0,125,6,0,124,1,0,106,7,0,116,8,0,124, + 6,0,131,1,0,131,1,0,114,128,0,124,5,0,124,0, + 0,124,1,0,131,2,0,125,2,0,124,2,0,124,4,0, + 95,9,0,80,113,128,0,87,100,1,0,83,124,3,0,116, + 10,0,107,8,0,114,23,1,116,0,0,124,2,0,100,6, + 0,131,2,0,114,32,1,121,19,0,124,2,0,106,11,0, + 124,0,0,131,1,0,125,7,0,87,110,18,0,4,116,2, + 0,107,10,0,114,4,1,1,1,1,89,113,32,1,88,124, + 7,0,114,32,1,103,0,0,124,4,0,95,12,0,110,9, + 0,124,3,0,124,4,0,95,12,0,124,4,0,106,12,0, + 103,0,0,107,2,0,114,85,1,124,1,0,114,85,1,116, + 13,0,124,1,0,131,1,0,100,7,0,25,125,8,0,124, + 4,0,106,12,0,106,14,0,124,8,0,131,1,0,1,124, + 4,0,83,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,218,6,111,114,105,103,105,110,84,218,10,105,115,95,112, + 97,99,107,97,103,101,114,61,0,0,0,41,15,114,117,0, + 0,0,114,159,0,0,0,114,109,0,0,0,114,123,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,94,0,0,0,114,95, + 0,0,0,114,129,0,0,0,218,9,95,80,79,80,85,76, + 65,84,69,114,161,0,0,0,114,158,0,0,0,114,40,0, + 0,0,218,6,97,112,112,101,110,100,41,9,114,108,0,0, + 0,90,8,108,111,99,97,116,105,111,110,114,129,0,0,0, + 114,158,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,161,0,0,0,90,7,100,105,114,110,97,109, + 101,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,23,115,112,101,99,95,102,114,111,109,95,102,105,108,101, + 95,108,111,99,97,116,105,111,110,9,2,0,0,115,60,0, + 0,0,0,12,12,4,6,1,15,2,3,1,19,1,13,1, + 5,8,24,1,9,3,12,1,22,1,21,1,15,1,9,1, + 5,2,4,3,12,2,15,1,3,1,19,1,13,1,5,2, + 6,1,12,2,9,1,15,1,6,1,16,1,16,2,114,169, + 0,0,0,99,0,0,0,0,0,0,0,0,0,0,0,0, + 5,0,0,0,64,0,0,0,115,121,0,0,0,101,0,0, + 90,1,0,100,0,0,90,2,0,100,1,0,90,3,0,100, + 2,0,90,4,0,100,3,0,90,5,0,100,4,0,90,6, + 0,101,7,0,100,5,0,100,6,0,132,0,0,131,1,0, + 90,8,0,101,7,0,100,7,0,100,8,0,132,0,0,131, + 1,0,90,9,0,101,7,0,100,9,0,100,9,0,100,10, + 0,100,11,0,132,2,0,131,1,0,90,10,0,101,7,0, + 100,9,0,100,12,0,100,13,0,132,1,0,131,1,0,90, + 11,0,100,9,0,83,41,14,218,21,87,105,110,100,111,119, + 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,122, + 62,77,101,116,97,32,112,97,116,104,32,102,105,110,100,101, + 114,32,102,111,114,32,109,111,100,117,108,101,115,32,100,101, + 99,108,97,114,101,100,32,105,110,32,116,104,101,32,87,105, + 110,100,111,119,115,32,114,101,103,105,115,116,114,121,46,122, + 59,83,111,102,116,119,97,114,101,92,80,121,116,104,111,110, + 92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,115, + 95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,101, + 115,92,123,102,117,108,108,110,97,109,101,125,122,65,83,111, + 102,116,119,97,114,101,92,80,121,116,104,111,110,92,80,121, + 116,104,111,110,67,111,114,101,92,123,115,121,115,95,118,101, + 114,115,105,111,110,125,92,77,111,100,117,108,101,115,92,123, + 102,117,108,108,110,97,109,101,125,92,68,101,98,117,103,70, + 99,2,0,0,0,0,0,0,0,2,0,0,0,11,0,0, + 0,67,0,0,0,115,67,0,0,0,121,23,0,116,0,0, + 106,1,0,116,0,0,106,2,0,124,1,0,131,2,0,83, + 87,110,37,0,4,116,3,0,107,10,0,114,62,0,1,1, + 1,116,0,0,106,1,0,116,0,0,106,4,0,124,1,0, + 131,2,0,83,89,110,1,0,88,100,0,0,83,41,1,78, + 41,5,218,7,95,119,105,110,114,101,103,90,7,79,112,101, + 110,75,101,121,90,17,72,75,69,89,95,67,85,82,82,69, + 78,84,95,85,83,69,82,114,42,0,0,0,90,18,72,75, + 69,89,95,76,79,67,65,76,95,77,65,67,72,73,78,69, + 41,2,218,3,99,108,115,114,5,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,14,95,111,112, + 101,110,95,114,101,103,105,115,116,114,121,87,2,0,0,115, + 8,0,0,0,0,2,3,1,23,1,13,1,122,36,87,105, + 110,100,111,119,115,82,101,103,105,115,116,114,121,70,105,110, + 100,101,114,46,95,111,112,101,110,95,114,101,103,105,115,116, + 114,121,99,2,0,0,0,0,0,0,0,6,0,0,0,16, + 0,0,0,67,0,0,0,115,143,0,0,0,124,0,0,106, + 0,0,114,21,0,124,0,0,106,1,0,125,2,0,110,9, + 0,124,0,0,106,2,0,125,2,0,124,2,0,106,3,0, + 100,1,0,124,1,0,100,2,0,116,4,0,106,5,0,100, + 0,0,100,3,0,133,2,0,25,131,0,2,125,3,0,121, + 47,0,124,0,0,106,6,0,124,3,0,131,1,0,143,25, + 0,125,4,0,116,7,0,106,8,0,124,4,0,100,4,0, + 131,2,0,125,5,0,87,100,0,0,81,82,88,87,110,22, + 0,4,116,9,0,107,10,0,114,138,0,1,1,1,100,0, + 0,83,89,110,1,0,88,124,5,0,83,41,5,78,114,128, + 0,0,0,90,11,115,121,115,95,118,101,114,115,105,111,110, + 114,82,0,0,0,114,32,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,49,0,0,0, + 114,8,0,0,0,218,7,118,101,114,115,105,111,110,114,173, + 0,0,0,114,171,0,0,0,90,10,81,117,101,114,121,86, + 97,108,117,101,114,42,0,0,0,41,6,114,172,0,0,0, + 114,128,0,0,0,90,12,114,101,103,105,115,116,114,121,95, + 107,101,121,114,5,0,0,0,90,4,104,107,101,121,218,8, + 102,105,108,101,112,97,116,104,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,16,95,115,101,97,114,99,104, + 95,114,101,103,105,115,116,114,121,94,2,0,0,115,22,0, + 0,0,0,2,9,1,12,2,9,1,15,1,22,1,3,1, + 18,1,29,1,13,1,9,1,122,38,87,105,110,100,111,119, + 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, + 95,115,101,97,114,99,104,95,114,101,103,105,115,116,114,121, + 78,99,4,0,0,0,0,0,0,0,8,0,0,0,14,0, + 0,0,67,0,0,0,115,158,0,0,0,124,0,0,106,0, + 0,124,1,0,131,1,0,125,4,0,124,4,0,100,0,0, + 107,8,0,114,31,0,100,0,0,83,121,14,0,116,1,0, + 124,4,0,131,1,0,1,87,110,22,0,4,116,2,0,107, + 10,0,114,69,0,1,1,1,100,0,0,83,89,110,1,0, + 88,120,81,0,116,3,0,131,0,0,68,93,70,0,92,2, + 0,125,5,0,125,6,0,124,4,0,106,4,0,116,5,0, + 124,6,0,131,1,0,131,1,0,114,80,0,116,6,0,106, + 7,0,124,1,0,124,5,0,124,1,0,124,4,0,131,2, + 0,100,1,0,124,4,0,131,2,1,125,7,0,124,7,0, + 83,113,80,0,87,100,0,0,83,41,2,78,114,160,0,0, + 0,41,8,114,179,0,0,0,114,41,0,0,0,114,42,0, + 0,0,114,163,0,0,0,114,94,0,0,0,114,95,0,0, + 0,114,123,0,0,0,218,16,115,112,101,99,95,102,114,111, + 109,95,108,111,97,100,101,114,41,8,114,172,0,0,0,114, + 128,0,0,0,114,37,0,0,0,218,6,116,97,114,103,101, + 116,114,178,0,0,0,114,129,0,0,0,114,168,0,0,0, + 114,166,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,9,102,105,110,100,95,115,112,101,99,109, + 2,0,0,115,26,0,0,0,0,2,15,1,12,1,4,1, + 3,1,14,1,13,1,9,1,22,1,21,1,9,1,15,1, + 9,1,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,4,0,0,0, + 3,0,0,0,67,0,0,0,115,45,0,0,0,124,0,0, + 106,0,0,124,1,0,124,2,0,131,2,0,125,3,0,124, + 3,0,100,1,0,107,9,0,114,37,0,124,3,0,106,1, + 0,83,100,1,0,83,100,1,0,83,41,2,122,108,70,105, + 110,100,32,109,111,100,117,108,101,32,110,97,109,101,100,32, + 105,110,32,116,104,101,32,114,101,103,105,115,116,114,121,46, + 10,10,32,32,32,32,32,32,32,32,84,104,105,115,32,109, + 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,32,32,85,115,101,32,101,120,101,99,95,109, + 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, + 10,10,32,32,32,32,32,32,32,32,78,41,2,114,182,0, + 0,0,114,129,0,0,0,41,4,114,172,0,0,0,114,128, + 0,0,0,114,37,0,0,0,114,166,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,11,102,105, + 110,100,95,109,111,100,117,108,101,125,2,0,0,115,8,0, + 0,0,0,7,18,1,12,1,7,2,122,33,87,105,110,100, + 111,119,115,82,101,103,105,115,116,114,121,70,105,110,100,101, + 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, + 114,0,0,0,114,113,0,0,0,114,115,0,0,0,114,116, + 0,0,0,114,176,0,0,0,114,175,0,0,0,114,174,0, + 0,0,218,11,99,108,97,115,115,109,101,116,104,111,100,114, + 173,0,0,0,114,179,0,0,0,114,182,0,0,0,114,183, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,170,0,0,0,75,2,0,0, + 115,20,0,0,0,12,2,6,3,6,3,6,2,6,2,18, + 7,18,15,3,1,21,15,3,1,114,170,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,70,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, + 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, + 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, + 0,100,9,0,132,0,0,90,7,0,100,10,0,83,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,5,0,0, + 0,3,0,0,0,67,0,0,0,115,88,0,0,0,116,0, + 0,124,0,0,106,1,0,124,1,0,131,1,0,131,1,0, + 100,1,0,25,125,2,0,124,2,0,106,2,0,100,2,0, + 100,1,0,131,2,0,100,3,0,25,125,3,0,124,1,0, + 106,3,0,100,2,0,131,1,0,100,4,0,25,125,4,0, + 124,3,0,100,5,0,107,2,0,111,87,0,124,4,0,100, + 5,0,107,3,0,83,41,6,122,141,67,111,110,99,114,101, + 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, + 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, + 101,114,46,105,115,95,112,97,99,107,97,103,101,32,98,121, + 32,99,104,101,99,107,105,110,103,32,105,102,10,32,32,32, + 32,32,32,32,32,116,104,101,32,112,97,116,104,32,114,101, + 116,117,114,110,101,100,32,98,121,32,103,101,116,95,102,105, + 108,101,110,97,109,101,32,104,97,115,32,97,32,102,105,108, + 101,110,97,109,101,32,111,102,32,39,95,95,105,110,105,116, + 95,95,46,112,121,39,46,114,31,0,0,0,114,60,0,0, + 0,114,61,0,0,0,114,58,0,0,0,218,8,95,95,105, + 110,105,116,95,95,41,4,114,40,0,0,0,114,159,0,0, + 0,114,36,0,0,0,114,34,0,0,0,41,5,114,110,0, + 0,0,114,128,0,0,0,114,96,0,0,0,90,13,102,105, + 108,101,110,97,109,101,95,98,97,115,101,90,9,116,97,105, + 108,95,110,97,109,101,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,161,0,0,0,144,2,0,0,115,8, + 0,0,0,0,3,25,1,22,1,19,1,122,24,95,76,111, + 97,100,101,114,66,97,115,105,99,115,46,105,115,95,112,97, + 99,107,97,103,101,99,2,0,0,0,0,0,0,0,2,0, + 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, + 1,0,83,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,4,0,0,0,41,2,114,110,0,0,0,114,166, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,13,99,114,101,97,116,101,95,109,111,100,117,108, + 101,152,2,0,0,115,0,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, + 3,0,0,0,4,0,0,0,67,0,0,0,115,80,0,0, + 0,124,0,0,106,0,0,124,1,0,106,1,0,131,1,0, + 125,2,0,124,2,0,100,1,0,107,8,0,114,54,0,116, + 2,0,100,2,0,106,3,0,124,1,0,106,1,0,131,1, + 0,131,1,0,130,1,0,116,4,0,106,5,0,116,6,0, + 124,2,0,124,1,0,106,7,0,131,3,0,1,100,1,0, + 83,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,114,0,0,0, + 114,109,0,0,0,114,49,0,0,0,114,123,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,120,0,0,0,41,3,114,110,0,0,0,218,6,109,111, + 100,117,108,101,114,148,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,11,101,120,101,99,95,109, + 111,100,117,108,101,155,2,0,0,115,10,0,0,0,0,2, + 18,1,12,1,9,1,15,1,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,2,0,0,0, + 3,0,0,0,67,0,0,0,115,16,0,0,0,116,0,0, + 106,1,0,124,0,0,124,1,0,131,2,0,83,41,1,78, + 41,2,114,123,0,0,0,218,17,95,108,111,97,100,95,109, + 111,100,117,108,101,95,115,104,105,109,41,2,114,110,0,0, + 0,114,128,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,11,108,111,97,100,95,109,111,100,117, + 108,101,163,2,0,0,115,2,0,0,0,0,1,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,114,0,0,0, + 114,113,0,0,0,114,115,0,0,0,114,116,0,0,0,114, + 161,0,0,0,114,187,0,0,0,114,192,0,0,0,114,194, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,185,0,0,0,139,2,0,0, + 115,10,0,0,0,12,3,6,2,12,8,12,3,12,8,114, + 185,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,106,0,0,0,101,0, + 0,90,1,0,100,0,0,90,2,0,100,1,0,100,2,0, + 132,0,0,90,3,0,100,3,0,100,4,0,132,0,0,90, + 4,0,100,5,0,100,6,0,132,0,0,90,5,0,100,7, + 0,100,8,0,132,0,0,90,6,0,100,9,0,100,10,0, + 132,0,0,90,7,0,100,11,0,100,18,0,100,13,0,100, + 14,0,132,0,1,90,8,0,100,15,0,100,16,0,132,0, + 0,90,9,0,100,17,0,83,41,19,218,12,83,111,117,114, + 99,101,76,111,97,100,101,114,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,10,0, + 0,0,116,0,0,130,1,0,100,1,0,83,41,2,122,178, + 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,44,32,119,104,101,114, + 101,32,112,97,116,104,32,105,115,32,97,32,115,116,114,46, + 10,10,32,32,32,32,32,32,32,32,82,97,105,115,101,115, + 32,73,79,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,218,7,73,79,69,114,114,111,114,41,2, + 114,110,0,0,0,114,37,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,10,112,97,116,104,95, + 109,116,105,109,101,169,2,0,0,115,2,0,0,0,0,6, + 122,23,83,111,117,114,99,101,76,111,97,100,101,114,46,112, + 97,116,104,95,109,116,105,109,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,67,0,0,0,115,19, + 0,0,0,100,1,0,124,0,0,106,0,0,124,1,0,131, + 1,0,105,1,0,83,41,2,97,170,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,32,112,97,116,104,10,32,32, + 32,32,32,32,32,32,116,111,32,98,121,32,116,104,101,32, + 112,97,116,104,32,40,115,116,114,41,46,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,73,79,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,135,0,0,0,41,1,114,197, + 0,0,0,41,2,114,110,0,0,0,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,10, + 112,97,116,104,95,115,116,97,116,115,177,2,0,0,115,2, + 0,0,0,0,11,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,4,0,0,0,3,0,0,0,67, + 0,0,0,115,16,0,0,0,124,0,0,106,0,0,124,2, + 0,124,3,0,131,2,0,83,41,1,122,228,79,112,116,105, + 111,110,97,108,32,109,101,116,104,111,100,32,119,104,105,99, + 104,32,119,114,105,116,101,115,32,100,97,116,97,32,40,98, + 121,116,101,115,41,32,116,111,32,97,32,102,105,108,101,32, + 112,97,116,104,32,40,97,32,115,116,114,41,46,10,10,32, + 32,32,32,32,32,32,32,73,109,112,108,101,109,101,110,116, + 105,110,103,32,116,104,105,115,32,109,101,116,104,111,100,32, + 97,108,108,111,119,115,32,102,111,114,32,116,104,101,32,119, + 114,105,116,105,110,103,32,111,102,32,98,121,116,101,99,111, + 100,101,32,102,105,108,101,115,46,10,10,32,32,32,32,32, + 32,32,32,84,104,101,32,115,111,117,114,99,101,32,112,97, + 116,104,32,105,115,32,110,101,101,100,101,100,32,105,110,32, + 111,114,100,101,114,32,116,111,32,99,111,114,114,101,99,116, + 108,121,32,116,114,97,110,115,102,101,114,32,112,101,114,109, + 105,115,115,105,111,110,115,10,32,32,32,32,32,32,32,32, + 41,1,218,8,115,101,116,95,100,97,116,97,41,4,114,110, + 0,0,0,114,92,0,0,0,90,10,99,97,99,104,101,95, + 112,97,116,104,114,55,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,15,95,99,97,99,104,101, + 95,98,121,116,101,99,111,100,101,190,2,0,0,115,2,0, + 0,0,0,8,122,28,83,111,117,114,99,101,76,111,97,100, + 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,99,3,0,0,0,0,0,0,0,3,0,0,0,1, + 0,0,0,67,0,0,0,115,4,0,0,0,100,1,0,83, + 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,4,0,0,0, + 41,3,114,110,0,0,0,114,37,0,0,0,114,55,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,199,0,0,0,200,2,0,0,115,0,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,5,0, + 0,0,16,0,0,0,67,0,0,0,115,105,0,0,0,124, + 0,0,106,0,0,124,1,0,131,1,0,125,2,0,121,19, + 0,124,0,0,106,1,0,124,2,0,131,1,0,125,3,0, + 87,110,58,0,4,116,2,0,107,10,0,114,94,0,1,125, + 4,0,1,122,26,0,116,3,0,100,1,0,100,2,0,124, + 1,0,131,1,1,124,4,0,130,2,0,87,89,100,3,0, + 100,3,0,125,4,0,126,4,0,88,110,1,0,88,116,4, + 0,124,3,0,131,1,0,83,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,108,0,0,0,78,41, + 5,114,159,0,0,0,218,8,103,101,116,95,100,97,116,97, + 114,42,0,0,0,114,109,0,0,0,114,157,0,0,0,41, + 5,114,110,0,0,0,114,128,0,0,0,114,37,0,0,0, + 114,155,0,0,0,218,3,101,120,99,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,10,103,101,116,95,115, + 111,117,114,99,101,207,2,0,0,115,14,0,0,0,0,2, + 15,1,3,1,19,1,18,1,9,1,31,1,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,218,9,95,111,112,116,105,109,105,122,101, + 114,31,0,0,0,99,3,0,0,0,1,0,0,0,4,0, + 0,0,9,0,0,0,67,0,0,0,115,34,0,0,0,116, + 0,0,106,1,0,116,2,0,124,1,0,124,2,0,100,1, + 0,100,2,0,100,3,0,100,4,0,124,3,0,131,4,2, + 83,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,190,0,0,0,218,12,100,111, + 110,116,95,105,110,104,101,114,105,116,84,114,70,0,0,0, + 41,3,114,123,0,0,0,114,189,0,0,0,218,7,99,111, + 109,112,105,108,101,41,4,114,110,0,0,0,114,55,0,0, + 0,114,37,0,0,0,114,204,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,14,115,111,117,114, + 99,101,95,116,111,95,99,111,100,101,217,2,0,0,115,4, + 0,0,0,0,5,21,1,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,10,0,0, + 0,43,0,0,0,67,0,0,0,115,174,1,0,0,124,0, + 0,106,0,0,124,1,0,131,1,0,125,2,0,100,1,0, + 125,3,0,121,16,0,116,1,0,124,2,0,131,1,0,125, + 4,0,87,110,24,0,4,116,2,0,107,10,0,114,63,0, + 1,1,1,100,1,0,125,4,0,89,110,202,0,88,121,19, + 0,124,0,0,106,3,0,124,2,0,131,1,0,125,5,0, + 87,110,18,0,4,116,4,0,107,10,0,114,103,0,1,1, + 1,89,110,162,0,88,116,5,0,124,5,0,100,2,0,25, + 131,1,0,125,3,0,121,19,0,124,0,0,106,6,0,124, + 4,0,131,1,0,125,6,0,87,110,18,0,4,116,7,0, + 107,10,0,114,159,0,1,1,1,89,110,106,0,88,121,34, + 0,116,8,0,124,6,0,100,3,0,124,5,0,100,4,0, + 124,1,0,100,5,0,124,4,0,131,1,3,125,7,0,87, + 110,24,0,4,116,9,0,116,10,0,102,2,0,107,10,0, + 114,220,0,1,1,1,89,110,45,0,88,116,11,0,100,6, + 0,124,4,0,124,2,0,131,3,0,1,116,12,0,124,7, + 0,100,4,0,124,1,0,100,7,0,124,4,0,100,8,0, + 124,2,0,131,1,3,83,124,0,0,106,6,0,124,2,0, + 131,1,0,125,8,0,124,0,0,106,13,0,124,8,0,124, + 2,0,131,2,0,125,9,0,116,11,0,100,9,0,124,2, + 0,131,2,0,1,116,14,0,106,15,0,12,114,170,1,124, + 4,0,100,1,0,107,9,0,114,170,1,124,3,0,100,1, + 0,107,9,0,114,170,1,116,16,0,124,9,0,124,3,0, + 116,17,0,124,8,0,131,1,0,131,3,0,125,6,0,121, + 36,0,124,0,0,106,18,0,124,2,0,124,4,0,124,6, + 0,131,3,0,1,116,11,0,100,10,0,124,4,0,131,2, + 0,1,87,110,18,0,4,116,2,0,107,10,0,114,169,1, + 1,1,1,89,110,1,0,88,124,9,0,83,41,11,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,114, + 135,0,0,0,114,140,0,0,0,114,108,0,0,0,114,37, + 0,0,0,122,13,123,125,32,109,97,116,99,104,101,115,32, + 123,125,114,91,0,0,0,114,92,0,0,0,122,19,99,111, + 100,101,32,111,98,106,101,99,116,32,102,114,111,109,32,123, + 125,122,10,119,114,111,116,101,32,123,33,114,125,41,19,114, + 159,0,0,0,114,81,0,0,0,114,68,0,0,0,114,198, + 0,0,0,114,196,0,0,0,114,16,0,0,0,114,201,0, + 0,0,114,42,0,0,0,114,143,0,0,0,114,109,0,0, + 0,114,138,0,0,0,114,107,0,0,0,114,149,0,0,0, + 114,207,0,0,0,114,8,0,0,0,218,19,100,111,110,116, + 95,119,114,105,116,101,95,98,121,116,101,99,111,100,101,114, + 152,0,0,0,114,33,0,0,0,114,200,0,0,0,41,10, + 114,110,0,0,0,114,128,0,0,0,114,92,0,0,0,114, + 141,0,0,0,114,91,0,0,0,218,2,115,116,114,55,0, + 0,0,218,10,98,121,116,101,115,95,100,97,116,97,114,155, + 0,0,0,90,11,99,111,100,101,95,111,98,106,101,99,116, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, + 188,0,0,0,225,2,0,0,115,78,0,0,0,0,7,15, + 1,6,1,3,1,16,1,13,1,11,2,3,1,19,1,13, + 1,5,2,16,1,3,1,19,1,13,1,5,2,3,1,9, + 1,12,1,13,1,19,1,5,2,9,1,7,1,15,1,6, + 1,7,1,15,1,18,1,13,1,22,1,12,1,9,1,15, + 1,3,1,19,1,17,1,13,1,5,1,122,21,83,111,117, + 114,99,101,76,111,97,100,101,114,46,103,101,116,95,99,111, + 100,101,78,114,89,0,0,0,41,10,114,114,0,0,0,114, + 113,0,0,0,114,115,0,0,0,114,197,0,0,0,114,198, + 0,0,0,114,200,0,0,0,114,199,0,0,0,114,203,0, + 0,0,114,207,0,0,0,114,188,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,195,0,0,0,167,2,0,0,115,14,0,0,0,12,2, + 12,8,12,13,12,10,12,7,12,10,18,8,114,195,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,112,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,101,7,0,135,0,0,102,1,0,100,8,0,100,9,0, + 134,0,0,131,1,0,90,8,0,101,7,0,100,10,0,100, + 11,0,132,0,0,131,1,0,90,9,0,100,12,0,100,13, + 0,132,0,0,90,10,0,135,0,0,83,41,14,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,3,0,0,0,2, + 0,0,0,67,0,0,0,115,22,0,0,0,124,1,0,124, + 0,0,95,0,0,124,2,0,124,0,0,95,1,0,100,1, + 0,83,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,41,2,114,108,0,0,0,114,37,0,0,0,41,3, + 114,110,0,0,0,114,128,0,0,0,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,186, + 0,0,0,26,3,0,0,115,4,0,0,0,0,3,9,1, + 122,19,70,105,108,101,76,111,97,100,101,114,46,95,95,105, + 110,105,116,95,95,99,2,0,0,0,0,0,0,0,2,0, + 0,0,2,0,0,0,67,0,0,0,115,34,0,0,0,124, + 0,0,106,0,0,124,1,0,106,0,0,107,2,0,111,33, + 0,124,0,0,106,1,0,124,1,0,106,1,0,107,2,0, + 83,41,1,78,41,2,218,9,95,95,99,108,97,115,115,95, + 95,114,120,0,0,0,41,2,114,110,0,0,0,218,5,111, + 116,104,101,114,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,218,6,95,95,101,113,95,95,32,3,0,0,115, + 4,0,0,0,0,1,18,1,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,1,0,0,0,3,0,0,0,67,0,0,0, - 115,16,0,0,0,116,0,0,106,1,0,124,0,0,100,1, - 0,131,2,0,83,41,2,122,47,67,111,110,118,101,114,116, - 32,52,32,98,121,116,101,115,32,105,110,32,108,105,116,116, - 108,101,45,101,110,100,105,97,110,32,116,111,32,97,110,32, - 105,110,116,101,103,101,114,46,114,13,0,0,0,41,2,114, - 14,0,0,0,218,10,102,114,111,109,95,98,121,116,101,115, - 41,1,90,9,105,110,116,95,98,121,116,101,115,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,114, - 95,108,111,110,103,45,0,0,0,115,2,0,0,0,0,2, - 114,19,0,0,0,99,0,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,71,0,0,0,115,26,0,0,0,116, - 0,0,106,1,0,100,1,0,100,2,0,132,0,0,124,0, - 0,68,131,1,0,131,1,0,83,41,3,122,31,82,101,112, - 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, - 112,97,116,104,46,106,111,105,110,40,41,46,99,1,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, - 0,115,37,0,0,0,103,0,0,124,0,0,93,27,0,125, - 1,0,124,1,0,114,6,0,124,1,0,106,0,0,116,1, - 0,131,1,0,145,2,0,113,6,0,83,114,4,0,0,0, - 41,2,218,6,114,115,116,114,105,112,218,15,112,97,116,104, - 95,115,101,112,97,114,97,116,111,114,115,41,2,218,2,46, - 48,218,4,112,97,114,116,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,250,10,60,108,105,115,116,99,111,109, - 112,62,52,0,0,0,115,2,0,0,0,9,1,122,30,95, - 112,97,116,104,95,106,111,105,110,46,60,108,111,99,97,108, - 115,62,46,60,108,105,115,116,99,111,109,112,62,41,2,218, - 8,112,97,116,104,95,115,101,112,218,4,106,111,105,110,41, - 1,218,10,112,97,116,104,95,112,97,114,116,115,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,112, - 97,116,104,95,106,111,105,110,50,0,0,0,115,4,0,0, - 0,0,2,15,1,114,28,0,0,0,99,1,0,0,0,0, - 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, - 134,0,0,0,116,0,0,116,1,0,131,1,0,100,1,0, - 107,2,0,114,52,0,124,0,0,106,2,0,116,3,0,131, - 1,0,92,3,0,125,1,0,125,2,0,125,3,0,124,1, - 0,124,3,0,102,2,0,83,120,69,0,116,4,0,124,0, - 0,131,1,0,68,93,55,0,125,4,0,124,4,0,116,1, - 0,107,6,0,114,65,0,124,0,0,106,5,0,124,4,0, - 100,2,0,100,1,0,131,1,1,92,2,0,125,1,0,125, - 3,0,124,1,0,124,3,0,102,2,0,83,113,65,0,87, - 100,3,0,124,0,0,102,2,0,83,41,4,122,32,82,101, - 112,108,97,99,101,109,101,110,116,32,102,111,114,32,111,115, - 46,112,97,116,104,46,115,112,108,105,116,40,41,46,233,1, - 0,0,0,90,8,109,97,120,115,112,108,105,116,218,0,41, - 6,218,3,108,101,110,114,21,0,0,0,218,10,114,112,97, - 114,116,105,116,105,111,110,114,25,0,0,0,218,8,114,101, - 118,101,114,115,101,100,218,6,114,115,112,108,105,116,41,5, - 218,4,112,97,116,104,90,5,102,114,111,110,116,218,1,95, - 218,4,116,97,105,108,114,16,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,11,95,112,97,116, - 104,95,115,112,108,105,116,56,0,0,0,115,16,0,0,0, - 0,2,18,1,24,1,10,1,19,1,12,1,27,1,14,1, - 114,38,0,0,0,99,1,0,0,0,0,0,0,0,1,0, - 0,0,2,0,0,0,67,0,0,0,115,13,0,0,0,116, - 0,0,106,1,0,124,0,0,131,1,0,83,41,1,122,126, - 83,116,97,116,32,116,104,101,32,112,97,116,104,46,10,10, - 32,32,32,32,77,97,100,101,32,97,32,115,101,112,97,114, - 97,116,101,32,102,117,110,99,116,105,111,110,32,116,111,32, - 109,97,107,101,32,105,116,32,101,97,115,105,101,114,32,116, - 111,32,111,118,101,114,114,105,100,101,32,105,110,32,101,120, - 112,101,114,105,109,101,110,116,115,10,32,32,32,32,40,101, - 46,103,46,32,99,97,99,104,101,32,115,116,97,116,32,114, - 101,115,117,108,116,115,41,46,10,10,32,32,32,32,41,2, - 114,3,0,0,0,90,4,115,116,97,116,41,1,114,35,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,10,95,112,97,116,104,95,115,116,97,116,68,0,0, - 0,115,2,0,0,0,0,7,114,39,0,0,0,99,2,0, - 0,0,0,0,0,0,3,0,0,0,11,0,0,0,67,0, - 0,0,115,58,0,0,0,121,16,0,116,0,0,124,0,0, - 131,1,0,125,2,0,87,110,22,0,4,116,1,0,107,10, - 0,114,40,0,1,1,1,100,1,0,83,89,110,1,0,88, - 124,2,0,106,2,0,100,2,0,64,124,1,0,107,2,0, - 83,41,3,122,49,84,101,115,116,32,119,104,101,116,104,101, - 114,32,116,104,101,32,112,97,116,104,32,105,115,32,116,104, - 101,32,115,112,101,99,105,102,105,101,100,32,109,111,100,101, - 32,116,121,112,101,46,70,105,0,240,0,0,41,3,114,39, - 0,0,0,218,7,79,83,69,114,114,111,114,218,7,115,116, - 95,109,111,100,101,41,3,114,35,0,0,0,218,4,109,111, - 100,101,90,9,115,116,97,116,95,105,110,102,111,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,18,95,112, - 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, - 78,0,0,0,115,10,0,0,0,0,2,3,1,16,1,13, - 1,9,1,114,43,0,0,0,99,1,0,0,0,0,0,0, - 0,1,0,0,0,3,0,0,0,67,0,0,0,115,13,0, - 0,0,116,0,0,124,0,0,100,1,0,131,2,0,83,41, - 2,122,31,82,101,112,108,97,99,101,109,101,110,116,32,102, - 111,114,32,111,115,46,112,97,116,104,46,105,115,102,105,108, - 101,46,105,0,128,0,0,41,1,114,43,0,0,0,41,1, - 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,12,95,112,97,116,104,95,105,115,102,105, - 108,101,87,0,0,0,115,2,0,0,0,0,2,114,44,0, - 0,0,99,1,0,0,0,0,0,0,0,1,0,0,0,3, - 0,0,0,67,0,0,0,115,31,0,0,0,124,0,0,115, - 18,0,116,0,0,106,1,0,131,0,0,125,0,0,116,2, - 0,124,0,0,100,1,0,131,2,0,83,41,2,122,30,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,105,115,100,105,114,46,105,0,64, - 0,0,41,3,114,3,0,0,0,218,6,103,101,116,99,119, - 100,114,43,0,0,0,41,1,114,35,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,11,95,112, - 97,116,104,95,105,115,100,105,114,92,0,0,0,115,6,0, - 0,0,0,2,6,1,12,1,114,46,0,0,0,105,182,1, - 0,0,99,3,0,0,0,0,0,0,0,6,0,0,0,17, - 0,0,0,67,0,0,0,115,193,0,0,0,100,1,0,106, - 0,0,124,0,0,116,1,0,124,0,0,131,1,0,131,2, - 0,125,3,0,116,2,0,106,3,0,124,3,0,116,2,0, - 106,4,0,116,2,0,106,5,0,66,116,2,0,106,6,0, - 66,124,2,0,100,2,0,64,131,3,0,125,4,0,121,61, - 0,116,7,0,106,8,0,124,4,0,100,3,0,131,2,0, - 143,20,0,125,5,0,124,5,0,106,9,0,124,1,0,131, - 1,0,1,87,100,4,0,81,82,88,116,2,0,106,10,0, - 124,3,0,124,0,0,131,2,0,1,87,110,59,0,4,116, - 11,0,107,10,0,114,188,0,1,1,1,121,17,0,116,2, - 0,106,12,0,124,3,0,131,1,0,1,87,110,18,0,4, - 116,11,0,107,10,0,114,180,0,1,1,1,89,110,1,0, - 88,130,0,0,89,110,1,0,88,100,4,0,83,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,122,5,123,125,46,123,125,105,182,1,0,0,90, - 2,119,98,78,41,13,218,6,102,111,114,109,97,116,218,2, - 105,100,114,3,0,0,0,90,4,111,112,101,110,90,6,79, - 95,69,88,67,76,90,7,79,95,67,82,69,65,84,90,8, - 79,95,87,82,79,78,76,89,218,3,95,105,111,218,6,70, - 105,108,101,73,79,218,5,119,114,105,116,101,218,7,114,101, - 112,108,97,99,101,114,40,0,0,0,90,6,117,110,108,105, - 110,107,41,6,114,35,0,0,0,218,4,100,97,116,97,114, - 42,0,0,0,90,8,112,97,116,104,95,116,109,112,90,2, - 102,100,218,4,102,105,108,101,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,13,95,119,114,105,116,101,95, - 97,116,111,109,105,99,99,0,0,0,115,26,0,0,0,0, - 5,24,1,9,1,33,1,3,3,21,1,20,1,20,1,13, - 1,3,1,17,1,13,1,5,1,114,55,0,0,0,105,23, - 13,0,0,233,2,0,0,0,114,13,0,0,0,115,2,0, - 0,0,13,10,90,11,95,95,112,121,99,97,99,104,101,95, - 95,122,4,111,112,116,45,122,3,46,112,121,122,4,46,112, - 121,99,78,218,12,111,112,116,105,109,105,122,97,116,105,111, - 110,99,2,0,0,0,1,0,0,0,11,0,0,0,6,0, - 0,0,67,0,0,0,115,87,1,0,0,124,1,0,100,1, - 0,107,9,0,114,76,0,116,0,0,106,1,0,100,2,0, - 116,2,0,131,2,0,1,124,2,0,100,1,0,107,9,0, - 114,58,0,100,3,0,125,3,0,116,3,0,124,3,0,131, - 1,0,130,1,0,124,1,0,114,70,0,100,4,0,110,3, - 0,100,5,0,125,2,0,116,4,0,124,0,0,131,1,0, - 92,2,0,125,4,0,125,5,0,124,5,0,106,5,0,100, - 6,0,131,1,0,92,3,0,125,6,0,125,7,0,125,8, - 0,116,6,0,106,7,0,106,8,0,125,9,0,124,9,0, - 100,1,0,107,8,0,114,154,0,116,9,0,100,7,0,131, - 1,0,130,1,0,100,4,0,106,10,0,124,6,0,114,172, - 0,124,6,0,110,3,0,124,8,0,124,7,0,124,9,0, - 103,3,0,131,1,0,125,10,0,124,2,0,100,1,0,107, - 8,0,114,241,0,116,6,0,106,11,0,106,12,0,100,8, - 0,107,2,0,114,229,0,100,4,0,125,2,0,110,12,0, - 116,6,0,106,11,0,106,12,0,125,2,0,116,13,0,124, - 2,0,131,1,0,125,2,0,124,2,0,100,4,0,107,3, - 0,114,63,1,124,2,0,106,14,0,131,0,0,115,42,1, - 116,15,0,100,9,0,106,16,0,124,2,0,131,1,0,131, - 1,0,130,1,0,100,10,0,106,16,0,124,10,0,116,17, - 0,124,2,0,131,3,0,125,10,0,116,18,0,124,4,0, - 116,19,0,124,10,0,116,20,0,100,8,0,25,23,131,3, - 0,83,41,11,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,30,0,0,0,114,29,0,0,0,218,1, - 46,122,36,115,121,115,46,105,109,112,108,101,109,101,110,116, - 97,116,105,111,110,46,99,97,99,104,101,95,116,97,103,32, - 105,115,32,78,111,110,101,233,0,0,0,0,122,24,123,33, - 114,125,32,105,115,32,110,111,116,32,97,108,112,104,97,110, - 117,109,101,114,105,99,122,7,123,125,46,123,125,123,125,41, - 21,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,38,0,0,0,114,32,0,0,0,114,7,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,26,0,0,0,218,5,102,108,97,103,115,218,8,111,112, - 116,105,109,105,122,101,218,3,115,116,114,218,7,105,115,97, - 108,110,117,109,218,10,86,97,108,117,101,69,114,114,111,114, - 114,47,0,0,0,218,4,95,79,80,84,114,28,0,0,0, - 218,8,95,80,89,67,65,67,72,69,218,17,66,89,84,69, - 67,79,68,69,95,83,85,70,70,73,88,69,83,41,11,114, - 35,0,0,0,90,14,100,101,98,117,103,95,111,118,101,114, - 114,105,100,101,114,57,0,0,0,218,7,109,101,115,115,97, - 103,101,218,4,104,101,97,100,114,37,0,0,0,90,4,98, - 97,115,101,218,3,115,101,112,218,4,114,101,115,116,90,3, - 116,97,103,90,15,97,108,109,111,115,116,95,102,105,108,101, - 110,97,109,101,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,17,99,97,99,104,101,95,102,114,111,109,95, - 115,111,117,114,99,101,247,0,0,0,115,46,0,0,0,0, - 18,12,1,9,1,7,1,12,1,6,1,12,1,18,1,18, - 1,24,1,12,1,12,1,12,1,36,1,12,1,18,1,9, - 2,12,1,12,1,12,1,12,1,21,1,21,1,114,79,0, - 0,0,99,1,0,0,0,0,0,0,0,8,0,0,0,5, - 0,0,0,67,0,0,0,115,62,1,0,0,116,0,0,106, - 1,0,106,2,0,100,1,0,107,8,0,114,30,0,116,3, - 0,100,2,0,131,1,0,130,1,0,116,4,0,124,0,0, - 131,1,0,92,2,0,125,1,0,125,2,0,116,4,0,124, - 1,0,131,1,0,92,2,0,125,1,0,125,3,0,124,3, - 0,116,5,0,107,3,0,114,102,0,116,6,0,100,3,0, - 106,7,0,116,5,0,124,0,0,131,2,0,131,1,0,130, - 1,0,124,2,0,106,8,0,100,4,0,131,1,0,125,4, - 0,124,4,0,100,11,0,107,7,0,114,153,0,116,6,0, - 100,7,0,106,7,0,124,2,0,131,1,0,131,1,0,130, - 1,0,110,125,0,124,4,0,100,6,0,107,2,0,114,22, - 1,124,2,0,106,9,0,100,4,0,100,5,0,131,2,0, - 100,12,0,25,125,5,0,124,5,0,106,10,0,116,11,0, - 131,1,0,115,223,0,116,6,0,100,8,0,106,7,0,116, - 11,0,131,1,0,131,1,0,130,1,0,124,5,0,116,12, - 0,116,11,0,131,1,0,100,1,0,133,2,0,25,125,6, - 0,124,6,0,106,13,0,131,0,0,115,22,1,116,6,0, - 100,9,0,106,7,0,124,5,0,131,1,0,131,1,0,130, - 1,0,124,2,0,106,14,0,100,4,0,131,1,0,100,10, - 0,25,125,7,0,116,15,0,124,1,0,124,7,0,116,16, - 0,100,10,0,25,23,131,2,0,83,41,13,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, - 122,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,122,37,123,125,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,123,33,114,125,114,58,0, - 0,0,114,56,0,0,0,233,3,0,0,0,122,33,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,123,33,114,125,122, - 57,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,123,33,114,125,122,52,111,112,116,105, - 109,105,122,97,116,105,111,110,32,108,101,118,101,108,32,123, - 33,114,125,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,59,0,0,0,62,2,0,0,0,114,56,0,0,0,114, - 80,0,0,0,233,254,255,255,255,41,17,114,7,0,0,0, - 114,64,0,0,0,114,65,0,0,0,114,66,0,0,0,114, - 38,0,0,0,114,73,0,0,0,114,71,0,0,0,114,47, - 0,0,0,218,5,99,111,117,110,116,114,34,0,0,0,114, - 9,0,0,0,114,72,0,0,0,114,31,0,0,0,114,70, - 0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,28, - 0,0,0,218,15,83,79,85,82,67,69,95,83,85,70,70, - 73,88,69,83,41,8,114,35,0,0,0,114,76,0,0,0, - 90,16,112,121,99,97,99,104,101,95,102,105,108,101,110,97, - 109,101,90,7,112,121,99,97,99,104,101,90,9,100,111,116, - 95,99,111,117,110,116,114,57,0,0,0,90,9,111,112,116, - 95,108,101,118,101,108,90,13,98,97,115,101,95,102,105,108, - 101,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,17,115,111,117,114,99,101,95,102,114,111, - 109,95,99,97,99,104,101,35,1,0,0,115,44,0,0,0, - 0,9,18,1,12,1,18,1,18,1,12,1,9,1,15,1, - 15,1,12,1,9,1,15,1,12,1,22,1,15,1,9,1, - 12,1,22,1,12,1,9,1,12,1,19,1,114,85,0,0, - 0,99,1,0,0,0,0,0,0,0,5,0,0,0,12,0, - 0,0,67,0,0,0,115,164,0,0,0,116,0,0,124,0, - 0,131,1,0,100,1,0,107,2,0,114,22,0,100,2,0, - 83,124,0,0,106,1,0,100,3,0,131,1,0,92,3,0, - 125,1,0,125,2,0,125,3,0,124,1,0,12,115,81,0, - 124,3,0,106,2,0,131,0,0,100,7,0,100,8,0,133, - 2,0,25,100,6,0,107,3,0,114,85,0,124,0,0,83, - 121,16,0,116,3,0,124,0,0,131,1,0,125,4,0,87, - 110,40,0,4,116,4,0,116,5,0,102,2,0,107,10,0, - 114,143,0,1,1,1,124,0,0,100,2,0,100,9,0,133, - 2,0,25,125,4,0,89,110,1,0,88,116,6,0,124,4, - 0,131,1,0,114,160,0,124,4,0,83,124,0,0,83,41, - 10,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, - 59,0,0,0,78,114,58,0,0,0,114,80,0,0,0,114, - 29,0,0,0,90,2,112,121,233,253,255,255,255,233,255,255, - 255,255,114,87,0,0,0,41,7,114,31,0,0,0,114,32, - 0,0,0,218,5,108,111,119,101,114,114,85,0,0,0,114, - 66,0,0,0,114,71,0,0,0,114,44,0,0,0,41,5, - 218,13,98,121,116,101,99,111,100,101,95,112,97,116,104,114, - 78,0,0,0,114,36,0,0,0,90,9,101,120,116,101,110, - 115,105,111,110,218,11,115,111,117,114,99,101,95,112,97,116, - 104,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,15,95,103,101,116,95,115,111,117,114,99,101,102,105,108, - 101,68,1,0,0,115,20,0,0,0,0,7,18,1,4,1, - 24,1,35,1,4,1,3,1,16,1,19,1,21,1,114,91, - 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 11,0,0,0,67,0,0,0,115,92,0,0,0,124,0,0, - 106,0,0,116,1,0,116,2,0,131,1,0,131,1,0,114, - 59,0,121,14,0,116,3,0,124,0,0,131,1,0,83,87, - 113,88,0,4,116,4,0,107,10,0,114,55,0,1,1,1, - 89,113,88,0,88,110,29,0,124,0,0,106,0,0,116,1, - 0,116,5,0,131,1,0,131,1,0,114,84,0,124,0,0, - 83,100,0,0,83,100,0,0,83,41,1,78,41,6,218,8, - 101,110,100,115,119,105,116,104,218,5,116,117,112,108,101,114, - 84,0,0,0,114,79,0,0,0,114,66,0,0,0,114,74, - 0,0,0,41,1,218,8,102,105,108,101,110,97,109,101,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,11, - 95,103,101,116,95,99,97,99,104,101,100,87,1,0,0,115, - 16,0,0,0,0,1,21,1,3,1,14,1,13,1,8,1, - 21,1,4,2,114,95,0,0,0,99,1,0,0,0,0,0, - 0,0,2,0,0,0,11,0,0,0,67,0,0,0,115,60, - 0,0,0,121,19,0,116,0,0,124,0,0,131,1,0,106, - 1,0,125,1,0,87,110,24,0,4,116,2,0,107,10,0, - 114,45,0,1,1,1,100,1,0,125,1,0,89,110,1,0, - 88,124,1,0,100,2,0,79,125,1,0,124,1,0,83,41, - 3,122,51,67,97,108,99,117,108,97,116,101,32,116,104,101, - 32,109,111,100,101,32,112,101,114,109,105,115,115,105,111,110, - 115,32,102,111,114,32,97,32,98,121,116,101,99,111,100,101, - 32,102,105,108,101,46,105,182,1,0,0,233,128,0,0,0, - 41,3,114,39,0,0,0,114,41,0,0,0,114,40,0,0, - 0,41,2,114,35,0,0,0,114,42,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,10,95,99, - 97,108,99,95,109,111,100,101,99,1,0,0,115,12,0,0, - 0,0,2,3,1,19,1,13,1,11,3,10,1,114,97,0, - 0,0,218,9,118,101,114,98,111,115,105,116,121,114,29,0, - 0,0,99,1,0,0,0,1,0,0,0,3,0,0,0,4, - 0,0,0,71,0,0,0,115,75,0,0,0,116,0,0,106, - 1,0,106,2,0,124,1,0,107,5,0,114,71,0,124,0, - 0,106,3,0,100,6,0,131,1,0,115,43,0,100,3,0, - 124,0,0,23,125,0,0,116,4,0,124,0,0,106,5,0, - 124,2,0,140,0,0,100,4,0,116,0,0,106,6,0,131, - 1,1,1,100,5,0,83,41,7,122,61,80,114,105,110,116, - 32,116,104,101,32,109,101,115,115,97,103,101,32,116,111,32, - 115,116,100,101,114,114,32,105,102,32,45,118,47,80,89,84, - 72,79,78,86,69,82,66,79,83,69,32,105,115,32,116,117, - 114,110,101,100,32,111,110,46,250,1,35,250,7,105,109,112, - 111,114,116,32,122,2,35,32,114,54,0,0,0,78,41,2, - 114,99,0,0,0,114,100,0,0,0,41,7,114,7,0,0, - 0,114,67,0,0,0,218,7,118,101,114,98,111,115,101,114, - 9,0,0,0,218,5,112,114,105,110,116,114,47,0,0,0, - 218,6,115,116,100,101,114,114,41,3,114,75,0,0,0,114, - 98,0,0,0,218,4,97,114,103,115,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,16,95,118,101,114,98, - 111,115,101,95,109,101,115,115,97,103,101,111,1,0,0,115, - 8,0,0,0,0,2,18,1,15,1,10,1,114,105,0,0, - 0,99,1,0,0,0,0,0,0,0,3,0,0,0,11,0, - 0,0,3,0,0,0,115,84,0,0,0,100,1,0,135,0, - 0,102,1,0,100,2,0,100,3,0,134,1,0,125,1,0, - 121,13,0,116,0,0,106,1,0,125,2,0,87,110,30,0, - 4,116,2,0,107,10,0,114,66,0,1,1,1,100,4,0, - 100,5,0,132,0,0,125,2,0,89,110,1,0,88,124,2, - 0,124,1,0,136,0,0,131,2,0,1,124,1,0,83,41, - 6,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,4,0,0,0,5,0,0, - 0,31,0,0,0,115,89,0,0,0,124,1,0,100,0,0, - 107,8,0,114,24,0,124,0,0,106,0,0,125,1,0,110, - 46,0,124,0,0,106,0,0,124,1,0,107,3,0,114,70, - 0,116,1,0,100,1,0,124,0,0,106,0,0,124,1,0, - 102,2,0,22,100,2,0,124,1,0,131,1,1,130,1,0, - 136,0,0,124,0,0,124,1,0,124,2,0,124,3,0,142, - 2,0,83,41,3,78,122,30,108,111,97,100,101,114,32,102, - 111,114,32,37,115,32,99,97,110,110,111,116,32,104,97,110, - 100,108,101,32,37,115,218,4,110,97,109,101,41,2,114,106, - 0,0,0,218,11,73,109,112,111,114,116,69,114,114,111,114, - 41,4,218,4,115,101,108,102,114,106,0,0,0,114,104,0, - 0,0,90,6,107,119,97,114,103,115,41,1,218,6,109,101, - 116,104,111,100,114,4,0,0,0,114,5,0,0,0,218,19, - 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, - 112,101,114,127,1,0,0,115,12,0,0,0,0,1,12,1, - 12,1,15,1,6,1,25,1,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,3,0,0,0,7, - 0,0,0,83,0,0,0,115,92,0,0,0,120,66,0,100, - 1,0,100,2,0,100,3,0,100,4,0,103,4,0,68,93, - 46,0,125,2,0,116,0,0,124,1,0,124,2,0,131,2, - 0,114,19,0,116,1,0,124,0,0,124,2,0,116,2,0, - 124,1,0,124,2,0,131,2,0,131,3,0,1,113,19,0, - 87,124,0,0,106,3,0,106,4,0,124,1,0,106,3,0, - 131,1,0,1,100,0,0,83,41,5,78,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,52,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,5,95,119,114,97,112,138,1, - 0,0,115,8,0,0,0,0,1,25,1,15,1,29,1,122, - 26,95,99,104,101,99,107,95,110,97,109,101,46,60,108,111, - 99,97,108,115,62,46,95,119,114,97,112,41,3,218,10,95, - 98,111,111,116,115,116,114,97,112,114,120,0,0,0,218,9, - 78,97,109,101,69,114,114,111,114,41,3,114,109,0,0,0, - 114,110,0,0,0,114,120,0,0,0,114,4,0,0,0,41, - 1,114,109,0,0,0,114,5,0,0,0,218,11,95,99,104, - 101,99,107,95,110,97,109,101,119,1,0,0,115,14,0,0, - 0,0,8,21,7,3,1,13,1,13,2,17,5,13,1,114, - 123,0,0,0,99,2,0,0,0,0,0,0,0,5,0,0, - 0,4,0,0,0,67,0,0,0,115,84,0,0,0,124,0, - 0,106,0,0,124,1,0,131,1,0,92,2,0,125,2,0, - 125,3,0,124,2,0,100,1,0,107,8,0,114,80,0,116, - 1,0,124,3,0,131,1,0,114,80,0,100,2,0,125,4, - 0,116,2,0,106,3,0,124,4,0,106,4,0,124,3,0, - 100,3,0,25,131,1,0,116,5,0,131,2,0,1,124,2, - 0,83,41,4,122,155,84,114,121,32,116,111,32,102,105,110, - 100,32,97,32,108,111,97,100,101,114,32,102,111,114,32,116, - 104,101,32,115,112,101,99,105,102,105,101,100,32,109,111,100, - 117,108,101,32,98,121,32,100,101,108,101,103,97,116,105,110, - 103,32,116,111,10,32,32,32,32,115,101,108,102,46,102,105, - 110,100,95,108,111,97,100,101,114,40,41,46,10,10,32,32, - 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, - 32,100,101,112,114,101,99,97,116,101,100,32,105,110,32,102, - 97,118,111,114,32,111,102,32,102,105,110,100,101,114,46,102, - 105,110,100,95,115,112,101,99,40,41,46,10,10,32,32,32, - 32,78,122,44,78,111,116,32,105,109,112,111,114,116,105,110, - 103,32,100,105,114,101,99,116,111,114,121,32,123,125,58,32, - 109,105,115,115,105,110,103,32,95,95,105,110,105,116,95,95, - 114,59,0,0,0,41,6,218,11,102,105,110,100,95,108,111, - 97,100,101,114,114,31,0,0,0,114,60,0,0,0,114,61, - 0,0,0,114,47,0,0,0,218,13,73,109,112,111,114,116, - 87,97,114,110,105,110,103,41,5,114,108,0,0,0,218,8, - 102,117,108,108,110,97,109,101,218,6,108,111,97,100,101,114, - 218,8,112,111,114,116,105,111,110,115,218,3,109,115,103,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, - 95,102,105,110,100,95,109,111,100,117,108,101,95,115,104,105, - 109,147,1,0,0,115,10,0,0,0,0,10,21,1,24,1, - 6,1,29,1,114,130,0,0,0,99,4,0,0,0,0,0, - 0,0,11,0,0,0,19,0,0,0,67,0,0,0,115,240, - 1,0,0,105,0,0,125,4,0,124,2,0,100,1,0,107, - 9,0,114,31,0,124,2,0,124,4,0,100,2,0,60,110, - 6,0,100,3,0,125,2,0,124,3,0,100,1,0,107,9, - 0,114,59,0,124,3,0,124,4,0,100,4,0,60,124,0, - 0,100,1,0,100,5,0,133,2,0,25,125,5,0,124,0, - 0,100,5,0,100,6,0,133,2,0,25,125,6,0,124,0, - 0,100,6,0,100,7,0,133,2,0,25,125,7,0,124,5, - 0,116,0,0,107,3,0,114,168,0,100,8,0,106,1,0, - 124,2,0,124,5,0,131,2,0,125,8,0,116,2,0,100, - 9,0,124,8,0,131,2,0,1,116,3,0,124,8,0,124, - 4,0,141,1,0,130,1,0,110,119,0,116,4,0,124,6, - 0,131,1,0,100,5,0,107,3,0,114,229,0,100,10,0, - 106,1,0,124,2,0,131,1,0,125,8,0,116,2,0,100, - 9,0,124,8,0,131,2,0,1,116,5,0,124,8,0,131, - 1,0,130,1,0,110,58,0,116,4,0,124,7,0,131,1, - 0,100,5,0,107,3,0,114,31,1,100,11,0,106,1,0, - 124,2,0,131,1,0,125,8,0,116,2,0,100,9,0,124, - 8,0,131,2,0,1,116,5,0,124,8,0,131,1,0,130, - 1,0,124,1,0,100,1,0,107,9,0,114,226,1,121,20, - 0,116,6,0,124,1,0,100,12,0,25,131,1,0,125,9, - 0,87,110,18,0,4,116,7,0,107,10,0,114,83,1,1, - 1,1,89,110,62,0,88,116,8,0,124,6,0,131,1,0, - 124,9,0,107,3,0,114,145,1,100,13,0,106,1,0,124, - 2,0,131,1,0,125,8,0,116,2,0,100,9,0,124,8, - 0,131,2,0,1,116,3,0,124,8,0,124,4,0,141,1, - 0,130,1,0,121,18,0,124,1,0,100,14,0,25,100,15, - 0,64,125,10,0,87,110,18,0,4,116,7,0,107,10,0, - 114,183,1,1,1,1,89,110,43,0,88,116,8,0,124,7, - 0,131,1,0,124,10,0,107,3,0,114,226,1,116,3,0, - 100,13,0,106,1,0,124,2,0,131,1,0,124,4,0,141, - 1,0,130,1,0,124,0,0,100,7,0,100,1,0,133,2, - 0,25,83,41,16,97,122,1,0,0,86,97,108,105,100,97, - 116,101,32,116,104,101,32,104,101,97,100,101,114,32,111,102, - 32,116,104,101,32,112,97,115,115,101,100,45,105,110,32,98, - 121,116,101,99,111,100,101,32,97,103,97,105,110,115,116,32, - 115,111,117,114,99,101,95,115,116,97,116,115,32,40,105,102, - 10,32,32,32,32,103,105,118,101,110,41,32,97,110,100,32, - 114,101,116,117,114,110,105,110,103,32,116,104,101,32,98,121, - 116,101,99,111,100,101,32,116,104,97,116,32,99,97,110,32, - 98,101,32,99,111,109,112,105,108,101,100,32,98,121,32,99, - 111,109,112,105,108,101,40,41,46,10,10,32,32,32,32,65, - 108,108,32,111,116,104,101,114,32,97,114,103,117,109,101,110, - 116,115,32,97,114,101,32,117,115,101,100,32,116,111,32,101, - 110,104,97,110,99,101,32,101,114,114,111,114,32,114,101,112, - 111,114,116,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,116,104,101,32,98,121,116, - 101,99,111,100,101,32,105,115,10,32,32,32,32,102,111,117, - 110,100,32,116,111,32,98,101,32,115,116,97,108,101,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,10, - 32,32,32,32,116,114,117,110,99,97,116,101,100,46,10,10, - 32,32,32,32,78,114,106,0,0,0,122,10,60,98,121,116, - 101,99,111,100,101,62,114,35,0,0,0,114,12,0,0,0, - 233,8,0,0,0,233,12,0,0,0,122,30,98,97,100,32, - 109,97,103,105,99,32,110,117,109,98,101,114,32,105,110,32, - 123,33,114,125,58,32,123,33,114,125,122,2,123,125,122,43, - 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,116,105,109,101,115,116, - 97,109,112,32,105,110,32,123,33,114,125,122,48,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,115,105,122,101,32,111,102,32,115, - 111,117,114,99,101,32,105,110,32,123,33,114,125,218,5,109, - 116,105,109,101,122,26,98,121,116,101,99,111,100,101,32,105, - 115,32,115,116,97,108,101,32,102,111,114,32,123,33,114,125, - 218,4,115,105,122,101,108,3,0,0,0,255,127,255,127,3, - 0,41,9,218,12,77,65,71,73,67,95,78,85,77,66,69, - 82,114,47,0,0,0,114,105,0,0,0,114,107,0,0,0, - 114,31,0,0,0,218,8,69,79,70,69,114,114,111,114,114, - 14,0,0,0,218,8,75,101,121,69,114,114,111,114,114,19, - 0,0,0,41,11,114,53,0,0,0,218,12,115,111,117,114, - 99,101,95,115,116,97,116,115,114,106,0,0,0,114,35,0, - 0,0,90,11,101,120,99,95,100,101,116,97,105,108,115,90, - 5,109,97,103,105,99,90,13,114,97,119,95,116,105,109,101, - 115,116,97,109,112,90,8,114,97,119,95,115,105,122,101,114, - 75,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, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,25, - 95,118,97,108,105,100,97,116,101,95,98,121,116,101,99,111, - 100,101,95,104,101,97,100,101,114,164,1,0,0,115,76,0, - 0,0,0,11,6,1,12,1,13,3,6,1,12,1,10,1, - 16,1,16,1,16,1,12,1,18,1,13,1,18,1,18,1, - 15,1,13,1,15,1,18,1,15,1,13,1,12,1,12,1, - 3,1,20,1,13,1,5,2,18,1,15,1,13,1,15,1, - 3,1,18,1,13,1,5,2,18,1,15,1,9,1,114,141, - 0,0,0,99,4,0,0,0,0,0,0,0,5,0,0,0, - 6,0,0,0,67,0,0,0,115,112,0,0,0,116,0,0, - 106,1,0,124,0,0,131,1,0,125,4,0,116,2,0,124, - 4,0,116,3,0,131,2,0,114,75,0,116,4,0,100,1, - 0,124,2,0,131,2,0,1,124,3,0,100,2,0,107,9, - 0,114,71,0,116,5,0,106,6,0,124,4,0,124,3,0, - 131,2,0,1,124,4,0,83,116,7,0,100,3,0,106,8, - 0,124,2,0,131,1,0,100,4,0,124,1,0,100,5,0, - 124,2,0,131,1,2,130,1,0,100,2,0,83,41,6,122, - 60,67,111,109,112,105,108,101,32,98,121,116,101,99,111,100, - 101,32,97,115,32,114,101,116,117,114,110,101,100,32,98,121, - 32,95,118,97,108,105,100,97,116,101,95,98,121,116,101,99, - 111,100,101,95,104,101,97,100,101,114,40,41,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,114,106, - 0,0,0,114,35,0,0,0,41,9,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,105,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, - 107,0,0,0,114,47,0,0,0,41,5,114,53,0,0,0, - 114,106,0,0,0,114,89,0,0,0,114,90,0,0,0,218, - 4,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,17,95,99,111,109,112,105,108,101,95,98, - 121,116,101,99,111,100,101,219,1,0,0,115,16,0,0,0, - 0,2,15,1,15,1,13,1,12,1,16,1,4,2,18,1, - 114,147,0,0,0,114,59,0,0,0,99,3,0,0,0,0, - 0,0,0,4,0,0,0,3,0,0,0,67,0,0,0,115, - 76,0,0,0,116,0,0,116,1,0,131,1,0,125,3,0, - 124,3,0,106,2,0,116,3,0,124,1,0,131,1,0,131, - 1,0,1,124,3,0,106,2,0,116,3,0,124,2,0,131, - 1,0,131,1,0,1,124,3,0,106,2,0,116,4,0,106, - 5,0,124,0,0,131,1,0,131,1,0,1,124,3,0,83, - 41,1,122,80,67,111,109,112,105,108,101,32,97,32,99,111, - 100,101,32,111,98,106,101,99,116,32,105,110,116,111,32,98, - 121,116,101,99,111,100,101,32,102,111,114,32,119,114,105,116, - 105,110,103,32,111,117,116,32,116,111,32,97,32,98,121,116, - 101,45,99,111,109,112,105,108,101,100,10,32,32,32,32,102, - 105,108,101,46,41,6,218,9,98,121,116,101,97,114,114,97, - 121,114,135,0,0,0,218,6,101,120,116,101,110,100,114,17, - 0,0,0,114,142,0,0,0,90,5,100,117,109,112,115,41, - 4,114,146,0,0,0,114,133,0,0,0,114,140,0,0,0, - 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,17,95,99,111,100,101,95,116,111,95,98, - 121,116,101,99,111,100,101,231,1,0,0,115,10,0,0,0, - 0,3,12,1,19,1,19,1,22,1,114,150,0,0,0,99, - 1,0,0,0,0,0,0,0,5,0,0,0,4,0,0,0, - 67,0,0,0,115,89,0,0,0,100,1,0,100,2,0,108, - 0,0,125,1,0,116,1,0,106,2,0,124,0,0,131,1, - 0,106,3,0,125,2,0,124,1,0,106,4,0,124,2,0, - 131,1,0,125,3,0,116,1,0,106,5,0,100,2,0,100, - 3,0,131,2,0,125,4,0,124,4,0,106,6,0,124,0, - 0,106,6,0,124,3,0,100,1,0,25,131,1,0,131,1, - 0,83,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, - 59,0,0,0,78,84,41,7,218,8,116,111,107,101,110,105, - 122,101,114,49,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,151, - 0,0,0,90,21,115,111,117,114,99,101,95,98,121,116,101, - 115,95,114,101,97,100,108,105,110,101,218,8,101,110,99,111, - 100,105,110,103,90,15,110,101,119,108,105,110,101,95,100,101, - 99,111,100,101,114,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,13,100,101,99,111,100,101,95,115,111,117, - 114,99,101,241,1,0,0,115,10,0,0,0,0,5,12,1, - 18,1,15,1,18,1,114,155,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,99,2,0,0, - 0,2,0,0,0,9,0,0,0,19,0,0,0,67,0,0, - 0,115,89,1,0,0,124,1,0,100,1,0,107,8,0,114, - 73,0,100,2,0,125,1,0,116,0,0,124,2,0,100,3, - 0,131,2,0,114,73,0,121,19,0,124,2,0,106,1,0, - 124,0,0,131,1,0,125,1,0,87,110,18,0,4,116,2, - 0,107,10,0,114,72,0,1,1,1,89,110,1,0,88,116, - 3,0,106,4,0,124,0,0,124,2,0,100,4,0,124,1, - 0,131,2,1,125,4,0,100,5,0,124,4,0,95,5,0, - 124,2,0,100,1,0,107,8,0,114,194,0,120,73,0,116, - 6,0,131,0,0,68,93,58,0,92,2,0,125,5,0,125, - 6,0,124,1,0,106,7,0,116,8,0,124,6,0,131,1, - 0,131,1,0,114,128,0,124,5,0,124,0,0,124,1,0, - 131,2,0,125,2,0,124,2,0,124,4,0,95,9,0,80, - 113,128,0,87,100,1,0,83,124,3,0,116,10,0,107,8, - 0,114,23,1,116,0,0,124,2,0,100,6,0,131,2,0, - 114,32,1,121,19,0,124,2,0,106,11,0,124,0,0,131, - 1,0,125,7,0,87,110,18,0,4,116,2,0,107,10,0, - 114,4,1,1,1,1,89,113,32,1,88,124,7,0,114,32, - 1,103,0,0,124,4,0,95,12,0,110,9,0,124,3,0, - 124,4,0,95,12,0,124,4,0,106,12,0,103,0,0,107, - 2,0,114,85,1,124,1,0,114,85,1,116,13,0,124,1, - 0,131,1,0,100,7,0,25,125,8,0,124,4,0,106,12, - 0,106,14,0,124,8,0,131,1,0,1,124,4,0,83,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,218,6,111, - 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, - 103,101,114,59,0,0,0,41,15,114,115,0,0,0,114,157, - 0,0,0,114,107,0,0,0,114,121,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,92,0,0,0,114,93,0,0,0,114, - 127,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, - 159,0,0,0,114,156,0,0,0,114,38,0,0,0,218,6, - 97,112,112,101,110,100,41,9,114,106,0,0,0,90,8,108, - 111,99,97,116,105,111,110,114,127,0,0,0,114,156,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, - 159,0,0,0,90,7,100,105,114,110,97,109,101,114,4,0, - 0,0,114,4,0,0,0,114,5,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,2,2,0,0,115,60,0,0,0,0,12, - 12,4,6,1,15,2,3,1,19,1,13,1,5,8,24,1, - 9,3,12,1,22,1,21,1,15,1,9,1,5,2,4,3, - 12,2,15,1,3,1,19,1,13,1,5,2,6,1,12,2, - 9,1,15,1,6,1,16,1,16,2,114,167,0,0,0,99, - 0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, - 64,0,0,0,115,121,0,0,0,101,0,0,90,1,0,100, - 0,0,90,2,0,100,1,0,90,3,0,100,2,0,90,4, - 0,100,3,0,90,5,0,100,4,0,90,6,0,101,7,0, - 100,5,0,100,6,0,132,0,0,131,1,0,90,8,0,101, - 7,0,100,7,0,100,8,0,132,0,0,131,1,0,90,9, - 0,101,7,0,100,9,0,100,9,0,100,10,0,100,11,0, - 132,2,0,131,1,0,90,10,0,101,7,0,100,9,0,100, - 12,0,100,13,0,132,1,0,131,1,0,90,11,0,100,9, - 0,83,41,14,218,21,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,116, - 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, - 114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,114, - 101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,119, - 115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,102, - 116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,116, - 104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,114, - 115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,102, - 117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,97, - 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, - 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, - 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, - 110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,0, - 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, - 0,115,67,0,0,0,121,23,0,116,0,0,106,1,0,116, - 0,0,106,2,0,124,1,0,131,2,0,83,87,110,37,0, - 4,116,3,0,107,10,0,114,62,0,1,1,1,116,0,0, - 106,1,0,116,0,0,106,4,0,124,1,0,131,2,0,83, - 89,110,1,0,88,100,0,0,83,41,1,78,41,5,218,7, - 95,119,105,110,114,101,103,90,7,79,112,101,110,75,101,121, - 90,17,72,75,69,89,95,67,85,82,82,69,78,84,95,85, - 83,69,82,114,40,0,0,0,90,18,72,75,69,89,95,76, - 79,67,65,76,95,77,65,67,72,73,78,69,41,2,218,3, - 99,108,115,218,3,107,101,121,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,14,95,111,112,101,110,95,114, - 101,103,105,115,116,114,121,80,2,0,0,115,8,0,0,0, - 0,2,3,1,23,1,13,1,122,36,87,105,110,100,111,119, - 115,82,101,103,105,115,116,114,121,70,105,110,100,101,114,46, - 95,111,112,101,110,95,114,101,103,105,115,116,114,121,99,2, - 0,0,0,0,0,0,0,6,0,0,0,16,0,0,0,67, - 0,0,0,115,143,0,0,0,124,0,0,106,0,0,114,21, - 0,124,0,0,106,1,0,125,2,0,110,9,0,124,0,0, - 106,2,0,125,2,0,124,2,0,106,3,0,100,1,0,124, - 1,0,100,2,0,116,4,0,106,5,0,100,0,0,100,3, - 0,133,2,0,25,131,0,2,125,3,0,121,47,0,124,0, - 0,106,6,0,124,3,0,131,1,0,143,25,0,125,4,0, - 116,7,0,106,8,0,124,4,0,100,4,0,131,2,0,125, - 5,0,87,100,0,0,81,82,88,87,110,22,0,4,116,9, - 0,107,10,0,114,138,0,1,1,1,100,0,0,83,89,110, - 1,0,88,124,5,0,83,41,5,78,114,126,0,0,0,90, - 11,115,121,115,95,118,101,114,115,105,111,110,114,80,0,0, - 0,114,30,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,47,0,0,0,114,7,0,0, - 0,218,7,118,101,114,115,105,111,110,114,172,0,0,0,114, - 169,0,0,0,90,10,81,117,101,114,121,86,97,108,117,101, - 114,40,0,0,0,41,6,114,170,0,0,0,114,126,0,0, - 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, - 171,0,0,0,90,4,104,107,101,121,218,8,102,105,108,101, - 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, - 105,115,116,114,121,87,2,0,0,115,22,0,0,0,0,2, - 9,1,12,2,9,1,15,1,22,1,3,1,18,1,29,1, - 13,1,9,1,122,38,87,105,110,100,111,119,115,82,101,103, - 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, - 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, - 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, - 0,0,115,158,0,0,0,124,0,0,106,0,0,124,1,0, - 131,1,0,125,4,0,124,4,0,100,0,0,107,8,0,114, - 31,0,100,0,0,83,121,14,0,116,1,0,124,4,0,131, - 1,0,1,87,110,22,0,4,116,2,0,107,10,0,114,69, - 0,1,1,1,100,0,0,83,89,110,1,0,88,120,81,0, - 116,3,0,131,0,0,68,93,70,0,92,2,0,125,5,0, - 125,6,0,124,4,0,106,4,0,116,5,0,124,6,0,131, - 1,0,131,1,0,114,80,0,116,6,0,106,7,0,124,1, - 0,124,5,0,124,1,0,124,4,0,131,2,0,100,1,0, - 124,4,0,131,2,1,125,7,0,124,7,0,83,113,80,0, - 87,100,0,0,83,41,2,78,114,158,0,0,0,41,8,114, - 178,0,0,0,114,39,0,0,0,114,40,0,0,0,114,161, - 0,0,0,114,92,0,0,0,114,93,0,0,0,114,121,0, - 0,0,218,16,115,112,101,99,95,102,114,111,109,95,108,111, - 97,100,101,114,41,8,114,170,0,0,0,114,126,0,0,0, - 114,35,0,0,0,218,6,116,97,114,103,101,116,114,177,0, - 0,0,114,127,0,0,0,114,166,0,0,0,114,164,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,9,102,105,110,100,95,115,112,101,99,102,2,0,0,115, - 26,0,0,0,0,2,15,1,12,1,4,1,3,1,14,1, - 13,1,9,1,22,1,21,1,9,1,15,1,9,1,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,4,0,0,0,3,0,0,0, - 67,0,0,0,115,45,0,0,0,124,0,0,106,0,0,124, - 1,0,124,2,0,131,2,0,125,3,0,124,3,0,100,1, - 0,107,9,0,114,37,0,124,3,0,106,1,0,83,100,1, - 0,83,100,1,0,83,41,2,122,108,70,105,110,100,32,109, - 111,100,117,108,101,32,110,97,109,101,100,32,105,110,32,116, - 104,101,32,114,101,103,105,115,116,114,121,46,10,10,32,32, - 32,32,32,32,32,32,84,104,105,115,32,109,101,116,104,111, - 100,32,105,115,32,100,101,112,114,101,99,97,116,101,100,46, - 32,32,85,115,101,32,101,120,101,99,95,109,111,100,117,108, - 101,40,41,32,105,110,115,116,101,97,100,46,10,10,32,32, - 32,32,32,32,32,32,78,41,2,114,181,0,0,0,114,127, - 0,0,0,41,4,114,170,0,0,0,114,126,0,0,0,114, - 35,0,0,0,114,164,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,11,102,105,110,100,95,109, - 111,100,117,108,101,118,2,0,0,115,8,0,0,0,0,7, - 18,1,12,1,7,2,122,33,87,105,110,100,111,119,115,82, - 101,103,105,115,116,114,121,70,105,110,100,101,114,46,102,105, - 110,100,95,109,111,100,117,108,101,41,12,114,112,0,0,0, - 114,111,0,0,0,114,113,0,0,0,114,114,0,0,0,114, - 175,0,0,0,114,174,0,0,0,114,173,0,0,0,218,11, - 99,108,97,115,115,109,101,116,104,111,100,114,172,0,0,0, - 114,178,0,0,0,114,181,0,0,0,114,182,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,168,0,0,0,68,2,0,0,115,20,0,0, - 0,12,2,6,3,6,3,6,2,6,2,18,7,18,15,3, - 1,21,15,3,1,114,168,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, - 70,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, + 115,26,0,0,0,116,0,0,124,0,0,106,1,0,131,1, + 0,116,0,0,124,0,0,106,2,0,131,1,0,65,83,41, + 1,78,41,3,218,4,104,97,115,104,114,108,0,0,0,114, + 37,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,8,95,95,104,97, + 115,104,95,95,36,3,0,0,115,2,0,0,0,0,1,122, + 19,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, + 115,104,95,95,99,2,0,0,0,0,0,0,0,2,0,0, + 0,3,0,0,0,3,0,0,0,115,22,0,0,0,116,0, + 0,116,1,0,124,0,0,131,2,0,106,2,0,124,1,0, + 131,1,0,83,41,1,122,100,76,111,97,100,32,97,32,109, + 111,100,117,108,101,32,102,114,111,109,32,97,32,102,105,108, + 101,46,10,10,32,32,32,32,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,46,32,32,85,115,101,32,101,120,101,99, + 95,109,111,100,117,108,101,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,41,3,218,5, + 115,117,112,101,114,114,211,0,0,0,114,194,0,0,0,41, + 2,114,110,0,0,0,114,128,0,0,0,41,1,114,212,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,194,0,0, + 0,39,3,0,0,115,2,0,0,0,0,10,122,22,70,105, + 108,101,76,111,97,100,101,114,46,108,111,97,100,95,109,111, + 100,117,108,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,115,7,0,0,0,124,0, + 0,106,0,0,83,41,1,122,58,82,101,116,117,114,110,32, + 116,104,101,32,112,97,116,104,32,116,111,32,116,104,101,32, + 115,111,117,114,99,101,32,102,105,108,101,32,97,115,32,102, + 111,117,110,100,32,98,121,32,116,104,101,32,102,105,110,100, + 101,114,46,41,1,114,37,0,0,0,41,2,114,110,0,0, + 0,114,128,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,159,0,0,0,51,3,0,0,115,2, + 0,0,0,0,3,122,23,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,102,105,108,101,110,97,109,101,99,2, + 0,0,0,0,0,0,0,3,0,0,0,9,0,0,0,67, + 0,0,0,115,42,0,0,0,116,0,0,106,1,0,124,1, + 0,100,1,0,131,2,0,143,17,0,125,2,0,124,2,0, + 106,2,0,131,0,0,83,87,100,2,0,81,82,88,100,2, + 0,83,41,3,122,39,82,101,116,117,114,110,32,116,104,101, + 32,100,97,116,97,32,102,114,111,109,32,112,97,116,104,32, + 97,115,32,114,97,119,32,98,121,116,101,115,46,218,1,114, + 78,41,3,114,51,0,0,0,114,52,0,0,0,90,4,114, + 101,97,100,41,3,114,110,0,0,0,114,37,0,0,0,114, + 56,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,201,0,0,0,56,3,0,0,115,4,0,0, + 0,0,2,21,1,122,19,70,105,108,101,76,111,97,100,101, + 114,46,103,101,116,95,100,97,116,97,41,11,114,114,0,0, + 0,114,113,0,0,0,114,115,0,0,0,114,116,0,0,0, + 114,186,0,0,0,114,214,0,0,0,114,216,0,0,0,114, + 125,0,0,0,114,194,0,0,0,114,159,0,0,0,114,201, + 0,0,0,114,4,0,0,0,114,4,0,0,0,41,1,114, + 212,0,0,0,114,6,0,0,0,114,211,0,0,0,21,3, + 0,0,115,14,0,0,0,12,3,6,2,12,6,12,4,12, + 3,24,12,18,5,114,211,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, + 64,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, - 132,0,0,90,7,0,100,10,0,83,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, + 0,100,7,0,100,8,0,100,9,0,132,0,1,90,6,0, + 100,10,0,83,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,3,0,0,0,4,0,0,0,67,0,0,0,115,34,0, + 0,0,116,0,0,124,1,0,131,1,0,125,2,0,100,1, + 0,124,2,0,106,1,0,100,2,0,124,2,0,106,2,0, + 105,2,0,83,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,114,135,0,0,0,114,136, + 0,0,0,41,3,114,41,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, + 110,0,0,0,114,37,0,0,0,114,209,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,198,0, + 0,0,66,3,0,0,115,4,0,0,0,0,2,12,1,122, + 27,83,111,117,114,99,101,70,105,108,101,76,111,97,100,101, + 114,46,112,97,116,104,95,115,116,97,116,115,99,4,0,0, + 0,0,0,0,0,5,0,0,0,5,0,0,0,67,0,0, + 0,115,34,0,0,0,116,0,0,124,1,0,131,1,0,125, + 4,0,124,0,0,106,1,0,124,2,0,124,3,0,100,1, + 0,124,4,0,131,2,1,83,41,2,78,218,5,95,109,111, + 100,101,41,2,114,99,0,0,0,114,199,0,0,0,41,5, + 114,110,0,0,0,114,92,0,0,0,114,91,0,0,0,114, + 55,0,0,0,114,44,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,200,0,0,0,71,3,0, + 0,115,4,0,0,0,0,2,12,1,122,32,83,111,117,114, + 99,101,70,105,108,101,76,111,97,100,101,114,46,95,99,97, + 99,104,101,95,98,121,116,101,99,111,100,101,114,221,0,0, + 0,105,182,1,0,0,99,3,0,0,0,1,0,0,0,9, + 0,0,0,17,0,0,0,67,0,0,0,115,53,1,0,0, + 116,0,0,124,1,0,131,1,0,92,2,0,125,4,0,125, + 5,0,103,0,0,125,6,0,120,54,0,124,4,0,114,80, + 0,116,1,0,124,4,0,131,1,0,12,114,80,0,116,0, + 0,124,4,0,131,1,0,92,2,0,125,4,0,125,7,0, + 124,6,0,106,2,0,124,7,0,131,1,0,1,113,27,0, + 87,120,132,0,116,3,0,124,6,0,131,1,0,68,93,118, + 0,125,7,0,116,4,0,124,4,0,124,7,0,131,2,0, + 125,4,0,121,17,0,116,5,0,106,6,0,124,4,0,131, + 1,0,1,87,113,94,0,4,116,7,0,107,10,0,114,155, + 0,1,1,1,119,94,0,89,113,94,0,4,116,8,0,107, + 10,0,114,211,0,1,125,8,0,1,122,25,0,116,9,0, + 100,1,0,124,4,0,124,8,0,131,3,0,1,100,2,0, + 83,87,89,100,2,0,100,2,0,125,8,0,126,8,0,88, + 113,94,0,88,113,94,0,87,121,33,0,116,10,0,124,1, + 0,124,2,0,124,3,0,131,3,0,1,116,9,0,100,3, + 0,124,1,0,131,2,0,1,87,110,53,0,4,116,8,0, + 107,10,0,114,48,1,1,125,8,0,1,122,21,0,116,9, + 0,100,1,0,124,1,0,124,8,0,131,3,0,1,87,89, + 100,2,0,100,2,0,125,8,0,126,8,0,88,110,1,0, + 88,100,2,0,83,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,11,114,40,0,0,0,114,48,0,0,0,114,165,0,0, + 0,114,35,0,0,0,114,30,0,0,0,114,3,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,42,0,0,0,114,107,0, + 0,0,114,57,0,0,0,41,9,114,110,0,0,0,114,37, + 0,0,0,114,55,0,0,0,114,221,0,0,0,218,6,112, + 97,114,101,110,116,114,96,0,0,0,114,29,0,0,0,114, + 25,0,0,0,114,202,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,199,0,0,0,76,3,0, + 0,115,38,0,0,0,0,2,18,1,6,2,22,1,18,1, + 17,2,19,1,15,1,3,1,17,1,13,2,7,1,18,3, + 16,1,27,1,3,1,16,1,17,1,18,2,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,114,0,0,0,114, + 113,0,0,0,114,115,0,0,0,114,116,0,0,0,114,198, + 0,0,0,114,200,0,0,0,114,199,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,219,0,0,0,62,3,0,0,115,8,0,0,0,12, + 2,6,2,12,5,12,5,114,219,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,46,0,0,0,101,0,0,90,1,0,100,0,0,90, + 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, + 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, + 100,6,0,83,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,5,0,0,0,6,0,0,0,67,0,0,0, + 115,76,0,0,0,124,0,0,106,0,0,124,1,0,131,1, + 0,125,2,0,124,0,0,106,1,0,124,2,0,131,1,0, + 125,3,0,116,2,0,124,3,0,100,1,0,124,1,0,100, + 2,0,124,2,0,131,1,2,125,4,0,116,3,0,124,4, + 0,100,1,0,124,1,0,100,3,0,124,2,0,131,1,2, + 83,41,4,78,114,108,0,0,0,114,37,0,0,0,114,91, + 0,0,0,41,4,114,159,0,0,0,114,201,0,0,0,114, + 143,0,0,0,114,149,0,0,0,41,5,114,110,0,0,0, + 114,128,0,0,0,114,37,0,0,0,114,55,0,0,0,114, + 210,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,188,0,0,0,109,3,0,0,115,8,0,0, + 0,0,1,15,1,15,1,24,1,122,29,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,5,0,0,0,3,0,0, - 0,67,0,0,0,115,88,0,0,0,116,0,0,124,0,0, - 106,1,0,124,1,0,131,1,0,131,1,0,100,1,0,25, - 125,2,0,124,2,0,106,2,0,100,2,0,100,1,0,131, - 2,0,100,3,0,25,125,3,0,124,1,0,106,3,0,100, - 2,0,131,1,0,100,4,0,25,125,4,0,124,3,0,100, - 5,0,107,2,0,111,87,0,124,4,0,100,5,0,107,3, - 0,83,41,6,122,141,67,111,110,99,114,101,116,101,32,105, - 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, - 32,73,110,115,112,101,99,116,76,111,97,100,101,114,46,105, - 115,95,112,97,99,107,97,103,101,32,98,121,32,99,104,101, - 99,107,105,110,103,32,105,102,10,32,32,32,32,32,32,32, - 32,116,104,101,32,112,97,116,104,32,114,101,116,117,114,110, - 101,100,32,98,121,32,103,101,116,95,102,105,108,101,110,97, - 109,101,32,104,97,115,32,97,32,102,105,108,101,110,97,109, - 101,32,111,102,32,39,95,95,105,110,105,116,95,95,46,112, - 121,39,46,114,29,0,0,0,114,58,0,0,0,114,59,0, - 0,0,114,56,0,0,0,218,8,95,95,105,110,105,116,95, - 95,41,4,114,38,0,0,0,114,157,0,0,0,114,34,0, - 0,0,114,32,0,0,0,41,5,114,108,0,0,0,114,126, - 0,0,0,114,94,0,0,0,90,13,102,105,108,101,110,97, - 109,101,95,98,97,115,101,90,9,116,97,105,108,95,110,97, - 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,159,0,0,0,137,2,0,0,115,8,0,0,0,0, - 3,25,1,22,1,19,1,122,24,95,76,111,97,100,101,114, - 66,97,115,105,99,115,46,105,115,95,112,97,99,107,97,103, - 101,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, - 0,0,67,0,0,0,115,4,0,0,0,100,1,0,83,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,4, - 0,0,0,41,2,114,108,0,0,0,114,164,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,13, - 99,114,101,97,116,101,95,109,111,100,117,108,101,145,2,0, - 0,115,0,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,3,0,0,0, - 4,0,0,0,67,0,0,0,115,80,0,0,0,124,0,0, - 106,0,0,124,1,0,106,1,0,131,1,0,125,2,0,124, - 2,0,100,1,0,107,8,0,114,54,0,116,2,0,100,2, - 0,106,3,0,124,1,0,106,1,0,131,1,0,131,1,0, - 130,1,0,116,4,0,106,5,0,116,6,0,124,2,0,124, - 1,0,106,7,0,131,3,0,1,100,1,0,83,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,112,0,0,0,114,107,0,0, - 0,114,47,0,0,0,114,121,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,118,0,0, - 0,41,3,114,108,0,0,0,218,6,109,111,100,117,108,101, - 114,146,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,11,101,120,101,99,95,109,111,100,117,108, - 101,148,2,0,0,115,10,0,0,0,0,2,18,1,12,1, - 9,1,15,1,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,2,0,0,0,3,0,0,0, - 67,0,0,0,115,16,0,0,0,116,0,0,106,1,0,124, - 0,0,124,1,0,131,2,0,83,41,1,78,41,2,114,121, - 0,0,0,218,17,95,108,111,97,100,95,109,111,100,117,108, - 101,95,115,104,105,109,41,2,114,108,0,0,0,114,126,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,11,108,111,97,100,95,109,111,100,117,108,101,156,2, - 0,0,115,2,0,0,0,0,1,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,112,0,0,0,114,111,0,0, - 0,114,113,0,0,0,114,114,0,0,0,114,159,0,0,0, - 114,186,0,0,0,114,191,0,0,0,114,193,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,184,0,0,0,132,2,0,0,115,10,0,0, - 0,12,3,6,2,12,8,12,3,12,8,114,184,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,106,0,0,0,101,0,0,90,1,0, - 100,0,0,90,2,0,100,1,0,100,2,0,132,0,0,90, - 3,0,100,3,0,100,4,0,132,0,0,90,4,0,100,5, - 0,100,6,0,132,0,0,90,5,0,100,7,0,100,8,0, - 132,0,0,90,6,0,100,9,0,100,10,0,132,0,0,90, - 7,0,100,11,0,100,18,0,100,13,0,100,14,0,132,0, - 1,90,8,0,100,15,0,100,16,0,132,0,0,90,9,0, - 100,17,0,83,41,19,218,12,83,111,117,114,99,101,76,111, - 97,100,101,114,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,10,0,0,0,116,0, - 0,130,1,0,100,1,0,83,41,2,122,178,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,44,32,119,104,101,114,101,32,112,97, - 116,104,32,105,115,32,97,32,115,116,114,46,10,10,32,32, - 32,32,32,32,32,32,82,97,105,115,101,115,32,73,79,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,218,7,73,79,69,114,114,111,114,41,2,114,108,0,0, - 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,10,112,97,116,104,95,109,116,105,109, - 101,162,2,0,0,115,2,0,0,0,0,6,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, - 109,116,105,109,101,99,2,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,67,0,0,0,115,19,0,0,0,100, - 1,0,124,0,0,106,0,0,124,1,0,131,1,0,105,1, - 0,83,41,2,97,170,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,32,112,97,116,104,10,32,32,32,32,32,32, - 32,32,116,111,32,98,121,32,116,104,101,32,112,97,116,104, - 32,40,115,116,114,41,46,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,73,79,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,133,0,0,0,41,1,114,196,0,0,0,41, - 2,114,108,0,0,0,114,35,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,10,112,97,116,104, - 95,115,116,97,116,115,170,2,0,0,115,2,0,0,0,0, - 11,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,4,0,0,0,3,0,0,0,67,0,0,0,115, - 16,0,0,0,124,0,0,106,0,0,124,2,0,124,3,0, - 131,2,0,83,41,1,122,228,79,112,116,105,111,110,97,108, - 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, - 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, - 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, - 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, - 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, - 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, - 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, - 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, - 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, - 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, - 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, - 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, - 111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8, - 115,101,116,95,100,97,116,97,41,4,114,108,0,0,0,114, - 90,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, - 114,53,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,183,2,0,0,115,2,0,0,0,0,8, - 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, - 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, - 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, - 0,0,0,115,4,0,0,0,100,1,0,83,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,4,0,0,0,41,3,114,108, - 0,0,0,114,35,0,0,0,114,53,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,198,0,0, - 0,193,2,0,0,115,0,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,5,0,0,0,16,0, - 0,0,67,0,0,0,115,105,0,0,0,124,0,0,106,0, - 0,124,1,0,131,1,0,125,2,0,121,19,0,124,0,0, - 106,1,0,124,2,0,131,1,0,125,3,0,87,110,58,0, - 4,116,2,0,107,10,0,114,94,0,1,125,4,0,1,122, - 26,0,116,3,0,100,1,0,100,2,0,124,1,0,131,1, - 1,124,4,0,130,2,0,87,89,100,3,0,100,3,0,125, - 4,0,126,4,0,88,110,1,0,88,116,4,0,124,3,0, - 131,1,0,83,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,106,0,0,0,78,41,5,114,157,0, - 0,0,218,8,103,101,116,95,100,97,116,97,114,40,0,0, - 0,114,107,0,0,0,114,155,0,0,0,41,5,114,108,0, - 0,0,114,126,0,0,0,114,35,0,0,0,114,153,0,0, - 0,218,3,101,120,99,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,10,103,101,116,95,115,111,117,114,99, - 101,200,2,0,0,115,14,0,0,0,0,2,15,1,3,1, - 19,1,18,1,9,1,31,1,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,218,9,95,111,112,116,105,109,105,122,101,114,29,0,0, - 0,99,3,0,0,0,1,0,0,0,4,0,0,0,9,0, - 0,0,67,0,0,0,115,34,0,0,0,116,0,0,106,1, - 0,116,2,0,124,1,0,124,2,0,100,1,0,100,2,0, - 100,3,0,100,4,0,124,3,0,131,4,2,83,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,189,0,0,0,218,12,100,111,110,116,95,105, - 110,104,101,114,105,116,84,114,68,0,0,0,41,3,114,121, - 0,0,0,114,188,0,0,0,218,7,99,111,109,112,105,108, - 101,41,4,114,108,0,0,0,114,53,0,0,0,114,35,0, - 0,0,114,203,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,14,115,111,117,114,99,101,95,116, - 111,95,99,111,100,101,210,2,0,0,115,4,0,0,0,0, - 5,21,1,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,10,0,0,0,43,0,0, - 0,67,0,0,0,115,174,1,0,0,124,0,0,106,0,0, - 124,1,0,131,1,0,125,2,0,100,1,0,125,3,0,121, - 16,0,116,1,0,124,2,0,131,1,0,125,4,0,87,110, - 24,0,4,116,2,0,107,10,0,114,63,0,1,1,1,100, - 1,0,125,4,0,89,110,202,0,88,121,19,0,124,0,0, - 106,3,0,124,2,0,131,1,0,125,5,0,87,110,18,0, - 4,116,4,0,107,10,0,114,103,0,1,1,1,89,110,162, - 0,88,116,5,0,124,5,0,100,2,0,25,131,1,0,125, - 3,0,121,19,0,124,0,0,106,6,0,124,4,0,131,1, - 0,125,6,0,87,110,18,0,4,116,7,0,107,10,0,114, - 159,0,1,1,1,89,110,106,0,88,121,34,0,116,8,0, - 124,6,0,100,3,0,124,5,0,100,4,0,124,1,0,100, - 5,0,124,4,0,131,1,3,125,7,0,87,110,24,0,4, - 116,9,0,116,10,0,102,2,0,107,10,0,114,220,0,1, - 1,1,89,110,45,0,88,116,11,0,100,6,0,124,4,0, - 124,2,0,131,3,0,1,116,12,0,124,7,0,100,4,0, - 124,1,0,100,7,0,124,4,0,100,8,0,124,2,0,131, - 1,3,83,124,0,0,106,6,0,124,2,0,131,1,0,125, - 8,0,124,0,0,106,13,0,124,8,0,124,2,0,131,2, - 0,125,9,0,116,11,0,100,9,0,124,2,0,131,2,0, - 1,116,14,0,106,15,0,12,114,170,1,124,4,0,100,1, - 0,107,9,0,114,170,1,124,3,0,100,1,0,107,9,0, - 114,170,1,116,16,0,124,9,0,124,3,0,116,17,0,124, - 8,0,131,1,0,131,3,0,125,6,0,121,36,0,124,0, - 0,106,18,0,124,2,0,124,4,0,124,6,0,131,3,0, - 1,116,11,0,100,10,0,124,4,0,131,2,0,1,87,110, - 18,0,4,116,2,0,107,10,0,114,169,1,1,1,1,89, - 110,1,0,88,124,9,0,83,41,11,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,114,133,0,0,0, - 114,138,0,0,0,114,106,0,0,0,114,35,0,0,0,122, - 13,123,125,32,109,97,116,99,104,101,115,32,123,125,114,89, - 0,0,0,114,90,0,0,0,122,19,99,111,100,101,32,111, - 98,106,101,99,116,32,102,114,111,109,32,123,125,122,10,119, - 114,111,116,101,32,123,33,114,125,41,19,114,157,0,0,0, - 114,79,0,0,0,114,66,0,0,0,114,197,0,0,0,114, - 195,0,0,0,114,14,0,0,0,114,200,0,0,0,114,40, - 0,0,0,114,141,0,0,0,114,107,0,0,0,114,136,0, - 0,0,114,105,0,0,0,114,147,0,0,0,114,206,0,0, - 0,114,7,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,150,0,0,0, - 114,31,0,0,0,114,199,0,0,0,41,10,114,108,0,0, - 0,114,126,0,0,0,114,90,0,0,0,114,139,0,0,0, - 114,89,0,0,0,218,2,115,116,114,53,0,0,0,218,10, - 98,121,116,101,115,95,100,97,116,97,114,153,0,0,0,90, - 11,99,111,100,101,95,111,98,106,101,99,116,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,187,0,0,0, - 218,2,0,0,115,78,0,0,0,0,7,15,1,6,1,3, - 1,16,1,13,1,11,2,3,1,19,1,13,1,5,2,16, - 1,3,1,19,1,13,1,5,2,3,1,9,1,12,1,13, - 1,19,1,5,2,9,1,7,1,15,1,6,1,7,1,15, - 1,18,1,13,1,22,1,12,1,9,1,15,1,3,1,19, - 1,17,1,13,1,5,1,122,21,83,111,117,114,99,101,76, - 111,97,100,101,114,46,103,101,116,95,99,111,100,101,78,114, - 87,0,0,0,41,10,114,112,0,0,0,114,111,0,0,0, - 114,113,0,0,0,114,196,0,0,0,114,197,0,0,0,114, - 199,0,0,0,114,198,0,0,0,114,202,0,0,0,114,206, - 0,0,0,114,187,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,194,0,0, - 0,160,2,0,0,115,14,0,0,0,12,2,12,8,12,13, - 12,10,12,7,12,10,18,8,114,194,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,112,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, - 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, - 0,100,6,0,100,7,0,132,0,0,90,6,0,101,7,0, - 135,0,0,102,1,0,100,8,0,100,9,0,134,0,0,131, - 1,0,90,8,0,101,7,0,100,10,0,100,11,0,132,0, - 0,131,1,0,90,9,0,100,12,0,100,13,0,132,0,0, - 90,10,0,135,0,0,83,41,14,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,3,0,0,0,2,0,0,0,67, - 0,0,0,115,22,0,0,0,124,1,0,124,0,0,95,0, - 0,124,2,0,124,0,0,95,1,0,100,1,0,83,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,41,2, - 114,106,0,0,0,114,35,0,0,0,41,3,114,108,0,0, - 0,114,126,0,0,0,114,35,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,185,0,0,0,19, - 3,0,0,115,4,0,0,0,0,3,9,1,122,19,70,105, - 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, - 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,115,34,0,0,0,124,0,0,106,0, - 0,124,1,0,106,0,0,107,2,0,111,33,0,124,0,0, - 106,1,0,124,1,0,106,1,0,107,2,0,83,41,1,78, - 41,2,218,9,95,95,99,108,97,115,115,95,95,114,118,0, - 0,0,41,2,114,108,0,0,0,218,5,111,116,104,101,114, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 6,95,95,101,113,95,95,25,3,0,0,115,4,0,0,0, - 0,1,18,1,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, - 1,0,0,0,3,0,0,0,67,0,0,0,115,26,0,0, - 0,116,0,0,124,0,0,106,1,0,131,1,0,116,0,0, - 124,0,0,106,2,0,131,1,0,65,83,41,1,78,41,3, - 218,4,104,97,115,104,114,106,0,0,0,114,35,0,0,0, - 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,8,95,95,104,97,115,104,95,95, - 29,3,0,0,115,2,0,0,0,0,1,122,19,70,105,108, - 101,76,111,97,100,101,114,46,95,95,104,97,115,104,95,95, - 99,2,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,3,0,0,0,115,22,0,0,0,116,0,0,116,1,0, - 124,0,0,131,2,0,106,2,0,124,1,0,131,1,0,83, - 41,1,122,100,76,111,97,100,32,97,32,109,111,100,117,108, - 101,32,102,114,111,109,32,97,32,102,105,108,101,46,10,10, - 32,32,32,32,32,32,32,32,84,104,105,115,32,109,101,116, - 104,111,100,32,105,115,32,100,101,112,114,101,99,97,116,101, - 100,46,32,32,85,115,101,32,101,120,101,99,95,109,111,100, - 117,108,101,40,41,32,105,110,115,116,101,97,100,46,10,10, - 32,32,32,32,32,32,32,32,41,3,218,5,115,117,112,101, - 114,114,210,0,0,0,114,193,0,0,0,41,2,114,108,0, - 0,0,114,126,0,0,0,41,1,114,211,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,193,0,0,0,32,3,0, - 0,115,2,0,0,0,0,10,122,22,70,105,108,101,76,111, - 97,100,101,114,46,108,111,97,100,95,109,111,100,117,108,101, - 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, - 0,67,0,0,0,115,7,0,0,0,124,0,0,106,0,0, - 83,41,1,122,58,82,101,116,117,114,110,32,116,104,101,32, - 112,97,116,104,32,116,111,32,116,104,101,32,115,111,117,114, - 99,101,32,102,105,108,101,32,97,115,32,102,111,117,110,100, - 32,98,121,32,116,104,101,32,102,105,110,100,101,114,46,41, - 1,114,35,0,0,0,41,2,114,108,0,0,0,114,126,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,157,0,0,0,44,3,0,0,115,2,0,0,0,0, - 3,122,23,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,102,105,108,101,110,97,109,101,99,2,0,0,0,0, - 0,0,0,3,0,0,0,9,0,0,0,67,0,0,0,115, - 42,0,0,0,116,0,0,106,1,0,124,1,0,100,1,0, - 131,2,0,143,17,0,125,2,0,124,2,0,106,2,0,131, - 0,0,83,87,100,2,0,81,82,88,100,2,0,83,41,3, - 122,39,82,101,116,117,114,110,32,116,104,101,32,100,97,116, - 97,32,102,114,111,109,32,112,97,116,104,32,97,115,32,114, - 97,119,32,98,121,116,101,115,46,218,1,114,78,41,3,114, - 49,0,0,0,114,50,0,0,0,90,4,114,101,97,100,41, - 3,114,108,0,0,0,114,35,0,0,0,114,54,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 200,0,0,0,49,3,0,0,115,4,0,0,0,0,2,21, - 1,122,19,70,105,108,101,76,111,97,100,101,114,46,103,101, - 116,95,100,97,116,97,41,11,114,112,0,0,0,114,111,0, - 0,0,114,113,0,0,0,114,114,0,0,0,114,185,0,0, - 0,114,213,0,0,0,114,215,0,0,0,114,123,0,0,0, - 114,193,0,0,0,114,157,0,0,0,114,200,0,0,0,114, - 4,0,0,0,114,4,0,0,0,41,1,114,211,0,0,0, - 114,5,0,0,0,114,210,0,0,0,14,3,0,0,115,14, - 0,0,0,12,3,6,2,12,6,12,4,12,3,24,12,18, - 5,114,210,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,64,0,0,0, - 101,0,0,90,1,0,100,0,0,90,2,0,100,1,0,90, - 3,0,100,2,0,100,3,0,132,0,0,90,4,0,100,4, - 0,100,5,0,132,0,0,90,5,0,100,6,0,100,7,0, - 100,8,0,100,9,0,132,0,1,90,6,0,100,10,0,83, - 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,3,0,0, - 0,4,0,0,0,67,0,0,0,115,34,0,0,0,116,0, - 0,124,1,0,131,1,0,125,2,0,100,1,0,124,2,0, - 106,1,0,100,2,0,124,2,0,106,2,0,105,2,0,83, - 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,114,133,0,0,0,114,134,0,0,0,41, - 3,114,39,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,108,0,0,0, - 114,35,0,0,0,114,208,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,197,0,0,0,59,3, - 0,0,115,4,0,0,0,0,2,12,1,122,27,83,111,117, - 114,99,101,70,105,108,101,76,111,97,100,101,114,46,112,97, - 116,104,95,115,116,97,116,115,99,4,0,0,0,0,0,0, - 0,5,0,0,0,5,0,0,0,67,0,0,0,115,34,0, - 0,0,116,0,0,124,1,0,131,1,0,125,4,0,124,0, - 0,106,1,0,124,2,0,124,3,0,100,1,0,124,4,0, - 131,2,1,83,41,2,78,218,5,95,109,111,100,101,41,2, - 114,97,0,0,0,114,198,0,0,0,41,5,114,108,0,0, - 0,114,90,0,0,0,114,89,0,0,0,114,53,0,0,0, - 114,42,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,199,0,0,0,64,3,0,0,115,4,0, - 0,0,0,2,12,1,122,32,83,111,117,114,99,101,70,105, - 108,101,76,111,97,100,101,114,46,95,99,97,99,104,101,95, - 98,121,116,101,99,111,100,101,114,220,0,0,0,105,182,1, - 0,0,99,3,0,0,0,1,0,0,0,9,0,0,0,17, - 0,0,0,67,0,0,0,115,53,1,0,0,116,0,0,124, - 1,0,131,1,0,92,2,0,125,4,0,125,5,0,103,0, - 0,125,6,0,120,54,0,124,4,0,114,80,0,116,1,0, - 124,4,0,131,1,0,12,114,80,0,116,0,0,124,4,0, - 131,1,0,92,2,0,125,4,0,125,7,0,124,6,0,106, - 2,0,124,7,0,131,1,0,1,113,27,0,87,120,132,0, - 116,3,0,124,6,0,131,1,0,68,93,118,0,125,7,0, - 116,4,0,124,4,0,124,7,0,131,2,0,125,4,0,121, - 17,0,116,5,0,106,6,0,124,4,0,131,1,0,1,87, - 113,94,0,4,116,7,0,107,10,0,114,155,0,1,1,1, - 119,94,0,89,113,94,0,4,116,8,0,107,10,0,114,211, - 0,1,125,8,0,1,122,25,0,116,9,0,100,1,0,124, - 4,0,124,8,0,131,3,0,1,100,2,0,83,87,89,100, - 2,0,100,2,0,125,8,0,126,8,0,88,113,94,0,88, - 113,94,0,87,121,33,0,116,10,0,124,1,0,124,2,0, - 124,3,0,131,3,0,1,116,9,0,100,3,0,124,1,0, - 131,2,0,1,87,110,53,0,4,116,8,0,107,10,0,114, - 48,1,1,125,8,0,1,122,21,0,116,9,0,100,1,0, - 124,1,0,124,8,0,131,3,0,1,87,89,100,2,0,100, - 2,0,125,8,0,126,8,0,88,110,1,0,88,100,2,0, - 83,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,11,114,38, - 0,0,0,114,46,0,0,0,114,163,0,0,0,114,33,0, - 0,0,114,28,0,0,0,114,3,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,40,0,0,0,114,105,0,0,0,114,55, - 0,0,0,41,9,114,108,0,0,0,114,35,0,0,0,114, - 53,0,0,0,114,220,0,0,0,218,6,112,97,114,101,110, - 116,114,94,0,0,0,114,27,0,0,0,114,23,0,0,0, - 114,201,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,198,0,0,0,69,3,0,0,115,38,0, - 0,0,0,2,18,1,6,2,22,1,18,1,17,2,19,1, - 15,1,3,1,17,1,13,2,7,1,18,3,16,1,27,1, - 3,1,16,1,17,1,18,2,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,112,0,0,0,114,111,0,0,0, - 114,113,0,0,0,114,114,0,0,0,114,197,0,0,0,114, - 199,0,0,0,114,198,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,218,0, - 0,0,55,3,0,0,115,8,0,0,0,12,2,6,2,12, - 5,12,5,114,218,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,46,0, - 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, - 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, - 100,4,0,100,5,0,132,0,0,90,5,0,100,6,0,83, - 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, - 5,0,0,0,6,0,0,0,67,0,0,0,115,76,0,0, - 0,124,0,0,106,0,0,124,1,0,131,1,0,125,2,0, - 124,0,0,106,1,0,124,2,0,131,1,0,125,3,0,116, - 2,0,124,3,0,100,1,0,124,1,0,100,2,0,124,2, - 0,131,1,2,125,4,0,116,3,0,124,4,0,100,1,0, - 124,1,0,100,3,0,124,2,0,131,1,2,83,41,4,78, - 114,106,0,0,0,114,35,0,0,0,114,89,0,0,0,41, - 4,114,157,0,0,0,114,200,0,0,0,114,141,0,0,0, - 114,147,0,0,0,41,5,114,108,0,0,0,114,126,0,0, - 0,114,35,0,0,0,114,53,0,0,0,114,209,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 187,0,0,0,102,3,0,0,115,8,0,0,0,0,1,15, - 1,15,1,24,1,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,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 0,83,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,4, - 0,0,0,41,2,114,108,0,0,0,114,126,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,202, - 0,0,0,108,3,0,0,115,2,0,0,0,0,2,122,31, - 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111, - 97,100,101,114,46,103,101,116,95,115,111,117,114,99,101,78, - 41,6,114,112,0,0,0,114,111,0,0,0,114,113,0,0, - 0,114,114,0,0,0,114,187,0,0,0,114,202,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,223,0,0,0,98,3,0,0,115,6,0, - 0,0,12,2,6,2,12,6,114,223,0,0,0,99,0,0, + 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,0,83,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,4,0,0,0,41,2,114,110,0,0,0,114,128, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,203,0,0,0,115,3,0,0,115,2,0,0,0, + 0,2,122,31,83,111,117,114,99,101,108,101,115,115,70,105, + 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, + 114,99,101,78,41,6,114,114,0,0,0,114,113,0,0,0, + 114,115,0,0,0,114,116,0,0,0,114,188,0,0,0,114, + 203,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,224,0,0,0,105,3,0, + 0,115,6,0,0,0,12,2,6,2,12,6,114,224,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,136,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,100,2,0, + 100,3,0,132,0,0,90,4,0,100,4,0,100,5,0,132, + 0,0,90,5,0,100,6,0,100,7,0,132,0,0,90,6, + 0,100,8,0,100,9,0,132,0,0,90,7,0,100,10,0, + 100,11,0,132,0,0,90,8,0,100,12,0,100,13,0,132, + 0,0,90,9,0,100,14,0,100,15,0,132,0,0,90,10, + 0,100,16,0,100,17,0,132,0,0,90,11,0,101,12,0, + 100,18,0,100,19,0,132,0,0,131,1,0,90,13,0,100, + 20,0,83,41,21,218,19,69,120,116,101,110,115,105,111,110, + 70,105,108,101,76,111,97,100,101,114,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,3,0,0,0,2,0,0,0,67,0,0,0,115,22, + 0,0,0,124,1,0,124,0,0,95,0,0,124,2,0,124, + 0,0,95,1,0,100,0,0,83,41,1,78,41,2,114,108, + 0,0,0,114,37,0,0,0,41,3,114,110,0,0,0,114, + 108,0,0,0,114,37,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,186,0,0,0,132,3,0, + 0,115,4,0,0,0,0,1,9,1,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,105,110,105,116,95,95,99,2,0,0,0,0,0,0, + 0,2,0,0,0,2,0,0,0,67,0,0,0,115,34,0, + 0,0,124,0,0,106,0,0,124,1,0,106,0,0,107,2, + 0,111,33,0,124,0,0,106,1,0,124,1,0,106,1,0, + 107,2,0,83,41,1,78,41,2,114,212,0,0,0,114,120, + 0,0,0,41,2,114,110,0,0,0,114,213,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,214, + 0,0,0,136,3,0,0,115,4,0,0,0,0,1,18,1, + 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,1,0,0,0,3,0,0,0,67,0,0, + 0,115,26,0,0,0,116,0,0,124,0,0,106,1,0,131, + 1,0,116,0,0,124,0,0,106,2,0,131,1,0,65,83, + 41,1,78,41,3,114,215,0,0,0,114,108,0,0,0,114, + 37,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,216,0,0,0,140, + 3,0,0,115,2,0,0,0,0,1,122,28,69,120,116,101, + 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, + 95,95,104,97,115,104,95,95,99,2,0,0,0,0,0,0, + 0,3,0,0,0,4,0,0,0,67,0,0,0,115,47,0, + 0,0,116,0,0,106,1,0,116,2,0,106,3,0,124,1, + 0,131,2,0,125,2,0,116,4,0,100,1,0,124,1,0, + 106,5,0,124,0,0,106,6,0,131,3,0,1,124,2,0, + 83,41,2,122,38,67,114,101,97,116,101,32,97,110,32,117, + 110,105,116,105,97,108,105,122,101,100,32,101,120,116,101,110, + 115,105,111,110,32,109,111,100,117,108,101,122,38,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,32,123,33, + 114,125,32,108,111,97,100,101,100,32,102,114,111,109,32,123, + 33,114,125,41,7,114,123,0,0,0,114,189,0,0,0,114, + 147,0,0,0,90,14,99,114,101,97,116,101,95,100,121,110, + 97,109,105,99,114,107,0,0,0,114,108,0,0,0,114,37, + 0,0,0,41,3,114,110,0,0,0,114,166,0,0,0,114, + 191,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,187,0,0,0,143,3,0,0,115,10,0,0, + 0,0,2,6,1,15,1,6,1,16,1,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,2,0,0,0,4,0,0,0,67, + 0,0,0,115,45,0,0,0,116,0,0,106,1,0,116,2, + 0,106,3,0,124,1,0,131,2,0,1,116,4,0,100,1, + 0,124,0,0,106,5,0,124,0,0,106,6,0,131,3,0, + 1,100,2,0,83,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,123,0,0,0,114,189,0,0,0,114,147, + 0,0,0,90,12,101,120,101,99,95,100,121,110,97,109,105, + 99,114,107,0,0,0,114,108,0,0,0,114,37,0,0,0, + 41,2,114,110,0,0,0,114,191,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,192,0,0,0, + 151,3,0,0,115,6,0,0,0,0,2,19,1,6,1,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,2,0,0,0,4,0,0, + 0,3,0,0,0,115,48,0,0,0,116,0,0,124,0,0, + 106,1,0,131,1,0,100,1,0,25,137,0,0,116,2,0, + 135,0,0,102,1,0,100,2,0,100,3,0,134,0,0,116, + 3,0,68,131,1,0,131,1,0,83,41,4,122,49,82,101, + 116,117,114,110,32,84,114,117,101,32,105,102,32,116,104,101, + 32,101,120,116,101,110,115,105,111,110,32,109,111,100,117,108, + 101,32,105,115,32,97,32,112,97,99,107,97,103,101,46,114, + 31,0,0,0,99,1,0,0,0,0,0,0,0,2,0,0, + 0,4,0,0,0,51,0,0,0,115,31,0,0,0,124,0, + 0,93,21,0,125,1,0,136,0,0,100,0,0,124,1,0, + 23,107,2,0,86,1,113,3,0,100,1,0,83,41,2,114, + 186,0,0,0,78,114,4,0,0,0,41,2,114,24,0,0, + 0,218,6,115,117,102,102,105,120,41,1,218,9,102,105,108, + 101,95,110,97,109,101,114,4,0,0,0,114,6,0,0,0, + 250,9,60,103,101,110,101,120,112,114,62,160,3,0,0,115, + 2,0,0,0,6,1,122,49,69,120,116,101,110,115,105,111, + 110,70,105,108,101,76,111,97,100,101,114,46,105,115,95,112, + 97,99,107,97,103,101,46,60,108,111,99,97,108,115,62,46, + 60,103,101,110,101,120,112,114,62,41,4,114,40,0,0,0, + 114,37,0,0,0,218,3,97,110,121,218,18,69,88,84,69, + 78,83,73,79,78,95,83,85,70,70,73,88,69,83,41,2, + 114,110,0,0,0,114,128,0,0,0,114,4,0,0,0,41, + 1,114,227,0,0,0,114,6,0,0,0,114,161,0,0,0, + 157,3,0,0,115,6,0,0,0,0,2,19,1,18,1,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,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,0,83,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,4,0,0,0,41,2,114,110,0,0,0,114,128,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,188,0,0,0,163,3,0,0,115,2,0,0,0,0, + 2,122,28,69,120,116,101,110,115,105,111,110,70,105,108,101, + 76,111,97,100,101,114,46,103,101,116,95,99,111,100,101,99, + 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,4,0,0,0,100,1,0,83,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,4,0,0,0,41,2,114,110, + 0,0,0,114,128,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,203,0,0,0,167,3,0,0, + 115,2,0,0,0,0,2,122,30,69,120,116,101,110,115,105, + 111,110,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,99,2,0,0,0,0,0,0,0, + 2,0,0,0,1,0,0,0,67,0,0,0,115,7,0,0, + 0,124,0,0,106,0,0,83,41,1,122,58,82,101,116,117, + 114,110,32,116,104,101,32,112,97,116,104,32,116,111,32,116, + 104,101,32,115,111,117,114,99,101,32,102,105,108,101,32,97, + 115,32,102,111,117,110,100,32,98,121,32,116,104,101,32,102, + 105,110,100,101,114,46,41,1,114,37,0,0,0,41,2,114, + 110,0,0,0,114,128,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,159,0,0,0,171,3,0, + 0,115,2,0,0,0,0,3,122,32,69,120,116,101,110,115, + 105,111,110,70,105,108,101,76,111,97,100,101,114,46,103,101, + 116,95,102,105,108,101,110,97,109,101,78,41,14,114,114,0, + 0,0,114,113,0,0,0,114,115,0,0,0,114,116,0,0, + 0,114,186,0,0,0,114,214,0,0,0,114,216,0,0,0, + 114,187,0,0,0,114,192,0,0,0,114,161,0,0,0,114, + 188,0,0,0,114,203,0,0,0,114,125,0,0,0,114,159, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,225,0,0,0,124,3,0,0, + 115,20,0,0,0,12,6,6,2,12,4,12,4,12,3,12, + 8,12,6,12,6,12,4,12,4,114,225,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,130,0,0,0,101,0,0,90,1,0,100,0, + 0,90,2,0,100,1,0,90,3,0,100,2,0,100,3,0, + 132,0,0,90,4,0,100,4,0,100,5,0,132,0,0,90, + 5,0,100,6,0,100,7,0,132,0,0,90,6,0,100,8, + 0,100,9,0,132,0,0,90,7,0,100,10,0,100,11,0, + 132,0,0,90,8,0,100,12,0,100,13,0,132,0,0,90, + 9,0,100,14,0,100,15,0,132,0,0,90,10,0,100,16, + 0,100,17,0,132,0,0,90,11,0,100,18,0,100,19,0, + 132,0,0,90,12,0,100,20,0,83,41,21,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, + 4,0,0,0,2,0,0,0,67,0,0,0,115,52,0,0, + 0,124,1,0,124,0,0,95,0,0,124,2,0,124,0,0, + 95,1,0,116,2,0,124,0,0,106,3,0,131,0,0,131, + 1,0,124,0,0,95,4,0,124,3,0,124,0,0,95,5, + 0,100,0,0,83,41,1,78,41,6,218,5,95,110,97,109, + 101,218,5,95,112,97,116,104,114,95,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, + 41,4,114,110,0,0,0,114,108,0,0,0,114,37,0,0, + 0,218,11,112,97,116,104,95,102,105,110,100,101,114,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,186,0, + 0,0,184,3,0,0,115,8,0,0,0,0,1,9,1,9, + 1,21,1,122,23,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,95,105,110,105,116,95,95,99,1,0,0, + 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, + 0,115,53,0,0,0,124,0,0,106,0,0,106,1,0,100, + 1,0,131,1,0,92,3,0,125,1,0,125,2,0,125,3, + 0,124,2,0,100,2,0,107,2,0,114,43,0,100,6,0, + 83,124,1,0,100,5,0,102,2,0,83,41,7,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,60,0, + 0,0,114,32,0,0,0,114,8,0,0,0,114,37,0,0, + 0,90,8,95,95,112,97,116,104,95,95,41,2,122,3,115, + 121,115,122,4,112,97,116,104,41,2,114,232,0,0,0,114, + 34,0,0,0,41,4,114,110,0,0,0,114,223,0,0,0, + 218,3,100,111,116,90,2,109,101,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,23,95,102,105,110,100,95, + 112,97,114,101,110,116,95,112,97,116,104,95,110,97,109,101, + 115,190,3,0,0,115,8,0,0,0,0,2,27,1,12,2, + 4,3,122,38,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,102,105,110,100,95,112,97,114,101,110,116,95, + 112,97,116,104,95,110,97,109,101,115,99,1,0,0,0,0, + 0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,115, + 38,0,0,0,124,0,0,106,0,0,131,0,0,92,2,0, + 125,1,0,125,2,0,116,1,0,116,2,0,106,3,0,124, + 1,0,25,124,2,0,131,2,0,83,41,1,78,41,4,114, + 239,0,0,0,114,119,0,0,0,114,8,0,0,0,218,7, + 109,111,100,117,108,101,115,41,3,114,110,0,0,0,90,18, + 112,97,114,101,110,116,95,109,111,100,117,108,101,95,110,97, + 109,101,90,14,112,97,116,104,95,97,116,116,114,95,110,97, + 109,101,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,234,0,0,0,200,3,0,0,115,4,0,0,0,0, + 1,18,1,122,31,95,78,97,109,101,115,112,97,99,101,80, + 97,116,104,46,95,103,101,116,95,112,97,114,101,110,116,95, + 112,97,116,104,99,1,0,0,0,0,0,0,0,3,0,0, + 0,3,0,0,0,67,0,0,0,115,118,0,0,0,116,0, + 0,124,0,0,106,1,0,131,0,0,131,1,0,125,1,0, + 124,1,0,124,0,0,106,2,0,107,3,0,114,111,0,124, + 0,0,106,3,0,124,0,0,106,4,0,124,1,0,131,2, + 0,125,2,0,124,2,0,100,0,0,107,9,0,114,102,0, + 124,2,0,106,5,0,100,0,0,107,8,0,114,102,0,124, + 2,0,106,6,0,114,102,0,124,2,0,106,6,0,124,0, + 0,95,7,0,124,1,0,124,0,0,95,2,0,124,0,0, + 106,7,0,83,41,1,78,41,8,114,95,0,0,0,114,234, + 0,0,0,114,235,0,0,0,114,236,0,0,0,114,232,0, + 0,0,114,129,0,0,0,114,158,0,0,0,114,233,0,0, + 0,41,3,114,110,0,0,0,90,11,112,97,114,101,110,116, + 95,112,97,116,104,114,166,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,12,95,114,101,99,97, + 108,99,117,108,97,116,101,204,3,0,0,115,16,0,0,0, + 0,2,18,1,15,1,21,3,27,1,9,1,12,1,9,1, + 122,27,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,114,101,99,97,108,99,117,108,97,116,101,99,1,0, + 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, + 0,0,115,16,0,0,0,116,0,0,124,0,0,106,1,0, + 131,0,0,131,1,0,83,41,1,78,41,2,218,4,105,116, + 101,114,114,241,0,0,0,41,1,114,110,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,8,95, + 95,105,116,101,114,95,95,217,3,0,0,115,2,0,0,0, + 0,1,122,23,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,105,116,101,114,95,95,99,1,0,0,0, + 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, + 115,16,0,0,0,116,0,0,124,0,0,106,1,0,131,0, + 0,131,1,0,83,41,1,78,41,2,114,33,0,0,0,114, + 241,0,0,0,41,1,114,110,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,7,95,95,108,101, + 110,95,95,220,3,0,0,115,2,0,0,0,0,1,122,22, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,108,101,110,95,95,99,1,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,67,0,0,0,115,16,0,0,0, + 100,1,0,106,0,0,124,0,0,106,1,0,131,1,0,83, + 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,49,0,0,0, + 114,233,0,0,0,41,1,114,110,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,8,95,95,114, + 101,112,114,95,95,223,3,0,0,115,2,0,0,0,0,1, + 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, + 46,95,95,114,101,112,114,95,95,99,2,0,0,0,0,0, + 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,16, + 0,0,0,124,1,0,124,0,0,106,0,0,131,0,0,107, + 6,0,83,41,1,78,41,1,114,241,0,0,0,41,2,114, + 110,0,0,0,218,4,105,116,101,109,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,12,95,95,99,111,110, + 116,97,105,110,115,95,95,226,3,0,0,115,2,0,0,0, + 0,1,122,27,95,78,97,109,101,115,112,97,99,101,80,97, + 116,104,46,95,95,99,111,110,116,97,105,110,115,95,95,99, + 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, + 67,0,0,0,115,20,0,0,0,124,0,0,106,0,0,106, + 1,0,124,1,0,131,1,0,1,100,0,0,83,41,1,78, + 41,2,114,233,0,0,0,114,165,0,0,0,41,2,114,110, + 0,0,0,114,246,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,165,0,0,0,229,3,0,0, + 115,2,0,0,0,0,1,122,21,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,97,112,112,101,110,100,78,41, + 13,114,114,0,0,0,114,113,0,0,0,114,115,0,0,0, + 114,116,0,0,0,114,186,0,0,0,114,239,0,0,0,114, + 234,0,0,0,114,241,0,0,0,114,243,0,0,0,114,244, + 0,0,0,114,245,0,0,0,114,247,0,0,0,114,165,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,231,0,0,0,177,3,0,0,115, + 20,0,0,0,12,5,6,2,12,6,12,10,12,4,12,13, + 12,3,12,3,12,3,12,3,114,231,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,136,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,100,2,0,100,3,0,132, - 0,0,90,4,0,100,4,0,100,5,0,132,0,0,90,5, - 0,100,6,0,100,7,0,132,0,0,90,6,0,100,8,0, - 100,9,0,132,0,0,90,7,0,100,10,0,100,11,0,132, - 0,0,90,8,0,100,12,0,100,13,0,132,0,0,90,9, - 0,100,14,0,100,15,0,132,0,0,90,10,0,100,16,0, - 100,17,0,132,0,0,90,11,0,101,12,0,100,18,0,100, - 19,0,132,0,0,131,1,0,90,13,0,100,20,0,83,41, - 21,218,19,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,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,3,0, - 0,0,2,0,0,0,67,0,0,0,115,22,0,0,0,124, - 1,0,124,0,0,95,0,0,124,2,0,124,0,0,95,1, - 0,100,0,0,83,41,1,78,41,2,114,106,0,0,0,114, - 35,0,0,0,41,3,114,108,0,0,0,114,106,0,0,0, - 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,185,0,0,0,125,3,0,0,115,4,0, - 0,0,0,1,9,1,122,28,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, - 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,115,34,0,0,0,124,0, - 0,106,0,0,124,1,0,106,0,0,107,2,0,111,33,0, - 124,0,0,106,1,0,124,1,0,106,1,0,107,2,0,83, - 41,1,78,41,2,114,211,0,0,0,114,118,0,0,0,41, - 2,114,108,0,0,0,114,212,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,213,0,0,0,129, - 3,0,0,115,4,0,0,0,0,1,18,1,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,1,0,0,0,3,0,0,0,67,0,0,0,115,26,0, - 0,0,116,0,0,124,0,0,106,1,0,131,1,0,116,0, - 0,124,0,0,106,2,0,131,1,0,65,83,41,1,78,41, - 3,114,214,0,0,0,114,106,0,0,0,114,35,0,0,0, - 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,215,0,0,0,133,3,0,0,115, - 2,0,0,0,0,1,122,28,69,120,116,101,110,115,105,111, - 110,70,105,108,101,76,111,97,100,101,114,46,95,95,104,97, - 115,104,95,95,99,2,0,0,0,0,0,0,0,3,0,0, - 0,4,0,0,0,67,0,0,0,115,47,0,0,0,116,0, - 0,106,1,0,116,2,0,106,3,0,124,1,0,131,2,0, - 125,2,0,116,4,0,100,1,0,124,1,0,106,5,0,124, - 0,0,106,6,0,131,3,0,1,124,2,0,83,41,2,122, - 38,67,114,101,97,116,101,32,97,110,32,117,110,105,116,105, - 97,108,105,122,101,100,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,122,38,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,32,123,33,114,125,32,108, - 111,97,100,101,100,32,102,114,111,109,32,123,33,114,125,41, - 7,114,121,0,0,0,114,188,0,0,0,114,145,0,0,0, - 90,14,99,114,101,97,116,101,95,100,121,110,97,109,105,99, - 114,105,0,0,0,114,106,0,0,0,114,35,0,0,0,41, - 3,114,108,0,0,0,114,164,0,0,0,114,190,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 186,0,0,0,136,3,0,0,115,10,0,0,0,0,2,6, - 1,15,1,6,1,16,1,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,2,0,0,0,4,0,0,0,67,0,0,0,115, - 45,0,0,0,116,0,0,106,1,0,116,2,0,106,3,0, - 124,1,0,131,2,0,1,116,4,0,100,1,0,124,0,0, - 106,5,0,124,0,0,106,6,0,131,3,0,1,100,2,0, - 83,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,121,0,0,0,114,188,0,0,0,114,145,0,0,0,90, - 12,101,120,101,99,95,100,121,110,97,109,105,99,114,105,0, - 0,0,114,106,0,0,0,114,35,0,0,0,41,2,114,108, - 0,0,0,114,190,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,191,0,0,0,144,3,0,0, - 115,6,0,0,0,0,2,19,1,6,1,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,2,0,0,0,4,0,0,0,3,0,0, - 0,115,48,0,0,0,116,0,0,124,0,0,106,1,0,131, - 1,0,100,1,0,25,137,0,0,116,2,0,135,0,0,102, - 1,0,100,2,0,100,3,0,134,0,0,116,3,0,68,131, - 1,0,131,1,0,83,41,4,122,49,82,101,116,117,114,110, - 32,84,114,117,101,32,105,102,32,116,104,101,32,101,120,116, - 101,110,115,105,111,110,32,109,111,100,117,108,101,32,105,115, - 32,97,32,112,97,99,107,97,103,101,46,114,29,0,0,0, - 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, - 0,51,0,0,0,115,31,0,0,0,124,0,0,93,21,0, - 125,1,0,136,0,0,100,0,0,124,1,0,23,107,2,0, - 86,1,113,3,0,100,1,0,83,41,2,114,185,0,0,0, - 78,114,4,0,0,0,41,2,114,22,0,0,0,218,6,115, - 117,102,102,105,120,41,1,218,9,102,105,108,101,95,110,97, - 109,101,114,4,0,0,0,114,5,0,0,0,250,9,60,103, - 101,110,101,120,112,114,62,153,3,0,0,115,2,0,0,0, - 6,1,122,49,69,120,116,101,110,115,105,111,110,70,105,108, - 101,76,111,97,100,101,114,46,105,115,95,112,97,99,107,97, - 103,101,46,60,108,111,99,97,108,115,62,46,60,103,101,110, - 101,120,112,114,62,41,4,114,38,0,0,0,114,35,0,0, - 0,218,3,97,110,121,218,18,69,88,84,69,78,83,73,79, - 78,95,83,85,70,70,73,88,69,83,41,2,114,108,0,0, - 0,114,126,0,0,0,114,4,0,0,0,41,1,114,226,0, - 0,0,114,5,0,0,0,114,159,0,0,0,150,3,0,0, - 115,6,0,0,0,0,2,19,1,18,1,122,30,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, + 0,0,115,118,0,0,0,101,0,0,90,1,0,100,0,0, + 90,2,0,100,1,0,100,2,0,132,0,0,90,3,0,101, + 4,0,100,3,0,100,4,0,132,0,0,131,1,0,90,5, + 0,100,5,0,100,6,0,132,0,0,90,6,0,100,7,0, + 100,8,0,132,0,0,90,7,0,100,9,0,100,10,0,132, + 0,0,90,8,0,100,11,0,100,12,0,132,0,0,90,9, + 0,100,13,0,100,14,0,132,0,0,90,10,0,100,15,0, + 100,16,0,132,0,0,90,11,0,100,17,0,83,41,18,218, + 16,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,99,4,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,67,0,0,0,115,25,0,0,0,116,0,0,124,1, + 0,124,2,0,124,3,0,131,3,0,124,0,0,95,1,0, + 100,0,0,83,41,1,78,41,2,114,231,0,0,0,114,233, + 0,0,0,41,4,114,110,0,0,0,114,108,0,0,0,114, + 37,0,0,0,114,237,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,186,0,0,0,235,3,0, + 0,115,2,0,0,0,0,1,122,25,95,78,97,109,101,115, + 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, + 116,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, + 2,0,0,0,67,0,0,0,115,16,0,0,0,100,1,0, + 106,0,0,124,1,0,106,1,0,131,1,0,83,41,2,122, + 115,82,101,116,117,114,110,32,114,101,112,114,32,102,111,114, + 32,116,104,101,32,109,111,100,117,108,101,46,10,10,32,32, + 32,32,32,32,32,32,84,104,101,32,109,101,116,104,111,100, + 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, + 32,84,104,101,32,105,109,112,111,114,116,32,109,97,99,104, + 105,110,101,114,121,32,100,111,101,115,32,116,104,101,32,106, + 111,98,32,105,116,115,101,108,102,46,10,10,32,32,32,32, + 32,32,32,32,122,25,60,109,111,100,117,108,101,32,123,33, + 114,125,32,40,110,97,109,101,115,112,97,99,101,41,62,41, + 2,114,49,0,0,0,114,114,0,0,0,41,2,114,172,0, + 0,0,114,191,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,11,109,111,100,117,108,101,95,114, + 101,112,114,238,3,0,0,115,2,0,0,0,0,7,122,28, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,109,111,100,117,108,101,95,114,101,112,114,99,2,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,1,0,83,41,2,78,84,114,4, + 0,0,0,41,2,114,110,0,0,0,114,128,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,161, + 0,0,0,247,3,0,0,115,2,0,0,0,0,1,122,27, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, 46,105,115,95,112,97,99,107,97,103,101,99,2,0,0,0, 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,0,83,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,4,0, - 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,187,0, - 0,0,156,3,0,0,115,2,0,0,0,0,2,122,28,69, - 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, - 101,114,46,103,101,116,95,99,111,100,101,99,2,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,1,0,83,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,4,0,0,0,41,2,114,108,0,0,0,114, - 126,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,202,0,0,0,160,3,0,0,115,2,0,0, - 0,0,2,122,30,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, - 114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,7,0,0,0,124,0,0, - 106,0,0,83,41,1,122,58,82,101,116,117,114,110,32,116, - 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, - 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, - 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, - 114,46,41,1,114,35,0,0,0,41,2,114,108,0,0,0, - 114,126,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,157,0,0,0,164,3,0,0,115,2,0, - 0,0,0,3,122,32,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, - 108,101,110,97,109,101,78,41,14,114,112,0,0,0,114,111, - 0,0,0,114,113,0,0,0,114,114,0,0,0,114,185,0, - 0,0,114,213,0,0,0,114,215,0,0,0,114,186,0,0, - 0,114,191,0,0,0,114,159,0,0,0,114,187,0,0,0, - 114,202,0,0,0,114,123,0,0,0,114,157,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,224,0,0,0,117,3,0,0,115,20,0,0, - 0,12,6,6,2,12,4,12,4,12,3,12,8,12,6,12, - 6,12,4,12,4,114,224,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, - 130,0,0,0,101,0,0,90,1,0,100,0,0,90,2,0, - 100,1,0,90,3,0,100,2,0,100,3,0,132,0,0,90, - 4,0,100,4,0,100,5,0,132,0,0,90,5,0,100,6, - 0,100,7,0,132,0,0,90,6,0,100,8,0,100,9,0, - 132,0,0,90,7,0,100,10,0,100,11,0,132,0,0,90, - 8,0,100,12,0,100,13,0,132,0,0,90,9,0,100,14, - 0,100,15,0,132,0,0,90,10,0,100,16,0,100,17,0, - 132,0,0,90,11,0,100,18,0,100,19,0,132,0,0,90, - 12,0,100,20,0,83,41,21,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,4,0,0,0, - 2,0,0,0,67,0,0,0,115,52,0,0,0,124,1,0, - 124,0,0,95,0,0,124,2,0,124,0,0,95,1,0,116, - 2,0,124,0,0,106,3,0,131,0,0,131,1,0,124,0, - 0,95,4,0,124,3,0,124,0,0,95,5,0,100,0,0, - 83,41,1,78,41,6,218,5,95,110,97,109,101,218,5,95, - 112,97,116,104,114,93,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,41,4,114,108, - 0,0,0,114,106,0,0,0,114,35,0,0,0,218,11,112, - 97,116,104,95,102,105,110,100,101,114,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,185,0,0,0,177,3, - 0,0,115,8,0,0,0,0,1,9,1,9,1,21,1,122, - 23,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,95,105,110,105,116,95,95,99,1,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,67,0,0,0,115,53,0, - 0,0,124,0,0,106,0,0,106,1,0,100,1,0,131,1, - 0,92,3,0,125,1,0,125,2,0,125,3,0,124,2,0, - 100,2,0,107,2,0,114,43,0,100,6,0,83,124,1,0, - 100,5,0,102,2,0,83,41,7,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,58,0,0,0,114,30, - 0,0,0,114,7,0,0,0,114,35,0,0,0,90,8,95, - 95,112,97,116,104,95,95,41,2,122,3,115,121,115,122,4, - 112,97,116,104,41,2,114,231,0,0,0,114,32,0,0,0, - 41,4,114,108,0,0,0,114,222,0,0,0,218,3,100,111, - 116,90,2,109,101,114,4,0,0,0,114,4,0,0,0,114, - 5,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,183,3,0, - 0,115,8,0,0,0,0,2,27,1,12,2,4,3,122,38, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 102,105,110,100,95,112,97,114,101,110,116,95,112,97,116,104, - 95,110,97,109,101,115,99,1,0,0,0,0,0,0,0,3, - 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, - 124,0,0,106,0,0,131,0,0,92,2,0,125,1,0,125, - 2,0,116,1,0,116,2,0,106,3,0,124,1,0,25,124, - 2,0,131,2,0,83,41,1,78,41,4,114,238,0,0,0, - 114,117,0,0,0,114,7,0,0,0,218,7,109,111,100,117, - 108,101,115,41,3,114,108,0,0,0,90,18,112,97,114,101, - 110,116,95,109,111,100,117,108,101,95,110,97,109,101,90,14, - 112,97,116,104,95,97,116,116,114,95,110,97,109,101,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,233,0, - 0,0,193,3,0,0,115,4,0,0,0,0,1,18,1,122, - 31,95,78,97,109,101,115,112,97,99,101,80,97,116,104,46, - 95,103,101,116,95,112,97,114,101,110,116,95,112,97,116,104, - 99,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0, - 0,67,0,0,0,115,118,0,0,0,116,0,0,124,0,0, - 106,1,0,131,0,0,131,1,0,125,1,0,124,1,0,124, - 0,0,106,2,0,107,3,0,114,111,0,124,0,0,106,3, - 0,124,0,0,106,4,0,124,1,0,131,2,0,125,2,0, - 124,2,0,100,0,0,107,9,0,114,102,0,124,2,0,106, - 5,0,100,0,0,107,8,0,114,102,0,124,2,0,106,6, - 0,114,102,0,124,2,0,106,6,0,124,0,0,95,7,0, - 124,1,0,124,0,0,95,2,0,124,0,0,106,7,0,83, - 41,1,78,41,8,114,93,0,0,0,114,233,0,0,0,114, - 234,0,0,0,114,235,0,0,0,114,231,0,0,0,114,127, - 0,0,0,114,156,0,0,0,114,232,0,0,0,41,3,114, - 108,0,0,0,90,11,112,97,114,101,110,116,95,112,97,116, - 104,114,164,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,12,95,114,101,99,97,108,99,117,108, - 97,116,101,197,3,0,0,115,16,0,0,0,0,2,18,1, - 15,1,21,3,27,1,9,1,12,1,9,1,122,27,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,114,101, - 99,97,108,99,117,108,97,116,101,99,1,0,0,0,0,0, - 0,0,1,0,0,0,2,0,0,0,67,0,0,0,115,16, - 0,0,0,116,0,0,124,0,0,106,1,0,131,0,0,131, - 1,0,83,41,1,78,41,2,218,4,105,116,101,114,114,240, - 0,0,0,41,1,114,108,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,8,95,95,105,116,101, - 114,95,95,210,3,0,0,115,2,0,0,0,0,1,122,23, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,105,116,101,114,95,95,99,1,0,0,0,0,0,0,0, - 1,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, - 0,116,0,0,124,0,0,106,1,0,131,0,0,131,1,0, - 83,41,1,78,41,2,114,31,0,0,0,114,240,0,0,0, - 41,1,114,108,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,218,7,95,95,108,101,110,95,95,213, - 3,0,0,115,2,0,0,0,0,1,122,22,95,78,97,109, - 101,115,112,97,99,101,80,97,116,104,46,95,95,108,101,110, - 95,95,99,1,0,0,0,0,0,0,0,1,0,0,0,2, - 0,0,0,67,0,0,0,115,16,0,0,0,100,1,0,106, - 0,0,124,0,0,106,1,0,131,1,0,83,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,47,0,0,0,114,232,0,0, - 0,41,1,114,108,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,8,95,95,114,101,112,114,95, - 95,216,3,0,0,115,2,0,0,0,0,1,122,23,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,114, - 101,112,114,95,95,99,2,0,0,0,0,0,0,0,2,0, - 0,0,2,0,0,0,67,0,0,0,115,16,0,0,0,124, - 1,0,124,0,0,106,0,0,131,0,0,107,6,0,83,41, - 1,78,41,1,114,240,0,0,0,41,2,114,108,0,0,0, - 218,4,105,116,101,109,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,12,95,95,99,111,110,116,97,105,110, - 115,95,95,219,3,0,0,115,2,0,0,0,0,1,122,27, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,99,111,110,116,97,105,110,115,95,95,99,2,0,0,0, - 0,0,0,0,2,0,0,0,2,0,0,0,67,0,0,0, - 115,20,0,0,0,124,0,0,106,0,0,106,1,0,124,1, - 0,131,1,0,1,100,0,0,83,41,1,78,41,2,114,232, - 0,0,0,114,163,0,0,0,41,2,114,108,0,0,0,114, - 245,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,163,0,0,0,222,3,0,0,115,2,0,0, - 0,0,1,122,21,95,78,97,109,101,115,112,97,99,101,80, - 97,116,104,46,97,112,112,101,110,100,78,41,13,114,112,0, - 0,0,114,111,0,0,0,114,113,0,0,0,114,114,0,0, - 0,114,185,0,0,0,114,238,0,0,0,114,233,0,0,0, - 114,240,0,0,0,114,242,0,0,0,114,243,0,0,0,114, - 244,0,0,0,114,246,0,0,0,114,163,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,230,0,0,0,170,3,0,0,115,20,0,0,0, - 12,5,6,2,12,6,12,10,12,4,12,13,12,3,12,3, - 12,3,12,3,114,230,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,118, - 0,0,0,101,0,0,90,1,0,100,0,0,90,2,0,100, - 1,0,100,2,0,132,0,0,90,3,0,101,4,0,100,3, - 0,100,4,0,132,0,0,131,1,0,90,5,0,100,5,0, - 100,6,0,132,0,0,90,6,0,100,7,0,100,8,0,132, - 0,0,90,7,0,100,9,0,100,10,0,132,0,0,90,8, - 0,100,11,0,100,12,0,132,0,0,90,9,0,100,13,0, - 100,14,0,132,0,0,90,10,0,100,15,0,100,16,0,132, - 0,0,90,11,0,100,17,0,83,41,18,218,16,95,78,97, - 109,101,115,112,97,99,101,76,111,97,100,101,114,99,4,0, - 0,0,0,0,0,0,4,0,0,0,4,0,0,0,67,0, - 0,0,115,25,0,0,0,116,0,0,124,1,0,124,2,0, - 124,3,0,131,3,0,124,0,0,95,1,0,100,0,0,83, - 41,1,78,41,2,114,230,0,0,0,114,232,0,0,0,41, - 4,114,108,0,0,0,114,106,0,0,0,114,35,0,0,0, - 114,236,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,185,0,0,0,228,3,0,0,115,2,0, - 0,0,0,1,122,25,95,78,97,109,101,115,112,97,99,101, - 76,111,97,100,101,114,46,95,95,105,110,105,116,95,95,99, - 2,0,0,0,0,0,0,0,2,0,0,0,2,0,0,0, + 115,4,0,0,0,100,1,0,83,41,2,78,114,32,0,0, + 0,114,4,0,0,0,41,2,114,110,0,0,0,114,128,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,203,0,0,0,250,3,0,0,115,2,0,0,0,0, + 1,122,27,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, + 0,0,0,0,0,0,0,2,0,0,0,6,0,0,0,67, + 0,0,0,115,22,0,0,0,116,0,0,100,1,0,100,2, + 0,100,3,0,100,4,0,100,5,0,131,3,1,83,41,6, + 78,114,32,0,0,0,122,8,60,115,116,114,105,110,103,62, + 114,190,0,0,0,114,205,0,0,0,84,41,1,114,206,0, + 0,0,41,2,114,110,0,0,0,114,128,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,188,0, + 0,0,253,3,0,0,115,2,0,0,0,0,1,122,25,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 103,101,116,95,99,111,100,101,99,2,0,0,0,0,0,0, + 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, + 0,0,100,1,0,83,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,4,0,0,0,41,2,114,110,0,0, + 0,114,166,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,187,0,0,0,0,4,0,0,115,0, + 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,2,0,0,0, + 1,0,0,0,67,0,0,0,115,4,0,0,0,100,0,0, + 83,41,1,78,114,4,0,0,0,41,2,114,110,0,0,0, + 114,191,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,192,0,0,0,3,4,0,0,115,2,0, + 0,0,0,1,122,28,95,78,97,109,101,115,112,97,99,101, + 76,111,97,100,101,114,46,101,120,101,99,95,109,111,100,117, + 108,101,99,2,0,0,0,0,0,0,0,2,0,0,0,3, + 0,0,0,67,0,0,0,115,32,0,0,0,116,0,0,100, + 1,0,124,0,0,106,1,0,131,2,0,1,116,2,0,106, + 3,0,124,0,0,124,1,0,131,2,0,83,41,2,122,98, + 76,111,97,100,32,97,32,110,97,109,101,115,112,97,99,101, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,101,120,101,99,95,109,111,100,117,108,101,40,41,32, + 105,110,115,116,101,97,100,46,10,10,32,32,32,32,32,32, + 32,32,122,38,110,97,109,101,115,112,97,99,101,32,109,111, + 100,117,108,101,32,108,111,97,100,101,100,32,119,105,116,104, + 32,112,97,116,104,32,123,33,114,125,41,4,114,107,0,0, + 0,114,233,0,0,0,114,123,0,0,0,114,193,0,0,0, + 41,2,114,110,0,0,0,114,128,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,194,0,0,0, + 6,4,0,0,115,4,0,0,0,0,7,16,1,122,28,95, + 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, + 108,111,97,100,95,109,111,100,117,108,101,78,41,12,114,114, + 0,0,0,114,113,0,0,0,114,115,0,0,0,114,186,0, + 0,0,114,184,0,0,0,114,249,0,0,0,114,161,0,0, + 0,114,203,0,0,0,114,188,0,0,0,114,187,0,0,0, + 114,192,0,0,0,114,194,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,248, + 0,0,0,234,3,0,0,115,16,0,0,0,12,1,12,3, + 18,9,12,3,12,3,12,3,12,3,12,3,114,248,0,0, + 0,99,0,0,0,0,0,0,0,0,0,0,0,0,5,0, + 0,0,64,0,0,0,115,160,0,0,0,101,0,0,90,1, + 0,100,0,0,90,2,0,100,1,0,90,3,0,101,4,0, + 100,2,0,100,3,0,132,0,0,131,1,0,90,5,0,101, + 4,0,100,4,0,100,5,0,132,0,0,131,1,0,90,6, + 0,101,4,0,100,6,0,100,7,0,132,0,0,131,1,0, + 90,7,0,101,4,0,100,8,0,100,9,0,132,0,0,131, + 1,0,90,8,0,101,4,0,100,10,0,100,11,0,100,12, + 0,132,1,0,131,1,0,90,9,0,101,4,0,100,10,0, + 100,10,0,100,13,0,100,14,0,132,2,0,131,1,0,90, + 10,0,101,4,0,100,10,0,100,15,0,100,16,0,132,1, + 0,131,1,0,90,11,0,100,10,0,83,41,17,218,10,80, + 97,116,104,70,105,110,100,101,114,122,62,77,101,116,97,32, + 112,97,116,104,32,102,105,110,100,101,114,32,102,111,114,32, + 115,121,115,46,112,97,116,104,32,97,110,100,32,112,97,99, + 107,97,103,101,32,95,95,112,97,116,104,95,95,32,97,116, + 116,114,105,98,117,116,101,115,46,99,1,0,0,0,0,0, + 0,0,2,0,0,0,4,0,0,0,67,0,0,0,115,55, + 0,0,0,120,48,0,116,0,0,106,1,0,106,2,0,131, + 0,0,68,93,31,0,125,1,0,116,3,0,124,1,0,100, + 1,0,131,2,0,114,16,0,124,1,0,106,4,0,131,0, + 0,1,113,16,0,87,100,2,0,83,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,218,17,105,110,118, + 97,108,105,100,97,116,101,95,99,97,99,104,101,115,78,41, + 5,114,8,0,0,0,218,19,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,218,6,118,97,108, + 117,101,115,114,117,0,0,0,114,251,0,0,0,41,2,114, + 172,0,0,0,218,6,102,105,110,100,101,114,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,251,0,0,0, + 23,4,0,0,115,6,0,0,0,0,4,22,1,15,1,122, + 28,80,97,116,104,70,105,110,100,101,114,46,105,110,118,97, + 108,105,100,97,116,101,95,99,97,99,104,101,115,99,2,0, + 0,0,0,0,0,0,3,0,0,0,12,0,0,0,67,0, + 0,0,115,107,0,0,0,116,0,0,106,1,0,100,1,0, + 107,9,0,114,41,0,116,0,0,106,1,0,12,114,41,0, + 116,2,0,106,3,0,100,2,0,116,4,0,131,2,0,1, + 120,59,0,116,0,0,106,1,0,68,93,44,0,125,2,0, + 121,14,0,124,2,0,124,1,0,131,1,0,83,87,113,51, + 0,4,116,5,0,107,10,0,114,94,0,1,1,1,119,51, + 0,89,113,51,0,88,113,51,0,87,100,1,0,83,100,1, + 0,83,41,3,122,113,83,101,97,114,99,104,32,115,101,113, + 117,101,110,99,101,32,111,102,32,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,10,10,32,32,32,32,32,32,32, + 32,73,102,32,39,104,111,111,107,115,39,32,105,115,32,102, + 97,108,115,101,32,116,104,101,110,32,117,115,101,32,115,121, + 115,46,112,97,116,104,95,104,111,111,107,115,46,10,10,32, + 32,32,32,32,32,32,32,78,122,23,115,121,115,46,112,97, + 116,104,95,104,111,111,107,115,32,105,115,32,101,109,112,116, + 121,41,6,114,8,0,0,0,218,10,112,97,116,104,95,104, + 111,111,107,115,114,62,0,0,0,114,63,0,0,0,114,127, + 0,0,0,114,109,0,0,0,41,3,114,172,0,0,0,114, + 37,0,0,0,90,4,104,111,111,107,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,11,95,112,97,116,104, + 95,104,111,111,107,115,31,4,0,0,115,16,0,0,0,0, + 7,25,1,16,1,16,1,3,1,14,1,13,1,12,2,122, + 22,80,97,116,104,70,105,110,100,101,114,46,95,112,97,116, + 104,95,104,111,111,107,115,99,2,0,0,0,0,0,0,0, + 3,0,0,0,19,0,0,0,67,0,0,0,115,123,0,0, + 0,124,1,0,100,1,0,107,2,0,114,53,0,121,16,0, + 116,0,0,106,1,0,131,0,0,125,1,0,87,110,22,0, + 4,116,2,0,107,10,0,114,52,0,1,1,1,100,2,0, + 83,89,110,1,0,88,121,17,0,116,3,0,106,4,0,124, + 1,0,25,125,2,0,87,110,46,0,4,116,5,0,107,10, + 0,114,118,0,1,1,1,124,0,0,106,6,0,124,1,0, + 131,1,0,125,2,0,124,2,0,116,3,0,106,4,0,124, + 1,0,60,89,110,1,0,88,124,2,0,83,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,32,0,0,0,78,41,7,114,3,0,0,0,114, + 47,0,0,0,218,17,70,105,108,101,78,111,116,70,111,117, + 110,100,69,114,114,111,114,114,8,0,0,0,114,252,0,0, + 0,114,139,0,0,0,114,0,1,0,0,41,3,114,172,0, + 0,0,114,37,0,0,0,114,254,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,20,95,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,48,4,0,0,115,22,0,0,0,0,8,12,1,3,1, + 16,1,13,3,9,1,3,1,17,1,13,1,15,1,18,1, + 122,31,80,97,116,104,70,105,110,100,101,114,46,95,112,97, + 116,104,95,105,109,112,111,114,116,101,114,95,99,97,99,104, + 101,99,3,0,0,0,0,0,0,0,6,0,0,0,3,0, + 0,0,67,0,0,0,115,119,0,0,0,116,0,0,124,2, + 0,100,1,0,131,2,0,114,39,0,124,2,0,106,1,0, + 124,1,0,131,1,0,92,2,0,125,3,0,125,4,0,110, + 21,0,124,2,0,106,2,0,124,1,0,131,1,0,125,3, + 0,103,0,0,125,4,0,124,3,0,100,0,0,107,9,0, + 114,88,0,116,3,0,106,4,0,124,1,0,124,3,0,131, + 2,0,83,116,3,0,106,5,0,124,1,0,100,0,0,131, + 2,0,125,5,0,124,4,0,124,5,0,95,6,0,124,5, + 0,83,41,2,78,114,126,0,0,0,41,7,114,117,0,0, + 0,114,126,0,0,0,114,183,0,0,0,114,123,0,0,0, + 114,180,0,0,0,114,162,0,0,0,114,158,0,0,0,41, + 6,114,172,0,0,0,114,128,0,0,0,114,254,0,0,0, + 114,129,0,0,0,114,130,0,0,0,114,166,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,16, + 95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99, + 70,4,0,0,115,18,0,0,0,0,4,15,1,24,2,15, + 1,6,1,12,1,16,1,18,1,9,1,122,27,80,97,116, + 104,70,105,110,100,101,114,46,95,108,101,103,97,99,121,95, + 103,101,116,95,115,112,101,99,78,99,4,0,0,0,0,0, + 0,0,9,0,0,0,5,0,0,0,67,0,0,0,115,243, + 0,0,0,103,0,0,125,4,0,120,230,0,124,2,0,68, + 93,191,0,125,5,0,116,0,0,124,5,0,116,1,0,116, + 2,0,102,2,0,131,2,0,115,43,0,113,13,0,124,0, + 0,106,3,0,124,5,0,131,1,0,125,6,0,124,6,0, + 100,1,0,107,9,0,114,13,0,116,4,0,124,6,0,100, + 2,0,131,2,0,114,106,0,124,6,0,106,5,0,124,1, + 0,124,3,0,131,2,0,125,7,0,110,18,0,124,0,0, + 106,6,0,124,1,0,124,6,0,131,2,0,125,7,0,124, + 7,0,100,1,0,107,8,0,114,139,0,113,13,0,124,7, + 0,106,7,0,100,1,0,107,9,0,114,158,0,124,7,0, + 83,124,7,0,106,8,0,125,8,0,124,8,0,100,1,0, + 107,8,0,114,191,0,116,9,0,100,3,0,131,1,0,130, + 1,0,124,4,0,106,10,0,124,8,0,131,1,0,1,113, + 13,0,87,116,11,0,106,12,0,124,1,0,100,1,0,131, + 2,0,125,7,0,124,4,0,124,7,0,95,8,0,124,7, + 0,83,100,1,0,83,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,182,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,145,0,0,0,114,71,0,0,0, + 218,5,98,121,116,101,115,114,2,1,0,0,114,117,0,0, + 0,114,182,0,0,0,114,3,1,0,0,114,129,0,0,0, + 114,158,0,0,0,114,109,0,0,0,114,151,0,0,0,114, + 123,0,0,0,114,162,0,0,0,41,9,114,172,0,0,0, + 114,128,0,0,0,114,37,0,0,0,114,181,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,254,0,0,0,114,166,0,0,0, + 114,130,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,9,95,103,101,116,95,115,112,101,99,85, + 4,0,0,115,40,0,0,0,0,5,6,1,13,1,21,1, + 3,1,15,1,12,1,15,1,21,2,18,1,12,1,3,1, + 15,1,4,1,9,1,12,1,12,5,17,2,18,1,9,1, + 122,20,80,97,116,104,70,105,110,100,101,114,46,95,103,101, + 116,95,115,112,101,99,99,4,0,0,0,0,0,0,0,6, + 0,0,0,4,0,0,0,67,0,0,0,115,140,0,0,0, + 124,2,0,100,1,0,107,8,0,114,21,0,116,0,0,106, + 1,0,125,2,0,124,0,0,106,2,0,124,1,0,124,2, + 0,124,3,0,131,3,0,125,4,0,124,4,0,100,1,0, + 107,8,0,114,58,0,100,1,0,83,124,4,0,106,3,0, + 100,1,0,107,8,0,114,132,0,124,4,0,106,4,0,125, + 5,0,124,5,0,114,125,0,100,2,0,124,4,0,95,5, + 0,116,6,0,124,1,0,124,5,0,124,0,0,106,2,0, + 131,3,0,124,4,0,95,4,0,124,4,0,83,100,1,0, + 83,110,4,0,124,4,0,83,100,1,0,83,41,3,122,98, + 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,78,90,9,110,97,109,101,115,112,97,99,101,41,7, + 114,8,0,0,0,114,37,0,0,0,114,6,1,0,0,114, + 129,0,0,0,114,158,0,0,0,114,160,0,0,0,114,231, + 0,0,0,41,6,114,172,0,0,0,114,128,0,0,0,114, + 37,0,0,0,114,181,0,0,0,114,166,0,0,0,114,5, + 1,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,182,0,0,0,117,4,0,0,115,26,0,0,0, + 0,4,12,1,9,1,21,1,12,1,4,1,15,1,9,1, + 6,3,9,1,24,1,4,2,7,2,122,20,80,97,116,104, + 70,105,110,100,101,114,46,102,105,110,100,95,115,112,101,99, + 99,3,0,0,0,0,0,0,0,4,0,0,0,3,0,0, + 0,67,0,0,0,115,41,0,0,0,124,0,0,106,0,0, + 124,1,0,124,2,0,131,2,0,125,3,0,124,3,0,100, + 1,0,107,8,0,114,34,0,100,1,0,83,124,3,0,106, + 1,0,83,41,2,122,170,102,105,110,100,32,116,104,101,32, + 109,111,100,117,108,101,32,111,110,32,115,121,115,46,112,97, + 116,104,32,111,114,32,39,112,97,116,104,39,32,98,97,115, + 101,100,32,111,110,32,115,121,115,46,112,97,116,104,95,104, + 111,111,107,115,32,97,110,100,10,32,32,32,32,32,32,32, + 32,115,121,115,46,112,97,116,104,95,105,109,112,111,114,116, + 101,114,95,99,97,99,104,101,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,41,2,114,182,0,0,0,114,129,0,0,0,41,4, + 114,172,0,0,0,114,128,0,0,0,114,37,0,0,0,114, + 166,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,183,0,0,0,139,4,0,0,115,8,0,0, + 0,0,8,18,1,12,1,4,1,122,22,80,97,116,104,70, + 105,110,100,101,114,46,102,105,110,100,95,109,111,100,117,108, + 101,41,12,114,114,0,0,0,114,113,0,0,0,114,115,0, + 0,0,114,116,0,0,0,114,184,0,0,0,114,251,0,0, + 0,114,0,1,0,0,114,2,1,0,0,114,3,1,0,0, + 114,6,1,0,0,114,182,0,0,0,114,183,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,250,0,0,0,19,4,0,0,115,22,0,0, + 0,12,2,6,2,18,8,18,17,18,22,18,15,3,1,18, + 31,3,1,21,21,3,1,114,250,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,133,0,0,0,101,0,0,90,1,0,100,0,0,90, + 2,0,100,1,0,90,3,0,100,2,0,100,3,0,132,0, + 0,90,4,0,100,4,0,100,5,0,132,0,0,90,5,0, + 101,6,0,90,7,0,100,6,0,100,7,0,132,0,0,90, + 8,0,100,8,0,100,9,0,132,0,0,90,9,0,100,10, + 0,100,11,0,100,12,0,132,1,0,90,10,0,100,13,0, + 100,14,0,132,0,0,90,11,0,101,12,0,100,15,0,100, + 16,0,132,0,0,131,1,0,90,13,0,100,17,0,100,18, + 0,132,0,0,90,14,0,100,10,0,83,41,19,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, + 5,0,0,0,5,0,0,0,7,0,0,0,115,122,0,0, + 0,103,0,0,125,3,0,120,52,0,124,2,0,68,93,44, + 0,92,2,0,137,0,0,125,4,0,124,3,0,106,0,0, + 135,0,0,102,1,0,100,1,0,100,2,0,134,0,0,124, + 4,0,68,131,1,0,131,1,0,1,113,13,0,87,124,3, + 0,124,0,0,95,1,0,124,1,0,112,79,0,100,3,0, + 124,0,0,95,2,0,100,6,0,124,0,0,95,3,0,116, + 4,0,131,0,0,124,0,0,95,5,0,116,4,0,131,0, + 0,124,0,0,95,6,0,100,5,0,83,41,7,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,2,0,0,0,3,0,0,0,51,0,0,0,115,27, + 0,0,0,124,0,0,93,17,0,125,1,0,124,1,0,136, + 0,0,102,2,0,86,1,113,3,0,100,0,0,83,41,1, + 78,114,4,0,0,0,41,2,114,24,0,0,0,114,226,0, + 0,0,41,1,114,129,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,228,0,0,0,168,4,0,0,115,2,0,0, + 0,6,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,60,0,0,0, + 114,31,0,0,0,78,114,89,0,0,0,41,7,114,151,0, + 0,0,218,8,95,108,111,97,100,101,114,115,114,37,0,0, + 0,218,11,95,112,97,116,104,95,109,116,105,109,101,218,3, + 115,101,116,218,11,95,112,97,116,104,95,99,97,99,104,101, + 218,19,95,114,101,108,97,120,101,100,95,112,97,116,104,95, + 99,97,99,104,101,41,5,114,110,0,0,0,114,37,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,168,0,0,0,114, + 4,0,0,0,41,1,114,129,0,0,0,114,6,0,0,0, + 114,186,0,0,0,162,4,0,0,115,16,0,0,0,0,4, + 6,1,19,1,36,1,9,2,15,1,9,1,12,1,122,19, + 70,105,108,101,70,105,110,100,101,114,46,95,95,105,110,105, + 116,95,95,99,1,0,0,0,0,0,0,0,1,0,0,0, + 2,0,0,0,67,0,0,0,115,13,0,0,0,100,3,0, + 124,0,0,95,0,0,100,2,0,83,41,4,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,31,0, + 0,0,78,114,89,0,0,0,41,1,114,9,1,0,0,41, + 1,114,110,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,251,0,0,0,176,4,0,0,115,2, + 0,0,0,0,2,122,28,70,105,108,101,70,105,110,100,101, + 114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,99,2,0,0,0,0,0,0,0,3,0,0,0, + 2,0,0,0,67,0,0,0,115,59,0,0,0,124,0,0, + 106,0,0,124,1,0,131,1,0,125,2,0,124,2,0,100, + 1,0,107,8,0,114,37,0,100,1,0,103,0,0,102,2, + 0,83,124,2,0,106,1,0,124,2,0,106,2,0,112,55, + 0,103,0,0,102,2,0,83,41,2,122,197,84,114,121,32, + 116,111,32,102,105,110,100,32,97,32,108,111,97,100,101,114, + 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, + 101,100,32,109,111,100,117,108,101,44,32,111,114,32,116,104, + 101,32,110,97,109,101,115,112,97,99,101,10,32,32,32,32, + 32,32,32,32,112,97,99,107,97,103,101,32,112,111,114,116, + 105,111,110,115,46,32,82,101,116,117,114,110,115,32,40,108, + 111,97,100,101,114,44,32,108,105,115,116,45,111,102,45,112, + 111,114,116,105,111,110,115,41,46,10,10,32,32,32,32,32, + 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, + 115,32,100,101,112,114,101,99,97,116,101,100,46,32,32,85, + 115,101,32,102,105,110,100,95,115,112,101,99,40,41,32,105, + 110,115,116,101,97,100,46,10,10,32,32,32,32,32,32,32, + 32,78,41,3,114,182,0,0,0,114,129,0,0,0,114,158, + 0,0,0,41,3,114,110,0,0,0,114,128,0,0,0,114, + 166,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,126,0,0,0,182,4,0,0,115,8,0,0, + 0,0,7,15,1,12,1,10,1,122,22,70,105,108,101,70, + 105,110,100,101,114,46,102,105,110,100,95,108,111,97,100,101, + 114,99,6,0,0,0,0,0,0,0,7,0,0,0,7,0, + 0,0,67,0,0,0,115,40,0,0,0,124,1,0,124,2, + 0,124,3,0,131,2,0,125,6,0,116,0,0,124,2,0, + 124,3,0,100,1,0,124,6,0,100,2,0,124,4,0,131, + 2,2,83,41,3,78,114,129,0,0,0,114,158,0,0,0, + 41,1,114,169,0,0,0,41,7,114,110,0,0,0,114,167, + 0,0,0,114,128,0,0,0,114,37,0,0,0,90,4,115, + 109,115,108,114,181,0,0,0,114,129,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,6,1,0, + 0,194,4,0,0,115,6,0,0,0,0,1,15,1,18,1, + 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, + 14,0,0,0,15,0,0,0,67,0,0,0,115,234,1,0, + 0,100,1,0,125,3,0,124,1,0,106,0,0,100,2,0, + 131,1,0,100,3,0,25,125,4,0,121,34,0,116,1,0, + 124,0,0,106,2,0,112,49,0,116,3,0,106,4,0,131, + 0,0,131,1,0,106,5,0,125,5,0,87,110,24,0,4, + 116,6,0,107,10,0,114,85,0,1,1,1,100,10,0,125, + 5,0,89,110,1,0,88,124,5,0,124,0,0,106,7,0, + 107,3,0,114,120,0,124,0,0,106,8,0,131,0,0,1, + 124,5,0,124,0,0,95,7,0,116,9,0,131,0,0,114, + 153,0,124,0,0,106,10,0,125,6,0,124,4,0,106,11, + 0,131,0,0,125,7,0,110,15,0,124,0,0,106,12,0, + 125,6,0,124,4,0,125,7,0,124,7,0,124,6,0,107, + 6,0,114,45,1,116,13,0,124,0,0,106,2,0,124,4, + 0,131,2,0,125,8,0,120,100,0,124,0,0,106,14,0, + 68,93,77,0,92,2,0,125,9,0,125,10,0,100,5,0, + 124,9,0,23,125,11,0,116,13,0,124,8,0,124,11,0, + 131,2,0,125,12,0,116,15,0,124,12,0,131,1,0,114, + 208,0,124,0,0,106,16,0,124,10,0,124,1,0,124,12, + 0,124,8,0,103,1,0,124,2,0,131,5,0,83,113,208, + 0,87,116,17,0,124,8,0,131,1,0,125,3,0,120,123, + 0,124,0,0,106,14,0,68,93,112,0,92,2,0,125,9, + 0,125,10,0,116,13,0,124,0,0,106,2,0,124,4,0, + 124,9,0,23,131,2,0,125,12,0,116,18,0,100,6,0, + 106,19,0,124,12,0,131,1,0,100,7,0,100,3,0,131, + 1,1,1,124,7,0,124,9,0,23,124,6,0,107,6,0, + 114,55,1,116,15,0,124,12,0,131,1,0,114,55,1,124, + 0,0,106,16,0,124,10,0,124,1,0,124,12,0,100,8, + 0,124,2,0,131,5,0,83,113,55,1,87,124,3,0,114, + 230,1,116,18,0,100,9,0,106,19,0,124,8,0,131,1, + 0,131,1,0,1,116,20,0,106,21,0,124,1,0,100,8, + 0,131,2,0,125,13,0,124,8,0,103,1,0,124,13,0, + 95,22,0,124,13,0,83,100,8,0,83,41,11,122,102,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,32,32,82,101,116, + 117,114,110,115,32,116,104,101,10,32,32,32,32,32,32,32, + 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,70,114,60,0,0,0,114,58,0,0,0, + 114,31,0,0,0,114,186,0,0,0,122,9,116,114,121,105, + 110,103,32,123,125,114,100,0,0,0,78,122,25,112,111,115, + 115,105,98,108,101,32,110,97,109,101,115,112,97,99,101,32, + 102,111,114,32,123,125,114,89,0,0,0,41,23,114,34,0, + 0,0,114,41,0,0,0,114,37,0,0,0,114,3,0,0, + 0,114,47,0,0,0,114,220,0,0,0,114,42,0,0,0, + 114,9,1,0,0,218,11,95,102,105,108,108,95,99,97,99, + 104,101,114,7,0,0,0,114,12,1,0,0,114,90,0,0, + 0,114,11,1,0,0,114,30,0,0,0,114,8,1,0,0, + 114,46,0,0,0,114,6,1,0,0,114,48,0,0,0,114, + 107,0,0,0,114,49,0,0,0,114,123,0,0,0,114,162, + 0,0,0,114,158,0,0,0,41,14,114,110,0,0,0,114, + 128,0,0,0,114,181,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,135,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,226,0,0,0,114,167, + 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,166,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,182,0,0,0,199,4,0,0,115,68,0,0,0,0, + 3,6,1,19,1,3,1,34,1,13,1,11,1,15,1,10, + 1,9,2,9,1,9,1,15,2,9,1,6,2,12,1,18, + 1,22,1,10,1,15,1,12,1,32,4,12,2,22,1,22, + 1,25,1,16,1,12,1,29,1,6,1,19,1,18,1,12, + 1,4,1,122,20,70,105,108,101,70,105,110,100,101,114,46, + 102,105,110,100,95,115,112,101,99,99,1,0,0,0,0,0, + 0,0,9,0,0,0,13,0,0,0,67,0,0,0,115,11, + 1,0,0,124,0,0,106,0,0,125,1,0,121,31,0,116, + 1,0,106,2,0,124,1,0,112,33,0,116,1,0,106,3, + 0,131,0,0,131,1,0,125,2,0,87,110,33,0,4,116, + 4,0,116,5,0,116,6,0,102,3,0,107,10,0,114,75, + 0,1,1,1,103,0,0,125,2,0,89,110,1,0,88,116, + 7,0,106,8,0,106,9,0,100,1,0,131,1,0,115,112, + 0,116,10,0,124,2,0,131,1,0,124,0,0,95,11,0, + 110,111,0,116,10,0,131,0,0,125,3,0,120,90,0,124, + 2,0,68,93,82,0,125,4,0,124,4,0,106,12,0,100, + 2,0,131,1,0,92,3,0,125,5,0,125,6,0,125,7, + 0,124,6,0,114,191,0,100,3,0,106,13,0,124,5,0, + 124,7,0,106,14,0,131,0,0,131,2,0,125,8,0,110, + 6,0,124,5,0,125,8,0,124,3,0,106,15,0,124,8, + 0,131,1,0,1,113,128,0,87,124,3,0,124,0,0,95, + 11,0,116,7,0,106,8,0,106,9,0,116,16,0,131,1, + 0,114,7,1,100,4,0,100,5,0,132,0,0,124,2,0, + 68,131,1,0,124,0,0,95,17,0,100,6,0,83,41,7, + 122,68,70,105,108,108,32,116,104,101,32,99,97,99,104,101, + 32,111,102,32,112,111,116,101,110,116,105,97,108,32,109,111, + 100,117,108,101,115,32,97,110,100,32,112,97,99,107,97,103, + 101,115,32,102,111,114,32,116,104,105,115,32,100,105,114,101, + 99,116,111,114,121,46,114,0,0,0,0,114,60,0,0,0, + 122,5,123,125,46,123,125,99,1,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,83,0,0,0,115,28,0,0, + 0,104,0,0,124,0,0,93,18,0,125,1,0,124,1,0, + 106,0,0,131,0,0,146,2,0,113,6,0,83,114,4,0, + 0,0,41,1,114,90,0,0,0,41,2,114,24,0,0,0, + 90,2,102,110,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,250,9,60,115,101,116,99,111,109,112,62,17,5, + 0,0,115,2,0,0,0,9,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,37,0,0,0,114,3,0,0, + 0,90,7,108,105,115,116,100,105,114,114,47,0,0,0,114, + 1,1,0,0,218,15,80,101,114,109,105,115,115,105,111,110, + 69,114,114,111,114,218,18,78,111,116,65,68,105,114,101,99, + 116,111,114,121,69,114,114,111,114,114,8,0,0,0,114,9, + 0,0,0,114,10,0,0,0,114,10,1,0,0,114,11,1, + 0,0,114,85,0,0,0,114,49,0,0,0,114,90,0,0, + 0,218,3,97,100,100,114,11,0,0,0,114,12,1,0,0, + 41,9,114,110,0,0,0,114,37,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,246,0, + 0,0,114,108,0,0,0,114,238,0,0,0,114,226,0,0, + 0,90,8,110,101,119,95,110,97,109,101,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,14,1,0,0,244, + 4,0,0,115,34,0,0,0,0,2,9,1,3,1,31,1, + 22,3,11,3,18,1,18,7,9,1,13,1,24,1,6,1, + 27,2,6,1,17,1,9,1,18,1,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,3,0,0,0,3, + 0,0,0,7,0,0,0,115,25,0,0,0,135,0,0,135, + 1,0,102,2,0,100,1,0,100,2,0,134,0,0,125,2, + 0,124,2,0,83,41,3,97,20,1,0,0,65,32,99,108, + 97,115,115,32,109,101,116,104,111,100,32,119,104,105,99,104, + 32,114,101,116,117,114,110,115,32,97,32,99,108,111,115,117, + 114,101,32,116,111,32,117,115,101,32,111,110,32,115,121,115, + 46,112,97,116,104,95,104,111,111,107,10,32,32,32,32,32, + 32,32,32,119,104,105,99,104,32,119,105,108,108,32,114,101, + 116,117,114,110,32,97,110,32,105,110,115,116,97,110,99,101, + 32,117,115,105,110,103,32,116,104,101,32,115,112,101,99,105, + 102,105,101,100,32,108,111,97,100,101,114,115,32,97,110,100, + 32,116,104,101,32,112,97,116,104,10,32,32,32,32,32,32, + 32,32,99,97,108,108,101,100,32,111,110,32,116,104,101,32, + 99,108,111,115,117,114,101,46,10,10,32,32,32,32,32,32, + 32,32,73,102,32,116,104,101,32,112,97,116,104,32,99,97, + 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, + 117,114,101,32,105,115,32,110,111,116,32,97,32,100,105,114, + 101,99,116,111,114,121,44,32,73,109,112,111,114,116,69,114, + 114,111,114,32,105,115,10,32,32,32,32,32,32,32,32,114, + 97,105,115,101,100,46,10,10,32,32,32,32,32,32,32,32, + 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, + 0,19,0,0,0,115,43,0,0,0,116,0,0,124,0,0, + 131,1,0,115,30,0,116,1,0,100,1,0,100,2,0,124, + 0,0,131,1,1,130,1,0,136,0,0,124,0,0,136,1, + 0,140,1,0,83,41,3,122,45,80,97,116,104,32,104,111, + 111,107,32,102,111,114,32,105,109,112,111,114,116,108,105,98, + 46,109,97,99,104,105,110,101,114,121,46,70,105,108,101,70, + 105,110,100,101,114,46,122,30,111,110,108,121,32,100,105,114, + 101,99,116,111,114,105,101,115,32,97,114,101,32,115,117,112, + 112,111,114,116,101,100,114,37,0,0,0,41,2,114,48,0, + 0,0,114,109,0,0,0,41,1,114,37,0,0,0,41,2, + 114,172,0,0,0,114,13,1,0,0,114,4,0,0,0,114, + 6,0,0,0,218,24,112,97,116,104,95,104,111,111,107,95, + 102,111,114,95,70,105,108,101,70,105,110,100,101,114,29,5, + 0,0,115,6,0,0,0,0,2,12,1,18,1,122,54,70, + 105,108,101,70,105,110,100,101,114,46,112,97,116,104,95,104, + 111,111,107,46,60,108,111,99,97,108,115,62,46,112,97,116, + 104,95,104,111,111,107,95,102,111,114,95,70,105,108,101,70, + 105,110,100,101,114,114,4,0,0,0,41,3,114,172,0,0, + 0,114,13,1,0,0,114,19,1,0,0,114,4,0,0,0, + 41,2,114,172,0,0,0,114,13,1,0,0,114,6,0,0, + 0,218,9,112,97,116,104,95,104,111,111,107,19,5,0,0, + 115,4,0,0,0,0,10,21,6,122,20,70,105,108,101,70, + 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,99, + 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, 67,0,0,0,115,16,0,0,0,100,1,0,106,0,0,124, - 1,0,106,1,0,131,1,0,83,41,2,122,115,82,101,116, - 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, - 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, - 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, - 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, - 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, - 110,97,109,101,115,112,97,99,101,41,62,41,2,114,47,0, - 0,0,114,112,0,0,0,41,2,114,170,0,0,0,114,190, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,11,109,111,100,117,108,101,95,114,101,112,114,231, - 3,0,0,115,2,0,0,0,0,7,122,28,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, - 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, - 0,0,100,1,0,83,41,2,78,84,114,4,0,0,0,41, - 2,114,108,0,0,0,114,126,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,159,0,0,0,240, - 3,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, - 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,1,0,83,41,2,78,114,30,0,0,0,114,4,0, - 0,0,41,2,114,108,0,0,0,114,126,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,202,0, - 0,0,243,3,0,0,115,2,0,0,0,0,1,122,27,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, - 22,0,0,0,116,0,0,100,1,0,100,2,0,100,3,0, - 100,4,0,100,5,0,131,3,1,83,41,6,78,114,30,0, - 0,0,122,8,60,115,116,114,105,110,103,62,114,189,0,0, - 0,114,204,0,0,0,84,41,1,114,205,0,0,0,41,2, - 114,108,0,0,0,114,126,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,187,0,0,0,246,3, - 0,0,115,2,0,0,0,0,1,122,25,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,103,101,116,95, - 99,111,100,101,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 0,83,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,4,0,0,0,41,2,114,108,0,0,0,114,164,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,186,0,0,0,249,3,0,0,115,0,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,2,0,0,0,1,0,0,0, - 67,0,0,0,115,4,0,0,0,100,0,0,83,41,1,78, - 114,4,0,0,0,41,2,114,108,0,0,0,114,190,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,191,0,0,0,252,3,0,0,115,2,0,0,0,0,1, - 122,28,95,78,97,109,101,115,112,97,99,101,76,111,97,100, - 101,114,46,101,120,101,99,95,109,111,100,117,108,101,99,2, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, - 0,0,0,115,32,0,0,0,116,0,0,100,1,0,124,0, - 0,106,1,0,131,2,0,1,116,2,0,106,3,0,124,0, - 0,124,1,0,131,2,0,83,41,2,122,98,76,111,97,100, - 32,97,32,110,97,109,101,115,112,97,99,101,32,109,111,100, - 117,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, - 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, - 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, - 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, - 101,97,100,46,10,10,32,32,32,32,32,32,32,32,122,38, - 110,97,109,101,115,112,97,99,101,32,109,111,100,117,108,101, - 32,108,111,97,100,101,100,32,119,105,116,104,32,112,97,116, - 104,32,123,33,114,125,41,4,114,105,0,0,0,114,232,0, - 0,0,114,121,0,0,0,114,192,0,0,0,41,2,114,108, - 0,0,0,114,126,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,193,0,0,0,255,3,0,0, - 115,4,0,0,0,0,7,16,1,122,28,95,78,97,109,101, - 115,112,97,99,101,76,111,97,100,101,114,46,108,111,97,100, - 95,109,111,100,117,108,101,78,41,12,114,112,0,0,0,114, - 111,0,0,0,114,113,0,0,0,114,185,0,0,0,114,183, - 0,0,0,114,248,0,0,0,114,159,0,0,0,114,202,0, - 0,0,114,187,0,0,0,114,186,0,0,0,114,191,0,0, - 0,114,193,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,247,0,0,0,227, - 3,0,0,115,16,0,0,0,12,1,12,3,18,9,12,3, - 12,3,12,3,12,3,12,3,114,247,0,0,0,99,0,0, - 0,0,0,0,0,0,0,0,0,0,5,0,0,0,64,0, - 0,0,115,160,0,0,0,101,0,0,90,1,0,100,0,0, - 90,2,0,100,1,0,90,3,0,101,4,0,100,2,0,100, - 3,0,132,0,0,131,1,0,90,5,0,101,4,0,100,4, - 0,100,5,0,132,0,0,131,1,0,90,6,0,101,4,0, - 100,6,0,100,7,0,132,0,0,131,1,0,90,7,0,101, - 4,0,100,8,0,100,9,0,132,0,0,131,1,0,90,8, - 0,101,4,0,100,10,0,100,11,0,100,12,0,132,1,0, - 131,1,0,90,9,0,101,4,0,100,10,0,100,10,0,100, - 13,0,100,14,0,132,2,0,131,1,0,90,10,0,101,4, - 0,100,10,0,100,15,0,100,16,0,132,1,0,131,1,0, - 90,11,0,100,10,0,83,41,17,218,10,80,97,116,104,70, - 105,110,100,101,114,122,62,77,101,116,97,32,112,97,116,104, - 32,102,105,110,100,101,114,32,102,111,114,32,115,121,115,46, - 112,97,116,104,32,97,110,100,32,112,97,99,107,97,103,101, - 32,95,95,112,97,116,104,95,95,32,97,116,116,114,105,98, - 117,116,101,115,46,99,1,0,0,0,0,0,0,0,2,0, - 0,0,4,0,0,0,67,0,0,0,115,55,0,0,0,120, - 48,0,116,0,0,106,1,0,106,2,0,131,0,0,68,93, - 31,0,125,1,0,116,3,0,124,1,0,100,1,0,131,2, - 0,114,16,0,124,1,0,106,4,0,131,0,0,1,113,16, - 0,87,100,2,0,83,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,218,17,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,78,41,5,114,7,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,6,118,97,108,117,101,115,114, - 115,0,0,0,114,250,0,0,0,41,2,114,170,0,0,0, - 218,6,102,105,110,100,101,114,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,114,250,0,0,0,16,4,0,0, - 115,6,0,0,0,0,4,22,1,15,1,122,28,80,97,116, - 104,70,105,110,100,101,114,46,105,110,118,97,108,105,100,97, - 116,101,95,99,97,99,104,101,115,99,2,0,0,0,0,0, - 0,0,3,0,0,0,12,0,0,0,67,0,0,0,115,107, - 0,0,0,116,0,0,106,1,0,100,1,0,107,9,0,114, - 41,0,116,0,0,106,1,0,12,114,41,0,116,2,0,106, - 3,0,100,2,0,116,4,0,131,2,0,1,120,59,0,116, - 0,0,106,1,0,68,93,44,0,125,2,0,121,14,0,124, - 2,0,124,1,0,131,1,0,83,87,113,51,0,4,116,5, - 0,107,10,0,114,94,0,1,1,1,119,51,0,89,113,51, - 0,88,113,51,0,87,100,1,0,83,100,1,0,83,41,3, - 122,113,83,101,97,114,99,104,32,115,101,113,117,101,110,99, - 101,32,111,102,32,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,10,10,32,32,32,32,32,32,32,32,73,102,32, - 39,104,111,111,107,115,39,32,105,115,32,102,97,108,115,101, - 32,116,104,101,110,32,117,115,101,32,115,121,115,46,112,97, - 116,104,95,104,111,111,107,115,46,10,10,32,32,32,32,32, - 32,32,32,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, - 7,0,0,0,218,10,112,97,116,104,95,104,111,111,107,115, - 114,60,0,0,0,114,61,0,0,0,114,125,0,0,0,114, - 107,0,0,0,41,3,114,170,0,0,0,114,35,0,0,0, - 90,4,104,111,111,107,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,11,95,112,97,116,104,95,104,111,111, - 107,115,24,4,0,0,115,16,0,0,0,0,7,25,1,16, - 1,16,1,3,1,14,1,13,1,12,2,122,22,80,97,116, - 104,70,105,110,100,101,114,46,95,112,97,116,104,95,104,111, - 111,107,115,99,2,0,0,0,0,0,0,0,3,0,0,0, - 19,0,0,0,67,0,0,0,115,123,0,0,0,124,1,0, - 100,1,0,107,2,0,114,53,0,121,16,0,116,0,0,106, - 1,0,131,0,0,125,1,0,87,110,22,0,4,116,2,0, - 107,10,0,114,52,0,1,1,1,100,2,0,83,89,110,1, - 0,88,121,17,0,116,3,0,106,4,0,124,1,0,25,125, - 2,0,87,110,46,0,4,116,5,0,107,10,0,114,118,0, - 1,1,1,124,0,0,106,6,0,124,1,0,131,1,0,125, - 2,0,124,2,0,116,3,0,106,4,0,124,1,0,60,89, - 110,1,0,88,124,2,0,83,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,30, - 0,0,0,78,41,7,114,3,0,0,0,114,45,0,0,0, - 218,17,70,105,108,101,78,111,116,70,111,117,110,100,69,114, - 114,111,114,114,7,0,0,0,114,251,0,0,0,114,137,0, - 0,0,114,255,0,0,0,41,3,114,170,0,0,0,114,35, - 0,0,0,114,253,0,0,0,114,4,0,0,0,114,4,0, - 0,0,114,5,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,41,4,0, - 0,115,22,0,0,0,0,8,12,1,3,1,16,1,13,3, - 9,1,3,1,17,1,13,1,15,1,18,1,122,31,80,97, - 116,104,70,105,110,100,101,114,46,95,112,97,116,104,95,105, - 109,112,111,114,116,101,114,95,99,97,99,104,101,99,3,0, - 0,0,0,0,0,0,6,0,0,0,3,0,0,0,67,0, - 0,0,115,119,0,0,0,116,0,0,124,2,0,100,1,0, - 131,2,0,114,39,0,124,2,0,106,1,0,124,1,0,131, - 1,0,92,2,0,125,3,0,125,4,0,110,21,0,124,2, - 0,106,2,0,124,1,0,131,1,0,125,3,0,103,0,0, - 125,4,0,124,3,0,100,0,0,107,9,0,114,88,0,116, - 3,0,106,4,0,124,1,0,124,3,0,131,2,0,83,116, - 3,0,106,5,0,124,1,0,100,0,0,131,2,0,125,5, - 0,124,4,0,124,5,0,95,6,0,124,5,0,83,41,2, - 78,114,124,0,0,0,41,7,114,115,0,0,0,114,124,0, - 0,0,114,182,0,0,0,114,121,0,0,0,114,179,0,0, - 0,114,160,0,0,0,114,156,0,0,0,41,6,114,170,0, - 0,0,114,126,0,0,0,114,253,0,0,0,114,127,0,0, - 0,114,128,0,0,0,114,164,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,16,95,108,101,103, - 97,99,121,95,103,101,116,95,115,112,101,99,63,4,0,0, - 115,18,0,0,0,0,4,15,1,24,2,15,1,6,1,12, - 1,16,1,18,1,9,1,122,27,80,97,116,104,70,105,110, - 100,101,114,46,95,108,101,103,97,99,121,95,103,101,116,95, - 115,112,101,99,78,99,4,0,0,0,0,0,0,0,9,0, - 0,0,5,0,0,0,67,0,0,0,115,243,0,0,0,103, - 0,0,125,4,0,120,230,0,124,2,0,68,93,191,0,125, - 5,0,116,0,0,124,5,0,116,1,0,116,2,0,102,2, - 0,131,2,0,115,43,0,113,13,0,124,0,0,106,3,0, - 124,5,0,131,1,0,125,6,0,124,6,0,100,1,0,107, - 9,0,114,13,0,116,4,0,124,6,0,100,2,0,131,2, - 0,114,106,0,124,6,0,106,5,0,124,1,0,124,3,0, - 131,2,0,125,7,0,110,18,0,124,0,0,106,6,0,124, - 1,0,124,6,0,131,2,0,125,7,0,124,7,0,100,1, - 0,107,8,0,114,139,0,113,13,0,124,7,0,106,7,0, - 100,1,0,107,9,0,114,158,0,124,7,0,83,124,7,0, - 106,8,0,125,8,0,124,8,0,100,1,0,107,8,0,114, - 191,0,116,9,0,100,3,0,131,1,0,130,1,0,124,4, - 0,106,10,0,124,8,0,131,1,0,1,113,13,0,87,116, - 11,0,106,12,0,124,1,0,100,1,0,131,2,0,125,7, - 0,124,4,0,124,7,0,95,8,0,124,7,0,83,100,1, - 0,83,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,181,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,143,0,0,0,114,69,0,0,0,218,5,98,121, - 116,101,115,114,1,1,0,0,114,115,0,0,0,114,181,0, - 0,0,114,2,1,0,0,114,127,0,0,0,114,156,0,0, - 0,114,107,0,0,0,114,149,0,0,0,114,121,0,0,0, - 114,160,0,0,0,41,9,114,170,0,0,0,114,126,0,0, - 0,114,35,0,0,0,114,180,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,253,0,0,0,114,164,0,0,0,114,128,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,9,95,103,101,116,95,115,112,101,99,78,4,0,0,115, - 40,0,0,0,0,5,6,1,13,1,21,1,3,1,15,1, - 12,1,15,1,21,2,18,1,12,1,3,1,15,1,4,1, - 9,1,12,1,12,5,17,2,18,1,9,1,122,20,80,97, - 116,104,70,105,110,100,101,114,46,95,103,101,116,95,115,112, - 101,99,99,4,0,0,0,0,0,0,0,6,0,0,0,4, - 0,0,0,67,0,0,0,115,140,0,0,0,124,2,0,100, - 1,0,107,8,0,114,21,0,116,0,0,106,1,0,125,2, - 0,124,0,0,106,2,0,124,1,0,124,2,0,124,3,0, - 131,3,0,125,4,0,124,4,0,100,1,0,107,8,0,114, - 58,0,100,1,0,83,124,4,0,106,3,0,100,1,0,107, - 8,0,114,132,0,124,4,0,106,4,0,125,5,0,124,5, - 0,114,125,0,100,2,0,124,4,0,95,5,0,116,6,0, - 124,1,0,124,5,0,124,0,0,106,2,0,131,3,0,124, - 4,0,95,4,0,124,4,0,83,100,1,0,83,110,4,0, - 124,4,0,83,100,1,0,83,41,3,122,98,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,78,90, - 9,110,97,109,101,115,112,97,99,101,41,7,114,7,0,0, - 0,114,35,0,0,0,114,5,1,0,0,114,127,0,0,0, - 114,156,0,0,0,114,158,0,0,0,114,230,0,0,0,41, - 6,114,170,0,0,0,114,126,0,0,0,114,35,0,0,0, - 114,180,0,0,0,114,164,0,0,0,114,4,1,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,181, - 0,0,0,110,4,0,0,115,26,0,0,0,0,4,12,1, - 9,1,21,1,12,1,4,1,15,1,9,1,6,3,9,1, - 24,1,4,2,7,2,122,20,80,97,116,104,70,105,110,100, - 101,114,46,102,105,110,100,95,115,112,101,99,99,3,0,0, - 0,0,0,0,0,4,0,0,0,3,0,0,0,67,0,0, - 0,115,41,0,0,0,124,0,0,106,0,0,124,1,0,124, - 2,0,131,2,0,125,3,0,124,3,0,100,1,0,107,8, - 0,114,34,0,100,1,0,83,124,3,0,106,1,0,83,41, - 2,122,170,102,105,110,100,32,116,104,101,32,109,111,100,117, - 108,101,32,111,110,32,115,121,115,46,112,97,116,104,32,111, - 114,32,39,112,97,116,104,39,32,98,97,115,101,100,32,111, - 110,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, - 32,97,110,100,10,32,32,32,32,32,32,32,32,115,121,115, - 46,112,97,116,104,95,105,109,112,111,114,116,101,114,95,99, - 97,99,104,101,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,2, - 114,181,0,0,0,114,127,0,0,0,41,4,114,170,0,0, - 0,114,126,0,0,0,114,35,0,0,0,114,164,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 182,0,0,0,132,4,0,0,115,8,0,0,0,0,8,18, - 1,12,1,4,1,122,22,80,97,116,104,70,105,110,100,101, - 114,46,102,105,110,100,95,109,111,100,117,108,101,41,12,114, - 112,0,0,0,114,111,0,0,0,114,113,0,0,0,114,114, - 0,0,0,114,183,0,0,0,114,250,0,0,0,114,255,0, - 0,0,114,1,1,0,0,114,2,1,0,0,114,5,1,0, - 0,114,181,0,0,0,114,182,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 249,0,0,0,12,4,0,0,115,22,0,0,0,12,2,6, - 2,18,8,18,17,18,22,18,15,3,1,18,31,3,1,21, - 21,3,1,114,249,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,133,0, - 0,0,101,0,0,90,1,0,100,0,0,90,2,0,100,1, - 0,90,3,0,100,2,0,100,3,0,132,0,0,90,4,0, - 100,4,0,100,5,0,132,0,0,90,5,0,101,6,0,90, - 7,0,100,6,0,100,7,0,132,0,0,90,8,0,100,8, - 0,100,9,0,132,0,0,90,9,0,100,10,0,100,11,0, - 100,12,0,132,1,0,90,10,0,100,13,0,100,14,0,132, - 0,0,90,11,0,101,12,0,100,15,0,100,16,0,132,0, - 0,131,1,0,90,13,0,100,17,0,100,18,0,132,0,0, - 90,14,0,100,10,0,83,41,19,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,5,0,0,0, - 5,0,0,0,7,0,0,0,115,122,0,0,0,103,0,0, - 125,3,0,120,52,0,124,2,0,68,93,44,0,92,2,0, - 137,0,0,125,4,0,124,3,0,106,0,0,135,0,0,102, - 1,0,100,1,0,100,2,0,134,0,0,124,4,0,68,131, - 1,0,131,1,0,1,113,13,0,87,124,3,0,124,0,0, - 95,1,0,124,1,0,112,79,0,100,3,0,124,0,0,95, - 2,0,100,6,0,124,0,0,95,3,0,116,4,0,131,0, - 0,124,0,0,95,5,0,116,4,0,131,0,0,124,0,0, - 95,6,0,100,5,0,83,41,7,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,2,0, - 0,0,3,0,0,0,51,0,0,0,115,27,0,0,0,124, - 0,0,93,17,0,125,1,0,124,1,0,136,0,0,102,2, - 0,86,1,113,3,0,100,0,0,83,41,1,78,114,4,0, - 0,0,41,2,114,22,0,0,0,114,225,0,0,0,41,1, - 114,127,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 227,0,0,0,161,4,0,0,115,2,0,0,0,6,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,58,0,0,0,114,29,0,0, - 0,78,114,87,0,0,0,41,7,114,149,0,0,0,218,8, - 95,108,111,97,100,101,114,115,114,35,0,0,0,218,11,95, - 112,97,116,104,95,109,116,105,109,101,218,3,115,101,116,218, - 11,95,112,97,116,104,95,99,97,99,104,101,218,19,95,114, - 101,108,97,120,101,100,95,112,97,116,104,95,99,97,99,104, - 101,41,5,114,108,0,0,0,114,35,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,166,0,0,0,114,4,0,0,0, - 41,1,114,127,0,0,0,114,5,0,0,0,114,185,0,0, - 0,155,4,0,0,115,16,0,0,0,0,4,6,1,19,1, - 36,1,9,2,15,1,9,1,12,1,122,19,70,105,108,101, - 70,105,110,100,101,114,46,95,95,105,110,105,116,95,95,99, - 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, - 67,0,0,0,115,13,0,0,0,100,3,0,124,0,0,95, - 0,0,100,2,0,83,41,4,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,29,0,0,0,78,114, - 87,0,0,0,41,1,114,8,1,0,0,41,1,114,108,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,250,0,0,0,169,4,0,0,115,2,0,0,0,0, - 2,122,28,70,105,108,101,70,105,110,100,101,114,46,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,99, - 2,0,0,0,0,0,0,0,3,0,0,0,2,0,0,0, - 67,0,0,0,115,59,0,0,0,124,0,0,106,0,0,124, - 1,0,131,1,0,125,2,0,124,2,0,100,1,0,107,8, - 0,114,37,0,100,1,0,103,0,0,102,2,0,83,124,2, - 0,106,1,0,124,2,0,106,2,0,112,55,0,103,0,0, - 102,2,0,83,41,2,122,197,84,114,121,32,116,111,32,102, - 105,110,100,32,97,32,108,111,97,100,101,114,32,102,111,114, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,109, - 111,100,117,108,101,44,32,111,114,32,116,104,101,32,110,97, - 109,101,115,112,97,99,101,10,32,32,32,32,32,32,32,32, - 112,97,99,107,97,103,101,32,112,111,114,116,105,111,110,115, - 46,32,82,101,116,117,114,110,115,32,40,108,111,97,100,101, - 114,44,32,108,105,115,116,45,111,102,45,112,111,114,116,105, - 111,110,115,41,46,10,10,32,32,32,32,32,32,32,32,84, - 104,105,115,32,109,101,116,104,111,100,32,105,115,32,100,101, - 112,114,101,99,97,116,101,100,46,32,32,85,115,101,32,102, - 105,110,100,95,115,112,101,99,40,41,32,105,110,115,116,101, - 97,100,46,10,10,32,32,32,32,32,32,32,32,78,41,3, - 114,181,0,0,0,114,127,0,0,0,114,156,0,0,0,41, - 3,114,108,0,0,0,114,126,0,0,0,114,164,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 124,0,0,0,175,4,0,0,115,8,0,0,0,0,7,15, - 1,12,1,10,1,122,22,70,105,108,101,70,105,110,100,101, - 114,46,102,105,110,100,95,108,111,97,100,101,114,99,6,0, - 0,0,0,0,0,0,7,0,0,0,7,0,0,0,67,0, - 0,0,115,40,0,0,0,124,1,0,124,2,0,124,3,0, - 131,2,0,125,6,0,116,0,0,124,2,0,124,3,0,100, - 1,0,124,6,0,100,2,0,124,4,0,131,2,2,83,41, - 3,78,114,127,0,0,0,114,156,0,0,0,41,1,114,167, - 0,0,0,41,7,114,108,0,0,0,114,165,0,0,0,114, - 126,0,0,0,114,35,0,0,0,90,4,115,109,115,108,114, - 180,0,0,0,114,127,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,5,1,0,0,187,4,0, - 0,115,6,0,0,0,0,1,15,1,18,1,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,14,0,0,0, - 15,0,0,0,67,0,0,0,115,234,1,0,0,100,1,0, - 125,3,0,124,1,0,106,0,0,100,2,0,131,1,0,100, - 3,0,25,125,4,0,121,34,0,116,1,0,124,0,0,106, - 2,0,112,49,0,116,3,0,106,4,0,131,0,0,131,1, - 0,106,5,0,125,5,0,87,110,24,0,4,116,6,0,107, - 10,0,114,85,0,1,1,1,100,10,0,125,5,0,89,110, - 1,0,88,124,5,0,124,0,0,106,7,0,107,3,0,114, - 120,0,124,0,0,106,8,0,131,0,0,1,124,5,0,124, - 0,0,95,7,0,116,9,0,131,0,0,114,153,0,124,0, - 0,106,10,0,125,6,0,124,4,0,106,11,0,131,0,0, - 125,7,0,110,15,0,124,0,0,106,12,0,125,6,0,124, - 4,0,125,7,0,124,7,0,124,6,0,107,6,0,114,45, - 1,116,13,0,124,0,0,106,2,0,124,4,0,131,2,0, - 125,8,0,120,100,0,124,0,0,106,14,0,68,93,77,0, - 92,2,0,125,9,0,125,10,0,100,5,0,124,9,0,23, - 125,11,0,116,13,0,124,8,0,124,11,0,131,2,0,125, - 12,0,116,15,0,124,12,0,131,1,0,114,208,0,124,0, - 0,106,16,0,124,10,0,124,1,0,124,12,0,124,8,0, - 103,1,0,124,2,0,131,5,0,83,113,208,0,87,116,17, - 0,124,8,0,131,1,0,125,3,0,120,123,0,124,0,0, - 106,14,0,68,93,112,0,92,2,0,125,9,0,125,10,0, - 116,13,0,124,0,0,106,2,0,124,4,0,124,9,0,23, - 131,2,0,125,12,0,116,18,0,100,6,0,106,19,0,124, - 12,0,131,1,0,100,7,0,100,3,0,131,1,1,1,124, - 7,0,124,9,0,23,124,6,0,107,6,0,114,55,1,116, - 15,0,124,12,0,131,1,0,114,55,1,124,0,0,106,16, - 0,124,10,0,124,1,0,124,12,0,100,8,0,124,2,0, - 131,5,0,83,113,55,1,87,124,3,0,114,230,1,116,18, - 0,100,9,0,106,19,0,124,8,0,131,1,0,131,1,0, - 1,116,20,0,106,21,0,124,1,0,100,8,0,131,2,0, - 125,13,0,124,8,0,103,1,0,124,13,0,95,22,0,124, - 13,0,83,100,8,0,83,41,11,122,102,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,32,32,82,101,116,117,114,110,115, - 32,116,104,101,10,32,32,32,32,32,32,32,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,70,114,58,0,0,0,114,56,0,0,0,114,29,0,0, - 0,114,185,0,0,0,122,9,116,114,121,105,110,103,32,123, - 125,114,98,0,0,0,78,122,25,112,111,115,115,105,98,108, - 101,32,110,97,109,101,115,112,97,99,101,32,102,111,114,32, - 123,125,114,87,0,0,0,41,23,114,32,0,0,0,114,39, - 0,0,0,114,35,0,0,0,114,3,0,0,0,114,45,0, - 0,0,114,219,0,0,0,114,40,0,0,0,114,8,1,0, - 0,218,11,95,102,105,108,108,95,99,97,99,104,101,114,6, - 0,0,0,114,11,1,0,0,114,88,0,0,0,114,10,1, - 0,0,114,28,0,0,0,114,7,1,0,0,114,44,0,0, - 0,114,5,1,0,0,114,46,0,0,0,114,105,0,0,0, - 114,47,0,0,0,114,121,0,0,0,114,160,0,0,0,114, - 156,0,0,0,41,14,114,108,0,0,0,114,126,0,0,0, - 114,180,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,133,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,225,0,0,0,114,165,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,164,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,181,0, - 0,0,192,4,0,0,115,68,0,0,0,0,3,6,1,19, - 1,3,1,34,1,13,1,11,1,15,1,10,1,9,2,9, - 1,9,1,15,2,9,1,6,2,12,1,18,1,22,1,10, - 1,15,1,12,1,32,4,12,2,22,1,22,1,25,1,16, - 1,12,1,29,1,6,1,19,1,18,1,12,1,4,1,122, - 20,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, - 95,115,112,101,99,99,1,0,0,0,0,0,0,0,9,0, - 0,0,13,0,0,0,67,0,0,0,115,11,1,0,0,124, - 0,0,106,0,0,125,1,0,121,31,0,116,1,0,106,2, - 0,124,1,0,112,33,0,116,1,0,106,3,0,131,0,0, - 131,1,0,125,2,0,87,110,33,0,4,116,4,0,116,5, - 0,116,6,0,102,3,0,107,10,0,114,75,0,1,1,1, - 103,0,0,125,2,0,89,110,1,0,88,116,7,0,106,8, - 0,106,9,0,100,1,0,131,1,0,115,112,0,116,10,0, - 124,2,0,131,1,0,124,0,0,95,11,0,110,111,0,116, - 10,0,131,0,0,125,3,0,120,90,0,124,2,0,68,93, - 82,0,125,4,0,124,4,0,106,12,0,100,2,0,131,1, - 0,92,3,0,125,5,0,125,6,0,125,7,0,124,6,0, - 114,191,0,100,3,0,106,13,0,124,5,0,124,7,0,106, - 14,0,131,0,0,131,2,0,125,8,0,110,6,0,124,5, - 0,125,8,0,124,3,0,106,15,0,124,8,0,131,1,0, - 1,113,128,0,87,124,3,0,124,0,0,95,11,0,116,7, - 0,106,8,0,106,9,0,116,16,0,131,1,0,114,7,1, - 100,4,0,100,5,0,132,0,0,124,2,0,68,131,1,0, - 124,0,0,95,17,0,100,6,0,83,41,7,122,68,70,105, - 108,108,32,116,104,101,32,99,97,99,104,101,32,111,102,32, - 112,111,116,101,110,116,105,97,108,32,109,111,100,117,108,101, - 115,32,97,110,100,32,112,97,99,107,97,103,101,115,32,102, - 111,114,32,116,104,105,115,32,100,105,114,101,99,116,111,114, - 121,46,114,0,0,0,0,114,58,0,0,0,122,5,123,125, - 46,123,125,99,1,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,83,0,0,0,115,28,0,0,0,104,0,0, - 124,0,0,93,18,0,125,1,0,124,1,0,106,0,0,131, - 0,0,146,2,0,113,6,0,83,114,4,0,0,0,41,1, - 114,88,0,0,0,41,2,114,22,0,0,0,90,2,102,110, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,250, - 9,60,115,101,116,99,111,109,112,62,10,5,0,0,115,2, - 0,0,0,9,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,35,0,0,0,114,3,0,0,0,90,7,108, - 105,115,116,100,105,114,114,45,0,0,0,114,0,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,7,0,0,0,114,8,0,0,0,114, - 9,0,0,0,114,9,1,0,0,114,10,1,0,0,114,83, - 0,0,0,114,47,0,0,0,114,88,0,0,0,218,3,97, - 100,100,114,10,0,0,0,114,11,1,0,0,41,9,114,108, - 0,0,0,114,35,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,245,0,0,0,114,106, - 0,0,0,114,237,0,0,0,114,225,0,0,0,90,8,110, - 101,119,95,110,97,109,101,114,4,0,0,0,114,4,0,0, - 0,114,5,0,0,0,114,13,1,0,0,237,4,0,0,115, - 34,0,0,0,0,2,9,1,3,1,31,1,22,3,11,3, - 18,1,18,7,9,1,13,1,24,1,6,1,27,2,6,1, - 17,1,9,1,18,1,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,3,0,0,0,3,0,0,0,7, - 0,0,0,115,25,0,0,0,135,0,0,135,1,0,102,2, - 0,100,1,0,100,2,0,134,0,0,125,2,0,124,2,0, - 83,41,3,97,20,1,0,0,65,32,99,108,97,115,115,32, - 109,101,116,104,111,100,32,119,104,105,99,104,32,114,101,116, - 117,114,110,115,32,97,32,99,108,111,115,117,114,101,32,116, - 111,32,117,115,101,32,111,110,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,10,32,32,32,32,32,32,32,32,119, - 104,105,99,104,32,119,105,108,108,32,114,101,116,117,114,110, - 32,97,110,32,105,110,115,116,97,110,99,101,32,117,115,105, - 110,103,32,116,104,101,32,115,112,101,99,105,102,105,101,100, - 32,108,111,97,100,101,114,115,32,97,110,100,32,116,104,101, - 32,112,97,116,104,10,32,32,32,32,32,32,32,32,99,97, - 108,108,101,100,32,111,110,32,116,104,101,32,99,108,111,115, - 117,114,101,46,10,10,32,32,32,32,32,32,32,32,73,102, - 32,116,104,101,32,112,97,116,104,32,99,97,108,108,101,100, - 32,111,110,32,116,104,101,32,99,108,111,115,117,114,101,32, - 105,115,32,110,111,116,32,97,32,100,105,114,101,99,116,111, - 114,121,44,32,73,109,112,111,114,116,69,114,114,111,114,32, - 105,115,10,32,32,32,32,32,32,32,32,114,97,105,115,101, - 100,46,10,10,32,32,32,32,32,32,32,32,99,1,0,0, - 0,0,0,0,0,1,0,0,0,4,0,0,0,19,0,0, - 0,115,43,0,0,0,116,0,0,124,0,0,131,1,0,115, - 30,0,116,1,0,100,1,0,100,2,0,124,0,0,131,1, - 1,130,1,0,136,0,0,124,0,0,136,1,0,140,1,0, - 83,41,3,122,45,80,97,116,104,32,104,111,111,107,32,102, - 111,114,32,105,109,112,111,114,116,108,105,98,46,109,97,99, - 104,105,110,101,114,121,46,70,105,108,101,70,105,110,100,101, - 114,46,122,30,111,110,108,121,32,100,105,114,101,99,116,111, - 114,105,101,115,32,97,114,101,32,115,117,112,112,111,114,116, - 101,100,114,35,0,0,0,41,2,114,46,0,0,0,114,107, - 0,0,0,41,1,114,35,0,0,0,41,2,114,170,0,0, - 0,114,12,1,0,0,114,4,0,0,0,114,5,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,22,5,0,0,115,6, - 0,0,0,0,2,12,1,18,1,122,54,70,105,108,101,70, - 105,110,100,101,114,46,112,97,116,104,95,104,111,111,107,46, - 60,108,111,99,97,108,115,62,46,112,97,116,104,95,104,111, - 111,107,95,102,111,114,95,70,105,108,101,70,105,110,100,101, - 114,114,4,0,0,0,41,3,114,170,0,0,0,114,12,1, - 0,0,114,18,1,0,0,114,4,0,0,0,41,2,114,170, - 0,0,0,114,12,1,0,0,114,5,0,0,0,218,9,112, - 97,116,104,95,104,111,111,107,12,5,0,0,115,4,0,0, - 0,0,10,21,6,122,20,70,105,108,101,70,105,110,100,101, - 114,46,112,97,116,104,95,104,111,111,107,99,1,0,0,0, - 0,0,0,0,1,0,0,0,2,0,0,0,67,0,0,0, - 115,16,0,0,0,100,1,0,106,0,0,124,0,0,106,1, - 0,131,1,0,83,41,2,78,122,16,70,105,108,101,70,105, - 110,100,101,114,40,123,33,114,125,41,41,2,114,47,0,0, - 0,114,35,0,0,0,41,1,114,108,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,244,0,0, - 0,30,5,0,0,115,2,0,0,0,0,1,122,19,70,105, - 108,101,70,105,110,100,101,114,46,95,95,114,101,112,114,95, - 95,41,15,114,112,0,0,0,114,111,0,0,0,114,113,0, - 0,0,114,114,0,0,0,114,185,0,0,0,114,250,0,0, - 0,114,130,0,0,0,114,182,0,0,0,114,124,0,0,0, - 114,5,1,0,0,114,181,0,0,0,114,13,1,0,0,114, - 183,0,0,0,114,19,1,0,0,114,244,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,6,1,0,0,146,4,0,0,115,20,0,0,0, - 12,7,6,2,12,14,12,4,6,2,12,12,12,5,15,45, - 12,31,18,18,114,6,1,0,0,99,4,0,0,0,0,0, - 0,0,6,0,0,0,11,0,0,0,67,0,0,0,115,195, - 0,0,0,124,0,0,106,0,0,100,1,0,131,1,0,125, - 4,0,124,0,0,106,0,0,100,2,0,131,1,0,125,5, - 0,124,4,0,115,99,0,124,5,0,114,54,0,124,5,0, - 106,1,0,125,4,0,110,45,0,124,2,0,124,3,0,107, - 2,0,114,84,0,116,2,0,124,1,0,124,2,0,131,2, - 0,125,4,0,110,15,0,116,3,0,124,1,0,124,2,0, - 131,2,0,125,4,0,124,5,0,115,126,0,116,4,0,124, - 1,0,124,2,0,100,3,0,124,4,0,131,2,1,125,5, - 0,121,44,0,124,5,0,124,0,0,100,2,0,60,124,4, - 0,124,0,0,100,1,0,60,124,2,0,124,0,0,100,4, - 0,60,124,3,0,124,0,0,100,5,0,60,87,110,18,0, - 4,116,5,0,107,10,0,114,190,0,1,1,1,89,110,1, - 0,88,100,0,0,83,41,6,78,218,10,95,95,108,111,97, - 100,101,114,95,95,218,8,95,95,115,112,101,99,95,95,114, - 127,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,127,0,0,0,114,223,0,0,0,114,218,0,0,0, - 114,167,0,0,0,218,9,69,120,99,101,112,116,105,111,110, - 41,6,90,2,110,115,114,106,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,127,0,0,0,114,164,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,14,95,102,105,120,95, - 117,112,95,109,111,100,117,108,101,36,5,0,0,115,34,0, - 0,0,0,2,15,1,15,1,6,1,6,1,12,1,12,1, - 18,2,15,1,6,1,21,1,3,1,10,1,10,1,10,1, - 14,1,13,2,114,24,1,0,0,99,0,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,55, - 0,0,0,116,0,0,116,1,0,106,2,0,131,0,0,102, - 2,0,125,0,0,116,3,0,116,4,0,102,2,0,125,1, - 0,116,5,0,116,6,0,102,2,0,125,2,0,124,0,0, - 124,1,0,124,2,0,103,3,0,83,41,1,122,95,82,101, - 116,117,114,110,115,32,97,32,108,105,115,116,32,111,102,32, - 102,105,108,101,45,98,97,115,101,100,32,109,111,100,117,108, - 101,32,108,111,97,100,101,114,115,46,10,10,32,32,32,32, - 69,97,99,104,32,105,116,101,109,32,105,115,32,97,32,116, - 117,112,108,101,32,40,108,111,97,100,101,114,44,32,115,117, - 102,102,105,120,101,115,41,46,10,32,32,32,32,41,7,114, - 224,0,0,0,114,145,0,0,0,218,18,101,120,116,101,110, - 115,105,111,110,95,115,117,102,102,105,120,101,115,114,218,0, - 0,0,114,84,0,0,0,114,223,0,0,0,114,74,0,0, - 0,41,3,90,10,101,120,116,101,110,115,105,111,110,115,90, - 6,115,111,117,114,99,101,90,8,98,121,116,101,99,111,100, - 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,161,0,0,0,59,5,0,0,115,8,0,0,0,0,5, - 18,1,12,1,12,1,114,161,0,0,0,99,1,0,0,0, - 0,0,0,0,12,0,0,0,12,0,0,0,67,0,0,0, - 115,70,2,0,0,124,0,0,97,0,0,116,0,0,106,1, - 0,97,1,0,116,0,0,106,2,0,97,2,0,116,1,0, - 106,3,0,116,4,0,25,125,1,0,120,76,0,100,26,0, - 68,93,68,0,125,2,0,124,2,0,116,1,0,106,3,0, - 107,7,0,114,83,0,116,0,0,106,5,0,124,2,0,131, - 1,0,125,3,0,110,13,0,116,1,0,106,3,0,124,2, - 0,25,125,3,0,116,6,0,124,1,0,124,2,0,124,3, - 0,131,3,0,1,113,44,0,87,100,5,0,100,6,0,103, - 1,0,102,2,0,100,7,0,100,8,0,100,6,0,103,2, - 0,102,2,0,102,2,0,125,4,0,120,149,0,124,4,0, - 68,93,129,0,92,2,0,125,5,0,125,6,0,116,7,0, - 100,9,0,100,10,0,132,0,0,124,6,0,68,131,1,0, - 131,1,0,115,199,0,116,8,0,130,1,0,124,6,0,100, - 11,0,25,125,7,0,124,5,0,116,1,0,106,3,0,107, - 6,0,114,241,0,116,1,0,106,3,0,124,5,0,25,125, - 8,0,80,113,156,0,121,20,0,116,0,0,106,5,0,124, - 5,0,131,1,0,125,8,0,80,87,113,156,0,4,116,9, - 0,107,10,0,114,28,1,1,1,1,119,156,0,89,113,156, - 0,88,113,156,0,87,116,9,0,100,12,0,131,1,0,130, - 1,0,116,6,0,124,1,0,100,13,0,124,8,0,131,3, - 0,1,116,6,0,124,1,0,100,14,0,124,7,0,131,3, - 0,1,116,6,0,124,1,0,100,15,0,100,16,0,106,10, - 0,124,6,0,131,1,0,131,3,0,1,121,19,0,116,0, - 0,106,5,0,100,17,0,131,1,0,125,9,0,87,110,24, - 0,4,116,9,0,107,10,0,114,147,1,1,1,1,100,18, - 0,125,9,0,89,110,1,0,88,116,6,0,124,1,0,100, - 17,0,124,9,0,131,3,0,1,116,0,0,106,5,0,100, - 19,0,131,1,0,125,10,0,116,6,0,124,1,0,100,19, - 0,124,10,0,131,3,0,1,124,5,0,100,7,0,107,2, - 0,114,238,1,116,0,0,106,5,0,100,20,0,131,1,0, - 125,11,0,116,6,0,124,1,0,100,21,0,124,11,0,131, - 3,0,1,116,6,0,124,1,0,100,22,0,116,11,0,131, - 0,0,131,3,0,1,116,12,0,106,13,0,116,2,0,106, - 14,0,131,0,0,131,1,0,1,124,5,0,100,7,0,107, - 2,0,114,66,2,116,15,0,106,16,0,100,23,0,131,1, - 0,1,100,24,0,116,12,0,107,6,0,114,66,2,100,25, - 0,116,17,0,95,18,0,100,18,0,83,41,27,122,205,83, - 101,116,117,112,32,116,104,101,32,112,97,116,104,45,98,97, - 115,101,100,32,105,109,112,111,114,116,101,114,115,32,102,111, - 114,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, - 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,10, - 32,32,32,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105, - 110,103,32,116,104,101,109,32,105,110,116,111,32,116,104,101, - 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, - 101,46,10,10,32,32,32,32,79,116,104,101,114,32,99,111, - 109,112,111,110,101,110,116,115,32,97,114,101,32,101,120,116, - 114,97,99,116,101,100,32,102,114,111,109,32,116,104,101,32, - 99,111,114,101,32,98,111,111,116,115,116,114,97,112,32,109, - 111,100,117,108,101,46,10,10,32,32,32,32,114,49,0,0, - 0,114,60,0,0,0,218,8,98,117,105,108,116,105,110,115, - 114,142,0,0,0,90,5,112,111,115,105,120,250,1,47,218, - 2,110,116,250,1,92,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,115,0,0,0,115,33,0,0,0, - 124,0,0,93,23,0,125,1,0,116,0,0,124,1,0,131, - 1,0,100,0,0,107,2,0,86,1,113,3,0,100,1,0, - 83,41,2,114,29,0,0,0,78,41,1,114,31,0,0,0, - 41,2,114,22,0,0,0,114,77,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,227,0,0,0, - 95,5,0,0,115,2,0,0,0,6,0,122,25,95,115,101, - 116,117,112,46,60,108,111,99,97,108,115,62,46,60,103,101, - 110,101,120,112,114,62,114,59,0,0,0,122,30,105,109,112, - 111,114,116,108,105,98,32,114,101,113,117,105,114,101,115,32, - 112,111,115,105,120,32,111,114,32,110,116,114,3,0,0,0, - 114,25,0,0,0,114,21,0,0,0,114,30,0,0,0,90, - 7,95,116,104,114,101,97,100,78,90,8,95,119,101,97,107, - 114,101,102,90,6,119,105,110,114,101,103,114,169,0,0,0, - 114,6,0,0,0,122,4,46,112,121,119,122,6,95,100,46, - 112,121,100,84,41,4,122,3,95,105,111,122,9,95,119,97, - 114,110,105,110,103,115,122,8,98,117,105,108,116,105,110,115, - 122,7,109,97,114,115,104,97,108,41,19,114,121,0,0,0, - 114,7,0,0,0,114,145,0,0,0,114,239,0,0,0,114, - 112,0,0,0,90,18,95,98,117,105,108,116,105,110,95,102, - 114,111,109,95,110,97,109,101,114,116,0,0,0,218,3,97, - 108,108,218,14,65,115,115,101,114,116,105,111,110,69,114,114, - 111,114,114,107,0,0,0,114,26,0,0,0,114,11,0,0, - 0,114,229,0,0,0,114,149,0,0,0,114,25,1,0,0, - 114,84,0,0,0,114,163,0,0,0,114,168,0,0,0,114, - 173,0,0,0,41,12,218,17,95,98,111,111,116,115,116,114, - 97,112,95,109,111,100,117,108,101,90,11,115,101,108,102,95, - 109,111,100,117,108,101,90,12,98,117,105,108,116,105,110,95, - 110,97,109,101,90,14,98,117,105,108,116,105,110,95,109,111, - 100,117,108,101,90,10,111,115,95,100,101,116,97,105,108,115, - 90,10,98,117,105,108,116,105,110,95,111,115,114,21,0,0, - 0,114,25,0,0,0,90,9,111,115,95,109,111,100,117,108, - 101,90,13,116,104,114,101,97,100,95,109,111,100,117,108,101, - 90,14,119,101,97,107,114,101,102,95,109,111,100,117,108,101, - 90,13,119,105,110,114,101,103,95,109,111,100,117,108,101,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,6, - 95,115,101,116,117,112,70,5,0,0,115,82,0,0,0,0, - 8,6,1,9,1,9,3,13,1,13,1,15,1,18,2,13, - 1,20,3,33,1,19,2,31,1,10,1,15,1,13,1,4, - 2,3,1,15,1,5,1,13,1,12,2,12,1,16,1,16, - 1,25,3,3,1,19,1,13,2,11,1,16,3,15,1,16, - 3,12,1,15,1,16,3,19,1,19,1,12,1,13,1,12, - 1,114,33,1,0,0,99,1,0,0,0,0,0,0,0,2, - 0,0,0,3,0,0,0,67,0,0,0,115,116,0,0,0, - 116,0,0,124,0,0,131,1,0,1,116,1,0,131,0,0, - 125,1,0,116,2,0,106,3,0,106,4,0,116,5,0,106, - 6,0,124,1,0,140,0,0,103,1,0,131,1,0,1,116, - 7,0,106,8,0,100,1,0,107,2,0,114,78,0,116,2, - 0,106,9,0,106,10,0,116,11,0,131,1,0,1,116,2, - 0,106,9,0,106,10,0,116,12,0,131,1,0,1,116,5, - 0,124,0,0,95,5,0,116,13,0,124,0,0,95,13,0, - 100,2,0,83,41,3,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,114,28,1,0,0,78,41,14,114,33,1,0,0,114,161, - 0,0,0,114,7,0,0,0,114,254,0,0,0,114,149,0, - 0,0,114,6,1,0,0,114,19,1,0,0,114,3,0,0, - 0,114,112,0,0,0,218,9,109,101,116,97,95,112,97,116, - 104,114,163,0,0,0,114,168,0,0,0,114,249,0,0,0, - 114,218,0,0,0,41,2,114,32,1,0,0,90,17,115,117, - 112,112,111,114,116,101,100,95,108,111,97,100,101,114,115,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,8, - 95,105,110,115,116,97,108,108,138,5,0,0,115,16,0,0, - 0,0,2,10,1,9,1,28,1,15,1,16,1,16,4,9, - 1,114,35,1,0,0,41,3,122,3,119,105,110,114,1,0, - 0,0,114,2,0,0,0,41,57,114,114,0,0,0,114,10, - 0,0,0,114,11,0,0,0,114,17,0,0,0,114,19,0, - 0,0,114,28,0,0,0,114,38,0,0,0,114,39,0,0, - 0,114,43,0,0,0,114,44,0,0,0,114,46,0,0,0, - 114,55,0,0,0,218,4,116,121,112,101,218,8,95,95,99, - 111,100,101,95,95,114,144,0,0,0,114,15,0,0,0,114, - 135,0,0,0,114,14,0,0,0,114,18,0,0,0,90,17, - 95,82,65,87,95,77,65,71,73,67,95,78,85,77,66,69, - 82,114,73,0,0,0,114,72,0,0,0,114,84,0,0,0, - 114,74,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,79,0,0,0, - 114,85,0,0,0,114,91,0,0,0,114,95,0,0,0,114, - 97,0,0,0,114,105,0,0,0,114,123,0,0,0,114,130, - 0,0,0,114,141,0,0,0,114,147,0,0,0,114,150,0, - 0,0,114,155,0,0,0,218,6,111,98,106,101,99,116,114, - 162,0,0,0,114,167,0,0,0,114,168,0,0,0,114,184, - 0,0,0,114,194,0,0,0,114,210,0,0,0,114,218,0, - 0,0,114,223,0,0,0,114,229,0,0,0,114,224,0,0, - 0,114,230,0,0,0,114,247,0,0,0,114,249,0,0,0, - 114,6,1,0,0,114,24,1,0,0,114,161,0,0,0,114, - 33,1,0,0,114,35,1,0,0,114,4,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,8,60, - 109,111,100,117,108,101,62,8,0,0,0,115,100,0,0,0, - 6,17,6,3,12,12,12,5,12,5,12,6,12,12,12,10, - 12,9,12,5,12,7,15,22,15,114,22,1,18,2,6,1, - 6,2,9,2,9,2,10,2,21,44,12,33,12,19,12,12, - 12,12,18,8,12,28,12,17,21,55,21,12,18,10,12,14, - 9,3,12,1,15,65,19,64,19,28,22,110,19,41,25,43, - 25,16,6,3,25,53,19,57,19,41,19,134,19,146,15,23, - 12,11,12,68, + 0,0,106,1,0,131,1,0,83,41,2,78,122,16,70,105, + 108,101,70,105,110,100,101,114,40,123,33,114,125,41,41,2, + 114,49,0,0,0,114,37,0,0,0,41,1,114,110,0,0, + 0,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 114,245,0,0,0,37,5,0,0,115,2,0,0,0,0,1, + 122,19,70,105,108,101,70,105,110,100,101,114,46,95,95,114, + 101,112,114,95,95,41,15,114,114,0,0,0,114,113,0,0, + 0,114,115,0,0,0,114,116,0,0,0,114,186,0,0,0, + 114,251,0,0,0,114,132,0,0,0,114,183,0,0,0,114, + 126,0,0,0,114,6,1,0,0,114,182,0,0,0,114,14, + 1,0,0,114,184,0,0,0,114,20,1,0,0,114,245,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,7,1,0,0,153,4,0,0,115, + 20,0,0,0,12,7,6,2,12,14,12,4,6,2,12,12, + 12,5,15,45,12,31,18,18,114,7,1,0,0,99,4,0, + 0,0,0,0,0,0,6,0,0,0,11,0,0,0,67,0, + 0,0,115,195,0,0,0,124,0,0,106,0,0,100,1,0, + 131,1,0,125,4,0,124,0,0,106,0,0,100,2,0,131, + 1,0,125,5,0,124,4,0,115,99,0,124,5,0,114,54, + 0,124,5,0,106,1,0,125,4,0,110,45,0,124,2,0, + 124,3,0,107,2,0,114,84,0,116,2,0,124,1,0,124, + 2,0,131,2,0,125,4,0,110,15,0,116,3,0,124,1, + 0,124,2,0,131,2,0,125,4,0,124,5,0,115,126,0, + 116,4,0,124,1,0,124,2,0,100,3,0,124,4,0,131, + 2,1,125,5,0,121,44,0,124,5,0,124,0,0,100,2, + 0,60,124,4,0,124,0,0,100,1,0,60,124,2,0,124, + 0,0,100,4,0,60,124,3,0,124,0,0,100,5,0,60, + 87,110,18,0,4,116,5,0,107,10,0,114,190,0,1,1, + 1,89,110,1,0,88,100,0,0,83,41,6,78,218,10,95, + 95,108,111,97,100,101,114,95,95,218,8,95,95,115,112,101, + 99,95,95,114,129,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,129,0,0,0,114,224,0,0,0,114, + 219,0,0,0,114,169,0,0,0,218,9,69,120,99,101,112, + 116,105,111,110,41,6,90,2,110,115,114,108,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,129,0,0,0,114,166,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,14,95, + 102,105,120,95,117,112,95,109,111,100,117,108,101,43,5,0, + 0,115,34,0,0,0,0,2,15,1,15,1,6,1,6,1, + 12,1,12,1,18,2,15,1,6,1,21,1,3,1,10,1, + 10,1,10,1,14,1,13,2,114,25,1,0,0,99,0,0, + 0,0,0,0,0,0,3,0,0,0,3,0,0,0,67,0, + 0,0,115,55,0,0,0,116,0,0,116,1,0,106,2,0, + 131,0,0,102,2,0,125,0,0,116,3,0,116,4,0,102, + 2,0,125,1,0,116,5,0,116,6,0,102,2,0,125,2, + 0,124,0,0,124,1,0,124,2,0,103,3,0,83,41,1, + 122,95,82,101,116,117,114,110,115,32,97,32,108,105,115,116, + 32,111,102,32,102,105,108,101,45,98,97,115,101,100,32,109, + 111,100,117,108,101,32,108,111,97,100,101,114,115,46,10,10, + 32,32,32,32,69,97,99,104,32,105,116,101,109,32,105,115, + 32,97,32,116,117,112,108,101,32,40,108,111,97,100,101,114, + 44,32,115,117,102,102,105,120,101,115,41,46,10,32,32,32, + 32,41,7,114,225,0,0,0,114,147,0,0,0,218,18,101, + 120,116,101,110,115,105,111,110,95,115,117,102,102,105,120,101, + 115,114,219,0,0,0,114,86,0,0,0,114,224,0,0,0, + 114,76,0,0,0,41,3,90,10,101,120,116,101,110,115,105, + 111,110,115,90,6,115,111,117,114,99,101,90,8,98,121,116, + 101,99,111,100,101,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,163,0,0,0,66,5,0,0,115,8,0, + 0,0,0,5,18,1,12,1,12,1,114,163,0,0,0,99, + 1,0,0,0,0,0,0,0,12,0,0,0,12,0,0,0, + 67,0,0,0,115,70,2,0,0,124,0,0,97,0,0,116, + 0,0,106,1,0,97,1,0,116,0,0,106,2,0,97,2, + 0,116,1,0,106,3,0,116,4,0,25,125,1,0,120,76, + 0,100,26,0,68,93,68,0,125,2,0,124,2,0,116,1, + 0,106,3,0,107,7,0,114,83,0,116,0,0,106,5,0, + 124,2,0,131,1,0,125,3,0,110,13,0,116,1,0,106, + 3,0,124,2,0,25,125,3,0,116,6,0,124,1,0,124, + 2,0,124,3,0,131,3,0,1,113,44,0,87,100,5,0, + 100,6,0,103,1,0,102,2,0,100,7,0,100,8,0,100, + 6,0,103,2,0,102,2,0,102,2,0,125,4,0,120,149, + 0,124,4,0,68,93,129,0,92,2,0,125,5,0,125,6, + 0,116,7,0,100,9,0,100,10,0,132,0,0,124,6,0, + 68,131,1,0,131,1,0,115,199,0,116,8,0,130,1,0, + 124,6,0,100,11,0,25,125,7,0,124,5,0,116,1,0, + 106,3,0,107,6,0,114,241,0,116,1,0,106,3,0,124, + 5,0,25,125,8,0,80,113,156,0,121,20,0,116,0,0, + 106,5,0,124,5,0,131,1,0,125,8,0,80,87,113,156, + 0,4,116,9,0,107,10,0,114,28,1,1,1,1,119,156, + 0,89,113,156,0,88,113,156,0,87,116,9,0,100,12,0, + 131,1,0,130,1,0,116,6,0,124,1,0,100,13,0,124, + 8,0,131,3,0,1,116,6,0,124,1,0,100,14,0,124, + 7,0,131,3,0,1,116,6,0,124,1,0,100,15,0,100, + 16,0,106,10,0,124,6,0,131,1,0,131,3,0,1,121, + 19,0,116,0,0,106,5,0,100,17,0,131,1,0,125,9, + 0,87,110,24,0,4,116,9,0,107,10,0,114,147,1,1, + 1,1,100,18,0,125,9,0,89,110,1,0,88,116,6,0, + 124,1,0,100,17,0,124,9,0,131,3,0,1,116,0,0, + 106,5,0,100,19,0,131,1,0,125,10,0,116,6,0,124, + 1,0,100,19,0,124,10,0,131,3,0,1,124,5,0,100, + 7,0,107,2,0,114,238,1,116,0,0,106,5,0,100,20, + 0,131,1,0,125,11,0,116,6,0,124,1,0,100,21,0, + 124,11,0,131,3,0,1,116,6,0,124,1,0,100,22,0, + 116,11,0,131,0,0,131,3,0,1,116,12,0,106,13,0, + 116,2,0,106,14,0,131,0,0,131,1,0,1,124,5,0, + 100,7,0,107,2,0,114,66,2,116,15,0,106,16,0,100, + 23,0,131,1,0,1,100,24,0,116,12,0,107,6,0,114, + 66,2,100,25,0,116,17,0,95,18,0,100,18,0,83,41, + 27,122,205,83,101,116,117,112,32,116,104,101,32,112,97,116, + 104,45,98,97,115,101,100,32,105,109,112,111,114,116,101,114, + 115,32,102,111,114,32,105,109,112,111,114,116,108,105,98,32, + 98,121,32,105,109,112,111,114,116,105,110,103,32,110,101,101, + 100,101,100,10,32,32,32,32,98,117,105,108,116,45,105,110, + 32,109,111,100,117,108,101,115,32,97,110,100,32,105,110,106, + 101,99,116,105,110,103,32,116,104,101,109,32,105,110,116,111, + 32,116,104,101,32,103,108,111,98,97,108,32,110,97,109,101, + 115,112,97,99,101,46,10,10,32,32,32,32,79,116,104,101, + 114,32,99,111,109,112,111,110,101,110,116,115,32,97,114,101, + 32,101,120,116,114,97,99,116,101,100,32,102,114,111,109,32, + 116,104,101,32,99,111,114,101,32,98,111,111,116,115,116,114, + 97,112,32,109,111,100,117,108,101,46,10,10,32,32,32,32, + 114,51,0,0,0,114,62,0,0,0,218,8,98,117,105,108, + 116,105,110,115,114,144,0,0,0,90,5,112,111,115,105,120, + 250,1,47,218,2,110,116,250,1,92,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,115,0,0,0,115, + 33,0,0,0,124,0,0,93,23,0,125,1,0,116,0,0, + 124,1,0,131,1,0,100,0,0,107,2,0,86,1,113,3, + 0,100,1,0,83,41,2,114,31,0,0,0,78,41,1,114, + 33,0,0,0,41,2,114,24,0,0,0,114,79,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,114, + 228,0,0,0,102,5,0,0,115,2,0,0,0,6,0,122, + 25,95,115,101,116,117,112,46,60,108,111,99,97,108,115,62, + 46,60,103,101,110,101,120,112,114,62,114,61,0,0,0,122, + 30,105,109,112,111,114,116,108,105,98,32,114,101,113,117,105, + 114,101,115,32,112,111,115,105,120,32,111,114,32,110,116,114, + 3,0,0,0,114,27,0,0,0,114,23,0,0,0,114,32, + 0,0,0,90,7,95,116,104,114,101,97,100,78,90,8,95, + 119,101,97,107,114,101,102,90,6,119,105,110,114,101,103,114, + 171,0,0,0,114,7,0,0,0,122,4,46,112,121,119,122, + 6,95,100,46,112,121,100,84,41,4,122,3,95,105,111,122, + 9,95,119,97,114,110,105,110,103,115,122,8,98,117,105,108, + 116,105,110,115,122,7,109,97,114,115,104,97,108,41,19,114, + 123,0,0,0,114,8,0,0,0,114,147,0,0,0,114,240, + 0,0,0,114,114,0,0,0,90,18,95,98,117,105,108,116, + 105,110,95,102,114,111,109,95,110,97,109,101,114,118,0,0, + 0,218,3,97,108,108,218,14,65,115,115,101,114,116,105,111, + 110,69,114,114,111,114,114,109,0,0,0,114,28,0,0,0, + 114,13,0,0,0,114,230,0,0,0,114,151,0,0,0,114, + 26,1,0,0,114,86,0,0,0,114,165,0,0,0,114,170, + 0,0,0,114,174,0,0,0,41,12,218,17,95,98,111,111, + 116,115,116,114,97,112,95,109,111,100,117,108,101,90,11,115, + 101,108,102,95,109,111,100,117,108,101,90,12,98,117,105,108, + 116,105,110,95,110,97,109,101,90,14,98,117,105,108,116,105, + 110,95,109,111,100,117,108,101,90,10,111,115,95,100,101,116, + 97,105,108,115,90,10,98,117,105,108,116,105,110,95,111,115, + 114,23,0,0,0,114,27,0,0,0,90,9,111,115,95,109, + 111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111, + 100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111, + 100,117,108,101,90,13,119,105,110,114,101,103,95,109,111,100, + 117,108,101,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,6,95,115,101,116,117,112,77,5,0,0,115,82, + 0,0,0,0,8,6,1,9,1,9,3,13,1,13,1,15, + 1,18,2,13,1,20,3,33,1,19,2,31,1,10,1,15, + 1,13,1,4,2,3,1,15,1,5,1,13,1,12,2,12, + 1,16,1,16,1,25,3,3,1,19,1,13,2,11,1,16, + 3,15,1,16,3,12,1,15,1,16,3,19,1,19,1,12, + 1,13,1,12,1,114,34,1,0,0,99,1,0,0,0,0, + 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, + 116,0,0,0,116,0,0,124,0,0,131,1,0,1,116,1, + 0,131,0,0,125,1,0,116,2,0,106,3,0,106,4,0, + 116,5,0,106,6,0,124,1,0,140,0,0,103,1,0,131, + 1,0,1,116,7,0,106,8,0,100,1,0,107,2,0,114, + 78,0,116,2,0,106,9,0,106,10,0,116,11,0,131,1, + 0,1,116,2,0,106,9,0,106,10,0,116,12,0,131,1, + 0,1,116,5,0,124,0,0,95,5,0,116,13,0,124,0, + 0,95,13,0,100,2,0,83,41,3,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,114,29,1,0,0,78,41,14,114,34,1, + 0,0,114,163,0,0,0,114,8,0,0,0,114,255,0,0, + 0,114,151,0,0,0,114,7,1,0,0,114,20,1,0,0, + 114,3,0,0,0,114,114,0,0,0,218,9,109,101,116,97, + 95,112,97,116,104,114,165,0,0,0,114,170,0,0,0,114, + 250,0,0,0,114,219,0,0,0,41,2,114,33,1,0,0, + 90,17,115,117,112,112,111,114,116,101,100,95,108,111,97,100, + 101,114,115,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,8,95,105,110,115,116,97,108,108,145,5,0,0, + 115,16,0,0,0,0,2,10,1,9,1,28,1,15,1,16, + 1,16,4,9,1,114,36,1,0,0,41,1,122,3,119,105, + 110,41,2,114,1,0,0,0,114,2,0,0,0,41,59,114, + 116,0,0,0,114,12,0,0,0,90,37,95,67,65,83,69, + 95,73,78,83,69,78,83,73,84,73,86,69,95,80,76,65, + 84,70,79,82,77,83,95,66,89,84,69,83,95,75,69,89, + 114,11,0,0,0,114,13,0,0,0,114,19,0,0,0,114, + 21,0,0,0,114,30,0,0,0,114,40,0,0,0,114,41, + 0,0,0,114,45,0,0,0,114,46,0,0,0,114,48,0, + 0,0,114,57,0,0,0,218,4,116,121,112,101,218,8,95, + 95,99,111,100,101,95,95,114,146,0,0,0,114,17,0,0, + 0,114,137,0,0,0,114,16,0,0,0,114,20,0,0,0, + 90,17,95,82,65,87,95,77,65,71,73,67,95,78,85,77, + 66,69,82,114,75,0,0,0,114,74,0,0,0,114,86,0, + 0,0,114,76,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,81,0, + 0,0,114,87,0,0,0,114,93,0,0,0,114,97,0,0, + 0,114,99,0,0,0,114,107,0,0,0,114,125,0,0,0, + 114,132,0,0,0,114,143,0,0,0,114,149,0,0,0,114, + 152,0,0,0,114,157,0,0,0,218,6,111,98,106,101,99, + 116,114,164,0,0,0,114,169,0,0,0,114,170,0,0,0, + 114,185,0,0,0,114,195,0,0,0,114,211,0,0,0,114, + 219,0,0,0,114,224,0,0,0,114,230,0,0,0,114,225, + 0,0,0,114,231,0,0,0,114,248,0,0,0,114,250,0, + 0,0,114,7,1,0,0,114,25,1,0,0,114,163,0,0, + 0,114,34,1,0,0,114,36,1,0,0,114,4,0,0,0, + 114,4,0,0,0,114,4,0,0,0,114,6,0,0,0,218, + 8,60,109,111,100,117,108,101,62,8,0,0,0,115,106,0, + 0,0,6,16,6,1,6,1,3,1,7,3,12,17,12,5, + 12,5,12,6,12,12,12,10,12,9,12,5,12,7,15,22, + 15,114,22,1,18,2,6,1,6,2,9,2,9,2,10,2, + 21,44,12,33,12,19,12,12,12,12,18,8,12,28,12,17, + 21,55,21,12,18,10,12,14,9,3,12,1,15,65,19,64, + 19,28,22,110,19,41,25,43,25,16,6,3,25,53,19,57, + 19,41,19,134,19,146,15,23,12,11,12,68, }; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 13:46:20 2016 From: python-checkins at python.org (brett.cannon) Date: Sat, 16 Jul 2016 17:46:20 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Check_in_update_for_import?= =?utf-8?q?lib=5Fexternal=2Eh?= Message-ID: <20160716174619.31370.36586.C9FE476F@psf.io> https://hg.python.org/cpython/rev/49e1e8413ecc changeset: 102371:49e1e8413ecc user: Brett Cannon date: Sat Jul 16 10:46:10 2016 -0700 summary: Check in update for importlib_external.h files: Python/importlib_external.h | 4822 +++++++++++----------- 1 files changed, 2415 insertions(+), 2407 deletions(-) diff --git a/Python/importlib_external.h b/Python/importlib_external.h --- a/Python/importlib_external.h +++ b/Python/importlib_external.h @@ -1,2427 +1,2435 @@ /* Auto-generated by Programs/_freeze_importlib.c */ const unsigned char _Py_M__importlib_external[] = { 99,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0, - 0,64,0,0,0,115,236,1,0,0,100,0,90,0,100,91, - 90,1,100,4,100,5,132,0,90,2,100,6,100,7,132,0, - 90,3,100,8,100,9,132,0,90,4,100,10,100,11,132,0, - 90,5,100,12,100,13,132,0,90,6,100,14,100,15,132,0, - 90,7,100,16,100,17,132,0,90,8,100,18,100,19,132,0, - 90,9,100,20,100,21,132,0,90,10,100,92,100,23,100,24, - 132,1,90,11,101,12,101,11,106,13,131,1,90,14,100,25, - 106,15,100,26,100,27,131,2,100,28,23,0,90,16,101,17, - 106,18,101,16,100,27,131,2,90,19,100,29,90,20,100,30, - 90,21,100,31,103,1,90,22,100,32,103,1,90,23,101,23, - 4,0,90,24,90,25,100,93,100,33,100,34,156,1,100,35, - 100,36,132,3,90,26,100,37,100,38,132,0,90,27,100,39, - 100,40,132,0,90,28,100,41,100,42,132,0,90,29,100,43, - 100,44,132,0,90,30,100,45,100,46,132,0,90,31,100,47, - 100,48,132,0,90,32,100,94,100,49,100,50,132,1,90,33, - 100,95,100,51,100,52,132,1,90,34,100,96,100,54,100,55, - 132,1,90,35,100,56,100,57,132,0,90,36,101,37,131,0, - 90,38,100,97,100,33,101,38,100,58,156,2,100,59,100,60, - 132,3,90,39,71,0,100,61,100,62,132,0,100,62,131,2, - 90,40,71,0,100,63,100,64,132,0,100,64,131,2,90,41, - 71,0,100,65,100,66,132,0,100,66,101,41,131,3,90,42, - 71,0,100,67,100,68,132,0,100,68,131,2,90,43,71,0, - 100,69,100,70,132,0,100,70,101,43,101,42,131,4,90,44, - 71,0,100,71,100,72,132,0,100,72,101,43,101,41,131,4, - 90,45,103,0,90,46,71,0,100,73,100,74,132,0,100,74, - 101,43,101,41,131,4,90,47,71,0,100,75,100,76,132,0, - 100,76,131,2,90,48,71,0,100,77,100,78,132,0,100,78, - 131,2,90,49,71,0,100,79,100,80,132,0,100,80,131,2, - 90,50,71,0,100,81,100,82,132,0,100,82,131,2,90,51, - 100,98,100,83,100,84,132,1,90,52,100,85,100,86,132,0, - 90,53,100,87,100,88,132,0,90,54,100,89,100,90,132,0, - 90,55,100,33,83,0,41,99,97,94,1,0,0,67,111,114, - 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 32,111,102,32,112,97,116,104,45,98,97,115,101,100,32,105, - 109,112,111,114,116,46,10,10,84,104,105,115,32,109,111,100, - 117,108,101,32,105,115,32,78,79,84,32,109,101,97,110,116, - 32,116,111,32,98,101,32,100,105,114,101,99,116,108,121,32, - 105,109,112,111,114,116,101,100,33,32,73,116,32,104,97,115, - 32,98,101,101,110,32,100,101,115,105,103,110,101,100,32,115, - 117,99,104,10,116,104,97,116,32,105,116,32,99,97,110,32, - 98,101,32,98,111,111,116,115,116,114,97,112,112,101,100,32, - 105,110,116,111,32,80,121,116,104,111,110,32,97,115,32,116, - 104,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,105,109,112,111,114,116,46,32,65,115,10, - 115,117,99,104,32,105,116,32,114,101,113,117,105,114,101,115, - 32,116,104,101,32,105,110,106,101,99,116,105,111,110,32,111, - 102,32,115,112,101,99,105,102,105,99,32,109,111,100,117,108, - 101,115,32,97,110,100,32,97,116,116,114,105,98,117,116,101, - 115,32,105,110,32,111,114,100,101,114,32,116,111,10,119,111, - 114,107,46,32,79,110,101,32,115,104,111,117,108,100,32,117, - 115,101,32,105,109,112,111,114,116,108,105,98,32,97,115,32, - 116,104,101,32,112,117,98,108,105,99,45,102,97,99,105,110, - 103,32,118,101,114,115,105,111,110,32,111,102,32,116,104,105, - 115,32,109,111,100,117,108,101,46,10,10,218,3,119,105,110, - 218,6,99,121,103,119,105,110,218,6,100,97,114,119,105,110, - 99,0,0,0,0,0,0,0,0,1,0,0,0,2,0,0, - 0,67,0,0,0,115,34,0,0,0,116,0,106,1,106,2, - 116,3,131,1,114,22,100,1,100,2,132,0,125,0,110,8, - 100,3,100,2,132,0,125,0,124,0,83,0,41,4,78,99, - 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0, - 83,0,0,0,115,20,0,0,0,100,1,116,0,106,1,107, - 6,112,18,100,2,116,0,106,1,107,6,83,0,41,3,122, - 53,84,114,117,101,32,105,102,32,102,105,108,101,110,97,109, - 101,115,32,109,117,115,116,32,98,101,32,99,104,101,99,107, - 101,100,32,99,97,115,101,45,105,110,115,101,110,115,105,116, - 105,118,101,108,121,46,115,12,0,0,0,80,89,84,72,79, - 78,67,65,83,69,79,75,90,12,80,89,84,72,79,78,67, - 65,83,69,79,75,41,2,218,3,95,111,115,90,7,101,110, - 118,105,114,111,110,169,0,114,4,0,0,0,114,4,0,0, - 0,250,38,60,102,114,111,122,101,110,32,105,109,112,111,114, - 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,95, - 101,120,116,101,114,110,97,108,62,218,11,95,114,101,108,97, - 120,95,99,97,115,101,30,0,0,0,115,4,0,0,0,0, - 2,10,1,122,37,95,109,97,107,101,95,114,101,108,97,120, - 95,99,97,115,101,46,60,108,111,99,97,108,115,62,46,95, - 114,101,108,97,120,95,99,97,115,101,99,0,0,0,0,0, - 0,0,0,0,0,0,0,1,0,0,0,83,0,0,0,115, - 4,0,0,0,100,1,83,0,41,2,122,53,84,114,117,101, + 0,64,0,0,0,115,248,1,0,0,100,0,90,0,100,91, + 90,1,100,92,90,2,101,2,101,1,23,0,90,3,100,4, + 100,5,132,0,90,4,100,6,100,7,132,0,90,5,100,8, + 100,9,132,0,90,6,100,10,100,11,132,0,90,7,100,12, + 100,13,132,0,90,8,100,14,100,15,132,0,90,9,100,16, + 100,17,132,0,90,10,100,18,100,19,132,0,90,11,100,20, + 100,21,132,0,90,12,100,93,100,23,100,24,132,1,90,13, + 101,14,101,13,106,15,131,1,90,16,100,25,106,17,100,26, + 100,27,131,2,100,28,23,0,90,18,101,19,106,20,101,18, + 100,27,131,2,90,21,100,29,90,22,100,30,90,23,100,31, + 103,1,90,24,100,32,103,1,90,25,101,25,4,0,90,26, + 90,27,100,94,100,33,100,34,156,1,100,35,100,36,132,3, + 90,28,100,37,100,38,132,0,90,29,100,39,100,40,132,0, + 90,30,100,41,100,42,132,0,90,31,100,43,100,44,132,0, + 90,32,100,45,100,46,132,0,90,33,100,47,100,48,132,0, + 90,34,100,95,100,49,100,50,132,1,90,35,100,96,100,51, + 100,52,132,1,90,36,100,97,100,54,100,55,132,1,90,37, + 100,56,100,57,132,0,90,38,101,39,131,0,90,40,100,98, + 100,33,101,40,100,58,156,2,100,59,100,60,132,3,90,41, + 71,0,100,61,100,62,132,0,100,62,131,2,90,42,71,0, + 100,63,100,64,132,0,100,64,131,2,90,43,71,0,100,65, + 100,66,132,0,100,66,101,43,131,3,90,44,71,0,100,67, + 100,68,132,0,100,68,131,2,90,45,71,0,100,69,100,70, + 132,0,100,70,101,45,101,44,131,4,90,46,71,0,100,71, + 100,72,132,0,100,72,101,45,101,43,131,4,90,47,103,0, + 90,48,71,0,100,73,100,74,132,0,100,74,101,45,101,43, + 131,4,90,49,71,0,100,75,100,76,132,0,100,76,131,2, + 90,50,71,0,100,77,100,78,132,0,100,78,131,2,90,51, + 71,0,100,79,100,80,132,0,100,80,131,2,90,52,71,0, + 100,81,100,82,132,0,100,82,131,2,90,53,100,99,100,83, + 100,84,132,1,90,54,100,85,100,86,132,0,90,55,100,87, + 100,88,132,0,90,56,100,89,100,90,132,0,90,57,100,33, + 83,0,41,100,97,94,1,0,0,67,111,114,101,32,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,32,111,102,32, + 112,97,116,104,45,98,97,115,101,100,32,105,109,112,111,114, + 116,46,10,10,84,104,105,115,32,109,111,100,117,108,101,32, + 105,115,32,78,79,84,32,109,101,97,110,116,32,116,111,32, + 98,101,32,100,105,114,101,99,116,108,121,32,105,109,112,111, + 114,116,101,100,33,32,73,116,32,104,97,115,32,98,101,101, + 110,32,100,101,115,105,103,110,101,100,32,115,117,99,104,10, + 116,104,97,116,32,105,116,32,99,97,110,32,98,101,32,98, + 111,111,116,115,116,114,97,112,112,101,100,32,105,110,116,111, + 32,80,121,116,104,111,110,32,97,115,32,116,104,101,32,105, + 109,112,108,101,109,101,110,116,97,116,105,111,110,32,111,102, + 32,105,109,112,111,114,116,46,32,65,115,10,115,117,99,104, + 32,105,116,32,114,101,113,117,105,114,101,115,32,116,104,101, + 32,105,110,106,101,99,116,105,111,110,32,111,102,32,115,112, + 101,99,105,102,105,99,32,109,111,100,117,108,101,115,32,97, + 110,100,32,97,116,116,114,105,98,117,116,101,115,32,105,110, + 32,111,114,100,101,114,32,116,111,10,119,111,114,107,46,32, + 79,110,101,32,115,104,111,117,108,100,32,117,115,101,32,105, + 109,112,111,114,116,108,105,98,32,97,115,32,116,104,101,32, + 112,117,98,108,105,99,45,102,97,99,105,110,103,32,118,101, + 114,115,105,111,110,32,111,102,32,116,104,105,115,32,109,111, + 100,117,108,101,46,10,10,218,3,119,105,110,218,6,99,121, + 103,119,105,110,218,6,100,97,114,119,105,110,99,0,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,3,0,0, + 0,115,60,0,0,0,116,0,106,1,106,2,116,3,131,1, + 114,48,116,0,106,1,106,2,116,4,131,1,114,30,100,1, + 137,0,110,4,100,2,137,0,135,0,102,1,100,3,100,4, + 132,8,125,0,110,8,100,5,100,4,132,0,125,0,124,0, + 83,0,41,6,78,90,12,80,89,84,72,79,78,67,65,83, + 69,79,75,115,12,0,0,0,80,89,84,72,79,78,67,65, + 83,69,79,75,99,0,0,0,0,0,0,0,0,0,0,0, + 0,2,0,0,0,19,0,0,0,115,10,0,0,0,136,0, + 116,0,106,1,107,6,83,0,41,1,122,53,84,114,117,101, 32,105,102,32,102,105,108,101,110,97,109,101,115,32,109,117, 115,116,32,98,101,32,99,104,101,99,107,101,100,32,99,97, 115,101,45,105,110,115,101,110,115,105,116,105,118,101,108,121, - 46,70,114,4,0,0,0,114,4,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,6,0,0,0, - 35,0,0,0,115,2,0,0,0,0,2,41,4,218,3,115, - 121,115,218,8,112,108,97,116,102,111,114,109,218,10,115,116, - 97,114,116,115,119,105,116,104,218,27,95,67,65,83,69,95, - 73,78,83,69,78,83,73,84,73,86,69,95,80,76,65,84, - 70,79,82,77,83,41,1,114,6,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,16,95,109,97, - 107,101,95,114,101,108,97,120,95,99,97,115,101,28,0,0, - 0,115,8,0,0,0,0,1,12,1,10,5,8,3,114,11, - 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,20,0,0,0,116,0,124, - 0,131,1,100,1,64,0,106,1,100,2,100,3,131,2,83, - 0,41,4,122,42,67,111,110,118,101,114,116,32,97,32,51, - 50,45,98,105,116,32,105,110,116,101,103,101,114,32,116,111, - 32,108,105,116,116,108,101,45,101,110,100,105,97,110,46,108, - 3,0,0,0,255,127,255,127,3,0,233,4,0,0,0,218, - 6,108,105,116,116,108,101,41,2,218,3,105,110,116,218,8, - 116,111,95,98,121,116,101,115,41,1,218,1,120,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,119, - 95,108,111,110,103,41,0,0,0,115,2,0,0,0,0,2, - 114,17,0,0,0,99,1,0,0,0,0,0,0,0,1,0, - 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,116, - 0,106,1,124,0,100,1,131,2,83,0,41,2,122,47,67, - 111,110,118,101,114,116,32,52,32,98,121,116,101,115,32,105, - 110,32,108,105,116,116,108,101,45,101,110,100,105,97,110,32, - 116,111,32,97,110,32,105,110,116,101,103,101,114,46,114,13, - 0,0,0,41,2,114,14,0,0,0,218,10,102,114,111,109, - 95,98,121,116,101,115,41,1,90,9,105,110,116,95,98,121, - 116,101,115,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,7,95,114,95,108,111,110,103,46,0,0,0,115, - 2,0,0,0,0,2,114,19,0,0,0,99,0,0,0,0, - 0,0,0,0,1,0,0,0,3,0,0,0,71,0,0,0, - 115,20,0,0,0,116,0,106,1,100,1,100,2,132,0,124, - 0,68,0,131,1,131,1,83,0,41,3,122,31,82,101,112, + 46,41,2,218,3,95,111,115,90,7,101,110,118,105,114,111, + 110,169,0,41,1,218,3,107,101,121,114,4,0,0,0,250, + 38,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, + 105,98,46,95,98,111,111,116,115,116,114,97,112,95,101,120, + 116,101,114,110,97,108,62,218,11,95,114,101,108,97,120,95, + 99,97,115,101,37,0,0,0,115,2,0,0,0,0,2,122, + 37,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, + 101,46,60,108,111,99,97,108,115,62,46,95,114,101,108,97, + 120,95,99,97,115,101,99,0,0,0,0,0,0,0,0,0, + 0,0,0,1,0,0,0,83,0,0,0,115,4,0,0,0, + 100,1,83,0,41,2,122,53,84,114,117,101,32,105,102,32, + 102,105,108,101,110,97,109,101,115,32,109,117,115,116,32,98, + 101,32,99,104,101,99,107,101,100,32,99,97,115,101,45,105, + 110,115,101,110,115,105,116,105,118,101,108,121,46,70,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,7,0,0,0,41,0,0,0, + 115,2,0,0,0,0,2,41,5,218,3,115,121,115,218,8, + 112,108,97,116,102,111,114,109,218,10,115,116,97,114,116,115, + 119,105,116,104,218,27,95,67,65,83,69,95,73,78,83,69, + 78,83,73,84,73,86,69,95,80,76,65,84,70,79,82,77, + 83,218,35,95,67,65,83,69,95,73,78,83,69,78,83,73, + 84,73,86,69,95,80,76,65,84,70,79,82,77,83,95,83, + 84,82,95,75,69,89,41,1,114,7,0,0,0,114,4,0, + 0,0,41,1,114,5,0,0,0,114,6,0,0,0,218,16, + 95,109,97,107,101,95,114,101,108,97,120,95,99,97,115,101, + 30,0,0,0,115,14,0,0,0,0,1,12,1,12,1,6, + 2,4,2,14,4,8,3,114,13,0,0,0,99,1,0,0, + 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, + 0,115,20,0,0,0,116,0,124,0,131,1,100,1,64,0, + 106,1,100,2,100,3,131,2,83,0,41,4,122,42,67,111, + 110,118,101,114,116,32,97,32,51,50,45,98,105,116,32,105, + 110,116,101,103,101,114,32,116,111,32,108,105,116,116,108,101, + 45,101,110,100,105,97,110,46,108,3,0,0,0,255,127,255, + 127,3,0,233,4,0,0,0,218,6,108,105,116,116,108,101, + 41,2,218,3,105,110,116,218,8,116,111,95,98,121,116,101, + 115,41,1,218,1,120,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,7,95,119,95,108,111,110,103,47,0, + 0,0,115,2,0,0,0,0,2,114,19,0,0,0,99,1, + 0,0,0,0,0,0,0,1,0,0,0,3,0,0,0,67, + 0,0,0,115,12,0,0,0,116,0,106,1,124,0,100,1, + 131,2,83,0,41,2,122,47,67,111,110,118,101,114,116,32, + 52,32,98,121,116,101,115,32,105,110,32,108,105,116,116,108, + 101,45,101,110,100,105,97,110,32,116,111,32,97,110,32,105, + 110,116,101,103,101,114,46,114,15,0,0,0,41,2,114,16, + 0,0,0,218,10,102,114,111,109,95,98,121,116,101,115,41, + 1,90,9,105,110,116,95,98,121,116,101,115,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,7,95,114,95, + 108,111,110,103,52,0,0,0,115,2,0,0,0,0,2,114, + 21,0,0,0,99,0,0,0,0,0,0,0,0,1,0,0, + 0,3,0,0,0,71,0,0,0,115,20,0,0,0,116,0, + 106,1,100,1,100,2,132,0,124,0,68,0,131,1,131,1, + 83,0,41,3,122,31,82,101,112,108,97,99,101,109,101,110, + 116,32,102,111,114,32,111,115,46,112,97,116,104,46,106,111, + 105,110,40,41,46,99,1,0,0,0,0,0,0,0,2,0, + 0,0,4,0,0,0,83,0,0,0,115,26,0,0,0,103, + 0,124,0,93,18,125,1,124,1,114,4,124,1,106,0,116, + 1,131,1,145,2,113,4,83,0,114,4,0,0,0,41,2, + 218,6,114,115,116,114,105,112,218,15,112,97,116,104,95,115, + 101,112,97,114,97,116,111,114,115,41,2,218,2,46,48,218, + 4,112,97,114,116,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,250,10,60,108,105,115,116,99,111,109,112,62, + 59,0,0,0,115,2,0,0,0,6,1,122,30,95,112,97, + 116,104,95,106,111,105,110,46,60,108,111,99,97,108,115,62, + 46,60,108,105,115,116,99,111,109,112,62,41,2,218,8,112, + 97,116,104,95,115,101,112,218,4,106,111,105,110,41,1,218, + 10,112,97,116,104,95,112,97,114,116,115,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,10,95,112,97,116, + 104,95,106,111,105,110,57,0,0,0,115,4,0,0,0,0, + 2,10,1,114,30,0,0,0,99,1,0,0,0,0,0,0, + 0,5,0,0,0,5,0,0,0,67,0,0,0,115,98,0, + 0,0,116,0,116,1,131,1,100,1,107,2,114,36,124,0, + 106,2,116,3,131,1,92,3,125,1,125,2,125,3,124,1, + 124,3,102,2,83,0,120,52,116,4,124,0,131,1,68,0, + 93,40,125,4,124,4,116,1,107,6,114,46,124,0,106,5, + 124,4,100,2,100,1,144,1,131,1,92,2,125,1,125,3, + 124,1,124,3,102,2,83,0,113,46,87,0,100,3,124,0, + 102,2,83,0,41,4,122,32,82,101,112,108,97,99,101,109, + 101,110,116,32,102,111,114,32,111,115,46,112,97,116,104,46, + 115,112,108,105,116,40,41,46,233,1,0,0,0,90,8,109, + 97,120,115,112,108,105,116,218,0,41,6,218,3,108,101,110, + 114,23,0,0,0,218,10,114,112,97,114,116,105,116,105,111, + 110,114,27,0,0,0,218,8,114,101,118,101,114,115,101,100, + 218,6,114,115,112,108,105,116,41,5,218,4,112,97,116,104, + 90,5,102,114,111,110,116,218,1,95,218,4,116,97,105,108, + 114,18,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,11,95,112,97,116,104,95,115,112,108,105, + 116,63,0,0,0,115,16,0,0,0,0,2,12,1,16,1, + 8,1,14,1,8,1,20,1,12,1,114,40,0,0,0,99, + 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, + 67,0,0,0,115,10,0,0,0,116,0,106,1,124,0,131, + 1,83,0,41,1,122,126,83,116,97,116,32,116,104,101,32, + 112,97,116,104,46,10,10,32,32,32,32,77,97,100,101,32, + 97,32,115,101,112,97,114,97,116,101,32,102,117,110,99,116, + 105,111,110,32,116,111,32,109,97,107,101,32,105,116,32,101, + 97,115,105,101,114,32,116,111,32,111,118,101,114,114,105,100, + 101,32,105,110,32,101,120,112,101,114,105,109,101,110,116,115, + 10,32,32,32,32,40,101,46,103,46,32,99,97,99,104,101, + 32,115,116,97,116,32,114,101,115,117,108,116,115,41,46,10, + 10,32,32,32,32,41,2,114,3,0,0,0,90,4,115,116, + 97,116,41,1,114,37,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,10,95,112,97,116,104,95, + 115,116,97,116,75,0,0,0,115,2,0,0,0,0,7,114, + 41,0,0,0,99,2,0,0,0,0,0,0,0,3,0,0, + 0,11,0,0,0,67,0,0,0,115,48,0,0,0,121,12, + 116,0,124,0,131,1,125,2,87,0,110,20,4,0,116,1, + 107,10,114,32,1,0,1,0,1,0,100,1,83,0,88,0, + 124,2,106,2,100,2,64,0,124,1,107,2,83,0,41,3, + 122,49,84,101,115,116,32,119,104,101,116,104,101,114,32,116, + 104,101,32,112,97,116,104,32,105,115,32,116,104,101,32,115, + 112,101,99,105,102,105,101,100,32,109,111,100,101,32,116,121, + 112,101,46,70,105,0,240,0,0,41,3,114,41,0,0,0, + 218,7,79,83,69,114,114,111,114,218,7,115,116,95,109,111, + 100,101,41,3,114,37,0,0,0,218,4,109,111,100,101,90, + 9,115,116,97,116,95,105,110,102,111,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,18,95,112,97,116,104, + 95,105,115,95,109,111,100,101,95,116,121,112,101,85,0,0, + 0,115,10,0,0,0,0,2,2,1,12,1,14,1,6,1, + 114,45,0,0,0,99,1,0,0,0,0,0,0,0,1,0, + 0,0,3,0,0,0,67,0,0,0,115,10,0,0,0,116, + 0,124,0,100,1,131,2,83,0,41,2,122,31,82,101,112, 108,97,99,101,109,101,110,116,32,102,111,114,32,111,115,46, - 112,97,116,104,46,106,111,105,110,40,41,46,99,1,0,0, - 0,0,0,0,0,2,0,0,0,4,0,0,0,83,0,0, - 0,115,26,0,0,0,103,0,124,0,93,18,125,1,124,1, - 114,4,124,1,106,0,116,1,131,1,145,2,113,4,83,0, - 114,4,0,0,0,41,2,218,6,114,115,116,114,105,112,218, - 15,112,97,116,104,95,115,101,112,97,114,97,116,111,114,115, - 41,2,218,2,46,48,218,4,112,97,114,116,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,250,10,60,108,105, - 115,116,99,111,109,112,62,53,0,0,0,115,2,0,0,0, - 6,1,122,30,95,112,97,116,104,95,106,111,105,110,46,60, - 108,111,99,97,108,115,62,46,60,108,105,115,116,99,111,109, - 112,62,41,2,218,8,112,97,116,104,95,115,101,112,218,4, - 106,111,105,110,41,1,218,10,112,97,116,104,95,112,97,114, - 116,115,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,10,95,112,97,116,104,95,106,111,105,110,51,0,0, - 0,115,4,0,0,0,0,2,10,1,114,28,0,0,0,99, - 1,0,0,0,0,0,0,0,5,0,0,0,5,0,0,0, - 67,0,0,0,115,98,0,0,0,116,0,116,1,131,1,100, - 1,107,2,114,36,124,0,106,2,116,3,131,1,92,3,125, - 1,125,2,125,3,124,1,124,3,102,2,83,0,120,52,116, - 4,124,0,131,1,68,0,93,40,125,4,124,4,116,1,107, - 6,114,46,124,0,106,5,124,4,100,2,100,1,144,1,131, - 1,92,2,125,1,125,3,124,1,124,3,102,2,83,0,113, - 46,87,0,100,3,124,0,102,2,83,0,41,4,122,32,82, - 101,112,108,97,99,101,109,101,110,116,32,102,111,114,32,111, - 115,46,112,97,116,104,46,115,112,108,105,116,40,41,46,233, - 1,0,0,0,90,8,109,97,120,115,112,108,105,116,218,0, - 41,6,218,3,108,101,110,114,21,0,0,0,218,10,114,112, - 97,114,116,105,116,105,111,110,114,25,0,0,0,218,8,114, - 101,118,101,114,115,101,100,218,6,114,115,112,108,105,116,41, - 5,218,4,112,97,116,104,90,5,102,114,111,110,116,218,1, - 95,218,4,116,97,105,108,114,16,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,11,95,112,97, - 116,104,95,115,112,108,105,116,57,0,0,0,115,16,0,0, - 0,0,2,12,1,16,1,8,1,14,1,8,1,20,1,12, - 1,114,38,0,0,0,99,1,0,0,0,0,0,0,0,1, - 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, - 116,0,106,1,124,0,131,1,83,0,41,1,122,126,83,116, - 97,116,32,116,104,101,32,112,97,116,104,46,10,10,32,32, - 32,32,77,97,100,101,32,97,32,115,101,112,97,114,97,116, - 101,32,102,117,110,99,116,105,111,110,32,116,111,32,109,97, - 107,101,32,105,116,32,101,97,115,105,101,114,32,116,111,32, - 111,118,101,114,114,105,100,101,32,105,110,32,101,120,112,101, - 114,105,109,101,110,116,115,10,32,32,32,32,40,101,46,103, - 46,32,99,97,99,104,101,32,115,116,97,116,32,114,101,115, - 117,108,116,115,41,46,10,10,32,32,32,32,41,2,114,3, - 0,0,0,90,4,115,116,97,116,41,1,114,35,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 10,95,112,97,116,104,95,115,116,97,116,69,0,0,0,115, - 2,0,0,0,0,7,114,39,0,0,0,99,2,0,0,0, - 0,0,0,0,3,0,0,0,11,0,0,0,67,0,0,0, - 115,48,0,0,0,121,12,116,0,124,0,131,1,125,2,87, - 0,110,20,4,0,116,1,107,10,114,32,1,0,1,0,1, - 0,100,1,83,0,88,0,124,2,106,2,100,2,64,0,124, - 1,107,2,83,0,41,3,122,49,84,101,115,116,32,119,104, - 101,116,104,101,114,32,116,104,101,32,112,97,116,104,32,105, - 115,32,116,104,101,32,115,112,101,99,105,102,105,101,100,32, - 109,111,100,101,32,116,121,112,101,46,70,105,0,240,0,0, - 41,3,114,39,0,0,0,218,7,79,83,69,114,114,111,114, - 218,7,115,116,95,109,111,100,101,41,3,114,35,0,0,0, - 218,4,109,111,100,101,90,9,115,116,97,116,95,105,110,102, - 111,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,18,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,79,0,0,0,115,10,0,0,0,0,2,2, - 1,12,1,14,1,6,1,114,43,0,0,0,99,1,0,0, + 112,97,116,104,46,105,115,102,105,108,101,46,105,0,128,0, + 0,41,1,114,45,0,0,0,41,1,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,12, + 95,112,97,116,104,95,105,115,102,105,108,101,94,0,0,0, + 115,2,0,0,0,0,2,114,46,0,0,0,99,1,0,0, 0,0,0,0,0,1,0,0,0,3,0,0,0,67,0,0, - 0,115,10,0,0,0,116,0,124,0,100,1,131,2,83,0, - 41,2,122,31,82,101,112,108,97,99,101,109,101,110,116,32, - 102,111,114,32,111,115,46,112,97,116,104,46,105,115,102,105, - 108,101,46,105,0,128,0,0,41,1,114,43,0,0,0,41, - 1,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,12,95,112,97,116,104,95,105,115,102, - 105,108,101,88,0,0,0,115,2,0,0,0,0,2,114,44, - 0,0,0,99,1,0,0,0,0,0,0,0,1,0,0,0, - 3,0,0,0,67,0,0,0,115,22,0,0,0,124,0,115, - 12,116,0,106,1,131,0,125,0,116,2,124,0,100,1,131, - 2,83,0,41,2,122,30,82,101,112,108,97,99,101,109,101, - 110,116,32,102,111,114,32,111,115,46,112,97,116,104,46,105, - 115,100,105,114,46,105,0,64,0,0,41,3,114,3,0,0, - 0,218,6,103,101,116,99,119,100,114,43,0,0,0,41,1, - 114,35,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,11,95,112,97,116,104,95,105,115,100,105, - 114,93,0,0,0,115,6,0,0,0,0,2,4,1,8,1, - 114,46,0,0,0,233,182,1,0,0,99,3,0,0,0,0, - 0,0,0,6,0,0,0,17,0,0,0,67,0,0,0,115, - 162,0,0,0,100,1,106,0,124,0,116,1,124,0,131,1, - 131,2,125,3,116,2,106,3,124,3,116,2,106,4,116,2, - 106,5,66,0,116,2,106,6,66,0,124,2,100,2,64,0, - 131,3,125,4,121,50,116,7,106,8,124,4,100,3,131,2, - 143,16,125,5,124,5,106,9,124,1,131,1,1,0,87,0, - 100,4,81,0,82,0,88,0,116,2,106,10,124,3,124,0, - 131,2,1,0,87,0,110,58,4,0,116,11,107,10,114,156, - 1,0,1,0,1,0,121,14,116,2,106,12,124,3,131,1, - 1,0,87,0,110,20,4,0,116,11,107,10,114,148,1,0, - 1,0,1,0,89,0,110,2,88,0,130,0,89,0,110,2, - 88,0,100,4,83,0,41,5,122,162,66,101,115,116,45,101, - 102,102,111,114,116,32,102,117,110,99,116,105,111,110,32,116, - 111,32,119,114,105,116,101,32,100,97,116,97,32,116,111,32, - 97,32,112,97,116,104,32,97,116,111,109,105,99,97,108,108, - 121,46,10,32,32,32,32,66,101,32,112,114,101,112,97,114, - 101,100,32,116,111,32,104,97,110,100,108,101,32,97,32,70, - 105,108,101,69,120,105,115,116,115,69,114,114,111,114,32,105, - 102,32,99,111,110,99,117,114,114,101,110,116,32,119,114,105, - 116,105,110,103,32,111,102,32,116,104,101,10,32,32,32,32, - 116,101,109,112,111,114,97,114,121,32,102,105,108,101,32,105, - 115,32,97,116,116,101,109,112,116,101,100,46,122,5,123,125, - 46,123,125,105,182,1,0,0,90,2,119,98,78,41,13,218, - 6,102,111,114,109,97,116,218,2,105,100,114,3,0,0,0, - 90,4,111,112,101,110,90,6,79,95,69,88,67,76,90,7, - 79,95,67,82,69,65,84,90,8,79,95,87,82,79,78,76, - 89,218,3,95,105,111,218,6,70,105,108,101,73,79,218,5, - 119,114,105,116,101,218,7,114,101,112,108,97,99,101,114,40, - 0,0,0,90,6,117,110,108,105,110,107,41,6,114,35,0, - 0,0,218,4,100,97,116,97,114,42,0,0,0,90,8,112, - 97,116,104,95,116,109,112,90,2,102,100,218,4,102,105,108, - 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,13,95,119,114,105,116,101,95,97,116,111,109,105,99,100, - 0,0,0,115,26,0,0,0,0,5,16,1,6,1,26,1, - 2,3,14,1,20,1,16,1,14,1,2,1,14,1,14,1, - 6,1,114,56,0,0,0,105,44,13,0,0,233,2,0,0, - 0,114,13,0,0,0,115,2,0,0,0,13,10,90,11,95, - 95,112,121,99,97,99,104,101,95,95,122,4,111,112,116,45, - 122,3,46,112,121,122,4,46,112,121,99,78,41,1,218,12, - 111,112,116,105,109,105,122,97,116,105,111,110,99,2,0,0, - 0,1,0,0,0,11,0,0,0,6,0,0,0,67,0,0, - 0,115,234,0,0,0,124,1,100,1,107,9,114,52,116,0, - 106,1,100,2,116,2,131,2,1,0,124,2,100,1,107,9, - 114,40,100,3,125,3,116,3,124,3,131,1,130,1,124,1, - 114,48,100,4,110,2,100,5,125,2,116,4,124,0,131,1, - 92,2,125,4,125,5,124,5,106,5,100,6,131,1,92,3, - 125,6,125,7,125,8,116,6,106,7,106,8,125,9,124,9, - 100,1,107,8,114,104,116,9,100,7,131,1,130,1,100,4, - 106,10,124,6,114,116,124,6,110,2,124,8,124,7,124,9, - 103,3,131,1,125,10,124,2,100,1,107,8,114,162,116,6, - 106,11,106,12,100,8,107,2,114,154,100,4,125,2,110,8, - 116,6,106,11,106,12,125,2,116,13,124,2,131,1,125,2, - 124,2,100,4,107,3,114,214,124,2,106,14,131,0,115,200, - 116,15,100,9,106,16,124,2,131,1,131,1,130,1,100,10, - 106,16,124,10,116,17,124,2,131,3,125,10,116,18,124,4, - 116,19,124,10,116,20,100,8,25,0,23,0,131,3,83,0, - 41,11,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, + 0,115,22,0,0,0,124,0,115,12,116,0,106,1,131,0, + 125,0,116,2,124,0,100,1,131,2,83,0,41,2,122,30, + 82,101,112,108,97,99,101,109,101,110,116,32,102,111,114,32, + 111,115,46,112,97,116,104,46,105,115,100,105,114,46,105,0, + 64,0,0,41,3,114,3,0,0,0,218,6,103,101,116,99, + 119,100,114,45,0,0,0,41,1,114,37,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,11,95, + 112,97,116,104,95,105,115,100,105,114,99,0,0,0,115,6, + 0,0,0,0,2,4,1,8,1,114,48,0,0,0,233,182, + 1,0,0,99,3,0,0,0,0,0,0,0,6,0,0,0, + 17,0,0,0,67,0,0,0,115,162,0,0,0,100,1,106, + 0,124,0,116,1,124,0,131,1,131,2,125,3,116,2,106, + 3,124,3,116,2,106,4,116,2,106,5,66,0,116,2,106, + 6,66,0,124,2,100,2,64,0,131,3,125,4,121,50,116, + 7,106,8,124,4,100,3,131,2,143,16,125,5,124,5,106, + 9,124,1,131,1,1,0,87,0,100,4,81,0,82,0,88, + 0,116,2,106,10,124,3,124,0,131,2,1,0,87,0,110, + 58,4,0,116,11,107,10,114,156,1,0,1,0,1,0,121, + 14,116,2,106,12,124,3,131,1,1,0,87,0,110,20,4, + 0,116,11,107,10,114,148,1,0,1,0,1,0,89,0,110, + 2,88,0,130,0,89,0,110,2,88,0,100,4,83,0,41, + 5,122,162,66,101,115,116,45,101,102,102,111,114,116,32,102, + 117,110,99,116,105,111,110,32,116,111,32,119,114,105,116,101, + 32,100,97,116,97,32,116,111,32,97,32,112,97,116,104,32, + 97,116,111,109,105,99,97,108,108,121,46,10,32,32,32,32, + 66,101,32,112,114,101,112,97,114,101,100,32,116,111,32,104, + 97,110,100,108,101,32,97,32,70,105,108,101,69,120,105,115, + 116,115,69,114,114,111,114,32,105,102,32,99,111,110,99,117, + 114,114,101,110,116,32,119,114,105,116,105,110,103,32,111,102, + 32,116,104,101,10,32,32,32,32,116,101,109,112,111,114,97, + 114,121,32,102,105,108,101,32,105,115,32,97,116,116,101,109, + 112,116,101,100,46,122,5,123,125,46,123,125,105,182,1,0, + 0,90,2,119,98,78,41,13,218,6,102,111,114,109,97,116, + 218,2,105,100,114,3,0,0,0,90,4,111,112,101,110,90, + 6,79,95,69,88,67,76,90,7,79,95,67,82,69,65,84, + 90,8,79,95,87,82,79,78,76,89,218,3,95,105,111,218, + 6,70,105,108,101,73,79,218,5,119,114,105,116,101,218,7, + 114,101,112,108,97,99,101,114,42,0,0,0,90,6,117,110, + 108,105,110,107,41,6,114,37,0,0,0,218,4,100,97,116, + 97,114,44,0,0,0,90,8,112,97,116,104,95,116,109,112, + 90,2,102,100,218,4,102,105,108,101,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,13,95,119,114,105,116, + 101,95,97,116,111,109,105,99,106,0,0,0,115,26,0,0, + 0,0,5,16,1,6,1,26,1,2,3,14,1,20,1,16, + 1,14,1,2,1,14,1,14,1,6,1,114,58,0,0,0, + 105,44,13,0,0,233,2,0,0,0,114,15,0,0,0,115, + 2,0,0,0,13,10,90,11,95,95,112,121,99,97,99,104, + 101,95,95,122,4,111,112,116,45,122,3,46,112,121,122,4, + 46,112,121,99,78,41,1,218,12,111,112,116,105,109,105,122, + 97,116,105,111,110,99,2,0,0,0,1,0,0,0,11,0, + 0,0,6,0,0,0,67,0,0,0,115,234,0,0,0,124, + 1,100,1,107,9,114,52,116,0,106,1,100,2,116,2,131, + 2,1,0,124,2,100,1,107,9,114,40,100,3,125,3,116, + 3,124,3,131,1,130,1,124,1,114,48,100,4,110,2,100, + 5,125,2,116,4,124,0,131,1,92,2,125,4,125,5,124, + 5,106,5,100,6,131,1,92,3,125,6,125,7,125,8,116, + 6,106,7,106,8,125,9,124,9,100,1,107,8,114,104,116, + 9,100,7,131,1,130,1,100,4,106,10,124,6,114,116,124, + 6,110,2,124,8,124,7,124,9,103,3,131,1,125,10,124, + 2,100,1,107,8,114,162,116,6,106,11,106,12,100,8,107, + 2,114,154,100,4,125,2,110,8,116,6,106,11,106,12,125, + 2,116,13,124,2,131,1,125,2,124,2,100,4,107,3,114, + 214,124,2,106,14,131,0,115,200,116,15,100,9,106,16,124, + 2,131,1,131,1,130,1,100,10,106,16,124,10,116,17,124, + 2,131,3,125,10,116,18,124,4,116,19,124,10,116,20,100, + 8,25,0,23,0,131,3,83,0,41,11,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,32,0,0,0, + 114,31,0,0,0,218,1,46,122,36,115,121,115,46,105,109, + 112,108,101,109,101,110,116,97,116,105,111,110,46,99,97,99, + 104,101,95,116,97,103,32,105,115,32,78,111,110,101,233,0, + 0,0,0,122,24,123,33,114,125,32,105,115,32,110,111,116, + 32,97,108,112,104,97,110,117,109,101,114,105,99,122,7,123, + 125,46,123,125,123,125,41,21,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,40,0,0,0,114,34,0, + 0,0,114,8,0,0,0,218,14,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,218,9,99,97,99,104,101,95,116, + 97,103,218,19,78,111,116,73,109,112,108,101,109,101,110,116, + 101,100,69,114,114,111,114,114,28,0,0,0,218,5,102,108, + 97,103,115,218,8,111,112,116,105,109,105,122,101,218,3,115, + 116,114,218,7,105,115,97,108,110,117,109,218,10,86,97,108, + 117,101,69,114,114,111,114,114,50,0,0,0,218,4,95,79, + 80,84,114,30,0,0,0,218,8,95,80,89,67,65,67,72, + 69,218,17,66,89,84,69,67,79,68,69,95,83,85,70,70, + 73,88,69,83,41,11,114,37,0,0,0,90,14,100,101,98, + 117,103,95,111,118,101,114,114,105,100,101,114,60,0,0,0, + 218,7,109,101,115,115,97,103,101,218,4,104,101,97,100,114, + 39,0,0,0,90,4,98,97,115,101,218,3,115,101,112,218, + 4,114,101,115,116,90,3,116,97,103,90,15,97,108,109,111, + 115,116,95,102,105,108,101,110,97,109,101,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,17,99,97,99,104, + 101,95,102,114,111,109,95,115,111,117,114,99,101,0,1,0, + 0,115,46,0,0,0,0,18,8,1,6,1,6,1,8,1, + 4,1,8,1,12,1,12,1,16,1,8,1,8,1,8,1, + 24,1,8,1,12,1,6,2,8,1,8,1,8,1,8,1, + 14,1,14,1,114,82,0,0,0,99,1,0,0,0,0,0, + 0,0,8,0,0,0,5,0,0,0,67,0,0,0,115,220, + 0,0,0,116,0,106,1,106,2,100,1,107,8,114,20,116, + 3,100,2,131,1,130,1,116,4,124,0,131,1,92,2,125, + 1,125,2,116,4,124,1,131,1,92,2,125,1,125,3,124, + 3,116,5,107,3,114,68,116,6,100,3,106,7,116,5,124, + 0,131,2,131,1,130,1,124,2,106,8,100,4,131,1,125, + 4,124,4,100,11,107,7,114,102,116,6,100,7,106,7,124, + 2,131,1,131,1,130,1,110,86,124,4,100,6,107,2,114, + 188,124,2,106,9,100,4,100,5,131,2,100,12,25,0,125, + 5,124,5,106,10,116,11,131,1,115,150,116,6,100,8,106, + 7,116,11,131,1,131,1,130,1,124,5,116,12,116,11,131, + 1,100,1,133,2,25,0,125,6,124,6,106,13,131,0,115, + 188,116,6,100,9,106,7,124,5,131,1,131,1,130,1,124, + 2,106,14,100,4,131,1,100,10,25,0,125,7,116,15,124, + 1,124,7,116,16,100,10,25,0,23,0,131,2,83,0,41, + 13,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,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, + 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,122,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,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,30,0,0,0,114,29,0,0,0,218,1,46,122, - 36,115,121,115,46,105,109,112,108,101,109,101,110,116,97,116, - 105,111,110,46,99,97,99,104,101,95,116,97,103,32,105,115, - 32,78,111,110,101,233,0,0,0,0,122,24,123,33,114,125, - 32,105,115,32,110,111,116,32,97,108,112,104,97,110,117,109, - 101,114,105,99,122,7,123,125,46,123,125,123,125,41,21,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, - 38,0,0,0,114,32,0,0,0,114,7,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,26, - 0,0,0,218,5,102,108,97,103,115,218,8,111,112,116,105, - 109,105,122,101,218,3,115,116,114,218,7,105,115,97,108,110, - 117,109,218,10,86,97,108,117,101,69,114,114,111,114,114,48, - 0,0,0,218,4,95,79,80,84,114,28,0,0,0,218,8, - 95,80,89,67,65,67,72,69,218,17,66,89,84,69,67,79, - 68,69,95,83,85,70,70,73,88,69,83,41,11,114,35,0, - 0,0,90,14,100,101,98,117,103,95,111,118,101,114,114,105, - 100,101,114,58,0,0,0,218,7,109,101,115,115,97,103,101, - 218,4,104,101,97,100,114,37,0,0,0,90,4,98,97,115, - 101,218,3,115,101,112,218,4,114,101,115,116,90,3,116,97, - 103,90,15,97,108,109,111,115,116,95,102,105,108,101,110,97, - 109,101,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,17,99,97,99,104,101,95,102,114,111,109,95,115,111, - 117,114,99,101,250,0,0,0,115,46,0,0,0,0,18,8, - 1,6,1,6,1,8,1,4,1,8,1,12,1,12,1,16, - 1,8,1,8,1,8,1,24,1,8,1,12,1,6,2,8, - 1,8,1,8,1,8,1,14,1,14,1,114,80,0,0,0, - 99,1,0,0,0,0,0,0,0,8,0,0,0,5,0,0, - 0,67,0,0,0,115,220,0,0,0,116,0,106,1,106,2, - 100,1,107,8,114,20,116,3,100,2,131,1,130,1,116,4, - 124,0,131,1,92,2,125,1,125,2,116,4,124,1,131,1, - 92,2,125,1,125,3,124,3,116,5,107,3,114,68,116,6, - 100,3,106,7,116,5,124,0,131,2,131,1,130,1,124,2, - 106,8,100,4,131,1,125,4,124,4,100,11,107,7,114,102, - 116,6,100,7,106,7,124,2,131,1,131,1,130,1,110,86, - 124,4,100,6,107,2,114,188,124,2,106,9,100,4,100,5, - 131,2,100,12,25,0,125,5,124,5,106,10,116,11,131,1, - 115,150,116,6,100,8,106,7,116,11,131,1,131,1,130,1, - 124,5,116,12,116,11,131,1,100,1,133,2,25,0,125,6, - 124,6,106,13,131,0,115,188,116,6,100,9,106,7,124,5, - 131,1,131,1,130,1,124,2,106,14,100,4,131,1,100,10, - 25,0,125,7,116,15,124,1,124,7,116,16,100,10,25,0, - 23,0,131,2,83,0,41,13,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,122,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,122,37,123,125,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,123,33,114,125,114,59,0,0,0,114,57, - 0,0,0,233,3,0,0,0,122,33,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,123,33,114,125,122,57,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,123,33,114,125,122,52,111,112,116,105,109,105,122,97, - 116,105,111,110,32,108,101,118,101,108,32,123,33,114,125,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,60,0,0, - 0,62,2,0,0,0,114,57,0,0,0,114,81,0,0,0, - 233,254,255,255,255,41,17,114,7,0,0,0,114,65,0,0, - 0,114,66,0,0,0,114,67,0,0,0,114,38,0,0,0, - 114,74,0,0,0,114,72,0,0,0,114,48,0,0,0,218, - 5,99,111,117,110,116,114,34,0,0,0,114,9,0,0,0, - 114,73,0,0,0,114,31,0,0,0,114,71,0,0,0,218, - 9,112,97,114,116,105,116,105,111,110,114,28,0,0,0,218, - 15,83,79,85,82,67,69,95,83,85,70,70,73,88,69,83, - 41,8,114,35,0,0,0,114,77,0,0,0,90,16,112,121, - 99,97,99,104,101,95,102,105,108,101,110,97,109,101,90,7, - 112,121,99,97,99,104,101,90,9,100,111,116,95,99,111,117, - 110,116,114,58,0,0,0,90,9,111,112,116,95,108,101,118, - 101,108,90,13,98,97,115,101,95,102,105,108,101,110,97,109, - 101,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 218,17,115,111,117,114,99,101,95,102,114,111,109,95,99,97, - 99,104,101,38,1,0,0,115,44,0,0,0,0,9,12,1, - 8,1,12,1,12,1,8,1,6,1,10,1,10,1,8,1, - 6,1,10,1,8,1,16,1,10,1,6,1,8,1,16,1, - 8,1,6,1,8,1,14,1,114,86,0,0,0,99,1,0, - 0,0,0,0,0,0,5,0,0,0,12,0,0,0,67,0, - 0,0,115,128,0,0,0,116,0,124,0,131,1,100,1,107, - 2,114,16,100,2,83,0,124,0,106,1,100,3,131,1,92, - 3,125,1,125,2,125,3,124,1,12,0,115,58,124,3,106, - 2,131,0,100,7,100,8,133,2,25,0,100,6,107,3,114, - 62,124,0,83,0,121,12,116,3,124,0,131,1,125,4,87, - 0,110,36,4,0,116,4,116,5,102,2,107,10,114,110,1, - 0,1,0,1,0,124,0,100,2,100,9,133,2,25,0,125, - 4,89,0,110,2,88,0,116,6,124,4,131,1,114,124,124, - 4,83,0,124,0,83,0,41,10,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,60,0,0,0,78,114,59,0, - 0,0,114,81,0,0,0,114,29,0,0,0,90,2,112,121, - 233,253,255,255,255,233,255,255,255,255,114,88,0,0,0,41, - 7,114,31,0,0,0,114,32,0,0,0,218,5,108,111,119, - 101,114,114,86,0,0,0,114,67,0,0,0,114,72,0,0, - 0,114,44,0,0,0,41,5,218,13,98,121,116,101,99,111, - 100,101,95,112,97,116,104,114,79,0,0,0,114,36,0,0, - 0,90,9,101,120,116,101,110,115,105,111,110,218,11,115,111, - 117,114,99,101,95,112,97,116,104,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,15,95,103,101,116,95,115, - 111,117,114,99,101,102,105,108,101,71,1,0,0,115,20,0, - 0,0,0,7,12,1,4,1,16,1,26,1,4,1,2,1, - 12,1,18,1,18,1,114,92,0,0,0,99,1,0,0,0, - 0,0,0,0,1,0,0,0,11,0,0,0,67,0,0,0, - 115,74,0,0,0,124,0,106,0,116,1,116,2,131,1,131, - 1,114,46,121,8,116,3,124,0,131,1,83,0,4,0,116, - 4,107,10,114,42,1,0,1,0,1,0,89,0,113,70,88, - 0,110,24,124,0,106,0,116,1,116,5,131,1,131,1,114, - 66,124,0,83,0,110,4,100,0,83,0,100,0,83,0,41, - 1,78,41,6,218,8,101,110,100,115,119,105,116,104,218,5, - 116,117,112,108,101,114,85,0,0,0,114,80,0,0,0,114, - 67,0,0,0,114,75,0,0,0,41,1,218,8,102,105,108, - 101,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,218,11,95,103,101,116,95,99,97,99,104,101, - 100,90,1,0,0,115,16,0,0,0,0,1,14,1,2,1, - 8,1,14,1,8,1,14,1,6,2,114,96,0,0,0,99, - 1,0,0,0,0,0,0,0,2,0,0,0,11,0,0,0, - 67,0,0,0,115,52,0,0,0,121,14,116,0,124,0,131, - 1,106,1,125,1,87,0,110,24,4,0,116,2,107,10,114, - 38,1,0,1,0,1,0,100,1,125,1,89,0,110,2,88, - 0,124,1,100,2,79,0,125,1,124,1,83,0,41,3,122, - 51,67,97,108,99,117,108,97,116,101,32,116,104,101,32,109, - 111,100,101,32,112,101,114,109,105,115,115,105,111,110,115,32, - 102,111,114,32,97,32,98,121,116,101,99,111,100,101,32,102, - 105,108,101,46,105,182,1,0,0,233,128,0,0,0,41,3, - 114,39,0,0,0,114,41,0,0,0,114,40,0,0,0,41, - 2,114,35,0,0,0,114,42,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,10,95,99,97,108, - 99,95,109,111,100,101,102,1,0,0,115,12,0,0,0,0, - 2,2,1,14,1,14,1,10,3,8,1,114,98,0,0,0, - 99,1,0,0,0,0,0,0,0,3,0,0,0,11,0,0, - 0,3,0,0,0,115,68,0,0,0,100,6,135,0,102,1, - 100,2,100,3,132,9,125,1,121,10,116,0,106,1,125,2, - 87,0,110,28,4,0,116,2,107,10,114,52,1,0,1,0, - 1,0,100,4,100,5,132,0,125,2,89,0,110,2,88,0, - 124,2,124,1,136,0,131,2,1,0,124,1,83,0,41,7, - 122,252,68,101,99,111,114,97,116,111,114,32,116,111,32,118, - 101,114,105,102,121,32,116,104,97,116,32,116,104,101,32,109, - 111,100,117,108,101,32,98,101,105,110,103,32,114,101,113,117, - 101,115,116,101,100,32,109,97,116,99,104,101,115,32,116,104, - 101,32,111,110,101,32,116,104,101,10,32,32,32,32,108,111, - 97,100,101,114,32,99,97,110,32,104,97,110,100,108,101,46, - 10,10,32,32,32,32,84,104,101,32,102,105,114,115,116,32, - 97,114,103,117,109,101,110,116,32,40,115,101,108,102,41,32, - 109,117,115,116,32,100,101,102,105,110,101,32,95,110,97,109, - 101,32,119,104,105,99,104,32,116,104,101,32,115,101,99,111, - 110,100,32,97,114,103,117,109,101,110,116,32,105,115,10,32, - 32,32,32,99,111,109,112,97,114,101,100,32,97,103,97,105, - 110,115,116,46,32,73,102,32,116,104,101,32,99,111,109,112, - 97,114,105,115,111,110,32,102,97,105,108,115,32,116,104,101, - 110,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, - 32,114,97,105,115,101,100,46,10,10,32,32,32,32,78,99, - 2,0,0,0,0,0,0,0,4,0,0,0,5,0,0,0, - 31,0,0,0,115,64,0,0,0,124,1,100,0,107,8,114, - 16,124,0,106,0,125,1,110,34,124,0,106,0,124,1,107, - 3,114,50,116,1,100,1,124,0,106,0,124,1,102,2,22, - 0,100,2,124,1,144,1,131,1,130,1,136,0,124,0,124, - 1,124,2,124,3,142,2,83,0,41,3,78,122,30,108,111, - 97,100,101,114,32,102,111,114,32,37,115,32,99,97,110,110, - 111,116,32,104,97,110,100,108,101,32,37,115,218,4,110,97, - 109,101,41,2,114,99,0,0,0,218,11,73,109,112,111,114, - 116,69,114,114,111,114,41,4,218,4,115,101,108,102,114,99, - 0,0,0,218,4,97,114,103,115,90,6,107,119,97,114,103, - 115,41,1,218,6,109,101,116,104,111,100,114,4,0,0,0, - 114,5,0,0,0,218,19,95,99,104,101,99,107,95,110,97, - 109,101,95,119,114,97,112,112,101,114,122,1,0,0,115,12, - 0,0,0,0,1,8,1,8,1,10,1,4,1,20,1,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,3,0,0,0,7,0,0,0,83,0,0,0,115,60, - 0,0,0,120,40,100,5,68,0,93,32,125,2,116,0,124, - 1,124,2,131,2,114,6,116,1,124,0,124,2,116,2,124, - 1,124,2,131,2,131,3,1,0,113,6,87,0,124,0,106, - 3,106,4,124,1,106,3,131,1,1,0,100,0,83,0,41, - 6,78,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, - 4,122,10,95,95,109,111,100,117,108,101,95,95,122,8,95, - 95,110,97,109,101,95,95,122,12,95,95,113,117,97,108,110, - 97,109,101,95,95,122,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,53,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,5,95, - 119,114,97,112,133,1,0,0,115,8,0,0,0,0,1,10, - 1,10,1,22,1,122,26,95,99,104,101,99,107,95,110,97, - 109,101,46,60,108,111,99,97,108,115,62,46,95,119,114,97, - 112,41,1,78,41,3,218,10,95,98,111,111,116,115,116,114, - 97,112,114,114,0,0,0,218,9,78,97,109,101,69,114,114, - 111,114,41,3,114,103,0,0,0,114,104,0,0,0,114,114, - 0,0,0,114,4,0,0,0,41,1,114,103,0,0,0,114, - 5,0,0,0,218,11,95,99,104,101,99,107,95,110,97,109, - 101,114,1,0,0,115,14,0,0,0,0,8,14,7,2,1, - 10,1,14,2,14,5,10,1,114,117,0,0,0,99,2,0, - 0,0,0,0,0,0,5,0,0,0,4,0,0,0,67,0, - 0,0,115,60,0,0,0,124,0,106,0,124,1,131,1,92, - 2,125,2,125,3,124,2,100,1,107,8,114,56,116,1,124, - 3,131,1,114,56,100,2,125,4,116,2,106,3,124,4,106, - 4,124,3,100,3,25,0,131,1,116,5,131,2,1,0,124, - 2,83,0,41,4,122,155,84,114,121,32,116,111,32,102,105, - 110,100,32,97,32,108,111,97,100,101,114,32,102,111,114,32, - 116,104,101,32,115,112,101,99,105,102,105,101,100,32,109,111, - 100,117,108,101,32,98,121,32,100,101,108,101,103,97,116,105, - 110,103,32,116,111,10,32,32,32,32,115,101,108,102,46,102, - 105,110,100,95,108,111,97,100,101,114,40,41,46,10,10,32, - 32,32,32,84,104,105,115,32,109,101,116,104,111,100,32,105, - 115,32,100,101,112,114,101,99,97,116,101,100,32,105,110,32, - 102,97,118,111,114,32,111,102,32,102,105,110,100,101,114,46, - 102,105,110,100,95,115,112,101,99,40,41,46,10,10,32,32, - 32,32,78,122,44,78,111,116,32,105,109,112,111,114,116,105, - 110,103,32,100,105,114,101,99,116,111,114,121,32,123,125,58, - 32,109,105,115,115,105,110,103,32,95,95,105,110,105,116,95, - 95,114,60,0,0,0,41,6,218,11,102,105,110,100,95,108, - 111,97,100,101,114,114,31,0,0,0,114,61,0,0,0,114, - 62,0,0,0,114,48,0,0,0,218,13,73,109,112,111,114, - 116,87,97,114,110,105,110,103,41,5,114,101,0,0,0,218, - 8,102,117,108,108,110,97,109,101,218,6,108,111,97,100,101, - 114,218,8,112,111,114,116,105,111,110,115,218,3,109,115,103, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 17,95,102,105,110,100,95,109,111,100,117,108,101,95,115,104, - 105,109,142,1,0,0,115,10,0,0,0,0,10,14,1,16, - 1,4,1,22,1,114,124,0,0,0,99,4,0,0,0,0, - 0,0,0,11,0,0,0,19,0,0,0,67,0,0,0,115, - 128,1,0,0,105,0,125,4,124,2,100,1,107,9,114,22, - 124,2,124,4,100,2,60,0,110,4,100,3,125,2,124,3, - 100,1,107,9,114,42,124,3,124,4,100,4,60,0,124,0, - 100,1,100,5,133,2,25,0,125,5,124,0,100,5,100,6, - 133,2,25,0,125,6,124,0,100,6,100,7,133,2,25,0, - 125,7,124,5,116,0,107,3,114,122,100,8,106,1,124,2, - 124,5,131,2,125,8,116,2,106,3,100,9,124,8,131,2, - 1,0,116,4,124,8,124,4,141,1,130,1,110,86,116,5, - 124,6,131,1,100,5,107,3,114,166,100,10,106,1,124,2, - 131,1,125,8,116,2,106,3,100,9,124,8,131,2,1,0, - 116,6,124,8,131,1,130,1,110,42,116,5,124,7,131,1, - 100,5,107,3,114,208,100,11,106,1,124,2,131,1,125,8, - 116,2,106,3,100,9,124,8,131,2,1,0,116,6,124,8, - 131,1,130,1,124,1,100,1,107,9,144,1,114,116,121,16, - 116,7,124,1,100,12,25,0,131,1,125,9,87,0,110,20, - 4,0,116,8,107,10,114,254,1,0,1,0,1,0,89,0, - 110,48,88,0,116,9,124,6,131,1,124,9,107,3,144,1, - 114,46,100,13,106,1,124,2,131,1,125,8,116,2,106,3, - 100,9,124,8,131,2,1,0,116,4,124,8,124,4,141,1, - 130,1,121,16,124,1,100,14,25,0,100,15,64,0,125,10, - 87,0,110,22,4,0,116,8,107,10,144,1,114,84,1,0, - 1,0,1,0,89,0,110,32,88,0,116,9,124,7,131,1, - 124,10,107,3,144,1,114,116,116,4,100,13,106,1,124,2, - 131,1,124,4,141,1,130,1,124,0,100,7,100,1,133,2, - 25,0,83,0,41,16,97,122,1,0,0,86,97,108,105,100, - 97,116,101,32,116,104,101,32,104,101,97,100,101,114,32,111, - 102,32,116,104,101,32,112,97,115,115,101,100,45,105,110,32, - 98,121,116,101,99,111,100,101,32,97,103,97,105,110,115,116, - 32,115,111,117,114,99,101,95,115,116,97,116,115,32,40,105, - 102,10,32,32,32,32,103,105,118,101,110,41,32,97,110,100, - 32,114,101,116,117,114,110,105,110,103,32,116,104,101,32,98, - 121,116,101,99,111,100,101,32,116,104,97,116,32,99,97,110, - 32,98,101,32,99,111,109,112,105,108,101,100,32,98,121,32, - 99,111,109,112,105,108,101,40,41,46,10,10,32,32,32,32, - 65,108,108,32,111,116,104,101,114,32,97,114,103,117,109,101, - 110,116,115,32,97,114,101,32,117,115,101,100,32,116,111,32, - 101,110,104,97,110,99,101,32,101,114,114,111,114,32,114,101, - 112,111,114,116,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,116,104,101,32,98,121, - 116,101,99,111,100,101,32,105,115,10,32,32,32,32,102,111, - 117,110,100,32,116,111,32,98,101,32,115,116,97,108,101,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, - 10,32,32,32,32,116,114,117,110,99,97,116,101,100,46,10, - 10,32,32,32,32,78,114,99,0,0,0,122,10,60,98,121, - 116,101,99,111,100,101,62,114,35,0,0,0,114,12,0,0, - 0,233,8,0,0,0,233,12,0,0,0,122,30,98,97,100, - 32,109,97,103,105,99,32,110,117,109,98,101,114,32,105,110, - 32,123,33,114,125,58,32,123,33,114,125,122,2,123,125,122, - 43,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,116,105,109,101,115, - 116,97,109,112,32,105,110,32,123,33,114,125,122,48,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,115,105,122,101,32,111,102,32, - 115,111,117,114,99,101,32,105,110,32,123,33,114,125,218,5, - 109,116,105,109,101,122,26,98,121,116,101,99,111,100,101,32, - 105,115,32,115,116,97,108,101,32,102,111,114,32,123,33,114, - 125,218,4,115,105,122,101,108,3,0,0,0,255,127,255,127, - 3,0,41,10,218,12,77,65,71,73,67,95,78,85,77,66, - 69,82,114,48,0,0,0,114,115,0,0,0,218,16,95,118, - 101,114,98,111,115,101,95,109,101,115,115,97,103,101,114,100, - 0,0,0,114,31,0,0,0,218,8,69,79,70,69,114,114, - 111,114,114,14,0,0,0,218,8,75,101,121,69,114,114,111, - 114,114,19,0,0,0,41,11,114,54,0,0,0,218,12,115, - 111,117,114,99,101,95,115,116,97,116,115,114,99,0,0,0, - 114,35,0,0,0,90,11,101,120,99,95,100,101,116,97,105, - 108,115,90,5,109,97,103,105,99,90,13,114,97,119,95,116, - 105,109,101,115,116,97,109,112,90,8,114,97,119,95,115,105, - 122,101,114,76,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,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,25,95,118,97,108,105,100,97,116,101,95,98,121,116, - 101,99,111,100,101,95,104,101,97,100,101,114,159,1,0,0, - 115,76,0,0,0,0,11,4,1,8,1,10,3,4,1,8, - 1,8,1,12,1,12,1,12,1,8,1,12,1,12,1,12, - 1,12,1,10,1,12,1,10,1,12,1,10,1,12,1,8, - 1,10,1,2,1,16,1,14,1,6,2,14,1,10,1,12, - 1,10,1,2,1,16,1,16,1,6,2,14,1,10,1,6, - 1,114,136,0,0,0,99,4,0,0,0,0,0,0,0,5, - 0,0,0,6,0,0,0,67,0,0,0,115,86,0,0,0, - 116,0,106,1,124,0,131,1,125,4,116,2,124,4,116,3, - 131,2,114,58,116,4,106,5,100,1,124,2,131,2,1,0, - 124,3,100,2,107,9,114,52,116,6,106,7,124,4,124,3, - 131,2,1,0,124,4,83,0,110,24,116,8,100,3,106,9, - 124,2,131,1,100,4,124,1,100,5,124,2,144,2,131,1, - 130,1,100,2,83,0,41,6,122,60,67,111,109,112,105,108, - 101,32,98,121,116,101,99,111,100,101,32,97,115,32,114,101, - 116,117,114,110,101,100,32,98,121,32,95,118,97,108,105,100, - 97,116,101,95,98,121,116,101,99,111,100,101,95,104,101,97, - 100,101,114,40,41,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,114,99,0,0,0,114,35,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,115,0,0,0, - 114,130,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,100,0, - 0,0,114,48,0,0,0,41,5,114,54,0,0,0,114,99, - 0,0,0,114,90,0,0,0,114,91,0,0,0,218,4,99, - 111,100,101,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,17,95,99,111,109,112,105,108,101,95,98,121,116, - 101,99,111,100,101,214,1,0,0,115,16,0,0,0,0,2, - 10,1,10,1,12,1,8,1,12,1,6,2,12,1,114,142, - 0,0,0,114,60,0,0,0,99,3,0,0,0,0,0,0, - 0,4,0,0,0,3,0,0,0,67,0,0,0,115,56,0, - 0,0,116,0,116,1,131,1,125,3,124,3,106,2,116,3, - 124,1,131,1,131,1,1,0,124,3,106,2,116,3,124,2, - 131,1,131,1,1,0,124,3,106,2,116,4,106,5,124,0, - 131,1,131,1,1,0,124,3,83,0,41,1,122,80,67,111, - 109,112,105,108,101,32,97,32,99,111,100,101,32,111,98,106, - 101,99,116,32,105,110,116,111,32,98,121,116,101,99,111,100, - 101,32,102,111,114,32,119,114,105,116,105,110,103,32,111,117, - 116,32,116,111,32,97,32,98,121,116,101,45,99,111,109,112, - 105,108,101,100,10,32,32,32,32,102,105,108,101,46,41,6, - 218,9,98,121,116,101,97,114,114,97,121,114,129,0,0,0, - 218,6,101,120,116,101,110,100,114,17,0,0,0,114,137,0, - 0,0,90,5,100,117,109,112,115,41,4,114,141,0,0,0, - 114,127,0,0,0,114,135,0,0,0,114,54,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,218,17, - 95,99,111,100,101,95,116,111,95,98,121,116,101,99,111,100, - 101,226,1,0,0,115,10,0,0,0,0,3,8,1,14,1, - 14,1,16,1,114,145,0,0,0,99,1,0,0,0,0,0, - 0,0,5,0,0,0,4,0,0,0,67,0,0,0,115,62, - 0,0,0,100,1,100,2,108,0,125,1,116,1,106,2,124, - 0,131,1,106,3,125,2,124,1,106,4,124,2,131,1,125, - 3,116,1,106,5,100,2,100,3,131,2,125,4,124,4,106, - 6,124,0,106,6,124,3,100,1,25,0,131,1,131,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,60, - 0,0,0,78,84,41,7,218,8,116,111,107,101,110,105,122, - 101,114,50,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,146,0, - 0,0,90,21,115,111,117,114,99,101,95,98,121,116,101,115, - 95,114,101,97,100,108,105,110,101,218,8,101,110,99,111,100, - 105,110,103,90,15,110,101,119,108,105,110,101,95,100,101,99, - 111,100,101,114,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,13,100,101,99,111,100,101,95,115,111,117,114, - 99,101,236,1,0,0,115,10,0,0,0,0,5,8,1,12, - 1,10,1,12,1,114,150,0,0,0,41,2,114,121,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,2,0,0,0,9,0,0,0,19,0,0,0,67,0, - 0,0,115,8,1,0,0,124,1,100,1,107,8,114,58,100, - 2,125,1,116,0,124,2,100,3,131,2,114,58,121,14,124, - 2,106,1,124,0,131,1,125,1,87,0,110,20,4,0,116, - 2,107,10,114,56,1,0,1,0,1,0,89,0,110,2,88, - 0,116,3,106,4,124,0,124,2,100,4,124,1,144,1,131, - 2,125,4,100,5,124,4,95,5,124,2,100,1,107,8,114, - 146,120,54,116,6,131,0,68,0,93,40,92,2,125,5,125, - 6,124,1,106,7,116,8,124,6,131,1,131,1,114,98,124, - 5,124,0,124,1,131,2,125,2,124,2,124,4,95,9,80, - 0,113,98,87,0,100,1,83,0,124,3,116,10,107,8,114, - 212,116,0,124,2,100,6,131,2,114,218,121,14,124,2,106, - 11,124,0,131,1,125,7,87,0,110,20,4,0,116,2,107, - 10,114,198,1,0,1,0,1,0,89,0,113,218,88,0,124, - 7,114,218,103,0,124,4,95,12,110,6,124,3,124,4,95, - 12,124,4,106,12,103,0,107,2,144,1,114,4,124,1,144, - 1,114,4,116,13,124,1,131,1,100,7,25,0,125,8,124, - 4,106,12,106,14,124,8,131,1,1,0,124,4,83,0,41, - 8,97,61,1,0,0,82,101,116,117,114,110,32,97,32,109, - 111,100,117,108,101,32,115,112,101,99,32,98,97,115,101,100, - 32,111,110,32,97,32,102,105,108,101,32,108,111,99,97,116, - 105,111,110,46,10,10,32,32,32,32,84,111,32,105,110,100, - 105,99,97,116,101,32,116,104,97,116,32,116,104,101,32,109, - 111,100,117,108,101,32,105,115,32,97,32,112,97,99,107,97, - 103,101,44,32,115,101,116,10,32,32,32,32,115,117,98,109, + 116,97,103,32,105,115,32,78,111,110,101,122,37,123,125,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,123,33, + 114,125,114,61,0,0,0,114,59,0,0,0,233,3,0,0, + 0,122,33,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, + 123,33,114,125,122,57,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,123,33,114,125,122, + 52,111,112,116,105,109,105,122,97,116,105,111,110,32,108,101, + 118,101,108,32,123,33,114,125,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,62,0,0,0,62,2,0,0,0,114, + 59,0,0,0,114,83,0,0,0,233,254,255,255,255,41,17, + 114,8,0,0,0,114,67,0,0,0,114,68,0,0,0,114, + 69,0,0,0,114,40,0,0,0,114,76,0,0,0,114,74, + 0,0,0,114,50,0,0,0,218,5,99,111,117,110,116,114, + 36,0,0,0,114,10,0,0,0,114,75,0,0,0,114,33, + 0,0,0,114,73,0,0,0,218,9,112,97,114,116,105,116, + 105,111,110,114,30,0,0,0,218,15,83,79,85,82,67,69, + 95,83,85,70,70,73,88,69,83,41,8,114,37,0,0,0, + 114,79,0,0,0,90,16,112,121,99,97,99,104,101,95,102, + 105,108,101,110,97,109,101,90,7,112,121,99,97,99,104,101, + 90,9,100,111,116,95,99,111,117,110,116,114,60,0,0,0, + 90,9,111,112,116,95,108,101,118,101,108,90,13,98,97,115, + 101,95,102,105,108,101,110,97,109,101,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,218,17,115,111,117,114,99, + 101,95,102,114,111,109,95,99,97,99,104,101,44,1,0,0, + 115,44,0,0,0,0,9,12,1,8,1,12,1,12,1,8, + 1,6,1,10,1,10,1,8,1,6,1,10,1,8,1,16, + 1,10,1,6,1,8,1,16,1,8,1,6,1,8,1,14, + 1,114,88,0,0,0,99,1,0,0,0,0,0,0,0,5, + 0,0,0,12,0,0,0,67,0,0,0,115,128,0,0,0, + 116,0,124,0,131,1,100,1,107,2,114,16,100,2,83,0, + 124,0,106,1,100,3,131,1,92,3,125,1,125,2,125,3, + 124,1,12,0,115,58,124,3,106,2,131,0,100,7,100,8, + 133,2,25,0,100,6,107,3,114,62,124,0,83,0,121,12, + 116,3,124,0,131,1,125,4,87,0,110,36,4,0,116,4, + 116,5,102,2,107,10,114,110,1,0,1,0,1,0,124,0, + 100,2,100,9,133,2,25,0,125,4,89,0,110,2,88,0, + 116,6,124,4,131,1,114,124,124,4,83,0,124,0,83,0, + 41,10,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,62,0,0,0,78,114,61,0,0,0,114,83,0,0,0, + 114,31,0,0,0,90,2,112,121,233,253,255,255,255,233,255, + 255,255,255,114,90,0,0,0,41,7,114,33,0,0,0,114, + 34,0,0,0,218,5,108,111,119,101,114,114,88,0,0,0, + 114,69,0,0,0,114,74,0,0,0,114,46,0,0,0,41, + 5,218,13,98,121,116,101,99,111,100,101,95,112,97,116,104, + 114,81,0,0,0,114,38,0,0,0,90,9,101,120,116,101, + 110,115,105,111,110,218,11,115,111,117,114,99,101,95,112,97, + 116,104,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,218,15,95,103,101,116,95,115,111,117,114,99,101,102,105, + 108,101,77,1,0,0,115,20,0,0,0,0,7,12,1,4, + 1,16,1,26,1,4,1,2,1,12,1,18,1,18,1,114, + 94,0,0,0,99,1,0,0,0,0,0,0,0,1,0,0, + 0,11,0,0,0,67,0,0,0,115,74,0,0,0,124,0, + 106,0,116,1,116,2,131,1,131,1,114,46,121,8,116,3, + 124,0,131,1,83,0,4,0,116,4,107,10,114,42,1,0, + 1,0,1,0,89,0,113,70,88,0,110,24,124,0,106,0, + 116,1,116,5,131,1,131,1,114,66,124,0,83,0,110,4, + 100,0,83,0,100,0,83,0,41,1,78,41,6,218,8,101, + 110,100,115,119,105,116,104,218,5,116,117,112,108,101,114,87, + 0,0,0,114,82,0,0,0,114,69,0,0,0,114,77,0, + 0,0,41,1,218,8,102,105,108,101,110,97,109,101,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,218,11,95, + 103,101,116,95,99,97,99,104,101,100,96,1,0,0,115,16, + 0,0,0,0,1,14,1,2,1,8,1,14,1,8,1,14, + 1,6,2,114,98,0,0,0,99,1,0,0,0,0,0,0, + 0,2,0,0,0,11,0,0,0,67,0,0,0,115,52,0, + 0,0,121,14,116,0,124,0,131,1,106,1,125,1,87,0, + 110,24,4,0,116,2,107,10,114,38,1,0,1,0,1,0, + 100,1,125,1,89,0,110,2,88,0,124,1,100,2,79,0, + 125,1,124,1,83,0,41,3,122,51,67,97,108,99,117,108, + 97,116,101,32,116,104,101,32,109,111,100,101,32,112,101,114, + 109,105,115,115,105,111,110,115,32,102,111,114,32,97,32,98, + 121,116,101,99,111,100,101,32,102,105,108,101,46,105,182,1, + 0,0,233,128,0,0,0,41,3,114,41,0,0,0,114,43, + 0,0,0,114,42,0,0,0,41,2,114,37,0,0,0,114, + 44,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,218,10,95,99,97,108,99,95,109,111,100,101,108, + 1,0,0,115,12,0,0,0,0,2,2,1,14,1,14,1, + 10,3,8,1,114,100,0,0,0,99,1,0,0,0,0,0, + 0,0,3,0,0,0,11,0,0,0,3,0,0,0,115,68, + 0,0,0,100,6,135,0,102,1,100,2,100,3,132,9,125, + 1,121,10,116,0,106,1,125,2,87,0,110,28,4,0,116, + 2,107,10,114,52,1,0,1,0,1,0,100,4,100,5,132, + 0,125,2,89,0,110,2,88,0,124,2,124,1,136,0,131, + 2,1,0,124,1,83,0,41,7,122,252,68,101,99,111,114, + 97,116,111,114,32,116,111,32,118,101,114,105,102,121,32,116, + 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,98, + 101,105,110,103,32,114,101,113,117,101,115,116,101,100,32,109, + 97,116,99,104,101,115,32,116,104,101,32,111,110,101,32,116, + 104,101,10,32,32,32,32,108,111,97,100,101,114,32,99,97, + 110,32,104,97,110,100,108,101,46,10,10,32,32,32,32,84, + 104,101,32,102,105,114,115,116,32,97,114,103,117,109,101,110, + 116,32,40,115,101,108,102,41,32,109,117,115,116,32,100,101, + 102,105,110,101,32,95,110,97,109,101,32,119,104,105,99,104, + 32,116,104,101,32,115,101,99,111,110,100,32,97,114,103,117, + 109,101,110,116,32,105,115,10,32,32,32,32,99,111,109,112, + 97,114,101,100,32,97,103,97,105,110,115,116,46,32,73,102, + 32,116,104,101,32,99,111,109,112,97,114,105,115,111,110,32, + 102,97,105,108,115,32,116,104,101,110,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, + 46,10,10,32,32,32,32,78,99,2,0,0,0,0,0,0, + 0,4,0,0,0,5,0,0,0,31,0,0,0,115,64,0, + 0,0,124,1,100,0,107,8,114,16,124,0,106,0,125,1, + 110,34,124,0,106,0,124,1,107,3,114,50,116,1,100,1, + 124,0,106,0,124,1,102,2,22,0,100,2,124,1,144,1, + 131,1,130,1,136,0,124,0,124,1,124,2,124,3,142,2, + 83,0,41,3,78,122,30,108,111,97,100,101,114,32,102,111, + 114,32,37,115,32,99,97,110,110,111,116,32,104,97,110,100, + 108,101,32,37,115,218,4,110,97,109,101,41,2,114,101,0, + 0,0,218,11,73,109,112,111,114,116,69,114,114,111,114,41, + 4,218,4,115,101,108,102,114,101,0,0,0,218,4,97,114, + 103,115,90,6,107,119,97,114,103,115,41,1,218,6,109,101, + 116,104,111,100,114,4,0,0,0,114,6,0,0,0,218,19, + 95,99,104,101,99,107,95,110,97,109,101,95,119,114,97,112, + 112,101,114,128,1,0,0,115,12,0,0,0,0,1,8,1, + 8,1,10,1,4,1,20,1,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,3,0,0,0,7, + 0,0,0,83,0,0,0,115,60,0,0,0,120,40,100,5, + 68,0,93,32,125,2,116,0,124,1,124,2,131,2,114,6, + 116,1,124,0,124,2,116,2,124,1,124,2,131,2,131,3, + 1,0,113,6,87,0,124,0,106,3,106,4,124,1,106,3, + 131,1,1,0,100,0,83,0,41,6,78,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,4,122,10,95,95,109,111, + 100,117,108,101,95,95,122,8,95,95,110,97,109,101,95,95, + 122,12,95,95,113,117,97,108,110,97,109,101,95,95,122,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,55,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,5,95,119,114,97,112,139,1,0, + 0,115,8,0,0,0,0,1,10,1,10,1,22,1,122,26, + 95,99,104,101,99,107,95,110,97,109,101,46,60,108,111,99, + 97,108,115,62,46,95,119,114,97,112,41,1,78,41,3,218, + 10,95,98,111,111,116,115,116,114,97,112,114,116,0,0,0, + 218,9,78,97,109,101,69,114,114,111,114,41,3,114,105,0, + 0,0,114,106,0,0,0,114,116,0,0,0,114,4,0,0, + 0,41,1,114,105,0,0,0,114,6,0,0,0,218,11,95, + 99,104,101,99,107,95,110,97,109,101,120,1,0,0,115,14, + 0,0,0,0,8,14,7,2,1,10,1,14,2,14,5,10, + 1,114,119,0,0,0,99,2,0,0,0,0,0,0,0,5, + 0,0,0,4,0,0,0,67,0,0,0,115,60,0,0,0, + 124,0,106,0,124,1,131,1,92,2,125,2,125,3,124,2, + 100,1,107,8,114,56,116,1,124,3,131,1,114,56,100,2, + 125,4,116,2,106,3,124,4,106,4,124,3,100,3,25,0, + 131,1,116,5,131,2,1,0,124,2,83,0,41,4,122,155, + 84,114,121,32,116,111,32,102,105,110,100,32,97,32,108,111, + 97,100,101,114,32,102,111,114,32,116,104,101,32,115,112,101, + 99,105,102,105,101,100,32,109,111,100,117,108,101,32,98,121, + 32,100,101,108,101,103,97,116,105,110,103,32,116,111,10,32, + 32,32,32,115,101,108,102,46,102,105,110,100,95,108,111,97, + 100,101,114,40,41,46,10,10,32,32,32,32,84,104,105,115, + 32,109,101,116,104,111,100,32,105,115,32,100,101,112,114,101, + 99,97,116,101,100,32,105,110,32,102,97,118,111,114,32,111, + 102,32,102,105,110,100,101,114,46,102,105,110,100,95,115,112, + 101,99,40,41,46,10,10,32,32,32,32,78,122,44,78,111, + 116,32,105,109,112,111,114,116,105,110,103,32,100,105,114,101, + 99,116,111,114,121,32,123,125,58,32,109,105,115,115,105,110, + 103,32,95,95,105,110,105,116,95,95,114,62,0,0,0,41, + 6,218,11,102,105,110,100,95,108,111,97,100,101,114,114,33, + 0,0,0,114,63,0,0,0,114,64,0,0,0,114,50,0, + 0,0,218,13,73,109,112,111,114,116,87,97,114,110,105,110, + 103,41,5,114,103,0,0,0,218,8,102,117,108,108,110,97, + 109,101,218,6,108,111,97,100,101,114,218,8,112,111,114,116, + 105,111,110,115,218,3,109,115,103,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,17,95,102,105,110,100,95, + 109,111,100,117,108,101,95,115,104,105,109,148,1,0,0,115, + 10,0,0,0,0,10,14,1,16,1,4,1,22,1,114,126, + 0,0,0,99,4,0,0,0,0,0,0,0,11,0,0,0, + 19,0,0,0,67,0,0,0,115,128,1,0,0,105,0,125, + 4,124,2,100,1,107,9,114,22,124,2,124,4,100,2,60, + 0,110,4,100,3,125,2,124,3,100,1,107,9,114,42,124, + 3,124,4,100,4,60,0,124,0,100,1,100,5,133,2,25, + 0,125,5,124,0,100,5,100,6,133,2,25,0,125,6,124, + 0,100,6,100,7,133,2,25,0,125,7,124,5,116,0,107, + 3,114,122,100,8,106,1,124,2,124,5,131,2,125,8,116, + 2,106,3,100,9,124,8,131,2,1,0,116,4,124,8,124, + 4,141,1,130,1,110,86,116,5,124,6,131,1,100,5,107, + 3,114,166,100,10,106,1,124,2,131,1,125,8,116,2,106, + 3,100,9,124,8,131,2,1,0,116,6,124,8,131,1,130, + 1,110,42,116,5,124,7,131,1,100,5,107,3,114,208,100, + 11,106,1,124,2,131,1,125,8,116,2,106,3,100,9,124, + 8,131,2,1,0,116,6,124,8,131,1,130,1,124,1,100, + 1,107,9,144,1,114,116,121,16,116,7,124,1,100,12,25, + 0,131,1,125,9,87,0,110,20,4,0,116,8,107,10,114, + 254,1,0,1,0,1,0,89,0,110,48,88,0,116,9,124, + 6,131,1,124,9,107,3,144,1,114,46,100,13,106,1,124, + 2,131,1,125,8,116,2,106,3,100,9,124,8,131,2,1, + 0,116,4,124,8,124,4,141,1,130,1,121,16,124,1,100, + 14,25,0,100,15,64,0,125,10,87,0,110,22,4,0,116, + 8,107,10,144,1,114,84,1,0,1,0,1,0,89,0,110, + 32,88,0,116,9,124,7,131,1,124,10,107,3,144,1,114, + 116,116,4,100,13,106,1,124,2,131,1,124,4,141,1,130, + 1,124,0,100,7,100,1,133,2,25,0,83,0,41,16,97, + 122,1,0,0,86,97,108,105,100,97,116,101,32,116,104,101, + 32,104,101,97,100,101,114,32,111,102,32,116,104,101,32,112, + 97,115,115,101,100,45,105,110,32,98,121,116,101,99,111,100, + 101,32,97,103,97,105,110,115,116,32,115,111,117,114,99,101, + 95,115,116,97,116,115,32,40,105,102,10,32,32,32,32,103, + 105,118,101,110,41,32,97,110,100,32,114,101,116,117,114,110, + 105,110,103,32,116,104,101,32,98,121,116,101,99,111,100,101, + 32,116,104,97,116,32,99,97,110,32,98,101,32,99,111,109, + 112,105,108,101,100,32,98,121,32,99,111,109,112,105,108,101, + 40,41,46,10,10,32,32,32,32,65,108,108,32,111,116,104, + 101,114,32,97,114,103,117,109,101,110,116,115,32,97,114,101, + 32,117,115,101,100,32,116,111,32,101,110,104,97,110,99,101, + 32,101,114,114,111,114,32,114,101,112,111,114,116,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,116,104,101,32,98,121,116,101,99,111,100,101,32, + 105,115,10,32,32,32,32,102,111,117,110,100,32,116,111,32, + 98,101,32,115,116,97,108,101,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,10,32,32,32,32,116,114, + 117,110,99,97,116,101,100,46,10,10,32,32,32,32,78,114, + 101,0,0,0,122,10,60,98,121,116,101,99,111,100,101,62, + 114,37,0,0,0,114,14,0,0,0,233,8,0,0,0,233, + 12,0,0,0,122,30,98,97,100,32,109,97,103,105,99,32, + 110,117,109,98,101,114,32,105,110,32,123,33,114,125,58,32, + 123,33,114,125,122,2,123,125,122,43,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,116,105,109,101,115,116,97,109,112,32,105,110, + 32,123,33,114,125,122,48,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,115,105,122,101,32,111,102,32,115,111,117,114,99,101,32, + 105,110,32,123,33,114,125,218,5,109,116,105,109,101,122,26, + 98,121,116,101,99,111,100,101,32,105,115,32,115,116,97,108, + 101,32,102,111,114,32,123,33,114,125,218,4,115,105,122,101, + 108,3,0,0,0,255,127,255,127,3,0,41,10,218,12,77, + 65,71,73,67,95,78,85,77,66,69,82,114,50,0,0,0, + 114,117,0,0,0,218,16,95,118,101,114,98,111,115,101,95, + 109,101,115,115,97,103,101,114,102,0,0,0,114,33,0,0, + 0,218,8,69,79,70,69,114,114,111,114,114,16,0,0,0, + 218,8,75,101,121,69,114,114,111,114,114,21,0,0,0,41, + 11,114,56,0,0,0,218,12,115,111,117,114,99,101,95,115, + 116,97,116,115,114,101,0,0,0,114,37,0,0,0,90,11, + 101,120,99,95,100,101,116,97,105,108,115,90,5,109,97,103, + 105,99,90,13,114,97,119,95,116,105,109,101,115,116,97,109, + 112,90,8,114,97,119,95,115,105,122,101,114,78,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,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,25,95,118,97,108, + 105,100,97,116,101,95,98,121,116,101,99,111,100,101,95,104, + 101,97,100,101,114,165,1,0,0,115,76,0,0,0,0,11, + 4,1,8,1,10,3,4,1,8,1,8,1,12,1,12,1, + 12,1,8,1,12,1,12,1,12,1,12,1,10,1,12,1, + 10,1,12,1,10,1,12,1,8,1,10,1,2,1,16,1, + 14,1,6,2,14,1,10,1,12,1,10,1,2,1,16,1, + 16,1,6,2,14,1,10,1,6,1,114,138,0,0,0,99, + 4,0,0,0,0,0,0,0,5,0,0,0,6,0,0,0, + 67,0,0,0,115,86,0,0,0,116,0,106,1,124,0,131, + 1,125,4,116,2,124,4,116,3,131,2,114,58,116,4,106, + 5,100,1,124,2,131,2,1,0,124,3,100,2,107,9,114, + 52,116,6,106,7,124,4,124,3,131,2,1,0,124,4,83, + 0,110,24,116,8,100,3,106,9,124,2,131,1,100,4,124, + 1,100,5,124,2,144,2,131,1,130,1,100,2,83,0,41, + 6,122,60,67,111,109,112,105,108,101,32,98,121,116,101,99, + 111,100,101,32,97,115,32,114,101,116,117,114,110,101,100,32, + 98,121,32,95,118,97,108,105,100,97,116,101,95,98,121,116, + 101,99,111,100,101,95,104,101,97,100,101,114,40,41,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, + 114,101,0,0,0,114,37,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,117,0,0,0,114,132,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,102,0,0,0,114,50,0,0,0, + 41,5,114,56,0,0,0,114,101,0,0,0,114,92,0,0, + 0,114,93,0,0,0,218,4,99,111,100,101,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,17,95,99,111, + 109,112,105,108,101,95,98,121,116,101,99,111,100,101,220,1, + 0,0,115,16,0,0,0,0,2,10,1,10,1,12,1,8, + 1,12,1,6,2,12,1,114,144,0,0,0,114,62,0,0, + 0,99,3,0,0,0,0,0,0,0,4,0,0,0,3,0, + 0,0,67,0,0,0,115,56,0,0,0,116,0,116,1,131, + 1,125,3,124,3,106,2,116,3,124,1,131,1,131,1,1, + 0,124,3,106,2,116,3,124,2,131,1,131,1,1,0,124, + 3,106,2,116,4,106,5,124,0,131,1,131,1,1,0,124, + 3,83,0,41,1,122,80,67,111,109,112,105,108,101,32,97, + 32,99,111,100,101,32,111,98,106,101,99,116,32,105,110,116, + 111,32,98,121,116,101,99,111,100,101,32,102,111,114,32,119, + 114,105,116,105,110,103,32,111,117,116,32,116,111,32,97,32, + 98,121,116,101,45,99,111,109,112,105,108,101,100,10,32,32, + 32,32,102,105,108,101,46,41,6,218,9,98,121,116,101,97, + 114,114,97,121,114,131,0,0,0,218,6,101,120,116,101,110, + 100,114,19,0,0,0,114,139,0,0,0,90,5,100,117,109, + 112,115,41,4,114,143,0,0,0,114,129,0,0,0,114,137, + 0,0,0,114,56,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,218,17,95,99,111,100,101,95,116, + 111,95,98,121,116,101,99,111,100,101,232,1,0,0,115,10, + 0,0,0,0,3,8,1,14,1,14,1,16,1,114,147,0, + 0,0,99,1,0,0,0,0,0,0,0,5,0,0,0,4, + 0,0,0,67,0,0,0,115,62,0,0,0,100,1,100,2, + 108,0,125,1,116,1,106,2,124,0,131,1,106,3,125,2, + 124,1,106,4,124,2,131,1,125,3,116,1,106,5,100,2, + 100,3,131,2,125,4,124,4,106,6,124,0,106,6,124,3, + 100,1,25,0,131,1,131,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,62,0,0,0,78,84,41,7, + 218,8,116,111,107,101,110,105,122,101,114,52,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,148,0,0,0,90,21,115,111,117, + 114,99,101,95,98,121,116,101,115,95,114,101,97,100,108,105, + 110,101,218,8,101,110,99,111,100,105,110,103,90,15,110,101, + 119,108,105,110,101,95,100,101,99,111,100,101,114,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,13,100,101, + 99,111,100,101,95,115,111,117,114,99,101,242,1,0,0,115, + 10,0,0,0,0,5,8,1,12,1,10,1,12,1,114,152, + 0,0,0,41,2,114,123,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,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,218,6,111, - 114,105,103,105,110,84,218,10,105,115,95,112,97,99,107,97, - 103,101,114,60,0,0,0,41,15,114,109,0,0,0,114,152, - 0,0,0,114,100,0,0,0,114,115,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,93,0,0,0,114,94,0,0,0,114, - 121,0,0,0,218,9,95,80,79,80,85,76,65,84,69,114, - 154,0,0,0,114,151,0,0,0,114,38,0,0,0,218,6, - 97,112,112,101,110,100,41,9,114,99,0,0,0,90,8,108, - 111,99,97,116,105,111,110,114,121,0,0,0,114,151,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, - 154,0,0,0,90,7,100,105,114,110,97,109,101,114,4,0, - 0,0,114,4,0,0,0,114,5,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,253,1,0,0,115,60,0,0,0,0,12, - 8,4,4,1,10,2,2,1,14,1,14,1,6,8,18,1, - 6,3,8,1,16,1,14,1,10,1,6,1,6,2,4,3, - 8,2,10,1,2,1,14,1,14,1,6,2,4,1,8,2, - 6,1,12,1,6,1,12,1,12,2,114,162,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,80,0,0,0,101,0,90,1,100,0,90, - 2,100,1,90,3,100,2,90,4,100,3,90,5,100,4,90, - 6,101,7,100,5,100,6,132,0,131,1,90,8,101,7,100, - 7,100,8,132,0,131,1,90,9,101,7,100,14,100,10,100, - 11,132,1,131,1,90,10,101,7,100,15,100,12,100,13,132, - 1,131,1,90,11,100,9,83,0,41,16,218,21,87,105,110, - 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,122,62,77,101,116,97,32,112,97,116,104,32,102,105, - 110,100,101,114,32,102,111,114,32,109,111,100,117,108,101,115, - 32,100,101,99,108,97,114,101,100,32,105,110,32,116,104,101, - 32,87,105,110,100,111,119,115,32,114,101,103,105,115,116,114, - 121,46,122,59,83,111,102,116,119,97,114,101,92,80,121,116, - 104,111,110,92,80,121,116,104,111,110,67,111,114,101,92,123, - 115,121,115,95,118,101,114,115,105,111,110,125,92,77,111,100, - 117,108,101,115,92,123,102,117,108,108,110,97,109,101,125,122, - 65,83,111,102,116,119,97,114,101,92,80,121,116,104,111,110, - 92,80,121,116,104,111,110,67,111,114,101,92,123,115,121,115, - 95,118,101,114,115,105,111,110,125,92,77,111,100,117,108,101, - 115,92,123,102,117,108,108,110,97,109,101,125,92,68,101,98, - 117,103,70,99,2,0,0,0,0,0,0,0,2,0,0,0, - 11,0,0,0,67,0,0,0,115,50,0,0,0,121,14,116, - 0,106,1,116,0,106,2,124,1,131,2,83,0,4,0,116, - 3,107,10,114,44,1,0,1,0,1,0,116,0,106,1,116, - 0,106,4,124,1,131,2,83,0,88,0,100,0,83,0,41, - 1,78,41,5,218,7,95,119,105,110,114,101,103,90,7,79, - 112,101,110,75,101,121,90,17,72,75,69,89,95,67,85,82, - 82,69,78,84,95,85,83,69,82,114,40,0,0,0,90,18, - 72,75,69,89,95,76,79,67,65,76,95,77,65,67,72,73, - 78,69,41,2,218,3,99,108,115,218,3,107,101,121,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,14,95, - 111,112,101,110,95,114,101,103,105,115,116,114,121,75,2,0, - 0,115,8,0,0,0,0,2,2,1,14,1,14,1,122,36, - 87,105,110,100,111,119,115,82,101,103,105,115,116,114,121,70, - 105,110,100,101,114,46,95,111,112,101,110,95,114,101,103,105, - 115,116,114,121,99,2,0,0,0,0,0,0,0,6,0,0, - 0,16,0,0,0,67,0,0,0,115,116,0,0,0,124,0, - 106,0,114,14,124,0,106,1,125,2,110,6,124,0,106,2, - 125,2,124,2,106,3,100,1,124,1,100,2,100,3,116,4, - 106,5,100,0,100,4,133,2,25,0,22,0,144,2,131,0, - 125,3,121,38,124,0,106,6,124,3,131,1,143,18,125,4, - 116,7,106,8,124,4,100,5,131,2,125,5,87,0,100,0, - 81,0,82,0,88,0,87,0,110,20,4,0,116,9,107,10, - 114,110,1,0,1,0,1,0,100,0,83,0,88,0,124,5, - 83,0,41,6,78,114,120,0,0,0,90,11,115,121,115,95, - 118,101,114,115,105,111,110,122,5,37,100,46,37,100,114,57, - 0,0,0,114,30,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,48,0,0,0,114,7, - 0,0,0,218,12,118,101,114,115,105,111,110,95,105,110,102, - 111,114,167,0,0,0,114,164,0,0,0,90,10,81,117,101, - 114,121,86,97,108,117,101,114,40,0,0,0,41,6,114,165, - 0,0,0,114,120,0,0,0,90,12,114,101,103,105,115,116, - 114,121,95,107,101,121,114,166,0,0,0,90,4,104,107,101, - 121,218,8,102,105,108,101,112,97,116,104,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,16,95,115,101,97, - 114,99,104,95,114,101,103,105,115,116,114,121,82,2,0,0, - 115,22,0,0,0,0,2,6,1,8,2,6,1,10,1,22, - 1,2,1,12,1,26,1,14,1,6,1,122,38,87,105,110, - 100,111,119,115,82,101,103,105,115,116,114,121,70,105,110,100, - 101,114,46,95,115,101,97,114,99,104,95,114,101,103,105,115, - 116,114,121,78,99,4,0,0,0,0,0,0,0,8,0,0, - 0,14,0,0,0,67,0,0,0,115,122,0,0,0,124,0, - 106,0,124,1,131,1,125,4,124,4,100,0,107,8,114,22, - 100,0,83,0,121,12,116,1,124,4,131,1,1,0,87,0, - 110,20,4,0,116,2,107,10,114,54,1,0,1,0,1,0, - 100,0,83,0,88,0,120,60,116,3,131,0,68,0,93,50, - 92,2,125,5,125,6,124,4,106,4,116,5,124,6,131,1, - 131,1,114,64,116,6,106,7,124,1,124,5,124,1,124,4, - 131,2,100,1,124,4,144,1,131,2,125,7,124,7,83,0, - 113,64,87,0,100,0,83,0,41,2,78,114,153,0,0,0, - 41,8,114,173,0,0,0,114,39,0,0,0,114,40,0,0, - 0,114,156,0,0,0,114,93,0,0,0,114,94,0,0,0, - 114,115,0,0,0,218,16,115,112,101,99,95,102,114,111,109, - 95,108,111,97,100,101,114,41,8,114,165,0,0,0,114,120, - 0,0,0,114,35,0,0,0,218,6,116,97,114,103,101,116, - 114,172,0,0,0,114,121,0,0,0,114,161,0,0,0,114, - 159,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,9,102,105,110,100,95,115,112,101,99,97,2, - 0,0,115,26,0,0,0,0,2,10,1,8,1,4,1,2, - 1,12,1,14,1,6,1,16,1,14,1,6,1,10,1,8, - 1,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,4,0,0,0,3, - 0,0,0,67,0,0,0,115,36,0,0,0,124,0,106,0, - 124,1,124,2,131,2,125,3,124,3,100,1,107,9,114,28, - 124,3,106,1,83,0,110,4,100,1,83,0,100,1,83,0, - 41,2,122,108,70,105,110,100,32,109,111,100,117,108,101,32, - 110,97,109,101,100,32,105,110,32,116,104,101,32,114,101,103, - 105,115,116,114,121,46,10,10,32,32,32,32,32,32,32,32, - 84,104,105,115,32,109,101,116,104,111,100,32,105,115,32,100, - 101,112,114,101,99,97,116,101,100,46,32,32,85,115,101,32, - 101,120,101,99,95,109,111,100,117,108,101,40,41,32,105,110, - 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, - 78,41,2,114,176,0,0,0,114,121,0,0,0,41,4,114, - 165,0,0,0,114,120,0,0,0,114,35,0,0,0,114,159, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,11,102,105,110,100,95,109,111,100,117,108,101,113, - 2,0,0,115,8,0,0,0,0,7,12,1,8,1,8,2, - 122,33,87,105,110,100,111,119,115,82,101,103,105,115,116,114, - 121,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, - 117,108,101,41,2,78,78,41,1,78,41,12,114,106,0,0, - 0,114,105,0,0,0,114,107,0,0,0,114,108,0,0,0, - 114,170,0,0,0,114,169,0,0,0,114,168,0,0,0,218, - 11,99,108,97,115,115,109,101,116,104,111,100,114,167,0,0, - 0,114,173,0,0,0,114,176,0,0,0,114,177,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,163,0,0,0,63,2,0,0,115,20,0, - 0,0,8,2,4,3,4,3,4,2,4,2,12,7,12,15, - 2,1,12,15,2,1,114,163,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,5,0,0,0,3,0,0,0,67,0,0,0, - 115,64,0,0,0,116,0,124,0,106,1,124,1,131,1,131, - 1,100,1,25,0,125,2,124,2,106,2,100,2,100,1,131, - 2,100,3,25,0,125,3,124,1,106,3,100,2,131,1,100, - 4,25,0,125,4,124,3,100,5,107,2,111,62,124,4,100, - 5,107,3,83,0,41,6,122,141,67,111,110,99,114,101,116, - 101,32,105,109,112,108,101,109,101,110,116,97,116,105,111,110, - 32,111,102,32,73,110,115,112,101,99,116,76,111,97,100,101, - 114,46,105,115,95,112,97,99,107,97,103,101,32,98,121,32, - 99,104,101,99,107,105,110,103,32,105,102,10,32,32,32,32, - 32,32,32,32,116,104,101,32,112,97,116,104,32,114,101,116, - 117,114,110,101,100,32,98,121,32,103,101,116,95,102,105,108, - 101,110,97,109,101,32,104,97,115,32,97,32,102,105,108,101, - 110,97,109,101,32,111,102,32,39,95,95,105,110,105,116,95, - 95,46,112,121,39,46,114,29,0,0,0,114,59,0,0,0, - 114,60,0,0,0,114,57,0,0,0,218,8,95,95,105,110, - 105,116,95,95,41,4,114,38,0,0,0,114,152,0,0,0, - 114,34,0,0,0,114,32,0,0,0,41,5,114,101,0,0, - 0,114,120,0,0,0,114,95,0,0,0,90,13,102,105,108, - 101,110,97,109,101,95,98,97,115,101,90,9,116,97,105,108, - 95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,154,0,0,0,132,2,0,0,115,8,0, - 0,0,0,3,18,1,16,1,14,1,122,24,95,76,111,97, - 100,101,114,66,97,115,105,99,115,46,105,115,95,112,97,99, - 107,97,103,101,99,2,0,0,0,0,0,0,0,2,0,0, - 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,1, - 83,0,41,2,122,42,85,115,101,32,100,101,102,97,117,108, - 116,32,115,101,109,97,110,116,105,99,115,32,102,111,114,32, - 109,111,100,117,108,101,32,99,114,101,97,116,105,111,110,46, - 78,114,4,0,0,0,41,2,114,101,0,0,0,114,159,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,218,13,99,114,101,97,116,101,95,109,111,100,117,108,101, - 140,2,0,0,115,0,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,3, - 0,0,0,4,0,0,0,67,0,0,0,115,56,0,0,0, - 124,0,106,0,124,1,106,1,131,1,125,2,124,2,100,1, - 107,8,114,36,116,2,100,2,106,3,124,1,106,1,131,1, - 131,1,130,1,116,4,106,5,116,6,124,2,124,1,106,7, - 131,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,106,0,0,0,114,100,0,0,0,114,48,0,0, - 0,114,115,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,112,0,0,0,41,3,114,101, - 0,0,0,218,6,109,111,100,117,108,101,114,141,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 11,101,120,101,99,95,109,111,100,117,108,101,143,2,0,0, - 115,10,0,0,0,0,2,12,1,8,1,6,1,10,1,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,2,0,0,0,3,0,0,0,67,0,0,0,115, - 12,0,0,0,116,0,106,1,124,0,124,1,131,2,83,0, - 41,1,122,26,84,104,105,115,32,109,111,100,117,108,101,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,41,2, - 114,115,0,0,0,218,17,95,108,111,97,100,95,109,111,100, - 117,108,101,95,115,104,105,109,41,2,114,101,0,0,0,114, - 120,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,11,108,111,97,100,95,109,111,100,117,108,101, - 151,2,0,0,115,2,0,0,0,0,2,122,25,95,76,111, - 97,100,101,114,66,97,115,105,99,115,46,108,111,97,100,95, - 109,111,100,117,108,101,78,41,8,114,106,0,0,0,114,105, - 0,0,0,114,107,0,0,0,114,108,0,0,0,114,154,0, - 0,0,114,181,0,0,0,114,186,0,0,0,114,188,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,179,0,0,0,127,2,0,0,115,10, - 0,0,0,8,3,4,2,8,8,8,3,8,8,114,179,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,18,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,19,218,12,83,111,117,114,99,101, - 76,111,97,100,101,114,99,2,0,0,0,0,0,0,0,2, - 0,0,0,1,0,0,0,67,0,0,0,115,8,0,0,0, - 116,0,130,1,100,1,83,0,41,2,122,178,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,44,32,119,104,101,114,101,32,112,97, - 116,104,32,105,115,32,97,32,115,116,114,46,10,10,32,32, - 32,32,32,32,32,32,82,97,105,115,101,115,32,73,79,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,218,7,73,79,69,114,114,111,114,41,2,114,101,0,0, - 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,10,112,97,116,104,95,109,116,105,109, - 101,158,2,0,0,115,2,0,0,0,0,6,122,23,83,111, - 117,114,99,101,76,111,97,100,101,114,46,112,97,116,104,95, - 109,116,105,109,101,99,2,0,0,0,0,0,0,0,2,0, - 0,0,3,0,0,0,67,0,0,0,115,14,0,0,0,100, - 1,124,0,106,0,124,1,131,1,105,1,83,0,41,2,97, - 170,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,32, - 112,97,116,104,10,32,32,32,32,32,32,32,32,116,111,32, - 98,121,32,116,104,101,32,112,97,116,104,32,40,115,116,114, - 41,46,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, + 97,116,105,111,110,115,99,2,0,0,0,2,0,0,0,9, + 0,0,0,19,0,0,0,67,0,0,0,115,8,1,0,0, + 124,1,100,1,107,8,114,58,100,2,125,1,116,0,124,2, + 100,3,131,2,114,58,121,14,124,2,106,1,124,0,131,1, + 125,1,87,0,110,20,4,0,116,2,107,10,114,56,1,0, + 1,0,1,0,89,0,110,2,88,0,116,3,106,4,124,0, + 124,2,100,4,124,1,144,1,131,2,125,4,100,5,124,4, + 95,5,124,2,100,1,107,8,114,146,120,54,116,6,131,0, + 68,0,93,40,92,2,125,5,125,6,124,1,106,7,116,8, + 124,6,131,1,131,1,114,98,124,5,124,0,124,1,131,2, + 125,2,124,2,124,4,95,9,80,0,113,98,87,0,100,1, + 83,0,124,3,116,10,107,8,114,212,116,0,124,2,100,6, + 131,2,114,218,121,14,124,2,106,11,124,0,131,1,125,7, + 87,0,110,20,4,0,116,2,107,10,114,198,1,0,1,0, + 1,0,89,0,113,218,88,0,124,7,114,218,103,0,124,4, + 95,12,110,6,124,3,124,4,95,12,124,4,106,12,103,0, + 107,2,144,1,114,4,124,1,144,1,114,4,116,13,124,1, + 131,1,100,7,25,0,125,8,124,4,106,12,106,14,124,8, + 131,1,1,0,124,4,83,0,41,8,97,61,1,0,0,82, + 101,116,117,114,110,32,97,32,109,111,100,117,108,101,32,115, + 112,101,99,32,98,97,115,101,100,32,111,110,32,97,32,102, + 105,108,101,32,108,111,99,97,116,105,111,110,46,10,10,32, + 32,32,32,84,111,32,105,110,100,105,99,97,116,101,32,116, + 104,97,116,32,116,104,101,32,109,111,100,117,108,101,32,105, + 115,32,97,32,112,97,99,107,97,103,101,44,32,115,101,116, + 10,32,32,32,32,115,117,98,109,111,100,117,108,101,95,115, + 101,97,114,99,104,95,108,111,99,97,116,105,111,110,115,32, + 116,111,32,97,32,108,105,115,116,32,111,102,32,100,105,114, + 101,99,116,111,114,121,32,112,97,116,104,115,46,32,32,65, + 110,10,32,32,32,32,101,109,112,116,121,32,108,105,115,116, + 32,105,115,32,115,117,102,102,105,99,105,101,110,116,44,32, + 116,104,111,117,103,104,32,105,116,115,32,110,111,116,32,111, + 116,104,101,114,119,105,115,101,32,117,115,101,102,117,108,32, + 116,111,32,116,104,101,10,32,32,32,32,105,109,112,111,114, + 116,32,115,121,115,116,101,109,46,10,10,32,32,32,32,84, + 104,101,32,108,111,97,100,101,114,32,109,117,115,116,32,116, + 97,107,101,32,97,32,115,112,101,99,32,97,115,32,105,116, + 115,32,111,110,108,121,32,95,95,105,110,105,116,95,95,40, + 41,32,97,114,103,46,10,10,32,32,32,32,78,122,9,60, + 117,110,107,110,111,119,110,62,218,12,103,101,116,95,102,105, + 108,101,110,97,109,101,218,6,111,114,105,103,105,110,84,218, + 10,105,115,95,112,97,99,107,97,103,101,114,62,0,0,0, + 41,15,114,111,0,0,0,114,154,0,0,0,114,102,0,0, + 0,114,117,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,95, + 0,0,0,114,96,0,0,0,114,123,0,0,0,218,9,95, + 80,79,80,85,76,65,84,69,114,156,0,0,0,114,153,0, + 0,0,114,40,0,0,0,218,6,97,112,112,101,110,100,41, + 9,114,101,0,0,0,90,8,108,111,99,97,116,105,111,110, + 114,123,0,0,0,114,153,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,156,0,0,0,90,7,100, + 105,114,110,97,109,101,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,23,115,112,101,99,95,102,114,111,109, + 95,102,105,108,101,95,108,111,99,97,116,105,111,110,3,2, + 0,0,115,60,0,0,0,0,12,8,4,4,1,10,2,2, + 1,14,1,14,1,6,8,18,1,6,3,8,1,16,1,14, + 1,10,1,6,1,6,2,4,3,8,2,10,1,2,1,14, + 1,14,1,6,2,4,1,8,2,6,1,12,1,6,1,12, + 1,12,2,114,164,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,80,0, + 0,0,101,0,90,1,100,0,90,2,100,1,90,3,100,2, + 90,4,100,3,90,5,100,4,90,6,101,7,100,5,100,6, + 132,0,131,1,90,8,101,7,100,7,100,8,132,0,131,1, + 90,9,101,7,100,14,100,10,100,11,132,1,131,1,90,10, + 101,7,100,15,100,12,100,13,132,1,131,1,90,11,100,9, + 83,0,41,16,218,21,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,122,62,77,101,116, + 97,32,112,97,116,104,32,102,105,110,100,101,114,32,102,111, + 114,32,109,111,100,117,108,101,115,32,100,101,99,108,97,114, + 101,100,32,105,110,32,116,104,101,32,87,105,110,100,111,119, + 115,32,114,101,103,105,115,116,114,121,46,122,59,83,111,102, + 116,119,97,114,101,92,80,121,116,104,111,110,92,80,121,116, + 104,111,110,67,111,114,101,92,123,115,121,115,95,118,101,114, + 115,105,111,110,125,92,77,111,100,117,108,101,115,92,123,102, + 117,108,108,110,97,109,101,125,122,65,83,111,102,116,119,97, + 114,101,92,80,121,116,104,111,110,92,80,121,116,104,111,110, + 67,111,114,101,92,123,115,121,115,95,118,101,114,115,105,111, + 110,125,92,77,111,100,117,108,101,115,92,123,102,117,108,108, + 110,97,109,101,125,92,68,101,98,117,103,70,99,2,0,0, + 0,0,0,0,0,2,0,0,0,11,0,0,0,67,0,0, + 0,115,50,0,0,0,121,14,116,0,106,1,116,0,106,2, + 124,1,131,2,83,0,4,0,116,3,107,10,114,44,1,0, + 1,0,1,0,116,0,106,1,116,0,106,4,124,1,131,2, + 83,0,88,0,100,0,83,0,41,1,78,41,5,218,7,95, + 119,105,110,114,101,103,90,7,79,112,101,110,75,101,121,90, + 17,72,75,69,89,95,67,85,82,82,69,78,84,95,85,83, + 69,82,114,42,0,0,0,90,18,72,75,69,89,95,76,79, + 67,65,76,95,77,65,67,72,73,78,69,41,2,218,3,99, + 108,115,114,5,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,14,95,111,112,101,110,95,114,101, + 103,105,115,116,114,121,81,2,0,0,115,8,0,0,0,0, + 2,2,1,14,1,14,1,122,36,87,105,110,100,111,119,115, + 82,101,103,105,115,116,114,121,70,105,110,100,101,114,46,95, + 111,112,101,110,95,114,101,103,105,115,116,114,121,99,2,0, + 0,0,0,0,0,0,6,0,0,0,16,0,0,0,67,0, + 0,0,115,116,0,0,0,124,0,106,0,114,14,124,0,106, + 1,125,2,110,6,124,0,106,2,125,2,124,2,106,3,100, + 1,124,1,100,2,100,3,116,4,106,5,100,0,100,4,133, + 2,25,0,22,0,144,2,131,0,125,3,121,38,124,0,106, + 6,124,3,131,1,143,18,125,4,116,7,106,8,124,4,100, + 5,131,2,125,5,87,0,100,0,81,0,82,0,88,0,87, + 0,110,20,4,0,116,9,107,10,114,110,1,0,1,0,1, + 0,100,0,83,0,88,0,124,5,83,0,41,6,78,114,122, + 0,0,0,90,11,115,121,115,95,118,101,114,115,105,111,110, + 122,5,37,100,46,37,100,114,59,0,0,0,114,32,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,50,0,0,0,114,8,0,0,0,218,12,118,101, + 114,115,105,111,110,95,105,110,102,111,114,168,0,0,0,114, + 166,0,0,0,90,10,81,117,101,114,121,86,97,108,117,101, + 114,42,0,0,0,41,6,114,167,0,0,0,114,122,0,0, + 0,90,12,114,101,103,105,115,116,114,121,95,107,101,121,114, + 5,0,0,0,90,4,104,107,101,121,218,8,102,105,108,101, + 112,97,116,104,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,218,16,95,115,101,97,114,99,104,95,114,101,103, + 105,115,116,114,121,88,2,0,0,115,22,0,0,0,0,2, + 6,1,8,2,6,1,10,1,22,1,2,1,12,1,26,1, + 14,1,6,1,122,38,87,105,110,100,111,119,115,82,101,103, + 105,115,116,114,121,70,105,110,100,101,114,46,95,115,101,97, + 114,99,104,95,114,101,103,105,115,116,114,121,78,99,4,0, + 0,0,0,0,0,0,8,0,0,0,14,0,0,0,67,0, + 0,0,115,122,0,0,0,124,0,106,0,124,1,131,1,125, + 4,124,4,100,0,107,8,114,22,100,0,83,0,121,12,116, + 1,124,4,131,1,1,0,87,0,110,20,4,0,116,2,107, + 10,114,54,1,0,1,0,1,0,100,0,83,0,88,0,120, + 60,116,3,131,0,68,0,93,50,92,2,125,5,125,6,124, + 4,106,4,116,5,124,6,131,1,131,1,114,64,116,6,106, + 7,124,1,124,5,124,1,124,4,131,2,100,1,124,4,144, + 1,131,2,125,7,124,7,83,0,113,64,87,0,100,0,83, + 0,41,2,78,114,155,0,0,0,41,8,114,174,0,0,0, + 114,41,0,0,0,114,42,0,0,0,114,158,0,0,0,114, + 95,0,0,0,114,96,0,0,0,114,117,0,0,0,218,16, + 115,112,101,99,95,102,114,111,109,95,108,111,97,100,101,114, + 41,8,114,167,0,0,0,114,122,0,0,0,114,37,0,0, + 0,218,6,116,97,114,103,101,116,114,173,0,0,0,114,123, + 0,0,0,114,163,0,0,0,114,161,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,9,102,105, + 110,100,95,115,112,101,99,103,2,0,0,115,26,0,0,0, + 0,2,10,1,8,1,4,1,2,1,12,1,14,1,6,1, + 16,1,14,1,6,1,10,1,8,1,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,4,0,0,0,3,0,0,0,67,0,0,0, + 115,36,0,0,0,124,0,106,0,124,1,124,2,131,2,125, + 3,124,3,100,1,107,9,114,28,124,3,106,1,83,0,110, + 4,100,1,83,0,100,1,83,0,41,2,122,108,70,105,110, + 100,32,109,111,100,117,108,101,32,110,97,109,101,100,32,105, + 110,32,116,104,101,32,114,101,103,105,115,116,114,121,46,10, + 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, + 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, + 101,100,46,32,32,85,115,101,32,101,120,101,99,95,109,111, + 100,117,108,101,40,41,32,105,110,115,116,101,97,100,46,10, + 10,32,32,32,32,32,32,32,32,78,41,2,114,177,0,0, + 0,114,123,0,0,0,41,4,114,167,0,0,0,114,122,0, + 0,0,114,37,0,0,0,114,161,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,11,102,105,110, + 100,95,109,111,100,117,108,101,119,2,0,0,115,8,0,0, + 0,0,7,12,1,8,1,8,2,122,33,87,105,110,100,111, + 119,115,82,101,103,105,115,116,114,121,70,105,110,100,101,114, + 46,102,105,110,100,95,109,111,100,117,108,101,41,2,78,78, + 41,1,78,41,12,114,108,0,0,0,114,107,0,0,0,114, + 109,0,0,0,114,110,0,0,0,114,171,0,0,0,114,170, + 0,0,0,114,169,0,0,0,218,11,99,108,97,115,115,109, + 101,116,104,111,100,114,168,0,0,0,114,174,0,0,0,114, + 177,0,0,0,114,178,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,165,0, + 0,0,69,2,0,0,115,20,0,0,0,8,2,4,3,4, + 3,4,2,4,2,12,7,12,15,2,1,12,15,2,1,114, + 165,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,5,0,0, + 0,3,0,0,0,67,0,0,0,115,64,0,0,0,116,0, + 124,0,106,1,124,1,131,1,131,1,100,1,25,0,125,2, + 124,2,106,2,100,2,100,1,131,2,100,3,25,0,125,3, + 124,1,106,3,100,2,131,1,100,4,25,0,125,4,124,3, + 100,5,107,2,111,62,124,4,100,5,107,3,83,0,41,6, + 122,141,67,111,110,99,114,101,116,101,32,105,109,112,108,101, + 109,101,110,116,97,116,105,111,110,32,111,102,32,73,110,115, + 112,101,99,116,76,111,97,100,101,114,46,105,115,95,112,97, + 99,107,97,103,101,32,98,121,32,99,104,101,99,107,105,110, + 103,32,105,102,10,32,32,32,32,32,32,32,32,116,104,101, + 32,112,97,116,104,32,114,101,116,117,114,110,101,100,32,98, + 121,32,103,101,116,95,102,105,108,101,110,97,109,101,32,104, + 97,115,32,97,32,102,105,108,101,110,97,109,101,32,111,102, + 32,39,95,95,105,110,105,116,95,95,46,112,121,39,46,114, + 31,0,0,0,114,61,0,0,0,114,62,0,0,0,114,59, + 0,0,0,218,8,95,95,105,110,105,116,95,95,41,4,114, + 40,0,0,0,114,154,0,0,0,114,36,0,0,0,114,34, + 0,0,0,41,5,114,103,0,0,0,114,122,0,0,0,114, + 97,0,0,0,90,13,102,105,108,101,110,97,109,101,95,98, + 97,115,101,90,9,116,97,105,108,95,110,97,109,101,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,156,0, + 0,0,138,2,0,0,115,8,0,0,0,0,3,18,1,16, + 1,14,1,122,24,95,76,111,97,100,101,114,66,97,115,105, + 99,115,46,105,115,95,112,97,99,107,97,103,101,99,2,0, + 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, + 0,0,115,4,0,0,0,100,1,83,0,41,2,122,42,85, + 115,101,32,100,101,102,97,117,108,116,32,115,101,109,97,110, + 116,105,99,115,32,102,111,114,32,109,111,100,117,108,101,32, + 99,114,101,97,116,105,111,110,46,78,114,4,0,0,0,41, + 2,114,103,0,0,0,114,161,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,218,13,99,114,101,97, + 116,101,95,109,111,100,117,108,101,146,2,0,0,115,0,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,3,0,0,0,4,0,0,0, + 67,0,0,0,115,56,0,0,0,124,0,106,0,124,1,106, + 1,131,1,125,2,124,2,100,1,107,8,114,36,116,2,100, + 2,106,3,124,1,106,1,131,1,131,1,130,1,116,4,106, + 5,116,6,124,2,124,1,106,7,131,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,108,0,0,0, + 114,102,0,0,0,114,50,0,0,0,114,117,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,114,0,0,0,41,3,114,103,0,0,0,218,6,109,111, + 100,117,108,101,114,143,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,11,101,120,101,99,95,109, + 111,100,117,108,101,149,2,0,0,115,10,0,0,0,0,2, + 12,1,8,1,6,1,10,1,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,2,0,0,0, + 3,0,0,0,67,0,0,0,115,12,0,0,0,116,0,106, + 1,124,0,124,1,131,2,83,0,41,1,122,26,84,104,105, + 115,32,109,111,100,117,108,101,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,41,2,114,117,0,0,0,218,17, + 95,108,111,97,100,95,109,111,100,117,108,101,95,115,104,105, + 109,41,2,114,103,0,0,0,114,122,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,11,108,111, + 97,100,95,109,111,100,117,108,101,157,2,0,0,115,2,0, + 0,0,0,2,122,25,95,76,111,97,100,101,114,66,97,115, + 105,99,115,46,108,111,97,100,95,109,111,100,117,108,101,78, + 41,8,114,108,0,0,0,114,107,0,0,0,114,109,0,0, + 0,114,110,0,0,0,114,156,0,0,0,114,182,0,0,0, + 114,187,0,0,0,114,189,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,180, + 0,0,0,133,2,0,0,115,10,0,0,0,8,3,4,2, + 8,8,8,3,8,8,114,180,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,18,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, + 19,218,12,83,111,117,114,99,101,76,111,97,100,101,114,99, + 2,0,0,0,0,0,0,0,2,0,0,0,1,0,0,0, + 67,0,0,0,115,8,0,0,0,116,0,130,1,100,1,83, + 0,41,2,122,178,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,44, + 32,119,104,101,114,101,32,112,97,116,104,32,105,115,32,97, + 32,115,116,114,46,10,10,32,32,32,32,32,32,32,32,82, + 97,105,115,101,115,32,73,79,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,218,7,73,79,69,114, + 114,111,114,41,2,114,103,0,0,0,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,10, + 112,97,116,104,95,109,116,105,109,101,164,2,0,0,115,2, + 0,0,0,0,6,122,23,83,111,117,114,99,101,76,111,97, + 100,101,114,46,112,97,116,104,95,109,116,105,109,101,99,2, + 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,67, + 0,0,0,115,14,0,0,0,100,1,124,0,106,0,124,1, + 131,1,105,1,83,0,41,2,97,170,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,32,112,97,116,104,10,32,32, + 32,32,32,32,32,32,116,111,32,98,121,32,116,104,101,32, + 112,97,116,104,32,40,115,116,114,41,46,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,73,79,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,129,0,0,0,41,1,114,192, + 0,0,0,41,2,114,103,0,0,0,114,37,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,218,10, + 112,97,116,104,95,115,116,97,116,115,172,2,0,0,115,2, + 0,0,0,0,11,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,4,0,0,0,3,0,0,0,67, + 0,0,0,115,12,0,0,0,124,0,106,0,124,2,124,3, + 131,2,83,0,41,1,122,228,79,112,116,105,111,110,97,108, + 32,109,101,116,104,111,100,32,119,104,105,99,104,32,119,114, + 105,116,101,115,32,100,97,116,97,32,40,98,121,116,101,115, + 41,32,116,111,32,97,32,102,105,108,101,32,112,97,116,104, + 32,40,97,32,115,116,114,41,46,10,10,32,32,32,32,32, + 32,32,32,73,109,112,108,101,109,101,110,116,105,110,103,32, + 116,104,105,115,32,109,101,116,104,111,100,32,97,108,108,111, + 119,115,32,102,111,114,32,116,104,101,32,119,114,105,116,105, + 110,103,32,111,102,32,98,121,116,101,99,111,100,101,32,102, + 105,108,101,115,46,10,10,32,32,32,32,32,32,32,32,84, + 104,101,32,115,111,117,114,99,101,32,112,97,116,104,32,105, + 115,32,110,101,101,100,101,100,32,105,110,32,111,114,100,101, + 114,32,116,111,32,99,111,114,114,101,99,116,108,121,32,116, + 114,97,110,115,102,101,114,32,112,101,114,109,105,115,115,105, + 111,110,115,10,32,32,32,32,32,32,32,32,41,1,218,8, + 115,101,116,95,100,97,116,97,41,4,114,103,0,0,0,114, + 93,0,0,0,90,10,99,97,99,104,101,95,112,97,116,104, + 114,56,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,15,95,99,97,99,104,101,95,98,121,116, + 101,99,111,100,101,185,2,0,0,115,2,0,0,0,0,8, + 122,28,83,111,117,114,99,101,76,111,97,100,101,114,46,95, + 99,97,99,104,101,95,98,121,116,101,99,111,100,101,99,3, + 0,0,0,0,0,0,0,3,0,0,0,1,0,0,0,67, + 0,0,0,115,4,0,0,0,100,1,83,0,41,2,122,150, + 79,112,116,105,111,110,97,108,32,109,101,116,104,111,100,32, + 119,104,105,99,104,32,119,114,105,116,101,115,32,100,97,116, + 97,32,40,98,121,116,101,115,41,32,116,111,32,97,32,102, + 105,108,101,32,112,97,116,104,32,40,97,32,115,116,114,41, 46,10,10,32,32,32,32,32,32,32,32,73,109,112,108,101, 109,101,110,116,105,110,103,32,116,104,105,115,32,109,101,116, - 104,111,100,32,97,108,108,111,119,115,32,116,104,101,32,108, - 111,97,100,101,114,32,116,111,32,114,101,97,100,32,98,121, + 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,82,97,105,115,101,115,32,73,79,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,127, - 0,0,0,41,1,114,191,0,0,0,41,2,114,101,0,0, - 0,114,35,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,218,10,112,97,116,104,95,115,116,97,116, - 115,166,2,0,0,115,2,0,0,0,0,11,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,4,0, - 0,0,3,0,0,0,67,0,0,0,115,12,0,0,0,124, - 0,106,0,124,2,124,3,131,2,83,0,41,1,122,228,79, - 112,116,105,111,110,97,108,32,109,101,116,104,111,100,32,119, - 104,105,99,104,32,119,114,105,116,101,115,32,100,97,116,97, - 32,40,98,121,116,101,115,41,32,116,111,32,97,32,102,105, - 108,101,32,112,97,116,104,32,40,97,32,115,116,114,41,46, - 10,10,32,32,32,32,32,32,32,32,73,109,112,108,101,109, - 101,110,116,105,110,103,32,116,104,105,115,32,109,101,116,104, - 111,100,32,97,108,108,111,119,115,32,102,111,114,32,116,104, - 101,32,119,114,105,116,105,110,103,32,111,102,32,98,121,116, - 101,99,111,100,101,32,102,105,108,101,115,46,10,10,32,32, - 32,32,32,32,32,32,84,104,101,32,115,111,117,114,99,101, - 32,112,97,116,104,32,105,115,32,110,101,101,100,101,100,32, - 105,110,32,111,114,100,101,114,32,116,111,32,99,111,114,114, - 101,99,116,108,121,32,116,114,97,110,115,102,101,114,32,112, - 101,114,109,105,115,115,105,111,110,115,10,32,32,32,32,32, - 32,32,32,41,1,218,8,115,101,116,95,100,97,116,97,41, - 4,114,101,0,0,0,114,91,0,0,0,90,10,99,97,99, - 104,101,95,112,97,116,104,114,54,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,15,95,99,97, - 99,104,101,95,98,121,116,101,99,111,100,101,179,2,0,0, - 115,2,0,0,0,0,8,122,28,83,111,117,114,99,101,76, - 111,97,100,101,114,46,95,99,97,99,104,101,95,98,121,116, - 101,99,111,100,101,99,3,0,0,0,0,0,0,0,3,0, - 0,0,1,0,0,0,67,0,0,0,115,4,0,0,0,100, - 1,83,0,41,2,122,150,79,112,116,105,111,110,97,108,32, - 109,101,116,104,111,100,32,119,104,105,99,104,32,119,114,105, - 116,101,115,32,100,97,116,97,32,40,98,121,116,101,115,41, - 32,116,111,32,97,32,102,105,108,101,32,112,97,116,104,32, - 40,97,32,115,116,114,41,46,10,10,32,32,32,32,32,32, - 32,32,73,109,112,108,101,109,101,110,116,105,110,103,32,116, - 104,105,115,32,109,101,116,104,111,100,32,97,108,108,111,119, - 115,32,102,111,114,32,116,104,101,32,119,114,105,116,105,110, - 103,32,111,102,32,98,121,116,101,99,111,100,101,32,102,105, - 108,101,115,46,10,32,32,32,32,32,32,32,32,78,114,4, - 0,0,0,41,3,114,101,0,0,0,114,35,0,0,0,114, - 54,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,193,0,0,0,189,2,0,0,115,0,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,5,0,0,0,16,0,0,0,67,0,0,0,115,84,0, - 0,0,124,0,106,0,124,1,131,1,125,2,121,14,124,0, - 106,1,124,2,131,1,125,3,87,0,110,50,4,0,116,2, - 107,10,114,74,1,0,125,4,1,0,122,22,116,3,100,1, - 100,2,124,1,144,1,131,1,124,4,130,2,87,0,89,0, - 100,3,100,3,125,4,126,4,88,0,110,2,88,0,116,4, - 124,3,131,1,83,0,41,4,122,52,67,111,110,99,114,101, - 116,101,32,105,109,112,108,101,109,101,110,116,97,116,105,111, - 110,32,111,102,32,73,110,115,112,101,99,116,76,111,97,100, - 101,114,46,103,101,116,95,115,111,117,114,99,101,46,122,39, - 115,111,117,114,99,101,32,110,111,116,32,97,118,97,105,108, - 97,98,108,101,32,116,104,114,111,117,103,104,32,103,101,116, - 95,100,97,116,97,40,41,114,99,0,0,0,78,41,5,114, - 152,0,0,0,218,8,103,101,116,95,100,97,116,97,114,40, - 0,0,0,114,100,0,0,0,114,150,0,0,0,41,5,114, - 101,0,0,0,114,120,0,0,0,114,35,0,0,0,114,148, - 0,0,0,218,3,101,120,99,114,4,0,0,0,114,4,0, - 0,0,114,5,0,0,0,218,10,103,101,116,95,115,111,117, - 114,99,101,196,2,0,0,115,14,0,0,0,0,2,10,1, - 2,1,14,1,16,1,6,1,28,1,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,29,0,0,0,41,1,218,9,95,111,112,116, - 105,109,105,122,101,99,3,0,0,0,1,0,0,0,4,0, - 0,0,9,0,0,0,67,0,0,0,115,26,0,0,0,116, - 0,106,1,116,2,124,1,124,2,100,1,100,2,100,3,100, - 4,124,3,144,2,131,4,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, - 184,0,0,0,218,12,100,111,110,116,95,105,110,104,101,114, - 105,116,84,114,69,0,0,0,41,3,114,115,0,0,0,114, - 183,0,0,0,218,7,99,111,109,112,105,108,101,41,4,114, - 101,0,0,0,114,54,0,0,0,114,35,0,0,0,114,198, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,14,115,111,117,114,99,101,95,116,111,95,99,111, - 100,101,206,2,0,0,115,4,0,0,0,0,5,14,1,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,10,0,0,0,43,0,0,0,67,0,0, - 0,115,106,1,0,0,124,0,106,0,124,1,131,1,125,2, - 100,1,125,3,121,12,116,1,124,2,131,1,125,4,87,0, - 110,24,4,0,116,2,107,10,114,50,1,0,1,0,1,0, - 100,1,125,4,89,0,110,174,88,0,121,14,124,0,106,3, - 124,2,131,1,125,5,87,0,110,20,4,0,116,4,107,10, - 114,86,1,0,1,0,1,0,89,0,110,138,88,0,116,5, - 124,5,100,2,25,0,131,1,125,3,121,14,124,0,106,6, - 124,4,131,1,125,6,87,0,110,20,4,0,116,7,107,10, - 114,134,1,0,1,0,1,0,89,0,110,90,88,0,121,26, - 116,8,124,6,100,3,124,5,100,4,124,1,100,5,124,4, - 144,3,131,1,125,7,87,0,110,24,4,0,116,9,116,10, - 102,2,107,10,114,186,1,0,1,0,1,0,89,0,110,38, - 88,0,116,11,106,12,100,6,124,4,124,2,131,3,1,0, - 116,13,124,7,100,4,124,1,100,7,124,4,100,8,124,2, - 144,3,131,1,83,0,124,0,106,6,124,2,131,1,125,8, - 124,0,106,14,124,8,124,2,131,2,125,9,116,11,106,12, - 100,9,124,2,131,2,1,0,116,15,106,16,12,0,144,1, - 114,102,124,4,100,1,107,9,144,1,114,102,124,3,100,1, - 107,9,144,1,114,102,116,17,124,9,124,3,116,18,124,8, - 131,1,131,3,125,6,121,30,124,0,106,19,124,2,124,4, - 124,6,131,3,1,0,116,11,106,12,100,10,124,4,131,2, - 1,0,87,0,110,22,4,0,116,2,107,10,144,1,114,100, - 1,0,1,0,1,0,89,0,110,2,88,0,124,9,83,0, - 41,11,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,114,127,0,0,0,114,133,0,0,0,114,99,0, - 0,0,114,35,0,0,0,122,13,123,125,32,109,97,116,99, - 104,101,115,32,123,125,114,90,0,0,0,114,91,0,0,0, - 122,19,99,111,100,101,32,111,98,106,101,99,116,32,102,114, - 111,109,32,123,125,122,10,119,114,111,116,101,32,123,33,114, - 125,41,20,114,152,0,0,0,114,80,0,0,0,114,67,0, - 0,0,114,192,0,0,0,114,190,0,0,0,114,14,0,0, - 0,114,195,0,0,0,114,40,0,0,0,114,136,0,0,0, - 114,100,0,0,0,114,131,0,0,0,114,115,0,0,0,114, - 130,0,0,0,114,142,0,0,0,114,201,0,0,0,114,7, - 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,145,0,0,0,114,31,0, - 0,0,114,194,0,0,0,41,10,114,101,0,0,0,114,120, - 0,0,0,114,91,0,0,0,114,134,0,0,0,114,90,0, - 0,0,218,2,115,116,114,54,0,0,0,218,10,98,121,116, - 101,115,95,100,97,116,97,114,148,0,0,0,90,11,99,111, - 100,101,95,111,98,106,101,99,116,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,182,0,0,0,214,2,0, - 0,115,78,0,0,0,0,7,10,1,4,1,2,1,12,1, - 14,1,10,2,2,1,14,1,14,1,6,2,12,1,2,1, - 14,1,14,1,6,2,2,1,6,1,8,1,12,1,18,1, - 6,2,8,1,6,1,10,1,4,1,8,1,10,1,12,1, - 12,1,20,1,10,1,6,1,10,1,2,1,14,1,16,1, - 16,1,6,1,122,21,83,111,117,114,99,101,76,111,97,100, - 101,114,46,103,101,116,95,99,111,100,101,78,114,88,0,0, - 0,41,10,114,106,0,0,0,114,105,0,0,0,114,107,0, - 0,0,114,191,0,0,0,114,192,0,0,0,114,194,0,0, - 0,114,193,0,0,0,114,197,0,0,0,114,201,0,0,0, - 114,182,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,189,0,0,0,156,2, - 0,0,115,14,0,0,0,8,2,8,8,8,13,8,10,8, - 7,8,10,14,8,114,189,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, - 76,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, + 32,32,32,32,32,32,78,114,4,0,0,0,41,3,114,103, + 0,0,0,114,37,0,0,0,114,56,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,194,0,0, + 0,195,2,0,0,115,0,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,5,0,0,0,16,0, + 0,0,67,0,0,0,115,84,0,0,0,124,0,106,0,124, + 1,131,1,125,2,121,14,124,0,106,1,124,2,131,1,125, + 3,87,0,110,50,4,0,116,2,107,10,114,74,1,0,125, + 4,1,0,122,22,116,3,100,1,100,2,124,1,144,1,131, + 1,124,4,130,2,87,0,89,0,100,3,100,3,125,4,126, + 4,88,0,110,2,88,0,116,4,124,3,131,1,83,0,41, + 4,122,52,67,111,110,99,114,101,116,101,32,105,109,112,108, + 101,109,101,110,116,97,116,105,111,110,32,111,102,32,73,110, + 115,112,101,99,116,76,111,97,100,101,114,46,103,101,116,95, + 115,111,117,114,99,101,46,122,39,115,111,117,114,99,101,32, + 110,111,116,32,97,118,97,105,108,97,98,108,101,32,116,104, + 114,111,117,103,104,32,103,101,116,95,100,97,116,97,40,41, + 114,101,0,0,0,78,41,5,114,154,0,0,0,218,8,103, + 101,116,95,100,97,116,97,114,42,0,0,0,114,102,0,0, + 0,114,152,0,0,0,41,5,114,103,0,0,0,114,122,0, + 0,0,114,37,0,0,0,114,150,0,0,0,218,3,101,120, + 99,114,4,0,0,0,114,4,0,0,0,114,6,0,0,0, + 218,10,103,101,116,95,115,111,117,114,99,101,202,2,0,0, + 115,14,0,0,0,0,2,10,1,2,1,14,1,16,1,6, + 1,28,1,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,31,0,0, + 0,41,1,218,9,95,111,112,116,105,109,105,122,101,99,3, + 0,0,0,1,0,0,0,4,0,0,0,9,0,0,0,67, + 0,0,0,115,26,0,0,0,116,0,106,1,116,2,124,1, + 124,2,100,1,100,2,100,3,100,4,124,3,144,2,131,4, + 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,185,0,0,0,218,12,100, + 111,110,116,95,105,110,104,101,114,105,116,84,114,71,0,0, + 0,41,3,114,117,0,0,0,114,184,0,0,0,218,7,99, + 111,109,112,105,108,101,41,4,114,103,0,0,0,114,56,0, + 0,0,114,37,0,0,0,114,199,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,14,115,111,117, + 114,99,101,95,116,111,95,99,111,100,101,212,2,0,0,115, + 4,0,0,0,0,5,14,1,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,10,0, + 0,0,43,0,0,0,67,0,0,0,115,106,1,0,0,124, + 0,106,0,124,1,131,1,125,2,100,1,125,3,121,12,116, + 1,124,2,131,1,125,4,87,0,110,24,4,0,116,2,107, + 10,114,50,1,0,1,0,1,0,100,1,125,4,89,0,110, + 174,88,0,121,14,124,0,106,3,124,2,131,1,125,5,87, + 0,110,20,4,0,116,4,107,10,114,86,1,0,1,0,1, + 0,89,0,110,138,88,0,116,5,124,5,100,2,25,0,131, + 1,125,3,121,14,124,0,106,6,124,4,131,1,125,6,87, + 0,110,20,4,0,116,7,107,10,114,134,1,0,1,0,1, + 0,89,0,110,90,88,0,121,26,116,8,124,6,100,3,124, + 5,100,4,124,1,100,5,124,4,144,3,131,1,125,7,87, + 0,110,24,4,0,116,9,116,10,102,2,107,10,114,186,1, + 0,1,0,1,0,89,0,110,38,88,0,116,11,106,12,100, + 6,124,4,124,2,131,3,1,0,116,13,124,7,100,4,124, + 1,100,7,124,4,100,8,124,2,144,3,131,1,83,0,124, + 0,106,6,124,2,131,1,125,8,124,0,106,14,124,8,124, + 2,131,2,125,9,116,11,106,12,100,9,124,2,131,2,1, + 0,116,15,106,16,12,0,144,1,114,102,124,4,100,1,107, + 9,144,1,114,102,124,3,100,1,107,9,144,1,114,102,116, + 17,124,9,124,3,116,18,124,8,131,1,131,3,125,6,121, + 30,124,0,106,19,124,2,124,4,124,6,131,3,1,0,116, + 11,106,12,100,10,124,4,131,2,1,0,87,0,110,22,4, + 0,116,2,107,10,144,1,114,100,1,0,1,0,1,0,89, + 0,110,2,88,0,124,9,83,0,41,11,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,114,129,0,0, + 0,114,135,0,0,0,114,101,0,0,0,114,37,0,0,0, + 122,13,123,125,32,109,97,116,99,104,101,115,32,123,125,114, + 92,0,0,0,114,93,0,0,0,122,19,99,111,100,101,32, + 111,98,106,101,99,116,32,102,114,111,109,32,123,125,122,10, + 119,114,111,116,101,32,123,33,114,125,41,20,114,154,0,0, + 0,114,82,0,0,0,114,69,0,0,0,114,193,0,0,0, + 114,191,0,0,0,114,16,0,0,0,114,196,0,0,0,114, + 42,0,0,0,114,138,0,0,0,114,102,0,0,0,114,133, + 0,0,0,114,117,0,0,0,114,132,0,0,0,114,144,0, + 0,0,114,202,0,0,0,114,8,0,0,0,218,19,100,111, + 110,116,95,119,114,105,116,101,95,98,121,116,101,99,111,100, + 101,114,147,0,0,0,114,33,0,0,0,114,195,0,0,0, + 41,10,114,103,0,0,0,114,122,0,0,0,114,93,0,0, + 0,114,136,0,0,0,114,92,0,0,0,218,2,115,116,114, + 56,0,0,0,218,10,98,121,116,101,115,95,100,97,116,97, + 114,150,0,0,0,90,11,99,111,100,101,95,111,98,106,101, + 99,116,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,183,0,0,0,220,2,0,0,115,78,0,0,0,0, + 7,10,1,4,1,2,1,12,1,14,1,10,2,2,1,14, + 1,14,1,6,2,12,1,2,1,14,1,14,1,6,2,2, + 1,6,1,8,1,12,1,18,1,6,2,8,1,6,1,10, + 1,4,1,8,1,10,1,12,1,12,1,20,1,10,1,6, + 1,10,1,2,1,14,1,16,1,16,1,6,1,122,21,83, + 111,117,114,99,101,76,111,97,100,101,114,46,103,101,116,95, + 99,111,100,101,78,114,90,0,0,0,41,10,114,108,0,0, + 0,114,107,0,0,0,114,109,0,0,0,114,192,0,0,0, + 114,193,0,0,0,114,195,0,0,0,114,194,0,0,0,114, + 198,0,0,0,114,202,0,0,0,114,183,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,190,0,0,0,162,2,0,0,115,14,0,0,0, + 8,2,8,8,8,13,8,10,8,7,8,10,14,8,114,190, + 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,76,0,0,0,101,0,90, + 1,100,0,90,2,100,1,90,3,100,2,100,3,132,0,90, + 4,100,4,100,5,132,0,90,5,100,6,100,7,132,0,90, + 6,101,7,135,0,102,1,100,8,100,9,132,8,131,1,90, + 8,101,7,100,10,100,11,132,0,131,1,90,9,100,12,100, + 13,132,0,90,10,135,0,83,0,41,14,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,3,0,0,0,2,0,0, + 0,67,0,0,0,115,16,0,0,0,124,1,124,0,95,0, + 124,2,124,0,95,1,100,1,83,0,41,2,122,75,67,97, + 99,104,101,32,116,104,101,32,109,111,100,117,108,101,32,110, + 97,109,101,32,97,110,100,32,116,104,101,32,112,97,116,104, + 32,116,111,32,116,104,101,32,102,105,108,101,32,102,111,117, + 110,100,32,98,121,32,116,104,101,10,32,32,32,32,32,32, + 32,32,102,105,110,100,101,114,46,78,41,2,114,101,0,0, + 0,114,37,0,0,0,41,3,114,103,0,0,0,114,122,0, + 0,0,114,37,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,181,0,0,0,21,3,0,0,115, + 4,0,0,0,0,3,6,1,122,19,70,105,108,101,76,111, + 97,100,101,114,46,95,95,105,110,105,116,95,95,99,2,0, + 0,0,0,0,0,0,2,0,0,0,2,0,0,0,67,0, + 0,0,115,24,0,0,0,124,0,106,0,124,1,106,0,107, + 2,111,22,124,0,106,1,124,1,106,1,107,2,83,0,41, + 1,78,41,2,218,9,95,95,99,108,97,115,115,95,95,114, + 114,0,0,0,41,2,114,103,0,0,0,218,5,111,116,104, + 101,114,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,218,6,95,95,101,113,95,95,27,3,0,0,115,4,0, + 0,0,0,1,12,1,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,1,0,0,0,3,0,0,0,67,0,0,0,115,20, + 0,0,0,116,0,124,0,106,1,131,1,116,0,124,0,106, + 2,131,1,65,0,83,0,41,1,78,41,3,218,4,104,97, + 115,104,114,101,0,0,0,114,37,0,0,0,41,1,114,103, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,8,95,95,104,97,115,104,95,95,31,3,0,0, + 115,2,0,0,0,0,1,122,19,70,105,108,101,76,111,97, + 100,101,114,46,95,95,104,97,115,104,95,95,99,2,0,0, + 0,0,0,0,0,2,0,0,0,3,0,0,0,3,0,0, + 0,115,16,0,0,0,116,0,116,1,124,0,131,2,106,2, + 124,1,131,1,83,0,41,1,122,100,76,111,97,100,32,97, + 32,109,111,100,117,108,101,32,102,114,111,109,32,97,32,102, + 105,108,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,101,120, + 101,99,95,109,111,100,117,108,101,40,41,32,105,110,115,116, + 101,97,100,46,10,10,32,32,32,32,32,32,32,32,41,3, + 218,5,115,117,112,101,114,114,206,0,0,0,114,189,0,0, + 0,41,2,114,103,0,0,0,114,122,0,0,0,41,1,114, + 207,0,0,0,114,4,0,0,0,114,6,0,0,0,114,189, + 0,0,0,34,3,0,0,115,2,0,0,0,0,10,122,22, + 70,105,108,101,76,111,97,100,101,114,46,108,111,97,100,95, + 109,111,100,117,108,101,99,2,0,0,0,0,0,0,0,2, + 0,0,0,1,0,0,0,67,0,0,0,115,6,0,0,0, + 124,0,106,0,83,0,41,1,122,58,82,101,116,117,114,110, + 32,116,104,101,32,112,97,116,104,32,116,111,32,116,104,101, + 32,115,111,117,114,99,101,32,102,105,108,101,32,97,115,32, + 102,111,117,110,100,32,98,121,32,116,104,101,32,102,105,110, + 100,101,114,46,41,1,114,37,0,0,0,41,2,114,103,0, + 0,0,114,122,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,154,0,0,0,46,3,0,0,115, + 2,0,0,0,0,3,122,23,70,105,108,101,76,111,97,100, + 101,114,46,103,101,116,95,102,105,108,101,110,97,109,101,99, + 2,0,0,0,0,0,0,0,3,0,0,0,9,0,0,0, + 67,0,0,0,115,32,0,0,0,116,0,106,1,124,1,100, + 1,131,2,143,10,125,2,124,2,106,2,131,0,83,0,81, + 0,82,0,88,0,100,2,83,0,41,3,122,39,82,101,116, + 117,114,110,32,116,104,101,32,100,97,116,97,32,102,114,111, + 109,32,112,97,116,104,32,97,115,32,114,97,119,32,98,121, + 116,101,115,46,218,1,114,78,41,3,114,52,0,0,0,114, + 53,0,0,0,90,4,114,101,97,100,41,3,114,103,0,0, + 0,114,37,0,0,0,114,57,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,196,0,0,0,51, + 3,0,0,115,4,0,0,0,0,2,14,1,122,19,70,105, + 108,101,76,111,97,100,101,114,46,103,101,116,95,100,97,116, + 97,41,11,114,108,0,0,0,114,107,0,0,0,114,109,0, + 0,0,114,110,0,0,0,114,181,0,0,0,114,209,0,0, + 0,114,211,0,0,0,114,119,0,0,0,114,189,0,0,0, + 114,154,0,0,0,114,196,0,0,0,114,4,0,0,0,114, + 4,0,0,0,41,1,114,207,0,0,0,114,6,0,0,0, + 114,206,0,0,0,16,3,0,0,115,14,0,0,0,8,3, + 4,2,8,6,8,4,8,3,16,12,12,5,114,206,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,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,3,0,0,0,3,0,0,0,67,0, + 0,0,115,22,0,0,0,116,0,124,1,131,1,125,2,124, + 2,106,1,124,2,106,2,100,1,156,2,83,0,41,2,122, + 33,82,101,116,117,114,110,32,116,104,101,32,109,101,116,97, + 100,97,116,97,32,102,111,114,32,116,104,101,32,112,97,116, + 104,46,41,2,122,5,109,116,105,109,101,122,4,115,105,122, + 101,41,3,114,41,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,103,0, + 0,0,114,37,0,0,0,114,204,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,193,0,0,0, + 61,3,0,0,115,4,0,0,0,0,2,8,1,122,27,83, + 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,46, + 112,97,116,104,95,115,116,97,116,115,99,4,0,0,0,0, + 0,0,0,5,0,0,0,5,0,0,0,67,0,0,0,115, + 26,0,0,0,116,0,124,1,131,1,125,4,124,0,106,1, + 124,2,124,3,100,1,124,4,144,1,131,2,83,0,41,2, + 78,218,5,95,109,111,100,101,41,2,114,100,0,0,0,114, + 194,0,0,0,41,5,114,103,0,0,0,114,93,0,0,0, + 114,92,0,0,0,114,56,0,0,0,114,44,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,195, + 0,0,0,66,3,0,0,115,4,0,0,0,0,2,8,1, + 122,32,83,111,117,114,99,101,70,105,108,101,76,111,97,100, + 101,114,46,95,99,97,99,104,101,95,98,121,116,101,99,111, + 100,101,105,182,1,0,0,41,1,114,216,0,0,0,99,3, + 0,0,0,1,0,0,0,9,0,0,0,17,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,120,40,124,4,114,56,116,1, + 124,4,131,1,12,0,114,56,116,0,124,4,131,1,92,2, + 125,4,125,7,124,6,106,2,124,7,131,1,1,0,113,18, + 87,0,120,108,116,3,124,6,131,1,68,0,93,96,125,7, + 116,4,124,4,124,7,131,2,125,4,121,14,116,5,106,6, + 124,4,131,1,1,0,87,0,113,68,4,0,116,7,107,10, + 114,118,1,0,1,0,1,0,119,68,89,0,113,68,4,0, + 116,8,107,10,114,162,1,0,125,8,1,0,122,18,116,9, + 106,10,100,1,124,4,124,8,131,3,1,0,100,2,83,0, + 100,2,125,8,126,8,88,0,113,68,88,0,113,68,87,0, + 121,28,116,11,124,1,124,2,124,3,131,3,1,0,116,9, + 106,10,100,3,124,1,131,2,1,0,87,0,110,48,4,0, + 116,8,107,10,114,244,1,0,125,8,1,0,122,20,116,9, + 106,10,100,1,124,1,124,8,131,3,1,0,87,0,89,0, + 100,2,100,2,125,8,126,8,88,0,110,2,88,0,100,2, + 83,0,41,4,122,27,87,114,105,116,101,32,98,121,116,101, + 115,32,100,97,116,97,32,116,111,32,97,32,102,105,108,101, + 46,122,27,99,111,117,108,100,32,110,111,116,32,99,114,101, + 97,116,101,32,123,33,114,125,58,32,123,33,114,125,78,122, + 12,99,114,101,97,116,101,100,32,123,33,114,125,41,12,114, + 40,0,0,0,114,48,0,0,0,114,160,0,0,0,114,35, + 0,0,0,114,30,0,0,0,114,3,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,42,0,0,0,114,117,0,0,0,114, + 132,0,0,0,114,58,0,0,0,41,9,114,103,0,0,0, + 114,37,0,0,0,114,56,0,0,0,114,216,0,0,0,218, + 6,112,97,114,101,110,116,114,97,0,0,0,114,29,0,0, + 0,114,25,0,0,0,114,197,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,194,0,0,0,71, + 3,0,0,115,42,0,0,0,0,2,12,1,4,2,16,1, + 12,1,14,2,14,1,10,1,2,1,14,1,14,2,6,1, + 16,3,6,1,8,1,20,1,2,1,12,1,16,1,16,2, + 8,1,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,108,0,0,0,114,107,0,0,0,114,109,0,0,0,114, + 110,0,0,0,114,193,0,0,0,114,195,0,0,0,114,194, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,214,0,0,0,57,3,0,0, + 115,8,0,0,0,8,2,4,2,8,5,8,5,114,214,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,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,5,0,0,0, + 6,0,0,0,67,0,0,0,115,56,0,0,0,124,0,106, + 0,124,1,131,1,125,2,124,0,106,1,124,2,131,1,125, + 3,116,2,124,3,100,1,124,1,100,2,124,2,144,2,131, + 1,125,4,116,3,124,4,100,1,124,1,100,3,124,2,144, + 2,131,1,83,0,41,4,78,114,101,0,0,0,114,37,0, + 0,0,114,92,0,0,0,41,4,114,154,0,0,0,114,196, + 0,0,0,114,138,0,0,0,114,144,0,0,0,41,5,114, + 103,0,0,0,114,122,0,0,0,114,37,0,0,0,114,56, + 0,0,0,114,205,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,183,0,0,0,106,3,0,0, + 115,8,0,0,0,0,1,10,1,10,1,18,1,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,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,1,83,0,41,2,122,39,82,101, + 116,117,114,110,32,78,111,110,101,32,97,115,32,116,104,101, + 114,101,32,105,115,32,110,111,32,115,111,117,114,99,101,32, + 99,111,100,101,46,78,114,4,0,0,0,41,2,114,103,0, + 0,0,114,122,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,198,0,0,0,112,3,0,0,115, + 2,0,0,0,0,2,122,31,83,111,117,114,99,101,108,101, + 115,115,70,105,108,101,76,111,97,100,101,114,46,103,101,116, + 95,115,111,117,114,99,101,78,41,6,114,108,0,0,0,114, + 107,0,0,0,114,109,0,0,0,114,110,0,0,0,114,183, + 0,0,0,114,198,0,0,0,114,4,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,219,0,0, + 0,102,3,0,0,115,6,0,0,0,8,2,4,2,8,6, + 114,219,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,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,218,19,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,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,3,0,0,0,2,0, + 0,0,67,0,0,0,115,16,0,0,0,124,1,124,0,95, + 0,124,2,124,0,95,1,100,0,83,0,41,1,78,41,2, + 114,101,0,0,0,114,37,0,0,0,41,3,114,103,0,0, + 0,114,101,0,0,0,114,37,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,181,0,0,0,129, + 3,0,0,115,4,0,0,0,0,1,6,1,122,28,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,95,95,105,110,105,116,95,95,99,2,0,0,0,0, + 0,0,0,2,0,0,0,2,0,0,0,67,0,0,0,115, + 24,0,0,0,124,0,106,0,124,1,106,0,107,2,111,22, + 124,0,106,1,124,1,106,1,107,2,83,0,41,1,78,41, + 2,114,207,0,0,0,114,114,0,0,0,41,2,114,103,0, + 0,0,114,208,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,209,0,0,0,133,3,0,0,115, + 4,0,0,0,0,1,12,1,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,1,0,0, + 0,3,0,0,0,67,0,0,0,115,20,0,0,0,116,0, + 124,0,106,1,131,1,116,0,124,0,106,2,131,1,65,0, + 83,0,41,1,78,41,3,114,210,0,0,0,114,101,0,0, + 0,114,37,0,0,0,41,1,114,103,0,0,0,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,114,211,0,0, + 0,137,3,0,0,115,2,0,0,0,0,1,122,28,69,120, + 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101, + 114,46,95,95,104,97,115,104,95,95,99,2,0,0,0,0, + 0,0,0,3,0,0,0,4,0,0,0,67,0,0,0,115, + 36,0,0,0,116,0,106,1,116,2,106,3,124,1,131,2, + 125,2,116,0,106,4,100,1,124,1,106,5,124,0,106,6, + 131,3,1,0,124,2,83,0,41,2,122,38,67,114,101,97, + 116,101,32,97,110,32,117,110,105,116,105,97,108,105,122,101, + 100,32,101,120,116,101,110,115,105,111,110,32,109,111,100,117, + 108,101,122,38,101,120,116,101,110,115,105,111,110,32,109,111, + 100,117,108,101,32,123,33,114,125,32,108,111,97,100,101,100, + 32,102,114,111,109,32,123,33,114,125,41,7,114,117,0,0, + 0,114,184,0,0,0,114,142,0,0,0,90,14,99,114,101, + 97,116,101,95,100,121,110,97,109,105,99,114,132,0,0,0, + 114,101,0,0,0,114,37,0,0,0,41,3,114,103,0,0, + 0,114,161,0,0,0,114,186,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,182,0,0,0,140, + 3,0,0,115,10,0,0,0,0,2,4,1,10,1,6,1, + 12,1,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,2,0, + 0,0,4,0,0,0,67,0,0,0,115,36,0,0,0,116, + 0,106,1,116,2,106,3,124,1,131,2,1,0,116,0,106, + 4,100,1,124,0,106,5,124,0,106,6,131,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,117,0,0,0,114,184,0,0,0,114,142,0,0, + 0,90,12,101,120,101,99,95,100,121,110,97,109,105,99,114, + 132,0,0,0,114,101,0,0,0,114,37,0,0,0,41,2, + 114,103,0,0,0,114,186,0,0,0,114,4,0,0,0,114, + 4,0,0,0,114,6,0,0,0,114,187,0,0,0,148,3, + 0,0,115,6,0,0,0,0,2,14,1,6,1,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,2,0,0,0,4,0,0,0,3, + 0,0,0,115,36,0,0,0,116,0,124,0,106,1,131,1, + 100,1,25,0,137,0,116,2,135,0,102,1,100,2,100,3, + 132,8,116,3,68,0,131,1,131,1,83,0,41,4,122,49, + 82,101,116,117,114,110,32,84,114,117,101,32,105,102,32,116, + 104,101,32,101,120,116,101,110,115,105,111,110,32,109,111,100, + 117,108,101,32,105,115,32,97,32,112,97,99,107,97,103,101, + 46,114,31,0,0,0,99,1,0,0,0,0,0,0,0,2, + 0,0,0,4,0,0,0,51,0,0,0,115,26,0,0,0, + 124,0,93,18,125,1,136,0,100,0,124,1,23,0,107,2, + 86,0,1,0,113,2,100,1,83,0,41,2,114,181,0,0, + 0,78,114,4,0,0,0,41,2,114,24,0,0,0,218,6, + 115,117,102,102,105,120,41,1,218,9,102,105,108,101,95,110, + 97,109,101,114,4,0,0,0,114,6,0,0,0,250,9,60, + 103,101,110,101,120,112,114,62,157,3,0,0,115,2,0,0, + 0,4,1,122,49,69,120,116,101,110,115,105,111,110,70,105, + 108,101,76,111,97,100,101,114,46,105,115,95,112,97,99,107, + 97,103,101,46,60,108,111,99,97,108,115,62,46,60,103,101, + 110,101,120,112,114,62,41,4,114,40,0,0,0,114,37,0, + 0,0,218,3,97,110,121,218,18,69,88,84,69,78,83,73, + 79,78,95,83,85,70,70,73,88,69,83,41,2,114,103,0, + 0,0,114,122,0,0,0,114,4,0,0,0,41,1,114,222, + 0,0,0,114,6,0,0,0,114,156,0,0,0,154,3,0, + 0,115,6,0,0,0,0,2,14,1,12,1,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,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,1,83,0,41,2,122,63,82,101, + 116,117,114,110,32,78,111,110,101,32,97,115,32,97,110,32, + 101,120,116,101,110,115,105,111,110,32,109,111,100,117,108,101, + 32,99,97,110,110,111,116,32,99,114,101,97,116,101,32,97, + 32,99,111,100,101,32,111,98,106,101,99,116,46,78,114,4, + 0,0,0,41,2,114,103,0,0,0,114,122,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,183, + 0,0,0,160,3,0,0,115,2,0,0,0,0,2,122,28, + 69,120,116,101,110,115,105,111,110,70,105,108,101,76,111,97, + 100,101,114,46,103,101,116,95,99,111,100,101,99,2,0,0, + 0,0,0,0,0,2,0,0,0,1,0,0,0,67,0,0, + 0,115,4,0,0,0,100,1,83,0,41,2,122,53,82,101, + 116,117,114,110,32,78,111,110,101,32,97,115,32,101,120,116, + 101,110,115,105,111,110,32,109,111,100,117,108,101,115,32,104, + 97,118,101,32,110,111,32,115,111,117,114,99,101,32,99,111, + 100,101,46,78,114,4,0,0,0,41,2,114,103,0,0,0, + 114,122,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,198,0,0,0,164,3,0,0,115,2,0, + 0,0,0,2,122,30,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,115,111, + 117,114,99,101,99,2,0,0,0,0,0,0,0,2,0,0, + 0,1,0,0,0,67,0,0,0,115,6,0,0,0,124,0, + 106,0,83,0,41,1,122,58,82,101,116,117,114,110,32,116, + 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,115, + 111,117,114,99,101,32,102,105,108,101,32,97,115,32,102,111, + 117,110,100,32,98,121,32,116,104,101,32,102,105,110,100,101, + 114,46,41,1,114,37,0,0,0,41,2,114,103,0,0,0, + 114,122,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,154,0,0,0,168,3,0,0,115,2,0, + 0,0,0,3,122,32,69,120,116,101,110,115,105,111,110,70, + 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, + 108,101,110,97,109,101,78,41,14,114,108,0,0,0,114,107, + 0,0,0,114,109,0,0,0,114,110,0,0,0,114,181,0, + 0,0,114,209,0,0,0,114,211,0,0,0,114,182,0,0, + 0,114,187,0,0,0,114,156,0,0,0,114,183,0,0,0, + 114,198,0,0,0,114,119,0,0,0,114,154,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,220,0,0,0,121,3,0,0,115,20,0,0, + 0,8,6,4,2,8,4,8,4,8,3,8,8,8,6,8, + 6,8,4,8,4,114,220,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, + 96,0,0,0,101,0,90,1,100,0,90,2,100,1,90,3, 100,2,100,3,132,0,90,4,100,4,100,5,132,0,90,5, - 100,6,100,7,132,0,90,6,101,7,135,0,102,1,100,8, - 100,9,132,8,131,1,90,8,101,7,100,10,100,11,132,0, - 131,1,90,9,100,12,100,13,132,0,90,10,135,0,83,0, - 41,14,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, - 3,0,0,0,2,0,0,0,67,0,0,0,115,16,0,0, - 0,124,1,124,0,95,0,124,2,124,0,95,1,100,1,83, - 0,41,2,122,75,67,97,99,104,101,32,116,104,101,32,109, - 111,100,117,108,101,32,110,97,109,101,32,97,110,100,32,116, - 104,101,32,112,97,116,104,32,116,111,32,116,104,101,32,102, - 105,108,101,32,102,111,117,110,100,32,98,121,32,116,104,101, - 10,32,32,32,32,32,32,32,32,102,105,110,100,101,114,46, - 78,41,2,114,99,0,0,0,114,35,0,0,0,41,3,114, - 101,0,0,0,114,120,0,0,0,114,35,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,180,0, - 0,0,15,3,0,0,115,4,0,0,0,0,3,6,1,122, - 19,70,105,108,101,76,111,97,100,101,114,46,95,95,105,110, - 105,116,95,95,99,2,0,0,0,0,0,0,0,2,0,0, - 0,2,0,0,0,67,0,0,0,115,24,0,0,0,124,0, - 106,0,124,1,106,0,107,2,111,22,124,0,106,1,124,1, - 106,1,107,2,83,0,41,1,78,41,2,218,9,95,95,99, - 108,97,115,115,95,95,114,112,0,0,0,41,2,114,101,0, - 0,0,218,5,111,116,104,101,114,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,218,6,95,95,101,113,95,95, - 21,3,0,0,115,4,0,0,0,0,1,12,1,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,1,0,0,0,3,0,0, - 0,67,0,0,0,115,20,0,0,0,116,0,124,0,106,1, - 131,1,116,0,124,0,106,2,131,1,65,0,83,0,41,1, - 78,41,3,218,4,104,97,115,104,114,99,0,0,0,114,35, - 0,0,0,41,1,114,101,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,8,95,95,104,97,115, - 104,95,95,25,3,0,0,115,2,0,0,0,0,1,122,19, - 70,105,108,101,76,111,97,100,101,114,46,95,95,104,97,115, - 104,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, - 3,0,0,0,3,0,0,0,115,16,0,0,0,116,0,116, - 1,124,0,131,2,106,2,124,1,131,1,83,0,41,1,122, - 100,76,111,97,100,32,97,32,109,111,100,117,108,101,32,102, - 114,111,109,32,97,32,102,105,108,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,101,120,101,99,95,109,111,100,117,108,101, - 40,41,32,105,110,115,116,101,97,100,46,10,10,32,32,32, - 32,32,32,32,32,41,3,218,5,115,117,112,101,114,114,205, - 0,0,0,114,188,0,0,0,41,2,114,101,0,0,0,114, - 120,0,0,0,41,1,114,206,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,188,0,0,0,28,3,0,0,115,2, - 0,0,0,0,10,122,22,70,105,108,101,76,111,97,100,101, - 114,46,108,111,97,100,95,109,111,100,117,108,101,99,2,0, - 0,0,0,0,0,0,2,0,0,0,1,0,0,0,67,0, - 0,0,115,6,0,0,0,124,0,106,0,83,0,41,1,122, - 58,82,101,116,117,114,110,32,116,104,101,32,112,97,116,104, - 32,116,111,32,116,104,101,32,115,111,117,114,99,101,32,102, - 105,108,101,32,97,115,32,102,111,117,110,100,32,98,121,32, - 116,104,101,32,102,105,110,100,101,114,46,41,1,114,35,0, - 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,152,0, - 0,0,40,3,0,0,115,2,0,0,0,0,3,122,23,70, - 105,108,101,76,111,97,100,101,114,46,103,101,116,95,102,105, - 108,101,110,97,109,101,99,2,0,0,0,0,0,0,0,3, - 0,0,0,9,0,0,0,67,0,0,0,115,32,0,0,0, - 116,0,106,1,124,1,100,1,131,2,143,10,125,2,124,2, - 106,2,131,0,83,0,81,0,82,0,88,0,100,2,83,0, - 41,3,122,39,82,101,116,117,114,110,32,116,104,101,32,100, - 97,116,97,32,102,114,111,109,32,112,97,116,104,32,97,115, - 32,114,97,119,32,98,121,116,101,115,46,218,1,114,78,41, - 3,114,50,0,0,0,114,51,0,0,0,90,4,114,101,97, - 100,41,3,114,101,0,0,0,114,35,0,0,0,114,55,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,195,0,0,0,45,3,0,0,115,4,0,0,0,0, - 2,14,1,122,19,70,105,108,101,76,111,97,100,101,114,46, - 103,101,116,95,100,97,116,97,41,11,114,106,0,0,0,114, - 105,0,0,0,114,107,0,0,0,114,108,0,0,0,114,180, - 0,0,0,114,208,0,0,0,114,210,0,0,0,114,117,0, - 0,0,114,188,0,0,0,114,152,0,0,0,114,195,0,0, - 0,114,4,0,0,0,114,4,0,0,0,41,1,114,206,0, - 0,0,114,5,0,0,0,114,205,0,0,0,10,3,0,0, - 115,14,0,0,0,8,3,4,2,8,6,8,4,8,3,16, - 12,12,5,114,205,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,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,3,0,0, - 0,3,0,0,0,67,0,0,0,115,22,0,0,0,116,0, - 124,1,131,1,125,2,124,2,106,1,124,2,106,2,100,1, - 156,2,83,0,41,2,122,33,82,101,116,117,114,110,32,116, - 104,101,32,109,101,116,97,100,97,116,97,32,102,111,114,32, - 116,104,101,32,112,97,116,104,46,41,2,122,5,109,116,105, - 109,101,122,4,115,105,122,101,41,3,114,39,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,101,0,0,0,114,35,0,0,0,114,203, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,192,0,0,0,55,3,0,0,115,4,0,0,0, - 0,2,8,1,122,27,83,111,117,114,99,101,70,105,108,101, - 76,111,97,100,101,114,46,112,97,116,104,95,115,116,97,116, - 115,99,4,0,0,0,0,0,0,0,5,0,0,0,5,0, - 0,0,67,0,0,0,115,26,0,0,0,116,0,124,1,131, - 1,125,4,124,0,106,1,124,2,124,3,100,1,124,4,144, - 1,131,2,83,0,41,2,78,218,5,95,109,111,100,101,41, - 2,114,98,0,0,0,114,193,0,0,0,41,5,114,101,0, - 0,0,114,91,0,0,0,114,90,0,0,0,114,54,0,0, - 0,114,42,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,194,0,0,0,60,3,0,0,115,4, - 0,0,0,0,2,8,1,122,32,83,111,117,114,99,101,70, - 105,108,101,76,111,97,100,101,114,46,95,99,97,99,104,101, - 95,98,121,116,101,99,111,100,101,105,182,1,0,0,41,1, - 114,215,0,0,0,99,3,0,0,0,1,0,0,0,9,0, - 0,0,17,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,120, - 40,124,4,114,56,116,1,124,4,131,1,12,0,114,56,116, - 0,124,4,131,1,92,2,125,4,125,7,124,6,106,2,124, - 7,131,1,1,0,113,18,87,0,120,108,116,3,124,6,131, - 1,68,0,93,96,125,7,116,4,124,4,124,7,131,2,125, - 4,121,14,116,5,106,6,124,4,131,1,1,0,87,0,113, - 68,4,0,116,7,107,10,114,118,1,0,1,0,1,0,119, - 68,89,0,113,68,4,0,116,8,107,10,114,162,1,0,125, - 8,1,0,122,18,116,9,106,10,100,1,124,4,124,8,131, - 3,1,0,100,2,83,0,100,2,125,8,126,8,88,0,113, - 68,88,0,113,68,87,0,121,28,116,11,124,1,124,2,124, - 3,131,3,1,0,116,9,106,10,100,3,124,1,131,2,1, - 0,87,0,110,48,4,0,116,8,107,10,114,244,1,0,125, - 8,1,0,122,20,116,9,106,10,100,1,124,1,124,8,131, - 3,1,0,87,0,89,0,100,2,100,2,125,8,126,8,88, - 0,110,2,88,0,100,2,83,0,41,4,122,27,87,114,105, - 116,101,32,98,121,116,101,115,32,100,97,116,97,32,116,111, - 32,97,32,102,105,108,101,46,122,27,99,111,117,108,100,32, - 110,111,116,32,99,114,101,97,116,101,32,123,33,114,125,58, - 32,123,33,114,125,78,122,12,99,114,101,97,116,101,100,32, - 123,33,114,125,41,12,114,38,0,0,0,114,46,0,0,0, - 114,158,0,0,0,114,33,0,0,0,114,28,0,0,0,114, - 3,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,40,0,0, - 0,114,115,0,0,0,114,130,0,0,0,114,56,0,0,0, - 41,9,114,101,0,0,0,114,35,0,0,0,114,54,0,0, - 0,114,215,0,0,0,218,6,112,97,114,101,110,116,114,95, - 0,0,0,114,27,0,0,0,114,23,0,0,0,114,196,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,193,0,0,0,65,3,0,0,115,42,0,0,0,0, - 2,12,1,4,2,16,1,12,1,14,2,14,1,10,1,2, - 1,14,1,14,2,6,1,16,3,6,1,8,1,20,1,2, - 1,12,1,16,1,16,2,8,1,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,106,0,0,0,114,105,0,0, - 0,114,107,0,0,0,114,108,0,0,0,114,192,0,0,0, - 114,194,0,0,0,114,193,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,213, - 0,0,0,51,3,0,0,115,8,0,0,0,8,2,4,2, - 8,5,8,5,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,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,5,0,0,0,6,0,0,0,67,0,0,0,115, - 56,0,0,0,124,0,106,0,124,1,131,1,125,2,124,0, - 106,1,124,2,131,1,125,3,116,2,124,3,100,1,124,1, - 100,2,124,2,144,2,131,1,125,4,116,3,124,4,100,1, - 124,1,100,3,124,2,144,2,131,1,83,0,41,4,78,114, - 99,0,0,0,114,35,0,0,0,114,90,0,0,0,41,4, - 114,152,0,0,0,114,195,0,0,0,114,136,0,0,0,114, - 142,0,0,0,41,5,114,101,0,0,0,114,120,0,0,0, - 114,35,0,0,0,114,54,0,0,0,114,204,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,182, - 0,0,0,100,3,0,0,115,8,0,0,0,0,1,10,1, - 10,1,18,1,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,2,0,0,0, - 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, - 0,41,2,122,39,82,101,116,117,114,110,32,78,111,110,101, - 32,97,115,32,116,104,101,114,101,32,105,115,32,110,111,32, - 115,111,117,114,99,101,32,99,111,100,101,46,78,114,4,0, - 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,197,0, - 0,0,106,3,0,0,115,2,0,0,0,0,2,122,31,83, - 111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,97, - 100,101,114,46,103,101,116,95,115,111,117,114,99,101,78,41, - 6,114,106,0,0,0,114,105,0,0,0,114,107,0,0,0, - 114,108,0,0,0,114,182,0,0,0,114,197,0,0,0,114, - 4,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,218,0,0,0,96,3,0,0,115,6,0,0, - 0,8,2,4,2,8,6,114,218,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,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,218,19,69,120,116,101,110,115,105,111,110,70, - 105,108,101,76,111,97,100,101,114,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,3,0,0,0,2,0,0,0,67,0,0,0,115,16,0, - 0,0,124,1,124,0,95,0,124,2,124,0,95,1,100,0, - 83,0,41,1,78,41,2,114,99,0,0,0,114,35,0,0, - 0,41,3,114,101,0,0,0,114,99,0,0,0,114,35,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,180,0,0,0,123,3,0,0,115,4,0,0,0,0, - 1,6,1,122,28,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,95,95,105,110,105,116,95, - 95,99,2,0,0,0,0,0,0,0,2,0,0,0,2,0, - 0,0,67,0,0,0,115,24,0,0,0,124,0,106,0,124, - 1,106,0,107,2,111,22,124,0,106,1,124,1,106,1,107, - 2,83,0,41,1,78,41,2,114,206,0,0,0,114,112,0, - 0,0,41,2,114,101,0,0,0,114,207,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,208,0, - 0,0,127,3,0,0,115,4,0,0,0,0,1,12,1,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,1,0,0,0,3,0,0,0,67,0,0,0, - 115,20,0,0,0,116,0,124,0,106,1,131,1,116,0,124, - 0,106,2,131,1,65,0,83,0,41,1,78,41,3,114,209, - 0,0,0,114,99,0,0,0,114,35,0,0,0,41,1,114, - 101,0,0,0,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,114,210,0,0,0,131,3,0,0,115,2,0,0, - 0,0,1,122,28,69,120,116,101,110,115,105,111,110,70,105, - 108,101,76,111,97,100,101,114,46,95,95,104,97,115,104,95, - 95,99,2,0,0,0,0,0,0,0,3,0,0,0,4,0, - 0,0,67,0,0,0,115,36,0,0,0,116,0,106,1,116, - 2,106,3,124,1,131,2,125,2,116,0,106,4,100,1,124, - 1,106,5,124,0,106,6,131,3,1,0,124,2,83,0,41, - 2,122,38,67,114,101,97,116,101,32,97,110,32,117,110,105, - 116,105,97,108,105,122,101,100,32,101,120,116,101,110,115,105, - 111,110,32,109,111,100,117,108,101,122,38,101,120,116,101,110, - 115,105,111,110,32,109,111,100,117,108,101,32,123,33,114,125, - 32,108,111,97,100,101,100,32,102,114,111,109,32,123,33,114, - 125,41,7,114,115,0,0,0,114,183,0,0,0,114,140,0, - 0,0,90,14,99,114,101,97,116,101,95,100,121,110,97,109, - 105,99,114,130,0,0,0,114,99,0,0,0,114,35,0,0, - 0,41,3,114,101,0,0,0,114,159,0,0,0,114,185,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,181,0,0,0,134,3,0,0,115,10,0,0,0,0, - 2,4,1,10,1,6,1,12,1,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,2,0,0,0,4,0,0,0,67,0,0, - 0,115,36,0,0,0,116,0,106,1,116,2,106,3,124,1, - 131,2,1,0,116,0,106,4,100,1,124,0,106,5,124,0, - 106,6,131,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,115,0,0,0,114,183, - 0,0,0,114,140,0,0,0,90,12,101,120,101,99,95,100, - 121,110,97,109,105,99,114,130,0,0,0,114,99,0,0,0, - 114,35,0,0,0,41,2,114,101,0,0,0,114,185,0,0, - 0,114,4,0,0,0,114,4,0,0,0,114,5,0,0,0, - 114,186,0,0,0,142,3,0,0,115,6,0,0,0,0,2, - 14,1,6,1,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,2,0, - 0,0,4,0,0,0,3,0,0,0,115,36,0,0,0,116, - 0,124,0,106,1,131,1,100,1,25,0,137,0,116,2,135, - 0,102,1,100,2,100,3,132,8,116,3,68,0,131,1,131, - 1,83,0,41,4,122,49,82,101,116,117,114,110,32,84,114, - 117,101,32,105,102,32,116,104,101,32,101,120,116,101,110,115, - 105,111,110,32,109,111,100,117,108,101,32,105,115,32,97,32, - 112,97,99,107,97,103,101,46,114,29,0,0,0,99,1,0, - 0,0,0,0,0,0,2,0,0,0,4,0,0,0,51,0, - 0,0,115,26,0,0,0,124,0,93,18,125,1,136,0,100, - 0,124,1,23,0,107,2,86,0,1,0,113,2,100,1,83, - 0,41,2,114,180,0,0,0,78,114,4,0,0,0,41,2, - 114,22,0,0,0,218,6,115,117,102,102,105,120,41,1,218, - 9,102,105,108,101,95,110,97,109,101,114,4,0,0,0,114, - 5,0,0,0,250,9,60,103,101,110,101,120,112,114,62,151, - 3,0,0,115,2,0,0,0,4,1,122,49,69,120,116,101, - 110,115,105,111,110,70,105,108,101,76,111,97,100,101,114,46, - 105,115,95,112,97,99,107,97,103,101,46,60,108,111,99,97, - 108,115,62,46,60,103,101,110,101,120,112,114,62,41,4,114, - 38,0,0,0,114,35,0,0,0,218,3,97,110,121,218,18, - 69,88,84,69,78,83,73,79,78,95,83,85,70,70,73,88, - 69,83,41,2,114,101,0,0,0,114,120,0,0,0,114,4, - 0,0,0,41,1,114,221,0,0,0,114,5,0,0,0,114, - 154,0,0,0,148,3,0,0,115,6,0,0,0,0,2,14, - 1,12,1,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,2,0,0,0, - 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, - 0,41,2,122,63,82,101,116,117,114,110,32,78,111,110,101, - 32,97,115,32,97,110,32,101,120,116,101,110,115,105,111,110, - 32,109,111,100,117,108,101,32,99,97,110,110,111,116,32,99, - 114,101,97,116,101,32,97,32,99,111,100,101,32,111,98,106, - 101,99,116,46,78,114,4,0,0,0,41,2,114,101,0,0, - 0,114,120,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,182,0,0,0,154,3,0,0,115,2, - 0,0,0,0,2,122,28,69,120,116,101,110,115,105,111,110, - 70,105,108,101,76,111,97,100,101,114,46,103,101,116,95,99, - 111,100,101,99,2,0,0,0,0,0,0,0,2,0,0,0, - 1,0,0,0,67,0,0,0,115,4,0,0,0,100,1,83, - 0,41,2,122,53,82,101,116,117,114,110,32,78,111,110,101, - 32,97,115,32,101,120,116,101,110,115,105,111,110,32,109,111, - 100,117,108,101,115,32,104,97,118,101,32,110,111,32,115,111, - 117,114,99,101,32,99,111,100,101,46,78,114,4,0,0,0, - 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,197,0,0,0, - 158,3,0,0,115,2,0,0,0,0,2,122,30,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,115,111,117,114,99,101,99,2,0,0,0, - 0,0,0,0,2,0,0,0,1,0,0,0,67,0,0,0, - 115,6,0,0,0,124,0,106,0,83,0,41,1,122,58,82, - 101,116,117,114,110,32,116,104,101,32,112,97,116,104,32,116, - 111,32,116,104,101,32,115,111,117,114,99,101,32,102,105,108, - 101,32,97,115,32,102,111,117,110,100,32,98,121,32,116,104, - 101,32,102,105,110,100,101,114,46,41,1,114,35,0,0,0, - 41,2,114,101,0,0,0,114,120,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,152,0,0,0, - 162,3,0,0,115,2,0,0,0,0,3,122,32,69,120,116, - 101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,114, - 46,103,101,116,95,102,105,108,101,110,97,109,101,78,41,14, - 114,106,0,0,0,114,105,0,0,0,114,107,0,0,0,114, - 108,0,0,0,114,180,0,0,0,114,208,0,0,0,114,210, - 0,0,0,114,181,0,0,0,114,186,0,0,0,114,154,0, - 0,0,114,182,0,0,0,114,197,0,0,0,114,117,0,0, - 0,114,152,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,219,0,0,0,115, - 3,0,0,115,20,0,0,0,8,6,4,2,8,4,8,4, - 8,3,8,8,8,6,8,6,8,4,8,4,114,219,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,96,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,83,0,41,23,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,4,0,0,0,2,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,106,3,131,0,131,1,124,0,95,4,124,3,124,0, - 95,5,100,0,83,0,41,1,78,41,6,218,5,95,110,97, - 109,101,218,5,95,112,97,116,104,114,94,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,41,4,114,101,0,0,0,114,99,0,0,0,114,35,0, - 0,0,218,11,112,97,116,104,95,102,105,110,100,101,114,114, - 4,0,0,0,114,4,0,0,0,114,5,0,0,0,114,180, - 0,0,0,175,3,0,0,115,8,0,0,0,0,1,6,1, - 6,1,14,1,122,23,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,95,105,110,105,116,95,95,99,1,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, - 0,0,115,38,0,0,0,124,0,106,0,106,1,100,1,131, - 1,92,3,125,1,125,2,125,3,124,2,100,2,107,2,114, - 30,100,6,83,0,124,1,100,5,102,2,83,0,41,7,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, - 59,0,0,0,114,30,0,0,0,114,7,0,0,0,114,35, - 0,0,0,90,8,95,95,112,97,116,104,95,95,41,2,122, - 3,115,121,115,122,4,112,97,116,104,41,2,114,226,0,0, - 0,114,32,0,0,0,41,4,114,101,0,0,0,114,217,0, - 0,0,218,3,100,111,116,90,2,109,101,114,4,0,0,0, - 114,4,0,0,0,114,5,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,181,3,0,0,115,8,0,0,0,0,2,18,1, - 8,2,4,3,122,38,95,78,97,109,101,115,112,97,99,101, - 80,97,116,104,46,95,102,105,110,100,95,112,97,114,101,110, - 116,95,112,97,116,104,95,110,97,109,101,115,99,1,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, - 0,115,28,0,0,0,124,0,106,0,131,0,92,2,125,1, - 125,2,116,1,116,2,106,3,124,1,25,0,124,2,131,2, - 83,0,41,1,78,41,4,114,233,0,0,0,114,111,0,0, - 0,114,7,0,0,0,218,7,109,111,100,117,108,101,115,41, - 3,114,101,0,0,0,90,18,112,97,114,101,110,116,95,109, - 111,100,117,108,101,95,110,97,109,101,90,14,112,97,116,104, - 95,97,116,116,114,95,110,97,109,101,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,228,0,0,0,191,3, - 0,0,115,4,0,0,0,0,1,12,1,122,31,95,78,97, - 109,101,115,112,97,99,101,80,97,116,104,46,95,103,101,116, - 95,112,97,114,101,110,116,95,112,97,116,104,99,1,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, - 0,115,80,0,0,0,116,0,124,0,106,1,131,0,131,1, - 125,1,124,1,124,0,106,2,107,3,114,74,124,0,106,3, - 124,0,106,4,124,1,131,2,125,2,124,2,100,0,107,9, - 114,68,124,2,106,5,100,0,107,8,114,68,124,2,106,6, - 114,68,124,2,106,6,124,0,95,7,124,1,124,0,95,2, - 124,0,106,7,83,0,41,1,78,41,8,114,94,0,0,0, - 114,228,0,0,0,114,229,0,0,0,114,230,0,0,0,114, - 226,0,0,0,114,121,0,0,0,114,151,0,0,0,114,227, - 0,0,0,41,3,114,101,0,0,0,90,11,112,97,114,101, - 110,116,95,112,97,116,104,114,159,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,12,95,114,101, - 99,97,108,99,117,108,97,116,101,195,3,0,0,115,16,0, - 0,0,0,2,12,1,10,1,14,3,18,1,6,1,8,1, - 6,1,122,27,95,78,97,109,101,115,112,97,99,101,80,97, - 116,104,46,95,114,101,99,97,108,99,117,108,97,116,101,99, - 1,0,0,0,0,0,0,0,1,0,0,0,2,0,0,0, - 67,0,0,0,115,12,0,0,0,116,0,124,0,106,1,131, - 0,131,1,83,0,41,1,78,41,2,218,4,105,116,101,114, - 114,235,0,0,0,41,1,114,101,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,218,8,95,95,105, - 116,101,114,95,95,208,3,0,0,115,2,0,0,0,0,1, - 122,23,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,105,116,101,114,95,95,99,3,0,0,0,0,0, - 0,0,3,0,0,0,3,0,0,0,67,0,0,0,115,14, - 0,0,0,124,2,124,0,106,0,124,1,60,0,100,0,83, - 0,41,1,78,41,1,114,227,0,0,0,41,3,114,101,0, - 0,0,218,5,105,110,100,101,120,114,35,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,11,95, - 95,115,101,116,105,116,101,109,95,95,211,3,0,0,115,2, - 0,0,0,0,1,122,26,95,78,97,109,101,115,112,97,99, - 101,80,97,116,104,46,95,95,115,101,116,105,116,101,109,95, + 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,83,0,41,23,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,4,0,0,0,2,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,106,3,131,0,131, + 1,124,0,95,4,124,3,124,0,95,5,100,0,83,0,41, + 1,78,41,6,218,5,95,110,97,109,101,218,5,95,112,97, + 116,104,114,96,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,41,4,114,103,0,0, + 0,114,101,0,0,0,114,37,0,0,0,218,11,112,97,116, + 104,95,102,105,110,100,101,114,114,4,0,0,0,114,4,0, + 0,0,114,6,0,0,0,114,181,0,0,0,181,3,0,0, + 115,8,0,0,0,0,1,6,1,6,1,14,1,122,23,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,95, + 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,67,0,0,0,115,38,0,0,0, + 124,0,106,0,106,1,100,1,131,1,92,3,125,1,125,2, + 125,3,124,2,100,2,107,2,114,30,100,6,83,0,124,1, + 100,5,102,2,83,0,41,7,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,61,0,0,0,114,32,0, + 0,0,114,8,0,0,0,114,37,0,0,0,90,8,95,95, + 112,97,116,104,95,95,41,2,122,3,115,121,115,122,4,112, + 97,116,104,41,2,114,227,0,0,0,114,34,0,0,0,41, + 4,114,103,0,0,0,114,218,0,0,0,218,3,100,111,116, + 90,2,109,101,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,218,23,95,102,105,110,100,95,112,97,114,101,110, + 116,95,112,97,116,104,95,110,97,109,101,115,187,3,0,0, + 115,8,0,0,0,0,2,18,1,8,2,4,3,122,38,95, + 78,97,109,101,115,112,97,99,101,80,97,116,104,46,95,102, + 105,110,100,95,112,97,114,101,110,116,95,112,97,116,104,95, + 110,97,109,101,115,99,1,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,28,0,0,0,124, + 0,106,0,131,0,92,2,125,1,125,2,116,1,116,2,106, + 3,124,1,25,0,124,2,131,2,83,0,41,1,78,41,4, + 114,234,0,0,0,114,113,0,0,0,114,8,0,0,0,218, + 7,109,111,100,117,108,101,115,41,3,114,103,0,0,0,90, + 18,112,97,114,101,110,116,95,109,111,100,117,108,101,95,110, + 97,109,101,90,14,112,97,116,104,95,97,116,116,114,95,110, + 97,109,101,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,229,0,0,0,197,3,0,0,115,4,0,0,0, + 0,1,12,1,122,31,95,78,97,109,101,115,112,97,99,101, + 80,97,116,104,46,95,103,101,116,95,112,97,114,101,110,116, + 95,112,97,116,104,99,1,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,80,0,0,0,116, + 0,124,0,106,1,131,0,131,1,125,1,124,1,124,0,106, + 2,107,3,114,74,124,0,106,3,124,0,106,4,124,1,131, + 2,125,2,124,2,100,0,107,9,114,68,124,2,106,5,100, + 0,107,8,114,68,124,2,106,6,114,68,124,2,106,6,124, + 0,95,7,124,1,124,0,95,2,124,0,106,7,83,0,41, + 1,78,41,8,114,96,0,0,0,114,229,0,0,0,114,230, + 0,0,0,114,231,0,0,0,114,227,0,0,0,114,123,0, + 0,0,114,153,0,0,0,114,228,0,0,0,41,3,114,103, + 0,0,0,90,11,112,97,114,101,110,116,95,112,97,116,104, + 114,161,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,12,95,114,101,99,97,108,99,117,108,97, + 116,101,201,3,0,0,115,16,0,0,0,0,2,12,1,10, + 1,14,3,18,1,6,1,8,1,6,1,122,27,95,78,97, + 109,101,115,112,97,99,101,80,97,116,104,46,95,114,101,99, + 97,108,99,117,108,97,116,101,99,1,0,0,0,0,0,0, + 0,1,0,0,0,2,0,0,0,67,0,0,0,115,12,0, + 0,0,116,0,124,0,106,1,131,0,131,1,83,0,41,1, + 78,41,2,218,4,105,116,101,114,114,236,0,0,0,41,1, + 114,103,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,218,8,95,95,105,116,101,114,95,95,214,3, + 0,0,115,2,0,0,0,0,1,122,23,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,105,116,101,114, + 95,95,99,3,0,0,0,0,0,0,0,3,0,0,0,3, + 0,0,0,67,0,0,0,115,14,0,0,0,124,2,124,0, + 106,0,124,1,60,0,100,0,83,0,41,1,78,41,1,114, + 228,0,0,0,41,3,114,103,0,0,0,218,5,105,110,100, + 101,120,114,37,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,11,95,95,115,101,116,105,116,101, + 109,95,95,217,3,0,0,115,2,0,0,0,0,1,122,26, + 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, + 95,115,101,116,105,116,101,109,95,95,99,1,0,0,0,0, + 0,0,0,1,0,0,0,2,0,0,0,67,0,0,0,115, + 12,0,0,0,116,0,124,0,106,1,131,0,131,1,83,0, + 41,1,78,41,2,114,33,0,0,0,114,236,0,0,0,41, + 1,114,103,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,7,95,95,108,101,110,95,95,220,3, + 0,0,115,2,0,0,0,0,1,122,22,95,78,97,109,101, + 115,112,97,99,101,80,97,116,104,46,95,95,108,101,110,95, 95,99,1,0,0,0,0,0,0,0,1,0,0,0,2,0, - 0,0,67,0,0,0,115,12,0,0,0,116,0,124,0,106, - 1,131,0,131,1,83,0,41,1,78,41,2,114,31,0,0, - 0,114,235,0,0,0,41,1,114,101,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,7,95,95, - 108,101,110,95,95,214,3,0,0,115,2,0,0,0,0,1, - 122,22,95,78,97,109,101,115,112,97,99,101,80,97,116,104, - 46,95,95,108,101,110,95,95,99,1,0,0,0,0,0,0, - 0,1,0,0,0,2,0,0,0,67,0,0,0,115,12,0, - 0,0,100,1,106,0,124,0,106,1,131,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,48,0,0,0,114,227, - 0,0,0,41,1,114,101,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,218,8,95,95,114,101,112, - 114,95,95,217,3,0,0,115,2,0,0,0,0,1,122,23, - 95,78,97,109,101,115,112,97,99,101,80,97,116,104,46,95, - 95,114,101,112,114,95,95,99,2,0,0,0,0,0,0,0, - 2,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, - 0,124,1,124,0,106,0,131,0,107,6,83,0,41,1,78, - 41,1,114,235,0,0,0,41,2,114,101,0,0,0,218,4, - 105,116,101,109,114,4,0,0,0,114,4,0,0,0,114,5, - 0,0,0,218,12,95,95,99,111,110,116,97,105,110,115,95, - 95,220,3,0,0,115,2,0,0,0,0,1,122,27,95,78, - 97,109,101,115,112,97,99,101,80,97,116,104,46,95,95,99, - 111,110,116,97,105,110,115,95,95,99,2,0,0,0,0,0, - 0,0,2,0,0,0,2,0,0,0,67,0,0,0,115,16, - 0,0,0,124,0,106,0,106,1,124,1,131,1,1,0,100, - 0,83,0,41,1,78,41,2,114,227,0,0,0,114,158,0, - 0,0,41,2,114,101,0,0,0,114,242,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,158,0, - 0,0,223,3,0,0,115,2,0,0,0,0,1,122,21,95, - 78,97,109,101,115,112,97,99,101,80,97,116,104,46,97,112, - 112,101,110,100,78,41,14,114,106,0,0,0,114,105,0,0, - 0,114,107,0,0,0,114,108,0,0,0,114,180,0,0,0, - 114,233,0,0,0,114,228,0,0,0,114,235,0,0,0,114, - 237,0,0,0,114,239,0,0,0,114,240,0,0,0,114,241, - 0,0,0,114,243,0,0,0,114,158,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,225,0,0,0,168,3,0,0,115,22,0,0,0,8, - 5,4,2,8,6,8,10,8,4,8,13,8,3,8,3,8, - 3,8,3,8,3,114,225,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, - 80,0,0,0,101,0,90,1,100,0,90,2,100,1,100,2, - 132,0,90,3,101,4,100,3,100,4,132,0,131,1,90,5, - 100,5,100,6,132,0,90,6,100,7,100,8,132,0,90,7, - 100,9,100,10,132,0,90,8,100,11,100,12,132,0,90,9, - 100,13,100,14,132,0,90,10,100,15,100,16,132,0,90,11, - 100,17,83,0,41,18,218,16,95,78,97,109,101,115,112,97, - 99,101,76,111,97,100,101,114,99,4,0,0,0,0,0,0, - 0,4,0,0,0,4,0,0,0,67,0,0,0,115,18,0, - 0,0,116,0,124,1,124,2,124,3,131,3,124,0,95,1, - 100,0,83,0,41,1,78,41,2,114,225,0,0,0,114,227, - 0,0,0,41,4,114,101,0,0,0,114,99,0,0,0,114, - 35,0,0,0,114,231,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,180,0,0,0,229,3,0, - 0,115,2,0,0,0,0,1,122,25,95,78,97,109,101,115, - 112,97,99,101,76,111,97,100,101,114,46,95,95,105,110,105, - 116,95,95,99,2,0,0,0,0,0,0,0,2,0,0,0, - 2,0,0,0,67,0,0,0,115,12,0,0,0,100,1,106, - 0,124,1,106,1,131,1,83,0,41,2,122,115,82,101,116, - 117,114,110,32,114,101,112,114,32,102,111,114,32,116,104,101, - 32,109,111,100,117,108,101,46,10,10,32,32,32,32,32,32, - 32,32,84,104,101,32,109,101,116,104,111,100,32,105,115,32, - 100,101,112,114,101,99,97,116,101,100,46,32,32,84,104,101, - 32,105,109,112,111,114,116,32,109,97,99,104,105,110,101,114, - 121,32,100,111,101,115,32,116,104,101,32,106,111,98,32,105, - 116,115,101,108,102,46,10,10,32,32,32,32,32,32,32,32, - 122,25,60,109,111,100,117,108,101,32,123,33,114,125,32,40, - 110,97,109,101,115,112,97,99,101,41,62,41,2,114,48,0, - 0,0,114,106,0,0,0,41,2,114,165,0,0,0,114,185, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,11,109,111,100,117,108,101,95,114,101,112,114,232, - 3,0,0,115,2,0,0,0,0,7,122,28,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,109,111,100, - 117,108,101,95,114,101,112,114,99,2,0,0,0,0,0,0, - 0,2,0,0,0,1,0,0,0,67,0,0,0,115,4,0, - 0,0,100,1,83,0,41,2,78,84,114,4,0,0,0,41, - 2,114,101,0,0,0,114,120,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,114,154,0,0,0,241, - 3,0,0,115,2,0,0,0,0,1,122,27,95,78,97,109, - 101,115,112,97,99,101,76,111,97,100,101,114,46,105,115,95, - 112,97,99,107,97,103,101,99,2,0,0,0,0,0,0,0, - 2,0,0,0,1,0,0,0,67,0,0,0,115,4,0,0, - 0,100,1,83,0,41,2,78,114,30,0,0,0,114,4,0, - 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,197,0, - 0,0,244,3,0,0,115,2,0,0,0,0,1,122,27,95, - 78,97,109,101,115,112,97,99,101,76,111,97,100,101,114,46, - 103,101,116,95,115,111,117,114,99,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, - 18,0,0,0,116,0,100,1,100,2,100,3,100,4,100,5, - 144,1,131,3,83,0,41,6,78,114,30,0,0,0,122,8, - 60,115,116,114,105,110,103,62,114,184,0,0,0,114,199,0, - 0,0,84,41,1,114,200,0,0,0,41,2,114,101,0,0, - 0,114,120,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,182,0,0,0,247,3,0,0,115,2, - 0,0,0,0,1,122,25,95,78,97,109,101,115,112,97,99, - 101,76,111,97,100,101,114,46,103,101,116,95,99,111,100,101, + 0,0,67,0,0,0,115,12,0,0,0,100,1,106,0,124, + 0,106,1,131,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,50,0,0,0,114,228,0,0,0,41,1,114,103, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,218,8,95,95,114,101,112,114,95,95,223,3,0,0, + 115,2,0,0,0,0,1,122,23,95,78,97,109,101,115,112, + 97,99,101,80,97,116,104,46,95,95,114,101,112,114,95,95, + 99,2,0,0,0,0,0,0,0,2,0,0,0,2,0,0, + 0,67,0,0,0,115,12,0,0,0,124,1,124,0,106,0, + 131,0,107,6,83,0,41,1,78,41,1,114,236,0,0,0, + 41,2,114,103,0,0,0,218,4,105,116,101,109,114,4,0, + 0,0,114,4,0,0,0,114,6,0,0,0,218,12,95,95, + 99,111,110,116,97,105,110,115,95,95,226,3,0,0,115,2, + 0,0,0,0,1,122,27,95,78,97,109,101,115,112,97,99, + 101,80,97,116,104,46,95,95,99,111,110,116,97,105,110,115, + 95,95,99,2,0,0,0,0,0,0,0,2,0,0,0,2, + 0,0,0,67,0,0,0,115,16,0,0,0,124,0,106,0, + 106,1,124,1,131,1,1,0,100,0,83,0,41,1,78,41, + 2,114,228,0,0,0,114,160,0,0,0,41,2,114,103,0, + 0,0,114,243,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,160,0,0,0,229,3,0,0,115, + 2,0,0,0,0,1,122,21,95,78,97,109,101,115,112,97, + 99,101,80,97,116,104,46,97,112,112,101,110,100,78,41,14, + 114,108,0,0,0,114,107,0,0,0,114,109,0,0,0,114, + 110,0,0,0,114,181,0,0,0,114,234,0,0,0,114,229, + 0,0,0,114,236,0,0,0,114,238,0,0,0,114,240,0, + 0,0,114,241,0,0,0,114,242,0,0,0,114,244,0,0, + 0,114,160,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,226,0,0,0,174, + 3,0,0,115,22,0,0,0,8,5,4,2,8,6,8,10, + 8,4,8,13,8,3,8,3,8,3,8,3,8,3,114,226, + 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,80,0,0,0,101,0,90, + 1,100,0,90,2,100,1,100,2,132,0,90,3,101,4,100, + 3,100,4,132,0,131,1,90,5,100,5,100,6,132,0,90, + 6,100,7,100,8,132,0,90,7,100,9,100,10,132,0,90, + 8,100,11,100,12,132,0,90,9,100,13,100,14,132,0,90, + 10,100,15,100,16,132,0,90,11,100,17,83,0,41,18,218, + 16,95,78,97,109,101,115,112,97,99,101,76,111,97,100,101, + 114,99,4,0,0,0,0,0,0,0,4,0,0,0,4,0, + 0,0,67,0,0,0,115,18,0,0,0,116,0,124,1,124, + 2,124,3,131,3,124,0,95,1,100,0,83,0,41,1,78, + 41,2,114,226,0,0,0,114,228,0,0,0,41,4,114,103, + 0,0,0,114,101,0,0,0,114,37,0,0,0,114,232,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,181,0,0,0,235,3,0,0,115,2,0,0,0,0, + 1,122,25,95,78,97,109,101,115,112,97,99,101,76,111,97, + 100,101,114,46,95,95,105,110,105,116,95,95,99,2,0,0, + 0,0,0,0,0,2,0,0,0,2,0,0,0,67,0,0, + 0,115,12,0,0,0,100,1,106,0,124,1,106,1,131,1, + 83,0,41,2,122,115,82,101,116,117,114,110,32,114,101,112, + 114,32,102,111,114,32,116,104,101,32,109,111,100,117,108,101, + 46,10,10,32,32,32,32,32,32,32,32,84,104,101,32,109, + 101,116,104,111,100,32,105,115,32,100,101,112,114,101,99,97, + 116,101,100,46,32,32,84,104,101,32,105,109,112,111,114,116, + 32,109,97,99,104,105,110,101,114,121,32,100,111,101,115,32, + 116,104,101,32,106,111,98,32,105,116,115,101,108,102,46,10, + 10,32,32,32,32,32,32,32,32,122,25,60,109,111,100,117, + 108,101,32,123,33,114,125,32,40,110,97,109,101,115,112,97, + 99,101,41,62,41,2,114,50,0,0,0,114,108,0,0,0, + 41,2,114,167,0,0,0,114,186,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,11,109,111,100, + 117,108,101,95,114,101,112,114,238,3,0,0,115,2,0,0, + 0,0,7,122,28,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,109,111,100,117,108,101,95,114,101,112, + 114,99,2,0,0,0,0,0,0,0,2,0,0,0,1,0, + 0,0,67,0,0,0,115,4,0,0,0,100,1,83,0,41, + 2,78,84,114,4,0,0,0,41,2,114,103,0,0,0,114, + 122,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,114,156,0,0,0,247,3,0,0,115,2,0,0, + 0,0,1,122,27,95,78,97,109,101,115,112,97,99,101,76, + 111,97,100,101,114,46,105,115,95,112,97,99,107,97,103,101, 99,2,0,0,0,0,0,0,0,2,0,0,0,1,0,0, 0,67,0,0,0,115,4,0,0,0,100,1,83,0,41,2, - 122,42,85,115,101,32,100,101,102,97,117,108,116,32,115,101, - 109,97,110,116,105,99,115,32,102,111,114,32,109,111,100,117, - 108,101,32,99,114,101,97,116,105,111,110,46,78,114,4,0, - 0,0,41,2,114,101,0,0,0,114,159,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,181,0, - 0,0,250,3,0,0,115,0,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,2,0,0,0,1,0,0,0,67,0,0,0, - 115,4,0,0,0,100,0,83,0,41,1,78,114,4,0,0, - 0,41,2,114,101,0,0,0,114,185,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,186,0,0, - 0,253,3,0,0,115,2,0,0,0,0,1,122,28,95,78, - 97,109,101,115,112,97,99,101,76,111,97,100,101,114,46,101, - 120,101,99,95,109,111,100,117,108,101,99,2,0,0,0,0, - 0,0,0,2,0,0,0,3,0,0,0,67,0,0,0,115, - 26,0,0,0,116,0,106,1,100,1,124,0,106,2,131,2, - 1,0,116,0,106,3,124,0,124,1,131,2,83,0,41,2, - 122,98,76,111,97,100,32,97,32,110,97,109,101,115,112,97, - 99,101,32,109,111,100,117,108,101,46,10,10,32,32,32,32, - 32,32,32,32,84,104,105,115,32,109,101,116,104,111,100,32, - 105,115,32,100,101,112,114,101,99,97,116,101,100,46,32,32, - 85,115,101,32,101,120,101,99,95,109,111,100,117,108,101,40, - 41,32,105,110,115,116,101,97,100,46,10,10,32,32,32,32, - 32,32,32,32,122,38,110,97,109,101,115,112,97,99,101,32, - 109,111,100,117,108,101,32,108,111,97,100,101,100,32,119,105, - 116,104,32,112,97,116,104,32,123,33,114,125,41,4,114,115, - 0,0,0,114,130,0,0,0,114,227,0,0,0,114,187,0, - 0,0,41,2,114,101,0,0,0,114,120,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,188,0, - 0,0,0,4,0,0,115,6,0,0,0,0,7,6,1,8, - 1,122,28,95,78,97,109,101,115,112,97,99,101,76,111,97, - 100,101,114,46,108,111,97,100,95,109,111,100,117,108,101,78, - 41,12,114,106,0,0,0,114,105,0,0,0,114,107,0,0, - 0,114,180,0,0,0,114,178,0,0,0,114,245,0,0,0, - 114,154,0,0,0,114,197,0,0,0,114,182,0,0,0,114, - 181,0,0,0,114,186,0,0,0,114,188,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,244,0,0,0,228,3,0,0,115,16,0,0,0, - 8,1,8,3,12,9,8,3,8,3,8,3,8,3,8,3, - 114,244,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,106,0,0,0,101, - 0,90,1,100,0,90,2,100,1,90,3,101,4,100,2,100, - 3,132,0,131,1,90,5,101,4,100,4,100,5,132,0,131, - 1,90,6,101,4,100,6,100,7,132,0,131,1,90,7,101, - 4,100,8,100,9,132,0,131,1,90,8,101,4,100,17,100, - 11,100,12,132,1,131,1,90,9,101,4,100,18,100,13,100, - 14,132,1,131,1,90,10,101,4,100,19,100,15,100,16,132, - 1,131,1,90,11,100,10,83,0,41,20,218,10,80,97,116, - 104,70,105,110,100,101,114,122,62,77,101,116,97,32,112,97, - 116,104,32,102,105,110,100,101,114,32,102,111,114,32,115,121, - 115,46,112,97,116,104,32,97,110,100,32,112,97,99,107,97, - 103,101,32,95,95,112,97,116,104,95,95,32,97,116,116,114, - 105,98,117,116,101,115,46,99,1,0,0,0,0,0,0,0, - 2,0,0,0,4,0,0,0,67,0,0,0,115,42,0,0, - 0,120,36,116,0,106,1,106,2,131,0,68,0,93,22,125, - 1,116,3,124,1,100,1,131,2,114,12,124,1,106,4,131, - 0,1,0,113,12,87,0,100,2,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,218,17,105,110, - 118,97,108,105,100,97,116,101,95,99,97,99,104,101,115,78, - 41,5,114,7,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,6,118,97, - 108,117,101,115,114,109,0,0,0,114,247,0,0,0,41,2, - 114,165,0,0,0,218,6,102,105,110,100,101,114,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,247,0,0, - 0,18,4,0,0,115,6,0,0,0,0,4,16,1,10,1, - 122,28,80,97,116,104,70,105,110,100,101,114,46,105,110,118, - 97,108,105,100,97,116,101,95,99,97,99,104,101,115,99,2, - 0,0,0,0,0,0,0,3,0,0,0,12,0,0,0,67, - 0,0,0,115,86,0,0,0,116,0,106,1,100,1,107,9, - 114,30,116,0,106,1,12,0,114,30,116,2,106,3,100,2, - 116,4,131,2,1,0,120,50,116,0,106,1,68,0,93,36, - 125,2,121,8,124,2,124,1,131,1,83,0,4,0,116,5, - 107,10,114,72,1,0,1,0,1,0,119,38,89,0,113,38, - 88,0,113,38,87,0,100,1,83,0,100,1,83,0,41,3, - 122,46,83,101,97,114,99,104,32,115,121,115,46,112,97,116, - 104,95,104,111,111,107,115,32,102,111,114,32,97,32,102,105, - 110,100,101,114,32,102,111,114,32,39,112,97,116,104,39,46, - 78,122,23,115,121,115,46,112,97,116,104,95,104,111,111,107, - 115,32,105,115,32,101,109,112,116,121,41,6,114,7,0,0, - 0,218,10,112,97,116,104,95,104,111,111,107,115,114,61,0, - 0,0,114,62,0,0,0,114,119,0,0,0,114,100,0,0, - 0,41,3,114,165,0,0,0,114,35,0,0,0,90,4,104, - 111,111,107,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,218,11,95,112,97,116,104,95,104,111,111,107,115,26, - 4,0,0,115,16,0,0,0,0,3,18,1,12,1,12,1, - 2,1,8,1,14,1,12,2,122,22,80,97,116,104,70,105, - 110,100,101,114,46,95,112,97,116,104,95,104,111,111,107,115, - 99,2,0,0,0,0,0,0,0,3,0,0,0,19,0,0, - 0,67,0,0,0,115,102,0,0,0,124,1,100,1,107,2, - 114,42,121,12,116,0,106,1,131,0,125,1,87,0,110,20, - 4,0,116,2,107,10,114,40,1,0,1,0,1,0,100,2, - 83,0,88,0,121,14,116,3,106,4,124,1,25,0,125,2, - 87,0,110,40,4,0,116,5,107,10,114,96,1,0,1,0, - 1,0,124,0,106,6,124,1,131,1,125,2,124,2,116,3, - 106,4,124,1,60,0,89,0,110,2,88,0,124,2,83,0, - 41,3,122,210,71,101,116,32,116,104,101,32,102,105,110,100, - 101,114,32,102,111,114,32,116,104,101,32,112,97,116,104,32, - 101,110,116,114,121,32,102,114,111,109,32,115,121,115,46,112, - 97,116,104,95,105,109,112,111,114,116,101,114,95,99,97,99, - 104,101,46,10,10,32,32,32,32,32,32,32,32,73,102,32, - 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,105, - 115,32,110,111,116,32,105,110,32,116,104,101,32,99,97,99, - 104,101,44,32,102,105,110,100,32,116,104,101,32,97,112,112, - 114,111,112,114,105,97,116,101,32,102,105,110,100,101,114,10, - 32,32,32,32,32,32,32,32,97,110,100,32,99,97,99,104, - 101,32,105,116,46,32,73,102,32,110,111,32,102,105,110,100, - 101,114,32,105,115,32,97,118,97,105,108,97,98,108,101,44, - 32,115,116,111,114,101,32,78,111,110,101,46,10,10,32,32, - 32,32,32,32,32,32,114,30,0,0,0,78,41,7,114,3, - 0,0,0,114,45,0,0,0,218,17,70,105,108,101,78,111, - 116,70,111,117,110,100,69,114,114,111,114,114,7,0,0,0, - 114,248,0,0,0,114,132,0,0,0,114,252,0,0,0,41, - 3,114,165,0,0,0,114,35,0,0,0,114,250,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,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,39,4,0,0,115,22,0,0,0,0,8, - 8,1,2,1,12,1,14,3,6,1,2,1,14,1,14,1, - 10,1,16,1,122,31,80,97,116,104,70,105,110,100,101,114, - 46,95,112,97,116,104,95,105,109,112,111,114,116,101,114,95, - 99,97,99,104,101,99,3,0,0,0,0,0,0,0,6,0, - 0,0,3,0,0,0,67,0,0,0,115,82,0,0,0,116, - 0,124,2,100,1,131,2,114,26,124,2,106,1,124,1,131, - 1,92,2,125,3,125,4,110,14,124,2,106,2,124,1,131, - 1,125,3,103,0,125,4,124,3,100,0,107,9,114,60,116, - 3,106,4,124,1,124,3,131,2,83,0,116,3,106,5,124, - 1,100,0,131,2,125,5,124,4,124,5,95,6,124,5,83, - 0,41,2,78,114,118,0,0,0,41,7,114,109,0,0,0, - 114,118,0,0,0,114,177,0,0,0,114,115,0,0,0,114, - 174,0,0,0,114,155,0,0,0,114,151,0,0,0,41,6, - 114,165,0,0,0,114,120,0,0,0,114,250,0,0,0,114, - 121,0,0,0,114,122,0,0,0,114,159,0,0,0,114,4, - 0,0,0,114,4,0,0,0,114,5,0,0,0,218,16,95, - 108,101,103,97,99,121,95,103,101,116,95,115,112,101,99,61, - 4,0,0,115,18,0,0,0,0,4,10,1,16,2,10,1, - 4,1,8,1,12,1,12,1,6,1,122,27,80,97,116,104, - 70,105,110,100,101,114,46,95,108,101,103,97,99,121,95,103, - 101,116,95,115,112,101,99,78,99,4,0,0,0,0,0,0, - 0,9,0,0,0,5,0,0,0,67,0,0,0,115,170,0, - 0,0,103,0,125,4,120,160,124,2,68,0,93,130,125,5, - 116,0,124,5,116,1,116,2,102,2,131,2,115,30,113,10, - 124,0,106,3,124,5,131,1,125,6,124,6,100,1,107,9, - 114,10,116,4,124,6,100,2,131,2,114,72,124,6,106,5, - 124,1,124,3,131,2,125,7,110,12,124,0,106,6,124,1, - 124,6,131,2,125,7,124,7,100,1,107,8,114,94,113,10, - 124,7,106,7,100,1,107,9,114,108,124,7,83,0,124,7, - 106,8,125,8,124,8,100,1,107,8,114,130,116,9,100,3, - 131,1,130,1,124,4,106,10,124,8,131,1,1,0,113,10, - 87,0,116,11,106,12,124,1,100,1,131,2,125,7,124,4, - 124,7,95,8,124,7,83,0,100,1,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,176,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,138,0,0, - 0,114,70,0,0,0,218,5,98,121,116,101,115,114,254,0, - 0,0,114,109,0,0,0,114,176,0,0,0,114,255,0,0, - 0,114,121,0,0,0,114,151,0,0,0,114,100,0,0,0, - 114,144,0,0,0,114,115,0,0,0,114,155,0,0,0,41, - 9,114,165,0,0,0,114,120,0,0,0,114,35,0,0,0, - 114,175,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,250,0,0, - 0,114,159,0,0,0,114,122,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,5,0,0,0,218,9,95,103,101,116, - 95,115,112,101,99,76,4,0,0,115,40,0,0,0,0,5, - 4,1,10,1,14,1,2,1,10,1,8,1,10,1,14,2, - 12,1,8,1,2,1,10,1,4,1,6,1,8,1,8,5, - 14,2,12,1,6,1,122,20,80,97,116,104,70,105,110,100, - 101,114,46,95,103,101,116,95,115,112,101,99,99,4,0,0, - 0,0,0,0,0,6,0,0,0,4,0,0,0,67,0,0, - 0,115,104,0,0,0,124,2,100,1,107,8,114,14,116,0, - 106,1,125,2,124,0,106,2,124,1,124,2,124,3,131,3, - 125,4,124,4,100,1,107,8,114,42,100,1,83,0,110,58, - 124,4,106,3,100,1,107,8,114,96,124,4,106,4,125,5, - 124,5,114,90,100,2,124,4,95,5,116,6,124,1,124,5, - 124,0,106,2,131,3,124,4,95,4,124,4,83,0,113,100, - 100,1,83,0,110,4,124,4,83,0,100,1,83,0,41,3, - 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, - 90,9,110,97,109,101,115,112,97,99,101,41,7,114,7,0, - 0,0,114,35,0,0,0,114,2,1,0,0,114,121,0,0, - 0,114,151,0,0,0,114,153,0,0,0,114,225,0,0,0, - 41,6,114,165,0,0,0,114,120,0,0,0,114,35,0,0, - 0,114,175,0,0,0,114,159,0,0,0,114,1,1,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 176,0,0,0,108,4,0,0,115,26,0,0,0,0,6,8, - 1,6,1,14,1,8,1,6,1,10,1,6,1,4,3,6, - 1,16,1,6,2,6,2,122,20,80,97,116,104,70,105,110, - 100,101,114,46,102,105,110,100,95,115,112,101,99,99,3,0, - 0,0,0,0,0,0,4,0,0,0,3,0,0,0,67,0, - 0,0,115,30,0,0,0,124,0,106,0,124,1,124,2,131, - 2,125,3,124,3,100,1,107,8,114,24,100,1,83,0,124, - 3,106,1,83,0,41,2,122,170,102,105,110,100,32,116,104, - 101,32,109,111,100,117,108,101,32,111,110,32,115,121,115,46, - 112,97,116,104,32,111,114,32,39,112,97,116,104,39,32,98, - 97,115,101,100,32,111,110,32,115,121,115,46,112,97,116,104, - 95,104,111,111,107,115,32,97,110,100,10,32,32,32,32,32, - 32,32,32,115,121,115,46,112,97,116,104,95,105,109,112,111, - 114,116,101,114,95,99,97,99,104,101,46,10,10,32,32,32, - 32,32,32,32,32,84,104,105,115,32,109,101,116,104,111,100, - 32,105,115,32,100,101,112,114,101,99,97,116,101,100,46,32, - 32,85,115,101,32,102,105,110,100,95,115,112,101,99,40,41, - 32,105,110,115,116,101,97,100,46,10,10,32,32,32,32,32, - 32,32,32,78,41,2,114,176,0,0,0,114,121,0,0,0, - 41,4,114,165,0,0,0,114,120,0,0,0,114,35,0,0, - 0,114,159,0,0,0,114,4,0,0,0,114,4,0,0,0, - 114,5,0,0,0,114,177,0,0,0,132,4,0,0,115,8, - 0,0,0,0,8,12,1,8,1,4,1,122,22,80,97,116, - 104,70,105,110,100,101,114,46,102,105,110,100,95,109,111,100, - 117,108,101,41,1,78,41,2,78,78,41,1,78,41,12,114, - 106,0,0,0,114,105,0,0,0,114,107,0,0,0,114,108, - 0,0,0,114,178,0,0,0,114,247,0,0,0,114,252,0, - 0,0,114,254,0,0,0,114,255,0,0,0,114,2,1,0, - 0,114,176,0,0,0,114,177,0,0,0,114,4,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,114, - 246,0,0,0,14,4,0,0,115,22,0,0,0,8,2,4, - 2,12,8,12,13,12,22,12,15,2,1,12,31,2,1,12, - 23,2,1,114,246,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,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,5,0,0,0,5,0,0,0,7,0,0,0,115,88,0, - 0,0,103,0,125,3,120,40,124,2,68,0,93,32,92,2, - 137,0,125,4,124,3,106,0,135,0,102,1,100,1,100,2, - 132,8,124,4,68,0,131,1,131,1,1,0,113,10,87,0, - 124,3,124,0,95,1,124,1,112,58,100,3,124,0,95,2, - 100,6,124,0,95,3,116,4,131,0,124,0,95,5,116,4, - 131,0,124,0,95,6,100,5,83,0,41,7,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,2,0,0,0,3,0,0,0,51,0,0,0,115,22,0, - 0,0,124,0,93,14,125,1,124,1,136,0,102,2,86,0, - 1,0,113,2,100,0,83,0,41,1,78,114,4,0,0,0, - 41,2,114,22,0,0,0,114,220,0,0,0,41,1,114,121, - 0,0,0,114,4,0,0,0,114,5,0,0,0,114,222,0, - 0,0,161,4,0,0,115,2,0,0,0,4,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,59,0,0,0,114,29,0,0,0,78, - 114,88,0,0,0,41,7,114,144,0,0,0,218,8,95,108, - 111,97,100,101,114,115,114,35,0,0,0,218,11,95,112,97, - 116,104,95,109,116,105,109,101,218,3,115,101,116,218,11,95, - 112,97,116,104,95,99,97,99,104,101,218,19,95,114,101,108, - 97,120,101,100,95,112,97,116,104,95,99,97,99,104,101,41, - 5,114,101,0,0,0,114,35,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,161,0,0,0,114,4,0,0,0,41,1, - 114,121,0,0,0,114,5,0,0,0,114,180,0,0,0,155, - 4,0,0,115,16,0,0,0,0,4,4,1,14,1,28,1, - 6,2,10,1,6,1,8,1,122,19,70,105,108,101,70,105, - 110,100,101,114,46,95,95,105,110,105,116,95,95,99,1,0, - 0,0,0,0,0,0,1,0,0,0,2,0,0,0,67,0, - 0,0,115,10,0,0,0,100,3,124,0,95,0,100,2,83, - 0,41,4,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,29,0,0,0,78,114,88,0,0,0,41, - 1,114,5,1,0,0,41,1,114,101,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,247,0,0, - 0,169,4,0,0,115,2,0,0,0,0,2,122,28,70,105, - 108,101,70,105,110,100,101,114,46,105,110,118,97,108,105,100, - 97,116,101,95,99,97,99,104,101,115,99,2,0,0,0,0, - 0,0,0,3,0,0,0,2,0,0,0,67,0,0,0,115, - 42,0,0,0,124,0,106,0,124,1,131,1,125,2,124,2, - 100,1,107,8,114,26,100,1,103,0,102,2,83,0,124,2, - 106,1,124,2,106,2,112,38,103,0,102,2,83,0,41,2, - 122,197,84,114,121,32,116,111,32,102,105,110,100,32,97,32, - 108,111,97,100,101,114,32,102,111,114,32,116,104,101,32,115, - 112,101,99,105,102,105,101,100,32,109,111,100,117,108,101,44, - 32,111,114,32,116,104,101,32,110,97,109,101,115,112,97,99, - 101,10,32,32,32,32,32,32,32,32,112,97,99,107,97,103, - 101,32,112,111,114,116,105,111,110,115,46,32,82,101,116,117, - 114,110,115,32,40,108,111,97,100,101,114,44,32,108,105,115, - 116,45,111,102,45,112,111,114,116,105,111,110,115,41,46,10, - 10,32,32,32,32,32,32,32,32,84,104,105,115,32,109,101, - 116,104,111,100,32,105,115,32,100,101,112,114,101,99,97,116, - 101,100,46,32,32,85,115,101,32,102,105,110,100,95,115,112, - 101,99,40,41,32,105,110,115,116,101,97,100,46,10,10,32, - 32,32,32,32,32,32,32,78,41,3,114,176,0,0,0,114, - 121,0,0,0,114,151,0,0,0,41,3,114,101,0,0,0, - 114,120,0,0,0,114,159,0,0,0,114,4,0,0,0,114, - 4,0,0,0,114,5,0,0,0,114,118,0,0,0,175,4, - 0,0,115,8,0,0,0,0,7,10,1,8,1,8,1,122, - 22,70,105,108,101,70,105,110,100,101,114,46,102,105,110,100, - 95,108,111,97,100,101,114,99,6,0,0,0,0,0,0,0, - 7,0,0,0,7,0,0,0,67,0,0,0,115,30,0,0, - 0,124,1,124,2,124,3,131,2,125,6,116,0,124,2,124, - 3,100,1,124,6,100,2,124,4,144,2,131,2,83,0,41, - 3,78,114,121,0,0,0,114,151,0,0,0,41,1,114,162, - 0,0,0,41,7,114,101,0,0,0,114,160,0,0,0,114, - 120,0,0,0,114,35,0,0,0,90,4,115,109,115,108,114, - 175,0,0,0,114,121,0,0,0,114,4,0,0,0,114,4, - 0,0,0,114,5,0,0,0,114,2,1,0,0,187,4,0, - 0,115,6,0,0,0,0,1,10,1,12,1,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,14,0,0,0, - 15,0,0,0,67,0,0,0,115,100,1,0,0,100,1,125, - 3,124,1,106,0,100,2,131,1,100,3,25,0,125,4,121, - 24,116,1,124,0,106,2,112,34,116,3,106,4,131,0,131, - 1,106,5,125,5,87,0,110,24,4,0,116,6,107,10,114, - 66,1,0,1,0,1,0,100,10,125,5,89,0,110,2,88, - 0,124,5,124,0,106,7,107,3,114,92,124,0,106,8,131, - 0,1,0,124,5,124,0,95,7,116,9,131,0,114,114,124, - 0,106,10,125,6,124,4,106,11,131,0,125,7,110,10,124, - 0,106,12,125,6,124,4,125,7,124,7,124,6,107,6,114, - 218,116,13,124,0,106,2,124,4,131,2,125,8,120,72,124, - 0,106,14,68,0,93,54,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,152,124,0,106,16,124,10,124,1,124, - 12,124,8,103,1,124,2,131,5,83,0,113,152,87,0,116, - 17,124,8,131,1,125,3,120,90,124,0,106,14,68,0,93, - 80,92,2,125,9,125,10,116,13,124,0,106,2,124,4,124, - 9,23,0,131,2,125,12,116,18,106,19,100,6,124,12,100, - 7,100,3,144,1,131,2,1,0,124,7,124,9,23,0,124, - 6,107,6,114,226,116,15,124,12,131,1,114,226,124,0,106, - 16,124,10,124,1,124,12,100,8,124,2,131,5,83,0,113, - 226,87,0,124,3,144,1,114,96,116,18,106,19,100,9,124, - 8,131,2,1,0,116,18,106,20,124,1,100,8,131,2,125, - 13,124,8,103,1,124,13,95,21,124,13,83,0,100,8,83, - 0,41,11,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,59,0,0,0,114,57,0,0,0,114, - 29,0,0,0,114,180,0,0,0,122,9,116,114,121,105,110, - 103,32,123,125,90,9,118,101,114,98,111,115,105,116,121,78, - 122,25,112,111,115,115,105,98,108,101,32,110,97,109,101,115, - 112,97,99,101,32,102,111,114,32,123,125,114,88,0,0,0, - 41,22,114,32,0,0,0,114,39,0,0,0,114,35,0,0, - 0,114,3,0,0,0,114,45,0,0,0,114,214,0,0,0, - 114,40,0,0,0,114,5,1,0,0,218,11,95,102,105,108, - 108,95,99,97,99,104,101,114,6,0,0,0,114,8,1,0, - 0,114,89,0,0,0,114,7,1,0,0,114,28,0,0,0, - 114,4,1,0,0,114,44,0,0,0,114,2,1,0,0,114, - 46,0,0,0,114,115,0,0,0,114,130,0,0,0,114,155, - 0,0,0,114,151,0,0,0,41,14,114,101,0,0,0,114, - 120,0,0,0,114,175,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,127,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,220,0,0,0,114,160, - 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,159,0, - 0,0,114,4,0,0,0,114,4,0,0,0,114,5,0,0, - 0,114,176,0,0,0,192,4,0,0,115,70,0,0,0,0, - 5,4,1,14,1,2,1,24,1,14,1,10,1,10,1,8, - 1,6,2,6,1,6,1,10,2,6,1,4,2,8,1,12, - 1,16,1,8,1,10,1,8,1,24,4,8,2,16,1,16, - 1,18,1,12,1,8,1,10,1,12,1,6,1,12,1,12, - 1,8,1,4,1,122,20,70,105,108,101,70,105,110,100,101, - 114,46,102,105,110,100,95,115,112,101,99,99,1,0,0,0, - 0,0,0,0,9,0,0,0,13,0,0,0,67,0,0,0, - 115,194,0,0,0,124,0,106,0,125,1,121,22,116,1,106, - 2,124,1,112,22,116,1,106,3,131,0,131,1,125,2,87, - 0,110,30,4,0,116,4,116,5,116,6,102,3,107,10,114, - 58,1,0,1,0,1,0,103,0,125,2,89,0,110,2,88, - 0,116,7,106,8,106,9,100,1,131,1,115,84,116,10,124, - 2,131,1,124,0,95,11,110,78,116,10,131,0,125,3,120, - 64,124,2,68,0,93,56,125,4,124,4,106,12,100,2,131, - 1,92,3,125,5,125,6,125,7,124,6,114,138,100,3,106, - 13,124,5,124,7,106,14,131,0,131,2,125,8,110,4,124, - 5,125,8,124,3,106,15,124,8,131,1,1,0,113,96,87, - 0,124,3,124,0,95,11,116,7,106,8,106,9,116,16,131, - 1,114,190,100,4,100,5,132,0,124,2,68,0,131,1,124, - 0,95,17,100,6,83,0,41,7,122,68,70,105,108,108,32, - 116,104,101,32,99,97,99,104,101,32,111,102,32,112,111,116, - 101,110,116,105,97,108,32,109,111,100,117,108,101,115,32,97, - 110,100,32,112,97,99,107,97,103,101,115,32,102,111,114,32, - 116,104,105,115,32,100,105,114,101,99,116,111,114,121,46,114, - 0,0,0,0,114,59,0,0,0,122,5,123,125,46,123,125, + 78,114,32,0,0,0,114,4,0,0,0,41,2,114,103,0, + 0,0,114,122,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,198,0,0,0,250,3,0,0,115, + 2,0,0,0,0,1,122,27,95,78,97,109,101,115,112,97, + 99,101,76,111,97,100,101,114,46,103,101,116,95,115,111,117, + 114,99,101,99,2,0,0,0,0,0,0,0,2,0,0,0, + 6,0,0,0,67,0,0,0,115,18,0,0,0,116,0,100, + 1,100,2,100,3,100,4,100,5,144,1,131,3,83,0,41, + 6,78,114,32,0,0,0,122,8,60,115,116,114,105,110,103, + 62,114,185,0,0,0,114,200,0,0,0,84,41,1,114,201, + 0,0,0,41,2,114,103,0,0,0,114,122,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,183, + 0,0,0,253,3,0,0,115,2,0,0,0,0,1,122,25, + 95,78,97,109,101,115,112,97,99,101,76,111,97,100,101,114, + 46,103,101,116,95,99,111,100,101,99,2,0,0,0,0,0, + 0,0,2,0,0,0,1,0,0,0,67,0,0,0,115,4, + 0,0,0,100,1,83,0,41,2,122,42,85,115,101,32,100, + 101,102,97,117,108,116,32,115,101,109,97,110,116,105,99,115, + 32,102,111,114,32,109,111,100,117,108,101,32,99,114,101,97, + 116,105,111,110,46,78,114,4,0,0,0,41,2,114,103,0, + 0,0,114,161,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,182,0,0,0,0,4,0,0,115, + 0,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,2,0,0, + 0,1,0,0,0,67,0,0,0,115,4,0,0,0,100,0, + 83,0,41,1,78,114,4,0,0,0,41,2,114,103,0,0, + 0,114,186,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,187,0,0,0,3,4,0,0,115,2, + 0,0,0,0,1,122,28,95,78,97,109,101,115,112,97,99, + 101,76,111,97,100,101,114,46,101,120,101,99,95,109,111,100, + 117,108,101,99,2,0,0,0,0,0,0,0,2,0,0,0, + 3,0,0,0,67,0,0,0,115,26,0,0,0,116,0,106, + 1,100,1,124,0,106,2,131,2,1,0,116,0,106,3,124, + 0,124,1,131,2,83,0,41,2,122,98,76,111,97,100,32, + 97,32,110,97,109,101,115,112,97,99,101,32,109,111,100,117, + 108,101,46,10,10,32,32,32,32,32,32,32,32,84,104,105, + 115,32,109,101,116,104,111,100,32,105,115,32,100,101,112,114, + 101,99,97,116,101,100,46,32,32,85,115,101,32,101,120,101, + 99,95,109,111,100,117,108,101,40,41,32,105,110,115,116,101, + 97,100,46,10,10,32,32,32,32,32,32,32,32,122,38,110, + 97,109,101,115,112,97,99,101,32,109,111,100,117,108,101,32, + 108,111,97,100,101,100,32,119,105,116,104,32,112,97,116,104, + 32,123,33,114,125,41,4,114,117,0,0,0,114,132,0,0, + 0,114,228,0,0,0,114,188,0,0,0,41,2,114,103,0, + 0,0,114,122,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,189,0,0,0,6,4,0,0,115, + 6,0,0,0,0,7,6,1,8,1,122,28,95,78,97,109, + 101,115,112,97,99,101,76,111,97,100,101,114,46,108,111,97, + 100,95,109,111,100,117,108,101,78,41,12,114,108,0,0,0, + 114,107,0,0,0,114,109,0,0,0,114,181,0,0,0,114, + 179,0,0,0,114,246,0,0,0,114,156,0,0,0,114,198, + 0,0,0,114,183,0,0,0,114,182,0,0,0,114,187,0, + 0,0,114,189,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,245,0,0,0, + 234,3,0,0,115,16,0,0,0,8,1,8,3,12,9,8, + 3,8,3,8,3,8,3,8,3,114,245,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,106,0,0,0,101,0,90,1,100,0,90,2, + 100,1,90,3,101,4,100,2,100,3,132,0,131,1,90,5, + 101,4,100,4,100,5,132,0,131,1,90,6,101,4,100,6, + 100,7,132,0,131,1,90,7,101,4,100,8,100,9,132,0, + 131,1,90,8,101,4,100,17,100,11,100,12,132,1,131,1, + 90,9,101,4,100,18,100,13,100,14,132,1,131,1,90,10, + 101,4,100,19,100,15,100,16,132,1,131,1,90,11,100,10, + 83,0,41,20,218,10,80,97,116,104,70,105,110,100,101,114, + 122,62,77,101,116,97,32,112,97,116,104,32,102,105,110,100, + 101,114,32,102,111,114,32,115,121,115,46,112,97,116,104,32, + 97,110,100,32,112,97,99,107,97,103,101,32,95,95,112,97, + 116,104,95,95,32,97,116,116,114,105,98,117,116,101,115,46, + 99,1,0,0,0,0,0,0,0,2,0,0,0,4,0,0, + 0,67,0,0,0,115,42,0,0,0,120,36,116,0,106,1, + 106,2,131,0,68,0,93,22,125,1,116,3,124,1,100,1, + 131,2,114,12,124,1,106,4,131,0,1,0,113,12,87,0, + 100,2,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,218,17,105,110,118,97,108,105,100,97,116, + 101,95,99,97,99,104,101,115,78,41,5,114,8,0,0,0, + 218,19,112,97,116,104,95,105,109,112,111,114,116,101,114,95, + 99,97,99,104,101,218,6,118,97,108,117,101,115,114,111,0, + 0,0,114,248,0,0,0,41,2,114,167,0,0,0,218,6, + 102,105,110,100,101,114,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,248,0,0,0,24,4,0,0,115,6, + 0,0,0,0,4,16,1,10,1,122,28,80,97,116,104,70, + 105,110,100,101,114,46,105,110,118,97,108,105,100,97,116,101, + 95,99,97,99,104,101,115,99,2,0,0,0,0,0,0,0, + 3,0,0,0,12,0,0,0,67,0,0,0,115,86,0,0, + 0,116,0,106,1,100,1,107,9,114,30,116,0,106,1,12, + 0,114,30,116,2,106,3,100,2,116,4,131,2,1,0,120, + 50,116,0,106,1,68,0,93,36,125,2,121,8,124,2,124, + 1,131,1,83,0,4,0,116,5,107,10,114,72,1,0,1, + 0,1,0,119,38,89,0,113,38,88,0,113,38,87,0,100, + 1,83,0,100,1,83,0,41,3,122,46,83,101,97,114,99, + 104,32,115,121,115,46,112,97,116,104,95,104,111,111,107,115, + 32,102,111,114,32,97,32,102,105,110,100,101,114,32,102,111, + 114,32,39,112,97,116,104,39,46,78,122,23,115,121,115,46, + 112,97,116,104,95,104,111,111,107,115,32,105,115,32,101,109, + 112,116,121,41,6,114,8,0,0,0,218,10,112,97,116,104, + 95,104,111,111,107,115,114,63,0,0,0,114,64,0,0,0, + 114,121,0,0,0,114,102,0,0,0,41,3,114,167,0,0, + 0,114,37,0,0,0,90,4,104,111,111,107,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,218,11,95,112,97, + 116,104,95,104,111,111,107,115,32,4,0,0,115,16,0,0, + 0,0,3,18,1,12,1,12,1,2,1,8,1,14,1,12, + 2,122,22,80,97,116,104,70,105,110,100,101,114,46,95,112, + 97,116,104,95,104,111,111,107,115,99,2,0,0,0,0,0, + 0,0,3,0,0,0,19,0,0,0,67,0,0,0,115,102, + 0,0,0,124,1,100,1,107,2,114,42,121,12,116,0,106, + 1,131,0,125,1,87,0,110,20,4,0,116,2,107,10,114, + 40,1,0,1,0,1,0,100,2,83,0,88,0,121,14,116, + 3,106,4,124,1,25,0,125,2,87,0,110,40,4,0,116, + 5,107,10,114,96,1,0,1,0,1,0,124,0,106,6,124, + 1,131,1,125,2,124,2,116,3,106,4,124,1,60,0,89, + 0,110,2,88,0,124,2,83,0,41,3,122,210,71,101,116, + 32,116,104,101,32,102,105,110,100,101,114,32,102,111,114,32, + 116,104,101,32,112,97,116,104,32,101,110,116,114,121,32,102, + 114,111,109,32,115,121,115,46,112,97,116,104,95,105,109,112, + 111,114,116,101,114,95,99,97,99,104,101,46,10,10,32,32, + 32,32,32,32,32,32,73,102,32,116,104,101,32,112,97,116, + 104,32,101,110,116,114,121,32,105,115,32,110,111,116,32,105, + 110,32,116,104,101,32,99,97,99,104,101,44,32,102,105,110, + 100,32,116,104,101,32,97,112,112,114,111,112,114,105,97,116, + 101,32,102,105,110,100,101,114,10,32,32,32,32,32,32,32, + 32,97,110,100,32,99,97,99,104,101,32,105,116,46,32,73, + 102,32,110,111,32,102,105,110,100,101,114,32,105,115,32,97, + 118,97,105,108,97,98,108,101,44,32,115,116,111,114,101,32, + 78,111,110,101,46,10,10,32,32,32,32,32,32,32,32,114, + 32,0,0,0,78,41,7,114,3,0,0,0,114,47,0,0, + 0,218,17,70,105,108,101,78,111,116,70,111,117,110,100,69, + 114,114,111,114,114,8,0,0,0,114,249,0,0,0,114,134, + 0,0,0,114,253,0,0,0,41,3,114,167,0,0,0,114, + 37,0,0,0,114,251,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,20,95,112,97,116,104,95, + 105,109,112,111,114,116,101,114,95,99,97,99,104,101,45,4, + 0,0,115,22,0,0,0,0,8,8,1,2,1,12,1,14, + 3,6,1,2,1,14,1,14,1,10,1,16,1,122,31,80, + 97,116,104,70,105,110,100,101,114,46,95,112,97,116,104,95, + 105,109,112,111,114,116,101,114,95,99,97,99,104,101,99,3, + 0,0,0,0,0,0,0,6,0,0,0,3,0,0,0,67, + 0,0,0,115,82,0,0,0,116,0,124,2,100,1,131,2, + 114,26,124,2,106,1,124,1,131,1,92,2,125,3,125,4, + 110,14,124,2,106,2,124,1,131,1,125,3,103,0,125,4, + 124,3,100,0,107,9,114,60,116,3,106,4,124,1,124,3, + 131,2,83,0,116,3,106,5,124,1,100,0,131,2,125,5, + 124,4,124,5,95,6,124,5,83,0,41,2,78,114,120,0, + 0,0,41,7,114,111,0,0,0,114,120,0,0,0,114,178, + 0,0,0,114,117,0,0,0,114,175,0,0,0,114,157,0, + 0,0,114,153,0,0,0,41,6,114,167,0,0,0,114,122, + 0,0,0,114,251,0,0,0,114,123,0,0,0,114,124,0, + 0,0,114,161,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,16,95,108,101,103,97,99,121,95, + 103,101,116,95,115,112,101,99,67,4,0,0,115,18,0,0, + 0,0,4,10,1,16,2,10,1,4,1,8,1,12,1,12, + 1,6,1,122,27,80,97,116,104,70,105,110,100,101,114,46, + 95,108,101,103,97,99,121,95,103,101,116,95,115,112,101,99, + 78,99,4,0,0,0,0,0,0,0,9,0,0,0,5,0, + 0,0,67,0,0,0,115,170,0,0,0,103,0,125,4,120, + 160,124,2,68,0,93,130,125,5,116,0,124,5,116,1,116, + 2,102,2,131,2,115,30,113,10,124,0,106,3,124,5,131, + 1,125,6,124,6,100,1,107,9,114,10,116,4,124,6,100, + 2,131,2,114,72,124,6,106,5,124,1,124,3,131,2,125, + 7,110,12,124,0,106,6,124,1,124,6,131,2,125,7,124, + 7,100,1,107,8,114,94,113,10,124,7,106,7,100,1,107, + 9,114,108,124,7,83,0,124,7,106,8,125,8,124,8,100, + 1,107,8,114,130,116,9,100,3,131,1,130,1,124,4,106, + 10,124,8,131,1,1,0,113,10,87,0,116,11,106,12,124, + 1,100,1,131,2,125,7,124,4,124,7,95,8,124,7,83, + 0,100,1,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,177,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,140,0,0,0,114,72,0,0,0,218, + 5,98,121,116,101,115,114,255,0,0,0,114,111,0,0,0, + 114,177,0,0,0,114,0,1,0,0,114,123,0,0,0,114, + 153,0,0,0,114,102,0,0,0,114,146,0,0,0,114,117, + 0,0,0,114,157,0,0,0,41,9,114,167,0,0,0,114, + 122,0,0,0,114,37,0,0,0,114,176,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,251,0,0,0,114,161,0,0,0,114, + 124,0,0,0,114,4,0,0,0,114,4,0,0,0,114,6, + 0,0,0,218,9,95,103,101,116,95,115,112,101,99,82,4, + 0,0,115,40,0,0,0,0,5,4,1,10,1,14,1,2, + 1,10,1,8,1,10,1,14,2,12,1,8,1,2,1,10, + 1,4,1,6,1,8,1,8,5,14,2,12,1,6,1,122, + 20,80,97,116,104,70,105,110,100,101,114,46,95,103,101,116, + 95,115,112,101,99,99,4,0,0,0,0,0,0,0,6,0, + 0,0,4,0,0,0,67,0,0,0,115,104,0,0,0,124, + 2,100,1,107,8,114,14,116,0,106,1,125,2,124,0,106, + 2,124,1,124,2,124,3,131,3,125,4,124,4,100,1,107, + 8,114,42,100,1,83,0,110,58,124,4,106,3,100,1,107, + 8,114,96,124,4,106,4,125,5,124,5,114,90,100,2,124, + 4,95,5,116,6,124,1,124,5,124,0,106,2,131,3,124, + 4,95,4,124,4,83,0,113,100,100,1,83,0,110,4,124, + 4,83,0,100,1,83,0,41,3,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,90,9,110,97,109,101,115, + 112,97,99,101,41,7,114,8,0,0,0,114,37,0,0,0, + 114,3,1,0,0,114,123,0,0,0,114,153,0,0,0,114, + 155,0,0,0,114,226,0,0,0,41,6,114,167,0,0,0, + 114,122,0,0,0,114,37,0,0,0,114,176,0,0,0,114, + 161,0,0,0,114,2,1,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,177,0,0,0,114,4,0, + 0,115,26,0,0,0,0,6,8,1,6,1,14,1,8,1, + 6,1,10,1,6,1,4,3,6,1,16,1,6,2,6,2, + 122,20,80,97,116,104,70,105,110,100,101,114,46,102,105,110, + 100,95,115,112,101,99,99,3,0,0,0,0,0,0,0,4, + 0,0,0,3,0,0,0,67,0,0,0,115,30,0,0,0, + 124,0,106,0,124,1,124,2,131,2,125,3,124,3,100,1, + 107,8,114,24,100,1,83,0,124,3,106,1,83,0,41,2, + 122,170,102,105,110,100,32,116,104,101,32,109,111,100,117,108, + 101,32,111,110,32,115,121,115,46,112,97,116,104,32,111,114, + 32,39,112,97,116,104,39,32,98,97,115,101,100,32,111,110, + 32,115,121,115,46,112,97,116,104,95,104,111,111,107,115,32, + 97,110,100,10,32,32,32,32,32,32,32,32,115,121,115,46, + 112,97,116,104,95,105,109,112,111,114,116,101,114,95,99,97, + 99,104,101,46,10,10,32,32,32,32,32,32,32,32,84,104, + 105,115,32,109,101,116,104,111,100,32,105,115,32,100,101,112, + 114,101,99,97,116,101,100,46,32,32,85,115,101,32,102,105, + 110,100,95,115,112,101,99,40,41,32,105,110,115,116,101,97, + 100,46,10,10,32,32,32,32,32,32,32,32,78,41,2,114, + 177,0,0,0,114,123,0,0,0,41,4,114,167,0,0,0, + 114,122,0,0,0,114,37,0,0,0,114,161,0,0,0,114, + 4,0,0,0,114,4,0,0,0,114,6,0,0,0,114,178, + 0,0,0,138,4,0,0,115,8,0,0,0,0,8,12,1, + 8,1,4,1,122,22,80,97,116,104,70,105,110,100,101,114, + 46,102,105,110,100,95,109,111,100,117,108,101,41,1,78,41, + 2,78,78,41,1,78,41,12,114,108,0,0,0,114,107,0, + 0,0,114,109,0,0,0,114,110,0,0,0,114,179,0,0, + 0,114,248,0,0,0,114,253,0,0,0,114,255,0,0,0, + 114,0,1,0,0,114,3,1,0,0,114,177,0,0,0,114, + 178,0,0,0,114,4,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,114,247,0,0,0,20,4,0, + 0,115,22,0,0,0,8,2,4,2,12,8,12,13,12,22, + 12,15,2,1,12,31,2,1,12,23,2,1,114,247,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,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,5,0,0,0,5,0, + 0,0,7,0,0,0,115,88,0,0,0,103,0,125,3,120, + 40,124,2,68,0,93,32,92,2,137,0,125,4,124,3,106, + 0,135,0,102,1,100,1,100,2,132,8,124,4,68,0,131, + 1,131,1,1,0,113,10,87,0,124,3,124,0,95,1,124, + 1,112,58,100,3,124,0,95,2,100,6,124,0,95,3,116, + 4,131,0,124,0,95,5,116,4,131,0,124,0,95,6,100, + 5,83,0,41,7,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,2,0,0,0,3,0, + 0,0,51,0,0,0,115,22,0,0,0,124,0,93,14,125, + 1,124,1,136,0,102,2,86,0,1,0,113,2,100,0,83, + 0,41,1,78,114,4,0,0,0,41,2,114,24,0,0,0, + 114,221,0,0,0,41,1,114,123,0,0,0,114,4,0,0, + 0,114,6,0,0,0,114,223,0,0,0,167,4,0,0,115, + 2,0,0,0,4,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,61, + 0,0,0,114,31,0,0,0,78,114,90,0,0,0,41,7, + 114,146,0,0,0,218,8,95,108,111,97,100,101,114,115,114, + 37,0,0,0,218,11,95,112,97,116,104,95,109,116,105,109, + 101,218,3,115,101,116,218,11,95,112,97,116,104,95,99,97, + 99,104,101,218,19,95,114,101,108,97,120,101,100,95,112,97, + 116,104,95,99,97,99,104,101,41,5,114,103,0,0,0,114, + 37,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,163,0, + 0,0,114,4,0,0,0,41,1,114,123,0,0,0,114,6, + 0,0,0,114,181,0,0,0,161,4,0,0,115,16,0,0, + 0,0,4,4,1,14,1,28,1,6,2,10,1,6,1,8, + 1,122,19,70,105,108,101,70,105,110,100,101,114,46,95,95, + 105,110,105,116,95,95,99,1,0,0,0,0,0,0,0,1, + 0,0,0,2,0,0,0,67,0,0,0,115,10,0,0,0, + 100,3,124,0,95,0,100,2,83,0,41,4,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,31,0, + 0,0,78,114,90,0,0,0,41,1,114,6,1,0,0,41, + 1,114,103,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,248,0,0,0,175,4,0,0,115,2, + 0,0,0,0,2,122,28,70,105,108,101,70,105,110,100,101, + 114,46,105,110,118,97,108,105,100,97,116,101,95,99,97,99, + 104,101,115,99,2,0,0,0,0,0,0,0,3,0,0,0, + 2,0,0,0,67,0,0,0,115,42,0,0,0,124,0,106, + 0,124,1,131,1,125,2,124,2,100,1,107,8,114,26,100, + 1,103,0,102,2,83,0,124,2,106,1,124,2,106,2,112, + 38,103,0,102,2,83,0,41,2,122,197,84,114,121,32,116, + 111,32,102,105,110,100,32,97,32,108,111,97,100,101,114,32, + 102,111,114,32,116,104,101,32,115,112,101,99,105,102,105,101, + 100,32,109,111,100,117,108,101,44,32,111,114,32,116,104,101, + 32,110,97,109,101,115,112,97,99,101,10,32,32,32,32,32, + 32,32,32,112,97,99,107,97,103,101,32,112,111,114,116,105, + 111,110,115,46,32,82,101,116,117,114,110,115,32,40,108,111, + 97,100,101,114,44,32,108,105,115,116,45,111,102,45,112,111, + 114,116,105,111,110,115,41,46,10,10,32,32,32,32,32,32, + 32,32,84,104,105,115,32,109,101,116,104,111,100,32,105,115, + 32,100,101,112,114,101,99,97,116,101,100,46,32,32,85,115, + 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, + 115,116,101,97,100,46,10,10,32,32,32,32,32,32,32,32, + 78,41,3,114,177,0,0,0,114,123,0,0,0,114,153,0, + 0,0,41,3,114,103,0,0,0,114,122,0,0,0,114,161, + 0,0,0,114,4,0,0,0,114,4,0,0,0,114,6,0, + 0,0,114,120,0,0,0,181,4,0,0,115,8,0,0,0, + 0,7,10,1,8,1,8,1,122,22,70,105,108,101,70,105, + 110,100,101,114,46,102,105,110,100,95,108,111,97,100,101,114, + 99,6,0,0,0,0,0,0,0,7,0,0,0,7,0,0, + 0,67,0,0,0,115,30,0,0,0,124,1,124,2,124,3, + 131,2,125,6,116,0,124,2,124,3,100,1,124,6,100,2, + 124,4,144,2,131,2,83,0,41,3,78,114,123,0,0,0, + 114,153,0,0,0,41,1,114,164,0,0,0,41,7,114,103, + 0,0,0,114,162,0,0,0,114,122,0,0,0,114,37,0, + 0,0,90,4,115,109,115,108,114,176,0,0,0,114,123,0, + 0,0,114,4,0,0,0,114,4,0,0,0,114,6,0,0, + 0,114,3,1,0,0,193,4,0,0,115,6,0,0,0,0, + 1,10,1,12,1,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,14,0,0,0,15,0,0,0,67,0,0, + 0,115,100,1,0,0,100,1,125,3,124,1,106,0,100,2, + 131,1,100,3,25,0,125,4,121,24,116,1,124,0,106,2, + 112,34,116,3,106,4,131,0,131,1,106,5,125,5,87,0, + 110,24,4,0,116,6,107,10,114,66,1,0,1,0,1,0, + 100,10,125,5,89,0,110,2,88,0,124,5,124,0,106,7, + 107,3,114,92,124,0,106,8,131,0,1,0,124,5,124,0, + 95,7,116,9,131,0,114,114,124,0,106,10,125,6,124,4, + 106,11,131,0,125,7,110,10,124,0,106,12,125,6,124,4, + 125,7,124,7,124,6,107,6,114,218,116,13,124,0,106,2, + 124,4,131,2,125,8,120,72,124,0,106,14,68,0,93,54, + 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,152, + 124,0,106,16,124,10,124,1,124,12,124,8,103,1,124,2, + 131,5,83,0,113,152,87,0,116,17,124,8,131,1,125,3, + 120,90,124,0,106,14,68,0,93,80,92,2,125,9,125,10, + 116,13,124,0,106,2,124,4,124,9,23,0,131,2,125,12, + 116,18,106,19,100,6,124,12,100,7,100,3,144,1,131,2, + 1,0,124,7,124,9,23,0,124,6,107,6,114,226,116,15, + 124,12,131,1,114,226,124,0,106,16,124,10,124,1,124,12, + 100,8,124,2,131,5,83,0,113,226,87,0,124,3,144,1, + 114,96,116,18,106,19,100,9,124,8,131,2,1,0,116,18, + 106,20,124,1,100,8,131,2,125,13,124,8,103,1,124,13, + 95,21,124,13,83,0,100,8,83,0,41,11,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,61, + 0,0,0,114,59,0,0,0,114,31,0,0,0,114,181,0, + 0,0,122,9,116,114,121,105,110,103,32,123,125,90,9,118, + 101,114,98,111,115,105,116,121,78,122,25,112,111,115,115,105, + 98,108,101,32,110,97,109,101,115,112,97,99,101,32,102,111, + 114,32,123,125,114,90,0,0,0,41,22,114,34,0,0,0, + 114,41,0,0,0,114,37,0,0,0,114,3,0,0,0,114, + 47,0,0,0,114,215,0,0,0,114,42,0,0,0,114,6, + 1,0,0,218,11,95,102,105,108,108,95,99,97,99,104,101, + 114,7,0,0,0,114,9,1,0,0,114,91,0,0,0,114, + 8,1,0,0,114,30,0,0,0,114,5,1,0,0,114,46, + 0,0,0,114,3,1,0,0,114,48,0,0,0,114,117,0, + 0,0,114,132,0,0,0,114,157,0,0,0,114,153,0,0, + 0,41,14,114,103,0,0,0,114,122,0,0,0,114,176,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,129,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,221,0,0,0,114,162,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,161,0,0,0,114,4,0,0,0, + 114,4,0,0,0,114,6,0,0,0,114,177,0,0,0,198, + 4,0,0,115,70,0,0,0,0,5,4,1,14,1,2,1, + 24,1,14,1,10,1,10,1,8,1,6,2,6,1,6,1, + 10,2,6,1,4,2,8,1,12,1,16,1,8,1,10,1, + 8,1,24,4,8,2,16,1,16,1,18,1,12,1,8,1, + 10,1,12,1,6,1,12,1,12,1,8,1,4,1,122,20, + 70,105,108,101,70,105,110,100,101,114,46,102,105,110,100,95, + 115,112,101,99,99,1,0,0,0,0,0,0,0,9,0,0, + 0,13,0,0,0,67,0,0,0,115,194,0,0,0,124,0, + 106,0,125,1,121,22,116,1,106,2,124,1,112,22,116,1, + 106,3,131,0,131,1,125,2,87,0,110,30,4,0,116,4, + 116,5,116,6,102,3,107,10,114,58,1,0,1,0,1,0, + 103,0,125,2,89,0,110,2,88,0,116,7,106,8,106,9, + 100,1,131,1,115,84,116,10,124,2,131,1,124,0,95,11, + 110,78,116,10,131,0,125,3,120,64,124,2,68,0,93,56, + 125,4,124,4,106,12,100,2,131,1,92,3,125,5,125,6, + 125,7,124,6,114,138,100,3,106,13,124,5,124,7,106,14, + 131,0,131,2,125,8,110,4,124,5,125,8,124,3,106,15, + 124,8,131,1,1,0,113,96,87,0,124,3,124,0,95,11, + 116,7,106,8,106,9,116,16,131,1,114,190,100,4,100,5, + 132,0,124,2,68,0,131,1,124,0,95,17,100,6,83,0, + 41,7,122,68,70,105,108,108,32,116,104,101,32,99,97,99, + 104,101,32,111,102,32,112,111,116,101,110,116,105,97,108,32, + 109,111,100,117,108,101,115,32,97,110,100,32,112,97,99,107, + 97,103,101,115,32,102,111,114,32,116,104,105,115,32,100,105, + 114,101,99,116,111,114,121,46,114,0,0,0,0,114,61,0, + 0,0,122,5,123,125,46,123,125,99,1,0,0,0,0,0, + 0,0,2,0,0,0,3,0,0,0,83,0,0,0,115,20, + 0,0,0,104,0,124,0,93,12,125,1,124,1,106,0,131, + 0,146,2,113,4,83,0,114,4,0,0,0,41,1,114,91, + 0,0,0,41,2,114,24,0,0,0,90,2,102,110,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,250,9,60, + 115,101,116,99,111,109,112,62,19,5,0,0,115,2,0,0, + 0,6,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,37,0,0,0,114,3,0,0,0,90,7,108,105,115, + 116,100,105,114,114,47,0,0,0,114,254,0,0,0,218,15, + 80,101,114,109,105,115,115,105,111,110,69,114,114,111,114,218, + 18,78,111,116,65,68,105,114,101,99,116,111,114,121,69,114, + 114,111,114,114,8,0,0,0,114,9,0,0,0,114,10,0, + 0,0,114,7,1,0,0,114,8,1,0,0,114,86,0,0, + 0,114,50,0,0,0,114,91,0,0,0,218,3,97,100,100, + 114,11,0,0,0,114,9,1,0,0,41,9,114,103,0,0, + 0,114,37,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,243,0,0,0,114,101,0,0, + 0,114,233,0,0,0,114,221,0,0,0,90,8,110,101,119, + 95,110,97,109,101,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,11,1,0,0,246,4,0,0,115,34,0, + 0,0,0,2,6,1,2,1,22,1,20,3,10,3,12,1, + 12,7,6,1,10,1,16,1,4,1,18,2,4,1,14,1, + 6,1,12,1,122,22,70,105,108,101,70,105,110,100,101,114, + 46,95,102,105,108,108,95,99,97,99,104,101,99,1,0,0, + 0,0,0,0,0,3,0,0,0,3,0,0,0,7,0,0, + 0,115,18,0,0,0,135,0,135,1,102,2,100,1,100,2, + 132,8,125,2,124,2,83,0,41,3,97,20,1,0,0,65, + 32,99,108,97,115,115,32,109,101,116,104,111,100,32,119,104, + 105,99,104,32,114,101,116,117,114,110,115,32,97,32,99,108, + 111,115,117,114,101,32,116,111,32,117,115,101,32,111,110,32, + 115,121,115,46,112,97,116,104,95,104,111,111,107,10,32,32, + 32,32,32,32,32,32,119,104,105,99,104,32,119,105,108,108, + 32,114,101,116,117,114,110,32,97,110,32,105,110,115,116,97, + 110,99,101,32,117,115,105,110,103,32,116,104,101,32,115,112, + 101,99,105,102,105,101,100,32,108,111,97,100,101,114,115,32, + 97,110,100,32,116,104,101,32,112,97,116,104,10,32,32,32, + 32,32,32,32,32,99,97,108,108,101,100,32,111,110,32,116, + 104,101,32,99,108,111,115,117,114,101,46,10,10,32,32,32, + 32,32,32,32,32,73,102,32,116,104,101,32,112,97,116,104, + 32,99,97,108,108,101,100,32,111,110,32,116,104,101,32,99, + 108,111,115,117,114,101,32,105,115,32,110,111,116,32,97,32, + 100,105,114,101,99,116,111,114,121,44,32,73,109,112,111,114, + 116,69,114,114,111,114,32,105,115,10,32,32,32,32,32,32, + 32,32,114,97,105,115,101,100,46,10,10,32,32,32,32,32, + 32,32,32,99,1,0,0,0,0,0,0,0,1,0,0,0, + 4,0,0,0,19,0,0,0,115,32,0,0,0,116,0,124, + 0,131,1,115,22,116,1,100,1,100,2,124,0,144,1,131, + 1,130,1,136,0,124,0,136,1,140,1,83,0,41,3,122, + 45,80,97,116,104,32,104,111,111,107,32,102,111,114,32,105, + 109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,101, + 114,121,46,70,105,108,101,70,105,110,100,101,114,46,122,30, + 111,110,108,121,32,100,105,114,101,99,116,111,114,105,101,115, + 32,97,114,101,32,115,117,112,112,111,114,116,101,100,114,37, + 0,0,0,41,2,114,48,0,0,0,114,102,0,0,0,41, + 1,114,37,0,0,0,41,2,114,167,0,0,0,114,10,1, + 0,0,114,4,0,0,0,114,6,0,0,0,218,24,112,97, + 116,104,95,104,111,111,107,95,102,111,114,95,70,105,108,101, + 70,105,110,100,101,114,31,5,0,0,115,6,0,0,0,0, + 2,8,1,14,1,122,54,70,105,108,101,70,105,110,100,101, + 114,46,112,97,116,104,95,104,111,111,107,46,60,108,111,99, + 97,108,115,62,46,112,97,116,104,95,104,111,111,107,95,102, + 111,114,95,70,105,108,101,70,105,110,100,101,114,114,4,0, + 0,0,41,3,114,167,0,0,0,114,10,1,0,0,114,16, + 1,0,0,114,4,0,0,0,41,2,114,167,0,0,0,114, + 10,1,0,0,114,6,0,0,0,218,9,112,97,116,104,95, + 104,111,111,107,21,5,0,0,115,4,0,0,0,0,10,14, + 6,122,20,70,105,108,101,70,105,110,100,101,114,46,112,97, + 116,104,95,104,111,111,107,99,1,0,0,0,0,0,0,0, + 1,0,0,0,2,0,0,0,67,0,0,0,115,12,0,0, + 0,100,1,106,0,124,0,106,1,131,1,83,0,41,2,78, + 122,16,70,105,108,101,70,105,110,100,101,114,40,123,33,114, + 125,41,41,2,114,50,0,0,0,114,37,0,0,0,41,1, + 114,103,0,0,0,114,4,0,0,0,114,4,0,0,0,114, + 6,0,0,0,114,242,0,0,0,39,5,0,0,115,2,0, + 0,0,0,1,122,19,70,105,108,101,70,105,110,100,101,114, + 46,95,95,114,101,112,114,95,95,41,1,78,41,15,114,108, + 0,0,0,114,107,0,0,0,114,109,0,0,0,114,110,0, + 0,0,114,181,0,0,0,114,248,0,0,0,114,126,0,0, + 0,114,178,0,0,0,114,120,0,0,0,114,3,1,0,0, + 114,177,0,0,0,114,11,1,0,0,114,179,0,0,0,114, + 17,1,0,0,114,242,0,0,0,114,4,0,0,0,114,4, + 0,0,0,114,4,0,0,0,114,6,0,0,0,114,4,1, + 0,0,152,4,0,0,115,20,0,0,0,8,7,4,2,8, + 14,8,4,4,2,8,12,8,5,10,48,8,31,12,18,114, + 4,1,0,0,99,4,0,0,0,0,0,0,0,6,0,0, + 0,11,0,0,0,67,0,0,0,115,148,0,0,0,124,0, + 106,0,100,1,131,1,125,4,124,0,106,0,100,2,131,1, + 125,5,124,4,115,66,124,5,114,36,124,5,106,1,125,4, + 110,30,124,2,124,3,107,2,114,56,116,2,124,1,124,2, + 131,2,125,4,110,10,116,3,124,1,124,2,131,2,125,4, + 124,5,115,86,116,4,124,1,124,2,100,3,124,4,144,1, + 131,2,125,5,121,36,124,5,124,0,100,2,60,0,124,4, + 124,0,100,1,60,0,124,2,124,0,100,4,60,0,124,3, + 124,0,100,5,60,0,87,0,110,20,4,0,116,5,107,10, + 114,142,1,0,1,0,1,0,89,0,110,2,88,0,100,0, + 83,0,41,6,78,218,10,95,95,108,111,97,100,101,114,95, + 95,218,8,95,95,115,112,101,99,95,95,114,123,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,123,0, + 0,0,114,219,0,0,0,114,214,0,0,0,114,164,0,0, + 0,218,9,69,120,99,101,112,116,105,111,110,41,6,90,2, + 110,115,114,101,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,123,0,0, + 0,114,161,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,218,14,95,102,105,120,95,117,112,95,109, + 111,100,117,108,101,45,5,0,0,115,34,0,0,0,0,2, + 10,1,10,1,4,1,4,1,8,1,8,1,12,2,10,1, + 4,1,16,1,2,1,8,1,8,1,8,1,12,1,14,2, + 114,22,1,0,0,99,0,0,0,0,0,0,0,0,3,0, + 0,0,3,0,0,0,67,0,0,0,115,38,0,0,0,116, + 0,116,1,106,2,131,0,102,2,125,0,116,3,116,4,102, + 2,125,1,116,5,116,6,102,2,125,2,124,0,124,1,124, + 2,103,3,83,0,41,1,122,95,82,101,116,117,114,110,115, + 32,97,32,108,105,115,116,32,111,102,32,102,105,108,101,45, + 98,97,115,101,100,32,109,111,100,117,108,101,32,108,111,97, + 100,101,114,115,46,10,10,32,32,32,32,69,97,99,104,32, + 105,116,101,109,32,105,115,32,97,32,116,117,112,108,101,32, + 40,108,111,97,100,101,114,44,32,115,117,102,102,105,120,101, + 115,41,46,10,32,32,32,32,41,7,114,220,0,0,0,114, + 142,0,0,0,218,18,101,120,116,101,110,115,105,111,110,95, + 115,117,102,102,105,120,101,115,114,214,0,0,0,114,87,0, + 0,0,114,219,0,0,0,114,77,0,0,0,41,3,90,10, + 101,120,116,101,110,115,105,111,110,115,90,6,115,111,117,114, + 99,101,90,8,98,121,116,101,99,111,100,101,114,4,0,0, + 0,114,4,0,0,0,114,6,0,0,0,114,158,0,0,0, + 68,5,0,0,115,8,0,0,0,0,5,12,1,8,1,8, + 1,114,158,0,0,0,99,1,0,0,0,0,0,0,0,12, + 0,0,0,12,0,0,0,67,0,0,0,115,188,1,0,0, + 124,0,97,0,116,0,106,1,97,1,116,0,106,2,97,2, + 116,1,106,3,116,4,25,0,125,1,120,56,100,26,68,0, + 93,48,125,2,124,2,116,1,106,3,107,7,114,58,116,0, + 106,5,124,2,131,1,125,3,110,10,116,1,106,3,124,2, + 25,0,125,3,116,6,124,1,124,2,124,3,131,3,1,0, + 113,32,87,0,100,5,100,6,103,1,102,2,100,7,100,8, + 100,6,103,2,102,2,102,2,125,4,120,118,124,4,68,0, + 93,102,92,2,125,5,125,6,116,7,100,9,100,10,132,0, + 124,6,68,0,131,1,131,1,115,142,116,8,130,1,124,6, + 100,11,25,0,125,7,124,5,116,1,106,3,107,6,114,174, + 116,1,106,3,124,5,25,0,125,8,80,0,113,112,121,16, + 116,0,106,5,124,5,131,1,125,8,80,0,87,0,113,112, + 4,0,116,9,107,10,114,212,1,0,1,0,1,0,119,112, + 89,0,113,112,88,0,113,112,87,0,116,9,100,12,131,1, + 130,1,116,6,124,1,100,13,124,8,131,3,1,0,116,6, + 124,1,100,14,124,7,131,3,1,0,116,6,124,1,100,15, + 100,16,106,10,124,6,131,1,131,3,1,0,121,14,116,0, + 106,5,100,17,131,1,125,9,87,0,110,26,4,0,116,9, + 107,10,144,1,114,52,1,0,1,0,1,0,100,18,125,9, + 89,0,110,2,88,0,116,6,124,1,100,17,124,9,131,3, + 1,0,116,0,106,5,100,19,131,1,125,10,116,6,124,1, + 100,19,124,10,131,3,1,0,124,5,100,7,107,2,144,1, + 114,120,116,0,106,5,100,20,131,1,125,11,116,6,124,1, + 100,21,124,11,131,3,1,0,116,6,124,1,100,22,116,11, + 131,0,131,3,1,0,116,12,106,13,116,2,106,14,131,0, + 131,1,1,0,124,5,100,7,107,2,144,1,114,184,116,15, + 106,16,100,23,131,1,1,0,100,24,116,12,107,6,144,1, + 114,184,100,25,116,17,95,18,100,18,83,0,41,27,122,205, + 83,101,116,117,112,32,116,104,101,32,112,97,116,104,45,98, + 97,115,101,100,32,105,109,112,111,114,116,101,114,115,32,102, + 111,114,32,105,109,112,111,114,116,108,105,98,32,98,121,32, + 105,109,112,111,114,116,105,110,103,32,110,101,101,100,101,100, + 10,32,32,32,32,98,117,105,108,116,45,105,110,32,109,111, + 100,117,108,101,115,32,97,110,100,32,105,110,106,101,99,116, + 105,110,103,32,116,104,101,109,32,105,110,116,111,32,116,104, + 101,32,103,108,111,98,97,108,32,110,97,109,101,115,112,97, + 99,101,46,10,10,32,32,32,32,79,116,104,101,114,32,99, + 111,109,112,111,110,101,110,116,115,32,97,114,101,32,101,120, + 116,114,97,99,116,101,100,32,102,114,111,109,32,116,104,101, + 32,99,111,114,101,32,98,111,111,116,115,116,114,97,112,32, + 109,111,100,117,108,101,46,10,10,32,32,32,32,114,52,0, + 0,0,114,63,0,0,0,218,8,98,117,105,108,116,105,110, + 115,114,139,0,0,0,90,5,112,111,115,105,120,250,1,47, + 218,2,110,116,250,1,92,99,1,0,0,0,0,0,0,0, + 2,0,0,0,3,0,0,0,115,0,0,0,115,26,0,0, + 0,124,0,93,18,125,1,116,0,124,1,131,1,100,0,107, + 2,86,0,1,0,113,2,100,1,83,0,41,2,114,31,0, + 0,0,78,41,1,114,33,0,0,0,41,2,114,24,0,0, + 0,114,80,0,0,0,114,4,0,0,0,114,4,0,0,0, + 114,6,0,0,0,114,223,0,0,0,104,5,0,0,115,2, + 0,0,0,4,0,122,25,95,115,101,116,117,112,46,60,108, + 111,99,97,108,115,62,46,60,103,101,110,101,120,112,114,62, + 114,62,0,0,0,122,30,105,109,112,111,114,116,108,105,98, + 32,114,101,113,117,105,114,101,115,32,112,111,115,105,120,32, + 111,114,32,110,116,114,3,0,0,0,114,27,0,0,0,114, + 23,0,0,0,114,32,0,0,0,90,7,95,116,104,114,101, + 97,100,78,90,8,95,119,101,97,107,114,101,102,90,6,119, + 105,110,114,101,103,114,166,0,0,0,114,7,0,0,0,122, + 4,46,112,121,119,122,6,95,100,46,112,121,100,84,41,4, + 122,3,95,105,111,122,9,95,119,97,114,110,105,110,103,115, + 122,8,98,117,105,108,116,105,110,115,122,7,109,97,114,115, + 104,97,108,41,19,114,117,0,0,0,114,8,0,0,0,114, + 142,0,0,0,114,235,0,0,0,114,108,0,0,0,90,18, + 95,98,117,105,108,116,105,110,95,102,114,111,109,95,110,97, + 109,101,114,112,0,0,0,218,3,97,108,108,218,14,65,115, + 115,101,114,116,105,111,110,69,114,114,111,114,114,102,0,0, + 0,114,28,0,0,0,114,13,0,0,0,114,225,0,0,0, + 114,146,0,0,0,114,23,1,0,0,114,87,0,0,0,114, + 160,0,0,0,114,165,0,0,0,114,169,0,0,0,41,12, + 218,17,95,98,111,111,116,115,116,114,97,112,95,109,111,100, + 117,108,101,90,11,115,101,108,102,95,109,111,100,117,108,101, + 90,12,98,117,105,108,116,105,110,95,110,97,109,101,90,14, + 98,117,105,108,116,105,110,95,109,111,100,117,108,101,90,10, + 111,115,95,100,101,116,97,105,108,115,90,10,98,117,105,108, + 116,105,110,95,111,115,114,23,0,0,0,114,27,0,0,0, + 90,9,111,115,95,109,111,100,117,108,101,90,13,116,104,114, + 101,97,100,95,109,111,100,117,108,101,90,14,119,101,97,107, + 114,101,102,95,109,111,100,117,108,101,90,13,119,105,110,114, + 101,103,95,109,111,100,117,108,101,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,6,95,115,101,116,117,112, + 79,5,0,0,115,82,0,0,0,0,8,4,1,6,1,6, + 3,10,1,10,1,10,1,12,2,10,1,16,3,22,1,14, + 2,22,1,8,1,10,1,10,1,4,2,2,1,10,1,6, + 1,14,1,12,2,8,1,12,1,12,1,18,3,2,1,14, + 1,16,2,10,1,12,3,10,1,12,3,10,1,10,1,12, + 3,14,1,14,1,10,1,10,1,10,1,114,31,1,0,0, 99,1,0,0,0,0,0,0,0,2,0,0,0,3,0,0, - 0,83,0,0,0,115,20,0,0,0,104,0,124,0,93,12, - 125,1,124,1,106,0,131,0,146,2,113,4,83,0,114,4, - 0,0,0,41,1,114,89,0,0,0,41,2,114,22,0,0, - 0,90,2,102,110,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,250,9,60,115,101,116,99,111,109,112,62,13, - 5,0,0,115,2,0,0,0,6,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,35,0,0,0,114,3,0, - 0,0,90,7,108,105,115,116,100,105,114,114,45,0,0,0, - 114,253,0,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,7,0,0,0,114, - 8,0,0,0,114,9,0,0,0,114,6,1,0,0,114,7, - 1,0,0,114,84,0,0,0,114,48,0,0,0,114,89,0, - 0,0,218,3,97,100,100,114,10,0,0,0,114,8,1,0, - 0,41,9,114,101,0,0,0,114,35,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,242, - 0,0,0,114,99,0,0,0,114,232,0,0,0,114,220,0, - 0,0,90,8,110,101,119,95,110,97,109,101,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,10,1,0,0, - 240,4,0,0,115,34,0,0,0,0,2,6,1,2,1,22, - 1,20,3,10,3,12,1,12,7,6,1,10,1,16,1,4, - 1,18,2,4,1,14,1,6,1,12,1,122,22,70,105,108, - 101,70,105,110,100,101,114,46,95,102,105,108,108,95,99,97, - 99,104,101,99,1,0,0,0,0,0,0,0,3,0,0,0, - 3,0,0,0,7,0,0,0,115,18,0,0,0,135,0,135, - 1,102,2,100,1,100,2,132,8,125,2,124,2,83,0,41, - 3,97,20,1,0,0,65,32,99,108,97,115,115,32,109,101, - 116,104,111,100,32,119,104,105,99,104,32,114,101,116,117,114, - 110,115,32,97,32,99,108,111,115,117,114,101,32,116,111,32, - 117,115,101,32,111,110,32,115,121,115,46,112,97,116,104,95, - 104,111,111,107,10,32,32,32,32,32,32,32,32,119,104,105, - 99,104,32,119,105,108,108,32,114,101,116,117,114,110,32,97, - 110,32,105,110,115,116,97,110,99,101,32,117,115,105,110,103, - 32,116,104,101,32,115,112,101,99,105,102,105,101,100,32,108, - 111,97,100,101,114,115,32,97,110,100,32,116,104,101,32,112, - 97,116,104,10,32,32,32,32,32,32,32,32,99,97,108,108, - 101,100,32,111,110,32,116,104,101,32,99,108,111,115,117,114, - 101,46,10,10,32,32,32,32,32,32,32,32,73,102,32,116, - 104,101,32,112,97,116,104,32,99,97,108,108,101,100,32,111, - 110,32,116,104,101,32,99,108,111,115,117,114,101,32,105,115, - 32,110,111,116,32,97,32,100,105,114,101,99,116,111,114,121, - 44,32,73,109,112,111,114,116,69,114,114,111,114,32,105,115, - 10,32,32,32,32,32,32,32,32,114,97,105,115,101,100,46, - 10,10,32,32,32,32,32,32,32,32,99,1,0,0,0,0, - 0,0,0,1,0,0,0,4,0,0,0,19,0,0,0,115, - 32,0,0,0,116,0,124,0,131,1,115,22,116,1,100,1, - 100,2,124,0,144,1,131,1,130,1,136,0,124,0,136,1, - 140,1,83,0,41,3,122,45,80,97,116,104,32,104,111,111, - 107,32,102,111,114,32,105,109,112,111,114,116,108,105,98,46, - 109,97,99,104,105,110,101,114,121,46,70,105,108,101,70,105, - 110,100,101,114,46,122,30,111,110,108,121,32,100,105,114,101, - 99,116,111,114,105,101,115,32,97,114,101,32,115,117,112,112, - 111,114,116,101,100,114,35,0,0,0,41,2,114,46,0,0, - 0,114,100,0,0,0,41,1,114,35,0,0,0,41,2,114, - 165,0,0,0,114,9,1,0,0,114,4,0,0,0,114,5, - 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,25,5,0, - 0,115,6,0,0,0,0,2,8,1,14,1,122,54,70,105, - 108,101,70,105,110,100,101,114,46,112,97,116,104,95,104,111, - 111,107,46,60,108,111,99,97,108,115,62,46,112,97,116,104, - 95,104,111,111,107,95,102,111,114,95,70,105,108,101,70,105, - 110,100,101,114,114,4,0,0,0,41,3,114,165,0,0,0, - 114,9,1,0,0,114,15,1,0,0,114,4,0,0,0,41, - 2,114,165,0,0,0,114,9,1,0,0,114,5,0,0,0, - 218,9,112,97,116,104,95,104,111,111,107,15,5,0,0,115, - 4,0,0,0,0,10,14,6,122,20,70,105,108,101,70,105, - 110,100,101,114,46,112,97,116,104,95,104,111,111,107,99,1, - 0,0,0,0,0,0,0,1,0,0,0,2,0,0,0,67, - 0,0,0,115,12,0,0,0,100,1,106,0,124,0,106,1, - 131,1,83,0,41,2,78,122,16,70,105,108,101,70,105,110, - 100,101,114,40,123,33,114,125,41,41,2,114,48,0,0,0, - 114,35,0,0,0,41,1,114,101,0,0,0,114,4,0,0, - 0,114,4,0,0,0,114,5,0,0,0,114,241,0,0,0, - 33,5,0,0,115,2,0,0,0,0,1,122,19,70,105,108, - 101,70,105,110,100,101,114,46,95,95,114,101,112,114,95,95, - 41,1,78,41,15,114,106,0,0,0,114,105,0,0,0,114, - 107,0,0,0,114,108,0,0,0,114,180,0,0,0,114,247, - 0,0,0,114,124,0,0,0,114,177,0,0,0,114,118,0, - 0,0,114,2,1,0,0,114,176,0,0,0,114,10,1,0, - 0,114,178,0,0,0,114,16,1,0,0,114,241,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,4,0,0,0,114, - 5,0,0,0,114,3,1,0,0,146,4,0,0,115,20,0, - 0,0,8,7,4,2,8,14,8,4,4,2,8,12,8,5, - 10,48,8,31,12,18,114,3,1,0,0,99,4,0,0,0, - 0,0,0,0,6,0,0,0,11,0,0,0,67,0,0,0, - 115,148,0,0,0,124,0,106,0,100,1,131,1,125,4,124, - 0,106,0,100,2,131,1,125,5,124,4,115,66,124,5,114, - 36,124,5,106,1,125,4,110,30,124,2,124,3,107,2,114, - 56,116,2,124,1,124,2,131,2,125,4,110,10,116,3,124, - 1,124,2,131,2,125,4,124,5,115,86,116,4,124,1,124, - 2,100,3,124,4,144,1,131,2,125,5,121,36,124,5,124, - 0,100,2,60,0,124,4,124,0,100,1,60,0,124,2,124, - 0,100,4,60,0,124,3,124,0,100,5,60,0,87,0,110, - 20,4,0,116,5,107,10,114,142,1,0,1,0,1,0,89, - 0,110,2,88,0,100,0,83,0,41,6,78,218,10,95,95, - 108,111,97,100,101,114,95,95,218,8,95,95,115,112,101,99, - 95,95,114,121,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,121,0,0,0,114,218,0,0,0,114,213, - 0,0,0,114,162,0,0,0,218,9,69,120,99,101,112,116, - 105,111,110,41,6,90,2,110,115,114,99,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,121,0,0,0,114,159,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,218,14,95,102, - 105,120,95,117,112,95,109,111,100,117,108,101,39,5,0,0, - 115,34,0,0,0,0,2,10,1,10,1,4,1,4,1,8, - 1,8,1,12,2,10,1,4,1,16,1,2,1,8,1,8, - 1,8,1,12,1,14,2,114,21,1,0,0,99,0,0,0, - 0,0,0,0,0,3,0,0,0,3,0,0,0,67,0,0, - 0,115,38,0,0,0,116,0,116,1,106,2,131,0,102,2, - 125,0,116,3,116,4,102,2,125,1,116,5,116,6,102,2, - 125,2,124,0,124,1,124,2,103,3,83,0,41,1,122,95, - 82,101,116,117,114,110,115,32,97,32,108,105,115,116,32,111, - 102,32,102,105,108,101,45,98,97,115,101,100,32,109,111,100, - 117,108,101,32,108,111,97,100,101,114,115,46,10,10,32,32, - 32,32,69,97,99,104,32,105,116,101,109,32,105,115,32,97, - 32,116,117,112,108,101,32,40,108,111,97,100,101,114,44,32, - 115,117,102,102,105,120,101,115,41,46,10,32,32,32,32,41, - 7,114,219,0,0,0,114,140,0,0,0,218,18,101,120,116, - 101,110,115,105,111,110,95,115,117,102,102,105,120,101,115,114, - 213,0,0,0,114,85,0,0,0,114,218,0,0,0,114,75, - 0,0,0,41,3,90,10,101,120,116,101,110,115,105,111,110, - 115,90,6,115,111,117,114,99,101,90,8,98,121,116,101,99, - 111,100,101,114,4,0,0,0,114,4,0,0,0,114,5,0, - 0,0,114,156,0,0,0,62,5,0,0,115,8,0,0,0, - 0,5,12,1,8,1,8,1,114,156,0,0,0,99,1,0, - 0,0,0,0,0,0,12,0,0,0,12,0,0,0,67,0, - 0,0,115,188,1,0,0,124,0,97,0,116,0,106,1,97, - 1,116,0,106,2,97,2,116,1,106,3,116,4,25,0,125, - 1,120,56,100,26,68,0,93,48,125,2,124,2,116,1,106, - 3,107,7,114,58,116,0,106,5,124,2,131,1,125,3,110, - 10,116,1,106,3,124,2,25,0,125,3,116,6,124,1,124, - 2,124,3,131,3,1,0,113,32,87,0,100,5,100,6,103, - 1,102,2,100,7,100,8,100,6,103,2,102,2,102,2,125, - 4,120,118,124,4,68,0,93,102,92,2,125,5,125,6,116, - 7,100,9,100,10,132,0,124,6,68,0,131,1,131,1,115, - 142,116,8,130,1,124,6,100,11,25,0,125,7,124,5,116, - 1,106,3,107,6,114,174,116,1,106,3,124,5,25,0,125, - 8,80,0,113,112,121,16,116,0,106,5,124,5,131,1,125, - 8,80,0,87,0,113,112,4,0,116,9,107,10,114,212,1, - 0,1,0,1,0,119,112,89,0,113,112,88,0,113,112,87, - 0,116,9,100,12,131,1,130,1,116,6,124,1,100,13,124, - 8,131,3,1,0,116,6,124,1,100,14,124,7,131,3,1, - 0,116,6,124,1,100,15,100,16,106,10,124,6,131,1,131, - 3,1,0,121,14,116,0,106,5,100,17,131,1,125,9,87, - 0,110,26,4,0,116,9,107,10,144,1,114,52,1,0,1, - 0,1,0,100,18,125,9,89,0,110,2,88,0,116,6,124, - 1,100,17,124,9,131,3,1,0,116,0,106,5,100,19,131, - 1,125,10,116,6,124,1,100,19,124,10,131,3,1,0,124, - 5,100,7,107,2,144,1,114,120,116,0,106,5,100,20,131, - 1,125,11,116,6,124,1,100,21,124,11,131,3,1,0,116, - 6,124,1,100,22,116,11,131,0,131,3,1,0,116,12,106, - 13,116,2,106,14,131,0,131,1,1,0,124,5,100,7,107, - 2,144,1,114,184,116,15,106,16,100,23,131,1,1,0,100, - 24,116,12,107,6,144,1,114,184,100,25,116,17,95,18,100, - 18,83,0,41,27,122,205,83,101,116,117,112,32,116,104,101, - 32,112,97,116,104,45,98,97,115,101,100,32,105,109,112,111, - 114,116,101,114,115,32,102,111,114,32,105,109,112,111,114,116, - 108,105,98,32,98,121,32,105,109,112,111,114,116,105,110,103, - 32,110,101,101,100,101,100,10,32,32,32,32,98,117,105,108, - 116,45,105,110,32,109,111,100,117,108,101,115,32,97,110,100, - 32,105,110,106,101,99,116,105,110,103,32,116,104,101,109,32, - 105,110,116,111,32,116,104,101,32,103,108,111,98,97,108,32, - 110,97,109,101,115,112,97,99,101,46,10,10,32,32,32,32, - 79,116,104,101,114,32,99,111,109,112,111,110,101,110,116,115, - 32,97,114,101,32,101,120,116,114,97,99,116,101,100,32,102, - 114,111,109,32,116,104,101,32,99,111,114,101,32,98,111,111, - 116,115,116,114,97,112,32,109,111,100,117,108,101,46,10,10, - 32,32,32,32,114,50,0,0,0,114,61,0,0,0,218,8, - 98,117,105,108,116,105,110,115,114,137,0,0,0,90,5,112, - 111,115,105,120,250,1,47,218,2,110,116,250,1,92,99,1, - 0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,115, - 0,0,0,115,26,0,0,0,124,0,93,18,125,1,116,0, - 124,1,131,1,100,0,107,2,86,0,1,0,113,2,100,1, - 83,0,41,2,114,29,0,0,0,78,41,1,114,31,0,0, - 0,41,2,114,22,0,0,0,114,78,0,0,0,114,4,0, - 0,0,114,4,0,0,0,114,5,0,0,0,114,222,0,0, - 0,98,5,0,0,115,2,0,0,0,4,0,122,25,95,115, - 101,116,117,112,46,60,108,111,99,97,108,115,62,46,60,103, - 101,110,101,120,112,114,62,114,60,0,0,0,122,30,105,109, - 112,111,114,116,108,105,98,32,114,101,113,117,105,114,101,115, - 32,112,111,115,105,120,32,111,114,32,110,116,114,3,0,0, - 0,114,25,0,0,0,114,21,0,0,0,114,30,0,0,0, - 90,7,95,116,104,114,101,97,100,78,90,8,95,119,101,97, - 107,114,101,102,90,6,119,105,110,114,101,103,114,164,0,0, - 0,114,6,0,0,0,122,4,46,112,121,119,122,6,95,100, - 46,112,121,100,84,41,4,122,3,95,105,111,122,9,95,119, - 97,114,110,105,110,103,115,122,8,98,117,105,108,116,105,110, - 115,122,7,109,97,114,115,104,97,108,41,19,114,115,0,0, - 0,114,7,0,0,0,114,140,0,0,0,114,234,0,0,0, - 114,106,0,0,0,90,18,95,98,117,105,108,116,105,110,95, - 102,114,111,109,95,110,97,109,101,114,110,0,0,0,218,3, - 97,108,108,218,14,65,115,115,101,114,116,105,111,110,69,114, - 114,111,114,114,100,0,0,0,114,26,0,0,0,114,11,0, - 0,0,114,224,0,0,0,114,144,0,0,0,114,22,1,0, - 0,114,85,0,0,0,114,158,0,0,0,114,163,0,0,0, - 114,168,0,0,0,41,12,218,17,95,98,111,111,116,115,116, - 114,97,112,95,109,111,100,117,108,101,90,11,115,101,108,102, - 95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110, - 95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109, - 111,100,117,108,101,90,10,111,115,95,100,101,116,97,105,108, - 115,90,10,98,117,105,108,116,105,110,95,111,115,114,21,0, - 0,0,114,25,0,0,0,90,9,111,115,95,109,111,100,117, - 108,101,90,13,116,104,114,101,97,100,95,109,111,100,117,108, - 101,90,14,119,101,97,107,114,101,102,95,109,111,100,117,108, - 101,90,13,119,105,110,114,101,103,95,109,111,100,117,108,101, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 6,95,115,101,116,117,112,73,5,0,0,115,82,0,0,0, - 0,8,4,1,6,1,6,3,10,1,10,1,10,1,12,2, - 10,1,16,3,22,1,14,2,22,1,8,1,10,1,10,1, - 4,2,2,1,10,1,6,1,14,1,12,2,8,1,12,1, - 12,1,18,3,2,1,14,1,16,2,10,1,12,3,10,1, - 12,3,10,1,10,1,12,3,14,1,14,1,10,1,10,1, - 10,1,114,30,1,0,0,99,1,0,0,0,0,0,0,0, - 2,0,0,0,3,0,0,0,67,0,0,0,115,84,0,0, - 0,116,0,124,0,131,1,1,0,116,1,131,0,125,1,116, - 2,106,3,106,4,116,5,106,6,124,1,140,0,103,1,131, - 1,1,0,116,7,106,8,100,1,107,2,114,56,116,2,106, - 9,106,10,116,11,131,1,1,0,116,2,106,9,106,10,116, - 12,131,1,1,0,116,5,124,0,95,5,116,13,124,0,95, - 13,100,2,83,0,41,3,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,114,25,1,0,0,78,41,14,114,30,1,0,0,114, - 156,0,0,0,114,7,0,0,0,114,251,0,0,0,114,144, - 0,0,0,114,3,1,0,0,114,16,1,0,0,114,3,0, - 0,0,114,106,0,0,0,218,9,109,101,116,97,95,112,97, - 116,104,114,158,0,0,0,114,163,0,0,0,114,246,0,0, - 0,114,213,0,0,0,41,2,114,29,1,0,0,90,17,115, - 117,112,112,111,114,116,101,100,95,108,111,97,100,101,114,115, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 8,95,105,110,115,116,97,108,108,141,5,0,0,115,16,0, - 0,0,0,2,8,1,6,1,20,1,10,1,12,1,12,4, - 6,1,114,32,1,0,0,41,3,122,3,119,105,110,114,1, - 0,0,0,114,2,0,0,0,41,1,114,47,0,0,0,41, - 1,78,41,3,78,78,78,41,3,78,78,78,41,2,114,60, - 0,0,0,114,60,0,0,0,41,1,78,41,1,78,41,56, - 114,108,0,0,0,114,10,0,0,0,114,11,0,0,0,114, - 17,0,0,0,114,19,0,0,0,114,28,0,0,0,114,38, - 0,0,0,114,39,0,0,0,114,43,0,0,0,114,44,0, - 0,0,114,46,0,0,0,114,56,0,0,0,218,4,116,121, - 112,101,218,8,95,95,99,111,100,101,95,95,114,139,0,0, - 0,114,15,0,0,0,114,129,0,0,0,114,14,0,0,0, - 114,18,0,0,0,90,17,95,82,65,87,95,77,65,71,73, - 67,95,78,85,77,66,69,82,114,74,0,0,0,114,73,0, - 0,0,114,85,0,0,0,114,75,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,80,0,0,0,114,86,0,0,0,114,92,0,0, - 0,114,96,0,0,0,114,98,0,0,0,114,117,0,0,0, - 114,124,0,0,0,114,136,0,0,0,114,142,0,0,0,114, - 145,0,0,0,114,150,0,0,0,218,6,111,98,106,101,99, - 116,114,157,0,0,0,114,162,0,0,0,114,163,0,0,0, - 114,179,0,0,0,114,189,0,0,0,114,205,0,0,0,114, - 213,0,0,0,114,218,0,0,0,114,224,0,0,0,114,219, - 0,0,0,114,225,0,0,0,114,244,0,0,0,114,246,0, - 0,0,114,3,1,0,0,114,21,1,0,0,114,156,0,0, - 0,114,30,1,0,0,114,32,1,0,0,114,4,0,0,0, - 114,4,0,0,0,114,4,0,0,0,114,5,0,0,0,218, - 8,60,109,111,100,117,108,101,62,8,0,0,0,115,102,0, - 0,0,4,17,4,3,8,13,8,5,8,5,8,6,8,12, - 8,10,8,9,8,5,8,7,10,22,10,116,16,1,12,2, - 4,1,4,2,6,2,6,2,8,2,16,44,8,33,8,19, - 8,12,8,12,8,28,8,17,10,55,10,12,10,10,8,14, - 6,3,4,1,14,65,14,64,14,29,16,110,14,41,18,45, - 18,16,4,3,18,53,14,60,14,42,14,127,0,5,14,127, - 0,22,10,23,8,11,8,68, + 0,67,0,0,0,115,84,0,0,0,116,0,124,0,131,1, + 1,0,116,1,131,0,125,1,116,2,106,3,106,4,116,5, + 106,6,124,1,140,0,103,1,131,1,1,0,116,7,106,8, + 100,1,107,2,114,56,116,2,106,9,106,10,116,11,131,1, + 1,0,116,2,106,9,106,10,116,12,131,1,1,0,116,5, + 124,0,95,5,116,13,124,0,95,13,100,2,83,0,41,3, + 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,114,26,1,0,0, + 78,41,14,114,31,1,0,0,114,158,0,0,0,114,8,0, + 0,0,114,252,0,0,0,114,146,0,0,0,114,4,1,0, + 0,114,17,1,0,0,114,3,0,0,0,114,108,0,0,0, + 218,9,109,101,116,97,95,112,97,116,104,114,160,0,0,0, + 114,165,0,0,0,114,247,0,0,0,114,214,0,0,0,41, + 2,114,30,1,0,0,90,17,115,117,112,112,111,114,116,101, + 100,95,108,111,97,100,101,114,115,114,4,0,0,0,114,4, + 0,0,0,114,6,0,0,0,218,8,95,105,110,115,116,97, + 108,108,147,5,0,0,115,16,0,0,0,0,2,8,1,6, + 1,20,1,10,1,12,1,12,4,6,1,114,33,1,0,0, + 41,1,122,3,119,105,110,41,2,114,1,0,0,0,114,2, + 0,0,0,41,1,114,49,0,0,0,41,1,78,41,3,78, + 78,78,41,3,78,78,78,41,2,114,62,0,0,0,114,62, + 0,0,0,41,1,78,41,1,78,41,58,114,110,0,0,0, + 114,12,0,0,0,90,37,95,67,65,83,69,95,73,78,83, + 69,78,83,73,84,73,86,69,95,80,76,65,84,70,79,82, + 77,83,95,66,89,84,69,83,95,75,69,89,114,11,0,0, + 0,114,13,0,0,0,114,19,0,0,0,114,21,0,0,0, + 114,30,0,0,0,114,40,0,0,0,114,41,0,0,0,114, + 45,0,0,0,114,46,0,0,0,114,48,0,0,0,114,58, + 0,0,0,218,4,116,121,112,101,218,8,95,95,99,111,100, + 101,95,95,114,141,0,0,0,114,17,0,0,0,114,131,0, + 0,0,114,16,0,0,0,114,20,0,0,0,90,17,95,82, + 65,87,95,77,65,71,73,67,95,78,85,77,66,69,82,114, + 76,0,0,0,114,75,0,0,0,114,87,0,0,0,114,77, + 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,82,0,0,0,114,88, + 0,0,0,114,94,0,0,0,114,98,0,0,0,114,100,0, + 0,0,114,119,0,0,0,114,126,0,0,0,114,138,0,0, + 0,114,144,0,0,0,114,147,0,0,0,114,152,0,0,0, + 218,6,111,98,106,101,99,116,114,159,0,0,0,114,164,0, + 0,0,114,165,0,0,0,114,180,0,0,0,114,190,0,0, + 0,114,206,0,0,0,114,214,0,0,0,114,219,0,0,0, + 114,225,0,0,0,114,220,0,0,0,114,226,0,0,0,114, + 245,0,0,0,114,247,0,0,0,114,4,1,0,0,114,22, + 1,0,0,114,158,0,0,0,114,31,1,0,0,114,33,1, + 0,0,114,4,0,0,0,114,4,0,0,0,114,4,0,0, + 0,114,6,0,0,0,218,8,60,109,111,100,117,108,101,62, + 8,0,0,0,115,108,0,0,0,4,16,4,1,4,1,2, + 1,6,3,8,17,8,5,8,5,8,6,8,12,8,10,8, + 9,8,5,8,7,10,22,10,116,16,1,12,2,4,1,4, + 2,6,2,6,2,8,2,16,44,8,33,8,19,8,12,8, + 12,8,28,8,17,10,55,10,12,10,10,8,14,6,3,4, + 1,14,65,14,64,14,29,16,110,14,41,18,45,18,16,4, + 3,18,53,14,60,14,42,14,127,0,5,14,127,0,22,10, + 23,8,11,8,68, }; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 18:27:24 2016 From: python-checkins at python.org (terry.reedy) Date: Sat, 16 Jul 2016 22:27:24 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI1NTA3?= =?utf-8?q?=3A_IDLE_no_longer_runs_buggy_code_because_of_its_tkinter_impor?= =?utf-8?b?dHMu?= Message-ID: <20160716222723.31442.2356.9BFD1AEA@psf.io> https://hg.python.org/cpython/rev/8df5200064c4 changeset: 102372:8df5200064c4 branch: 3.5 parent: 102369:6b46c1510bfa user: Terry Jan Reedy date: Sat Jul 16 18:26:32 2016 -0400 summary: Issue #25507: IDLE no longer runs buggy code because of its tkinter imports. Users must include the same imports required to run directly in Python. files: Lib/idlelib/run.py | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -19,6 +19,12 @@ import __main__ +for mod in ('simpledialog', 'messagebox', 'font', + 'dialog', 'filedialog', 'commondialog', + 'colorchooser'): + delattr(tkinter, mod) + del sys.modules['tkinter.' + mod] + LOCALHOST = '127.0.0.1' import warnings -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 18:27:24 2016 From: python-checkins at python.org (terry.reedy) Date: Sat, 16 Jul 2016 22:27:24 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2325507=3A_Merge_from_3=2E5_with_ttk_replacing_co?= =?utf-8?q?lorchooser=2E?= Message-ID: <20160716222724.80625.15.7388A547@psf.io> https://hg.python.org/cpython/rev/af602a891892 changeset: 102373:af602a891892 parent: 102371:49e1e8413ecc parent: 102372:8df5200064c4 user: Terry Jan Reedy date: Sat Jul 16 18:27:11 2016 -0400 summary: Issue #25507: Merge from 3.5 with ttk replacing colorchooser. IDLE no longer runs buggy code because of its tkinter imports. Users must include the same imports required to run directly in Python. files: Lib/idlelib/run.py | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/Lib/idlelib/run.py b/Lib/idlelib/run.py --- a/Lib/idlelib/run.py +++ b/Lib/idlelib/run.py @@ -19,6 +19,12 @@ import __main__ +for mod in ('simpledialog', 'messagebox', 'font', + 'dialog', 'filedialog', 'commondialog', + 'ttk'): + delattr(tkinter, mod) + del sys.modules['tkinter.' + mod] + LOCALHOST = '127.0.0.1' import warnings -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 19:16:42 2016 From: python-checkins at python.org (steve.dower) Date: Sat, 16 Jul 2016 23:16:42 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_from_3=2E5?= Message-ID: <20160716231641.22804.51868.7ACC47E2@psf.io> https://hg.python.org/cpython/rev/bff31254a0f0 changeset: 102375:bff31254a0f0 parent: 102373:af602a891892 parent: 102374:6b0023810108 user: Steve Dower date: Sat Jul 16 16:13:51 2016 -0700 summary: Merge from 3.5 files: PCbuild/pcbuild.proj | 32 +++++++++- PCbuild/pyproject.props | 11 +-- PCbuild/python.props | 9 ++- Tools/msi/bundle/bootstrap/pythonba.vcxproj | 2 +- Tools/msi/make_zip.proj | 2 +- Tools/msi/make_zip.py | 33 +++++---- Tools/msi/msi.props | 8 ++- 7 files changed, 68 insertions(+), 29 deletions(-) diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -21,6 +21,15 @@ CleanAll true + + $(Platform) + $(Configuration) + + Build + Clean + CleanAll + true + @@ -35,6 +44,8 @@ + + @@ -58,9 +69,9 @@ - + false - + @@ -69,9 +80,20 @@ BuildInParallel="%(BuildInParallel)" StopOnFirstFailure="true" Targets="%(BuildTarget)" /> + + + 10.0.30319.1 10.0 $(BuildPath) - $(Py_OutDir) $(OutDir)\ - $(SolutionDir)obj\ - $(IntDir)\ + $(SolutionDir)obj\ $(Py_IntDir)\$(ArchName)_$(Configuration)\$(ProjectName)\ $(Py_IntDir)\$(ArchName)_PGO\$(ProjectName)\ $(ProjectName) @@ -29,7 +27,7 @@ - $(PySourcePath)Include;$(PySourcePath)PC;%(AdditionalIncludeDirectories) + $(PySourcePath)Include;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories) WIN32;$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions) MaxSpeed @@ -85,9 +83,8 @@ true Win32 X64 - $(OutDir)wininst.tlb - - + $(OutDir)%(Filename).tlb + $(IntDir)%(Filename)_h.h diff --git a/PCbuild/python.props b/PCbuild/python.props --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -32,8 +32,13 @@ $(PySourcePath)\ - $(PySourcePath)PCBuild\$(ArchName)\ - $(PyBuildPath) + $(PySourcePath)PCBuild\win32\ + $(Py_OutDir)\win32\ + $(PySourcePath)PCBuild\amd64\ + $(Py_OutDir)\amd64\ + $(BuildPath32) + $(BuildPath64) + $(PySourcePath)PCBuild\$(ArchName)\ $(BuildPath)\ diff --git a/Tools/msi/bundle/bootstrap/pythonba.vcxproj b/Tools/msi/bundle/bootstrap/pythonba.vcxproj --- a/Tools/msi/bundle/bootstrap/pythonba.vcxproj +++ b/Tools/msi/bundle/bootstrap/pythonba.vcxproj @@ -31,7 +31,7 @@ DynamicLibrary Unicode - $(PySourcePath)PCBuild\obj\$(Configuration)_$(Platform)_Setup\Bootstrap\ + $(Py_IntDir)\$(Configuration)_$(Platform)_Setup\Bootstrap\ $(IntDir) diff --git a/Tools/msi/make_zip.proj b/Tools/msi/make_zip.proj --- a/Tools/msi/make_zip.proj +++ b/Tools/msi/make_zip.proj @@ -16,7 +16,7 @@ $(OutputPath)\en-us\$(TargetName)$(TargetExt) rmdir /q/s "$(IntermediateOutputPath)\zip_$(ArchName)" "$(PythonExe)" "$(MSBuildThisFileDirectory)\make_zip.py" - $(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -a $(ArchName) + $(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -b "$(OutDir.TrimEnd('\'))" set DOC_FILENAME=python$(PythonVersion).chm set VCREDIST_PATH=$(VS140COMNTOOLS)\..\..\VC\redist\$(Platform)\Microsoft.VC140.CRT diff --git a/Tools/msi/make_zip.py b/Tools/msi/make_zip.py --- a/Tools/msi/make_zip.py +++ b/Tools/msi/make_zip.py @@ -90,23 +90,23 @@ return p.suffix.lower() in {'.py', '.pyw', '.txt'} FULL_LAYOUT = [ - ('/', 'PCBuild/$arch', 'python.exe', is_not_debug), - ('/', 'PCBuild/$arch', 'pythonw.exe', is_not_debug), - ('/', 'PCBuild/$arch', 'python{0.major}.dll'.format(sys.version_info), is_not_debug), - ('/', 'PCBuild/$arch', 'python{0.major}{0.minor}.dll'.format(sys.version_info), is_not_debug), - ('DLLs/', 'PCBuild/$arch', '*.pyd', is_not_debug), - ('DLLs/', 'PCBuild/$arch', '*.dll', is_not_debug_or_python), + ('/', '$build', 'python.exe', is_not_debug), + ('/', '$build', 'pythonw.exe', is_not_debug), + ('/', '$build', 'python{0.major}.dll'.format(sys.version_info), is_not_debug), + ('/', '$build', 'python{0.major}{0.minor}.dll'.format(sys.version_info), is_not_debug), + ('DLLs/', '$build', '*.pyd', is_not_debug), + ('DLLs/', '$build', '*.dll', is_not_debug_or_python), ('include/', 'include', '*.h', None), ('include/', 'PC', 'pyconfig.h', None), ('Lib/', 'Lib', '**/*', include_in_lib), - ('libs/', 'PCBuild/$arch', '*.lib', include_in_libs), + ('libs/', '$build', '*.lib', include_in_libs), ('Tools/', 'Tools', '**/*', include_in_tools), ] EMBED_LAYOUT = [ - ('/', 'PCBuild/$arch', 'python*.exe', is_not_debug), - ('/', 'PCBuild/$arch', '*.pyd', is_not_debug), - ('/', 'PCBuild/$arch', '*.dll', is_not_debug), + ('/', '$build', 'python*.exe', is_not_debug), + ('/', '$build', '*.pyd', is_not_debug), + ('/', '$build', '*.dll', is_not_debug), ('python{0.major}{0.minor}.zip'.format(sys.version_info), 'Lib', '**/*', include_in_lib), ] @@ -168,18 +168,18 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument('-s', '--source', metavar='dir', help='The directory containing the repository root', type=Path) - parser.add_argument('-o', '--out', metavar='file', help='The name of the output self-extracting archive', type=Path, default=None) + parser.add_argument('-o', '--out', metavar='file', help='The name of the output archive', type=Path, default=None) parser.add_argument('-t', '--temp', metavar='dir', help='A directory to temporarily extract files into', type=Path, default=None) parser.add_argument('-e', '--embed', help='Create an embedding layout', action='store_true', default=False) - parser.add_argument('-a', '--arch', help='Specify the architecture to use (win32/amd64)', type=str, default="win32") + parser.add_argument('-b', '--build', help='Specify the build directory', type=Path) ns = parser.parse_args() source = ns.source or (Path(__file__).resolve().parent.parent.parent) out = ns.out - arch = ns.arch + build = ns.build assert isinstance(source, Path) assert not out or isinstance(out, Path) - assert isinstance(arch, str) + assert isinstance(build, Path) if ns.temp: temp = ns.temp @@ -202,7 +202,10 @@ try: for t, s, p, c in layout: - s = source / s.replace("$arch", arch) + if s == '$build': + s = build + else: + s = source / s copied = copy_to_layout(temp / t.rstrip('/'), rglob(s, p, c)) print('Copied {} files'.format(copied)) diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props --- a/Tools/msi/msi.props +++ b/Tools/msi/msi.props @@ -47,7 +47,7 @@ - $(PySourcePath)PCBuild\obj\$(Configuration)_$(Platform)_Setup\$(OutputName) + $(Py_IntDir)\$(Configuration)_$(Platform)_Setup\$(OutputName) $(IntermediateOutputPath)_$(OutputSuffix) $(BuildPath) $(OutputPath)\ @@ -124,6 +124,12 @@ redist + + build32 + + + build64 + -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 16 19:16:42 2016 From: python-checkins at python.org (steve.dower) Date: Sat, 16 Jul 2016 23:16:42 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Fixes_use_of_P?= =?utf-8?q?y=5FIntDir_and_Py=5FOutDir_to_control_build_directories=2E?= Message-ID: <20160716231641.121072.76085.C62BCC39@psf.io> https://hg.python.org/cpython/rev/6b0023810108 changeset: 102374:6b0023810108 branch: 3.5 parent: 102372:8df5200064c4 user: Steve Dower date: Sat Jul 16 16:13:19 2016 -0700 summary: Fixes use of Py_IntDir and Py_OutDir to control build directories. files: PCbuild/pcbuild.proj | 32 +++++++++- PCbuild/pyproject.props | 11 +-- PCbuild/python.props | 9 ++- Tools/msi/bundle/bootstrap/pythonba.vcxproj | 2 +- Tools/msi/make_zip.proj | 2 +- Tools/msi/make_zip.py | 33 +++++---- Tools/msi/msi.props | 8 ++- 7 files changed, 68 insertions(+), 29 deletions(-) diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -21,6 +21,15 @@ CleanAll true + + $(Platform) + $(Configuration) + + Build + Clean + CleanAll + true + @@ -35,6 +44,8 @@ + + @@ -58,9 +69,9 @@ - + false - + @@ -69,9 +80,20 @@ BuildInParallel="%(BuildInParallel)" StopOnFirstFailure="true" Targets="%(BuildTarget)" /> + + + 10.0.30319.1 10.0 $(BuildPath) - $(Py_OutDir) $(OutDir)\ - $(SolutionDir)obj\ - $(IntDir)\ + $(SolutionDir)obj\ $(Py_IntDir)\$(ArchName)_$(Configuration)\$(ProjectName)\ $(Py_IntDir)\$(ArchName)_PGO\$(ProjectName)\ $(ProjectName) @@ -29,7 +27,7 @@ - $(PySourcePath)Include;$(PySourcePath)PC;%(AdditionalIncludeDirectories) + $(PySourcePath)Include;$(PySourcePath)PC;$(IntDir);%(AdditionalIncludeDirectories) WIN32;$(_PlatformPreprocessorDefinition)$(_DebugPreprocessorDefinition)$(_PydPreprocessorDefinition)%(PreprocessorDefinitions) MaxSpeed @@ -85,9 +83,8 @@ true Win32 X64 - $(OutDir)wininst.tlb - - + $(OutDir)%(Filename).tlb + $(IntDir)%(Filename)_h.h diff --git a/PCbuild/python.props b/PCbuild/python.props --- a/PCbuild/python.props +++ b/PCbuild/python.props @@ -32,8 +32,13 @@ $(PySourcePath)\ - $(PySourcePath)PCBuild\$(ArchName)\ - $(PyBuildPath) + $(PySourcePath)PCBuild\win32\ + $(Py_OutDir)\win32\ + $(PySourcePath)PCBuild\amd64\ + $(Py_OutDir)\amd64\ + $(BuildPath32) + $(BuildPath64) + $(PySourcePath)PCBuild\$(ArchName)\ $(BuildPath)\ diff --git a/Tools/msi/bundle/bootstrap/pythonba.vcxproj b/Tools/msi/bundle/bootstrap/pythonba.vcxproj --- a/Tools/msi/bundle/bootstrap/pythonba.vcxproj +++ b/Tools/msi/bundle/bootstrap/pythonba.vcxproj @@ -31,7 +31,7 @@ DynamicLibrary Unicode - $(PySourcePath)PCBuild\obj\$(Configuration)_$(Platform)_Setup\Bootstrap\ + $(Py_IntDir)\$(Configuration)_$(Platform)_Setup\Bootstrap\ $(IntDir) diff --git a/Tools/msi/make_zip.proj b/Tools/msi/make_zip.proj --- a/Tools/msi/make_zip.proj +++ b/Tools/msi/make_zip.proj @@ -16,7 +16,7 @@ $(OutputPath)\en-us\$(TargetName)$(TargetExt) rmdir /q/s "$(IntermediateOutputPath)\zip_$(ArchName)" "$(PythonExe)" "$(MSBuildThisFileDirectory)\make_zip.py" - $(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -a $(ArchName) + $(Arguments) -e -o "$(TargetPath)" -t "$(IntermediateOutputPath)\zip_$(ArchName)" -b "$(OutDir.TrimEnd('\'))" set DOC_FILENAME=python$(PythonVersion).chm set VCREDIST_PATH=$(VS140COMNTOOLS)\..\..\VC\redist\$(Platform)\Microsoft.VC140.CRT diff --git a/Tools/msi/make_zip.py b/Tools/msi/make_zip.py --- a/Tools/msi/make_zip.py +++ b/Tools/msi/make_zip.py @@ -90,23 +90,23 @@ return p.suffix.lower() in {'.py', '.pyw', '.txt'} FULL_LAYOUT = [ - ('/', 'PCBuild/$arch', 'python.exe', is_not_debug), - ('/', 'PCBuild/$arch', 'pythonw.exe', is_not_debug), - ('/', 'PCBuild/$arch', 'python{0.major}.dll'.format(sys.version_info), is_not_debug), - ('/', 'PCBuild/$arch', 'python{0.major}{0.minor}.dll'.format(sys.version_info), is_not_debug), - ('DLLs/', 'PCBuild/$arch', '*.pyd', is_not_debug), - ('DLLs/', 'PCBuild/$arch', '*.dll', is_not_debug_or_python), + ('/', '$build', 'python.exe', is_not_debug), + ('/', '$build', 'pythonw.exe', is_not_debug), + ('/', '$build', 'python{0.major}.dll'.format(sys.version_info), is_not_debug), + ('/', '$build', 'python{0.major}{0.minor}.dll'.format(sys.version_info), is_not_debug), + ('DLLs/', '$build', '*.pyd', is_not_debug), + ('DLLs/', '$build', '*.dll', is_not_debug_or_python), ('include/', 'include', '*.h', None), ('include/', 'PC', 'pyconfig.h', None), ('Lib/', 'Lib', '**/*', include_in_lib), - ('libs/', 'PCBuild/$arch', '*.lib', include_in_libs), + ('libs/', '$build', '*.lib', include_in_libs), ('Tools/', 'Tools', '**/*', include_in_tools), ] EMBED_LAYOUT = [ - ('/', 'PCBuild/$arch', 'python*.exe', is_not_debug), - ('/', 'PCBuild/$arch', '*.pyd', is_not_debug), - ('/', 'PCBuild/$arch', '*.dll', is_not_debug), + ('/', '$build', 'python*.exe', is_not_debug), + ('/', '$build', '*.pyd', is_not_debug), + ('/', '$build', '*.dll', is_not_debug), ('python{0.major}{0.minor}.zip'.format(sys.version_info), 'Lib', '**/*', include_in_lib), ] @@ -168,18 +168,18 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument('-s', '--source', metavar='dir', help='The directory containing the repository root', type=Path) - parser.add_argument('-o', '--out', metavar='file', help='The name of the output self-extracting archive', type=Path, default=None) + parser.add_argument('-o', '--out', metavar='file', help='The name of the output archive', type=Path, default=None) parser.add_argument('-t', '--temp', metavar='dir', help='A directory to temporarily extract files into', type=Path, default=None) parser.add_argument('-e', '--embed', help='Create an embedding layout', action='store_true', default=False) - parser.add_argument('-a', '--arch', help='Specify the architecture to use (win32/amd64)', type=str, default="win32") + parser.add_argument('-b', '--build', help='Specify the build directory', type=Path) ns = parser.parse_args() source = ns.source or (Path(__file__).resolve().parent.parent.parent) out = ns.out - arch = ns.arch + build = ns.build assert isinstance(source, Path) assert not out or isinstance(out, Path) - assert isinstance(arch, str) + assert isinstance(build, Path) if ns.temp: temp = ns.temp @@ -202,7 +202,10 @@ try: for t, s, p, c in layout: - s = source / s.replace("$arch", arch) + if s == '$build': + s = build + else: + s = source / s copied = copy_to_layout(temp / t.rstrip('/'), rglob(s, p, c)) print('Copied {} files'.format(copied)) diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props --- a/Tools/msi/msi.props +++ b/Tools/msi/msi.props @@ -47,7 +47,7 @@ - $(PySourcePath)PCBuild\obj\$(Configuration)_$(Platform)_Setup\$(OutputName) + $(Py_IntDir)\$(Configuration)_$(Platform)_Setup\$(OutputName) $(IntermediateOutputPath)_$(OutputSuffix) $(BuildPath) $(OutputPath)\ @@ -124,6 +124,12 @@ redist + + build32 + + + build64 + -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 04:36:19 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 08:36:19 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzE3NzEx?= =?utf-8?q?=3A_Fixed_unpickling_by_the_persistent_ID_with_protocol_0=2E?= Message-ID: <20160717083610.32701.19148.011F800E@psf.io> https://hg.python.org/cpython/rev/f6a41552a312 changeset: 102376:f6a41552a312 branch: 3.5 parent: 102374:6b0023810108 user: Serhiy Storchaka date: Sun Jul 17 11:24:17 2016 +0300 summary: Issue #17711: Fixed unpickling by the persistent ID with protocol 0. Original patch by Alexandre Vassalotti. files: Lib/pickle.py | 12 +++++++- Lib/test/pickletester.py | 29 ++++++++++++++++++++ Lib/test/test_pickle.py | 33 +++++++++++++++++----- Misc/NEWS | 3 ++ Modules/_pickle.c | 40 +++++++++++++++++---------- 5 files changed, 92 insertions(+), 25 deletions(-) diff --git a/Lib/pickle.py b/Lib/pickle.py --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -529,7 +529,11 @@ self.save(pid, save_persistent_id=False) self.write(BINPERSID) else: - self.write(PERSID + str(pid).encode("ascii") + b'\n') + try: + self.write(PERSID + str(pid).encode("ascii") + b'\n') + except UnicodeEncodeError: + raise PicklingError( + "persistent IDs in protocol 0 must be ASCII strings") def save_reduce(self, func, args, state=None, listitems=None, dictitems=None, obj=None): @@ -1075,7 +1079,11 @@ dispatch[FRAME[0]] = load_frame def load_persid(self): - pid = self.readline()[:-1].decode("ascii") + try: + pid = self.readline()[:-1].decode("ascii") + except UnicodeDecodeError: + raise UnpicklingError( + "persistent IDs in protocol 0 must be ASCII strings") self.append(self.persistent_load(pid)) dispatch[PERSID[0]] = load_persid diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -2629,6 +2629,35 @@ self.assertEqual(self.load_false_count, 1) +class AbstractIdentityPersistentPicklerTests(unittest.TestCase): + + def persistent_id(self, obj): + return obj + + def persistent_load(self, pid): + return pid + + def _check_return_correct_type(self, obj, proto): + unpickled = self.loads(self.dumps(obj, proto)) + self.assertIsInstance(unpickled, type(obj)) + self.assertEqual(unpickled, obj) + + def test_return_correct_type(self): + for proto in protocols: + # Protocol 0 supports only ASCII strings. + if proto == 0: + self._check_return_correct_type("abc", 0) + else: + for obj in [b"abc\n", "abc\n", -1, -1.1 * 0.1, str]: + self._check_return_correct_type(obj, proto) + + def test_protocol0_is_ascii_only(self): + non_ascii_str = "\N{EMPTY SET}" + self.assertRaises(pickle.PicklingError, self.dumps, non_ascii_str, 0) + pickled = pickle.PERSID + non_ascii_str.encode('utf-8') + b'\n.' + self.assertRaises(pickle.UnpicklingError, self.loads, pickled) + + class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): pickler_class = None diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py --- a/Lib/test/test_pickle.py +++ b/Lib/test/test_pickle.py @@ -14,6 +14,7 @@ from test.pickletester import AbstractPickleTests from test.pickletester import AbstractPickleModuleTests from test.pickletester import AbstractPersistentPicklerTests +from test.pickletester import AbstractIdentityPersistentPicklerTests from test.pickletester import AbstractPicklerUnpicklerObjectTests from test.pickletester import AbstractDispatchTableTests from test.pickletester import BigmemPickleTests @@ -82,10 +83,7 @@ return pickle.loads(buf, **kwds) -class PyPersPicklerTests(AbstractPersistentPicklerTests): - - pickler = pickle._Pickler - unpickler = pickle._Unpickler +class PersistentPicklerUnpicklerMixin(object): def dumps(self, arg, proto=None): class PersPickler(self.pickler): @@ -94,8 +92,7 @@ f = io.BytesIO() p = PersPickler(f, proto) p.dump(arg) - f.seek(0) - return f.read() + return f.getvalue() def loads(self, buf, **kwds): class PersUnpickler(self.unpickler): @@ -106,6 +103,20 @@ return u.load() +class PyPersPicklerTests(AbstractPersistentPicklerTests, + PersistentPicklerUnpicklerMixin): + + pickler = pickle._Pickler + unpickler = pickle._Unpickler + + +class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests, + PersistentPicklerUnpicklerMixin): + + pickler = pickle._Pickler + unpickler = pickle._Unpickler + + class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): pickler_class = pickle._Pickler @@ -144,6 +155,10 @@ pickler = _pickle.Pickler unpickler = _pickle.Unpickler + class CIdPersPicklerTests(PyIdPersPicklerTests): + pickler = _pickle.Pickler + unpickler = _pickle.Unpickler + class CDumpPickle_LoadPickle(PyPicklerTests): pickler = _pickle.Pickler unpickler = pickle._Unpickler @@ -409,11 +424,13 @@ def test_main(): - tests = [PickleTests, PyUnpicklerTests, PyPicklerTests, PyPersPicklerTests, + tests = [PickleTests, PyUnpicklerTests, PyPicklerTests, + PyPersPicklerTests, PyIdPersPicklerTests, PyDispatchTableTests, PyChainDispatchTableTests, CompatPickleTests] if has_c_implementation: - tests.extend([CUnpicklerTests, CPicklerTests, CPersPicklerTests, + tests.extend([CUnpicklerTests, CPicklerTests, + CPersPicklerTests, CIdPersPicklerTests, CDumpPickle_LoadPickle, DumpPickle_CLoadPickle, PyPicklerUnpicklerObjectTests, CPicklerUnpicklerObjectTests, diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -24,6 +24,9 @@ Library ------- +- Issue #17711: Fixed unpickling by the persistent ID with protocol 0. + Original patch by Alexandre Vassalotti. + - Issue #27522: Avoid an unintentional reference cycle in email.feedparser. - Issue #26844: Fix error message for imp.find_module() to refer to 'path' diff --git a/Modules/_pickle.c b/Modules/_pickle.c --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -3406,26 +3406,30 @@ goto error; } else { - PyObject *pid_str = NULL; - char *pid_ascii_bytes; - Py_ssize_t size; + PyObject *pid_str; pid_str = PyObject_Str(pid); if (pid_str == NULL) goto error; - /* XXX: Should it check whether the persistent id only contains - ASCII characters? And what if the pid contains embedded + /* XXX: Should it check whether the pid contains embedded newlines? */ - pid_ascii_bytes = _PyUnicode_AsStringAndSize(pid_str, &size); + if (!PyUnicode_IS_ASCII(pid_str)) { + PyErr_SetString(_Pickle_GetGlobalState()->PicklingError, + "persistent IDs in protocol 0 must be " + "ASCII strings"); + Py_DECREF(pid_str); + goto error; + } + + if (_Pickler_Write(self, &persid_op, 1) < 0 || + _Pickler_Write(self, PyUnicode_DATA(pid_str), + PyUnicode_GET_LENGTH(pid_str)) < 0 || + _Pickler_Write(self, "\n", 1) < 0) { + Py_DECREF(pid_str); + goto error; + } Py_DECREF(pid_str); - if (pid_ascii_bytes == NULL) - goto error; - - if (_Pickler_Write(self, &persid_op, 1) < 0 || - _Pickler_Write(self, pid_ascii_bytes, size) < 0 || - _Pickler_Write(self, "\n", 1) < 0) - goto error; } status = 1; } @@ -5389,9 +5393,15 @@ if (len < 1) return bad_readline(); - pid = PyBytes_FromStringAndSize(s, len - 1); - if (pid == NULL) + pid = PyUnicode_DecodeASCII(s, len - 1, "strict"); + if (pid == NULL) { + if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + PyErr_SetString(_Pickle_GetGlobalState()->UnpicklingError, + "persistent IDs in protocol 0 must be " + "ASCII strings"); + } return -1; + } /* This does not leak since _Pickle_FastCall() steals the reference to pid first. */ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 04:36:19 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 08:36:19 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2317711=3A_Fixed_unpickling_by_the_persistent_ID_?= =?utf-8?q?with_protocol_0=2E?= Message-ID: <20160717083610.22473.37808.9F5E6321@psf.io> https://hg.python.org/cpython/rev/df8857c6f3eb changeset: 102377:df8857c6f3eb parent: 102375:bff31254a0f0 parent: 102376:f6a41552a312 user: Serhiy Storchaka date: Sun Jul 17 11:35:35 2016 +0300 summary: Issue #17711: Fixed unpickling by the persistent ID with protocol 0. Original patch by Alexandre Vassalotti. files: Lib/pickle.py | 12 +++++++- Lib/test/pickletester.py | 29 ++++++++++++++++++++ Lib/test/test_pickle.py | 33 +++++++++++++++++----- Misc/NEWS | 3 ++ Modules/_pickle.c | 40 +++++++++++++++++---------- 5 files changed, 92 insertions(+), 25 deletions(-) diff --git a/Lib/pickle.py b/Lib/pickle.py --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -530,7 +530,11 @@ self.save(pid, save_persistent_id=False) self.write(BINPERSID) else: - self.write(PERSID + str(pid).encode("ascii") + b'\n') + try: + self.write(PERSID + str(pid).encode("ascii") + b'\n') + except UnicodeEncodeError: + raise PicklingError( + "persistent IDs in protocol 0 must be ASCII strings") def save_reduce(self, func, args, state=None, listitems=None, dictitems=None, obj=None): @@ -1074,7 +1078,11 @@ dispatch[FRAME[0]] = load_frame def load_persid(self): - pid = self.readline()[:-1].decode("ascii") + try: + pid = self.readline()[:-1].decode("ascii") + except UnicodeDecodeError: + raise UnpicklingError( + "persistent IDs in protocol 0 must be ASCII strings") self.append(self.persistent_load(pid)) dispatch[PERSID[0]] = load_persid diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py --- a/Lib/test/pickletester.py +++ b/Lib/test/pickletester.py @@ -2622,6 +2622,35 @@ self.assertEqual(self.load_false_count, 1) +class AbstractIdentityPersistentPicklerTests(unittest.TestCase): + + def persistent_id(self, obj): + return obj + + def persistent_load(self, pid): + return pid + + def _check_return_correct_type(self, obj, proto): + unpickled = self.loads(self.dumps(obj, proto)) + self.assertIsInstance(unpickled, type(obj)) + self.assertEqual(unpickled, obj) + + def test_return_correct_type(self): + for proto in protocols: + # Protocol 0 supports only ASCII strings. + if proto == 0: + self._check_return_correct_type("abc", 0) + else: + for obj in [b"abc\n", "abc\n", -1, -1.1 * 0.1, str]: + self._check_return_correct_type(obj, proto) + + def test_protocol0_is_ascii_only(self): + non_ascii_str = "\N{EMPTY SET}" + self.assertRaises(pickle.PicklingError, self.dumps, non_ascii_str, 0) + pickled = pickle.PERSID + non_ascii_str.encode('utf-8') + b'\n.' + self.assertRaises(pickle.UnpicklingError, self.loads, pickled) + + class AbstractPicklerUnpicklerObjectTests(unittest.TestCase): pickler_class = None diff --git a/Lib/test/test_pickle.py b/Lib/test/test_pickle.py --- a/Lib/test/test_pickle.py +++ b/Lib/test/test_pickle.py @@ -14,6 +14,7 @@ from test.pickletester import AbstractPickleTests from test.pickletester import AbstractPickleModuleTests from test.pickletester import AbstractPersistentPicklerTests +from test.pickletester import AbstractIdentityPersistentPicklerTests from test.pickletester import AbstractPicklerUnpicklerObjectTests from test.pickletester import AbstractDispatchTableTests from test.pickletester import BigmemPickleTests @@ -78,10 +79,7 @@ return pickle.loads(buf, **kwds) -class PyPersPicklerTests(AbstractPersistentPicklerTests): - - pickler = pickle._Pickler - unpickler = pickle._Unpickler +class PersistentPicklerUnpicklerMixin(object): def dumps(self, arg, proto=None): class PersPickler(self.pickler): @@ -90,8 +88,7 @@ f = io.BytesIO() p = PersPickler(f, proto) p.dump(arg) - f.seek(0) - return f.read() + return f.getvalue() def loads(self, buf, **kwds): class PersUnpickler(self.unpickler): @@ -102,6 +99,20 @@ return u.load() +class PyPersPicklerTests(AbstractPersistentPicklerTests, + PersistentPicklerUnpicklerMixin): + + pickler = pickle._Pickler + unpickler = pickle._Unpickler + + +class PyIdPersPicklerTests(AbstractIdentityPersistentPicklerTests, + PersistentPicklerUnpicklerMixin): + + pickler = pickle._Pickler + unpickler = pickle._Unpickler + + class PyPicklerUnpicklerObjectTests(AbstractPicklerUnpicklerObjectTests): pickler_class = pickle._Pickler @@ -139,6 +150,10 @@ pickler = _pickle.Pickler unpickler = _pickle.Unpickler + class CIdPersPicklerTests(PyIdPersPicklerTests): + pickler = _pickle.Pickler + unpickler = _pickle.Unpickler + class CDumpPickle_LoadPickle(PyPicklerTests): pickler = _pickle.Pickler unpickler = pickle._Unpickler @@ -404,11 +419,13 @@ def test_main(): - tests = [PickleTests, PyUnpicklerTests, PyPicklerTests, PyPersPicklerTests, + tests = [PickleTests, PyUnpicklerTests, PyPicklerTests, + PyPersPicklerTests, PyIdPersPicklerTests, PyDispatchTableTests, PyChainDispatchTableTests, CompatPickleTests] if has_c_implementation: - tests.extend([CUnpicklerTests, CPicklerTests, CPersPicklerTests, + tests.extend([CUnpicklerTests, CPicklerTests, + CPersPicklerTests, CIdPersPicklerTests, CDumpPickle_LoadPickle, DumpPickle_CLoadPickle, PyPicklerUnpicklerObjectTests, CPicklerUnpicklerObjectTests, diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,6 +18,9 @@ Library ------- +- Issue #17711: Fixed unpickling by the persistent ID with protocol 0. + Original patch by Alexandre Vassalotti. + - Issue #27522: Avoid an unintentional reference cycle in email.feedparser. - Issue 27512: Fix a segfault when os.fspath() called a an __fspath__() method diff --git a/Modules/_pickle.c b/Modules/_pickle.c --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -3440,26 +3440,30 @@ goto error; } else { - PyObject *pid_str = NULL; - char *pid_ascii_bytes; - Py_ssize_t size; + PyObject *pid_str; pid_str = PyObject_Str(pid); if (pid_str == NULL) goto error; - /* XXX: Should it check whether the persistent id only contains - ASCII characters? And what if the pid contains embedded + /* XXX: Should it check whether the pid contains embedded newlines? */ - pid_ascii_bytes = _PyUnicode_AsStringAndSize(pid_str, &size); + if (!PyUnicode_IS_ASCII(pid_str)) { + PyErr_SetString(_Pickle_GetGlobalState()->PicklingError, + "persistent IDs in protocol 0 must be " + "ASCII strings"); + Py_DECREF(pid_str); + goto error; + } + + if (_Pickler_Write(self, &persid_op, 1) < 0 || + _Pickler_Write(self, PyUnicode_DATA(pid_str), + PyUnicode_GET_LENGTH(pid_str)) < 0 || + _Pickler_Write(self, "\n", 1) < 0) { + Py_DECREF(pid_str); + goto error; + } Py_DECREF(pid_str); - if (pid_ascii_bytes == NULL) - goto error; - - if (_Pickler_Write(self, &persid_op, 1) < 0 || - _Pickler_Write(self, pid_ascii_bytes, size) < 0 || - _Pickler_Write(self, "\n", 1) < 0) - goto error; } status = 1; } @@ -5477,9 +5481,15 @@ if (len < 1) return bad_readline(); - pid = PyBytes_FromStringAndSize(s, len - 1); - if (pid == NULL) + pid = PyUnicode_DecodeASCII(s, len - 1, "strict"); + if (pid == NULL) { + if (PyErr_ExceptionMatches(PyExc_UnicodeDecodeError)) { + PyErr_SetString(_Pickle_GetGlobalState()->UnpicklingError, + "persistent IDs in protocol 0 must be " + "ASCII strings"); + } return -1; + } /* This does not leak since _Pickle_FastCall() steals the reference to pid first. */ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 05:52:28 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 09:52:28 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDE5?= =?utf-8?b?OiBTdGFuZGFyZCBfX2ltcG9ydF9fKCkgbm8gbG9uZ2VyIGxvb2sgdXAgIl9f?= =?utf-8?q?import=5F=5F=22_in_globals?= Message-ID: <20160717095228.79834.11168.A59DD439@psf.io> https://hg.python.org/cpython/rev/c88ec1bb67d0 changeset: 102378:c88ec1bb67d0 branch: 3.5 parent: 102376:f6a41552a312 user: Serhiy Storchaka date: Sun Jul 17 12:47:17 2016 +0300 summary: Issue #27419: Standard __import__() no longer look up "__import__" in globals or builtins for importing submodules or "from import". Fixed handling an error of non-string package name. files: Misc/NEWS | 4 ++++ Python/import.c | 12 ++++-------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,10 @@ Core and Builtins ----------------- +- Issue #27419: Standard __import__() no longer look up "__import__" in globals + or builtins for importing submodules or "from import". Fixed handling an + error of non-string package name. + - Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. - Issue #27514: Make having too many statically nested blocks a SyntaxError diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -1438,6 +1438,7 @@ } else if (!PyUnicode_Check(package)) { PyErr_SetString(PyExc_TypeError, "__name__ must be a string"); + goto error; } Py_INCREF(package); @@ -1525,15 +1526,10 @@ _PyImport_AcquireLock(); #endif /* From this point forward, goto error_with_unlock! */ - if (PyDict_Check(globals)) { - builtins_import = _PyDict_GetItemId(globals, &PyId___import__); - } + builtins_import = _PyDict_GetItemId(interp->builtins_copy, &PyId___import__); if (builtins_import == NULL) { - builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__); - if (builtins_import == NULL) { - PyErr_SetString(PyExc_ImportError, "__import__ not found"); - goto error_with_unlock; - } + PyErr_SetString(PyExc_ImportError, "__import__ not found"); + goto error_with_unlock; } Py_INCREF(builtins_import); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 05:52:29 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 09:52:29 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogSXNzdWUgIzI3NDE5OiBTdGFuZGFyZCBfX2ltcG9ydF9fKCkgbm8gbG9u?= =?utf-8?q?ger_look_up_=22=5F=5Fimport=5F=5F=22_in_globals?= Message-ID: <20160717095228.7138.49222.3D014253@psf.io> https://hg.python.org/cpython/rev/d87f99e297d5 changeset: 102379:d87f99e297d5 parent: 102377:df8857c6f3eb parent: 102378:c88ec1bb67d0 user: Serhiy Storchaka date: Sun Jul 17 12:51:34 2016 +0300 summary: Issue #27419: Standard __import__() no longer look up "__import__" in globals or builtins for importing submodules or "from import". Fixed a crash if raise a warning about unabling to resolve package from __spec__ or __package__. files: Misc/NEWS | 5 +++++ Python/import.c | 12 ++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,11 @@ Core and Builtins ----------------- +- Issue #27419: Standard __import__() no longer look up "__import__" in globals + or builtins for importing submodules or "from import". Fixed a crash if + raise a warning about unabling to resolve package from __spec__ or + __package__. + - Issue #27083: Respect the PYTHONCASEOK environment variable under Windows. - Issue #27514: Make having too many statically nested blocks a SyntaxError diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -1452,6 +1452,7 @@ } } else { + package = NULL; if (PyErr_WarnEx(PyExc_ImportWarning, "can't resolve package from __spec__ or __package__, " "falling back on __name__ and __path__", 1) < 0) { @@ -1556,15 +1557,10 @@ _PyImport_AcquireLock(); #endif /* From this point forward, goto error_with_unlock! */ - if (PyDict_Check(globals)) { - builtins_import = _PyDict_GetItemId(globals, &PyId___import__); - } + builtins_import = _PyDict_GetItemId(interp->builtins_copy, &PyId___import__); if (builtins_import == NULL) { - builtins_import = _PyDict_GetItemId(interp->builtins, &PyId___import__); - if (builtins_import == NULL) { - PyErr_SetString(PyExc_ImportError, "__import__ not found"); - goto error_with_unlock; - } + PyErr_SetString(PyExc_ImportError, "__import__ not found"); + goto error_with_unlock; } Py_INCREF(builtins_import); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 06:26:30 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 10:26:30 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issues_=2323147=2C_=2323148=3A_Presumably_fixed_bugs_in_?= =?utf-8?q?folding_UnstructuredTokenList=2E?= Message-ID: <20160717102630.121134.31760.5089EB07@psf.io> https://hg.python.org/cpython/rev/33593fcdf8b0 changeset: 102381:33593fcdf8b0 parent: 102379:d87f99e297d5 parent: 102380:efd4ffa88173 user: Serhiy Storchaka date: Sun Jul 17 13:26:10 2016 +0300 summary: Issues #23147, #23148: Presumably fixed bugs in folding UnstructuredTokenList. files: Lib/email/_header_value_parser.py | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -439,7 +439,7 @@ if folded.append_if_fits(part): continue if part.has_fws: - part.fold(folded) + part._fold(folded) continue # It can't be split...we just have to put it on its own line. folded.append(tstr) @@ -460,7 +460,7 @@ last_ew = len(res) else: tl = get_unstructured(''.join(res[last_ew:] + [spart])) - res.append(tl.as_encoded_word()) + res.append(tl.as_encoded_word(charset)) return ''.join(res) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 06:26:30 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 10:26:30 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWVzICMyMzE0?= =?utf-8?q?7=2C_=2323148=3A_Presumably_fixed_bugs_in_folding_UnstructuredT?= =?utf-8?q?okenList=2E?= Message-ID: <20160717102629.111517.23742.12EDFCAA@psf.io> https://hg.python.org/cpython/rev/efd4ffa88173 changeset: 102380:efd4ffa88173 branch: 3.5 parent: 102378:c88ec1bb67d0 user: Serhiy Storchaka date: Sun Jul 17 13:25:15 2016 +0300 summary: Issues #23147, #23148: Presumably fixed bugs in folding UnstructuredTokenList. files: Lib/email/_header_value_parser.py | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/email/_header_value_parser.py b/Lib/email/_header_value_parser.py --- a/Lib/email/_header_value_parser.py +++ b/Lib/email/_header_value_parser.py @@ -439,7 +439,7 @@ if folded.append_if_fits(part): continue if part.has_fws: - part.fold(folded) + part._fold(folded) continue # It can't be split...we just have to put it on its own line. folded.append(tstr) @@ -460,7 +460,7 @@ last_ew = len(res) else: tl = get_unstructured(''.join(res[last_ew:] + [spart])) - res.append(tl.as_encoded_word()) + res.append(tl.as_encoded_word(charset)) return ''.join(res) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 07:16:29 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 11:16:29 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDE5?= =?utf-8?q?=3A_Added_temporary_workaround_for_subinterpreters=2E?= Message-ID: <20160717111629.22494.95481.D21AE0EF@psf.io> https://hg.python.org/cpython/rev/4c07faa33915 changeset: 102382:4c07faa33915 branch: 3.5 parent: 102380:efd4ffa88173 user: Serhiy Storchaka date: Sun Jul 17 14:15:28 2016 +0300 summary: Issue #27419: Added temporary workaround for subinterpreters. files: Python/import.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -1526,7 +1526,10 @@ _PyImport_AcquireLock(); #endif /* From this point forward, goto error_with_unlock! */ - builtins_import = _PyDict_GetItemId(interp->builtins_copy, &PyId___import__); + /* XXX interp->builtins_copy is NULL in subinterpreter! */ + builtins_import = _PyDict_GetItemId(interp->builtins_copy ? + interp->builtins_copy : + interp->builtins, &PyId___import__); if (builtins_import == NULL) { PyErr_SetString(PyExc_ImportError, "__import__ not found"); goto error_with_unlock; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 07:17:55 2016 From: python-checkins at python.org (serhiy.storchaka) Date: Sun, 17 Jul 2016 11:17:55 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327419=3A_Added_temporary_workaround_for_subinte?= =?utf-8?q?rpreters=2E?= Message-ID: <20160717111629.87864.64742.D640ECCB@psf.io> https://hg.python.org/cpython/rev/5540234ca517 changeset: 102383:5540234ca517 parent: 102381:33593fcdf8b0 parent: 102382:4c07faa33915 user: Serhiy Storchaka date: Sun Jul 17 14:16:04 2016 +0300 summary: Issue #27419: Added temporary workaround for subinterpreters. files: Python/import.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/Python/import.c b/Python/import.c --- a/Python/import.c +++ b/Python/import.c @@ -1557,7 +1557,10 @@ _PyImport_AcquireLock(); #endif /* From this point forward, goto error_with_unlock! */ - builtins_import = _PyDict_GetItemId(interp->builtins_copy, &PyId___import__); + /* XXX interp->builtins_copy is NULL in subinterpreter! */ + builtins_import = _PyDict_GetItemId(interp->builtins_copy ? + interp->builtins_copy : + interp->builtins, &PyId___import__); if (builtins_import == NULL) { PyErr_SetString(PyExc_ImportError, "__import__ not found"); goto error_with_unlock; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 08:14:05 2016 From: python-checkins at python.org (stefan.krah) Date: Sun, 17 Jul 2016 12:14:05 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI2OTc0?= =?utf-8?q?=3A_Fix_segfault_in_the_presence_of_absurd_subclassing=2E_Proac?= =?utf-8?q?tively?= Message-ID: <20160717121405.313.28816.73D7ECB9@psf.io> https://hg.python.org/cpython/rev/f8cb955efd6a changeset: 102384:f8cb955efd6a branch: 3.5 parent: 102382:4c07faa33915 user: Stefan Krah date: Sun Jul 17 14:01:42 2016 +0200 summary: Issue #26974: Fix segfault in the presence of absurd subclassing. Proactively eliminate all internal uses of overridden methods. files: Lib/test/test_decimal.py | 28 ++++++++++++++ Modules/_decimal/_decimal.c | 50 +++++++++++++++++++++++- 2 files changed, 75 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -5398,6 +5398,34 @@ y = Decimal(10**(9*25)).__sizeof__() self.assertEqual(y, x+4) + def test_internal_use_of_overridden_methods(self): + Decimal = C.Decimal + + # Unsound subtyping + class X(float): + def as_integer_ratio(self): + return 1 + def __abs__(self): + return self + + class Y(float): + def __abs__(self): + return [1]*200 + + class I(int): + def bit_length(self): + return [1]*200 + + class Z(float): + def as_integer_ratio(self): + return (I(1), I(1)) + def __abs__(self): + return self + + for cls in X, Y, Z: + self.assertEqual(Decimal.from_float(cls(101.1)), + Decimal.from_float(101.1)) + @requires_docstrings @unittest.skipUnless(C, "test requires C version") class SignatureTest(unittest.TestCase): diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -2208,6 +2208,14 @@ return dec; } +/* External C-API functions */ +static binaryfunc _py_long_multiply; +static binaryfunc _py_long_floor_divide; +static ternaryfunc _py_long_power; +static unaryfunc _py_float_abs; +static PyCFunction _py_long_bit_length; +static PyCFunction _py_float_as_integer_ratio; + /* Return a PyDecObject or a subtype from a PyFloatObject. Conversion is exact. */ static PyObject * @@ -2258,13 +2266,13 @@ } /* absolute value of the float */ - tmp = PyObject_CallMethod(v, "__abs__", NULL); + tmp = _py_float_abs(v); if (tmp == NULL) { return NULL; } /* float as integer ratio: numerator/denominator */ - n_d = PyObject_CallMethod(tmp, "as_integer_ratio", NULL); + n_d = _py_float_as_integer_ratio(tmp, NULL); Py_DECREF(tmp); if (n_d == NULL) { return NULL; @@ -2272,7 +2280,7 @@ n = PyTuple_GET_ITEM(n_d, 0); d = PyTuple_GET_ITEM(n_d, 1); - tmp = PyObject_CallMethod(d, "bit_length", NULL); + tmp = _py_long_bit_length(d, NULL); if (tmp == NULL) { Py_DECREF(n_d); return NULL; @@ -5511,6 +5519,32 @@ #define CHECK_PTR(expr) \ do { if ((expr) == NULL) goto error; } while (0) + +static PyCFunction +cfunc_noargs(PyTypeObject *t, const char *name) +{ + struct PyMethodDef *m; + + if (t->tp_methods == NULL) { + goto error; + } + + for (m = t->tp_methods; m->ml_name != NULL; m++) { + if (strcmp(name, m->ml_name) == 0) { + if (!(m->ml_flags & METH_NOARGS)) { + goto error; + } + return m->ml_meth; + } + } + +error: + PyErr_Format(PyExc_RuntimeError, + "internal error: could not find method %s", name); + return NULL; +} + + PyMODINIT_FUNC PyInit__decimal(void) { @@ -5535,6 +5569,16 @@ mpd_setminalloc(_Py_DEC_MINALLOC); + /* Init external C-API functions */ + _py_long_multiply = PyLong_Type.tp_as_number->nb_multiply; + _py_long_floor_divide = PyLong_Type.tp_as_number->nb_floor_divide; + _py_long_power = PyLong_Type.tp_as_number->nb_power; + _py_float_abs = PyFloat_Type.tp_as_number->nb_absolute; + ASSIGN_PTR(_py_float_as_integer_ratio, cfunc_noargs(&PyFloat_Type, + "as_integer_ratio")); + ASSIGN_PTR(_py_long_bit_length, cfunc_noargs(&PyLong_Type, "bit_length")); + + /* Init types */ PyDec_Type.tp_base = &PyBaseObject_Type; PyDecContext_Type.tp_base = &PyBaseObject_Type; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 08:14:05 2016 From: python-checkins at python.org (stefan.krah) Date: Sun, 17 Jul 2016 12:14:05 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogTWVyZ2UgMy41Lg==?= Message-ID: <20160717121405.80471.67802.EF63412E@psf.io> https://hg.python.org/cpython/rev/3763df0917a2 changeset: 102385:3763df0917a2 parent: 102383:5540234ca517 parent: 102384:f8cb955efd6a user: Stefan Krah date: Sun Jul 17 14:12:59 2016 +0200 summary: Merge 3.5. files: Lib/test/test_decimal.py | 28 +++++++++++ Modules/_decimal/_decimal.c | 59 +++++++++++++++++++++--- 2 files changed, 79 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -5431,6 +5431,34 @@ y = Decimal(10**(9*25)).__sizeof__() self.assertEqual(y, x+4) + def test_internal_use_of_overridden_methods(self): + Decimal = C.Decimal + + # Unsound subtyping + class X(float): + def as_integer_ratio(self): + return 1 + def __abs__(self): + return self + + class Y(float): + def __abs__(self): + return [1]*200 + + class I(int): + def bit_length(self): + return [1]*200 + + class Z(float): + def as_integer_ratio(self): + return (I(1), I(1)) + def __abs__(self): + return self + + for cls in X, Y, Z: + self.assertEqual(Decimal.from_float(cls(101.1)), + Decimal.from_float(101.1)) + @requires_docstrings @unittest.skipUnless(C, "test requires C version") class SignatureTest(unittest.TestCase): diff --git a/Modules/_decimal/_decimal.c b/Modules/_decimal/_decimal.c --- a/Modules/_decimal/_decimal.c +++ b/Modules/_decimal/_decimal.c @@ -2207,6 +2207,14 @@ return dec; } +/* External C-API functions */ +static binaryfunc _py_long_multiply; +static binaryfunc _py_long_floor_divide; +static ternaryfunc _py_long_power; +static unaryfunc _py_float_abs; +static PyCFunction _py_long_bit_length; +static PyCFunction _py_float_as_integer_ratio; + /* Return a PyDecObject or a subtype from a PyFloatObject. Conversion is exact. */ static PyObject * @@ -2257,13 +2265,13 @@ } /* absolute value of the float */ - tmp = PyObject_CallMethod(v, "__abs__", NULL); + tmp = _py_float_abs(v); if (tmp == NULL) { return NULL; } /* float as integer ratio: numerator/denominator */ - n_d = PyObject_CallMethod(tmp, "as_integer_ratio", NULL); + n_d = _py_float_as_integer_ratio(tmp, NULL); Py_DECREF(tmp); if (n_d == NULL) { return NULL; @@ -2271,7 +2279,7 @@ n = PyTuple_GET_ITEM(n_d, 0); d = PyTuple_GET_ITEM(n_d, 1); - tmp = PyObject_CallMethod(d, "bit_length", NULL); + tmp = _py_long_bit_length(d, NULL); if (tmp == NULL) { Py_DECREF(n_d); return NULL; @@ -3397,7 +3405,6 @@ mpd_ssize_t exp; PyObject *context; uint32_t status = 0; - PyNumberMethods *long_methods = PyLong_Type.tp_as_number; if (mpd_isspecial(MPD(self))) { if (mpd_isnan(MPD(self))) { @@ -3444,14 +3451,14 @@ goto error; } - Py_SETREF(exponent, long_methods->nb_power(tmp, exponent, Py_None)); + Py_SETREF(exponent, _py_long_power(tmp, exponent, Py_None)); Py_DECREF(tmp); if (exponent == NULL) { goto error; } if (exp >= 0) { - Py_SETREF(numerator, long_methods->nb_multiply(numerator, exponent)); + Py_SETREF(numerator, _py_long_multiply(numerator, exponent)); if (numerator == NULL) { goto error; } @@ -3467,8 +3474,8 @@ if (tmp == NULL) { goto error; } - Py_SETREF(numerator, long_methods->nb_floor_divide(numerator, tmp)); - Py_SETREF(denominator, long_methods->nb_floor_divide(denominator, tmp)); + Py_SETREF(numerator, _py_long_floor_divide(numerator, tmp)); + Py_SETREF(denominator, _py_long_floor_divide(denominator, tmp)); Py_DECREF(tmp); if (numerator == NULL || denominator == NULL) { goto error; @@ -5611,6 +5618,32 @@ #define CHECK_PTR(expr) \ do { if ((expr) == NULL) goto error; } while (0) + +static PyCFunction +cfunc_noargs(PyTypeObject *t, const char *name) +{ + struct PyMethodDef *m; + + if (t->tp_methods == NULL) { + goto error; + } + + for (m = t->tp_methods; m->ml_name != NULL; m++) { + if (strcmp(name, m->ml_name) == 0) { + if (!(m->ml_flags & METH_NOARGS)) { + goto error; + } + return m->ml_meth; + } + } + +error: + PyErr_Format(PyExc_RuntimeError, + "internal error: could not find method %s", name); + return NULL; +} + + PyMODINIT_FUNC PyInit__decimal(void) { @@ -5635,6 +5668,16 @@ mpd_setminalloc(_Py_DEC_MINALLOC); + /* Init external C-API functions */ + _py_long_multiply = PyLong_Type.tp_as_number->nb_multiply; + _py_long_floor_divide = PyLong_Type.tp_as_number->nb_floor_divide; + _py_long_power = PyLong_Type.tp_as_number->nb_power; + _py_float_abs = PyFloat_Type.tp_as_number->nb_absolute; + ASSIGN_PTR(_py_float_as_integer_ratio, cfunc_noargs(&PyFloat_Type, + "as_integer_ratio")); + ASSIGN_PTR(_py_long_bit_length, cfunc_noargs(&PyLong_Type, "bit_length")); + + /* Init types */ PyDec_Type.tp_base = &PyBaseObject_Type; PyDecContext_Type.tp_base = &PyBaseObject_Type; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 08:26:31 2016 From: python-checkins at python.org (berker.peksag) Date: Sun, 17 Jul 2016 12:26:31 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NTMx?= =?utf-8?q?=3A_Update_signature_of_Mock=2Eassert=5Fnot=5Fcalled_method?= Message-ID: <20160717122631.32689.47442.64CF3C82@psf.io> https://hg.python.org/cpython/rev/b43f61118793 changeset: 102386:b43f61118793 branch: 3.5 parent: 102384:f8cb955efd6a user: Berker Peksag date: Sun Jul 17 15:26:46 2016 +0300 summary: Issue #27531: Update signature of Mock.assert_not_called method Since 01ae1ac2daf4, it doesn't accept any arguments. Patch by Michael Killough. files: Doc/library/unittest.mock.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst --- a/Doc/library/unittest.mock.rst +++ b/Doc/library/unittest.mock.rst @@ -324,7 +324,7 @@ >>> calls = [call(4), call(2), call(3)] >>> mock.assert_has_calls(calls, any_order=True) - .. method:: assert_not_called(*args, **kwargs) + .. method:: assert_not_called() Assert the mock was never called. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 08:26:31 2016 From: python-checkins at python.org (berker.peksag) Date: Sun, 17 Jul 2016 12:26:31 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327531=3A_Merge_from_3=2E5?= Message-ID: <20160717122631.32599.40241.BCD6AE46@psf.io> https://hg.python.org/cpython/rev/f4541c56c353 changeset: 102387:f4541c56c353 parent: 102385:3763df0917a2 parent: 102386:b43f61118793 user: Berker Peksag date: Sun Jul 17 15:27:10 2016 +0300 summary: Issue #27531: Merge from 3.5 files: Doc/library/unittest.mock.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/unittest.mock.rst b/Doc/library/unittest.mock.rst --- a/Doc/library/unittest.mock.rst +++ b/Doc/library/unittest.mock.rst @@ -352,7 +352,7 @@ >>> calls = [call(4), call(2), call(3)] >>> mock.assert_has_calls(calls, any_order=True) - .. method:: assert_not_called(*args, **kwargs) + .. method:: assert_not_called() Assert the mock was never called. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 23:46:18 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 03:46:18 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogQ2xvc2VzICMyNzU0?= =?utf-8?q?5=3A_Remove_pyshellext=2Evcxproj_from_pcbuild=2Eproj?= Message-ID: <20160718034618.32642.61654.88D465DC@psf.io> https://hg.python.org/cpython/rev/d044e03fbed6 changeset: 102388:d044e03fbed6 branch: 3.5 parent: 102386:b43f61118793 user: Steve Dower date: Sun Jul 17 20:45:29 2016 -0700 summary: Closes #27545: Remove pyshellext.vcxproj from pcbuild.proj files: PCbuild/pcbuild.proj | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -44,8 +44,6 @@ - - -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 23:46:18 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 03:46:18 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Closes_=2327545=3A_Remove_pyshellext=2Evcxproj_from_pcbu?= =?utf-8?q?ild=2Eproj?= Message-ID: <20160718034618.79908.476.AF3FFA3B@psf.io> https://hg.python.org/cpython/rev/f7a161e48af8 changeset: 102389:f7a161e48af8 parent: 102387:f4541c56c353 parent: 102388:d044e03fbed6 user: Steve Dower date: Sun Jul 17 20:46:01 2016 -0700 summary: Closes #27545: Remove pyshellext.vcxproj from pcbuild.proj files: PCbuild/pcbuild.proj | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-) diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -44,8 +44,6 @@ - - -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 23:50:48 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 03:50:48 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NTMz?= =?utf-8?q?=3A_Release_GIL_in_nt=2E=5Fisdir?= Message-ID: <20160718035048.121134.45846.325C5593@psf.io> https://hg.python.org/cpython/rev/ebf9a4c933e9 changeset: 102390:ebf9a4c933e9 branch: 3.5 parent: 102388:d044e03fbed6 user: Steve Dower date: Sun Jul 17 20:49:38 2016 -0700 summary: Issue #27533: Release GIL in nt._isdir files: Misc/NEWS | 2 ++ Modules/posixmodule.c | 2 ++ 2 files changed, 4 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -28,6 +28,8 @@ Library ------- +- Issue #27533: Release GIL in nt._isdir + - Issue #17711: Fixed unpickling by the persistent ID with protocol 0. Original patch by Alexandre Vassalotti. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3878,10 +3878,12 @@ { DWORD attributes; + Py_BEGIN_ALLOW_THREADS if (!path->narrow) attributes = GetFileAttributesW(path->wide); else attributes = GetFileAttributesA(path->narrow); + Py_END_ALLOW_THREADS if (attributes == INVALID_FILE_ATTRIBUTES) Py_RETURN_FALSE; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 17 23:50:48 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 03:50:48 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327533=3A_Release_GIL_in_nt=2E=5Fisdir?= Message-ID: <20160718035048.7301.56718.655CDC2E@psf.io> https://hg.python.org/cpython/rev/8823c660820e changeset: 102391:8823c660820e parent: 102389:f7a161e48af8 parent: 102390:ebf9a4c933e9 user: Steve Dower date: Sun Jul 17 20:50:28 2016 -0700 summary: Issue #27533: Release GIL in nt._isdir files: Misc/NEWS | 2 ++ Modules/posixmodule.c | 2 ++ 2 files changed, 4 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -23,6 +23,8 @@ Library ------- +- Issue #27533: Release GIL in nt._isdir + - Issue #17711: Fixed unpickling by the persistent ID with protocol 0. Original patch by Alexandre Vassalotti. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -3893,10 +3893,12 @@ { DWORD attributes; + Py_BEGIN_ALLOW_THREADS if (!path->narrow) attributes = GetFileAttributesW(path->wide); else attributes = GetFileAttributesA(path->narrow); + Py_END_ALLOW_THREADS if (attributes == INVALID_FILE_ATTRIBUTES) Py_RETURN_FALSE; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 00:40:17 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 04:40:17 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3MzA5?= =?utf-8?q?=3A_Enables_proper_Windows_styles_in_python=5Bw=5D=2Eexe_manife?= =?utf-8?b?c3Qu?= Message-ID: <20160718044017.7360.16911.6B8A1A84@psf.io> https://hg.python.org/cpython/rev/7ffb7f3c345d changeset: 102392:7ffb7f3c345d branch: 3.5 parent: 102390:ebf9a4c933e9 user: Steve Dower date: Sun Jul 17 21:39:13 2016 -0700 summary: Issue #27309: Enables proper Windows styles in python[w].exe manifest. files: Misc/NEWS | 5 +++++ PC/python.manifest | 6 ++++++ 2 files changed, 11 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -123,6 +123,11 @@ - Issue #27418: Fixed Tools/importbench/importbench.py. +Windows +------- + +- Issue #27309: Enabled proper Windows styles in python[w].exe manifest. + What's New in Python 3.5.2? =========================== diff --git a/PC/python.manifest b/PC/python.manifest --- a/PC/python.manifest +++ b/PC/python.manifest @@ -16,4 +16,10 @@ + + + + + \ No newline at end of file -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 00:40:19 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 04:40:19 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327309=3A_Enables_proper_Windows_styles_in_pytho?= =?utf-8?b?blt3XS5leGUgbWFuaWZlc3Qu?= Message-ID: <20160718044017.22429.52245.AB3256FB@psf.io> https://hg.python.org/cpython/rev/da735eb8b7a2 changeset: 102393:da735eb8b7a2 parent: 102391:8823c660820e parent: 102392:7ffb7f3c345d user: Steve Dower date: Sun Jul 17 21:40:06 2016 -0700 summary: Issue #27309: Enables proper Windows styles in python[w].exe manifest. files: Misc/NEWS | 4 ++++ PC/python.manifest | 6 ++++++ 2 files changed, 10 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -39,6 +39,10 @@ - Issue #27369: In test_pyexpat, avoid testing an error message detail that changed in Expat 2.2.0. +Windows +------- + +- Issue #27309: Enables proper Windows styles in python[w].exe manifest. What's New in Python 3.6.0 alpha 3 ================================== diff --git a/PC/python.manifest b/PC/python.manifest --- a/PC/python.manifest +++ b/PC/python.manifest @@ -16,4 +16,10 @@ + + + + + \ No newline at end of file -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 00:58:22 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 04:58:22 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_from_3=2E5?= Message-ID: <20160718045820.121029.75961.FCC18F7C@psf.io> https://hg.python.org/cpython/rev/61bb66fe1fb7 changeset: 102395:61bb66fe1fb7 parent: 102393:da735eb8b7a2 parent: 102394:610b6a5d0c34 user: Steve Dower date: Sun Jul 17 21:58:11 2016 -0700 summary: Merge from 3.5 files: PC/icons.mak | 9 ------- PC/icons.rc | 4 --- PC/make_versioninfo.c | 38 ------------------------------- 3 files changed, 0 insertions(+), 51 deletions(-) diff --git a/PC/icons.mak b/PC/icons.mak deleted file mode 100644 --- a/PC/icons.mak +++ /dev/null @@ -1,9 +0,0 @@ -python_icon.exe: py.res empty.obj - link /out:python_icon.exe /machine:x86 /subsystem:windows py.res empty.obj - -py.res: py.ico pyc.ico pycon.ico icons.rc - rc /fo py.res icons.rc - -empty.obj: empty.c - cl /c empty.c - diff --git a/PC/icons.rc b/PC/icons.rc deleted file mode 100644 --- a/PC/icons.rc +++ /dev/null @@ -1,4 +0,0 @@ -101 ICON "py.ico" -102 ICON "pyc.ico" -103 ICON "pycon.ico" - diff --git a/PC/make_versioninfo.c b/PC/make_versioninfo.c deleted file mode 100644 --- a/PC/make_versioninfo.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include "patchlevel.h" -/* - * This program prints out an include file containing fields required to build - * the version info resource of pythonxx.dll because the resource compiler - * cannot do the arithmetic. - */ -/* - * FIELD3 is the third field of the version number. - * This is what we'd like FIELD3 to be: - * - * #define FIELD3 (PY_MICRO_VERSION*1000 + PY_RELEASE_LEVEL*10 + PY_RELEASE_SERIAL) - * - * but that neither gives an error nor comes anywhere close to working. - * - * For 2.4a0, - * PY_MICRO_VERSION = 0 - * PY_RELEASE_LEVEL = 'alpha' = 0xa - * PY_RELEASE_SERIAL = 0 - * - * gives FIELD3 = 0*1000 + 10*10 + 0 = 100 - */ -int main(int argc, char **argv) -{ - printf("/* This file created by make_versioninfo.exe */\n"); - printf("#define FIELD3 %d\n", - PY_MICRO_VERSION*1000 + PY_RELEASE_LEVEL*10 + PY_RELEASE_SERIAL); - printf("#define MS_DLL_ID \"%d.%d\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#ifndef _DEBUG\n"); - printf("#define PYTHON_DLL_NAME \"python%d%d.dll\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#else\n"); - printf("#define PYTHON_DLL_NAME \"python%d%d_d.dll\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#endif\n"); - return 0; -} -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 00:58:29 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 18 Jul 2016 04:58:29 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Removes_unused?= =?utf-8?q?_files_from_PC_folder=2E?= Message-ID: <20160718045820.80366.36518.5EDFD8A1@psf.io> https://hg.python.org/cpython/rev/610b6a5d0c34 changeset: 102394:610b6a5d0c34 branch: 3.5 parent: 102392:7ffb7f3c345d user: Steve Dower date: Sun Jul 17 21:58:01 2016 -0700 summary: Removes unused files from PC folder. files: PC/icons.mak | 9 ------- PC/icons.rc | 4 --- PC/make_versioninfo.c | 38 ------------------------------- 3 files changed, 0 insertions(+), 51 deletions(-) diff --git a/PC/icons.mak b/PC/icons.mak deleted file mode 100644 --- a/PC/icons.mak +++ /dev/null @@ -1,9 +0,0 @@ -python_icon.exe: py.res empty.obj - link /out:python_icon.exe /machine:x86 /subsystem:windows py.res empty.obj - -py.res: py.ico pyc.ico pycon.ico icons.rc - rc /fo py.res icons.rc - -empty.obj: empty.c - cl /c empty.c - diff --git a/PC/icons.rc b/PC/icons.rc deleted file mode 100644 --- a/PC/icons.rc +++ /dev/null @@ -1,4 +0,0 @@ -101 ICON "py.ico" -102 ICON "pyc.ico" -103 ICON "pycon.ico" - diff --git a/PC/make_versioninfo.c b/PC/make_versioninfo.c deleted file mode 100644 --- a/PC/make_versioninfo.c +++ /dev/null @@ -1,38 +0,0 @@ -#include -#include "patchlevel.h" -/* - * This program prints out an include file containing fields required to build - * the version info resource of pythonxx.dll because the resource compiler - * cannot do the arithmetic. - */ -/* - * FIELD3 is the third field of the version number. - * This is what we'd like FIELD3 to be: - * - * #define FIELD3 (PY_MICRO_VERSION*1000 + PY_RELEASE_LEVEL*10 + PY_RELEASE_SERIAL) - * - * but that neither gives an error nor comes anywhere close to working. - * - * For 2.4a0, - * PY_MICRO_VERSION = 0 - * PY_RELEASE_LEVEL = 'alpha' = 0xa - * PY_RELEASE_SERIAL = 0 - * - * gives FIELD3 = 0*1000 + 10*10 + 0 = 100 - */ -int main(int argc, char **argv) -{ - printf("/* This file created by make_versioninfo.exe */\n"); - printf("#define FIELD3 %d\n", - PY_MICRO_VERSION*1000 + PY_RELEASE_LEVEL*10 + PY_RELEASE_SERIAL); - printf("#define MS_DLL_ID \"%d.%d\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#ifndef _DEBUG\n"); - printf("#define PYTHON_DLL_NAME \"python%d%d.dll\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#else\n"); - printf("#define PYTHON_DLL_NAME \"python%d%d_d.dll\"\n", - PY_MAJOR_VERSION, PY_MINOR_VERSION); - printf("#endif\n"); - return 0; -} -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 04:22:25 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 18 Jul 2016 08:22:25 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NTA3?= =?utf-8?q?=3A_Check_for_integer_overflow_in_bytearray=2Eextend=28=29?= Message-ID: <20160718082224.79858.6971.814FE117@psf.io> https://hg.python.org/cpython/rev/54cc0480904c changeset: 102396:54cc0480904c branch: 3.5 parent: 102394:610b6a5d0c34 user: Martin Panter date: Mon Jul 18 07:53:13 2016 +0000 summary: Issue #27507: Check for integer overflow in bytearray.extend() Patch by Xiang Zhang. files: Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -22,6 +22,9 @@ - Issue #27473: Fixed possible integer overflow in bytes and bytearray concatenations. Patch by Xiang Zhang. +- Issue #27507: Add integer overflow check in bytearray.extend(). Patch by + Xiang Zhang. + - Issue #27443: __length_hint__() of bytearray iterators no longer return a negative integer for a resized bytearray. diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -2474,7 +2474,17 @@ Py_DECREF(item); if (len >= buf_size) { - buf_size = len + (len >> 1) + 1; + Py_ssize_t addition; + if (len == PY_SSIZE_T_MAX) { + Py_DECREF(it); + Py_DECREF(bytearray_obj); + return PyErr_NoMemory(); + } + addition = len >> 1; + if (addition > PY_SSIZE_T_MAX - len - 1) + buf_size = PY_SSIZE_T_MAX; + else + buf_size = len + addition + 1; if (PyByteArray_Resize((PyObject *)bytearray_obj, buf_size) < 0) { Py_DECREF(it); Py_DECREF(bytearray_obj); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 04:22:25 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 18 Jul 2016 08:22:25 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327507=3A_Merge_overflow_check_from_3=2E5?= Message-ID: <20160718082225.121399.91358.DB5EBE81@psf.io> https://hg.python.org/cpython/rev/646ad4894c32 changeset: 102398:646ad4894c32 parent: 102395:61bb66fe1fb7 parent: 102396:54cc0480904c user: Martin Panter date: Mon Jul 18 08:18:32 2016 +0000 summary: Issue #27507: Merge overflow check from 3.5 files: Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,9 @@ Core and Builtins ----------------- +- Issue #27507: Add integer overflow check in bytearray.extend(). Patch by + Xiang Zhang. + - Issue #27419: Standard __import__() no longer look up "__import__" in globals or builtins for importing submodules or "from import". Fixed a crash if raise a warning about unabling to resolve package from __spec__ or diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -1642,7 +1642,17 @@ Py_DECREF(item); if (len >= buf_size) { - buf_size = len + (len >> 1) + 1; + Py_ssize_t addition; + if (len == PY_SSIZE_T_MAX) { + Py_DECREF(it); + Py_DECREF(bytearray_obj); + return PyErr_NoMemory(); + } + addition = len >> 1; + if (addition > PY_SSIZE_T_MAX - len - 1) + buf_size = PY_SSIZE_T_MAX; + else + buf_size = len + addition + 1; if (PyByteArray_Resize((PyObject *)bytearray_obj, buf_size) < 0) { Py_DECREF(it); Py_DECREF(bytearray_obj); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 04:22:25 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 18 Jul 2016 08:22:25 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3NTA3?= =?utf-8?q?=3A_Check_for_integer_overflow_in_bytearray=2Eextend=28=29?= Message-ID: <20160718082225.111494.26410.FF567DD7@psf.io> https://hg.python.org/cpython/rev/6e166b66aa44 changeset: 102397:6e166b66aa44 branch: 2.7 parent: 102351:345ec7455b75 user: Martin Panter date: Mon Jul 18 07:53:13 2016 +0000 summary: Issue #27507: Check for integer overflow in bytearray.extend() Patch by Xiang Zhang. files: Misc/NEWS | 3 +++ Objects/bytearrayobject.c | 12 +++++++++++- 2 files changed, 14 insertions(+), 1 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,9 @@ - Issue #27473: Fixed possible integer overflow in str, unicode and bytearray concatenations and repetitions. Based on patch by Xiang Zhang. +- Issue #27507: Add integer overflow check in bytearray.extend(). Patch by + Xiang Zhang. + - Issue #23908: os functions, open() and the io.FileIO constructor now reject unicode paths with embedded null character on Windows instead of silently truncating them. diff --git a/Objects/bytearrayobject.c b/Objects/bytearrayobject.c --- a/Objects/bytearrayobject.c +++ b/Objects/bytearrayobject.c @@ -2322,7 +2322,17 @@ Py_DECREF(item); if (len >= buf_size) { - buf_size = len + (len >> 1) + 1; + Py_ssize_t addition; + if (len == PY_SSIZE_T_MAX) { + Py_DECREF(it); + Py_DECREF(bytearray_obj); + return PyErr_NoMemory(); + } + addition = len >> 1; + if (addition > PY_SSIZE_T_MAX - len - 1) + buf_size = PY_SSIZE_T_MAX; + else + buf_size = len + addition + 1; if (PyByteArray_Resize((PyObject *)bytearray_obj, buf_size) < 0) { Py_DECREF(it); Py_DECREF(bytearray_obj); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 04:38:49 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 18 Jul 2016 08:38:49 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2316191=3A_Merge_comment_fixes_from_3=2E5?= Message-ID: <20160718083849.31762.26079.6919A5E2@psf.io> https://hg.python.org/cpython/rev/c10fe99afced changeset: 102400:c10fe99afced parent: 102398:646ad4894c32 parent: 102399:6cf4386de3cc user: Martin Panter date: Mon Jul 18 08:25:01 2016 +0000 summary: Issue #16191: Merge comment fixes from 3.5 files: Python/ceval.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Python/ceval.c b/Python/ceval.c --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1565,7 +1565,7 @@ if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { sum = unicode_concatenate(left, right, f, next_instr); - /* unicode_concatenate consumed the ref to v */ + /* unicode_concatenate consumed the ref to left */ } else { sum = PyNumber_Add(left, right); @@ -1764,7 +1764,7 @@ PyObject *sum; if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { sum = unicode_concatenate(left, right, f, next_instr); - /* unicode_concatenate consumed the ref to v */ + /* unicode_concatenate consumed the ref to left */ } else { sum = PyNumber_InPlaceAdd(left, right); @@ -1855,7 +1855,7 @@ PyObject *v = THIRD(); int err; STACKADJ(-3); - /* v[w] = u */ + /* container[sub] = v */ err = PyObject_SetItem(container, sub, v); Py_DECREF(v); Py_DECREF(container); @@ -1870,7 +1870,7 @@ PyObject *container = SECOND(); int err; STACKADJ(-2); - /* del v[w] */ + /* del container[sub] */ err = PyObject_DelItem(container, sub); Py_DECREF(container); Py_DECREF(sub); @@ -2113,7 +2113,7 @@ SET_TOP(val); DISPATCH(); } - /* x remains on stack, retval is value to be yielded */ + /* receiver remains on stack, retval is value to be yielded */ f->f_stacktop = stack_pointer; why = WHY_YIELD; /* and repeat... */ @@ -2773,7 +2773,7 @@ STACKADJ(-2); map = stack_pointer[-oparg]; /* dict */ assert(PyDict_CheckExact(map)); - err = PyDict_SetItem(map, key, value); /* v[w] = u */ + err = PyDict_SetItem(map, key, value); /* map[key] = value */ Py_DECREF(value); Py_DECREF(key); if (err != 0) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 04:38:49 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 18 Jul 2016 08:38:49 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzE2MTkx?= =?utf-8?q?=3A_Fix_up_references_to_renamed_variables?= Message-ID: <20160718083849.80820.42458.FC725A67@psf.io> https://hg.python.org/cpython/rev/6cf4386de3cc changeset: 102399:6cf4386de3cc branch: 3.5 parent: 102396:54cc0480904c user: Martin Panter date: Mon Jul 18 08:23:26 2016 +0000 summary: Issue #16191: Fix up references to renamed variables files: Python/ceval.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Python/ceval.c b/Python/ceval.c --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1563,7 +1563,7 @@ if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { sum = unicode_concatenate(left, right, f, next_instr); - /* unicode_concatenate consumed the ref to v */ + /* unicode_concatenate consumed the ref to left */ } else { sum = PyNumber_Add(left, right); @@ -1762,7 +1762,7 @@ PyObject *sum; if (PyUnicode_CheckExact(left) && PyUnicode_CheckExact(right)) { sum = unicode_concatenate(left, right, f, next_instr); - /* unicode_concatenate consumed the ref to v */ + /* unicode_concatenate consumed the ref to left */ } else { sum = PyNumber_InPlaceAdd(left, right); @@ -1853,7 +1853,7 @@ PyObject *v = THIRD(); int err; STACKADJ(-3); - /* v[w] = u */ + /* container[sub] = v */ err = PyObject_SetItem(container, sub, v); Py_DECREF(v); Py_DECREF(container); @@ -1868,7 +1868,7 @@ PyObject *container = SECOND(); int err; STACKADJ(-2); - /* del v[w] */ + /* del container[sub] */ err = PyObject_DelItem(container, sub); Py_DECREF(container); Py_DECREF(sub); @@ -2107,7 +2107,7 @@ SET_TOP(val); DISPATCH(); } - /* x remains on stack, retval is value to be yielded */ + /* receiver remains on stack, retval is value to be yielded */ f->f_stacktop = stack_pointer; why = WHY_YIELD; /* and repeat... */ @@ -2728,7 +2728,7 @@ STACKADJ(-2); map = stack_pointer[-oparg]; /* dict */ assert(PyDict_CheckExact(map)); - err = PyDict_SetItem(map, key, value); /* v[w] = u */ + err = PyDict_SetItem(map, key, value); /* map[key] = value */ Py_DECREF(value); Py_DECREF(key); if (err != 0) -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Mon Jul 18 10:42:37 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 18 Jul 2016 15:42:37 +0100 Subject: [Python-checkins] GOOD Benchmark Results for Python Default 2016-07-18 Message-ID: <5c156583-089f-482a-902b-b865919b375e@irsmsx105.ger.corp.intel.com> Results for project Python default, build date 2016-07-18 06:45:51 +0000 commit: 61bb66fe1fb7 previous commit: 89821243621b revision date: 2016-07-18 04:58:11 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.20% -0.78% 10.69% 16.62% :-| pybench 0.12% 0.44% 1.95% 8.02% :-( regex_v8 2.57% 0.05% -2.59% 4.03% :-| nbody 0.23% -0.31% -0.87% 7.56% :-) json_dump_v2 0.32% 2.05% -0.72% 9.22% :-| normal_startup 0.84% -0.27% 0.35% 6.26% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/good-benchmark-results-for-python-default-2016-07-18/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Mon Jul 18 10:43:31 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 18 Jul 2016 15:43:31 +0100 Subject: [Python-checkins] GOOD Benchmark Results for Python 2.7 2016-07-18 Message-ID: <2dc607bc-5bad-4f61-b2c9-68becf229738@irsmsx105.ger.corp.intel.com> No new revisions. Here are the previous results: Results for project Python 2.7, build date 2016-07-18 07:35:01 +0000 commit: 345ec7455b75 previous commit: 2d6e6600c210 revision date: 2016-07-15 05:00:03 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.24% 1.50% 7.48% 2.22% :-) pybench 0.21% -0.01% 5.89% 4.39% :-( regex_v8 0.63% 0.07% -2.29% 10.31% :-) nbody 0.06% 0.16% 7.85% 4.94% :-| json_dump_v2 0.36% 0.16% 1.18% 11.83% :-( normal_startup 1.97% -0.01% -5.87% 2.18% :-) ssbench 0.14% 0.36% 2.60% 1.68% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/good-benchmark-results-for-python-2-7-2016-07-18/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Mon Jul 18 22:51:15 2016 From: python-checkins at python.org (martin.panter) Date: Tue, 19 Jul 2016 02:51:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3NTI4?= =?utf-8?q?=3A_Document_and_test_warning_messages_must_match_at_beginning?= Message-ID: <20160719025115.31415.1880.C9670FDF@psf.io> https://hg.python.org/cpython/rev/739f638bb9f8 changeset: 102401:739f638bb9f8 branch: 2.7 parent: 102397:6e166b66aa44 user: Martin Panter date: Tue Jul 19 02:26:38 2016 +0000 summary: Issue #27528: Document and test warning messages must match at beginning files: Doc/library/warnings.rst | 7 ++++--- Lib/test/test_warnings.py | 12 ++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst --- a/Doc/library/warnings.rst +++ b/Doc/library/warnings.rst @@ -140,14 +140,15 @@ | | warnings, regardless of location | +---------------+----------------------------------------------+ -* *message* is a string containing a regular expression that the warning message - must match (the match is compiled to always be case-insensitive). +* *message* is a string containing a regular expression that the start of + the warning message must match. The expression is compiled to always be + case-insensitive. * *category* is a class (a subclass of :exc:`Warning`) of which the warning category must be a subclass in order to match. * *module* is a string containing a regular expression that the module name must - match (the match is compiled to be case-sensitive). + match. The expression is compiled to be case-sensitive. * *lineno* is an integer that the line number where the warning occurred must match, or ``0`` to match all line numbers. diff --git a/Lib/test/test_warnings.py b/Lib/test/test_warnings.py --- a/Lib/test/test_warnings.py +++ b/Lib/test/test_warnings.py @@ -205,6 +205,18 @@ self.assertEqual(str(w[-1].message), text) self.assertTrue(w[-1].category is UserWarning) + def test_message_matching(self): + with original_warnings.catch_warnings(record=True, + module=self.module) as w: + self.module.simplefilter("ignore", UserWarning) + self.module.filterwarnings("error", "match", UserWarning) + self.assertRaises(UserWarning, self.module.warn, "match") + self.assertRaises(UserWarning, self.module.warn, "match prefix") + self.module.warn("suffix match") + self.assertEqual(w, []) + self.module.warn("something completely different") + self.assertEqual(w, []) + class CFilterTests(BaseTest, FilterTests): module = c_warnings -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 22:51:15 2016 From: python-checkins at python.org (martin.panter) Date: Tue, 19 Jul 2016 02:51:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NTI4?= =?utf-8?q?=3A_Document_and_test_warning_messages_must_match_at_beginning?= Message-ID: <20160719025115.80324.96204.C55B1E10@psf.io> https://hg.python.org/cpython/rev/7571432200a2 changeset: 102402:7571432200a2 branch: 3.5 parent: 102399:6cf4386de3cc user: Martin Panter date: Tue Jul 19 02:26:38 2016 +0000 summary: Issue #27528: Document and test warning messages must match at beginning files: Doc/library/warnings.rst | 7 ++++--- Lib/test/test_warnings/__init__.py | 12 ++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst --- a/Doc/library/warnings.rst +++ b/Doc/library/warnings.rst @@ -141,14 +141,15 @@ | | warnings, regardless of location | +---------------+----------------------------------------------+ -* *message* is a string containing a regular expression that the warning message - must match (the match is compiled to always be case-insensitive). +* *message* is a string containing a regular expression that the start of + the warning message must match. The expression is compiled to always be + case-insensitive. * *category* is a class (a subclass of :exc:`Warning`) of which the warning category must be a subclass in order to match. * *module* is a string containing a regular expression that the module name must - match (the match is compiled to be case-sensitive). + match. The expression is compiled to be case-sensitive. * *lineno* is an integer that the line number where the warning occurred must match, or ``0`` to match all line numbers. diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -261,6 +261,18 @@ self.assertEqual(str(w[-1].message), text) self.assertTrue(w[-1].category is UserWarning) + def test_message_matching(self): + with original_warnings.catch_warnings(record=True, + module=self.module) as w: + self.module.simplefilter("ignore", UserWarning) + self.module.filterwarnings("error", "match", UserWarning) + self.assertRaises(UserWarning, self.module.warn, "match") + self.assertRaises(UserWarning, self.module.warn, "match prefix") + self.module.warn("suffix match") + self.assertEqual(w, []) + self.module.warn("something completely different") + self.assertEqual(w, []) + def test_mutate_filter_list(self): class X: def match(self, a): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 22:51:15 2016 From: python-checkins at python.org (martin.panter) Date: Tue, 19 Jul 2016 02:51:15 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327528=3A_Merge_warning_doc_and_test_from_3=2E5?= Message-ID: <20160719025115.121399.58857.798763E5@psf.io> https://hg.python.org/cpython/rev/e0761e817deb changeset: 102403:e0761e817deb parent: 102400:c10fe99afced parent: 102402:7571432200a2 user: Martin Panter date: Tue Jul 19 02:50:51 2016 +0000 summary: Issue #27528: Merge warning doc and test from 3.5 files: Doc/library/warnings.rst | 7 ++++--- Lib/test/test_warnings/__init__.py | 12 ++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Doc/library/warnings.rst b/Doc/library/warnings.rst --- a/Doc/library/warnings.rst +++ b/Doc/library/warnings.rst @@ -141,14 +141,15 @@ | | warnings, regardless of location | +---------------+----------------------------------------------+ -* *message* is a string containing a regular expression that the warning message - must match (the match is compiled to always be case-insensitive). +* *message* is a string containing a regular expression that the start of + the warning message must match. The expression is compiled to always be + case-insensitive. * *category* is a class (a subclass of :exc:`Warning`) of which the warning category must be a subclass in order to match. * *module* is a string containing a regular expression that the module name must - match (the match is compiled to be case-sensitive). + match. The expression is compiled to be case-sensitive. * *lineno* is an integer that the line number where the warning occurred must match, or ``0`` to match all line numbers. diff --git a/Lib/test/test_warnings/__init__.py b/Lib/test/test_warnings/__init__.py --- a/Lib/test/test_warnings/__init__.py +++ b/Lib/test/test_warnings/__init__.py @@ -263,6 +263,18 @@ self.assertEqual(str(w[-1].message), text) self.assertTrue(w[-1].category is UserWarning) + def test_message_matching(self): + with original_warnings.catch_warnings(record=True, + module=self.module) as w: + self.module.simplefilter("ignore", UserWarning) + self.module.filterwarnings("error", "match", UserWarning) + self.assertRaises(UserWarning, self.module.warn, "match") + self.assertRaises(UserWarning, self.module.warn, "match prefix") + self.module.warn("suffix match") + self.assertEqual(w, []) + self.module.warn("something completely different") + self.assertEqual(w, []) + def test_mutate_filter_list(self): class X: def match(self, a): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 18 23:09:13 2016 From: python-checkins at python.org (martin.panter) Date: Tue, 19 Jul 2016 03:09:13 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=231621=3A_Avoid_sig?= =?utf-8?q?ned_int_negation_overflow_in_audioop?= Message-ID: <20160719030912.32556.21993.C3CA7BD0@psf.io> https://hg.python.org/cpython/rev/d6a86018ab33 changeset: 102404:d6a86018ab33 user: Martin Panter date: Tue Jul 19 03:05:42 2016 +0000 summary: Issue #1621: Avoid signed int negation overflow in audioop files: Misc/NEWS | 2 ++ Modules/audioop.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,8 @@ Library ------- +- Issue #1621: Avoid signed int negation overflow in the "audioop" module. + - Issue #27533: Release GIL in nt._isdir - Issue #17711: Fixed unpickling by the persistent ID with protocol 0. diff --git a/Modules/audioop.c b/Modules/audioop.c --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -446,7 +446,9 @@ return NULL; for (i = 0; i < fragment->len; i += width) { int val = GETRAWSAMPLE(width, fragment->buf, i); - if (val < 0) absval = (-val); + /* Cast to unsigned before negating. Unsigned overflow is well- + defined, but signed overflow is not. */ + if (val < 0) absval = -(unsigned int)val; else absval = val; if (absval > max) max = absval; } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 19 00:47:50 2016 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 19 Jul 2016 04:47:50 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_expose_EPOLLRDHUP_=28close?= =?utf-8?b?cyAjMjc1Njcp?= Message-ID: <20160719044749.7052.36364.9BF1ED9A@psf.io> https://hg.python.org/cpython/rev/af98e92f3b30 changeset: 102405:af98e92f3b30 user: Benjamin Peterson date: Mon Jul 18 21:47:39 2016 -0700 summary: expose EPOLLRDHUP (closes #27567) files: Doc/library/select.rst | 3 +++ Misc/NEWS | 2 ++ Modules/selectmodule.c | 2 +- 3 files changed, 6 insertions(+), 1 deletions(-) diff --git a/Doc/library/select.rst b/Doc/library/select.rst --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -285,6 +285,9 @@ | :const:`EPOLLONESHOT` | Set one-shot behavior. After one event is | | | pulled out, the fd is internally disabled | +-----------------------+-----------------------------------------------+ + | :const:`EPOLLRDHUP` | Stream socket peer closed connection or shut | + | | down writing half of connection. | + +-----------------------+-----------------------------------------------+ | :const:`EPOLLRDNORM` | Equivalent to :const:`EPOLLIN` | +-----------------------+-----------------------------------------------+ | :const:`EPOLLRDBAND` | Priority data band can be read. | diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,8 @@ Library ------- +- Issue #27567: Expose the EPOLLRDHUP constant in the select module. + - Issue #1621: Avoid signed int negation overflow in the "audioop" module. - Issue #27533: Release GIL in nt._isdir diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -2473,12 +2473,12 @@ PyModule_AddIntMacro(m, EPOLLPRI); PyModule_AddIntMacro(m, EPOLLERR); PyModule_AddIntMacro(m, EPOLLHUP); + PyModule_AddIntMacro(m, EPOLLRDHUP); PyModule_AddIntMacro(m, EPOLLET); #ifdef EPOLLONESHOT /* Kernel 2.6.2+ */ PyModule_AddIntMacro(m, EPOLLONESHOT); #endif - /* PyModule_AddIntConstant(m, "EPOLL_RDHUP", EPOLLRDHUP); */ #ifdef EPOLLRDNORM PyModule_AddIntMacro(m, EPOLLRDNORM); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 19 01:02:53 2016 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 19 Jul 2016 05:02:53 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_add_EPOLLEXCLUSIVE?= Message-ID: <20160719050253.111471.94988.7363D4E7@psf.io> https://hg.python.org/cpython/rev/b92b0c1bcd67 changeset: 102406:b92b0c1bcd67 user: Benjamin Peterson date: Mon Jul 18 22:02:44 2016 -0700 summary: add EPOLLEXCLUSIVE files: Doc/library/select.rst | 69 ++++++++++++++++------------- Misc/NEWS | 2 + Modules/selectmodule.c | 3 + 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/Doc/library/select.rst b/Doc/library/select.rst --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -266,38 +266,43 @@ *eventmask* - +-----------------------+-----------------------------------------------+ - | Constant | Meaning | - +=======================+===============================================+ - | :const:`EPOLLIN` | Available for read | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLOUT` | Available for write | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLPRI` | Urgent data for read | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLERR` | Error condition happened on the assoc. fd | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLHUP` | Hang up happened on the assoc. fd | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLET` | Set Edge Trigger behavior, the default is | - | | Level Trigger behavior | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLONESHOT` | Set one-shot behavior. After one event is | - | | pulled out, the fd is internally disabled | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLRDHUP` | Stream socket peer closed connection or shut | - | | down writing half of connection. | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLRDNORM` | Equivalent to :const:`EPOLLIN` | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLRDBAND` | Priority data band can be read. | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLWRNORM` | Equivalent to :const:`EPOLLOUT` | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLWRBAND` | Priority data may be written. | - +-----------------------+-----------------------------------------------+ - | :const:`EPOLLMSG` | Ignored. | - +-----------------------+-----------------------------------------------+ + +-------------------------+-----------------------------------------------+ + | Constant | Meaning | + +=========================+===============================================+ + | :const:`EPOLLIN` | Available for read | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLOUT` | Available for write | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLPRI` | Urgent data for read | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLERR` | Error condition happened on the assoc. fd | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLHUP` | Hang up happened on the assoc. fd | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLET` | Set Edge Trigger behavior, the default is | + | | Level Trigger behavior | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLONESHOT` | Set one-shot behavior. After one event is | + | | pulled out, the fd is internally disabled | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLEXCLUSIVE` | Wake only one epoll object when the | + | | associated fd has an event. The default (if | + | | this flag is not set) is to wake all epoll | + | | objects polling on on a fd. | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLRDHUP` | Stream socket peer closed connection or shut | + | | down writing half of connection. | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLRDNORM` | Equivalent to :const:`EPOLLIN` | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLRDBAND` | Priority data band can be read. | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLWRNORM` | Equivalent to :const:`EPOLLOUT` | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLWRBAND` | Priority data may be written. | + +-------------------------+-----------------------------------------------+ + | :const:`EPOLLMSG` | Ignored. | + +-------------------------+-----------------------------------------------+ .. method:: epoll.close() diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,8 @@ Library ------- +- Expose the EPOLLEXCLUSIVE (when it is defined) in the select module. + - Issue #27567: Expose the EPOLLRDHUP constant in the select module. - Issue #1621: Avoid signed int negation overflow in the "audioop" module. diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -2479,6 +2479,9 @@ /* Kernel 2.6.2+ */ PyModule_AddIntMacro(m, EPOLLONESHOT); #endif +#ifdef EPOLLEXCLUSIVE + PyModule_AddIntMacro(m, EPOLLEXCLUSIVE); +#endif #ifdef EPOLLRDNORM PyModule_AddIntMacro(m, EPOLLRDNORM); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 19 01:08:24 2016 From: python-checkins at python.org (benjamin.peterson) Date: Tue, 19 Jul 2016 05:08:24 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_add_mising_word?= Message-ID: <20160719050824.22429.85569.22327313@psf.io> https://hg.python.org/cpython/rev/77154b3fcd20 changeset: 102407:77154b3fcd20 user: Benjamin Peterson date: Mon Jul 18 22:08:19 2016 -0700 summary: add mising word files: Misc/NEWS | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,7 +26,7 @@ Library ------- -- Expose the EPOLLEXCLUSIVE (when it is defined) in the select module. +- Expose the EPOLLEXCLUSIVE constant (when it is defined) in the select module. - Issue #27567: Expose the EPOLLRDHUP constant in the select module. -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Tue Jul 19 04:14:41 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 19 Jul 2016 09:14:41 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python Default 2016-07-19 Message-ID: <4617fd9f-da63-4c9e-b1ba-3be1a711014b@irsmsx101.ger.corp.intel.com> Results for project Python default, build date 2016-07-19 02:03:00 +0000 commit: c10fe99afced previous commit: 61bb66fe1fb7 revision date: 2016-07-18 08:25:01 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.18% 0.95% 11.53% 15.38% :-| pybench 0.10% -0.38% 1.58% 8.15% :-( regex_v8 2.62% -1.43% -4.05% 4.95% :-| nbody 0.11% -0.19% -1.06% 12.26% :-( json_dump_v2 0.43% -1.53% -2.27% 12.73% :-| normal_startup 0.84% 0.03% -0.02% 6.02% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-default-2016-07-19/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Tue Jul 19 04:15:47 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 19 Jul 2016 09:15:47 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python 2.7 2016-07-19 Message-ID: Results for project Python 2.7, build date 2016-07-19 02:46:37 +0000 commit: 6e166b66aa44 previous commit: 345ec7455b75 revision date: 2016-07-18 07:53:13 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.17% -2.51% 5.16% 6.14% :-) pybench 0.25% -0.20% 5.70% 4.66% :-( regex_v8 0.59% 0.02% -2.26% 11.29% :-) nbody 0.06% 0.38% 8.20% 3.98% :-| json_dump_v2 0.32% -0.54% 0.64% 13.28% :-( normal_startup 1.91% 0.15% -5.71% 1.35% :-) ssbench 0.20% -0.22% 2.38% 2.10% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-2-7-2016-07-19/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Tue Jul 19 14:08:37 2016 From: python-checkins at python.org (berker.peksag) Date: Tue, 19 Jul 2016 18:08:37 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327567=3A_Expose_t?= =?utf-8?q?he_POLLRDHUP_constant_in_the_select_module?= Message-ID: <20160719180836.7354.88116.906DC7B3@psf.io> https://hg.python.org/cpython/rev/d87f30c29ad4 changeset: 102408:d87f30c29ad4 user: Berker Peksag date: Tue Jul 19 21:09:26 2016 +0300 summary: Issue #27567: Expose the POLLRDHUP constant in the select module files: Doc/library/select.rst | 3 +++ Misc/NEWS | 3 ++- Modules/selectmodule.c | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletions(-) diff --git a/Doc/library/select.rst b/Doc/library/select.rst --- a/Doc/library/select.rst +++ b/Doc/library/select.rst @@ -391,6 +391,9 @@ +-------------------+------------------------------------------+ | :const:`POLLHUP` | Hung up | +-------------------+------------------------------------------+ + | :const:`POLLRDHUP`| Stream socket peer closed connection, or | + | | shut down writing half of connection | + +-------------------+------------------------------------------+ | :const:`POLLNVAL` | Invalid request: descriptor not open | +-------------------+------------------------------------------+ diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -28,7 +28,8 @@ - Expose the EPOLLEXCLUSIVE constant (when it is defined) in the select module. -- Issue #27567: Expose the EPOLLRDHUP constant in the select module. +- Issue #27567: Expose the EPOLLRDHUP and POLLRDHUP constants in the select + module. - Issue #1621: Avoid signed int negation overflow in the "audioop" module. diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c --- a/Modules/selectmodule.c +++ b/Modules/selectmodule.c @@ -4,6 +4,10 @@ have any value except INVALID_SOCKET. */ +#if defined(HAVE_POLL_H) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif + #include "Python.h" #include @@ -2452,6 +2456,10 @@ #ifdef POLLMSG PyModule_AddIntMacro(m, POLLMSG); #endif +#ifdef POLLRDHUP + /* Kernel 2.6.17+ */ + PyModule_AddIntMacro(m, POLLRDHUP); +#endif } #endif /* HAVE_POLL */ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 19 17:48:40 2016 From: python-checkins at python.org (zach.ware) Date: Tue, 19 Jul 2016 21:48:40 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI1Mzkz?= =?utf-8?q?=3A_Fix_probable_copy/paste_error_in_resource_docs?= Message-ID: <20160719214840.16692.43122.0044C06A@psf.io> https://hg.python.org/cpython/rev/434fc614c506 changeset: 102409:434fc614c506 branch: 2.7 parent: 102401:739f638bb9f8 user: Zachary Ware date: Tue Jul 19 16:41:20 2016 -0500 summary: Issue #25393: Fix probable copy/paste error in resource docs Patch by Alakshendra Yadav. files: Doc/library/resource.rst | 6 +++--- Misc/ACKS | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Doc/library/resource.rst b/Doc/library/resource.rst --- a/Doc/library/resource.rst +++ b/Doc/library/resource.rst @@ -101,8 +101,7 @@ .. data:: RLIMIT_FSIZE - The maximum size of a file which the process may create. This only affects the - stack of the main thread in a multi-threaded process. + The maximum size of a file which the process may create. .. data:: RLIMIT_DATA @@ -112,7 +111,8 @@ .. data:: RLIMIT_STACK - The maximum size (in bytes) of the call stack for the current process. + The maximum size (in bytes) of the call stack for the current process. This only + affects the stack of the main thread in a multi-threaded process. .. data:: RLIMIT_RSS diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1530,6 +1530,7 @@ Xiang Zhang Robert Xiao Florent Xicluna +Alakshendra Yadav Hirokazu Yamamoto Ka-Ping Yee Jason Yeo -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 19 17:48:40 2016 From: python-checkins at python.org (zach.ware) Date: Tue, 19 Jul 2016 21:48:40 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI1Mzkz?= =?utf-8?q?=3A_Fix_probable_copy/paste_error_in_resource_docs?= Message-ID: <20160719214840.120980.9091.1D32803C@psf.io> https://hg.python.org/cpython/rev/0fe2b7509707 changeset: 102410:0fe2b7509707 branch: 3.5 parent: 102402:7571432200a2 user: Zachary Ware date: Tue Jul 19 16:41:20 2016 -0500 summary: Issue #25393: Fix probable copy/paste error in resource docs Patch by Alakshendra Yadav. files: Doc/library/resource.rst | 6 +++--- Misc/ACKS | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Doc/library/resource.rst b/Doc/library/resource.rst --- a/Doc/library/resource.rst +++ b/Doc/library/resource.rst @@ -125,8 +125,7 @@ .. data:: RLIMIT_FSIZE - The maximum size of a file which the process may create. This only affects the - stack of the main thread in a multi-threaded process. + The maximum size of a file which the process may create. .. data:: RLIMIT_DATA @@ -136,7 +135,8 @@ .. data:: RLIMIT_STACK - The maximum size (in bytes) of the call stack for the current process. + The maximum size (in bytes) of the call stack for the current process. This only + affects the stack of the main thread in a multi-threaded process. .. data:: RLIMIT_RSS diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1632,6 +1632,7 @@ Robert Xiao Florent Xicluna Arnon Yaari +Alakshendra Yadav Hirokazu Yamamoto Ka-Ping Yee Jason Yeo -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 19 17:48:40 2016 From: python-checkins at python.org (zach.ware) Date: Tue, 19 Jul 2016 21:48:40 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Closes_=2325393=3A_Merge_with_3=2E5?= Message-ID: <20160719214840.111327.20023.05BB180E@psf.io> https://hg.python.org/cpython/rev/829117ae2e55 changeset: 102411:829117ae2e55 parent: 102408:d87f30c29ad4 parent: 102410:0fe2b7509707 user: Zachary Ware date: Tue Jul 19 16:46:09 2016 -0500 summary: Closes #25393: Merge with 3.5 files: Doc/library/resource.rst | 6 +++--- Misc/ACKS | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Doc/library/resource.rst b/Doc/library/resource.rst --- a/Doc/library/resource.rst +++ b/Doc/library/resource.rst @@ -125,8 +125,7 @@ .. data:: RLIMIT_FSIZE - The maximum size of a file which the process may create. This only affects the - stack of the main thread in a multi-threaded process. + The maximum size of a file which the process may create. .. data:: RLIMIT_DATA @@ -136,7 +135,8 @@ .. data:: RLIMIT_STACK - The maximum size (in bytes) of the call stack for the current process. + The maximum size (in bytes) of the call stack for the current process. This only + affects the stack of the main thread in a multi-threaded process. .. data:: RLIMIT_RSS diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1651,6 +1651,7 @@ Robert Xiao Florent Xicluna Arnon Yaari +Alakshendra Yadav Hirokazu Yamamoto Ka-Ping Yee Chi Hsuan Yen -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 20 05:49:14 2016 From: python-checkins at python.org (victor.stinner) Date: Wed, 20 Jul 2016 09:49:14 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Use_the_same_style_than_P?= =?utf-8?q?ython_ref_doc?= Message-ID: <20160720094910.7012.951.90C07D19@psf.io> https://hg.python.org/devguide/rev/9e7b1bc15ba7 changeset: 818:9e7b1bc15ba7 user: Victor Stinner date: Wed Jul 20 11:48:13 2016 +0200 summary: Use the same style than Python ref doc Issue #23951. Patch written by Carol Willing. files: Makefile | 4 + conf.py | 28 +- devguide_theme_revised.patch | 875 +++++++++++++ make.bat | 15 + tools/pydoctheme/static/pydoctheme.css | 189 ++ tools/pydoctheme/theme.conf | 23 + tools/rstlint.py | 230 +++ tools/static/copybutton.js | 62 + tools/static/sidebar.js | 193 ++ tools/templates/layout.html | 38 + tools/templates/opensearch.xml | 4 + 11 files changed, 1651 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -32,6 +32,7 @@ @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " check to run a check for frequent markup errors" clean: -rm -rf $(BUILDDIR)/* @@ -128,3 +129,6 @@ $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." + +check: + $(PYTHON) tools/rstlint.py -i tools -i venv diff --git a/conf.py b/conf.py --- a/conf.py +++ b/conf.py @@ -20,6 +20,8 @@ # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) +sys.path.append(os.path.abspath('tools')) + # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. @@ -93,22 +95,28 @@ # -- Options for HTML output --------------------------------------------------- -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'nature' +# Use our custom theme. Previously used builtin 'nature' theme. +#html_theme = 'nature' +html_theme = 'pydoctheme' +html_theme_path = ['tools'] +html_theme_options = {'collapsiblesidebar': True} -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". html_title = "%s %s" % (project, release) +# Path to find HTML templates. +templates_path = ['tools/templates'] + +# Custom sidebar templates, filenames relative to this file. +#html_sidebars = { +# 'index': 'indexsidebar.html', +#} + +# Additional static files. +html_static_path = ['tools/static'] + # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None diff --git a/devguide_theme_revised.patch b/devguide_theme_revised.patch new file mode 100644 --- /dev/null +++ b/devguide_theme_revised.patch @@ -0,0 +1,875 @@ +diff -r 128b45caba5b Makefile +--- a/Makefile Sun Jun 26 09:01:18 2016 +0300 ++++ b/Makefile Tue Jul 19 22:05:55 2016 -0700 +@@ -32,6 +32,7 @@ + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" ++ @echo " check to run a check for frequent markup errors" + + clean: + -rm -rf $(BUILDDIR)/* +@@ -128,3 +129,6 @@ + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." ++ ++check: ++ $(PYTHON) tools/rstlint.py -i tools -i venv +diff -r 128b45caba5b conf.py +--- a/conf.py Sun Jun 26 09:01:18 2016 +0300 ++++ b/conf.py Tue Jul 19 22:05:55 2016 -0700 +@@ -20,6 +20,8 @@ + # documentation root, use os.path.abspath to make it absolute, like shown here. + #sys.path.insert(0, os.path.abspath('.')) + ++sys.path.append(os.path.abspath('tools')) ++ + # -- General configuration ----------------------------------------------------- + + # If your documentation needs a minimal Sphinx version, state it here. +@@ -93,22 +95,28 @@ + + # -- Options for HTML output --------------------------------------------------- + +-# The theme to use for HTML and HTML Help pages. See the documentation for +-# a list of builtin themes. +-html_theme = 'nature' ++# Use our custom theme. Previously used builtin 'nature' theme. ++#html_theme = 'nature' ++html_theme = 'pydoctheme' ++html_theme_path = ['tools'] ++html_theme_options = {'collapsiblesidebar': True} + +-# Theme options are theme-specific and customize the look and feel of a theme +-# further. For a list of options available for each theme, see the +-# documentation. +-#html_theme_options = {} +- +-# Add any paths that contain custom themes here, relative to this directory. +-#html_theme_path = [] + + # The name for this set of Sphinx documents. If None, it defaults to + # " v documentation". + html_title = "%s %s" % (project, release) + ++# Path to find HTML templates. ++templates_path = ['tools/templates'] ++ ++# Custom sidebar templates, filenames relative to this file. ++#html_sidebars = { ++# 'index': 'indexsidebar.html', ++#} ++ ++# Additional static files. ++html_static_path = ['tools/static'] ++ + # A shorter title for the navigation bar. Default is the same as html_title. + #html_short_title = None + +diff -r 128b45caba5b make.bat +--- a/make.bat Sun Jun 26 09:01:18 2016 +0300 ++++ b/make.bat Tue Jul 19 22:05:55 2016 -0700 +@@ -12,6 +12,7 @@ + ) + + if "%1" == "" goto help ++if "%1" == "check" goto check + + if "%1" == "help" ( + :help +@@ -31,6 +32,7 @@ + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + echo. doctest to run all doctests embedded in the documentation if enabled ++ echo. check + goto end + ) + +@@ -167,4 +169,17 @@ + goto end + ) + ++if "%1" == "rstlint" ( ++ %SPHINXBUILD% -b rstlint %ALLSPHINXOPTS% %BUILDDIR%/rstlint ++ if errorlevel 1 exit /b 1 ++ echo. ++ echo.Testing of rst and py files in the documentation finished, look at the ^ ++results in %BUILDDIR%/rstlint/output.txt. ++ goto end ++) ++ ++:check ++cmd /C %PYTHON% tools\rstlint.py -i tools ++goto end ++ + :end +diff -r 128b45caba5b tools/pydoctheme/static/pydoctheme.css +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/tools/pydoctheme/static/pydoctheme.css Tue Jul 19 22:05:55 2016 -0700 +@@ -0,0 +1,189 @@ ++ at import url("default.css"); ++ ++body { ++ background-color: white; ++ margin-left: 16px; ++ margin-right: 16px; ++} ++ ++div.related { ++ margin-bottom: 1.2em; ++ line-height: 32px; ++ color: #fff; ++ text-shadow: 0px 1px 0 #444; ++ font-size: 0.9em; ++ background-color: #6BA81E; ++} ++ ++div.related a { ++ color: #fff; ++} ++ ++div.related a:hover { ++ color: #0095C4; ++} ++ ++div.related:first-child { ++ border-top: 0; ++ border-bottom: 1px solid #ccc; ++} ++ ++div.sphinxsidebar { ++ background-color: #eeeeee; ++ border-radius: 5px; ++ line-height: 130%; ++ font-size: smaller; ++} ++ ++div.sphinxsidebar h3, div.sphinxsidebar h4 { ++ margin-top: 1.5em; ++} ++ ++div.sphinxsidebarwrapper > h3:first-child { ++ margin-top: 0.2em; ++} ++ ++div.sphinxsidebarwrapper > ul > li > ul > li { ++ margin-bottom: 0.4em; ++} ++ ++div.sphinxsidebar a:hover { ++ color: #0095C4; ++} ++ ++div.sphinxsidebar input { ++ font-family: 'Lucida Grande',Arial,sans-serif; ++ border: 1px solid #999999; ++ font-size: smaller; ++ border-radius: 3px; ++} ++ ++div.sphinxsidebar input[type=text] { ++ max-width: 150px; ++} ++ ++div.body { ++ padding: 0 0 0 1.2em; ++} ++ ++div.body p { ++ line-height: 140%; ++} ++ ++div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { ++ margin: 0; ++ border: 0; ++ padding: 0.3em 0; ++} ++ ++div.body hr { ++ border: 0; ++ background-color: #ccc; ++ height: 1px; ++} ++ ++div.body pre { ++ border-radius: 3px; ++ border: 1px solid #ac9; ++} ++ ++div.body div.admonition, div.body div.impl-detail { ++ border-radius: 3px; ++} ++ ++div.body div.impl-detail > p { ++ margin: 0; ++} ++ ++div.body div.seealso { ++ border: 1px solid #dddd66; ++} ++ ++div.body a { ++ color: #0072aa; ++} ++ ++div.body a:visited { ++ color: #6363bb; ++} ++ ++div.body a:hover { ++ color: #00B0E4; ++} ++ ++tt, code, pre { ++ font-family: monospace, sans-serif; ++ font-size: 96.5%; ++} ++ ++div.body tt, div.body code { ++ border-radius: 3px; ++} ++ ++div.body tt.descname, div.body code.descname { ++ font-size: 120%; ++} ++ ++div.body tt.xref, div.body a tt, div.body code.xref, div.body a code { ++ font-weight: normal; ++} ++ ++.deprecated { ++ border-radius: 3px; ++} ++ ++table.docutils { ++ border: 1px solid #ddd; ++ min-width: 20%; ++ border-radius: 3px; ++ margin-top: 10px; ++ margin-bottom: 10px; ++} ++ ++table.docutils td, table.docutils th { ++ border: 1px solid #ddd !important; ++ border-radius: 3px; ++} ++ ++table p, table li { ++ text-align: left !important; ++} ++ ++table.docutils th { ++ background-color: #eee; ++ padding: 0.3em 0.5em; ++} ++ ++table.docutils td { ++ background-color: white; ++ padding: 0.3em 0.5em; ++} ++ ++table.footnote, table.footnote td { ++ border: 0 !important; ++} ++ ++div.footer { ++ line-height: 150%; ++ margin-top: -2em; ++ text-align: right; ++ width: auto; ++ margin-right: 10px; ++} ++ ++div.footer a:hover { ++ color: #0095C4; ++} ++ ++.refcount { ++ color: #060; ++} ++ ++.stableabi { ++ color: #229; ++} ++ ++.highlight { ++ background: none !important; ++} ++ +diff -r 128b45caba5b tools/pydoctheme/theme.conf +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/tools/pydoctheme/theme.conf Tue Jul 19 22:05:55 2016 -0700 +@@ -0,0 +1,23 @@ ++[theme] ++inherit = default ++stylesheet = pydoctheme.css ++pygments_style = sphinx ++ ++[options] ++bodyfont = 'Lucida Grande', Arial, sans-serif ++headfont = 'Lucida Grande', Arial, sans-serif ++footerbgcolor = white ++footertextcolor = #555555 ++relbarbgcolor = white ++relbartextcolor = #666666 ++relbarlinkcolor = #444444 ++sidebarbgcolor = white ++sidebartextcolor = #444444 ++sidebarlinkcolor = #444444 ++bgcolor = white ++textcolor = #222222 ++linkcolor = #0090c0 ++visitedlinkcolor = #00608f ++headtextcolor = #1a1a1a ++headbgcolor = white ++headlinkcolor = #aaaaaa +diff -r 128b45caba5b tools/rstlint.py +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/tools/rstlint.py Tue Jul 19 22:05:55 2016 -0700 +@@ -0,0 +1,230 @@ ++#!/usr/bin/env python3 ++# -*- coding: utf-8 -*- ++ ++# Check for stylistic and formal issues in .rst and .py ++# files included in the documentation. ++# ++# 01/2009, Georg Brandl ++ ++# TODO: - wrong versions in versionadded/changed ++# - wrong markup after versionchanged directive ++ ++from __future__ import with_statement ++ ++import os ++import re ++import sys ++import getopt ++from os.path import join, splitext, abspath, exists ++from collections import defaultdict ++ ++directives = [ ++ # standard docutils ones ++ 'admonition', 'attention', 'caution', 'class', 'compound', 'container', ++ 'contents', 'csv-table', 'danger', 'date', 'default-role', 'epigraph', ++ 'error', 'figure', 'footer', 'header', 'highlights', 'hint', 'image', ++ 'important', 'include', 'line-block', 'list-table', 'meta', 'note', ++ 'parsed-literal', 'pull-quote', 'raw', 'replace', ++ 'restructuredtext-test-directive', 'role', 'rubric', 'sectnum', 'sidebar', ++ 'table', 'target-notes', 'tip', 'title', 'topic', 'unicode', 'warning', ++ # Sphinx and Python docs custom ones ++ 'acks', 'attribute', 'autoattribute', 'autoclass', 'autodata', ++ 'autoexception', 'autofunction', 'automethod', 'automodule', 'centered', ++ 'cfunction', 'class', 'classmethod', 'cmacro', 'cmdoption', 'cmember', ++ 'code-block', 'confval', 'cssclass', 'ctype', 'currentmodule', 'cvar', ++ 'data', 'decorator', 'decoratormethod', 'deprecated-removed', ++ 'deprecated(?!-removed)', 'describe', 'directive', 'doctest', 'envvar', ++ 'event', 'exception', 'function', 'glossary', 'highlight', 'highlightlang', ++ 'impl-detail', 'index', 'literalinclude', 'method', 'miscnews', 'module', ++ 'moduleauthor', 'opcode', 'pdbcommand', 'productionlist', ++ 'program', 'role', 'sectionauthor', 'seealso', 'sourcecode', 'staticmethod', ++ 'tabularcolumns', 'testcode', 'testoutput', 'testsetup', 'toctree', 'todo', ++ 'todolist', 'versionadded', 'versionchanged' ++] ++ ++all_directives = '(' + '|'.join(directives) + ')' ++seems_directive_re = re.compile(r'(? 81: ++ # don't complain about tables, links and function signatures ++ if line.lstrip()[0] not in '+|' and \ ++ 'http://' not in line and \ ++ not line.lstrip().startswith(('.. function', ++ '.. method', ++ '.. cfunction')): ++ yield lno+1, "line too long" ++ ++ ++ at checker('.html', severity=2, falsepositives=True) ++def check_leaked_markup(fn, lines): ++ """Check HTML files for leaked reST markup; this only works if ++ the HTML files have been built. ++ """ ++ for lno, line in enumerate(lines): ++ if leaked_markup_re.search(line): ++ yield lno+1, 'possibly leaked markup: %r' % line ++ ++ ++def main(argv): ++ usage = '''\ ++Usage: %s [-v] [-f] [-s sev] [-i path]* [path] ++ ++Options: -v verbose (print all checked file names) ++ -f enable checkers that yield many false positives ++ -s sev only show problems with severity >= sev ++ -i path ignore subdir or file path ++'''% argv[0] ++ try: ++ gopts, args = getopt.getopt(argv[1:], 'vfs:i:') ++ except getopt.GetoptError: ++ print(usage) ++ return 2 ++ ++ verbose = False ++ severity = 1 ++ ignore = [] ++ falsepos = False ++ for opt, val in gopts: ++ if opt == '-v': ++ verbose = True ++ elif opt == '-f': ++ falsepos = True ++ elif opt == '-s': ++ severity = int(val) ++ elif opt == '-i': ++ ignore.append(abspath(val)) ++ ++ if len(args) == 0: ++ path = '.' ++ elif len(args) == 1: ++ path = args[0] ++ else: ++ print(usage) ++ return 2 ++ ++ if not exists(path): ++ print('Error: path %s does not exist' % path) ++ return 2 ++ ++ count = defaultdict(int) ++ ++ for root, dirs, files in os.walk(path): ++ # ignore subdirs in ignore list ++ if abspath(root) in ignore: ++ del dirs[:] ++ continue ++ ++ for fn in files: ++ fn = join(root, fn) ++ if fn[:2] == './': ++ fn = fn[2:] ++ ++ # ignore files in ignore list ++ if abspath(fn) in ignore: ++ continue ++ ++ ext = splitext(fn)[1] ++ checkerlist = checkers.get(ext, None) ++ if not checkerlist: ++ continue ++ ++ if verbose: ++ print('Checking %s...' % fn) ++ ++ try: ++ with open(fn, 'r', encoding='utf-8') as f: ++ lines = list(f) ++ except (IOError, OSError) as err: ++ print('%s: cannot open: %s' % (fn, err)) ++ count[4] += 1 ++ continue ++ ++ for checker in checkerlist: ++ if checker.falsepositives and not falsepos: ++ continue ++ csev = checker.severity ++ if csev >= severity: ++ for lno, msg in checker(fn, lines): ++ print('[%d] %s:%d: %s' % (csev, fn, lno, msg)) ++ count[csev] += 1 ++ if verbose: ++ print() ++ if not count: ++ if severity > 1: ++ print('No problems with severity >= %d found.' % severity) ++ else: ++ print('No problems found.') ++ else: ++ for severity in sorted(count): ++ number = count[severity] ++ print('%d problem%s with severity %d found.' % ++ (number, number > 1 and 's' or '', severity)) ++ return int(bool(count)) ++ ++ ++if __name__ == '__main__': ++ sys.exit(main(sys.argv)) +diff -r 128b45caba5b tools/static/copybutton.js +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/tools/static/copybutton.js Tue Jul 19 22:05:55 2016 -0700 +@@ -0,0 +1,62 @@ ++$(document).ready(function() { ++ /* Add a [>>>] button on the top-right corner of code samples to hide ++ * the >>> and ... prompts and the output and thus make the code ++ * copyable. */ ++ var div = $('.highlight-python .highlight,' + ++ '.highlight-python3 .highlight') ++ var pre = div.find('pre'); ++ ++ // get the styles from the current theme ++ pre.parent().parent().css('position', 'relative'); ++ var hide_text = 'Hide the prompts and output'; ++ var show_text = 'Show the prompts and output'; ++ var border_width = pre.css('border-top-width'); ++ var border_style = pre.css('border-top-style'); ++ var border_color = pre.css('border-top-color'); ++ var button_styles = { ++ 'cursor':'pointer', 'position': 'absolute', 'top': '0', 'right': '0', ++ 'border-color': border_color, 'border-style': border_style, ++ 'border-width': border_width, 'color': border_color, 'text-size': '75%', ++ 'font-family': 'monospace', 'padding-left': '0.2em', 'padding-right': '0.2em', ++ 'border-radius': '0 3px 0 0' ++ } ++ ++ // create and add the button to all the code blocks that contain >>> ++ div.each(function(index) { ++ var jthis = $(this); ++ if (jthis.find('.gp').length > 0) { ++ var button = $('>>>'); ++ button.css(button_styles) ++ button.attr('title', hide_text); ++ button.data('hidden', 'false'); ++ jthis.prepend(button); ++ } ++ // tracebacks (.gt) contain bare text elements that need to be ++ // wrapped in a span to work with .nextUntil() (see later) ++ jthis.find('pre:has(.gt)').contents().filter(function() { ++ return ((this.nodeType == 3) && (this.data.trim().length > 0)); ++ }).wrap(''); ++ }); ++ ++ // define the behavior of the button when it's clicked ++ $('.copybutton').click(function(e){ ++ e.preventDefault(); ++ var button = $(this); ++ if (button.data('hidden') === 'false') { ++ // hide the code output ++ button.parent().find('.go, .gp, .gt').hide(); ++ button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'hidden'); ++ button.css('text-decoration', 'line-through'); ++ button.attr('title', show_text); ++ button.data('hidden', 'true'); ++ } else { ++ // show the code output ++ button.parent().find('.go, .gp, .gt').show(); ++ button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'visible'); ++ button.css('text-decoration', 'none'); ++ button.attr('title', hide_text); ++ button.data('hidden', 'false'); ++ } ++ }); ++}); ++ +diff -r 128b45caba5b tools/static/py.png +Binary file tools/static/py.png has changed +diff -r 128b45caba5b tools/static/sidebar.js +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/tools/static/sidebar.js Tue Jul 19 22:05:55 2016 -0700 +@@ -0,0 +1,193 @@ ++/* ++ * sidebar.js ++ * ~~~~~~~~~~ ++ * ++ * This script makes the Sphinx sidebar collapsible and implements intelligent ++ * scrolling. ++ * ++ * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds in ++ * .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton used to ++ * collapse and expand the sidebar. ++ * ++ * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden and the ++ * width of the sidebar and the margin-left of the document are decreased. ++ * When the sidebar is expanded the opposite happens. This script saves a ++ * per-browser/per-session cookie used to remember the position of the sidebar ++ * among the pages. Once the browser is closed the cookie is deleted and the ++ * position reset to the default (expanded). ++ * ++ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. ++ * :license: BSD, see LICENSE for details. ++ * ++ */ ++ ++$(function() { ++ // global elements used by the functions. ++ // the 'sidebarbutton' element is defined as global after its ++ // creation, in the add_sidebar_button function ++ var jwindow = $(window); ++ var jdocument = $(document); ++ var bodywrapper = $('.bodywrapper'); ++ var sidebar = $('.sphinxsidebar'); ++ var sidebarwrapper = $('.sphinxsidebarwrapper'); ++ ++ // original margin-left of the bodywrapper and width of the sidebar ++ // with the sidebar expanded ++ var bw_margin_expanded = bodywrapper.css('margin-left'); ++ var ssb_width_expanded = sidebar.width(); ++ ++ // margin-left of the bodywrapper and width of the sidebar ++ // with the sidebar collapsed ++ var bw_margin_collapsed = '.8em'; ++ var ssb_width_collapsed = '.8em'; ++ ++ // colors used by the current theme ++ var dark_color = '#AAAAAA'; ++ var light_color = '#CCCCCC'; ++ ++ function get_viewport_height() { ++ if (window.innerHeight) ++ return window.innerHeight; ++ else ++ return jwindow.height(); ++ } ++ ++ function sidebar_is_collapsed() { ++ return sidebarwrapper.is(':not(:visible)'); ++ } ++ ++ function toggle_sidebar() { ++ if (sidebar_is_collapsed()) ++ expand_sidebar(); ++ else ++ collapse_sidebar(); ++ // adjust the scrolling of the sidebar ++ scroll_sidebar(); ++ } ++ ++ function collapse_sidebar() { ++ sidebarwrapper.hide(); ++ sidebar.css('width', ssb_width_collapsed); ++ bodywrapper.css('margin-left', bw_margin_collapsed); ++ sidebarbutton.css({ ++ 'margin-left': '0', ++ 'height': bodywrapper.height(), ++ 'border-radius': '5px' ++ }); ++ sidebarbutton.find('span').text('?'); ++ sidebarbutton.attr('title', _('Expand sidebar')); ++ document.cookie = 'sidebar=collapsed'; ++ } ++ ++ function expand_sidebar() { ++ bodywrapper.css('margin-left', bw_margin_expanded); ++ sidebar.css('width', ssb_width_expanded); ++ sidebarwrapper.show(); ++ sidebarbutton.css({ ++ 'margin-left': ssb_width_expanded-12, ++ 'height': bodywrapper.height(), ++ 'border-radius': '0 5px 5px 0' ++ }); ++ sidebarbutton.find('span').text('?'); ++ sidebarbutton.attr('title', _('Collapse sidebar')); ++ //sidebarwrapper.css({'padding-top': ++ // Math.max(window.pageYOffset - sidebarwrapper.offset().top, 10)}); ++ document.cookie = 'sidebar=expanded'; ++ } ++ ++ function add_sidebar_button() { ++ sidebarwrapper.css({ ++ 'float': 'left', ++ 'margin-right': '0', ++ 'width': ssb_width_expanded - 28 ++ }); ++ // create the button ++ sidebar.append( ++ '
«
' ++ ); ++ var sidebarbutton = $('#sidebarbutton'); ++ // find the height of the viewport to center the '<<' in the page ++ var viewport_height = get_viewport_height(); ++ var sidebar_offset = sidebar.offset().top; ++ var sidebar_height = Math.max(bodywrapper.height(), sidebar.height()); ++ sidebarbutton.find('span').css({ ++ 'display': 'block', ++ 'position': 'fixed', ++ 'top': Math.min(viewport_height/2, sidebar_height/2 + sidebar_offset) - 10 ++ }); ++ ++ sidebarbutton.click(toggle_sidebar); ++ sidebarbutton.attr('title', _('Collapse sidebar')); ++ sidebarbutton.css({ ++ 'border-radius': '0 5px 5px 0', ++ 'color': '#444444', ++ 'background-color': '#CCCCCC', ++ 'font-size': '1.2em', ++ 'cursor': 'pointer', ++ 'height': sidebar_height, ++ 'padding-top': '1px', ++ 'padding-left': '1px', ++ 'margin-left': ssb_width_expanded - 12 ++ }); ++ ++ sidebarbutton.hover( ++ function () { ++ $(this).css('background-color', dark_color); ++ }, ++ function () { ++ $(this).css('background-color', light_color); ++ } ++ ); ++ } ++ ++ function set_position_from_cookie() { ++ if (!document.cookie) ++ return; ++ var items = document.cookie.split(';'); ++ for(var k=0; k wintop && curbot > winbot) { ++ sidebarwrapper.css('top', $u.max([wintop - offset - 10, 0])); ++ } ++ else if (curtop < wintop && curbot < winbot) { ++ sidebarwrapper.css('top', $u.min([winbot - sidebar_height - offset - 20, ++ jdocument.height() - sidebar_height - 200])); ++ } ++ } ++ } ++ jwindow.scroll(scroll_sidebar); ++}); +diff -r 128b45caba5b tools/templates/layout.html +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/tools/templates/layout.html Tue Jul 19 22:05:55 2016 -0700 +@@ -0,0 +1,38 @@ ++{% extends "!layout.html" %} ++{% block rootrellink %} ++
  • ++
  • Python{{ reldelim1 }}
  • ++
  • ++ {{ shorttitle }}{{ reldelim1 }} ++
  • ++{% endblock %} ++{% block relbar1 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} ++{% block relbar2 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} ++{% block extrahead %} ++ ++ {% if not embedded %}{% endif %} ++ ++{{ super() }} ++{% endblock %} ++{% block footer %} ++ ++{% endblock %} ++{% block sidebarsourcelink %} ++{%- if show_source and has_source and sourcename %} ++

    {{ _('This Page') }}

    ++ ++{%- endif %} ++{% endblock %} +diff -r 128b45caba5b tools/templates/opensearch.xml +--- /dev/null Thu Jan 01 00:00:00 1970 +0000 ++++ b/tools/templates/opensearch.xml Tue Jul 19 22:05:55 2016 -0700 +@@ -0,0 +1,4 @@ ++{% extends "!opensearch.xml" %} ++{% block extra -%} ++https://www.python.org/images/favicon16x16.ico ++{%- endblock %} diff --git a/make.bat b/make.bat --- a/make.bat +++ b/make.bat @@ -12,6 +12,7 @@ ) if "%1" == "" goto help +if "%1" == "check" goto check if "%1" == "help" ( :help @@ -31,6 +32,7 @@ echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled + echo. check goto end ) @@ -167,4 +169,17 @@ goto end ) +if "%1" == "rstlint" ( + %SPHINXBUILD% -b rstlint %ALLSPHINXOPTS% %BUILDDIR%/rstlint + if errorlevel 1 exit /b 1 + echo. + echo.Testing of rst and py files in the documentation finished, look at the ^ +results in %BUILDDIR%/rstlint/output.txt. + goto end +) + +:check +cmd /C %PYTHON% tools\rstlint.py -i tools +goto end + :end diff --git a/tools/pydoctheme/static/pydoctheme.css b/tools/pydoctheme/static/pydoctheme.css new file mode 100644 --- /dev/null +++ b/tools/pydoctheme/static/pydoctheme.css @@ -0,0 +1,189 @@ + at import url("default.css"); + +body { + background-color: white; + margin-left: 16px; + margin-right: 16px; +} + +div.related { + margin-bottom: 1.2em; + line-height: 32px; + color: #fff; + text-shadow: 0px 1px 0 #444; + font-size: 0.9em; + background-color: #6BA81E; +} + +div.related a { + color: #fff; +} + +div.related a:hover { + color: #0095C4; +} + +div.related:first-child { + border-top: 0; + border-bottom: 1px solid #ccc; +} + +div.sphinxsidebar { + background-color: #eeeeee; + border-radius: 5px; + line-height: 130%; + font-size: smaller; +} + +div.sphinxsidebar h3, div.sphinxsidebar h4 { + margin-top: 1.5em; +} + +div.sphinxsidebarwrapper > h3:first-child { + margin-top: 0.2em; +} + +div.sphinxsidebarwrapper > ul > li > ul > li { + margin-bottom: 0.4em; +} + +div.sphinxsidebar a:hover { + color: #0095C4; +} + +div.sphinxsidebar input { + font-family: 'Lucida Grande',Arial,sans-serif; + border: 1px solid #999999; + font-size: smaller; + border-radius: 3px; +} + +div.sphinxsidebar input[type=text] { + max-width: 150px; +} + +div.body { + padding: 0 0 0 1.2em; +} + +div.body p { + line-height: 140%; +} + +div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { + margin: 0; + border: 0; + padding: 0.3em 0; +} + +div.body hr { + border: 0; + background-color: #ccc; + height: 1px; +} + +div.body pre { + border-radius: 3px; + border: 1px solid #ac9; +} + +div.body div.admonition, div.body div.impl-detail { + border-radius: 3px; +} + +div.body div.impl-detail > p { + margin: 0; +} + +div.body div.seealso { + border: 1px solid #dddd66; +} + +div.body a { + color: #0072aa; +} + +div.body a:visited { + color: #6363bb; +} + +div.body a:hover { + color: #00B0E4; +} + +tt, code, pre { + font-family: monospace, sans-serif; + font-size: 96.5%; +} + +div.body tt, div.body code { + border-radius: 3px; +} + +div.body tt.descname, div.body code.descname { + font-size: 120%; +} + +div.body tt.xref, div.body a tt, div.body code.xref, div.body a code { + font-weight: normal; +} + +.deprecated { + border-radius: 3px; +} + +table.docutils { + border: 1px solid #ddd; + min-width: 20%; + border-radius: 3px; + margin-top: 10px; + margin-bottom: 10px; +} + +table.docutils td, table.docutils th { + border: 1px solid #ddd !important; + border-radius: 3px; +} + +table p, table li { + text-align: left !important; +} + +table.docutils th { + background-color: #eee; + padding: 0.3em 0.5em; +} + +table.docutils td { + background-color: white; + padding: 0.3em 0.5em; +} + +table.footnote, table.footnote td { + border: 0 !important; +} + +div.footer { + line-height: 150%; + margin-top: -2em; + text-align: right; + width: auto; + margin-right: 10px; +} + +div.footer a:hover { + color: #0095C4; +} + +.refcount { + color: #060; +} + +.stableabi { + color: #229; +} + +.highlight { + background: none !important; +} + diff --git a/tools/pydoctheme/theme.conf b/tools/pydoctheme/theme.conf new file mode 100644 --- /dev/null +++ b/tools/pydoctheme/theme.conf @@ -0,0 +1,23 @@ +[theme] +inherit = default +stylesheet = pydoctheme.css +pygments_style = sphinx + +[options] +bodyfont = 'Lucida Grande', Arial, sans-serif +headfont = 'Lucida Grande', Arial, sans-serif +footerbgcolor = white +footertextcolor = #555555 +relbarbgcolor = white +relbartextcolor = #666666 +relbarlinkcolor = #444444 +sidebarbgcolor = white +sidebartextcolor = #444444 +sidebarlinkcolor = #444444 +bgcolor = white +textcolor = #222222 +linkcolor = #0090c0 +visitedlinkcolor = #00608f +headtextcolor = #1a1a1a +headbgcolor = white +headlinkcolor = #aaaaaa diff --git a/tools/rstlint.py b/tools/rstlint.py new file mode 100755 --- /dev/null +++ b/tools/rstlint.py @@ -0,0 +1,230 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +# Check for stylistic and formal issues in .rst and .py +# files included in the documentation. +# +# 01/2009, Georg Brandl + +# TODO: - wrong versions in versionadded/changed +# - wrong markup after versionchanged directive + +from __future__ import with_statement + +import os +import re +import sys +import getopt +from os.path import join, splitext, abspath, exists +from collections import defaultdict + +directives = [ + # standard docutils ones + 'admonition', 'attention', 'caution', 'class', 'compound', 'container', + 'contents', 'csv-table', 'danger', 'date', 'default-role', 'epigraph', + 'error', 'figure', 'footer', 'header', 'highlights', 'hint', 'image', + 'important', 'include', 'line-block', 'list-table', 'meta', 'note', + 'parsed-literal', 'pull-quote', 'raw', 'replace', + 'restructuredtext-test-directive', 'role', 'rubric', 'sectnum', 'sidebar', + 'table', 'target-notes', 'tip', 'title', 'topic', 'unicode', 'warning', + # Sphinx and Python docs custom ones + 'acks', 'attribute', 'autoattribute', 'autoclass', 'autodata', + 'autoexception', 'autofunction', 'automethod', 'automodule', 'centered', + 'cfunction', 'class', 'classmethod', 'cmacro', 'cmdoption', 'cmember', + 'code-block', 'confval', 'cssclass', 'ctype', 'currentmodule', 'cvar', + 'data', 'decorator', 'decoratormethod', 'deprecated-removed', + 'deprecated(?!-removed)', 'describe', 'directive', 'doctest', 'envvar', + 'event', 'exception', 'function', 'glossary', 'highlight', 'highlightlang', + 'impl-detail', 'index', 'literalinclude', 'method', 'miscnews', 'module', + 'moduleauthor', 'opcode', 'pdbcommand', 'productionlist', + 'program', 'role', 'sectionauthor', 'seealso', 'sourcecode', 'staticmethod', + 'tabularcolumns', 'testcode', 'testoutput', 'testsetup', 'toctree', 'todo', + 'todolist', 'versionadded', 'versionchanged' +] + +all_directives = '(' + '|'.join(directives) + ')' +seems_directive_re = re.compile(r'(? 81: + # don't complain about tables, links and function signatures + if line.lstrip()[0] not in '+|' and \ + 'http://' not in line and \ + not line.lstrip().startswith(('.. function', + '.. method', + '.. cfunction')): + yield lno+1, "line too long" + + + at checker('.html', severity=2, falsepositives=True) +def check_leaked_markup(fn, lines): + """Check HTML files for leaked reST markup; this only works if + the HTML files have been built. + """ + for lno, line in enumerate(lines): + if leaked_markup_re.search(line): + yield lno+1, 'possibly leaked markup: %r' % line + + +def main(argv): + usage = '''\ +Usage: %s [-v] [-f] [-s sev] [-i path]* [path] + +Options: -v verbose (print all checked file names) + -f enable checkers that yield many false positives + -s sev only show problems with severity >= sev + -i path ignore subdir or file path +'''% argv[0] + try: + gopts, args = getopt.getopt(argv[1:], 'vfs:i:') + except getopt.GetoptError: + print(usage) + return 2 + + verbose = False + severity = 1 + ignore = [] + falsepos = False + for opt, val in gopts: + if opt == '-v': + verbose = True + elif opt == '-f': + falsepos = True + elif opt == '-s': + severity = int(val) + elif opt == '-i': + ignore.append(abspath(val)) + + if len(args) == 0: + path = '.' + elif len(args) == 1: + path = args[0] + else: + print(usage) + return 2 + + if not exists(path): + print('Error: path %s does not exist' % path) + return 2 + + count = defaultdict(int) + + for root, dirs, files in os.walk(path): + # ignore subdirs in ignore list + if abspath(root) in ignore: + del dirs[:] + continue + + for fn in files: + fn = join(root, fn) + if fn[:2] == './': + fn = fn[2:] + + # ignore files in ignore list + if abspath(fn) in ignore: + continue + + ext = splitext(fn)[1] + checkerlist = checkers.get(ext, None) + if not checkerlist: + continue + + if verbose: + print('Checking %s...' % fn) + + try: + with open(fn, 'r', encoding='utf-8') as f: + lines = list(f) + except (IOError, OSError) as err: + print('%s: cannot open: %s' % (fn, err)) + count[4] += 1 + continue + + for checker in checkerlist: + if checker.falsepositives and not falsepos: + continue + csev = checker.severity + if csev >= severity: + for lno, msg in checker(fn, lines): + print('[%d] %s:%d: %s' % (csev, fn, lno, msg)) + count[csev] += 1 + if verbose: + print() + if not count: + if severity > 1: + print('No problems with severity >= %d found.' % severity) + else: + print('No problems found.') + else: + for severity in sorted(count): + number = count[severity] + print('%d problem%s with severity %d found.' % + (number, number > 1 and 's' or '', severity)) + return int(bool(count)) + + +if __name__ == '__main__': + sys.exit(main(sys.argv)) diff --git a/tools/static/copybutton.js b/tools/static/copybutton.js new file mode 100644 --- /dev/null +++ b/tools/static/copybutton.js @@ -0,0 +1,62 @@ +$(document).ready(function() { + /* Add a [>>>] button on the top-right corner of code samples to hide + * the >>> and ... prompts and the output and thus make the code + * copyable. */ + var div = $('.highlight-python .highlight,' + + '.highlight-python3 .highlight') + var pre = div.find('pre'); + + // get the styles from the current theme + pre.parent().parent().css('position', 'relative'); + var hide_text = 'Hide the prompts and output'; + var show_text = 'Show the prompts and output'; + var border_width = pre.css('border-top-width'); + var border_style = pre.css('border-top-style'); + var border_color = pre.css('border-top-color'); + var button_styles = { + 'cursor':'pointer', 'position': 'absolute', 'top': '0', 'right': '0', + 'border-color': border_color, 'border-style': border_style, + 'border-width': border_width, 'color': border_color, 'text-size': '75%', + 'font-family': 'monospace', 'padding-left': '0.2em', 'padding-right': '0.2em', + 'border-radius': '0 3px 0 0' + } + + // create and add the button to all the code blocks that contain >>> + div.each(function(index) { + var jthis = $(this); + if (jthis.find('.gp').length > 0) { + var button = $('>>>'); + button.css(button_styles) + button.attr('title', hide_text); + button.data('hidden', 'false'); + jthis.prepend(button); + } + // tracebacks (.gt) contain bare text elements that need to be + // wrapped in a span to work with .nextUntil() (see later) + jthis.find('pre:has(.gt)').contents().filter(function() { + return ((this.nodeType == 3) && (this.data.trim().length > 0)); + }).wrap(''); + }); + + // define the behavior of the button when it's clicked + $('.copybutton').click(function(e){ + e.preventDefault(); + var button = $(this); + if (button.data('hidden') === 'false') { + // hide the code output + button.parent().find('.go, .gp, .gt').hide(); + button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'hidden'); + button.css('text-decoration', 'line-through'); + button.attr('title', show_text); + button.data('hidden', 'true'); + } else { + // show the code output + button.parent().find('.go, .gp, .gt').show(); + button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'visible'); + button.css('text-decoration', 'none'); + button.attr('title', hide_text); + button.data('hidden', 'false'); + } + }); +}); + diff --git a/tools/static/sidebar.js b/tools/static/sidebar.js new file mode 100644 --- /dev/null +++ b/tools/static/sidebar.js @@ -0,0 +1,193 @@ +/* + * sidebar.js + * ~~~~~~~~~~ + * + * This script makes the Sphinx sidebar collapsible and implements intelligent + * scrolling. + * + * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds in + * .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton used to + * collapse and expand the sidebar. + * + * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden and the + * width of the sidebar and the margin-left of the document are decreased. + * When the sidebar is expanded the opposite happens. This script saves a + * per-browser/per-session cookie used to remember the position of the sidebar + * among the pages. Once the browser is closed the cookie is deleted and the + * position reset to the default (expanded). + * + * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +$(function() { + // global elements used by the functions. + // the 'sidebarbutton' element is defined as global after its + // creation, in the add_sidebar_button function + var jwindow = $(window); + var jdocument = $(document); + var bodywrapper = $('.bodywrapper'); + var sidebar = $('.sphinxsidebar'); + var sidebarwrapper = $('.sphinxsidebarwrapper'); + + // original margin-left of the bodywrapper and width of the sidebar + // with the sidebar expanded + var bw_margin_expanded = bodywrapper.css('margin-left'); + var ssb_width_expanded = sidebar.width(); + + // margin-left of the bodywrapper and width of the sidebar + // with the sidebar collapsed + var bw_margin_collapsed = '.8em'; + var ssb_width_collapsed = '.8em'; + + // colors used by the current theme + var dark_color = '#AAAAAA'; + var light_color = '#CCCCCC'; + + function get_viewport_height() { + if (window.innerHeight) + return window.innerHeight; + else + return jwindow.height(); + } + + function sidebar_is_collapsed() { + return sidebarwrapper.is(':not(:visible)'); + } + + function toggle_sidebar() { + if (sidebar_is_collapsed()) + expand_sidebar(); + else + collapse_sidebar(); + // adjust the scrolling of the sidebar + scroll_sidebar(); + } + + function collapse_sidebar() { + sidebarwrapper.hide(); + sidebar.css('width', ssb_width_collapsed); + bodywrapper.css('margin-left', bw_margin_collapsed); + sidebarbutton.css({ + 'margin-left': '0', + 'height': bodywrapper.height(), + 'border-radius': '5px' + }); + sidebarbutton.find('span').text('?'); + sidebarbutton.attr('title', _('Expand sidebar')); + document.cookie = 'sidebar=collapsed'; + } + + function expand_sidebar() { + bodywrapper.css('margin-left', bw_margin_expanded); + sidebar.css('width', ssb_width_expanded); + sidebarwrapper.show(); + sidebarbutton.css({ + 'margin-left': ssb_width_expanded-12, + 'height': bodywrapper.height(), + 'border-radius': '0 5px 5px 0' + }); + sidebarbutton.find('span').text('?'); + sidebarbutton.attr('title', _('Collapse sidebar')); + //sidebarwrapper.css({'padding-top': + // Math.max(window.pageYOffset - sidebarwrapper.offset().top, 10)}); + document.cookie = 'sidebar=expanded'; + } + + function add_sidebar_button() { + sidebarwrapper.css({ + 'float': 'left', + 'margin-right': '0', + 'width': ssb_width_expanded - 28 + }); + // create the button + sidebar.append( + '
    «
    ' + ); + var sidebarbutton = $('#sidebarbutton'); + // find the height of the viewport to center the '<<' in the page + var viewport_height = get_viewport_height(); + var sidebar_offset = sidebar.offset().top; + var sidebar_height = Math.max(bodywrapper.height(), sidebar.height()); + sidebarbutton.find('span').css({ + 'display': 'block', + 'position': 'fixed', + 'top': Math.min(viewport_height/2, sidebar_height/2 + sidebar_offset) - 10 + }); + + sidebarbutton.click(toggle_sidebar); + sidebarbutton.attr('title', _('Collapse sidebar')); + sidebarbutton.css({ + 'border-radius': '0 5px 5px 0', + 'color': '#444444', + 'background-color': '#CCCCCC', + 'font-size': '1.2em', + 'cursor': 'pointer', + 'height': sidebar_height, + 'padding-top': '1px', + 'padding-left': '1px', + 'margin-left': ssb_width_expanded - 12 + }); + + sidebarbutton.hover( + function () { + $(this).css('background-color', dark_color); + }, + function () { + $(this).css('background-color', light_color); + } + ); + } + + function set_position_from_cookie() { + if (!document.cookie) + return; + var items = document.cookie.split(';'); + for(var k=0; k wintop && curbot > winbot) { + sidebarwrapper.css('top', $u.max([wintop - offset - 10, 0])); + } + else if (curtop < wintop && curbot < winbot) { + sidebarwrapper.css('top', $u.min([winbot - sidebar_height - offset - 20, + jdocument.height() - sidebar_height - 200])); + } + } + } + jwindow.scroll(scroll_sidebar); +}); diff --git a/tools/templates/layout.html b/tools/templates/layout.html new file mode 100644 --- /dev/null +++ b/tools/templates/layout.html @@ -0,0 +1,38 @@ +{% extends "!layout.html" %} +{% block rootrellink %} +
  • +
  • Python{{ reldelim1 }}
  • +
  • + {{ shorttitle }}{{ reldelim1 }} +
  • +{% endblock %} +{% block relbar1 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} +{% block relbar2 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} +{% block extrahead %} + + {% if not embedded %}{% endif %} + +{{ super() }} +{% endblock %} +{% block footer %} + +{% endblock %} +{% block sidebarsourcelink %} +{%- if show_source and has_source and sourcename %} +

    {{ _('This Page') }}

    + +{%- endif %} +{% endblock %} diff --git a/tools/templates/opensearch.xml b/tools/templates/opensearch.xml new file mode 100644 --- /dev/null +++ b/tools/templates/opensearch.xml @@ -0,0 +1,4 @@ +{% extends "!opensearch.xml" %} +{% block extra -%} +https://www.python.org/images/favicon16x16.ico +{%- endblock %} -- Repository URL: https://hg.python.org/devguide From lp_benchmark_robot at intel.com Wed Jul 20 06:42:52 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 20 Jul 2016 11:42:52 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-20 Message-ID: <978129e9-479a-45c7-9e12-2a2517f444c7@irsmsx102.ger.corp.intel.com> Results for project Python default, build date 2016-07-20 02:03:04 +0000 commit: 829117ae2e55 previous commit: c10fe99afced revision date: 2016-07-19 21:46:09 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.18% 0.57% 12.04% 13.64% :-| pybench 0.06% 0.08% 1.66% 8.09% :-( regex_v8 2.59% 0.03% -4.02% 5.04% :-| nbody 0.14% 0.01% -1.05% 13.02% :-| json_dump_v2 0.39% 0.49% -1.76% 11.02% :-| normal_startup 0.89% -0.09% -0.57% 5.67% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-20/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Wed Jul 20 06:43:17 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 20 Jul 2016 11:43:17 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-20 Message-ID: Results for project Python 2.7, build date 2016-07-20 05:44:52 +0000 commit: 434fc614c506 previous commit: 6e166b66aa44 revision date: 2016-07-19 21:41:20 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.19% -0.29% 4.88% 3.92% :-) pybench 0.25% 0.10% 5.80% 4.18% :-( regex_v8 0.60% -0.02% -2.29% 11.18% :-) nbody 0.05% 0.04% 8.24% 2.71% :-| json_dump_v2 0.34% 0.50% 1.14% 10.25% :-( normal_startup 1.87% -0.09% -5.81% 1.61% :-) ssbench 0.08% 0.03% 2.40% 1.67% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-20/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Wed Jul 20 18:59:21 2016 From: python-checkins at python.org (victor.stinner) Date: Wed, 20 Jul 2016 22:59:21 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Issue_=2323951=3A_remove_?= =?utf-8?q?devguide=5Ftheme=5Frevised=2Epatch?= Message-ID: <20160720225915.9596.90710.8C2356B1@psf.io> https://hg.python.org/devguide/rev/7d8f988522ed changeset: 819:7d8f988522ed user: Victor Stinner date: Thu Jul 21 00:59:02 2016 +0200 summary: Issue #23951: remove devguide_theme_revised.patch File pushed by mistake. files: devguide_theme_revised.patch | 875 ----------------------- 1 files changed, 0 insertions(+), 875 deletions(-) diff --git a/devguide_theme_revised.patch b/devguide_theme_revised.patch deleted file mode 100644 --- a/devguide_theme_revised.patch +++ /dev/null @@ -1,875 +0,0 @@ -diff -r 128b45caba5b Makefile ---- a/Makefile Sun Jun 26 09:01:18 2016 +0300 -+++ b/Makefile Tue Jul 19 22:05:55 2016 -0700 -@@ -32,6 +32,7 @@ - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" -+ @echo " check to run a check for frequent markup errors" - - clean: - -rm -rf $(BUILDDIR)/* -@@ -128,3 +129,6 @@ - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." -+ -+check: -+ $(PYTHON) tools/rstlint.py -i tools -i venv -diff -r 128b45caba5b conf.py ---- a/conf.py Sun Jun 26 09:01:18 2016 +0300 -+++ b/conf.py Tue Jul 19 22:05:55 2016 -0700 -@@ -20,6 +20,8 @@ - # documentation root, use os.path.abspath to make it absolute, like shown here. - #sys.path.insert(0, os.path.abspath('.')) - -+sys.path.append(os.path.abspath('tools')) -+ - # -- General configuration ----------------------------------------------------- - - # If your documentation needs a minimal Sphinx version, state it here. -@@ -93,22 +95,28 @@ - - # -- Options for HTML output --------------------------------------------------- - --# The theme to use for HTML and HTML Help pages. See the documentation for --# a list of builtin themes. --html_theme = 'nature' -+# Use our custom theme. Previously used builtin 'nature' theme. -+#html_theme = 'nature' -+html_theme = 'pydoctheme' -+html_theme_path = ['tools'] -+html_theme_options = {'collapsiblesidebar': True} - --# Theme options are theme-specific and customize the look and feel of a theme --# further. For a list of options available for each theme, see the --# documentation. --#html_theme_options = {} -- --# Add any paths that contain custom themes here, relative to this directory. --#html_theme_path = [] - - # The name for this set of Sphinx documents. If None, it defaults to - # " v documentation". - html_title = "%s %s" % (project, release) - -+# Path to find HTML templates. -+templates_path = ['tools/templates'] -+ -+# Custom sidebar templates, filenames relative to this file. -+#html_sidebars = { -+# 'index': 'indexsidebar.html', -+#} -+ -+# Additional static files. -+html_static_path = ['tools/static'] -+ - # A shorter title for the navigation bar. Default is the same as html_title. - #html_short_title = None - -diff -r 128b45caba5b make.bat ---- a/make.bat Sun Jun 26 09:01:18 2016 +0300 -+++ b/make.bat Tue Jul 19 22:05:55 2016 -0700 -@@ -12,6 +12,7 @@ - ) - - if "%1" == "" goto help -+if "%1" == "check" goto check - - if "%1" == "help" ( - :help -@@ -31,6 +32,7 @@ - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled -+ echo. check - goto end - ) - -@@ -167,4 +169,17 @@ - goto end - ) - -+if "%1" == "rstlint" ( -+ %SPHINXBUILD% -b rstlint %ALLSPHINXOPTS% %BUILDDIR%/rstlint -+ if errorlevel 1 exit /b 1 -+ echo. -+ echo.Testing of rst and py files in the documentation finished, look at the ^ -+results in %BUILDDIR%/rstlint/output.txt. -+ goto end -+) -+ -+:check -+cmd /C %PYTHON% tools\rstlint.py -i tools -+goto end -+ - :end -diff -r 128b45caba5b tools/pydoctheme/static/pydoctheme.css ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tools/pydoctheme/static/pydoctheme.css Tue Jul 19 22:05:55 2016 -0700 -@@ -0,0 +1,189 @@ -+ at import url("default.css"); -+ -+body { -+ background-color: white; -+ margin-left: 16px; -+ margin-right: 16px; -+} -+ -+div.related { -+ margin-bottom: 1.2em; -+ line-height: 32px; -+ color: #fff; -+ text-shadow: 0px 1px 0 #444; -+ font-size: 0.9em; -+ background-color: #6BA81E; -+} -+ -+div.related a { -+ color: #fff; -+} -+ -+div.related a:hover { -+ color: #0095C4; -+} -+ -+div.related:first-child { -+ border-top: 0; -+ border-bottom: 1px solid #ccc; -+} -+ -+div.sphinxsidebar { -+ background-color: #eeeeee; -+ border-radius: 5px; -+ line-height: 130%; -+ font-size: smaller; -+} -+ -+div.sphinxsidebar h3, div.sphinxsidebar h4 { -+ margin-top: 1.5em; -+} -+ -+div.sphinxsidebarwrapper > h3:first-child { -+ margin-top: 0.2em; -+} -+ -+div.sphinxsidebarwrapper > ul > li > ul > li { -+ margin-bottom: 0.4em; -+} -+ -+div.sphinxsidebar a:hover { -+ color: #0095C4; -+} -+ -+div.sphinxsidebar input { -+ font-family: 'Lucida Grande',Arial,sans-serif; -+ border: 1px solid #999999; -+ font-size: smaller; -+ border-radius: 3px; -+} -+ -+div.sphinxsidebar input[type=text] { -+ max-width: 150px; -+} -+ -+div.body { -+ padding: 0 0 0 1.2em; -+} -+ -+div.body p { -+ line-height: 140%; -+} -+ -+div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { -+ margin: 0; -+ border: 0; -+ padding: 0.3em 0; -+} -+ -+div.body hr { -+ border: 0; -+ background-color: #ccc; -+ height: 1px; -+} -+ -+div.body pre { -+ border-radius: 3px; -+ border: 1px solid #ac9; -+} -+ -+div.body div.admonition, div.body div.impl-detail { -+ border-radius: 3px; -+} -+ -+div.body div.impl-detail > p { -+ margin: 0; -+} -+ -+div.body div.seealso { -+ border: 1px solid #dddd66; -+} -+ -+div.body a { -+ color: #0072aa; -+} -+ -+div.body a:visited { -+ color: #6363bb; -+} -+ -+div.body a:hover { -+ color: #00B0E4; -+} -+ -+tt, code, pre { -+ font-family: monospace, sans-serif; -+ font-size: 96.5%; -+} -+ -+div.body tt, div.body code { -+ border-radius: 3px; -+} -+ -+div.body tt.descname, div.body code.descname { -+ font-size: 120%; -+} -+ -+div.body tt.xref, div.body a tt, div.body code.xref, div.body a code { -+ font-weight: normal; -+} -+ -+.deprecated { -+ border-radius: 3px; -+} -+ -+table.docutils { -+ border: 1px solid #ddd; -+ min-width: 20%; -+ border-radius: 3px; -+ margin-top: 10px; -+ margin-bottom: 10px; -+} -+ -+table.docutils td, table.docutils th { -+ border: 1px solid #ddd !important; -+ border-radius: 3px; -+} -+ -+table p, table li { -+ text-align: left !important; -+} -+ -+table.docutils th { -+ background-color: #eee; -+ padding: 0.3em 0.5em; -+} -+ -+table.docutils td { -+ background-color: white; -+ padding: 0.3em 0.5em; -+} -+ -+table.footnote, table.footnote td { -+ border: 0 !important; -+} -+ -+div.footer { -+ line-height: 150%; -+ margin-top: -2em; -+ text-align: right; -+ width: auto; -+ margin-right: 10px; -+} -+ -+div.footer a:hover { -+ color: #0095C4; -+} -+ -+.refcount { -+ color: #060; -+} -+ -+.stableabi { -+ color: #229; -+} -+ -+.highlight { -+ background: none !important; -+} -+ -diff -r 128b45caba5b tools/pydoctheme/theme.conf ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tools/pydoctheme/theme.conf Tue Jul 19 22:05:55 2016 -0700 -@@ -0,0 +1,23 @@ -+[theme] -+inherit = default -+stylesheet = pydoctheme.css -+pygments_style = sphinx -+ -+[options] -+bodyfont = 'Lucida Grande', Arial, sans-serif -+headfont = 'Lucida Grande', Arial, sans-serif -+footerbgcolor = white -+footertextcolor = #555555 -+relbarbgcolor = white -+relbartextcolor = #666666 -+relbarlinkcolor = #444444 -+sidebarbgcolor = white -+sidebartextcolor = #444444 -+sidebarlinkcolor = #444444 -+bgcolor = white -+textcolor = #222222 -+linkcolor = #0090c0 -+visitedlinkcolor = #00608f -+headtextcolor = #1a1a1a -+headbgcolor = white -+headlinkcolor = #aaaaaa -diff -r 128b45caba5b tools/rstlint.py ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tools/rstlint.py Tue Jul 19 22:05:55 2016 -0700 -@@ -0,0 +1,230 @@ -+#!/usr/bin/env python3 -+# -*- coding: utf-8 -*- -+ -+# Check for stylistic and formal issues in .rst and .py -+# files included in the documentation. -+# -+# 01/2009, Georg Brandl -+ -+# TODO: - wrong versions in versionadded/changed -+# - wrong markup after versionchanged directive -+ -+from __future__ import with_statement -+ -+import os -+import re -+import sys -+import getopt -+from os.path import join, splitext, abspath, exists -+from collections import defaultdict -+ -+directives = [ -+ # standard docutils ones -+ 'admonition', 'attention', 'caution', 'class', 'compound', 'container', -+ 'contents', 'csv-table', 'danger', 'date', 'default-role', 'epigraph', -+ 'error', 'figure', 'footer', 'header', 'highlights', 'hint', 'image', -+ 'important', 'include', 'line-block', 'list-table', 'meta', 'note', -+ 'parsed-literal', 'pull-quote', 'raw', 'replace', -+ 'restructuredtext-test-directive', 'role', 'rubric', 'sectnum', 'sidebar', -+ 'table', 'target-notes', 'tip', 'title', 'topic', 'unicode', 'warning', -+ # Sphinx and Python docs custom ones -+ 'acks', 'attribute', 'autoattribute', 'autoclass', 'autodata', -+ 'autoexception', 'autofunction', 'automethod', 'automodule', 'centered', -+ 'cfunction', 'class', 'classmethod', 'cmacro', 'cmdoption', 'cmember', -+ 'code-block', 'confval', 'cssclass', 'ctype', 'currentmodule', 'cvar', -+ 'data', 'decorator', 'decoratormethod', 'deprecated-removed', -+ 'deprecated(?!-removed)', 'describe', 'directive', 'doctest', 'envvar', -+ 'event', 'exception', 'function', 'glossary', 'highlight', 'highlightlang', -+ 'impl-detail', 'index', 'literalinclude', 'method', 'miscnews', 'module', -+ 'moduleauthor', 'opcode', 'pdbcommand', 'productionlist', -+ 'program', 'role', 'sectionauthor', 'seealso', 'sourcecode', 'staticmethod', -+ 'tabularcolumns', 'testcode', 'testoutput', 'testsetup', 'toctree', 'todo', -+ 'todolist', 'versionadded', 'versionchanged' -+] -+ -+all_directives = '(' + '|'.join(directives) + ')' -+seems_directive_re = re.compile(r'(? 81: -+ # don't complain about tables, links and function signatures -+ if line.lstrip()[0] not in '+|' and \ -+ 'http://' not in line and \ -+ not line.lstrip().startswith(('.. function', -+ '.. method', -+ '.. cfunction')): -+ yield lno+1, "line too long" -+ -+ -+ at checker('.html', severity=2, falsepositives=True) -+def check_leaked_markup(fn, lines): -+ """Check HTML files for leaked reST markup; this only works if -+ the HTML files have been built. -+ """ -+ for lno, line in enumerate(lines): -+ if leaked_markup_re.search(line): -+ yield lno+1, 'possibly leaked markup: %r' % line -+ -+ -+def main(argv): -+ usage = '''\ -+Usage: %s [-v] [-f] [-s sev] [-i path]* [path] -+ -+Options: -v verbose (print all checked file names) -+ -f enable checkers that yield many false positives -+ -s sev only show problems with severity >= sev -+ -i path ignore subdir or file path -+'''% argv[0] -+ try: -+ gopts, args = getopt.getopt(argv[1:], 'vfs:i:') -+ except getopt.GetoptError: -+ print(usage) -+ return 2 -+ -+ verbose = False -+ severity = 1 -+ ignore = [] -+ falsepos = False -+ for opt, val in gopts: -+ if opt == '-v': -+ verbose = True -+ elif opt == '-f': -+ falsepos = True -+ elif opt == '-s': -+ severity = int(val) -+ elif opt == '-i': -+ ignore.append(abspath(val)) -+ -+ if len(args) == 0: -+ path = '.' -+ elif len(args) == 1: -+ path = args[0] -+ else: -+ print(usage) -+ return 2 -+ -+ if not exists(path): -+ print('Error: path %s does not exist' % path) -+ return 2 -+ -+ count = defaultdict(int) -+ -+ for root, dirs, files in os.walk(path): -+ # ignore subdirs in ignore list -+ if abspath(root) in ignore: -+ del dirs[:] -+ continue -+ -+ for fn in files: -+ fn = join(root, fn) -+ if fn[:2] == './': -+ fn = fn[2:] -+ -+ # ignore files in ignore list -+ if abspath(fn) in ignore: -+ continue -+ -+ ext = splitext(fn)[1] -+ checkerlist = checkers.get(ext, None) -+ if not checkerlist: -+ continue -+ -+ if verbose: -+ print('Checking %s...' % fn) -+ -+ try: -+ with open(fn, 'r', encoding='utf-8') as f: -+ lines = list(f) -+ except (IOError, OSError) as err: -+ print('%s: cannot open: %s' % (fn, err)) -+ count[4] += 1 -+ continue -+ -+ for checker in checkerlist: -+ if checker.falsepositives and not falsepos: -+ continue -+ csev = checker.severity -+ if csev >= severity: -+ for lno, msg in checker(fn, lines): -+ print('[%d] %s:%d: %s' % (csev, fn, lno, msg)) -+ count[csev] += 1 -+ if verbose: -+ print() -+ if not count: -+ if severity > 1: -+ print('No problems with severity >= %d found.' % severity) -+ else: -+ print('No problems found.') -+ else: -+ for severity in sorted(count): -+ number = count[severity] -+ print('%d problem%s with severity %d found.' % -+ (number, number > 1 and 's' or '', severity)) -+ return int(bool(count)) -+ -+ -+if __name__ == '__main__': -+ sys.exit(main(sys.argv)) -diff -r 128b45caba5b tools/static/copybutton.js ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tools/static/copybutton.js Tue Jul 19 22:05:55 2016 -0700 -@@ -0,0 +1,62 @@ -+$(document).ready(function() { -+ /* Add a [>>>] button on the top-right corner of code samples to hide -+ * the >>> and ... prompts and the output and thus make the code -+ * copyable. */ -+ var div = $('.highlight-python .highlight,' + -+ '.highlight-python3 .highlight') -+ var pre = div.find('pre'); -+ -+ // get the styles from the current theme -+ pre.parent().parent().css('position', 'relative'); -+ var hide_text = 'Hide the prompts and output'; -+ var show_text = 'Show the prompts and output'; -+ var border_width = pre.css('border-top-width'); -+ var border_style = pre.css('border-top-style'); -+ var border_color = pre.css('border-top-color'); -+ var button_styles = { -+ 'cursor':'pointer', 'position': 'absolute', 'top': '0', 'right': '0', -+ 'border-color': border_color, 'border-style': border_style, -+ 'border-width': border_width, 'color': border_color, 'text-size': '75%', -+ 'font-family': 'monospace', 'padding-left': '0.2em', 'padding-right': '0.2em', -+ 'border-radius': '0 3px 0 0' -+ } -+ -+ // create and add the button to all the code blocks that contain >>> -+ div.each(function(index) { -+ var jthis = $(this); -+ if (jthis.find('.gp').length > 0) { -+ var button = $('>>>'); -+ button.css(button_styles) -+ button.attr('title', hide_text); -+ button.data('hidden', 'false'); -+ jthis.prepend(button); -+ } -+ // tracebacks (.gt) contain bare text elements that need to be -+ // wrapped in a span to work with .nextUntil() (see later) -+ jthis.find('pre:has(.gt)').contents().filter(function() { -+ return ((this.nodeType == 3) && (this.data.trim().length > 0)); -+ }).wrap(''); -+ }); -+ -+ // define the behavior of the button when it's clicked -+ $('.copybutton').click(function(e){ -+ e.preventDefault(); -+ var button = $(this); -+ if (button.data('hidden') === 'false') { -+ // hide the code output -+ button.parent().find('.go, .gp, .gt').hide(); -+ button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'hidden'); -+ button.css('text-decoration', 'line-through'); -+ button.attr('title', show_text); -+ button.data('hidden', 'true'); -+ } else { -+ // show the code output -+ button.parent().find('.go, .gp, .gt').show(); -+ button.next('pre').find('.gt').nextUntil('.gp, .go').css('visibility', 'visible'); -+ button.css('text-decoration', 'none'); -+ button.attr('title', hide_text); -+ button.data('hidden', 'false'); -+ } -+ }); -+}); -+ -diff -r 128b45caba5b tools/static/py.png -Binary file tools/static/py.png has changed -diff -r 128b45caba5b tools/static/sidebar.js ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tools/static/sidebar.js Tue Jul 19 22:05:55 2016 -0700 -@@ -0,0 +1,193 @@ -+/* -+ * sidebar.js -+ * ~~~~~~~~~~ -+ * -+ * This script makes the Sphinx sidebar collapsible and implements intelligent -+ * scrolling. -+ * -+ * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds in -+ * .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton used to -+ * collapse and expand the sidebar. -+ * -+ * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden and the -+ * width of the sidebar and the margin-left of the document are decreased. -+ * When the sidebar is expanded the opposite happens. This script saves a -+ * per-browser/per-session cookie used to remember the position of the sidebar -+ * among the pages. Once the browser is closed the cookie is deleted and the -+ * position reset to the default (expanded). -+ * -+ * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. -+ * :license: BSD, see LICENSE for details. -+ * -+ */ -+ -+$(function() { -+ // global elements used by the functions. -+ // the 'sidebarbutton' element is defined as global after its -+ // creation, in the add_sidebar_button function -+ var jwindow = $(window); -+ var jdocument = $(document); -+ var bodywrapper = $('.bodywrapper'); -+ var sidebar = $('.sphinxsidebar'); -+ var sidebarwrapper = $('.sphinxsidebarwrapper'); -+ -+ // original margin-left of the bodywrapper and width of the sidebar -+ // with the sidebar expanded -+ var bw_margin_expanded = bodywrapper.css('margin-left'); -+ var ssb_width_expanded = sidebar.width(); -+ -+ // margin-left of the bodywrapper and width of the sidebar -+ // with the sidebar collapsed -+ var bw_margin_collapsed = '.8em'; -+ var ssb_width_collapsed = '.8em'; -+ -+ // colors used by the current theme -+ var dark_color = '#AAAAAA'; -+ var light_color = '#CCCCCC'; -+ -+ function get_viewport_height() { -+ if (window.innerHeight) -+ return window.innerHeight; -+ else -+ return jwindow.height(); -+ } -+ -+ function sidebar_is_collapsed() { -+ return sidebarwrapper.is(':not(:visible)'); -+ } -+ -+ function toggle_sidebar() { -+ if (sidebar_is_collapsed()) -+ expand_sidebar(); -+ else -+ collapse_sidebar(); -+ // adjust the scrolling of the sidebar -+ scroll_sidebar(); -+ } -+ -+ function collapse_sidebar() { -+ sidebarwrapper.hide(); -+ sidebar.css('width', ssb_width_collapsed); -+ bodywrapper.css('margin-left', bw_margin_collapsed); -+ sidebarbutton.css({ -+ 'margin-left': '0', -+ 'height': bodywrapper.height(), -+ 'border-radius': '5px' -+ }); -+ sidebarbutton.find('span').text('?'); -+ sidebarbutton.attr('title', _('Expand sidebar')); -+ document.cookie = 'sidebar=collapsed'; -+ } -+ -+ function expand_sidebar() { -+ bodywrapper.css('margin-left', bw_margin_expanded); -+ sidebar.css('width', ssb_width_expanded); -+ sidebarwrapper.show(); -+ sidebarbutton.css({ -+ 'margin-left': ssb_width_expanded-12, -+ 'height': bodywrapper.height(), -+ 'border-radius': '0 5px 5px 0' -+ }); -+ sidebarbutton.find('span').text('?'); -+ sidebarbutton.attr('title', _('Collapse sidebar')); -+ //sidebarwrapper.css({'padding-top': -+ // Math.max(window.pageYOffset - sidebarwrapper.offset().top, 10)}); -+ document.cookie = 'sidebar=expanded'; -+ } -+ -+ function add_sidebar_button() { -+ sidebarwrapper.css({ -+ 'float': 'left', -+ 'margin-right': '0', -+ 'width': ssb_width_expanded - 28 -+ }); -+ // create the button -+ sidebar.append( -+ '
    «
    ' -+ ); -+ var sidebarbutton = $('#sidebarbutton'); -+ // find the height of the viewport to center the '<<' in the page -+ var viewport_height = get_viewport_height(); -+ var sidebar_offset = sidebar.offset().top; -+ var sidebar_height = Math.max(bodywrapper.height(), sidebar.height()); -+ sidebarbutton.find('span').css({ -+ 'display': 'block', -+ 'position': 'fixed', -+ 'top': Math.min(viewport_height/2, sidebar_height/2 + sidebar_offset) - 10 -+ }); -+ -+ sidebarbutton.click(toggle_sidebar); -+ sidebarbutton.attr('title', _('Collapse sidebar')); -+ sidebarbutton.css({ -+ 'border-radius': '0 5px 5px 0', -+ 'color': '#444444', -+ 'background-color': '#CCCCCC', -+ 'font-size': '1.2em', -+ 'cursor': 'pointer', -+ 'height': sidebar_height, -+ 'padding-top': '1px', -+ 'padding-left': '1px', -+ 'margin-left': ssb_width_expanded - 12 -+ }); -+ -+ sidebarbutton.hover( -+ function () { -+ $(this).css('background-color', dark_color); -+ }, -+ function () { -+ $(this).css('background-color', light_color); -+ } -+ ); -+ } -+ -+ function set_position_from_cookie() { -+ if (!document.cookie) -+ return; -+ var items = document.cookie.split(';'); -+ for(var k=0; k wintop && curbot > winbot) { -+ sidebarwrapper.css('top', $u.max([wintop - offset - 10, 0])); -+ } -+ else if (curtop < wintop && curbot < winbot) { -+ sidebarwrapper.css('top', $u.min([winbot - sidebar_height - offset - 20, -+ jdocument.height() - sidebar_height - 200])); -+ } -+ } -+ } -+ jwindow.scroll(scroll_sidebar); -+}); -diff -r 128b45caba5b tools/templates/layout.html ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tools/templates/layout.html Tue Jul 19 22:05:55 2016 -0700 -@@ -0,0 +1,38 @@ -+{% extends "!layout.html" %} -+{% block rootrellink %} -+
  • -+
  • Python{{ reldelim1 }}
  • -+
  • -+ {{ shorttitle }}{{ reldelim1 }} -+
  • -+{% endblock %} -+{% block relbar1 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} -+{% block relbar2 %} {% if builder != 'qthelp' %} {{ relbar() }} {% endif %} {% endblock %} -+{% block extrahead %} -+ -+ {% if not embedded %}{% endif %} -+ -+{{ super() }} -+{% endblock %} -+{% block footer %} -+ -+{% endblock %} -+{% block sidebarsourcelink %} -+{%- if show_source and has_source and sourcename %} -+

    {{ _('This Page') }}

    -+ -+{%- endif %} -+{% endblock %} -diff -r 128b45caba5b tools/templates/opensearch.xml ---- /dev/null Thu Jan 01 00:00:00 1970 +0000 -+++ b/tools/templates/opensearch.xml Tue Jul 19 22:05:55 2016 -0700 -@@ -0,0 +1,4 @@ -+{% extends "!opensearch.xml" %} -+{% block extra -%} -+https://www.python.org/images/favicon16x16.ico -+{%- endblock %} -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Thu Jul 21 11:36:17 2016 From: python-checkins at python.org (zach.ware) Date: Thu, 21 Jul 2016 15:36:17 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Issue_=2323951=3A_Add_mis?= =?utf-8?q?sing_icon?= Message-ID: <20160721153617.6924.81036.388F8EE0@psf.io> https://hg.python.org/devguide/rev/5a19fbb8501f changeset: 820:5a19fbb8501f user: Zachary Ware date: Thu Jul 21 10:25:09 2016 -0500 summary: Issue #23951: Add missing icon files: tools/static/py.png | Bin 1 files changed, 0 insertions(+), 0 deletions(-) diff --git a/tools/static/py.png b/tools/static/py.png new file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..93e4a02c3d321c545898a2ebb8873c26dd8a9e5b GIT binary patch [stripped] -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Thu Jul 21 11:36:17 2016 From: python-checkins at python.org (zach.ware) Date: Thu, 21 Jul 2016 15:36:17 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Issue_=2323951=3A_Clean_u?= =?utf-8?q?p_rstlint_makefile_integration?= Message-ID: <20160721153617.24257.25746.1A371E67@psf.io> https://hg.python.org/devguide/rev/0f642c1ba901 changeset: 821:0f642c1ba901 user: Zachary Ware date: Thu Jul 21 10:35:23 2016 -0500 summary: Issue #23951: Clean up rstlint makefile integration files: Makefile | 4 +++- make.bat | 14 ++++---------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile --- a/Makefile +++ b/Makefile @@ -2,6 +2,7 @@ # # You can set these variables from the command line. +PYTHON = python3 SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = @@ -12,7 +13,8 @@ PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp \ + devhelp epub latex latexpdf text man changes linkcheck doctest check help: @echo "Please use \`make ' where is one of" diff --git a/make.bat b/make.bat --- a/make.bat +++ b/make.bat @@ -2,6 +2,9 @@ REM Command file for Sphinx documentation +if "%PYTHON%" == "" ( + set PYTHON=py -3 +) if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) @@ -169,17 +172,8 @@ goto end ) -if "%1" == "rstlint" ( - %SPHINXBUILD% -b rstlint %ALLSPHINXOPTS% %BUILDDIR%/rstlint - if errorlevel 1 exit /b 1 - echo. - echo.Testing of rst and py files in the documentation finished, look at the ^ -results in %BUILDDIR%/rstlint/output.txt. - goto end -) - :check -cmd /C %PYTHON% tools\rstlint.py -i tools +cmd /C %PYTHON% tools\rstlint.py -i tools -i venv goto end :end -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Thu Jul 21 11:42:34 2016 From: python-checkins at python.org (zach.ware) Date: Thu, 21 Jul 2016 15:42:34 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Fix_issues_found_by_rstli?= =?utf-8?b?bnQu?= Message-ID: <20160721154233.49570.23041.5E1AF409@psf.io> https://hg.python.org/devguide/rev/7c3578c3bd26 changeset: 822:7c3578c3bd26 user: Zachary Ware date: Thu Jul 21 10:42:23 2016 -0500 summary: Fix issues found by rstlint. files: clang.rst | 8 ++++---- committing.rst | 4 ++-- documenting.rst | 2 +- gdb.rst | 2 +- setup.rst | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/clang.rst b/clang.rst --- a/clang.rst +++ b/clang.rst @@ -67,7 +67,7 @@ wget http://llvm.org/releases/3.4/llvm-3.4.src.tar.gz wget http://llvm.org/releases/3.4/clang-3.4.src.tar.gz wget http://llvm.org/releases/3.4/compiler-rt-3.4.src.tar.gz - + # LLVM tar xvf llvm-3.4.src.tar.gz cd llvm-3.4/tools @@ -216,7 +216,7 @@ 'union _gc_head'), which requires 16 byte alignment 0x2b76be018078: note: pointer points here 00 00 00 00 40 53 5a b6 76 2b 00 00 60 52 5a b6 ... - ^ + ^ ... If you are using the address sanitizer, its important to pipe the output through @@ -228,7 +228,7 @@ /usr/local/bin/clang -fsanitize=address -Xlinker -export-dynamic -o python Modules/python.o libpython3.3m.a -ldl -lutil - /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a -lm + /usr/local/ssl/lib/libssl.a /usr/local/ssl/lib/libcrypto.a -lm ./python -E -S -m sysconfig --generate-posix-vars ================================================================= ==24064==ERROR: AddressSanitizer: heap-buffer-overflow on address @@ -267,7 +267,7 @@ 0x0c327fff8850: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 - Partially addressable: 01 02 03 04 05 06 07 + Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Heap right redzone: fb Freed heap region: fd diff --git a/committing.rst b/committing.rst --- a/committing.rst +++ b/committing.rst @@ -407,9 +407,9 @@ $ hg pull $ hg up $ hg import --no-c http://bugs.python.org/url/to/the/patch.diff - $ # review, run tests, run `make patchcheck` + $ # review, run tests, run 'make patchcheck' $ hg ci -m '#12345: fix some issue.' - $ # switch to 3.5 and port the changeset using `hg graft` + $ # switch to 3.5 and port the changeset using 'hg graft' $ cd ../3.5 $ hg up $ hg graft 2.7 diff --git a/documenting.rst b/documenting.rst --- a/documenting.rst +++ b/documenting.rst @@ -1442,7 +1442,7 @@ .. rubric:: Footnotes -.. [1] There is a standard ``.. include`` directive, but it raises errors if the +.. [1] There is a standard ``include`` directive, but it raises errors if the file is not found. This one only emits a warning. diff --git a/gdb.rst b/gdb.rst --- a/gdb.rst +++ b/gdb.rst @@ -238,7 +238,7 @@ main() (gdb) frame 68 #68 0x00000000004cd1e6 in PyEval_EvalFrameEx (f=Frame 0xaa4560, for file Lib/test/regrtest.py, line 1548, in (), throwflag=0) at Python/ceval.c:2665 - 2665 x = call_function(&sp, oparg); + 2665 x = call_function(&sp, oparg); (gdb) py-list 1543 # Run the tests in a context manager that temporary changes the CWD to a 1544 # temporary and writable directory. If it's not possible to create or diff --git a/setup.rst b/setup.rst --- a/setup.rst +++ b/setup.rst @@ -164,7 +164,7 @@ LDFLAGS="-L$(brew --prefix openssl)/lib" \ ./configure --with-pydebug -or MacPorts:: +or MacPorts:: $ sudo port install openssl xz $ CPPFLAGS="-I/opt/local/include" \ -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Fri Jul 22 02:04:57 2016 From: python-checkins at python.org (nick.coghlan) Date: Fri, 22 Jul 2016 06:04:57 +0000 Subject: [Python-checkins] =?utf-8?q?devguide=3A_Update_my_PSF_affiliation?= =?utf-8?q?s?= Message-ID: <20160722060456.40286.6006.5159A62B@psf.io> https://hg.python.org/devguide/rev/a44a0b2eeafe changeset: 823:a44a0b2eeafe user: Nick Coghlan date: Fri Jul 22 16:04:45 2016 +1000 summary: Update my PSF affiliations files: motivations.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/motivations.rst b/motivations.rst --- a/motivations.rst +++ b/motivations.rst @@ -104,7 +104,7 @@ * Personal site: `Curious Efficiency `_ * `Extended bio `__ * Red Hat (Software Engineer, Developer Experience) - * Python Software Foundation (Board of Directors) + * Python Software Foundation (Fellow, Packaging Working Group) Nick originally began participating in CPython core development as an interesting and enlightening hobby activity while working for Boeing Defence -- Repository URL: https://hg.python.org/devguide From python-checkins at python.org Fri Jul 22 06:36:39 2016 From: python-checkins at python.org (xavier.degaye) Date: Fri, 22 Jul 2016 10:36:39 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327472=3A_Add_test?= =?utf-8?q?=2Esupport=2Eunix=5Fshell_as_the_path_to_the_default_shell=2E?= Message-ID: <20160722103639.10745.36128.CB2AE9AB@psf.io> https://hg.python.org/cpython/rev/15835311b5e6 changeset: 102412:15835311b5e6 user: Xavier de Gaye date: Fri Jul 22 12:15:29 2016 +0200 summary: Issue #27472: Add test.support.unix_shell as the path to the default shell. files: Lib/distutils/tests/test_spawn.py | 11 ++++++----- Lib/test/support/__init__.py | 7 ++++++- Lib/test/test_os.py | 13 ++++++++----- Lib/test/test_subprocess.py | 4 ++-- Misc/NEWS | 2 ++ 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/Lib/distutils/tests/test_spawn.py b/Lib/distutils/tests/test_spawn.py --- a/Lib/distutils/tests/test_spawn.py +++ b/Lib/distutils/tests/test_spawn.py @@ -1,7 +1,8 @@ """Tests for distutils.spawn.""" import unittest +import sys import os -from test.support import run_unittest +from test.support import run_unittest, unix_shell from distutils.spawn import _nt_quote_args from distutils.spawn import spawn @@ -29,9 +30,9 @@ # creating something executable # through the shell that returns 1 - if os.name == 'posix': + if sys.platform != 'win32': exe = os.path.join(tmpdir, 'foo.sh') - self.write_file(exe, '#!/bin/sh\nexit 1') + self.write_file(exe, '#!%s\nexit 1' % unix_shell) else: exe = os.path.join(tmpdir, 'foo.bat') self.write_file(exe, 'exit 1') @@ -40,9 +41,9 @@ self.assertRaises(DistutilsExecError, spawn, [exe]) # now something that works - if os.name == 'posix': + if sys.platform != 'win32': exe = os.path.join(tmpdir, 'foo.sh') - self.write_file(exe, '#!/bin/sh\nexit 0') + self.write_file(exe, '#!%s\nexit 0' % unix_shell) else: exe = os.path.join(tmpdir, 'foo.bat') self.write_file(exe, 'exit 0') diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -92,7 +92,7 @@ "anticipate_failure", "load_package_tests", "detect_api_mismatch", "check__all__", # sys - "is_jython", "is_android", "check_impl_detail", + "is_jython", "is_android", "check_impl_detail", "unix_shell", # network "HOST", "IPV6_ENABLED", "find_unused_port", "bind_port", "open_urlresource", # processes @@ -736,6 +736,11 @@ is_android = bool(sysconfig.get_config_var('ANDROID_API_LEVEL')) +if sys.platform != 'win32': + unix_shell = '/system/bin/sh' if is_android else '/bin/sh' +else: + unix_shell = None + # Filename used for testing if os.name == 'java': # Jython disallows @ in module names diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -64,6 +64,7 @@ INT_MAX = PY_SSIZE_T_MAX = sys.maxsize from test.support.script_helper import assert_python_ok +from test.support import unix_shell root_in_posix = False @@ -670,18 +671,20 @@ return os.environ # Bug 1110478 - @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') + @unittest.skipUnless(unix_shell and os.path.exists(unix_shell), + 'requires a shell') def test_update2(self): os.environ.clear() os.environ.update(HELLO="World") - with os.popen("/bin/sh -c 'echo $HELLO'") as popen: + with os.popen("%s -c 'echo $HELLO'" % unix_shell) as popen: value = popen.read().strip() self.assertEqual(value, "World") - @unittest.skipUnless(os.path.exists('/bin/sh'), 'requires /bin/sh') + @unittest.skipUnless(unix_shell and os.path.exists(unix_shell), + 'requires a shell') def test_os_popen_iter(self): - with os.popen( - "/bin/sh -c 'echo \"line1\nline2\nline3\"'") as popen: + with os.popen("%s -c 'echo \"line1\nline2\nline3\"'" + % unix_shell) as popen: it = iter(popen) self.assertEqual(next(it), "line1\n") self.assertEqual(next(it), "line2\n") diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -1579,7 +1579,7 @@ fd, fname = tempfile.mkstemp() # reopen in text mode with open(fd, "w", errors="surrogateescape") as fobj: - fobj.write("#!/bin/sh\n") + fobj.write("#!%s\n" % support.unix_shell) fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" % sys.executable) os.chmod(fname, 0o700) @@ -1624,7 +1624,7 @@ fd, fname = tempfile.mkstemp() # reopen in text mode with open(fd, "w", errors="surrogateescape") as fobj: - fobj.write("#!/bin/sh\n") + fobj.write("#!%s\n" % support.unix_shell) fobj.write("exec '%s' -c 'import sys; sys.exit(47)'\n" % sys.executable) os.chmod(fname, 0o700) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -46,6 +46,8 @@ Tests ----- +- Issue #27472: Add test.support.unix_shell as the path to the default shell. + - Issue #27369: In test_pyexpat, avoid testing an error message detail that changed in Expat 2.2.0. -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Fri Jul 22 07:03:26 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 22 Jul 2016 12:03:26 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-22 Message-ID: No new revisions. Here are the previous results: Results for project Python default, build date 2016-07-22 02:03:29 +0000 commit: 829117ae2e55 previous commit: c10fe99afced revision date: 2016-07-19 21:46:09 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.18% 0.57% 12.04% 13.64% :-| pybench 0.06% 0.08% 1.66% 8.09% :-( regex_v8 2.59% 0.03% -4.02% 5.04% :-| nbody 0.14% 0.01% -1.05% 13.02% :-| json_dump_v2 0.39% 0.49% -1.76% 11.02% :-| normal_startup 0.89% -0.09% -0.57% 5.67% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-22/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Fri Jul 22 07:04:08 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 22 Jul 2016 12:04:08 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-22 Message-ID: No new revisions. Here are the previous results: Results for project Python 2.7, build date 2016-07-22 02:05:39 +0000 commit: 434fc614c506 previous commit: 6e166b66aa44 revision date: 2016-07-19 21:41:20 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.19% -0.29% 4.88% 3.92% :-) pybench 0.25% 0.10% 5.80% 4.18% :-( regex_v8 0.60% -0.02% -2.29% 11.18% :-) nbody 0.05% 0.04% 8.24% 2.71% :-| json_dump_v2 0.34% 0.50% 1.14% 10.25% :-( normal_startup 1.87% -0.09% -5.81% 1.61% :-) ssbench 0.08% 0.03% 2.40% 1.67% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-22/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Fri Jul 22 11:28:41 2016 From: python-checkins at python.org (vinay.sajip) Date: Fri, 22 Jul 2016 15:28:41 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Closes_=2326559=3A_Allow_c?= =?utf-8?q?onfiguring_flush-on-close_behaviour_of_MemoryHandler=2E?= Message-ID: <20160722152840.21454.25813.6C39EC12@psf.io> https://hg.python.org/cpython/rev/a399daacb591 changeset: 102413:a399daacb591 user: Vinay Sajip date: Fri Jul 22 16:27:31 2016 +0100 summary: Closes #26559: Allow configuring flush-on-close behaviour of MemoryHandler. files: Doc/library/logging.handlers.rst | 10 +++++- Lib/logging/handlers.py | 20 +++++++++--- Lib/test/test_logging.py | 32 +++++++++++++++++++- 3 files changed, 54 insertions(+), 8 deletions(-) diff --git a/Doc/library/logging.handlers.rst b/Doc/library/logging.handlers.rst --- a/Doc/library/logging.handlers.rst +++ b/Doc/library/logging.handlers.rst @@ -806,12 +806,18 @@ overridden to implement custom flushing strategies. -.. class:: MemoryHandler(capacity, flushLevel=ERROR, target=None) +.. class:: MemoryHandler(capacity, flushLevel=ERROR, target=None, flushOnClose=True) Returns a new instance of the :class:`MemoryHandler` class. The instance is initialized with a buffer size of *capacity*. If *flushLevel* is not specified, :const:`ERROR` is used. If no *target* is specified, the target will need to be - set using :meth:`setTarget` before this handler does anything useful. + set using :meth:`setTarget` before this handler does anything useful. If + *flushOnClose* is specified as ``False``, then the buffer is *not* flushed when + the handler is closed. If not specified or specified as ``True``, the previous + behaviour of flushing the buffer will occur when the handler is closed. + + .. versionchanged:: 3.6 + The *flushOnClose* parameter was added. .. method:: close() diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -1,4 +1,4 @@ -# Copyright 2001-2015 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -18,7 +18,7 @@ Additional handlers for the logging package for Python. The core package is based on PEP 282 and comments thereto in comp.lang.python. -Copyright (C) 2001-2015 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved. To use, simply 'import logging.handlers' and log away! """ @@ -1238,17 +1238,25 @@ flushing them to a target handler. Flushing occurs whenever the buffer is full, or when an event of a certain severity or greater is seen. """ - def __init__(self, capacity, flushLevel=logging.ERROR, target=None): + def __init__(self, capacity, flushLevel=logging.ERROR, target=None, + flushOnClose=True): """ Initialize the handler with the buffer size, the level at which flushing should occur and an optional target. Note that without a target being set either here or via setTarget(), a MemoryHandler is no use to anyone! + + The ``flushOnClose`` argument is ``True`` for backward compatibility + reasons - the old behaviour is that when the handler is closed, the + buffer is flushed, even if the flush level hasn't been exceeded nor the + capacity exceeded. To prevent this, set ``flushOnClose`` to ``False``. """ BufferingHandler.__init__(self, capacity) self.flushLevel = flushLevel self.target = target + # See Issue #26559 for why this has been added + self.flushOnClose = flushOnClose def shouldFlush(self, record): """ @@ -1282,10 +1290,12 @@ def close(self): """ - Flush, set the target to None and lose the buffer. + Flush, if appropriately configured, set the target to None and lose the + buffer. """ try: - self.flush() + if self.flushOnClose: + self.flush() finally: self.acquire() try: diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -958,7 +958,7 @@ def setUp(self): BaseTest.setUp(self) self.mem_hdlr = logging.handlers.MemoryHandler(10, logging.WARNING, - self.root_hdlr) + self.root_hdlr) self.mem_logger = logging.getLogger('mem') self.mem_logger.propagate = 0 self.mem_logger.addHandler(self.mem_hdlr) @@ -995,6 +995,36 @@ self.mem_logger.debug(self.next_message()) self.assert_log_lines(lines) + def test_flush_on_close(self): + """ + Test that the flush-on-close configuration works as expected. + """ + self.mem_logger.debug(self.next_message()) + self.assert_log_lines([]) + self.mem_logger.info(self.next_message()) + self.assert_log_lines([]) + self.mem_logger.removeHandler(self.mem_hdlr) + # Default behaviour is to flush on close. Check that it happens. + self.mem_hdlr.close() + lines = [ + ('DEBUG', '1'), + ('INFO', '2'), + ] + self.assert_log_lines(lines) + # Now configure for flushing not to be done on close. + self.mem_hdlr = logging.handlers.MemoryHandler(10, logging.WARNING, + self.root_hdlr, + False) + self.mem_logger.addHandler(self.mem_hdlr) + self.mem_logger.debug(self.next_message()) + self.assert_log_lines(lines) # no change + self.mem_logger.info(self.next_message()) + self.assert_log_lines(lines) # no change + self.mem_logger.removeHandler(self.mem_hdlr) + self.mem_hdlr.close() + # assert that no new lines have been added + self.assert_log_lines(lines) # no change + class ExceptionFormatter(logging.Formatter): """A special exception formatter.""" -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 22 11:33:30 2016 From: python-checkins at python.org (victor.stinner) Date: Fri, 22 Jul 2016 15:33:30 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogc29ja2V0OiBGaXgg?= =?utf-8?q?internal=5Fselect=28=29?= Message-ID: <20160722153330.58665.19475.5F269915@psf.io> https://hg.python.org/cpython/rev/6c11f52ab9db changeset: 102414:6c11f52ab9db branch: 3.5 parent: 102410:0fe2b7509707 user: Victor Stinner date: Fri Jul 22 17:26:53 2016 +0200 summary: socket: Fix internal_select() Bug found by Pavel Belikov ("Fragment N1"): http://www.viva64.com/en/b/0414/#ID0ECDAE files: Modules/socketmodule.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -648,7 +648,7 @@ assert(!(connect && !writing)); /* Guard against closed socket */ - if (s->sock_fd < 0) + if (s->sock_fd == INVALID_SOCKET) return 0; /* Prefer poll, if available, since you can poll() any fd -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 22 11:33:31 2016 From: python-checkins at python.org (victor.stinner) Date: Fri, 22 Jul 2016 15:33:31 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_3=2E5_=28fix_internal=5Fselect=29?= Message-ID: <20160722153330.24300.89990.A10C0FB5@psf.io> https://hg.python.org/cpython/rev/9abe6b386b42 changeset: 102415:9abe6b386b42 parent: 102413:a399daacb591 parent: 102414:6c11f52ab9db user: Victor Stinner date: Fri Jul 22 17:28:55 2016 +0200 summary: Merge 3.5 (fix internal_select) files: Modules/socketmodule.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -652,7 +652,7 @@ assert(!(connect && !writing)); /* Guard against closed socket */ - if (s->sock_fd < 0) + if (s->sock_fd == INVALID_SOCKET) return 0; /* Prefer poll, if available, since you can poll() any fd -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 22 11:48:11 2016 From: python-checkins at python.org (victor.stinner) Date: Fri, 22 Jul 2016 15:48:11 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogc29ja2V0OiB1c2Ug?= =?utf-8?q?INVALID=5FSOCKET?= Message-ID: <20160722154810.40601.19420.18E48F2E@psf.io> https://hg.python.org/cpython/rev/025281485318 changeset: 102416:025281485318 branch: 3.5 parent: 102414:6c11f52ab9db user: Victor Stinner date: Fri Jul 22 17:43:59 2016 +0200 summary: socket: use INVALID_SOCKET * Replace "fd = -1" with "fd = INVALID_SOCKET" * Replace "fd < 0" with "fd == INVALID_SOCKET": SOCKET_T is unsigned on Windows Bug found by Pavel Belikov ("Fragment N1"): http://www.viva64.com/en/b/0414/#ID0ECDAE files: Modules/_ssl.c | 8 ++++++-- Modules/socketmodule.c | 11 ++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -113,6 +113,10 @@ # define HAVE_ALPN #endif +#ifndef INVALID_SOCKET /* MS defines this */ +#define INVALID_SOCKET (-1) +#endif + enum py_ssl_error { /* these mirror ssl.h */ PY_SSL_ERROR_NONE, @@ -1699,7 +1703,7 @@ } /* Guard against closed socket */ - if (s->sock_fd < 0) + if (s->sock_fd == INVALID_SOCKET) return SOCKET_HAS_BEEN_CLOSED; /* Prefer poll, if available, since you can poll() any fd @@ -2023,7 +2027,7 @@ if (sock != NULL) { /* Guard against closed socket */ - if ((((PyObject*)sock) == Py_None) || (sock->sock_fd < 0)) { + if ((((PyObject*)sock) == Py_None) || (sock->sock_fd == INVALID_SOCKET)) { _setSSLError("Underlying socket connection gone", PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); return NULL; diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2568,8 +2568,9 @@ * and http://linux.derkeiler.com/Mailing-Lists/Kernel/2005-09/3000.html * for more details. */ - if ((fd = s->sock_fd) != -1) { - s->sock_fd = -1; + fd = s->sock_fd; + if (fd != INVALID_SOCKET) { + s->sock_fd = INVALID_SOCKET; Py_BEGIN_ALLOW_THREADS (void) SOCKETCLOSE(fd); Py_END_ALLOW_THREADS @@ -2587,7 +2588,7 @@ sock_detach(PySocketSockObject *s) { SOCKET_T fd = s->sock_fd; - s->sock_fd = -1; + s->sock_fd = INVALID_SOCKET; return PyLong_FromSocket_t(fd); } @@ -4165,7 +4166,7 @@ static void sock_dealloc(PySocketSockObject *s) { - if (s->sock_fd != -1) { + if (s->sock_fd != INVALID_SOCKET) { PyObject *exc, *val, *tb; Py_ssize_t old_refcount = Py_REFCNT(s); ++Py_REFCNT(s); @@ -4221,7 +4222,7 @@ new = type->tp_alloc(type, 0); if (new != NULL) { - ((PySocketSockObject *)new)->sock_fd = -1; + ((PySocketSockObject *)new)->sock_fd = INVALID_SOCKET; ((PySocketSockObject *)new)->sock_timeout = _PyTime_FromSeconds(-1); ((PySocketSockObject *)new)->errorhandler = &set_error; } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 22 11:48:12 2016 From: python-checkins at python.org (victor.stinner) Date: Fri, 22 Jul 2016 15:48:12 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogTWVyZ2UgMy41IChJTlZBTElEX1NPQ0tFVCk=?= Message-ID: <20160722154811.21393.87699.7817F1D7@psf.io> https://hg.python.org/cpython/rev/a4fd4b9cde6d changeset: 102417:a4fd4b9cde6d parent: 102415:9abe6b386b42 parent: 102416:025281485318 user: Victor Stinner date: Fri Jul 22 17:47:09 2016 +0200 summary: Merge 3.5 (INVALID_SOCKET) files: Modules/_ssl.c | 8 ++++++-- Modules/socketmodule.c | 12 ++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Modules/_ssl.c b/Modules/_ssl.c --- a/Modules/_ssl.c +++ b/Modules/_ssl.c @@ -113,6 +113,10 @@ # define HAVE_ALPN #endif +#ifndef INVALID_SOCKET /* MS defines this */ +#define INVALID_SOCKET (-1) +#endif + enum py_ssl_error { /* these mirror ssl.h */ PY_SSL_ERROR_NONE, @@ -1699,7 +1703,7 @@ } /* Guard against closed socket */ - if (s->sock_fd < 0) + if (s->sock_fd == INVALID_SOCKET) return SOCKET_HAS_BEEN_CLOSED; /* Prefer poll, if available, since you can poll() any fd @@ -2023,7 +2027,7 @@ if (sock != NULL) { /* Guard against closed socket */ - if ((((PyObject*)sock) == Py_None) || (sock->sock_fd < 0)) { + if ((((PyObject*)sock) == Py_None) || (sock->sock_fd == INVALID_SOCKET)) { _setSSLError("Underlying socket connection gone", PY_SSL_ERROR_NO_SOCKET, __FILE__, __LINE__); return NULL; diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -2579,8 +2579,8 @@ int res; fd = s->sock_fd; - if (fd != -1) { - s->sock_fd = -1; + if (fd != INVALID_SOCKET) { + s->sock_fd = INVALID_SOCKET; /* We do not want to retry upon EINTR: see http://lwn.net/Articles/576478/ and @@ -2606,7 +2606,7 @@ sock_detach(PySocketSockObject *s) { SOCKET_T fd = s->sock_fd; - s->sock_fd = -1; + s->sock_fd = INVALID_SOCKET; return PyLong_FromSocket_t(fd); } @@ -4202,7 +4202,7 @@ /* Save the current exception, if any. */ PyErr_Fetch(&error_type, &error_value, &error_traceback); - if (s->sock_fd != -1) { + if (s->sock_fd != INVALID_SOCKET) { if (PyErr_ResourceWarning((PyObject *)s, 1, "unclosed %R", s)) { /* Spurious errors can appear at shutdown */ if (PyErr_ExceptionMatches(PyExc_Warning)) { @@ -4215,7 +4215,7 @@ socket.getsockname(). If the socket is closed before, socket methods fails with the EBADF error. */ fd = s->sock_fd; - s->sock_fd = -1; + s->sock_fd = INVALID_SOCKET; /* We do not want to retry upon EINTR: see sock_close() */ Py_BEGIN_ALLOW_THREADS @@ -4275,7 +4275,7 @@ new = type->tp_alloc(type, 0); if (new != NULL) { - ((PySocketSockObject *)new)->sock_fd = -1; + ((PySocketSockObject *)new)->sock_fd = INVALID_SOCKET; ((PySocketSockObject *)new)->sock_timeout = _PyTime_FromSeconds(-1); ((PySocketSockObject *)new)->errorhandler = &set_error; } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 22 14:02:57 2016 From: python-checkins at python.org (vinay.sajip) Date: Fri, 22 Jul 2016 18:02:57 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Closes_=2327493=3A_accepte?= =?utf-8?q?d_Path_objects_in_file_handlers_for_logging=2E?= Message-ID: <20160722180256.40461.7657.7CE3BB1B@psf.io> https://hg.python.org/cpython/rev/fada654c5f72 changeset: 102418:fada654c5f72 user: Vinay Sajip date: Fri Jul 22 18:23:04 2016 +0100 summary: Closes #27493: accepted Path objects in file handlers for logging. files: Doc/library/logging.handlers.rst | 13 ++++++++++ Lib/logging/__init__.py | 6 +++- Lib/logging/handlers.py | 3 ++ Lib/test/test_logging.py | 24 ++++++++++++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/Doc/library/logging.handlers.rst b/Doc/library/logging.handlers.rst --- a/Doc/library/logging.handlers.rst +++ b/Doc/library/logging.handlers.rst @@ -84,6 +84,9 @@ with that encoding. If *delay* is true, then file opening is deferred until the first call to :meth:`emit`. By default, the file grows indefinitely. + .. versionchanged:: 3.6 + As well as string values, :class:`~pathlib.Path` objects are also accepted + for the *filename* argument. .. method:: close() @@ -160,6 +163,9 @@ with that encoding. If *delay* is true, then file opening is deferred until the first call to :meth:`emit`. By default, the file grows indefinitely. + .. versionchanged:: 3.6 + As well as string values, :class:`~pathlib.Path` objects are also accepted + for the *filename* argument. .. method:: reopenIfNeeded() @@ -287,6 +293,9 @@ :file:`app.log.2`, etc. exist, then they are renamed to :file:`app.log.2`, :file:`app.log.3` etc. respectively. + .. versionchanged:: 3.6 + As well as string values, :class:`~pathlib.Path` objects are also accepted + for the *filename* argument. .. method:: doRollover() @@ -365,6 +374,10 @@ .. versionchanged:: 3.4 *atTime* parameter was added. + .. versionchanged:: 3.6 + As well as string values, :class:`~pathlib.Path` objects are also accepted + for the *filename* argument. + .. method:: doRollover() Does a rollover, as described above. diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2001-2015 by Vinay Sajip. All Rights Reserved. +# Copyright 2001-2016 by Vinay Sajip. All Rights Reserved. # # Permission to use, copy, modify, and distribute this software and its # documentation for any purpose and without fee is hereby granted, @@ -18,7 +18,7 @@ Logging package for Python. Based on PEP 282 and comments thereto in comp.lang.python. -Copyright (C) 2001-2015 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2016 Vinay Sajip. All Rights Reserved. To use, simply 'import logging' and log away! """ @@ -994,6 +994,8 @@ """ Open the specified file and use it as the stream for logging. """ + # Issue #27493: add support for Path objects to be passed in + filename = os.fspath(filename) #keep the absolute path, otherwise derived classes which use this #may come a cropper when the current directory changes self.baseFilename = os.path.abspath(filename) diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py --- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -246,6 +246,9 @@ self.extMatch = re.compile(self.extMatch, re.ASCII) self.interval = self.interval * interval # multiply by units requested + # The following line added because the filename passed in could be a + # path object (see Issue #27493), but self.baseFilename will be a string + filename = self.baseFilename if os.path.exists(filename): t = os.stat(filename)[ST_MTIME] else: diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -26,6 +26,7 @@ import codecs import configparser import datetime +import pathlib import pickle import io import gc @@ -575,6 +576,29 @@ self.assertFalse(h.shouldFlush(r)) h.close() + def test_path_objects(self): + """ + Test that Path objects are accepted as filename arguments to handlers. + + See Issue #27493. + """ + fd, fn = tempfile.mkstemp() + os.close(fd) + os.unlink(fn) + pfn = pathlib.Path(fn) + cases = ( + (logging.FileHandler, (pfn, 'w')), + (logging.handlers.RotatingFileHandler, (pfn, 'a')), + (logging.handlers.TimedRotatingFileHandler, (pfn, 'h')), + ) + if sys.platform in ('linux', 'darwin'): + cases += ((logging.handlers.WatchedFileHandler, (pfn, 'w')),) + for cls, args in cases: + h = cls(*args) + self.assertTrue(os.path.exists(fn)) + os.unlink(fn) + h.close() + @unittest.skipIf(os.name == 'nt', 'WatchedFileHandler not appropriate for Windows.') @unittest.skipUnless(threading, 'Threading required for this test.') def test_race(self): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 22 18:47:14 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Fri, 22 Jul 2016 22:47:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Closes_issue_=2324773=3A_I?= =?utf-8?q?mplement_PEP_495_=28Local_Time_Disambiguation=29=2E?= Message-ID: <20160722224707.20197.81786.3575B1C9@psf.io> https://hg.python.org/cpython/rev/7c0917670ab8 changeset: 102419:7c0917670ab8 user: Alexander Belopolsky date: Fri Jul 22 18:47:04 2016 -0400 summary: Closes issue #24773: Implement PEP 495 (Local Time Disambiguation). files: Include/datetime.h | 17 + Lib/datetime.py | 242 ++++- Lib/test/datetimetester.py | 807 +++++++++++++++++++- Lib/test/libregrtest/cmdline.py | 4 +- Misc/NEWS | 2 + Modules/_datetimemodule.c | 683 +++++++++++++--- Tools/tz/zdump.py | 81 ++ 7 files changed, 1605 insertions(+), 231 deletions(-) diff --git a/Include/datetime.h b/Include/datetime.h --- a/Include/datetime.h +++ b/Include/datetime.h @@ -81,6 +81,7 @@ typedef struct { _PyDateTime_TIMEHEAD + unsigned char fold; PyObject *tzinfo; } PyDateTime_Time; /* hastzinfo true */ @@ -108,6 +109,7 @@ typedef struct { _PyDateTime_DATETIMEHEAD + unsigned char fold; PyObject *tzinfo; } PyDateTime_DateTime; /* hastzinfo true */ @@ -125,6 +127,7 @@ ((((PyDateTime_DateTime*)o)->data[7] << 16) | \ (((PyDateTime_DateTime*)o)->data[8] << 8) | \ ((PyDateTime_DateTime*)o)->data[9]) +#define PyDateTime_DATE_GET_FOLD(o) (((PyDateTime_DateTime*)o)->fold) /* Apply for time instances. */ #define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0]) @@ -134,6 +137,7 @@ ((((PyDateTime_Time*)o)->data[3] << 16) | \ (((PyDateTime_Time*)o)->data[4] << 8) | \ ((PyDateTime_Time*)o)->data[5]) +#define PyDateTime_TIME_GET_FOLD(o) (((PyDateTime_Time*)o)->fold) /* Apply for time delta instances */ #define PyDateTime_DELTA_GET_DAYS(o) (((PyDateTime_Delta*)o)->days) @@ -162,6 +166,11 @@ PyObject *(*DateTime_FromTimestamp)(PyObject*, PyObject*, PyObject*); PyObject *(*Date_FromTimestamp)(PyObject*, PyObject*); + /* PEP 495 constructors */ + PyObject *(*DateTime_FromDateAndTimeAndFold)(int, int, int, int, int, int, int, + PyObject*, int, PyTypeObject*); + PyObject *(*Time_FromTimeAndFold)(int, int, int, int, PyObject*, int, PyTypeObject*); + } PyDateTime_CAPI; #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" @@ -217,10 +226,18 @@ PyDateTimeAPI->DateTime_FromDateAndTime(year, month, day, hour, \ min, sec, usec, Py_None, PyDateTimeAPI->DateTimeType) +#define PyDateTime_FromDateAndTimeAndFold(year, month, day, hour, min, sec, usec, fold) \ + PyDateTimeAPI->DateTime_FromDateAndTimeAndFold(year, month, day, hour, \ + min, sec, usec, Py_None, fold, PyDateTimeAPI->DateTimeType) + #define PyTime_FromTime(hour, minute, second, usecond) \ PyDateTimeAPI->Time_FromTime(hour, minute, second, usecond, \ Py_None, PyDateTimeAPI->TimeType) +#define PyTime_FromTimeAndFold(hour, minute, second, usecond, fold) \ + PyDateTimeAPI->Time_FromTimeAndFold(hour, minute, second, usecond, \ + Py_None, fold, PyDateTimeAPI->TimeType) + #define PyDelta_FromDSU(days, seconds, useconds) \ PyDateTimeAPI->Delta_FromDelta(days, seconds, useconds, 1, \ PyDateTimeAPI->DeltaType) diff --git a/Lib/datetime.py b/Lib/datetime.py --- a/Lib/datetime.py +++ b/Lib/datetime.py @@ -250,9 +250,9 @@ if not isinstance(offset, timedelta): raise TypeError("tzinfo.%s() must return None " "or timedelta, not '%s'" % (name, type(offset))) - if offset % timedelta(minutes=1) or offset.microseconds: + if offset.microseconds: raise ValueError("tzinfo.%s() must return a whole number " - "of minutes, got %s" % (name, offset)) + "of seconds, got %s" % (name, offset)) if not -timedelta(1) < offset < timedelta(1): raise ValueError("%s()=%s, must be strictly between " "-timedelta(hours=24) and timedelta(hours=24)" % @@ -930,7 +930,7 @@ # Pickle support. - def _getstate(self): + def _getstate(self, protocol=3): yhi, ylo = divmod(self._year, 256) return bytes([yhi, ylo, self._month, self._day]), @@ -938,8 +938,8 @@ yhi, ylo, self._month, self._day = string self._year = yhi * 256 + ylo - def __reduce__(self): - return (self.__class__, self._getstate()) + def __reduce_ex__(self, protocol): + return (self.__class__, self._getstate(protocol)) _date_class = date # so functions w/ args named "date" can get at the class @@ -947,6 +947,7 @@ date.max = date(9999, 12, 31) date.resolution = timedelta(days=1) + class tzinfo: """Abstract base class for time zone info classes. @@ -1038,11 +1039,11 @@ dst() Properties (readonly): - hour, minute, second, microsecond, tzinfo + hour, minute, second, microsecond, tzinfo, fold """ - __slots__ = '_hour', '_minute', '_second', '_microsecond', '_tzinfo', '_hashcode' + __slots__ = '_hour', '_minute', '_second', '_microsecond', '_tzinfo', '_hashcode', '_fold' - def __new__(cls, hour=0, minute=0, second=0, microsecond=0, tzinfo=None): + def __new__(cls, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0): """Constructor. Arguments: @@ -1050,8 +1051,9 @@ hour, minute (required) second, microsecond (default to zero) tzinfo (default to None) + fold (keyword only, default to True) """ - if isinstance(hour, bytes) and len(hour) == 6 and hour[0] < 24: + if isinstance(hour, bytes) and len(hour) == 6 and hour[0]&0x7F < 24: # Pickle support self = object.__new__(cls) self.__setstate(hour, minute or None) @@ -1067,6 +1069,7 @@ self._microsecond = microsecond self._tzinfo = tzinfo self._hashcode = -1 + self._fold = fold return self # Read-only field accessors @@ -1095,6 +1098,10 @@ """timezone info object""" return self._tzinfo + @property + def fold(self): + return self._fold + # Standard conversions, __hash__ (and helpers) # Comparisons of time objects with other. @@ -1160,9 +1167,13 @@ def __hash__(self): """Hash.""" if self._hashcode == -1: - tzoff = self.utcoffset() + if self.fold: + t = self.replace(fold=0) + else: + t = self + tzoff = t.utcoffset() if not tzoff: # zero or None - self._hashcode = hash(self._getstate()[0]) + self._hashcode = hash(t._getstate()[0]) else: h, m = divmod(timedelta(hours=self.hour, minutes=self.minute) - tzoff, timedelta(hours=1)) @@ -1186,10 +1197,11 @@ else: sign = "+" hh, mm = divmod(off, timedelta(hours=1)) - assert not mm % timedelta(minutes=1), "whole minute" - mm //= timedelta(minutes=1) + mm, ss = divmod(mm, timedelta(minutes=1)) assert 0 <= hh < 24 off = "%s%02d%s%02d" % (sign, hh, sep, mm) + if ss: + off += ':%02d' % ss.seconds return off def __repr__(self): @@ -1206,6 +1218,9 @@ if self._tzinfo is not None: assert s[-1:] == ")" s = s[:-1] + ", tzinfo=%r" % self._tzinfo + ")" + if self._fold: + assert s[-1:] == ")" + s = s[:-1] + ", fold=1)" return s def isoformat(self, timespec='auto'): @@ -1284,7 +1299,7 @@ return offset def replace(self, hour=None, minute=None, second=None, microsecond=None, - tzinfo=True): + tzinfo=True, *, fold=None): """Return a new time with new values for the specified fields.""" if hour is None: hour = self.hour @@ -1296,14 +1311,19 @@ microsecond = self.microsecond if tzinfo is True: tzinfo = self.tzinfo - return time(hour, minute, second, microsecond, tzinfo) + if fold is None: + fold = self._fold + return time(hour, minute, second, microsecond, tzinfo, fold=fold) # Pickle support. - def _getstate(self): + def _getstate(self, protocol=3): us2, us3 = divmod(self._microsecond, 256) us1, us2 = divmod(us2, 256) - basestate = bytes([self._hour, self._minute, self._second, + h = self._hour + if self._fold and protocol > 3: + h += 128 + basestate = bytes([h, self._minute, self._second, us1, us2, us3]) if self._tzinfo is None: return (basestate,) @@ -1313,12 +1333,18 @@ def __setstate(self, string, tzinfo): if tzinfo is not None and not isinstance(tzinfo, _tzinfo_class): raise TypeError("bad tzinfo state arg") - self._hour, self._minute, self._second, us1, us2, us3 = string + h, self._minute, self._second, us1, us2, us3 = string + if h > 127: + self._fold = 1 + self._hour = h - 128 + else: + self._fold = 0 + self._hour = h self._microsecond = (((us1 << 8) | us2) << 8) | us3 self._tzinfo = tzinfo - def __reduce__(self): - return (time, self._getstate()) + def __reduce_ex__(self, protocol): + return (time, self._getstate(protocol)) _time_class = time # so functions w/ args named "time" can get at the class @@ -1335,8 +1361,8 @@ __slots__ = date.__slots__ + time.__slots__ def __new__(cls, year, month=None, day=None, hour=0, minute=0, second=0, - microsecond=0, tzinfo=None): - if isinstance(year, bytes) and len(year) == 10 and 1 <= year[2] <= 12: + microsecond=0, tzinfo=None, *, fold=0): + if isinstance(year, bytes) and len(year) == 10 and 1 <= year[2]&0x7F <= 12: # Pickle support self = object.__new__(cls) self.__setstate(year, month) @@ -1356,6 +1382,7 @@ self._microsecond = microsecond self._tzinfo = tzinfo self._hashcode = -1 + self._fold = fold return self # Read-only field accessors @@ -1384,6 +1411,10 @@ """timezone info object""" return self._tzinfo + @property + def fold(self): + return self._fold + @classmethod def _fromtimestamp(cls, t, utc, tz): """Construct a datetime from a POSIX timestamp (like time.time()). @@ -1402,7 +1433,23 @@ converter = _time.gmtime if utc else _time.localtime y, m, d, hh, mm, ss, weekday, jday, dst = converter(t) ss = min(ss, 59) # clamp out leap seconds if the platform has them - return cls(y, m, d, hh, mm, ss, us, tz) + result = cls(y, m, d, hh, mm, ss, us, tz) + if tz is None: + # As of version 2015f max fold in IANA database is + # 23 hours at 1969-09-30 13:00:00 in Kwajalein. + # Let's probe 24 hours in the past to detect a transition: + max_fold_seconds = 24 * 3600 + y, m, d, hh, mm, ss = converter(t - max_fold_seconds)[:6] + probe1 = cls(y, m, d, hh, mm, ss, us, tz) + trans = result - probe1 - timedelta(0, max_fold_seconds) + if trans.days < 0: + y, m, d, hh, mm, ss = converter(t + trans // timedelta(0, 1))[:6] + probe2 = cls(y, m, d, hh, mm, ss, us, tz) + if probe2 == result: + result._fold = 1 + else: + result = tz.fromutc(result) + return result @classmethod def fromtimestamp(cls, t, tz=None): @@ -1412,10 +1459,7 @@ """ _check_tzinfo_arg(tz) - result = cls._fromtimestamp(t, tz is not None, tz) - if tz is not None: - result = tz.fromutc(result) - return result + return cls._fromtimestamp(t, tz is not None, tz) @classmethod def utcfromtimestamp(cls, t): @@ -1443,7 +1487,7 @@ raise TypeError("time argument must be a time instance") return cls(date.year, date.month, date.day, time.hour, time.minute, time.second, time.microsecond, - time.tzinfo) + time.tzinfo, fold=time.fold) def timetuple(self): "Return local time tuple compatible with time.localtime()." @@ -1458,12 +1502,46 @@ self.hour, self.minute, self.second, dst) + def _mktime(self): + """Return integer POSIX timestamp.""" + epoch = datetime(1970, 1, 1) + max_fold_seconds = 24 * 3600 + t = (self - epoch) // timedelta(0, 1) + def local(u): + y, m, d, hh, mm, ss = _time.localtime(u)[:6] + return (datetime(y, m, d, hh, mm, ss) - epoch) // timedelta(0, 1) + + # Our goal is to solve t = local(u) for u. + a = local(t) - t + u1 = t - a + t1 = local(u1) + if t1 == t: + # We found one solution, but it may not be the one we need. + # Look for an earlier solution (if `fold` is 0), or a + # later one (if `fold` is 1). + u2 = u1 + (-max_fold_seconds, max_fold_seconds)[self.fold] + b = local(u2) - u2 + if a == b: + return u1 + else: + b = t1 - u1 + assert a != b + u2 = t - b + t2 = local(u2) + if t2 == t: + return u2 + if t1 == t: + return u1 + # We have found both offsets a and b, but neither t - a nor t - b is + # a solution. This means t is in the gap. + return (max, min)[self.fold](u1, u2) + + def timestamp(self): "Return POSIX timestamp as float" if self._tzinfo is None: - return _time.mktime((self.year, self.month, self.day, - self.hour, self.minute, self.second, - -1, -1, -1)) + self.microsecond / 1e6 + s = self._mktime() + return s + self.microsecond / 1e6 else: return (self - _EPOCH).total_seconds() @@ -1482,15 +1560,16 @@ def time(self): "Return the time part, with tzinfo None." - return time(self.hour, self.minute, self.second, self.microsecond) + return time(self.hour, self.minute, self.second, self.microsecond, fold=self.fold) def timetz(self): "Return the time part, with same tzinfo." return time(self.hour, self.minute, self.second, self.microsecond, - self._tzinfo) + self._tzinfo, fold=self.fold) def replace(self, year=None, month=None, day=None, hour=None, - minute=None, second=None, microsecond=None, tzinfo=True): + minute=None, second=None, microsecond=None, tzinfo=True, + *, fold=None): """Return a new datetime with new values for the specified fields.""" if year is None: year = self.year @@ -1508,46 +1587,45 @@ microsecond = self.microsecond if tzinfo is True: tzinfo = self.tzinfo - return datetime(year, month, day, hour, minute, second, microsecond, - tzinfo) + if fold is None: + fold = self.fold + return datetime(year, month, day, hour, minute, second, + microsecond, tzinfo, fold=fold) + + def _local_timezone(self): + if self.tzinfo is None: + ts = self._mktime() + else: + ts = (self - _EPOCH) // timedelta(seconds=1) + localtm = _time.localtime(ts) + local = datetime(*localtm[:6]) + try: + # Extract TZ data if available + gmtoff = localtm.tm_gmtoff + zone = localtm.tm_zone + except AttributeError: + delta = local - datetime(*_time.gmtime(ts)[:6]) + zone = _time.strftime('%Z', localtm) + tz = timezone(delta, zone) + else: + tz = timezone(timedelta(seconds=gmtoff), zone) + return tz def astimezone(self, tz=None): if tz is None: - if self.tzinfo is None: - raise ValueError("astimezone() requires an aware datetime") - ts = (self - _EPOCH) // timedelta(seconds=1) - localtm = _time.localtime(ts) - local = datetime(*localtm[:6]) - try: - # Extract TZ data if available - gmtoff = localtm.tm_gmtoff - zone = localtm.tm_zone - except AttributeError: - # Compute UTC offset and compare with the value implied - # by tm_isdst. If the values match, use the zone name - # implied by tm_isdst. - delta = local - datetime(*_time.gmtime(ts)[:6]) - dst = _time.daylight and localtm.tm_isdst > 0 - gmtoff = -(_time.altzone if dst else _time.timezone) - if delta == timedelta(seconds=gmtoff): - tz = timezone(delta, _time.tzname[dst]) - else: - tz = timezone(delta) - else: - tz = timezone(timedelta(seconds=gmtoff), zone) - + tz = self._local_timezone() elif not isinstance(tz, tzinfo): raise TypeError("tz argument must be an instance of tzinfo") mytz = self.tzinfo if mytz is None: - raise ValueError("astimezone() requires an aware datetime") + mytz = self._local_timezone() if tz is mytz: return self # Convert self to UTC, and attach the new time zone object. - myoffset = self.utcoffset() + myoffset = mytz.utcoffset(self) if myoffset is None: raise ValueError("astimezone() requires an aware datetime") utc = (self - myoffset).replace(tzinfo=tz) @@ -1594,9 +1672,11 @@ else: sign = "+" hh, mm = divmod(off, timedelta(hours=1)) - assert not mm % timedelta(minutes=1), "whole minute" - mm //= timedelta(minutes=1) + mm, ss = divmod(mm, timedelta(minutes=1)) s += "%s%02d:%02d" % (sign, hh, mm) + if ss: + assert not ss.microseconds + s += ":%02d" % ss.seconds return s def __repr__(self): @@ -1613,6 +1693,9 @@ if self._tzinfo is not None: assert s[-1:] == ")" s = s[:-1] + ", tzinfo=%r" % self._tzinfo + ")" + if self._fold: + assert s[-1:] == ")" + s = s[:-1] + ", fold=1)" return s def __str__(self): @@ -1715,6 +1798,12 @@ else: myoff = self.utcoffset() otoff = other.utcoffset() + # Assume that allow_mixed means that we are called from __eq__ + if allow_mixed: + if myoff != self.replace(fold=not self.fold).utcoffset(): + return 2 + if otoff != other.replace(fold=not other.fold).utcoffset(): + return 2 base_compare = myoff == otoff if base_compare: @@ -1782,9 +1871,13 @@ def __hash__(self): if self._hashcode == -1: - tzoff = self.utcoffset() + if self.fold: + t = self.replace(fold=0) + else: + t = self + tzoff = t.utcoffset() if tzoff is None: - self._hashcode = hash(self._getstate()[0]) + self._hashcode = hash(t._getstate()[0]) else: days = _ymd2ord(self.year, self.month, self.day) seconds = self.hour * 3600 + self.minute * 60 + self.second @@ -1793,11 +1886,14 @@ # Pickle support. - def _getstate(self): + def _getstate(self, protocol=3): yhi, ylo = divmod(self._year, 256) us2, us3 = divmod(self._microsecond, 256) us1, us2 = divmod(us2, 256) - basestate = bytes([yhi, ylo, self._month, self._day, + m = self._month + if self._fold and protocol > 3: + m += 128 + basestate = bytes([yhi, ylo, m, self._day, self._hour, self._minute, self._second, us1, us2, us3]) if self._tzinfo is None: @@ -1808,14 +1904,20 @@ def __setstate(self, string, tzinfo): if tzinfo is not None and not isinstance(tzinfo, _tzinfo_class): raise TypeError("bad tzinfo state arg") - (yhi, ylo, self._month, self._day, self._hour, + (yhi, ylo, m, self._day, self._hour, self._minute, self._second, us1, us2, us3) = string + if m > 127: + self._fold = 1 + self._month = m - 128 + else: + self._fold = 0 + self._month = m self._year = yhi * 256 + ylo self._microsecond = (((us1 << 8) | us2) << 8) | us3 self._tzinfo = tzinfo - def __reduce__(self): - return (self.__class__, self._getstate()) + def __reduce_ex__(self, protocol): + return (self.__class__, self._getstate(protocol)) datetime.min = datetime(1, 1, 1) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -2,14 +2,22 @@ See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases """ +from test.support import requires + +import itertools +import bisect import copy import decimal import sys +import os import pickle import random +import struct import unittest +from array import array + from operator import lt, le, gt, ge, eq, ne, truediv, floordiv, mod from test import support @@ -1592,6 +1600,10 @@ self.assertEqual(t.isoformat(' '), "0002-03-02 00:00:00") # str is ISO format with the separator forced to a blank. self.assertEqual(str(t), "0002-03-02 00:00:00") + # ISO format with timezone + tz = FixedOffset(timedelta(seconds=16), 'XXX') + t = self.theclass(2, 3, 2, tzinfo=tz) + self.assertEqual(t.isoformat(), "0002-03-02T00:00:00+00:00:16") def test_format(self): dt = self.theclass(2007, 9, 10, 4, 5, 1, 123) @@ -1711,6 +1723,9 @@ self.assertRaises(ValueError, self.theclass, 2000, 1, 31, 23, 59, 59, 1000000) + # Positional fold: + self.assertRaises(TypeError, self.theclass, + 2000, 1, 31, 23, 59, 59, 0, None, 1) def test_hash_equality(self): d = self.theclass(2000, 12, 31, 23, 30, 17) @@ -1894,16 +1909,20 @@ t = self.theclass(1970, 1, 1, 1, 2, 3, 4) self.assertEqual(t.timestamp(), 18000.0 + 3600 + 2*60 + 3 + 4*1e-6) - # Missing hour may produce platform-dependent result - t = self.theclass(2012, 3, 11, 2, 30) - self.assertIn(self.theclass.fromtimestamp(t.timestamp()), - [t - timedelta(hours=1), t + timedelta(hours=1)]) + # Missing hour + t0 = self.theclass(2012, 3, 11, 2, 30) + t1 = t0.replace(fold=1) + self.assertEqual(self.theclass.fromtimestamp(t1.timestamp()), + t0 - timedelta(hours=1)) + self.assertEqual(self.theclass.fromtimestamp(t0.timestamp()), + t1 + timedelta(hours=1)) # Ambiguous hour defaults to DST t = self.theclass(2012, 11, 4, 1, 30) self.assertEqual(self.theclass.fromtimestamp(t.timestamp()), t) # Timestamp may raise an overflow error on some platforms - for t in [self.theclass(1,1,1), self.theclass(9999,12,12)]: + # XXX: Do we care to support the first and last year? + for t in [self.theclass(2,1,1), self.theclass(9998,12,12)]: try: s = t.timestamp() except OverflowError: @@ -1922,6 +1941,7 @@ self.assertEqual(t.timestamp(), 18000 + 3600 + 2*60 + 3 + 4*1e-6) + @support.run_with_tz('MSK-03') # Something east of Greenwich def test_microsecond_rounding(self): for fts in [self.theclass.fromtimestamp, self.theclass.utcfromtimestamp]: @@ -2127,6 +2147,7 @@ self.assertRaises(ValueError, base.replace, year=2001) def test_astimezone(self): + return # The rest is no longer applicable # Pretty boring! The TZ test is more interesting here. astimezone() # simply can't be applied to a naive object. dt = self.theclass.now() @@ -2619,9 +2640,9 @@ self.assertRaises(ValueError, t.utcoffset) self.assertRaises(ValueError, t.dst) - # Not a whole number of minutes. + # Not a whole number of seconds. class C7(tzinfo): - def utcoffset(self, dt): return timedelta(seconds=61) + def utcoffset(self, dt): return timedelta(microseconds=61) def dst(self, dt): return timedelta(microseconds=-81) t = cls(1, 1, 1, tzinfo=C7()) self.assertRaises(ValueError, t.utcoffset) @@ -3994,5 +4015,777 @@ with self.assertRaises(TypeError): datetime(10, 10, 10, 10, 10, 10, 10.) +############################################################################# +# Local Time Disambiguation + +# An experimental reimplementation of fromutc that respects the "fold" flag. + +class tzinfo2(tzinfo): + + def fromutc(self, dt): + "datetime in UTC -> datetime in local time." + + if not isinstance(dt, datetime): + raise TypeError("fromutc() requires a datetime argument") + if dt.tzinfo is not self: + raise ValueError("dt.tzinfo is not self") + # Returned value satisfies + # dt + ldt.utcoffset() = ldt + off0 = dt.replace(fold=0).utcoffset() + off1 = dt.replace(fold=1).utcoffset() + if off0 is None or off1 is None or dt.dst() is None: + raise ValueError + if off0 == off1: + ldt = dt + off0 + off1 = ldt.utcoffset() + if off0 == off1: + return ldt + # Now, we discovered both possible offsets, so + # we can just try four possible solutions: + for off in [off0, off1]: + ldt = dt + off + if ldt.utcoffset() == off: + return ldt + ldt = ldt.replace(fold=1) + if ldt.utcoffset() == off: + return ldt + + raise ValueError("No suitable local time found") + +# Reimplementing simplified US timezones to respect the "fold" flag: + +class USTimeZone2(tzinfo2): + + def __init__(self, hours, reprname, stdname, dstname): + self.stdoffset = timedelta(hours=hours) + self.reprname = reprname + self.stdname = stdname + self.dstname = dstname + + def __repr__(self): + return self.reprname + + def tzname(self, dt): + if self.dst(dt): + return self.dstname + else: + return self.stdname + + def utcoffset(self, dt): + return self.stdoffset + self.dst(dt) + + def dst(self, dt): + if dt is None or dt.tzinfo is None: + # An exception instead may be sensible here, in one or more of + # the cases. + return ZERO + assert dt.tzinfo is self + + # Find first Sunday in April. + start = first_sunday_on_or_after(DSTSTART.replace(year=dt.year)) + assert start.weekday() == 6 and start.month == 4 and start.day <= 7 + + # Find last Sunday in October. + end = first_sunday_on_or_after(DSTEND.replace(year=dt.year)) + assert end.weekday() == 6 and end.month == 10 and end.day >= 25 + + # Can't compare naive to aware objects, so strip the timezone from + # dt first. + dt = dt.replace(tzinfo=None) + if start + HOUR <= dt < end: + # DST is in effect. + return HOUR + elif end <= dt < end + HOUR: + # Fold (an ambiguous hour): use dt.fold to disambiguate. + return ZERO if dt.fold else HOUR + elif start <= dt < start + HOUR: + # Gap (a non-existent hour): reverse the fold rule. + return HOUR if dt.fold else ZERO + else: + # DST is off. + return ZERO + +Eastern2 = USTimeZone2(-5, "Eastern2", "EST", "EDT") +Central2 = USTimeZone2(-6, "Central2", "CST", "CDT") +Mountain2 = USTimeZone2(-7, "Mountain2", "MST", "MDT") +Pacific2 = USTimeZone2(-8, "Pacific2", "PST", "PDT") + +# Europe_Vilnius_1941 tzinfo implementation reproduces the following +# 1941 transition from Olson's tzdist: +# +# Zone NAME GMTOFF RULES FORMAT [UNTIL] +# ZoneEurope/Vilnius 1:00 - CET 1940 Aug 3 +# 3:00 - MSK 1941 Jun 24 +# 1:00 C-Eur CE%sT 1944 Aug +# +# $ zdump -v Europe/Vilnius | grep 1941 +# Europe/Vilnius Mon Jun 23 20:59:59 1941 UTC = Mon Jun 23 23:59:59 1941 MSK isdst=0 gmtoff=10800 +# Europe/Vilnius Mon Jun 23 21:00:00 1941 UTC = Mon Jun 23 23:00:00 1941 CEST isdst=1 gmtoff=7200 + +class Europe_Vilnius_1941(tzinfo): + def _utc_fold(self): + return [datetime(1941, 6, 23, 21, tzinfo=self), # Mon Jun 23 21:00:00 1941 UTC + datetime(1941, 6, 23, 22, tzinfo=self)] # Mon Jun 23 22:00:00 1941 UTC + + def _loc_fold(self): + return [datetime(1941, 6, 23, 23, tzinfo=self), # Mon Jun 23 23:00:00 1941 MSK / CEST + datetime(1941, 6, 24, 0, tzinfo=self)] # Mon Jun 24 00:00:00 1941 CEST + + def utcoffset(self, dt): + fold_start, fold_stop = self._loc_fold() + if dt < fold_start: + return 3 * HOUR + if dt < fold_stop: + return (2 if dt.fold else 3) * HOUR + # if dt >= fold_stop + return 2 * HOUR + + def dst(self, dt): + fold_start, fold_stop = self._loc_fold() + if dt < fold_start: + return 0 * HOUR + if dt < fold_stop: + return (1 if dt.fold else 0) * HOUR + # if dt >= fold_stop + return 1 * HOUR + + def tzname(self, dt): + fold_start, fold_stop = self._loc_fold() + if dt < fold_start: + return 'MSK' + if dt < fold_stop: + return ('MSK', 'CEST')[dt.fold] + # if dt >= fold_stop + return 'CEST' + + def fromutc(self, dt): + assert dt.fold == 0 + assert dt.tzinfo is self + if dt.year != 1941: + raise NotImplementedError + fold_start, fold_stop = self._utc_fold() + if dt < fold_start: + return dt + 3 * HOUR + if dt < fold_stop: + return (dt + 2 * HOUR).replace(fold=1) + # if dt >= fold_stop + return dt + 2 * HOUR + + +class TestLocalTimeDisambiguation(unittest.TestCase): + + def test_vilnius_1941_fromutc(self): + Vilnius = Europe_Vilnius_1941() + + gdt = datetime(1941, 6, 23, 20, 59, 59, tzinfo=timezone.utc) + ldt = gdt.astimezone(Vilnius) + self.assertEqual(ldt.strftime("%c %Z%z"), + 'Mon Jun 23 23:59:59 1941 MSK+0300') + self.assertEqual(ldt.fold, 0) + self.assertFalse(ldt.dst()) + + gdt = datetime(1941, 6, 23, 21, tzinfo=timezone.utc) + ldt = gdt.astimezone(Vilnius) + self.assertEqual(ldt.strftime("%c %Z%z"), + 'Mon Jun 23 23:00:00 1941 CEST+0200') + self.assertEqual(ldt.fold, 1) + self.assertTrue(ldt.dst()) + + gdt = datetime(1941, 6, 23, 22, tzinfo=timezone.utc) + ldt = gdt.astimezone(Vilnius) + self.assertEqual(ldt.strftime("%c %Z%z"), + 'Tue Jun 24 00:00:00 1941 CEST+0200') + self.assertEqual(ldt.fold, 0) + self.assertTrue(ldt.dst()) + + def test_vilnius_1941_toutc(self): + Vilnius = Europe_Vilnius_1941() + + ldt = datetime(1941, 6, 23, 22, 59, 59, tzinfo=Vilnius) + gdt = ldt.astimezone(timezone.utc) + self.assertEqual(gdt.strftime("%c %Z"), + 'Mon Jun 23 19:59:59 1941 UTC') + + ldt = datetime(1941, 6, 23, 23, 59, 59, tzinfo=Vilnius) + gdt = ldt.astimezone(timezone.utc) + self.assertEqual(gdt.strftime("%c %Z"), + 'Mon Jun 23 20:59:59 1941 UTC') + + ldt = datetime(1941, 6, 23, 23, 59, 59, tzinfo=Vilnius, fold=1) + gdt = ldt.astimezone(timezone.utc) + self.assertEqual(gdt.strftime("%c %Z"), + 'Mon Jun 23 21:59:59 1941 UTC') + + ldt = datetime(1941, 6, 24, 0, tzinfo=Vilnius) + gdt = ldt.astimezone(timezone.utc) + self.assertEqual(gdt.strftime("%c %Z"), + 'Mon Jun 23 22:00:00 1941 UTC') + + + def test_constructors(self): + t = time(0, fold=1) + dt = datetime(1, 1, 1, fold=1) + self.assertEqual(t.fold, 1) + self.assertEqual(dt.fold, 1) + with self.assertRaises(TypeError): + time(0, 0, 0, 0, None, 0) + + def test_member(self): + dt = datetime(1, 1, 1, fold=1) + t = dt.time() + self.assertEqual(t.fold, 1) + t = dt.timetz() + self.assertEqual(t.fold, 1) + + def test_replace(self): + t = time(0) + dt = datetime(1, 1, 1) + self.assertEqual(t.replace(fold=1).fold, 1) + self.assertEqual(dt.replace(fold=1).fold, 1) + self.assertEqual(t.replace(fold=0).fold, 0) + self.assertEqual(dt.replace(fold=0).fold, 0) + # Check that replacement of other fields does not change "fold". + t = t.replace(fold=1, tzinfo=Eastern) + dt = dt.replace(fold=1, tzinfo=Eastern) + self.assertEqual(t.replace(tzinfo=None).fold, 1) + self.assertEqual(dt.replace(tzinfo=None).fold, 1) + # Check that fold is a keyword-only argument + with self.assertRaises(TypeError): + t.replace(1, 1, 1, None, 1) + with self.assertRaises(TypeError): + dt.replace(1, 1, 1, 1, 1, 1, 1, None, 1) + + def test_comparison(self): + t = time(0) + dt = datetime(1, 1, 1) + self.assertEqual(t, t.replace(fold=1)) + self.assertEqual(dt, dt.replace(fold=1)) + + def test_hash(self): + t = time(0) + dt = datetime(1, 1, 1) + self.assertEqual(hash(t), hash(t.replace(fold=1))) + self.assertEqual(hash(dt), hash(dt.replace(fold=1))) + + @support.run_with_tz('EST+05EDT,M3.2.0,M11.1.0') + def test_fromtimestamp(self): + s = 1414906200 + dt0 = datetime.fromtimestamp(s) + dt1 = datetime.fromtimestamp(s + 3600) + self.assertEqual(dt0.fold, 0) + self.assertEqual(dt1.fold, 1) + + @support.run_with_tz('Australia/Lord_Howe') + def test_fromtimestamp_lord_howe(self): + tm = _time.localtime(1.4e9) + if _time.strftime('%Z%z', tm) != 'LHST+1030': + self.skipTest('Australia/Lord_Howe timezone is not supported on this platform') + # $ TZ=Australia/Lord_Howe date -r 1428158700 + # Sun Apr 5 01:45:00 LHDT 2015 + # $ TZ=Australia/Lord_Howe date -r 1428160500 + # Sun Apr 5 01:45:00 LHST 2015 + s = 1428158700 + t0 = datetime.fromtimestamp(s) + t1 = datetime.fromtimestamp(s + 1800) + self.assertEqual(t0, t1) + self.assertEqual(t0.fold, 0) + self.assertEqual(t1.fold, 1) + + + @support.run_with_tz('EST+05EDT,M3.2.0,M11.1.0') + def test_timestamp(self): + dt0 = datetime(2014, 11, 2, 1, 30) + dt1 = dt0.replace(fold=1) + self.assertEqual(dt0.timestamp() + 3600, + dt1.timestamp()) + + @support.run_with_tz('Australia/Lord_Howe') + def test_timestamp_lord_howe(self): + tm = _time.localtime(1.4e9) + if _time.strftime('%Z%z', tm) != 'LHST+1030': + self.skipTest('Australia/Lord_Howe timezone is not supported on this platform') + t = datetime(2015, 4, 5, 1, 45) + s0 = t.replace(fold=0).timestamp() + s1 = t.replace(fold=1).timestamp() + self.assertEqual(s0 + 1800, s1) + + + @support.run_with_tz('EST+05EDT,M3.2.0,M11.1.0') + def test_astimezone(self): + dt0 = datetime(2014, 11, 2, 1, 30) + dt1 = dt0.replace(fold=1) + # Convert both naive instances to aware. + adt0 = dt0.astimezone() + adt1 = dt1.astimezone() + # Check that the first instance in DST zone and the second in STD + self.assertEqual(adt0.tzname(), 'EDT') + self.assertEqual(adt1.tzname(), 'EST') + self.assertEqual(adt0 + HOUR, adt1) + # Aware instances with fixed offset tzinfo's always have fold=0 + self.assertEqual(adt0.fold, 0) + self.assertEqual(adt1.fold, 0) + + + def test_pickle_fold(self): + t = time(fold=1) + dt = datetime(1, 1, 1, fold=1) + for pickler, unpickler, proto in pickle_choices: + for x in [t, dt]: + s = pickler.dumps(x, proto) + y = unpickler.loads(s) + self.assertEqual(x, y) + self.assertEqual((0 if proto < 4 else x.fold), y.fold) + + def test_repr(self): + t = time(fold=1) + dt = datetime(1, 1, 1, fold=1) + self.assertEqual(repr(t), 'datetime.time(0, 0, fold=1)') + self.assertEqual(repr(dt), + 'datetime.datetime(1, 1, 1, 0, 0, fold=1)') + + def test_dst(self): + # Let's first establish that things work in regular times. + dt_summer = datetime(2002, 10, 27, 1, tzinfo=Eastern2) - timedelta.resolution + dt_winter = datetime(2002, 10, 27, 2, tzinfo=Eastern2) + self.assertEqual(dt_summer.dst(), HOUR) + self.assertEqual(dt_winter.dst(), ZERO) + # The disambiguation flag is ignored + self.assertEqual(dt_summer.replace(fold=1).dst(), HOUR) + self.assertEqual(dt_winter.replace(fold=1).dst(), ZERO) + + # Pick local time in the fold. + for minute in [0, 30, 59]: + dt = datetime(2002, 10, 27, 1, minute, tzinfo=Eastern2) + # With fold=0 (the default) it is in DST. + self.assertEqual(dt.dst(), HOUR) + # With fold=1 it is in STD. + self.assertEqual(dt.replace(fold=1).dst(), ZERO) + + # Pick local time in the gap. + for minute in [0, 30, 59]: + dt = datetime(2002, 4, 7, 2, minute, tzinfo=Eastern2) + # With fold=0 (the default) it is in STD. + self.assertEqual(dt.dst(), ZERO) + # With fold=1 it is in DST. + self.assertEqual(dt.replace(fold=1).dst(), HOUR) + + + def test_utcoffset(self): + # Let's first establish that things work in regular times. + dt_summer = datetime(2002, 10, 27, 1, tzinfo=Eastern2) - timedelta.resolution + dt_winter = datetime(2002, 10, 27, 2, tzinfo=Eastern2) + self.assertEqual(dt_summer.utcoffset(), -4 * HOUR) + self.assertEqual(dt_winter.utcoffset(), -5 * HOUR) + # The disambiguation flag is ignored + self.assertEqual(dt_summer.replace(fold=1).utcoffset(), -4 * HOUR) + self.assertEqual(dt_winter.replace(fold=1).utcoffset(), -5 * HOUR) + + def test_fromutc(self): + # Let's first establish that things work in regular times. + u_summer = datetime(2002, 10, 27, 6, tzinfo=Eastern2) - timedelta.resolution + u_winter = datetime(2002, 10, 27, 7, tzinfo=Eastern2) + t_summer = Eastern2.fromutc(u_summer) + t_winter = Eastern2.fromutc(u_winter) + self.assertEqual(t_summer, u_summer - 4 * HOUR) + self.assertEqual(t_winter, u_winter - 5 * HOUR) + self.assertEqual(t_summer.fold, 0) + self.assertEqual(t_winter.fold, 0) + + # What happens in the fall-back fold? + u = datetime(2002, 10, 27, 5, 30, tzinfo=Eastern2) + t0 = Eastern2.fromutc(u) + u += HOUR + t1 = Eastern2.fromutc(u) + self.assertEqual(t0, t1) + self.assertEqual(t0.fold, 0) + self.assertEqual(t1.fold, 1) + # The tricky part is when u is in the local fold: + u = datetime(2002, 10, 27, 1, 30, tzinfo=Eastern2) + t = Eastern2.fromutc(u) + self.assertEqual((t.day, t.hour), (26, 21)) + # .. or gets into the local fold after a standard time adjustment + u = datetime(2002, 10, 27, 6, 30, tzinfo=Eastern2) + t = Eastern2.fromutc(u) + self.assertEqual((t.day, t.hour), (27, 1)) + + # What happens in the spring-forward gap? + u = datetime(2002, 4, 7, 2, 0, tzinfo=Eastern2) + t = Eastern2.fromutc(u) + self.assertEqual((t.day, t.hour), (6, 21)) + + def test_mixed_compare_regular(self): + t = datetime(2000, 1, 1, tzinfo=Eastern2) + self.assertEqual(t, t.astimezone(timezone.utc)) + t = datetime(2000, 6, 1, tzinfo=Eastern2) + self.assertEqual(t, t.astimezone(timezone.utc)) + + def test_mixed_compare_fold(self): + t_fold = datetime(2002, 10, 27, 1, 45, tzinfo=Eastern2) + t_fold_utc = t_fold.astimezone(timezone.utc) + self.assertNotEqual(t_fold, t_fold_utc) + + def test_mixed_compare_gap(self): + t_gap = datetime(2002, 4, 7, 2, 45, tzinfo=Eastern2) + t_gap_utc = t_gap.astimezone(timezone.utc) + self.assertNotEqual(t_gap, t_gap_utc) + + def test_hash_aware(self): + t = datetime(2000, 1, 1, tzinfo=Eastern2) + self.assertEqual(hash(t), hash(t.replace(fold=1))) + t_fold = datetime(2002, 10, 27, 1, 45, tzinfo=Eastern2) + t_gap = datetime(2002, 4, 7, 2, 45, tzinfo=Eastern2) + self.assertEqual(hash(t_fold), hash(t_fold.replace(fold=1))) + self.assertEqual(hash(t_gap), hash(t_gap.replace(fold=1))) + +SEC = timedelta(0, 1) + +def pairs(iterable): + a, b = itertools.tee(iterable) + next(b, None) + return zip(a, b) + +class ZoneInfo(tzinfo): + zoneroot = '/usr/share/zoneinfo' + def __init__(self, ut, ti): + """ + + :param ut: array + Array of transition point timestamps + :param ti: list + A list of (offset, isdst, abbr) tuples + :return: None + """ + self.ut = ut + self.ti = ti + self.lt = self.invert(ut, ti) + + @staticmethod + def invert(ut, ti): + lt = (ut.__copy__(), ut.__copy__()) + if ut: + offset = ti[0][0] // SEC + lt[0][0] = max(-2**31, lt[0][0] + offset) + lt[1][0] = max(-2**31, lt[1][0] + offset) + for i in range(1, len(ut)): + lt[0][i] += ti[i-1][0] // SEC + lt[1][i] += ti[i][0] // SEC + return lt + + @classmethod + def fromfile(cls, fileobj): + if fileobj.read(4).decode() != "TZif": + raise ValueError("not a zoneinfo file") + fileobj.seek(32) + counts = array('i') + counts.fromfile(fileobj, 3) + if sys.byteorder != 'big': + counts.byteswap() + + ut = array('i') + ut.fromfile(fileobj, counts[0]) + if sys.byteorder != 'big': + ut.byteswap() + + type_indices = array('B') + type_indices.fromfile(fileobj, counts[0]) + + ttis = [] + for i in range(counts[1]): + ttis.append(struct.unpack(">lbb", fileobj.read(6))) + + abbrs = fileobj.read(counts[2]) + + # Convert ttis + for i, (gmtoff, isdst, abbrind) in enumerate(ttis): + abbr = abbrs[abbrind:abbrs.find(0, abbrind)].decode() + ttis[i] = (timedelta(0, gmtoff), isdst, abbr) + + ti = [None] * len(ut) + for i, idx in enumerate(type_indices): + ti[i] = ttis[idx] + + self = cls(ut, ti) + + return self + + @classmethod + def fromname(cls, name): + path = os.path.join(cls.zoneroot, name) + with open(path, 'rb') as f: + return cls.fromfile(f) + + EPOCHORDINAL = date(1970, 1, 1).toordinal() + + def fromutc(self, dt): + """datetime in UTC -> datetime in local time.""" + + if not isinstance(dt, datetime): + raise TypeError("fromutc() requires a datetime argument") + if dt.tzinfo is not self: + raise ValueError("dt.tzinfo is not self") + + timestamp = ((dt.toordinal() - self.EPOCHORDINAL) * 86400 + + dt.hour * 3600 + + dt.minute * 60 + + dt.second) + + if timestamp < self.ut[1]: + tti = self.ti[0] + fold = 0 + else: + idx = bisect.bisect_right(self.ut, timestamp) + assert self.ut[idx-1] <= timestamp + assert idx == len(self.ut) or timestamp < self.ut[idx] + tti_prev, tti = self.ti[idx-2:idx] + # Detect fold + shift = tti_prev[0] - tti[0] + fold = (shift > timedelta(0, timestamp - self.ut[idx-1])) + dt += tti[0] + if fold: + return dt.replace(fold=1) + else: + return dt + + def _find_ti(self, dt, i): + timestamp = ((dt.toordinal() - self.EPOCHORDINAL) * 86400 + + dt.hour * 3600 + + dt.minute * 60 + + dt.second) + lt = self.lt[dt.fold] + idx = bisect.bisect_right(lt, timestamp) + + return self.ti[max(0, idx - 1)][i] + + def utcoffset(self, dt): + return self._find_ti(dt, 0) + + def dst(self, dt): + isdst = self._find_ti(dt, 1) + # XXX: We cannot accurately determine the "save" value, + # so let's return 1h whenever DST is in effect. Since + # we don't use dst() in fromutc(), it is unlikely that + # it will be needed for anything more than bool(dst()). + return ZERO if isdst else HOUR + + def tzname(self, dt): + return self._find_ti(dt, 2) + + @classmethod + def zonenames(cls, zonedir=None): + if zonedir is None: + zonedir = cls.zoneroot + for root, _, files in os.walk(zonedir): + for f in files: + p = os.path.join(root, f) + with open(p, 'rb') as o: + magic = o.read(4) + if magic == b'TZif': + yield p[len(zonedir) + 1:] + + @classmethod + def stats(cls, start_year=1): + count = gap_count = fold_count = zeros_count = 0 + min_gap = min_fold = timedelta.max + max_gap = max_fold = ZERO + min_gap_datetime = max_gap_datetime = datetime.min + min_gap_zone = max_gap_zone = None + min_fold_datetime = max_fold_datetime = datetime.min + min_fold_zone = max_fold_zone = None + stats_since = datetime(start_year, 1, 1) # Starting from 1970 eliminates a lot of noise + for zonename in cls.zonenames(): + count += 1 + tz = cls.fromname(zonename) + for dt, shift in tz.transitions(): + if dt < stats_since: + continue + if shift > ZERO: + gap_count += 1 + if (shift, dt) > (max_gap, max_gap_datetime): + max_gap = shift + max_gap_zone = zonename + max_gap_datetime = dt + if (shift, datetime.max - dt) < (min_gap, datetime.max - min_gap_datetime): + min_gap = shift + min_gap_zone = zonename + min_gap_datetime = dt + elif shift < ZERO: + fold_count += 1 + shift = -shift + if (shift, dt) > (max_fold, max_fold_datetime): + max_fold = shift + max_fold_zone = zonename + max_fold_datetime = dt + if (shift, datetime.max - dt) < (min_fold, datetime.max - min_fold_datetime): + min_fold = shift + min_fold_zone = zonename + min_fold_datetime = dt + else: + zeros_count += 1 + trans_counts = (gap_count, fold_count, zeros_count) + print("Number of zones: %5d" % count) + print("Number of transitions: %5d = %d (gaps) + %d (folds) + %d (zeros)" % + ((sum(trans_counts),) + trans_counts)) + print("Min gap: %16s at %s in %s" % (min_gap, min_gap_datetime, min_gap_zone)) + print("Max gap: %16s at %s in %s" % (max_gap, max_gap_datetime, max_gap_zone)) + print("Min fold: %16s at %s in %s" % (min_fold, min_fold_datetime, min_fold_zone)) + print("Max fold: %16s at %s in %s" % (max_fold, max_fold_datetime, max_fold_zone)) + + + def transitions(self): + for (_, prev_ti), (t, ti) in pairs(zip(self.ut, self.ti)): + shift = ti[0] - prev_ti[0] + yield datetime.utcfromtimestamp(t), shift + + def nondst_folds(self): + """Find all folds with the same value of isdst on both sides of the transition.""" + for (_, prev_ti), (t, ti) in pairs(zip(self.ut, self.ti)): + shift = ti[0] - prev_ti[0] + if shift < ZERO and ti[1] == prev_ti[1]: + yield datetime.utcfromtimestamp(t), -shift, prev_ti[2], ti[2] + + @classmethod + def print_all_nondst_folds(cls, same_abbr=False, start_year=1): + count = 0 + for zonename in cls.zonenames(): + tz = cls.fromname(zonename) + for dt, shift, prev_abbr, abbr in tz.nondst_folds(): + if dt.year < start_year or same_abbr and prev_abbr != abbr: + continue + count += 1 + print("%3d) %-30s %s %10s %5s -> %s" % + (count, zonename, dt, shift, prev_abbr, abbr)) + + def folds(self): + for t, shift in self.transitions(): + if shift < ZERO: + yield t, -shift + + def gaps(self): + for t, shift in self.transitions(): + if shift > ZERO: + yield t, shift + + def zeros(self): + for t, shift in self.transitions(): + if not shift: + yield t + + +class ZoneInfoTest(unittest.TestCase): + zonename = 'America/New_York' + + def setUp(self): + if sys.platform == "win32": + self.skipTest("Skipping zoneinfo tests on Windows") + self.tz = ZoneInfo.fromname(self.zonename) + + def assertEquivDatetimes(self, a, b): + self.assertEqual((a.replace(tzinfo=None), a.fold, id(a.tzinfo)), + (b.replace(tzinfo=None), b.fold, id(b.tzinfo))) + + def test_folds(self): + tz = self.tz + for dt, shift in tz.folds(): + for x in [0 * shift, 0.5 * shift, shift - timedelta.resolution]: + udt = dt + x + ldt = tz.fromutc(udt.replace(tzinfo=tz)) + self.assertEqual(ldt.fold, 1) + adt = udt.replace(tzinfo=timezone.utc).astimezone(tz) + self.assertEquivDatetimes(adt, ldt) + utcoffset = ldt.utcoffset() + self.assertEqual(ldt.replace(tzinfo=None), udt + utcoffset) + # Round trip + self.assertEquivDatetimes(ldt.astimezone(timezone.utc), + udt.replace(tzinfo=timezone.utc)) + + + for x in [-timedelta.resolution, shift]: + udt = dt + x + udt = udt.replace(tzinfo=tz) + ldt = tz.fromutc(udt) + self.assertEqual(ldt.fold, 0) + + def test_gaps(self): + tz = self.tz + for dt, shift in tz.gaps(): + for x in [0 * shift, 0.5 * shift, shift - timedelta.resolution]: + udt = dt + x + udt = udt.replace(tzinfo=tz) + ldt = tz.fromutc(udt) + self.assertEqual(ldt.fold, 0) + adt = udt.replace(tzinfo=timezone.utc).astimezone(tz) + self.assertEquivDatetimes(adt, ldt) + utcoffset = ldt.utcoffset() + self.assertEqual(ldt.replace(tzinfo=None), udt.replace(tzinfo=None) + utcoffset) + # Create a local time inside the gap + ldt = tz.fromutc(dt.replace(tzinfo=tz)) - shift + x + self.assertLess(ldt.replace(fold=1).utcoffset(), + ldt.replace(fold=0).utcoffset(), + "At %s." % ldt) + + for x in [-timedelta.resolution, shift]: + udt = dt + x + ldt = tz.fromutc(udt.replace(tzinfo=tz)) + self.assertEqual(ldt.fold, 0) + + def test_system_transitions(self): + if ('Riyadh8' in self.zonename or + # From tzdata NEWS file: + # The files solar87, solar88, and solar89 are no longer distributed. + # They were a negative experiment - that is, a demonstration that + # tz data can represent solar time only with some difficulty and error. + # Their presence in the distribution caused confusion, as Riyadh + # civil time was generally not solar time in those years. + self.zonename.startswith('right/')): + self.skipTest("Skipping %s" % self.zonename) + tz = ZoneInfo.fromname(self.zonename) + TZ = os.environ.get('TZ') + os.environ['TZ'] = self.zonename + try: + _time.tzset() + for udt, shift in tz.transitions(): + if self.zonename == 'Europe/Tallinn' and udt.date() == date(1999, 10, 31): + print("Skip %s %s transition" % (self.zonename, udt)) + continue + s0 = (udt - datetime(1970, 1, 1)) // SEC + ss = shift // SEC # shift seconds + for x in [-40 * 3600, -20*3600, -1, 0, + ss - 1, ss + 20 * 3600, ss + 40 * 3600]: + s = s0 + x + sdt = datetime.fromtimestamp(s) + tzdt = datetime.fromtimestamp(s, tz).replace(tzinfo=None) + self.assertEquivDatetimes(sdt, tzdt) + s1 = sdt.timestamp() + self.assertEqual(s, s1) + if ss > 0: # gap + # Create local time inside the gap + dt = datetime.fromtimestamp(s0) - shift / 2 + ts0 = dt.timestamp() + ts1 = dt.replace(fold=1).timestamp() + self.assertEqual(ts0, s0 + ss / 2) + self.assertEqual(ts1, s0 - ss / 2) + finally: + if TZ is None: + del os.environ['TZ'] + else: + os.environ['TZ'] = TZ + _time.tzset() + + +class ZoneInfoCompleteTest(unittest.TestCase): + def test_all(self): + requires('tzdata', 'test requires tzdata and a long time to run') + for name in ZoneInfo.zonenames(): + class Test(ZoneInfoTest): + zonename = name + for suffix in ['folds', 'gaps', 'system_transitions']: + test = Test('test_' + suffix) + result = test.run() + self.assertTrue(result.wasSuccessful(), name + ' ' + suffix) + +# Iran had a sub-minute UTC offset before 1946. +class IranTest(ZoneInfoTest): + zonename = 'Iran' + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/libregrtest/cmdline.py b/Lib/test/libregrtest/cmdline.py --- a/Lib/test/libregrtest/cmdline.py +++ b/Lib/test/libregrtest/cmdline.py @@ -112,6 +112,8 @@ gui - Run tests that require a running GUI. + tzdata - Run tests that require timezone data. + To enable all resources except one, use '-uall,-'. For example, to run all the tests except for the gui tests, give the option '-uall,-gui'. @@ -119,7 +121,7 @@ RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', - 'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui') + 'decimal', 'cpu', 'subprocess', 'urlfetch', 'gui', 'tzdata') class _ArgParser(argparse.ArgumentParser): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,8 @@ Library ------- +- Issue #24773: Implemented PEP 495 (Local Time Disambiguation). + - Expose the EPOLLEXCLUSIVE constant (when it is defined) in the select module. - Issue #27567: Expose the EPOLLRDHUP and POLLRDHUP constants in the select diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -9,6 +9,12 @@ #ifdef MS_WINDOWS # include /* struct timeval */ +static struct tm *localtime_r(const time_t *timep, struct tm *result) +{ + if (localtime_s(result, timep) == 0) + return result; + return NULL; +} #endif /* Differentiate between building the core module and building extension @@ -56,6 +62,7 @@ #define DATE_GET_MINUTE PyDateTime_DATE_GET_MINUTE #define DATE_GET_SECOND PyDateTime_DATE_GET_SECOND #define DATE_GET_MICROSECOND PyDateTime_DATE_GET_MICROSECOND +#define DATE_GET_FOLD PyDateTime_DATE_GET_FOLD /* Date accessors for date and datetime. */ #define SET_YEAR(o, v) (((o)->data[0] = ((v) & 0xff00) >> 8), \ @@ -71,12 +78,14 @@ (((o)->data[7] = ((v) & 0xff0000) >> 16), \ ((o)->data[8] = ((v) & 0x00ff00) >> 8), \ ((o)->data[9] = ((v) & 0x0000ff))) +#define DATE_SET_FOLD(o, v) (PyDateTime_DATE_GET_FOLD(o) = (v)) /* Time accessors for time. */ #define TIME_GET_HOUR PyDateTime_TIME_GET_HOUR #define TIME_GET_MINUTE PyDateTime_TIME_GET_MINUTE #define TIME_GET_SECOND PyDateTime_TIME_GET_SECOND #define TIME_GET_MICROSECOND PyDateTime_TIME_GET_MICROSECOND +#define TIME_GET_FOLD PyDateTime_TIME_GET_FOLD #define TIME_SET_HOUR(o, v) (PyDateTime_TIME_GET_HOUR(o) = (v)) #define TIME_SET_MINUTE(o, v) (PyDateTime_TIME_GET_MINUTE(o) = (v)) #define TIME_SET_SECOND(o, v) (PyDateTime_TIME_GET_SECOND(o) = (v)) @@ -84,6 +93,7 @@ (((o)->data[3] = ((v) & 0xff0000) >> 16), \ ((o)->data[4] = ((v) & 0x00ff00) >> 8), \ ((o)->data[5] = ((v) & 0x0000ff))) +#define TIME_SET_FOLD(o, v) (PyDateTime_TIME_GET_FOLD(o) = (v)) /* Delta accessors for timedelta. */ #define GET_TD_DAYS(o) (((PyDateTime_Delta *)(o))->days) @@ -674,8 +684,8 @@ /* Create a datetime instance with no range checking. */ static PyObject * -new_datetime_ex(int year, int month, int day, int hour, int minute, - int second, int usecond, PyObject *tzinfo, PyTypeObject *type) +new_datetime_ex2(int year, int month, int day, int hour, int minute, + int second, int usecond, PyObject *tzinfo, int fold, PyTypeObject *type) { PyDateTime_DateTime *self; char aware = tzinfo != Py_None; @@ -692,18 +702,27 @@ Py_INCREF(tzinfo); self->tzinfo = tzinfo; } + DATE_SET_FOLD(self, fold); } return (PyObject *)self; } -#define new_datetime(y, m, d, hh, mm, ss, us, tzinfo) \ - new_datetime_ex(y, m, d, hh, mm, ss, us, tzinfo, \ +static PyObject * +new_datetime_ex(int year, int month, int day, int hour, int minute, + int second, int usecond, PyObject *tzinfo, PyTypeObject *type) +{ + return new_datetime_ex2(year, month, day, hour, minute, second, usecond, + tzinfo, 0, type); +} + +#define new_datetime(y, m, d, hh, mm, ss, us, tzinfo, fold) \ + new_datetime_ex2(y, m, d, hh, mm, ss, us, tzinfo, fold, \ &PyDateTime_DateTimeType) /* Create a time instance with no range checking. */ static PyObject * -new_time_ex(int hour, int minute, int second, int usecond, - PyObject *tzinfo, PyTypeObject *type) +new_time_ex2(int hour, int minute, int second, int usecond, + PyObject *tzinfo, int fold, PyTypeObject *type) { PyDateTime_Time *self; char aware = tzinfo != Py_None; @@ -720,12 +739,20 @@ Py_INCREF(tzinfo); self->tzinfo = tzinfo; } + TIME_SET_FOLD(self, fold); } return (PyObject *)self; } -#define new_time(hh, mm, ss, us, tzinfo) \ - new_time_ex(hh, mm, ss, us, tzinfo, &PyDateTime_TimeType) +static PyObject * +new_time_ex(int hour, int minute, int second, int usecond, + PyObject *tzinfo, PyTypeObject *type) +{ + return new_time_ex2(hour, minute, second, usecond, tzinfo, 0, type); +} + +#define new_time(hh, mm, ss, us, tzinfo, fold) \ + new_time_ex2(hh, mm, ss, us, tzinfo, fold, &PyDateTime_TimeType) /* Create a timedelta instance. Normalize the members iff normalize is * true. Passing false is a speed optimization, if you know for sure @@ -887,10 +914,10 @@ if (offset == Py_None || offset == NULL) return offset; if (PyDelta_Check(offset)) { - if (GET_TD_MICROSECONDS(offset) != 0 || GET_TD_SECONDS(offset) % 60 != 0) { + if (GET_TD_MICROSECONDS(offset) != 0) { Py_DECREF(offset); PyErr_Format(PyExc_ValueError, "offset must be a timedelta" - " representing a whole number of minutes"); + " representing a whole number of seconds"); return NULL; } if ((GET_TD_DAYS(offset) == -1 && GET_TD_SECONDS(offset) == 0) || @@ -1002,6 +1029,30 @@ return repr; } +/* repr is like "someclass(arg1, arg2)". If fold isn't 0, + * stuff + * ", fold=" + repr(tzinfo) + * before the closing ")". + */ +static PyObject * +append_keyword_fold(PyObject *repr, int fold) +{ + PyObject *temp; + + assert(PyUnicode_Check(repr)); + if (fold == 0) + return repr; + /* Get rid of the trailing ')'. */ + assert(PyUnicode_READ_CHAR(repr, PyUnicode_GET_LENGTH(repr)-1) == ')'); + temp = PyUnicode_Substring(repr, 0, PyUnicode_GET_LENGTH(repr) - 1); + Py_DECREF(repr); + if (temp == NULL) + return NULL; + repr = PyUnicode_FromFormat("%U, fold=%d)", temp, fold); + Py_DECREF(temp); + return repr; +} + /* --------------------------------------------------------------------------- * String format helpers. */ @@ -1070,10 +1121,11 @@ Py_DECREF(offset); minutes = divmod(seconds, 60, &seconds); hours = divmod(minutes, 60, &minutes); - assert(seconds == 0); - /* XXX ignore sub-minute data, currently not allowed. */ - PyOS_snprintf(buf, buflen, "%c%02d%s%02d", sign, hours, sep, minutes); - + if (seconds == 0) + PyOS_snprintf(buf, buflen, "%c%02d%s%02d", sign, hours, sep, minutes); + else + PyOS_snprintf(buf, buflen, "%c%02d%s%02d%s%02d", sign, hours, + sep, minutes, sep, seconds); return 0; } @@ -3467,12 +3519,19 @@ return result; } +static PyObject * +time_fold(PyDateTime_Time *self, void *unused) +{ + return PyLong_FromLong(TIME_GET_FOLD(self)); +} + static PyGetSetDef time_getset[] = { {"hour", (getter)time_hour}, {"minute", (getter)time_minute}, {"second", (getter)py_time_second}, {"microsecond", (getter)time_microsecond}, - {"tzinfo", (getter)time_tzinfo}, + {"tzinfo", (getter)time_tzinfo}, + {"fold", (getter)time_fold}, {NULL} }; @@ -3481,7 +3540,7 @@ */ static char *time_kws[] = {"hour", "minute", "second", "microsecond", - "tzinfo", NULL}; + "tzinfo", "fold", NULL}; static PyObject * time_new(PyTypeObject *type, PyObject *args, PyObject *kw) @@ -3493,13 +3552,14 @@ int second = 0; int usecond = 0; PyObject *tzinfo = Py_None; + int fold = 0; /* Check for invocation from pickle with __getstate__ state */ if (PyTuple_GET_SIZE(args) >= 1 && PyTuple_GET_SIZE(args) <= 2 && PyBytes_Check(state = PyTuple_GET_ITEM(args, 0)) && PyBytes_GET_SIZE(state) == _PyDateTime_TIME_DATASIZE && - ((unsigned char) (PyBytes_AS_STRING(state)[0])) < 24) + (0x7F & ((unsigned char) (PyBytes_AS_STRING(state)[0]))) < 24) { PyDateTime_Time *me; char aware; @@ -3524,19 +3584,26 @@ Py_INCREF(tzinfo); me->tzinfo = tzinfo; } + if (pdata[0] & (1 << 7)) { + me->data[0] -= 128; + me->fold = 1; + } + else { + me->fold = 0; + } } return (PyObject *)me; } - if (PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO", time_kws, + if (PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO$i", time_kws, &hour, &minute, &second, &usecond, - &tzinfo)) { + &tzinfo, &fold)) { if (check_time_args(hour, minute, second, usecond) < 0) return NULL; if (check_tzinfo_subclass(tzinfo) < 0) return NULL; - self = new_time_ex(hour, minute, second, usecond, tzinfo, - type); + self = new_time_ex2(hour, minute, second, usecond, tzinfo, fold, + type); } return self; } @@ -3586,6 +3653,7 @@ int m = TIME_GET_MINUTE(self); int s = TIME_GET_SECOND(self); int us = TIME_GET_MICROSECOND(self); + int fold = TIME_GET_FOLD(self); PyObject *result = NULL; if (us) @@ -3598,6 +3666,8 @@ result = PyUnicode_FromFormat("%s(%d, %d)", type_name, h, m); if (result != NULL && HASTZINFO(self)) result = append_keyword_tzinfo(result, self->tzinfo); + if (result != NULL && fold) + result = append_keyword_fold(result, fold); return result; } @@ -3784,9 +3854,23 @@ time_hash(PyDateTime_Time *self) { if (self->hashcode == -1) { - PyObject *offset; - - offset = time_utcoffset((PyObject *)self, NULL); + PyObject *offset, *self0; + if (DATE_GET_FOLD(self)) { + self0 = new_time_ex2(DATE_GET_HOUR(self), + DATE_GET_MINUTE(self), + DATE_GET_SECOND(self), + DATE_GET_MICROSECOND(self), + HASTZINFO(self) ? self->tzinfo : Py_None, + 0, Py_TYPE(self)); + if (self0 == NULL) + return -1; + } + else { + self0 = (PyObject *)self; + Py_INCREF(self0); + } + offset = time_utcoffset(self0, NULL); + Py_DECREF(self0); if (offset == NULL) return -1; @@ -3832,15 +3916,18 @@ int ss = TIME_GET_SECOND(self); int us = TIME_GET_MICROSECOND(self); PyObject *tzinfo = HASTZINFO(self) ? self->tzinfo : Py_None; - - if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO:replace", + int fold = TIME_GET_FOLD(self); + + if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiO$i:replace", time_kws, - &hh, &mm, &ss, &us, &tzinfo)) + &hh, &mm, &ss, &us, &tzinfo, &fold)) return NULL; tuple = Py_BuildValue("iiiiO", hh, mm, ss, us, tzinfo); if (tuple == NULL) return NULL; clone = time_new(Py_TYPE(self), tuple, NULL); + if (clone != NULL) + TIME_SET_FOLD(clone, fold); Py_DECREF(tuple); return clone; } @@ -3853,7 +3940,7 @@ * __getstate__ isn't exposed. */ static PyObject * -time_getstate(PyDateTime_Time *self) +time_getstate(PyDateTime_Time *self, int proto) { PyObject *basestate; PyObject *result = NULL; @@ -3861,6 +3948,9 @@ basestate = PyBytes_FromStringAndSize((char *)self->data, _PyDateTime_TIME_DATASIZE); if (basestate != NULL) { + if (proto > 3 && TIME_GET_FOLD(self)) + /* Set the first bit of the first byte */ + PyBytes_AS_STRING(basestate)[0] |= (1 << 7); if (! HASTZINFO(self) || self->tzinfo == Py_None) result = PyTuple_Pack(1, basestate); else @@ -3871,9 +3961,13 @@ } static PyObject * -time_reduce(PyDateTime_Time *self, PyObject *arg) -{ - return Py_BuildValue("(ON)", Py_TYPE(self), time_getstate(self)); +time_reduce(PyDateTime_Time *self, PyObject *args) +{ + int proto = 0; + if (!PyArg_ParseTuple(args, "|i:__reduce_ex__", &proto)) + return NULL; + + return Py_BuildValue("(ON)", Py_TYPE(self), time_getstate(self, proto)); } static PyMethodDef time_methods[] = { @@ -3901,8 +3995,8 @@ {"replace", (PyCFunction)time_replace, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("Return time with new specified fields.")}, - {"__reduce__", (PyCFunction)time_reduce, METH_NOARGS, - PyDoc_STR("__reduce__() -> (cls, state)")}, + {"__reduce_ex__", (PyCFunction)time_reduce, METH_VARARGS, + PyDoc_STR("__reduce_ex__(proto) -> (cls, state)")}, {NULL, NULL} }; @@ -3995,12 +4089,19 @@ return result; } +static PyObject * +datetime_fold(PyDateTime_DateTime *self, void *unused) +{ + return PyLong_FromLong(DATE_GET_FOLD(self)); +} + static PyGetSetDef datetime_getset[] = { {"hour", (getter)datetime_hour}, {"minute", (getter)datetime_minute}, {"second", (getter)datetime_second}, {"microsecond", (getter)datetime_microsecond}, - {"tzinfo", (getter)datetime_tzinfo}, + {"tzinfo", (getter)datetime_tzinfo}, + {"fold", (getter)datetime_fold}, {NULL} }; @@ -4010,7 +4111,7 @@ static char *datetime_kws[] = { "year", "month", "day", "hour", "minute", "second", - "microsecond", "tzinfo", NULL + "microsecond", "tzinfo", "fold", NULL }; static PyObject * @@ -4025,6 +4126,7 @@ int minute = 0; int second = 0; int usecond = 0; + int fold = 0; PyObject *tzinfo = Py_None; /* Check for invocation from pickle with __getstate__ state */ @@ -4032,7 +4134,7 @@ PyTuple_GET_SIZE(args) <= 2 && PyBytes_Check(state = PyTuple_GET_ITEM(args, 0)) && PyBytes_GET_SIZE(state) == _PyDateTime_DATETIME_DATASIZE && - MONTH_IS_SANE(PyBytes_AS_STRING(state)[2])) + MONTH_IS_SANE(PyBytes_AS_STRING(state)[2] & 0x7F)) { PyDateTime_DateTime *me; char aware; @@ -4057,22 +4159,29 @@ Py_INCREF(tzinfo); me->tzinfo = tzinfo; } + if (pdata[2] & (1 << 7)) { + me->data[2] -= 128; + me->fold = 1; + } + else { + me->fold = 0; + } } return (PyObject *)me; } - if (PyArg_ParseTupleAndKeywords(args, kw, "iii|iiiiO", datetime_kws, + if (PyArg_ParseTupleAndKeywords(args, kw, "iii|iiiiO$i", datetime_kws, &year, &month, &day, &hour, &minute, - &second, &usecond, &tzinfo)) { + &second, &usecond, &tzinfo, &fold)) { if (check_date_args(year, month, day) < 0) return NULL; if (check_time_args(hour, minute, second, usecond) < 0) return NULL; if (check_tzinfo_subclass(tzinfo) < 0) return NULL; - self = new_datetime_ex(year, month, day, + self = new_datetime_ex2(year, month, day, hour, minute, second, usecond, - tzinfo, type); + tzinfo, fold, type); } return self; } @@ -4080,6 +4189,38 @@ /* TM_FUNC is the shared type of localtime() and gmtime(). */ typedef struct tm *(*TM_FUNC)(const time_t *timer); +/* As of version 2015f max fold in IANA database is + * 23 hours at 1969-09-30 13:00:00 in Kwajalein. */ +static PY_LONG_LONG max_fold_seconds = 24 * 3600; +/* NB: date(1970,1,1).toordinal() == 719163 */ +static PY_LONG_LONG epoch = Py_LL(719163) * 24 * 60 * 60; + +static PY_LONG_LONG +utc_to_seconds(int year, int month, int day, + int hour, int minute, int second) +{ + PY_LONG_LONG ordinal = ymd_to_ord(year, month, day); + return ((ordinal * 24 + hour) * 60 + minute) * 60 + second; +} + +static PY_LONG_LONG +local(PY_LONG_LONG u) +{ + struct tm local_time; + time_t t = u - epoch; + /* XXX: add bounds checking */ + if (localtime_r(&t, &local_time) == NULL) { + PyErr_SetFromErrno(PyExc_OSError); + return -1; + } + return utc_to_seconds(local_time.tm_year + 1900, + local_time.tm_mon + 1, + local_time.tm_mday, + local_time.tm_hour, + local_time.tm_min, + local_time.tm_sec); +} + /* Internal helper. * Build datetime from a time_t and a distinct count of microseconds. * Pass localtime or gmtime for f, to control the interpretation of timet. @@ -4089,6 +4230,7 @@ PyObject *tzinfo) { struct tm *tm; + int year, month, day, hour, minute, second, fold = 0; tm = f(&timet); if (tm == NULL) { @@ -4099,23 +4241,40 @@ return PyErr_SetFromErrno(PyExc_OSError); } + year = tm->tm_year + 1900; + month = tm->tm_mon + 1; + day = tm->tm_mday; + hour = tm->tm_hour; + minute = tm->tm_min; /* The platform localtime/gmtime may insert leap seconds, * indicated by tm->tm_sec > 59. We don't care about them, * except to the extent that passing them on to the datetime * constructor would raise ValueError for a reason that * made no sense to the user. */ - if (tm->tm_sec > 59) - tm->tm_sec = 59; - return PyObject_CallFunction(cls, "iiiiiiiO", - tm->tm_year + 1900, - tm->tm_mon + 1, - tm->tm_mday, - tm->tm_hour, - tm->tm_min, - tm->tm_sec, - us, - tzinfo); + second = Py_MIN(59, tm->tm_sec); + + if (tzinfo == Py_None && f == localtime) { + PY_LONG_LONG probe_seconds, result_seconds, transition; + + result_seconds = utc_to_seconds(year, month, day, + hour, minute, second); + /* Probe max_fold_seconds to detect a fold. */ + probe_seconds = local(epoch + timet - max_fold_seconds); + if (probe_seconds == -1) + return NULL; + transition = result_seconds - probe_seconds - max_fold_seconds; + if (transition < 0) { + probe_seconds = local(epoch + timet + transition); + if (probe_seconds == -1) + return NULL; + if (probe_seconds == result_seconds) + fold = 1; + } + } + return new_datetime_ex2(year, month, day, hour, + minute, second, us, tzinfo, fold, + (PyTypeObject *)cls); } /* Internal helper. @@ -4285,6 +4444,7 @@ TIME_GET_SECOND(time), TIME_GET_MICROSECOND(time), tzinfo); + DATE_SET_FOLD(result, TIME_GET_FOLD(time)); } return result; } @@ -4352,7 +4512,7 @@ else return new_datetime(year, month, day, hour, minute, second, microsecond, - HASTZINFO(date) ? date->tzinfo : Py_None); + HASTZINFO(date) ? date->tzinfo : Py_None, 0); } static PyObject * @@ -4495,6 +4655,8 @@ GET_YEAR(self), GET_MONTH(self), GET_DAY(self), DATE_GET_HOUR(self), DATE_GET_MINUTE(self)); } + if (baserepr != NULL && DATE_GET_FOLD(self) != 0) + baserepr = append_keyword_fold(baserepr, DATE_GET_FOLD(self)); if (baserepr == NULL || ! HASTZINFO(self)) return baserepr; return append_keyword_tzinfo(baserepr, self->tzinfo); @@ -4585,6 +4747,70 @@ /* Miscellaneous methods. */ static PyObject * +flip_fold(PyObject *dt) +{ + return new_datetime_ex2(GET_YEAR(dt), + GET_MONTH(dt), + GET_DAY(dt), + DATE_GET_HOUR(dt), + DATE_GET_MINUTE(dt), + DATE_GET_SECOND(dt), + DATE_GET_MICROSECOND(dt), + HASTZINFO(dt) ? + ((PyDateTime_DateTime *)dt)->tzinfo : Py_None, + !DATE_GET_FOLD(dt), + Py_TYPE(dt)); +} + +static PyObject * +get_flip_fold_offset(PyObject *dt) +{ + PyObject *result, *flip_dt; + + flip_dt = flip_fold(dt); + if (flip_dt == NULL) + return NULL; + result = datetime_utcoffset(flip_dt, NULL); + Py_DECREF(flip_dt); + return result; +} + +/* PEP 495 exception: Whenever one or both of the operands in + * inter-zone comparison is such that its utcoffset() depends + * on the value of its fold fold attribute, the result is False. + * + * Return 1 if exception applies, 0 if not, and -1 on error. + */ +static int +pep495_eq_exception(PyObject *self, PyObject *other, + PyObject *offset_self, PyObject *offset_other) +{ + int result = 0; + PyObject *flip_offset; + + flip_offset = get_flip_fold_offset(self); + if (flip_offset == NULL) + return -1; + if (flip_offset != offset_self && + delta_cmp(flip_offset, offset_self)) + { + result = 1; + goto done; + } + Py_DECREF(flip_offset); + + flip_offset = get_flip_fold_offset(other); + if (flip_offset == NULL) + return -1; + if (flip_offset != offset_other && + delta_cmp(flip_offset, offset_other)) + result = 1; + done: + Py_DECREF(flip_offset); + return result; +} + +static PyObject * datetime_richcompare(PyObject *self, PyObject *other, int op) { PyObject *result = NULL; @@ -4631,6 +4857,13 @@ diff = memcmp(((PyDateTime_DateTime *)self)->data, ((PyDateTime_DateTime *)other)->data, _PyDateTime_DATETIME_DATASIZE); + if ((op == Py_EQ || op == Py_NE) && diff == 0) { + int ex = pep495_eq_exception(self, other, offset1, offset2); + if (ex == -1) + goto done; + if (ex) + diff = 1; + } result = diff_to_bool(diff, op); } else if (offset1 != Py_None && offset2 != Py_None) { @@ -4646,6 +4879,13 @@ diff = GET_TD_SECONDS(delta) | GET_TD_MICROSECONDS(delta); Py_DECREF(delta); + if ((op == Py_EQ || op == Py_NE) && diff == 0) { + int ex = pep495_eq_exception(self, other, offset1, offset2); + if (ex == -1) + goto done; + if (ex) + diff = 1; + } result = diff_to_bool(diff, op); } else if (op == Py_EQ) { @@ -4671,9 +4911,26 @@ datetime_hash(PyDateTime_DateTime *self) { if (self->hashcode == -1) { - PyObject *offset; - - offset = datetime_utcoffset((PyObject *)self, NULL); + PyObject *offset, *self0; + if (DATE_GET_FOLD(self)) { + self0 = new_datetime_ex2(GET_YEAR(self), + GET_MONTH(self), + GET_DAY(self), + DATE_GET_HOUR(self), + DATE_GET_MINUTE(self), + DATE_GET_SECOND(self), + DATE_GET_MICROSECOND(self), + HASTZINFO(self) ? self->tzinfo : Py_None, + 0, Py_TYPE(self)); + if (self0 == NULL) + return -1; + } + else { + self0 = (PyObject *)self; + Py_INCREF(self0); + } + offset = datetime_utcoffset(self0, NULL); + Py_DECREF(self0); if (offset == NULL) return -1; @@ -4727,76 +4984,71 @@ int ss = DATE_GET_SECOND(self); int us = DATE_GET_MICROSECOND(self); PyObject *tzinfo = HASTZINFO(self) ? self->tzinfo : Py_None; - - if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiiiiO:replace", + int fold = DATE_GET_FOLD(self); + + if (! PyArg_ParseTupleAndKeywords(args, kw, "|iiiiiiiO$i:replace", datetime_kws, &y, &m, &d, &hh, &mm, &ss, &us, - &tzinfo)) + &tzinfo, &fold)) return NULL; tuple = Py_BuildValue("iiiiiiiO", y, m, d, hh, mm, ss, us, tzinfo); if (tuple == NULL) return NULL; clone = datetime_new(Py_TYPE(self), tuple, NULL); + if (clone != NULL) + DATE_SET_FOLD(clone, fold); Py_DECREF(tuple); return clone; } static PyObject * -local_timezone(PyDateTime_DateTime *utc_time) +local_timezone_from_timestamp(time_t timestamp) { PyObject *result = NULL; - struct tm *timep; - time_t timestamp; PyObject *delta; - PyObject *one_second; - PyObject *seconds; + struct tm *local_time_tm; PyObject *nameo = NULL; const char *zone = NULL; - delta = new_delta(ymd_to_ord(GET_YEAR(utc_time), GET_MONTH(utc_time), - GET_DAY(utc_time)) - 719163, - 60 * (60 * DATE_GET_HOUR(utc_time) + - DATE_GET_MINUTE(utc_time)) + - DATE_GET_SECOND(utc_time), - 0, 0); - if (delta == NULL) - return NULL; - one_second = new_delta(0, 1, 0, 0); - if (one_second == NULL) - goto error; - seconds = divide_timedelta_timedelta((PyDateTime_Delta *)delta, - (PyDateTime_Delta *)one_second); - Py_DECREF(one_second); - if (seconds == NULL) - goto error; - Py_DECREF(delta); - timestamp = _PyLong_AsTime_t(seconds); - Py_DECREF(seconds); - if (timestamp == -1 && PyErr_Occurred()) - return NULL; - timep = localtime(×tamp); + local_time_tm = localtime(×tamp); #ifdef HAVE_STRUCT_TM_TM_ZONE - zone = timep->tm_zone; - delta = new_delta(0, timep->tm_gmtoff, 0, 1); + zone = local_time_tm->tm_zone; + delta = new_delta(0, local_time_tm->tm_gmtoff, 0, 1); #else /* HAVE_STRUCT_TM_TM_ZONE */ { - PyObject *local_time; - local_time = new_datetime(timep->tm_year + 1900, timep->tm_mon + 1, - timep->tm_mday, timep->tm_hour, timep->tm_min, - timep->tm_sec, DATE_GET_MICROSECOND(utc_time), - utc_time->tzinfo); - if (local_time == NULL) - goto error; - delta = datetime_subtract(local_time, (PyObject*)utc_time); - /* XXX: before relying on tzname, we should compare delta - to the offset implied by timezone/altzone */ - if (daylight && timep->tm_isdst >= 0) - zone = tzname[timep->tm_isdst % 2]; - else - zone = tzname[0]; + PyObject *local_time, *utc_time; + struct tm *utc_time_tm; + char buf[100]; + strftime(buf, sizeof(buf), "%Z", local_time_tm); + zone = buf; + local_time = new_datetime(local_time_tm->tm_year + 1900, + local_time_tm->tm_mon + 1, + local_time_tm->tm_mday, + local_time_tm->tm_hour, + local_time_tm->tm_min, + local_time_tm->tm_sec, 0, Py_None, 0); + if (local_time == NULL) { + return NULL; + } + utc_time_tm = gmtime(×tamp); + utc_time = new_datetime(utc_time_tm->tm_year + 1900, + utc_time_tm->tm_mon + 1, + utc_time_tm->tm_mday, + utc_time_tm->tm_hour, + utc_time_tm->tm_min, + utc_time_tm->tm_sec, 0, Py_None, 0); + if (utc_time == NULL) { + Py_DECREF(local_time); + return NULL; + } + delta = datetime_subtract(local_time, utc_time); Py_DECREF(local_time); + Py_DECREF(utc_time); } #endif /* HAVE_STRUCT_TM_TM_ZONE */ + if (delta == NULL) { + return NULL; + } if (zone != NULL) { nameo = PyUnicode_DecodeLocale(zone, "surrogateescape"); if (nameo == NULL) @@ -4809,12 +5061,65 @@ return result; } +static PyObject * +local_timezone(PyDateTime_DateTime *utc_time) +{ + time_t timestamp; + PyObject *delta; + PyObject *one_second; + PyObject *seconds; + + delta = datetime_subtract((PyObject *)utc_time, PyDateTime_Epoch); + if (delta == NULL) + return NULL; + one_second = new_delta(0, 1, 0, 0); + if (one_second == NULL) { + Py_DECREF(delta); + return NULL; + } + seconds = divide_timedelta_timedelta((PyDateTime_Delta *)delta, + (PyDateTime_Delta *)one_second); + Py_DECREF(one_second); + Py_DECREF(delta); + if (seconds == NULL) + return NULL; + timestamp = _PyLong_AsTime_t(seconds); + Py_DECREF(seconds); + if (timestamp == -1 && PyErr_Occurred()) + return NULL; + return local_timezone_from_timestamp(timestamp); +} + +static PY_LONG_LONG +local_to_seconds(int year, int month, int day, + int hour, int minute, int second, int fold); + +static PyObject * +local_timezone_from_local(PyDateTime_DateTime *local_dt) +{ + PY_LONG_LONG seconds; + time_t timestamp; + seconds = local_to_seconds(GET_YEAR(local_dt), + GET_MONTH(local_dt), + GET_DAY(local_dt), + DATE_GET_HOUR(local_dt), + DATE_GET_MINUTE(local_dt), + DATE_GET_SECOND(local_dt), + DATE_GET_FOLD(local_dt)); + if (seconds == -1) + return NULL; + /* XXX: add bounds check */ + timestamp = seconds - epoch; + return local_timezone_from_timestamp(timestamp); +} + static PyDateTime_DateTime * datetime_astimezone(PyDateTime_DateTime *self, PyObject *args, PyObject *kw) { PyDateTime_DateTime *result; PyObject *offset; PyObject *temp; + PyObject *self_tzinfo; PyObject *tzinfo = Py_None; static char *keywords[] = {"tz", NULL}; @@ -4825,27 +5130,27 @@ if (check_tzinfo_subclass(tzinfo) == -1) return NULL; - if (!HASTZINFO(self) || self->tzinfo == Py_None) - goto NeedAware; + if (!HASTZINFO(self) || self->tzinfo == Py_None) { + self_tzinfo = local_timezone_from_local(self); + if (self_tzinfo == NULL) + return NULL; + } else { + self_tzinfo = self->tzinfo; + Py_INCREF(self_tzinfo); + } /* Conversion to self's own time zone is a NOP. */ - if (self->tzinfo == tzinfo) { + if (self_tzinfo == tzinfo) { + Py_DECREF(self_tzinfo); Py_INCREF(self); return self; } /* Convert self to UTC. */ - offset = datetime_utcoffset((PyObject *)self, NULL); + offset = call_utcoffset(self_tzinfo, (PyObject *)self); + Py_DECREF(self_tzinfo); if (offset == NULL) return NULL; - if (offset == Py_None) { - Py_DECREF(offset); - NeedAware: - PyErr_SetString(PyExc_ValueError, "astimezone() cannot be applied to " - "a naive datetime"); - return NULL; - } - /* result = self - offset */ result = (PyDateTime_DateTime *)add_datetime_timedelta(self, (PyDateTime_Delta *)offset, -1); @@ -4853,6 +5158,32 @@ if (result == NULL) return NULL; + /* Make sure result is aware and UTC. */ + if (!HASTZINFO(result)) { + temp = (PyObject *)result; + result = (PyDateTime_DateTime *) + new_datetime_ex2(GET_YEAR(result), + GET_MONTH(result), + GET_DAY(result), + DATE_GET_HOUR(result), + DATE_GET_MINUTE(result), + DATE_GET_SECOND(result), + DATE_GET_MICROSECOND(result), + PyDateTime_TimeZone_UTC, + DATE_GET_FOLD(result), + Py_TYPE(result)); + Py_DECREF(temp); + if (result == NULL) + return NULL; + } + else { + /* Result is already aware - just replace tzinfo. */ + temp = result->tzinfo; + result->tzinfo = PyDateTime_TimeZone_UTC; + Py_INCREF(result->tzinfo); + Py_DECREF(temp); + } + /* Attach new tzinfo and let fromutc() do the rest. */ temp = result->tzinfo; if (tzinfo == Py_None) { @@ -4900,6 +5231,56 @@ dstflag); } +static PY_LONG_LONG +local_to_seconds(int year, int month, int day, + int hour, int minute, int second, int fold) +{ + PY_LONG_LONG t, a, b, u1, u2, t1, t2, lt; + t = utc_to_seconds(year, month, day, hour, minute, second); + /* Our goal is to solve t = local(u) for u. */ + lt = local(t); + if (lt == -1) + return -1; + a = lt - t; + u1 = t - a; + t1 = local(u1); + if (t1 == -1) + return -1; + if (t1 == t) { + /* We found one solution, but it may not be the one we need. + * Look for an earlier solution (if `fold` is 0), or a + * later one (if `fold` is 1). */ + if (fold) + u2 = u1 + max_fold_seconds; + else + u2 = u1 - max_fold_seconds; + lt = local(u2); + if (lt == -1) + return -1; + b = lt - u2; + if (a == b) + return u1; + } + else { + b = t1 - u1; + assert(a != b); + } + u2 = t - b; + t2 = local(u2); + if (t2 == -1) + return -1; + if (t2 == t) + return u2; + if (t1 == t) + return u1; + /* We have found both offsets a and b, but neither t - a nor t - b is + * a solution. This means t is in the gap. */ + return fold?Py_MIN(u1, u2):Py_MAX(u1, u2); +} + +/* date(1970,1,1).toordinal() == 719163 */ +#define EPOCH_SECONDS (719163LL * 24 * 60 * 60) + static PyObject * datetime_timestamp(PyDateTime_DateTime *self) { @@ -4914,33 +5295,18 @@ Py_DECREF(delta); } else { - struct tm time; - time_t timestamp; - memset((void *) &time, '\0', sizeof(struct tm)); - time.tm_year = GET_YEAR(self) - 1900; - time.tm_mon = GET_MONTH(self) - 1; - time.tm_mday = GET_DAY(self); - time.tm_hour = DATE_GET_HOUR(self); - time.tm_min = DATE_GET_MINUTE(self); - time.tm_sec = DATE_GET_SECOND(self); - time.tm_wday = -1; - time.tm_isdst = -1; - timestamp = mktime(&time); - if (timestamp == (time_t)(-1) -#ifndef _AIX - /* Return value of -1 does not necessarily mean an error, - * but tm_wday cannot remain set to -1 if mktime succeeded. */ - && time.tm_wday == -1 -#else - /* on AIX, tm_wday is always sets, even on error */ -#endif - ) - { - PyErr_SetString(PyExc_OverflowError, - "timestamp out of range"); + PY_LONG_LONG seconds; + seconds = local_to_seconds(GET_YEAR(self), + GET_MONTH(self), + GET_DAY(self), + DATE_GET_HOUR(self), + DATE_GET_MINUTE(self), + DATE_GET_SECOND(self), + DATE_GET_FOLD(self)); + if (seconds == -1) return NULL; - } - result = PyFloat_FromDouble(timestamp + DATE_GET_MICROSECOND(self) / 1e6); + result = PyFloat_FromDouble(seconds - EPOCH_SECONDS + + DATE_GET_MICROSECOND(self) / 1e6); } return result; } @@ -4960,7 +5326,8 @@ DATE_GET_MINUTE(self), DATE_GET_SECOND(self), DATE_GET_MICROSECOND(self), - Py_None); + Py_None, + DATE_GET_FOLD(self)); } static PyObject * @@ -4970,7 +5337,8 @@ DATE_GET_MINUTE(self), DATE_GET_SECOND(self), DATE_GET_MICROSECOND(self), - GET_DT_TZINFO(self)); + GET_DT_TZINFO(self), + DATE_GET_FOLD(self)); } static PyObject * @@ -5022,7 +5390,7 @@ * __getstate__ isn't exposed. */ static PyObject * -datetime_getstate(PyDateTime_DateTime *self) +datetime_getstate(PyDateTime_DateTime *self, int proto) { PyObject *basestate; PyObject *result = NULL; @@ -5030,6 +5398,9 @@ basestate = PyBytes_FromStringAndSize((char *)self->data, _PyDateTime_DATETIME_DATASIZE); if (basestate != NULL) { + if (proto > 3 && DATE_GET_FOLD(self)) + /* Set the first bit of the third byte */ + PyBytes_AS_STRING(basestate)[2] |= (1 << 7); if (! HASTZINFO(self) || self->tzinfo == Py_None) result = PyTuple_Pack(1, basestate); else @@ -5040,9 +5411,13 @@ } static PyObject * -datetime_reduce(PyDateTime_DateTime *self, PyObject *arg) -{ - return Py_BuildValue("(ON)", Py_TYPE(self), datetime_getstate(self)); +datetime_reduce(PyDateTime_DateTime *self, PyObject *args) +{ + int proto = 0; + if (!PyArg_ParseTuple(args, "|i:__reduce_ex__", &proto)) + return NULL; + + return Py_BuildValue("(ON)", Py_TYPE(self), datetime_getstate(self, proto)); } static PyMethodDef datetime_methods[] = { @@ -5119,8 +5494,8 @@ {"astimezone", (PyCFunction)datetime_astimezone, METH_VARARGS | METH_KEYWORDS, PyDoc_STR("tz -> convert to local time in new timezone tz\n")}, - {"__reduce__", (PyCFunction)datetime_reduce, METH_NOARGS, - PyDoc_STR("__reduce__() -> (cls, state)")}, + {"__reduce_ex__", (PyCFunction)datetime_reduce, METH_VARARGS, + PyDoc_STR("__reduce_ex__(proto) -> (cls, state)")}, {NULL, NULL} }; @@ -5208,7 +5583,9 @@ new_time_ex, new_delta_ex, datetime_fromtimestamp, - date_fromtimestamp + date_fromtimestamp, + new_datetime_ex2, + new_time_ex2 }; @@ -5289,12 +5666,12 @@ /* time values */ d = PyDateTime_TimeType.tp_dict; - x = new_time(0, 0, 0, 0, Py_None); + x = new_time(0, 0, 0, 0, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "min", x) < 0) return NULL; Py_DECREF(x); - x = new_time(23, 59, 59, 999999, Py_None); + x = new_time(23, 59, 59, 999999, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "max", x) < 0) return NULL; Py_DECREF(x); @@ -5307,12 +5684,12 @@ /* datetime values */ d = PyDateTime_DateTimeType.tp_dict; - x = new_datetime(1, 1, 1, 0, 0, 0, 0, Py_None); + x = new_datetime(1, 1, 1, 0, 0, 0, 0, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "min", x) < 0) return NULL; Py_DECREF(x); - x = new_datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, Py_None); + x = new_datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, Py_None, 0); if (x == NULL || PyDict_SetItemString(d, "max", x) < 0) return NULL; Py_DECREF(x); @@ -5354,7 +5731,7 @@ /* Epoch */ PyDateTime_Epoch = new_datetime(1970, 1, 1, 0, 0, 0, 0, - PyDateTime_TimeZone_UTC); + PyDateTime_TimeZone_UTC, 0); if (PyDateTime_Epoch == NULL) return NULL; diff --git a/Tools/tz/zdump.py b/Tools/tz/zdump.py new file mode 100644 --- /dev/null +++ b/Tools/tz/zdump.py @@ -0,0 +1,81 @@ +import sys +import os +import struct +from array import array +from collections import namedtuple +from datetime import datetime, timedelta + +ttinfo = namedtuple('ttinfo', ['tt_gmtoff', 'tt_isdst', 'tt_abbrind']) + +class TZInfo: + def __init__(self, transitions, type_indices, ttis, abbrs): + self.transitions = transitions + self.type_indices = type_indices + self.ttis = ttis + self.abbrs = abbrs + + @classmethod + def fromfile(cls, fileobj): + if fileobj.read(4).decode() != "TZif": + raise ValueError("not a zoneinfo file") + fileobj.seek(20) + header = fileobj.read(24) + tzh = (tzh_ttisgmtcnt, tzh_ttisstdcnt, tzh_leapcnt, + tzh_timecnt, tzh_typecnt, tzh_charcnt) = struct.unpack(">6l", header) + transitions = array('i') + transitions.fromfile(fileobj, tzh_timecnt) + if sys.byteorder != 'big': + transitions.byteswap() + + type_indices = array('B') + type_indices.fromfile(fileobj, tzh_timecnt) + + ttis = [] + for i in range(tzh_typecnt): + ttis.append(ttinfo._make(struct.unpack(">lbb", fileobj.read(6)))) + + abbrs = fileobj.read(tzh_charcnt) + + self = cls(transitions, type_indices, ttis, abbrs) + self.tzh = tzh + + return self + + def dump(self, stream, start=None, end=None): + for j, (trans, i) in enumerate(zip(self.transitions, self.type_indices)): + utc = datetime.utcfromtimestamp(trans) + tti = self.ttis[i] + lmt = datetime.utcfromtimestamp(trans + tti.tt_gmtoff) + abbrind = tti.tt_abbrind + abbr = self.abbrs[abbrind:self.abbrs.find(0, abbrind)].decode() + if j > 0: + prev_tti = self.ttis[self.type_indices[j - 1]] + shift = " %+g" % ((tti.tt_gmtoff - prev_tti.tt_gmtoff) / 3600) + else: + shift = '' + print("%s UTC = %s %-5s isdst=%d" % (utc, lmt, abbr, tti[1]) + shift, file=stream) + + @classmethod + def zonelist(cls, zonedir='/usr/share/zoneinfo'): + zones = [] + for root, _, files in os.walk(zonedir): + for f in files: + p = os.path.join(root, f) + with open(p, 'rb') as o: + magic = o.read(4) + if magic == b'TZif': + zones.append(p[len(zonedir) + 1:]) + return zones + +if __name__ == '__main__': + if len(sys.argv) < 2: + zones = TZInfo.zonelist() + for z in zones: + print(z) + sys.exit() + filepath = sys.argv[1] + if not filepath.startswith('/'): + filepath = os.path.join('/usr/share/zoneinfo', filepath) + with open(filepath, 'rb') as fileobj: + tzi = TZInfo.fromfile(fileobj) + tzi.dump(sys.stdout) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:12:11 2016 From: python-checkins at python.org (martin.panter) Date: Sat, 23 Jul 2016 04:12:11 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3MTMw?= =?utf-8?q?=3A_Fix_handling_of_buffers_exceeding_UINT=5FMAX_in_=E2=80=9Czl?= =?utf-8?b?aWLigJ0gbW9kdWxl?= Message-ID: <20160723040207.11278.28400.1F76FFE1@psf.io> https://hg.python.org/cpython/rev/bd61bcd9bee8 changeset: 102420:bd61bcd9bee8 branch: 3.5 parent: 102416:025281485318 user: Martin Panter date: Sat Jul 23 03:02:07 2016 +0000 summary: Issue #27130: Fix handling of buffers exceeding UINT_MAX in ?zlib? module Patch by Xiang Zhang. files: Doc/howto/clinic.rst | 12 +- Lib/test/test_zlib.py | 64 +- Misc/NEWS | 5 + Modules/clinic/zlibmodule.c.h | 20 +- Modules/zlibmodule.c | 741 ++++++++++----------- 5 files changed, 430 insertions(+), 412 deletions(-) diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst --- a/Doc/howto/clinic.rst +++ b/Doc/howto/clinic.rst @@ -1249,17 +1249,17 @@ /*[python input] - class capped_uint_converter(CConverter): - type = 'unsigned int' - converter = 'capped_uint_converter' + class ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = 'ssize_t_converter' [python start generated code]*/ /*[python end generated code: output=da39a3ee5e6b4b0d input=35521e4e733823c7]*/ -This block adds a converter to Argument Clinic named ``capped_uint``. Parameters -declared as ``capped_uint`` will be declared as type ``unsigned int``, and will +This block adds a converter to Argument Clinic named ``ssize_t``. Parameters +declared as ``ssize_t`` will be declared as type ``Py_ssize_t``, and will be parsed by the ``'O&'`` format unit, which will call the -``capped_uint_converter`` converter function. ``capped_uint`` variables +``ssize_t_converter`` converter function. ``ssize_t`` variables automatically support default values. More sophisticated custom converters can insert custom C code to diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -122,6 +122,8 @@ with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompress(b'', 15, sys.maxsize + 1) with self.assertRaisesRegex(OverflowError, 'int too large'): + zlib.decompressobj().decompress(b'', sys.maxsize + 1) + with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompressobj().flush(sys.maxsize + 1) @@ -188,15 +190,6 @@ def test_big_decompress_buffer(self, size): self.check_big_decompress_buffer(size, zlib.decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): - data = b'x' * size - try: - self.assertRaises(OverflowError, zlib.compress, data, 1) - self.assertRaises(OverflowError, zlib.decompress, data) - finally: - data = None - @bigmemtest(size=_4G, memuse=1) def test_large_bufsize(self, size): # Test decompress(bufsize) parameter greater than the internal limit @@ -209,6 +202,16 @@ compressed = zlib.compress(data, 1) self.assertEqual(zlib.decompress(compressed, 15, CustomInt()), data) + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): + data = b'x' * size + try: + comp = zlib.compress(data, 0) + self.assertEqual(zlib.decompress(comp), data) + finally: + comp = data = None + class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): # Test compression object @@ -678,16 +681,45 @@ decompress = lambda s: d.decompress(s) + d.flush() self.check_big_decompress_buffer(size, decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): data = b'x' * size - c = zlib.compressobj(1) - d = zlib.decompressobj() + co = zlib.compressobj(0) + do = zlib.decompressobj() try: - self.assertRaises(OverflowError, c.compress, data) - self.assertRaises(OverflowError, d.decompress, data) + comp = co.compress(data) + co.flush() + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(uncomp, data) finally: - data = None + comp = uncomp = data = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=3) + def test_large_unused_data(self, size): + data = b'abcdefghijklmnop' + unused = b'x' * size + comp = zlib.compress(data) + unused + do = zlib.decompressobj() + try: + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(unused, do.unused_data) + self.assertEqual(uncomp, data) + finally: + unused = comp = do = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=5) + def test_large_unconsumed_tail(self, size): + data = b'x' * size + do = zlib.decompressobj() + try: + comp = zlib.compress(data, 0) + uncomp = do.decompress(comp, 1) + do.flush() + self.assertEqual(uncomp, data) + self.assertEqual(do.unconsumed_tail, b'') + finally: + comp = uncomp = data = None def test_wbits(self): # wbits=0 only supported since zlib v1.2.3.5 diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -31,6 +31,11 @@ Library ------- +- Issue #27130: In the "zlib" module, fix handling of large buffers + (typically 4 GiB) when compressing and decompressing. Previously, inputs + were limited to 4 GiB, and compression and decompression operations did not + properly handle results of 4 GiB. + - Issue #27533: Release GIL in nt._isdir - Issue #17711: Fixed unpickling by the persistent ID with protocol 0. diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -57,7 +57,7 @@ static PyObject * zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, - unsigned int bufsize); + Py_ssize_t bufsize); static PyObject * zlib_decompress(PyObject *module, PyObject *args) @@ -65,10 +65,10 @@ PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; int wbits = MAX_WBITS; - unsigned int bufsize = DEF_BUF_SIZE; + Py_ssize_t bufsize = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "y*|iO&:decompress", - &data, &wbits, capped_uint_converter, &bufsize)) + &data, &wbits, ssize_t_converter, &bufsize)) goto exit; return_value = zlib_decompress_impl(module, &data, wbits, bufsize); @@ -236,17 +236,17 @@ static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, - unsigned int max_length); + Py_ssize_t max_length); static PyObject * zlib_Decompress_decompress(compobject *self, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - unsigned int max_length = 0; + Py_ssize_t max_length = 0; if (!PyArg_ParseTuple(args, "y*|O&:decompress", - &data, capped_uint_converter, &max_length)) + &data, ssize_t_converter, &max_length)) goto exit; return_value = zlib_Decompress_decompress_impl(self, &data, max_length); @@ -348,16 +348,16 @@ {"flush", (PyCFunction)zlib_Decompress_flush, METH_VARARGS, zlib_Decompress_flush__doc__}, static PyObject * -zlib_Decompress_flush_impl(compobject *self, unsigned int length); +zlib_Decompress_flush_impl(compobject *self, Py_ssize_t length); static PyObject * zlib_Decompress_flush(compobject *self, PyObject *args) { PyObject *return_value = NULL; - unsigned int length = DEF_BUF_SIZE; + Py_ssize_t length = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "|O&:flush", - capped_uint_converter, &length)) + ssize_t_converter, &length)) goto exit; return_value = zlib_Decompress_flush_impl(self, length); @@ -442,4 +442,4 @@ #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=8545565b1a1822de input=a9049054013a1b77]*/ +/*[clinic end generated code: output=7711ef02d1d5776c input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1,5 +1,5 @@ /* zlibmodule.c -- gzip-compatible data compression */ -/* See http://www.gzip.org/zlib/ */ +/* See http://zlib.net/ */ /* Windows users: read Python's PCbuild\readme.txt */ @@ -23,7 +23,7 @@ #endif #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1221 -#define AT_LEAST_ZLIB_1_2_2_1 +# define AT_LEAST_ZLIB_1_2_2_1 #endif /* The following parameters are copied from zutil.h, version 0.95 */ @@ -115,6 +115,7 @@ #ifdef WITH_THREAD self->lock = PyThread_allocate_lock(); if (self->lock == NULL) { + Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock"); return NULL; } @@ -138,6 +139,63 @@ PyMem_RawFree(ptr); } +static void +arrange_input_buffer(z_stream *zst, Py_ssize_t *remains) +{ + zst->avail_in = Py_MIN((size_t)*remains, UINT_MAX); + *remains -= zst->avail_in; +} + +static Py_ssize_t +arrange_output_buffer_with_maximum(z_stream *zst, PyObject **buffer, + Py_ssize_t length, + Py_ssize_t max_length) +{ + Py_ssize_t occupied; + + if (*buffer == NULL) { + if (!(*buffer = PyBytes_FromStringAndSize(NULL, length))) + return -1; + occupied = 0; + } + else { + occupied = zst->next_out - (Byte *)PyBytes_AS_STRING(*buffer); + + if (length == occupied) { + Py_ssize_t new_length; + assert(length <= max_length); + /* can not scale the buffer over max_length */ + if (length == max_length) + return -2; + if (length <= (max_length >> 1)) + new_length = length << 1; + else + new_length = max_length; + if (_PyBytes_Resize(buffer, new_length) < 0) + return -1; + length = new_length; + } + } + + zst->avail_out = Py_MIN((size_t)(length - occupied), UINT_MAX); + zst->next_out = (Byte *)PyBytes_AS_STRING(*buffer) + occupied; + + return length; +} + +static Py_ssize_t +arrange_output_buffer(z_stream *zst, PyObject **buffer, Py_ssize_t length) +{ + Py_ssize_t ret; + + ret = arrange_output_buffer_with_maximum(zst, buffer, length, + PY_SSIZE_T_MAX); + if (ret == -2) + PyErr_NoMemory(); + + return ret; +} + /*[clinic input] zlib.compress @@ -154,50 +212,30 @@ zlib_compress_impl(PyObject *module, Py_buffer *bytes, int level) /*[clinic end generated code: output=ae64c2c3076321a0 input=be3abe9934bda4b3]*/ { - PyObject *ReturnVal = NULL; - Byte *input, *output = NULL; - unsigned int length; - int err; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; + int err, flush; z_stream zst; - if ((size_t)bytes->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - goto error; - } - input = bytes->buf; - length = (unsigned int)bytes->len; - - zst.avail_out = length + length/1000 + 12 + 1; - - output = (Byte*)PyMem_Malloc(zst.avail_out); - if (output == NULL) { - PyErr_SetString(PyExc_MemoryError, - "Can't allocate memory to compress data"); - goto error; - } - - /* Past the point of no return. From here on out, we need to make sure - we clean up mallocs & INCREFs. */ + ibuf = bytes->buf; + ibuflen = bytes->len; zst.opaque = NULL; zst.zalloc = PyZlib_Malloc; zst.zfree = PyZlib_Free; - zst.next_out = (Byte *)output; - zst.next_in = (Byte *)input; - zst.avail_in = length; + zst.next_in = ibuf; err = deflateInit(&zst, level); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while compressing data"); goto error; - case(Z_STREAM_ERROR): - PyErr_SetString(ZlibError, - "Bad compression level"); + case Z_STREAM_ERROR: + PyErr_SetString(ZlibError, "Bad compression level"); goto error; default: deflateEnd(&zst); @@ -205,41 +243,59 @@ goto error; } - Py_BEGIN_ALLOW_THREADS; - err = deflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS; + do { + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - if (err != Z_STREAM_END) { - zlib_error(zst, err, "while compressing data"); - deflateEnd(&zst); - goto error; + do { + obuflen = arrange_output_buffer(&zst, &RetVal, obuflen); + if (obuflen < 0) { + deflateEnd(&zst); + goto error; + } + + Py_BEGIN_ALLOW_THREADS + err = deflate(&zst, flush); + Py_END_ALLOW_THREADS + + if (err == Z_STREAM_ERROR) { + deflateEnd(&zst); + zlib_error(zst, err, "while compressing data"); + goto error; + } + + } while (zst.avail_out == 0); + assert(zst.avail_in == 0); + + } while (flush != Z_FINISH); + assert(err == Z_STREAM_END); + + err = deflateEnd(&zst); + if (err == Z_OK) { + if (_PyBytes_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) + goto error; + return RetVal; } - - err=deflateEnd(&zst); - if (err == Z_OK) - ReturnVal = PyBytes_FromStringAndSize((char *)output, - zst.total_out); else zlib_error(zst, err, "while finishing compression"); - error: - PyMem_Free(output); - - return ReturnVal; + Py_XDECREF(RetVal); + return NULL; } /*[python input] -class capped_uint_converter(CConverter): - type = 'unsigned int' - converter = 'capped_uint_converter' +class ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = 'ssize_t_converter' c_ignored_default = "0" [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=35521e4e733823c7]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=5f34ba1b394cb8e7]*/ static int -capped_uint_converter(PyObject *obj, void *ptr) +ssize_t_converter(PyObject *obj, void *ptr) { PyObject *long_obj; Py_ssize_t val; @@ -253,19 +309,7 @@ if (val == -1 && PyErr_Occurred()) { return 0; } - if (val < 0) { - PyErr_SetString(PyExc_ValueError, - "value must be positive"); - return 0; - } - - if ((size_t)val > UINT_MAX) { - *(unsigned int *)ptr = UINT_MAX; - } - else { - *(unsigned int *)ptr = Py_SAFE_DOWNCAST(val, Py_ssize_t, - unsigned int); - } + *(Py_ssize_t *)ptr = val; return 1; } @@ -276,7 +320,7 @@ Compressed data. wbits: int(c_default="MAX_WBITS") = MAX_WBITS The window buffer size and container format. - bufsize: capped_uint(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE + bufsize: ssize_t(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE The initial output buffer size. / @@ -285,44 +329,36 @@ static PyObject * zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, - unsigned int bufsize) -/*[clinic end generated code: output=475b36ead58b243d input=75123b0d4ff0541d]*/ + Py_ssize_t bufsize) +/*[clinic end generated code: output=77c7e35111dc8c42 input=c13dd2c5696cd17f]*/ { - PyObject *result_str = NULL; - Byte *input; - unsigned int length; - int err; - unsigned int new_bufsize; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen; + int err, flush; z_stream zst; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - goto error; + if (bufsize < 0) { + PyErr_SetString(PyExc_ValueError, "bufsize must be non-negative"); + return NULL; + } else if (bufsize == 0) { + bufsize = 1; } - input = data->buf; - length = (unsigned int)data->len; - if (bufsize == 0) - bufsize = 1; - - zst.avail_in = length; - zst.avail_out = bufsize; - - if (!(result_str = PyBytes_FromStringAndSize(NULL, bufsize))) - goto error; + ibuf = data->buf; + ibuflen = data->len; zst.opaque = NULL; zst.zalloc = PyZlib_Malloc; zst.zfree = PyZlib_Free; - zst.next_out = (Byte *)PyBytes_AS_STRING(result_str); - zst.next_in = (Byte *)input; + zst.avail_in = 0; + zst.next_in = ibuf; err = inflateInit2(&zst, wbits); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while decompressing data"); goto error; @@ -333,46 +369,46 @@ } do { - Py_BEGIN_ALLOW_THREADS - err=inflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - switch(err) { - case(Z_STREAM_END): - break; - case(Z_BUF_ERROR): - /* - * If there is at least 1 byte of room according to zst.avail_out - * and we get this error, assume that it means zlib cannot - * process the inflate call() due to an error in the data. - */ - if (zst.avail_out > 0) { - zlib_error(zst, err, "while decompressing data"); + do { + bufsize = arrange_output_buffer(&zst, &RetVal, bufsize); + if (bufsize < 0) { inflateEnd(&zst); goto error; } - /* fall through */ - case(Z_OK): - /* need more memory */ - if (bufsize <= (UINT_MAX >> 1)) - new_bufsize = bufsize << 1; - else - new_bufsize = UINT_MAX; - if (_PyBytes_Resize(&result_str, new_bufsize) < 0) { + + Py_BEGIN_ALLOW_THREADS + err = inflate(&zst, flush); + Py_END_ALLOW_THREADS + + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + case Z_MEM_ERROR: inflateEnd(&zst); + PyErr_SetString(PyExc_MemoryError, + "Out of memory while decompressing data"); + goto error; + default: + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); goto error; } - zst.next_out = - (unsigned char *)PyBytes_AS_STRING(result_str) + bufsize; - zst.avail_out = bufsize; - bufsize = new_bufsize; - break; - default: - inflateEnd(&zst); - zlib_error(zst, err, "while decompressing data"); - goto error; - } - } while (err != Z_STREAM_END); + + } while (zst.avail_out == 0); + + } while (err != Z_STREAM_END && ibuflen != 0); + + + if (err != Z_STREAM_END) { + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); + goto error; + } err = inflateEnd(&zst); if (err != Z_OK) { @@ -380,13 +416,14 @@ goto error; } - if (_PyBytes_Resize(&result_str, zst.total_out) < 0) + if (_PyBytes_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) goto error; - return result_str; + return RetVal; error: - Py_XDECREF(result_str); + Py_XDECREF(RetVal); return NULL; } @@ -433,7 +470,7 @@ } self = newcompobject(&Comptype); - if (self==NULL) + if (self == NULL) goto error; self->zst.opaque = NULL; self->zst.zalloc = PyZlib_Malloc; @@ -441,8 +478,8 @@ self->zst.next_in = NULL; self->zst.avail_in = 0; err = deflateInit2(&self->zst, level, method, wbits, memLevel, strategy); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; if (zdict->buf == NULL) { goto success; @@ -450,9 +487,9 @@ err = deflateSetDictionary(&self->zst, zdict->buf, (unsigned int)zdict->len); switch (err) { - case (Z_OK): + case Z_OK: goto success; - case (Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Invalid dictionary"); goto error; default: @@ -460,11 +497,11 @@ goto error; } } - case (Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); goto error; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); goto error; default: @@ -475,7 +512,7 @@ error: Py_CLEAR(self); success: - return (PyObject*)self; + return (PyObject *)self; } static int @@ -493,7 +530,7 @@ PyBuffer_Release(&zdict_buf); return -1; } - err = inflateSetDictionary(&(self->zst), + err = inflateSetDictionary(&self->zst, zdict_buf.buf, (unsigned int)zdict_buf.len); PyBuffer_Release(&zdict_buf); if (err != Z_OK) { @@ -530,7 +567,7 @@ self = newcompobject(&Decomptype); if (self == NULL) - return(NULL); + return NULL; self->zst.opaque = NULL; self->zst.zalloc = PyZlib_Malloc; self->zst.zfree = PyZlib_Free; @@ -541,8 +578,8 @@ self->zdict = zdict; } err = inflateInit2(&self->zst, wbits); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; if (self->zdict != NULL && wbits < 0) { #ifdef AT_LEAST_ZLIB_1_2_2_1 @@ -558,12 +595,12 @@ return NULL; #endif } - return (PyObject*)self; - case(Z_STREAM_ERROR): + return (PyObject *)self; + case Z_STREAM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); return NULL; - case (Z_MEM_ERROR): + case Z_MEM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); @@ -621,113 +658,90 @@ zlib_Compress_compress_impl(compobject *self, Py_buffer *data) /*[clinic end generated code: output=5d5cd791cbc6a7f4 input=0d95908d6e64fab8]*/ { + PyObject *RetVal = NULL; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; int err; - unsigned int inplen; - unsigned int length = DEF_BUF_SIZE, new_length; - PyObject *RetVal; - Byte *input; - unsigned long start_total_out; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - return NULL; - } - input = data->buf; - inplen = (unsigned int)data->len; - - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; + self->zst.next_in = data->buf; + ibuflen = data->len; ENTER_ZLIB(self); - start_total_out = self->zst.total_out; - self->zst.avail_in = inplen; - self->zst.next_in = input; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); + do { + arrange_input_buffer(&self->zst, &ibuflen); - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS + do { + obuflen = arrange_output_buffer(&self->zst, &RetVal, obuflen); + if (obuflen < 0) + goto error; - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&RetVal, new_length) < 0) { - Py_CLEAR(RetVal); - goto done; - } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + length; - self->zst.avail_out = length; - length = new_length; + Py_BEGIN_ALLOW_THREADS + err = deflate(&self->zst, Z_NO_FLUSH); + Py_END_ALLOW_THREADS - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS - } - /* We will only get Z_BUF_ERROR if the output buffer was full but - there wasn't more output when we tried again, so it is not an error - condition. - */ + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while compressing data"); + goto error; + } - if (err != Z_OK && err != Z_BUF_ERROR) { - zlib_error(self->zst, err, "while compressing data"); - Py_CLEAR(RetVal); - goto done; - } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(RetVal); - } + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); - done: + } while (ibuflen != 0); + + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; + + error: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB(self); return RetVal; } -/* Helper for objdecompress() and unflush(). Saves any unconsumed input data in +/* Helper for objdecompress() and flush(). Saves any unconsumed input data in self->unused_data or self->unconsumed_tail, as appropriate. */ static int -save_unconsumed_input(compobject *self, int err) +save_unconsumed_input(compobject *self, Py_buffer *data, int err) { if (err == Z_STREAM_END) { /* The end of the compressed data has been reached. Store the leftover input data in self->unused_data. */ if (self->zst.avail_in > 0) { Py_ssize_t old_size = PyBytes_GET_SIZE(self->unused_data); - Py_ssize_t new_size; + Py_ssize_t new_size, left_size; PyObject *new_data; - if ((size_t)self->zst.avail_in > (size_t)UINT_MAX - (size_t)old_size) { + left_size = (Byte *)data->buf + data->len - self->zst.next_in; + if (left_size > (PY_SSIZE_T_MAX - old_size)) { PyErr_NoMemory(); return -1; } - new_size = old_size + self->zst.avail_in; + new_size = old_size + left_size; new_data = PyBytes_FromStringAndSize(NULL, new_size); if (new_data == NULL) return -1; Py_MEMCPY(PyBytes_AS_STRING(new_data), PyBytes_AS_STRING(self->unused_data), old_size); Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size, - self->zst.next_in, self->zst.avail_in); + self->zst.next_in, left_size); Py_SETREF(self->unused_data, new_data); self->zst.avail_in = 0; } } + if (self->zst.avail_in > 0 || PyBytes_GET_SIZE(self->unconsumed_tail)) { /* This code handles two distinct cases: 1. Output limit was reached. Save leftover input in unconsumed_tail. 2. All input data was consumed. Clear unconsumed_tail. */ + Py_ssize_t left_size = (Byte *)data->buf + data->len - self->zst.next_in; PyObject *new_data = PyBytes_FromStringAndSize( - (char *)self->zst.next_in, self->zst.avail_in); + (char *)self->zst.next_in, left_size); if (new_data == NULL) return -1; Py_SETREF(self->unconsumed_tail, new_data); } + return 0; } @@ -736,7 +750,7 @@ data: Py_buffer The binary data to decompress. - max_length: capped_uint = 0 + max_length: ssize_t = 0 The maximum allowable length of the decompressed data. Unconsumed input data will be stored in the unconsumed_tail attribute. @@ -751,85 +765,72 @@ static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, - unsigned int max_length) -/*[clinic end generated code: output=b82e2a2c19f5fe7b input=68b6508ab07c2cf0]*/ + Py_ssize_t max_length) +/*[clinic end generated code: output=6e5173c74e710352 input=d6de9b53c4566b8a]*/ { - int err; - unsigned int old_length, length = DEF_BUF_SIZE; + int err = Z_OK; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE, hard_limit; PyObject *RetVal = NULL; - unsigned long start_total_out; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); + if (max_length < 0) { + PyErr_SetString(PyExc_ValueError, "max_length must be non-negative"); return NULL; - } + } else if (max_length == 0) + hard_limit = PY_SSIZE_T_MAX; + else + hard_limit = max_length; + + self->zst.next_in = data->buf; + ibuflen = data->len; /* limit amount of data allocated to max_length */ - if (max_length && length > max_length) - length = max_length; - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; + if (max_length && obuflen > max_length) + obuflen = max_length; ENTER_ZLIB(self); - start_total_out = self->zst.total_out; - self->zst.avail_in = (unsigned int)data->len; - self->zst.next_in = data->buf; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); + do { + arrange_input_buffer(&self->zst, &ibuflen); - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS + do { + obuflen = arrange_output_buffer_with_maximum(&self->zst, &RetVal, + obuflen, hard_limit); + if (obuflen == -2) { + if (max_length > 0) { + goto save; + } + PyErr_NoMemory(); + } + if (obuflen < 0) { + goto abort; + } - if (err == Z_NEED_DICT && self->zdict != NULL) { - if (set_inflate_zdict(self) < 0) { - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, Z_SYNC_FLUSH); + Py_END_ALLOW_THREADS - /* Repeat the call to inflate. */ - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS - } + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + if (err == Z_NEED_DICT && self->zdict != NULL) { + if (set_inflate_zdict(self) < 0) + goto abort; + else + break; + } + goto save; + } - /* While Z_OK and the output buffer is full, there might be more output. - So extend the output buffer and try again. - */ - while (err == Z_OK && self->zst.avail_out == 0) { - /* If max_length set, don't continue decompressing if we've already - reached the limit. - */ - if (max_length && length >= max_length) - break; + } while (self->zst.avail_out == 0 || err == Z_NEED_DICT); - /* otherwise, ... */ - old_length = length; - length = length << 1; - if (max_length && length > max_length) - length = max_length; + } while (err != Z_STREAM_END && ibuflen != 0); - if (_PyBytes_Resize(&RetVal, length) < 0) { - Py_CLEAR(RetVal); - goto error; - } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + old_length; - self->zst.avail_out = length - old_length; - - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS - } - - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } + save: + if (save_unconsumed_input(self, data, err) < 0) + goto abort; if (err == Z_STREAM_END) { /* This is the logical place to call inflateEnd, but the old behaviour @@ -841,16 +842,16 @@ not an error condition. */ zlib_error(self->zst, err, "while decompressing data"); - Py_DECREF(RetVal); - RetVal = NULL; - goto error; + goto abort; } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(RetVal); - } + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; - error: + abort: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB(self); return RetVal; } @@ -873,9 +874,8 @@ /*[clinic end generated code: output=a203f4cefc9de727 input=73ed066794bd15bc]*/ { int err; - unsigned int length = DEF_BUF_SIZE, new_length; - PyObject *RetVal; - unsigned long start_total_out; + Py_ssize_t length = DEF_BUF_SIZE; + PyObject *RetVal = NULL; /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in doing any work at all; just return an empty string. */ @@ -883,50 +883,37 @@ return PyBytes_FromStringAndSize(NULL, 0); } - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; - ENTER_ZLIB(self); - start_total_out = self->zst.total_out; self->zst.avail_in = 0; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), mode); - Py_END_ALLOW_THREADS - - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&RetVal, new_length) < 0) { + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) { Py_CLEAR(RetVal); goto error; } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + length; - self->zst.avail_out = length; - length = new_length; Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), mode); + err = deflate(&self->zst, mode); Py_END_ALLOW_THREADS - } + + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while flushing"); + Py_CLEAR(RetVal); + goto error; + } + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); /* If mode is Z_FINISH, we also have to call deflateEnd() to free various data structures. Note we should only get Z_STREAM_END when mode is Z_FINISH, but checking both for safety*/ if (err == Z_STREAM_END && mode == Z_FINISH) { - err = deflateEnd(&(self->zst)); + err = deflateEnd(&self->zst); if (err != Z_OK) { zlib_error(self->zst, err, "while finishing compression"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } else @@ -936,20 +923,18 @@ but there wasn't more output when we tried again, so it is not an error condition. */ - } else if (err!=Z_OK && err!=Z_BUF_ERROR) { + } else if (err != Z_OK && err != Z_BUF_ERROR) { zlib_error(self->zst, err, "while flushing"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) Py_CLEAR(RetVal); - } error: LEAVE_ZLIB(self); - return RetVal; } @@ -976,13 +961,13 @@ */ ENTER_ZLIB(self); err = deflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); goto error; @@ -1031,13 +1016,13 @@ */ ENTER_ZLIB(self); err = inflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); goto error; @@ -1070,7 +1055,7 @@ /*[clinic input] zlib.Decompress.flush - length: capped_uint(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE + length: ssize_t(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE the initial size of the output buffer. / @@ -1078,88 +1063,84 @@ [clinic start generated code]*/ static PyObject * -zlib_Decompress_flush_impl(compobject *self, unsigned int length) -/*[clinic end generated code: output=db6fb753ab698e22 input=1bb961eb21b62aa0]*/ +zlib_Decompress_flush_impl(compobject *self, Py_ssize_t length) +/*[clinic end generated code: output=68c75ea127cbe654 input=aa4ec37f3aef4da0]*/ { - int err; - unsigned int new_length; - PyObject * retval = NULL; - unsigned long start_total_out; - Py_ssize_t size; + int err, flush; + Py_buffer data; + PyObject *RetVal = NULL; + Py_ssize_t ibuflen; - if (length == 0) { + if (length <= 0) { PyErr_SetString(PyExc_ValueError, "length must be greater than zero"); return NULL; } - if (!(retval = PyBytes_FromStringAndSize(NULL, length))) + if (PyObject_GetBuffer(self->unconsumed_tail, &data, PyBUF_SIMPLE) == -1) return NULL; - ENTER_ZLIB(self); - size = PyBytes_GET_SIZE(self->unconsumed_tail); + self->zst.next_in = data.buf; + ibuflen = data.len; - start_total_out = self->zst.total_out; - /* save_unconsumed_input() ensures that unconsumed_tail length is lesser - or equal than UINT_MAX */ - self->zst.avail_in = Py_SAFE_DOWNCAST(size, Py_ssize_t, unsigned int); - self->zst.next_in = (Byte *)PyBytes_AS_STRING(self->unconsumed_tail); - self->zst.avail_out = length; - self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval); + do { + arrange_input_buffer(&self->zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) + goto abort; - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while ((err == Z_OK || err == Z_BUF_ERROR) && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&retval, new_length) < 0) { - Py_CLEAR(retval); - goto error; - } - self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval) + length; - self->zst.avail_out = length; - length = new_length; + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, flush); + Py_END_ALLOW_THREADS - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS - } + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + if (err == Z_NEED_DICT && self->zdict != NULL) { + if (set_inflate_zdict(self) < 0) + goto abort; + else + break; + } + goto save; + } - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(retval); - retval = NULL; - goto error; - } + } while (self->zst.avail_out == 0 || err == Z_NEED_DICT); + + } while (err != Z_STREAM_END && ibuflen != 0); + + save: + if (save_unconsumed_input(self, &data, err) < 0) + goto abort; /* If at end of stream, clean up any memory allocated by zlib. */ if (err == Z_STREAM_END) { self->eof = 1; self->is_initialised = 0; - err = inflateEnd(&(self->zst)); + err = inflateEnd(&self->zst); if (err != Z_OK) { zlib_error(self->zst, err, "while finishing decompression"); - Py_DECREF(retval); - retval = NULL; - goto error; + goto abort; } } - if (_PyBytes_Resize(&retval, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(retval); - } + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; -error: - + abort: + Py_CLEAR(RetVal); + success: + PyBuffer_Release(&data); LEAVE_ZLIB(self); - - return retval; + return RetVal; } #include "clinic/zlibmodule.c.h" -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:12:28 2016 From: python-checkins at python.org (martin.panter) Date: Sat, 23 Jul 2016 04:12:28 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327130=3A_Merge_zlib_64-bit_fixes_from_3=2E5?= Message-ID: <20160723040207.78873.94585.06C04786@psf.io> https://hg.python.org/cpython/rev/bd556f748cf8 changeset: 102421:bd556f748cf8 parent: 102419:7c0917670ab8 parent: 102420:bd61bcd9bee8 user: Martin Panter date: Sat Jul 23 03:39:49 2016 +0000 summary: Issue #27130: Merge zlib 64-bit fixes from 3.5 files: Doc/howto/clinic.rst | 12 +- Lib/test/test_zlib.py | 64 +- Misc/NEWS | 5 + Modules/clinic/zlibmodule.c.h | 20 +- Modules/zlibmodule.c | 741 ++++++++++----------- 5 files changed, 430 insertions(+), 412 deletions(-) diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst --- a/Doc/howto/clinic.rst +++ b/Doc/howto/clinic.rst @@ -1249,17 +1249,17 @@ /*[python input] - class capped_uint_converter(CConverter): - type = 'unsigned int' - converter = 'capped_uint_converter' + class ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = 'ssize_t_converter' [python start generated code]*/ /*[python end generated code: output=da39a3ee5e6b4b0d input=35521e4e733823c7]*/ -This block adds a converter to Argument Clinic named ``capped_uint``. Parameters -declared as ``capped_uint`` will be declared as type ``unsigned int``, and will +This block adds a converter to Argument Clinic named ``ssize_t``. Parameters +declared as ``ssize_t`` will be declared as type ``Py_ssize_t``, and will be parsed by the ``'O&'`` format unit, which will call the -``capped_uint_converter`` converter function. ``capped_uint`` variables +``ssize_t_converter`` converter function. ``ssize_t`` variables automatically support default values. More sophisticated custom converters can insert custom C code to diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -122,6 +122,8 @@ with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompress(b'', 15, sys.maxsize + 1) with self.assertRaisesRegex(OverflowError, 'int too large'): + zlib.decompressobj().decompress(b'', sys.maxsize + 1) + with self.assertRaisesRegex(OverflowError, 'int too large'): zlib.decompressobj().flush(sys.maxsize + 1) @@ -194,15 +196,6 @@ def test_big_decompress_buffer(self, size): self.check_big_decompress_buffer(size, zlib.decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): - data = b'x' * size - try: - self.assertRaises(OverflowError, zlib.compress, data, 1) - self.assertRaises(OverflowError, zlib.decompress, data) - finally: - data = None - @bigmemtest(size=_4G, memuse=1) def test_large_bufsize(self, size): # Test decompress(bufsize) parameter greater than the internal limit @@ -215,6 +208,16 @@ compressed = zlib.compress(data, 1) self.assertEqual(zlib.decompress(compressed, 15, CustomInt()), data) + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): + data = b'x' * size + try: + comp = zlib.compress(data, 0) + self.assertEqual(zlib.decompress(comp), data) + finally: + comp = data = None + class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): # Test compression object @@ -684,16 +687,45 @@ decompress = lambda s: d.decompress(s) + d.flush() self.check_big_decompress_buffer(size, decompress) - @bigmemtest(size=_4G + 100, memuse=1, dry_run=False) - def test_length_overflow(self, size): + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): data = b'x' * size - c = zlib.compressobj(1) - d = zlib.decompressobj() + co = zlib.compressobj(0) + do = zlib.decompressobj() try: - self.assertRaises(OverflowError, c.compress, data) - self.assertRaises(OverflowError, d.decompress, data) + comp = co.compress(data) + co.flush() + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(uncomp, data) finally: - data = None + comp = uncomp = data = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=3) + def test_large_unused_data(self, size): + data = b'abcdefghijklmnop' + unused = b'x' * size + comp = zlib.compress(data) + unused + do = zlib.decompressobj() + try: + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(unused, do.unused_data) + self.assertEqual(uncomp, data) + finally: + unused = comp = do = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @bigmemtest(size=_4G + 100, memuse=5) + def test_large_unconsumed_tail(self, size): + data = b'x' * size + do = zlib.decompressobj() + try: + comp = zlib.compress(data, 0) + uncomp = do.decompress(comp, 1) + do.flush() + self.assertEqual(uncomp, data) + self.assertEqual(do.unconsumed_tail, b'') + finally: + comp = uncomp = data = None def test_wbits(self): # wbits=0 only supported since zlib v1.2.3.5 diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,11 @@ Library ------- +- Issue #27130: In the "zlib" module, fix handling of large buffers + (typically 4 GiB) when compressing and decompressing. Previously, inputs + were limited to 4 GiB, and compression and decompression operations did not + properly handle results of 4 GiB. + - Issue #24773: Implemented PEP 495 (Local Time Disambiguation). - Expose the EPOLLEXCLUSIVE constant (when it is defined) in the select module. diff --git a/Modules/clinic/zlibmodule.c.h b/Modules/clinic/zlibmodule.c.h --- a/Modules/clinic/zlibmodule.c.h +++ b/Modules/clinic/zlibmodule.c.h @@ -60,7 +60,7 @@ static PyObject * zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, - unsigned int bufsize); + Py_ssize_t bufsize); static PyObject * zlib_decompress(PyObject *module, PyObject *args) @@ -68,10 +68,10 @@ PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; int wbits = MAX_WBITS; - unsigned int bufsize = DEF_BUF_SIZE; + Py_ssize_t bufsize = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "y*|iO&:decompress", - &data, &wbits, capped_uint_converter, &bufsize)) { + &data, &wbits, ssize_t_converter, &bufsize)) { goto exit; } return_value = zlib_decompress_impl(module, &data, wbits, bufsize); @@ -246,17 +246,17 @@ static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, - unsigned int max_length); + Py_ssize_t max_length); static PyObject * zlib_Decompress_decompress(compobject *self, PyObject *args) { PyObject *return_value = NULL; Py_buffer data = {NULL, NULL}; - unsigned int max_length = 0; + Py_ssize_t max_length = 0; if (!PyArg_ParseTuple(args, "y*|O&:decompress", - &data, capped_uint_converter, &max_length)) { + &data, ssize_t_converter, &max_length)) { goto exit; } return_value = zlib_Decompress_decompress_impl(self, &data, max_length); @@ -361,16 +361,16 @@ {"flush", (PyCFunction)zlib_Decompress_flush, METH_VARARGS, zlib_Decompress_flush__doc__}, static PyObject * -zlib_Decompress_flush_impl(compobject *self, unsigned int length); +zlib_Decompress_flush_impl(compobject *self, Py_ssize_t length); static PyObject * zlib_Decompress_flush(compobject *self, PyObject *args) { PyObject *return_value = NULL; - unsigned int length = DEF_BUF_SIZE; + Py_ssize_t length = DEF_BUF_SIZE; if (!PyArg_ParseTuple(args, "|O&:flush", - capped_uint_converter, &length)) { + ssize_t_converter, &length)) { goto exit; } return_value = zlib_Decompress_flush_impl(self, length); @@ -460,4 +460,4 @@ #ifndef ZLIB_COMPRESS_COPY_METHODDEF #define ZLIB_COMPRESS_COPY_METHODDEF #endif /* !defined(ZLIB_COMPRESS_COPY_METHODDEF) */ -/*[clinic end generated code: output=519446af912f4e72 input=a9049054013a1b77]*/ +/*[clinic end generated code: output=9046866b1ac5de7e input=a9049054013a1b77]*/ diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1,5 +1,5 @@ /* zlibmodule.c -- gzip-compatible data compression */ -/* See http://www.gzip.org/zlib/ */ +/* See http://zlib.net/ */ /* Windows users: read Python's PCbuild\readme.txt */ @@ -23,7 +23,7 @@ #endif #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1221 -#define AT_LEAST_ZLIB_1_2_2_1 +# define AT_LEAST_ZLIB_1_2_2_1 #endif /* The following parameters are copied from zutil.h, version 0.95 */ @@ -115,6 +115,7 @@ #ifdef WITH_THREAD self->lock = PyThread_allocate_lock(); if (self->lock == NULL) { + Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Unable to allocate lock"); return NULL; } @@ -138,6 +139,63 @@ PyMem_RawFree(ptr); } +static void +arrange_input_buffer(z_stream *zst, Py_ssize_t *remains) +{ + zst->avail_in = Py_MIN((size_t)*remains, UINT_MAX); + *remains -= zst->avail_in; +} + +static Py_ssize_t +arrange_output_buffer_with_maximum(z_stream *zst, PyObject **buffer, + Py_ssize_t length, + Py_ssize_t max_length) +{ + Py_ssize_t occupied; + + if (*buffer == NULL) { + if (!(*buffer = PyBytes_FromStringAndSize(NULL, length))) + return -1; + occupied = 0; + } + else { + occupied = zst->next_out - (Byte *)PyBytes_AS_STRING(*buffer); + + if (length == occupied) { + Py_ssize_t new_length; + assert(length <= max_length); + /* can not scale the buffer over max_length */ + if (length == max_length) + return -2; + if (length <= (max_length >> 1)) + new_length = length << 1; + else + new_length = max_length; + if (_PyBytes_Resize(buffer, new_length) < 0) + return -1; + length = new_length; + } + } + + zst->avail_out = Py_MIN((size_t)(length - occupied), UINT_MAX); + zst->next_out = (Byte *)PyBytes_AS_STRING(*buffer) + occupied; + + return length; +} + +static Py_ssize_t +arrange_output_buffer(z_stream *zst, PyObject **buffer, Py_ssize_t length) +{ + Py_ssize_t ret; + + ret = arrange_output_buffer_with_maximum(zst, buffer, length, + PY_SSIZE_T_MAX); + if (ret == -2) + PyErr_NoMemory(); + + return ret; +} + /*[clinic input] zlib.compress @@ -154,50 +212,30 @@ zlib_compress_impl(PyObject *module, Py_buffer *data, int level) /*[clinic end generated code: output=d80906d73f6294c8 input=638d54b6315dbed3]*/ { - PyObject *ReturnVal = NULL; - Byte *input, *output = NULL; - unsigned int length; - int err; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; + int err, flush; z_stream zst; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - goto error; - } - input = data->buf; - length = (unsigned int)data->len; - - zst.avail_out = length + length/1000 + 12 + 1; - - output = (Byte*)PyMem_Malloc(zst.avail_out); - if (output == NULL) { - PyErr_SetString(PyExc_MemoryError, - "Can't allocate memory to compress data"); - goto error; - } - - /* Past the point of no return. From here on out, we need to make sure - we clean up mallocs & INCREFs. */ + ibuf = data->buf; + ibuflen = data->len; zst.opaque = NULL; zst.zalloc = PyZlib_Malloc; zst.zfree = PyZlib_Free; - zst.next_out = (Byte *)output; - zst.next_in = (Byte *)input; - zst.avail_in = length; + zst.next_in = ibuf; err = deflateInit(&zst, level); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while compressing data"); goto error; - case(Z_STREAM_ERROR): - PyErr_SetString(ZlibError, - "Bad compression level"); + case Z_STREAM_ERROR: + PyErr_SetString(ZlibError, "Bad compression level"); goto error; default: deflateEnd(&zst); @@ -205,41 +243,59 @@ goto error; } - Py_BEGIN_ALLOW_THREADS; - err = deflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS; + do { + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - if (err != Z_STREAM_END) { - zlib_error(zst, err, "while compressing data"); - deflateEnd(&zst); - goto error; + do { + obuflen = arrange_output_buffer(&zst, &RetVal, obuflen); + if (obuflen < 0) { + deflateEnd(&zst); + goto error; + } + + Py_BEGIN_ALLOW_THREADS + err = deflate(&zst, flush); + Py_END_ALLOW_THREADS + + if (err == Z_STREAM_ERROR) { + deflateEnd(&zst); + zlib_error(zst, err, "while compressing data"); + goto error; + } + + } while (zst.avail_out == 0); + assert(zst.avail_in == 0); + + } while (flush != Z_FINISH); + assert(err == Z_STREAM_END); + + err = deflateEnd(&zst); + if (err == Z_OK) { + if (_PyBytes_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) + goto error; + return RetVal; } - - err=deflateEnd(&zst); - if (err == Z_OK) - ReturnVal = PyBytes_FromStringAndSize((char *)output, - zst.total_out); else zlib_error(zst, err, "while finishing compression"); - error: - PyMem_Free(output); - - return ReturnVal; + Py_XDECREF(RetVal); + return NULL; } /*[python input] -class capped_uint_converter(CConverter): - type = 'unsigned int' - converter = 'capped_uint_converter' +class ssize_t_converter(CConverter): + type = 'Py_ssize_t' + converter = 'ssize_t_converter' c_ignored_default = "0" [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=35521e4e733823c7]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=5f34ba1b394cb8e7]*/ static int -capped_uint_converter(PyObject *obj, void *ptr) +ssize_t_converter(PyObject *obj, void *ptr) { PyObject *long_obj; Py_ssize_t val; @@ -253,19 +309,7 @@ if (val == -1 && PyErr_Occurred()) { return 0; } - if (val < 0) { - PyErr_SetString(PyExc_ValueError, - "value must be positive"); - return 0; - } - - if ((size_t)val > UINT_MAX) { - *(unsigned int *)ptr = UINT_MAX; - } - else { - *(unsigned int *)ptr = Py_SAFE_DOWNCAST(val, Py_ssize_t, - unsigned int); - } + *(Py_ssize_t *)ptr = val; return 1; } @@ -276,7 +320,7 @@ Compressed data. wbits: int(c_default="MAX_WBITS") = MAX_WBITS The window buffer size and container format. - bufsize: capped_uint(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE + bufsize: ssize_t(c_default="DEF_BUF_SIZE") = DEF_BUF_SIZE The initial output buffer size. / @@ -285,44 +329,36 @@ static PyObject * zlib_decompress_impl(PyObject *module, Py_buffer *data, int wbits, - unsigned int bufsize) -/*[clinic end generated code: output=475b36ead58b243d input=75123b0d4ff0541d]*/ + Py_ssize_t bufsize) +/*[clinic end generated code: output=77c7e35111dc8c42 input=c13dd2c5696cd17f]*/ { - PyObject *result_str = NULL; - Byte *input; - unsigned int length; - int err; - unsigned int new_bufsize; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen; + int err, flush; z_stream zst; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - goto error; + if (bufsize < 0) { + PyErr_SetString(PyExc_ValueError, "bufsize must be non-negative"); + return NULL; + } else if (bufsize == 0) { + bufsize = 1; } - input = data->buf; - length = (unsigned int)data->len; - if (bufsize == 0) - bufsize = 1; - - zst.avail_in = length; - zst.avail_out = bufsize; - - if (!(result_str = PyBytes_FromStringAndSize(NULL, bufsize))) - goto error; + ibuf = data->buf; + ibuflen = data->len; zst.opaque = NULL; zst.zalloc = PyZlib_Malloc; zst.zfree = PyZlib_Free; - zst.next_out = (Byte *)PyBytes_AS_STRING(result_str); - zst.next_in = (Byte *)input; + zst.avail_in = 0; + zst.next_in = ibuf; err = inflateInit2(&zst, wbits); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while decompressing data"); goto error; @@ -333,46 +369,46 @@ } do { - Py_BEGIN_ALLOW_THREADS - err=inflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - switch(err) { - case(Z_STREAM_END): - break; - case(Z_BUF_ERROR): - /* - * If there is at least 1 byte of room according to zst.avail_out - * and we get this error, assume that it means zlib cannot - * process the inflate call() due to an error in the data. - */ - if (zst.avail_out > 0) { - zlib_error(zst, err, "while decompressing data"); + do { + bufsize = arrange_output_buffer(&zst, &RetVal, bufsize); + if (bufsize < 0) { inflateEnd(&zst); goto error; } - /* fall through */ - case(Z_OK): - /* need more memory */ - if (bufsize <= (UINT_MAX >> 1)) - new_bufsize = bufsize << 1; - else - new_bufsize = UINT_MAX; - if (_PyBytes_Resize(&result_str, new_bufsize) < 0) { + + Py_BEGIN_ALLOW_THREADS + err = inflate(&zst, flush); + Py_END_ALLOW_THREADS + + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + case Z_MEM_ERROR: inflateEnd(&zst); + PyErr_SetString(PyExc_MemoryError, + "Out of memory while decompressing data"); + goto error; + default: + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); goto error; } - zst.next_out = - (unsigned char *)PyBytes_AS_STRING(result_str) + bufsize; - zst.avail_out = bufsize; - bufsize = new_bufsize; - break; - default: - inflateEnd(&zst); - zlib_error(zst, err, "while decompressing data"); - goto error; - } - } while (err != Z_STREAM_END); + + } while (zst.avail_out == 0); + + } while (err != Z_STREAM_END && ibuflen != 0); + + + if (err != Z_STREAM_END) { + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); + goto error; + } err = inflateEnd(&zst); if (err != Z_OK) { @@ -380,13 +416,14 @@ goto error; } - if (_PyBytes_Resize(&result_str, zst.total_out) < 0) + if (_PyBytes_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) goto error; - return result_str; + return RetVal; error: - Py_XDECREF(result_str); + Py_XDECREF(RetVal); return NULL; } @@ -433,7 +470,7 @@ } self = newcompobject(&Comptype); - if (self==NULL) + if (self == NULL) goto error; self->zst.opaque = NULL; self->zst.zalloc = PyZlib_Malloc; @@ -441,8 +478,8 @@ self->zst.next_in = NULL; self->zst.avail_in = 0; err = deflateInit2(&self->zst, level, method, wbits, memLevel, strategy); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; if (zdict->buf == NULL) { goto success; @@ -450,9 +487,9 @@ err = deflateSetDictionary(&self->zst, zdict->buf, (unsigned int)zdict->len); switch (err) { - case (Z_OK): + case Z_OK: goto success; - case (Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Invalid dictionary"); goto error; default: @@ -460,11 +497,11 @@ goto error; } } - case (Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); goto error; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); goto error; default: @@ -475,7 +512,7 @@ error: Py_CLEAR(self); success: - return (PyObject*)self; + return (PyObject *)self; } static int @@ -493,7 +530,7 @@ PyBuffer_Release(&zdict_buf); return -1; } - err = inflateSetDictionary(&(self->zst), + err = inflateSetDictionary(&self->zst, zdict_buf.buf, (unsigned int)zdict_buf.len); PyBuffer_Release(&zdict_buf); if (err != Z_OK) { @@ -530,7 +567,7 @@ self = newcompobject(&Decomptype); if (self == NULL) - return(NULL); + return NULL; self->zst.opaque = NULL; self->zst.zalloc = PyZlib_Malloc; self->zst.zfree = PyZlib_Free; @@ -541,8 +578,8 @@ self->zdict = zdict; } err = inflateInit2(&self->zst, wbits); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; if (self->zdict != NULL && wbits < 0) { #ifdef AT_LEAST_ZLIB_1_2_2_1 @@ -558,12 +595,12 @@ return NULL; #endif } - return (PyObject*)self; - case(Z_STREAM_ERROR): + return (PyObject *)self; + case Z_STREAM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); return NULL; - case (Z_MEM_ERROR): + case Z_MEM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); @@ -621,113 +658,90 @@ zlib_Compress_compress_impl(compobject *self, Py_buffer *data) /*[clinic end generated code: output=5d5cd791cbc6a7f4 input=0d95908d6e64fab8]*/ { + PyObject *RetVal = NULL; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE; int err; - unsigned int inplen; - unsigned int length = DEF_BUF_SIZE, new_length; - PyObject *RetVal; - Byte *input; - unsigned long start_total_out; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); - return NULL; - } - input = data->buf; - inplen = (unsigned int)data->len; - - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; + self->zst.next_in = data->buf; + ibuflen = data->len; ENTER_ZLIB(self); - start_total_out = self->zst.total_out; - self->zst.avail_in = inplen; - self->zst.next_in = input; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); + do { + arrange_input_buffer(&self->zst, &ibuflen); - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS + do { + obuflen = arrange_output_buffer(&self->zst, &RetVal, obuflen); + if (obuflen < 0) + goto error; - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&RetVal, new_length) < 0) { - Py_CLEAR(RetVal); - goto done; - } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + length; - self->zst.avail_out = length; - length = new_length; + Py_BEGIN_ALLOW_THREADS + err = deflate(&self->zst, Z_NO_FLUSH); + Py_END_ALLOW_THREADS - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS - } - /* We will only get Z_BUF_ERROR if the output buffer was full but - there wasn't more output when we tried again, so it is not an error - condition. - */ + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while compressing data"); + goto error; + } - if (err != Z_OK && err != Z_BUF_ERROR) { - zlib_error(self->zst, err, "while compressing data"); - Py_CLEAR(RetVal); - goto done; - } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(RetVal); - } + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); - done: + } while (ibuflen != 0); + + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; + + error: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB(self); return RetVal; } -/* Helper for objdecompress() and unflush(). Saves any unconsumed input data in +/* Helper for objdecompress() and flush(). Saves any unconsumed input data in self->unused_data or self->unconsumed_tail, as appropriate. */ static int -save_unconsumed_input(compobject *self, int err) +save_unconsumed_input(compobject *self, Py_buffer *data, int err) { if (err == Z_STREAM_END) { /* The end of the compressed data has been reached. Store the leftover input data in self->unused_data. */ if (self->zst.avail_in > 0) { Py_ssize_t old_size = PyBytes_GET_SIZE(self->unused_data); - Py_ssize_t new_size; + Py_ssize_t new_size, left_size; PyObject *new_data; - if ((size_t)self->zst.avail_in > (size_t)UINT_MAX - (size_t)old_size) { + left_size = (Byte *)data->buf + data->len - self->zst.next_in; + if (left_size > (PY_SSIZE_T_MAX - old_size)) { PyErr_NoMemory(); return -1; } - new_size = old_size + self->zst.avail_in; + new_size = old_size + left_size; new_data = PyBytes_FromStringAndSize(NULL, new_size); if (new_data == NULL) return -1; Py_MEMCPY(PyBytes_AS_STRING(new_data), PyBytes_AS_STRING(self->unused_data), old_size); Py_MEMCPY(PyBytes_AS_STRING(new_data) + old_size, - self->zst.next_in, self->zst.avail_in); + self->zst.next_in, left_size); Py_SETREF(self->unused_data, new_data); self->zst.avail_in = 0; } } + if (self->zst.avail_in > 0 || PyBytes_GET_SIZE(self->unconsumed_tail)) { /* This code handles two distinct cases: 1. Output limit was reached. Save leftover input in unconsumed_tail. 2. All input data was consumed. Clear unconsumed_tail. */ + Py_ssize_t left_size = (Byte *)data->buf + data->len - self->zst.next_in; PyObject *new_data = PyBytes_FromStringAndSize( - (char *)self->zst.next_in, self->zst.avail_in); + (char *)self->zst.next_in, left_size); if (new_data == NULL) return -1; Py_SETREF(self->unconsumed_tail, new_data); } + return 0; } @@ -736,7 +750,7 @@ data: Py_buffer The binary data to decompress. - max_length: capped_uint = 0 + max_length: ssize_t = 0 The maximum allowable length of the decompressed data. Unconsumed input data will be stored in the unconsumed_tail attribute. @@ -751,85 +765,72 @@ static PyObject * zlib_Decompress_decompress_impl(compobject *self, Py_buffer *data, - unsigned int max_length) -/*[clinic end generated code: output=b82e2a2c19f5fe7b input=68b6508ab07c2cf0]*/ + Py_ssize_t max_length) +/*[clinic end generated code: output=6e5173c74e710352 input=d6de9b53c4566b8a]*/ { - int err; - unsigned int old_length, length = DEF_BUF_SIZE; + int err = Z_OK; + Py_ssize_t ibuflen, obuflen = DEF_BUF_SIZE, hard_limit; PyObject *RetVal = NULL; - unsigned long start_total_out; - if ((size_t)data->len > UINT_MAX) { - PyErr_SetString(PyExc_OverflowError, - "Size does not fit in an unsigned int"); + if (max_length < 0) { + PyErr_SetString(PyExc_ValueError, "max_length must be non-negative"); return NULL; - } + } else if (max_length == 0) + hard_limit = PY_SSIZE_T_MAX; + else + hard_limit = max_length; + + self->zst.next_in = data->buf; + ibuflen = data->len; /* limit amount of data allocated to max_length */ - if (max_length && length > max_length) - length = max_length; - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; + if (max_length && obuflen > max_length) + obuflen = max_length; ENTER_ZLIB(self); - start_total_out = self->zst.total_out; - self->zst.avail_in = (unsigned int)data->len; - self->zst.next_in = data->buf; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); + do { + arrange_input_buffer(&self->zst, &ibuflen); - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS + do { + obuflen = arrange_output_buffer_with_maximum(&self->zst, &RetVal, + obuflen, hard_limit); + if (obuflen == -2) { + if (max_length > 0) { + goto save; + } + PyErr_NoMemory(); + } + if (obuflen < 0) { + goto abort; + } - if (err == Z_NEED_DICT && self->zdict != NULL) { - if (set_inflate_zdict(self) < 0) { - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, Z_SYNC_FLUSH); + Py_END_ALLOW_THREADS - /* Repeat the call to inflate. */ - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS - } + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + if (err == Z_NEED_DICT && self->zdict != NULL) { + if (set_inflate_zdict(self) < 0) + goto abort; + else + break; + } + goto save; + } - /* While Z_OK and the output buffer is full, there might be more output. - So extend the output buffer and try again. - */ - while (err == Z_OK && self->zst.avail_out == 0) { - /* If max_length set, don't continue decompressing if we've already - reached the limit. - */ - if (max_length && length >= max_length) - break; + } while (self->zst.avail_out == 0 || err == Z_NEED_DICT); - /* otherwise, ... */ - old_length = length; - length = length << 1; - if (max_length && length > max_length) - length = max_length; + } while (err != Z_STREAM_END && ibuflen != 0); - if (_PyBytes_Resize(&RetVal, length) < 0) { - Py_CLEAR(RetVal); - goto error; - } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + old_length; - self->zst.avail_out = length - old_length; - - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS - } - - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } + save: + if (save_unconsumed_input(self, data, err) < 0) + goto abort; if (err == Z_STREAM_END) { /* This is the logical place to call inflateEnd, but the old behaviour @@ -841,16 +842,16 @@ not an error condition. */ zlib_error(self->zst, err, "while decompressing data"); - Py_DECREF(RetVal); - RetVal = NULL; - goto error; + goto abort; } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(RetVal); - } + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; - error: + abort: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB(self); return RetVal; } @@ -873,9 +874,8 @@ /*[clinic end generated code: output=a203f4cefc9de727 input=73ed066794bd15bc]*/ { int err; - unsigned int length = DEF_BUF_SIZE, new_length; - PyObject *RetVal; - unsigned long start_total_out; + Py_ssize_t length = DEF_BUF_SIZE; + PyObject *RetVal = NULL; /* Flushing with Z_NO_FLUSH is a no-op, so there's no point in doing any work at all; just return an empty string. */ @@ -883,50 +883,37 @@ return PyBytes_FromStringAndSize(NULL, 0); } - if (!(RetVal = PyBytes_FromStringAndSize(NULL, length))) - return NULL; - ENTER_ZLIB(self); - start_total_out = self->zst.total_out; self->zst.avail_in = 0; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyBytes_AS_STRING(RetVal); - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), mode); - Py_END_ALLOW_THREADS - - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&RetVal, new_length) < 0) { + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) { Py_CLEAR(RetVal); goto error; } - self->zst.next_out = - (unsigned char *)PyBytes_AS_STRING(RetVal) + length; - self->zst.avail_out = length; - length = new_length; Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), mode); + err = deflate(&self->zst, mode); Py_END_ALLOW_THREADS - } + + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while flushing"); + Py_CLEAR(RetVal); + goto error; + } + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); /* If mode is Z_FINISH, we also have to call deflateEnd() to free various data structures. Note we should only get Z_STREAM_END when mode is Z_FINISH, but checking both for safety*/ if (err == Z_STREAM_END && mode == Z_FINISH) { - err = deflateEnd(&(self->zst)); + err = deflateEnd(&self->zst); if (err != Z_OK) { zlib_error(self->zst, err, "while finishing compression"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } else @@ -936,20 +923,18 @@ but there wasn't more output when we tried again, so it is not an error condition. */ - } else if (err!=Z_OK && err!=Z_BUF_ERROR) { + } else if (err != Z_OK && err != Z_BUF_ERROR) { zlib_error(self->zst, err, "while flushing"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } - if (_PyBytes_Resize(&RetVal, self->zst.total_out - start_total_out) < 0) { + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) Py_CLEAR(RetVal); - } error: LEAVE_ZLIB(self); - return RetVal; } @@ -976,13 +961,13 @@ */ ENTER_ZLIB(self); err = deflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); goto error; @@ -1031,13 +1016,13 @@ */ ENTER_ZLIB(self); err = inflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); goto error; @@ -1070,7 +1055,7 @@ /*[clinic input] zlib.Decompress.flush - length: capped_uint(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE + length: ssize_t(c_default="DEF_BUF_SIZE") = zlib.DEF_BUF_SIZE the initial size of the output buffer. / @@ -1078,88 +1063,84 @@ [clinic start generated code]*/ static PyObject * -zlib_Decompress_flush_impl(compobject *self, unsigned int length) -/*[clinic end generated code: output=db6fb753ab698e22 input=1bb961eb21b62aa0]*/ +zlib_Decompress_flush_impl(compobject *self, Py_ssize_t length) +/*[clinic end generated code: output=68c75ea127cbe654 input=aa4ec37f3aef4da0]*/ { - int err; - unsigned int new_length; - PyObject * retval = NULL; - unsigned long start_total_out; - Py_ssize_t size; + int err, flush; + Py_buffer data; + PyObject *RetVal = NULL; + Py_ssize_t ibuflen; - if (length == 0) { + if (length <= 0) { PyErr_SetString(PyExc_ValueError, "length must be greater than zero"); return NULL; } - if (!(retval = PyBytes_FromStringAndSize(NULL, length))) + if (PyObject_GetBuffer(self->unconsumed_tail, &data, PyBUF_SIMPLE) == -1) return NULL; - ENTER_ZLIB(self); - size = PyBytes_GET_SIZE(self->unconsumed_tail); + self->zst.next_in = data.buf; + ibuflen = data.len; - start_total_out = self->zst.total_out; - /* save_unconsumed_input() ensures that unconsumed_tail length is lesser - or equal than UINT_MAX */ - self->zst.avail_in = Py_SAFE_DOWNCAST(size, Py_ssize_t, unsigned int); - self->zst.next_in = (Byte *)PyBytes_AS_STRING(self->unconsumed_tail); - self->zst.avail_out = length; - self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval); + do { + arrange_input_buffer(&self->zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) + goto abort; - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while ((err == Z_OK || err == Z_BUF_ERROR) && self->zst.avail_out == 0) { - if (length <= (UINT_MAX >> 1)) - new_length = length << 1; - else - new_length = UINT_MAX; - if (_PyBytes_Resize(&retval, new_length) < 0) { - Py_CLEAR(retval); - goto error; - } - self->zst.next_out = (Byte *)PyBytes_AS_STRING(retval) + length; - self->zst.avail_out = length; - length = new_length; + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, flush); + Py_END_ALLOW_THREADS - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS - } + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + if (err == Z_NEED_DICT && self->zdict != NULL) { + if (set_inflate_zdict(self) < 0) + goto abort; + else + break; + } + goto save; + } - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(retval); - retval = NULL; - goto error; - } + } while (self->zst.avail_out == 0 || err == Z_NEED_DICT); + + } while (err != Z_STREAM_END && ibuflen != 0); + + save: + if (save_unconsumed_input(self, &data, err) < 0) + goto abort; /* If at end of stream, clean up any memory allocated by zlib. */ if (err == Z_STREAM_END) { self->eof = 1; self->is_initialised = 0; - err = inflateEnd(&(self->zst)); + err = inflateEnd(&self->zst); if (err != Z_OK) { zlib_error(self->zst, err, "while finishing decompression"); - Py_DECREF(retval); - retval = NULL; - goto error; + goto abort; } } - if (_PyBytes_Resize(&retval, self->zst.total_out - start_total_out) < 0) { - Py_CLEAR(retval); - } + if (_PyBytes_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) == 0) + goto success; -error: - + abort: + Py_CLEAR(RetVal); + success: + PyBuffer_Release(&data); LEAVE_ZLIB(self); - - return retval; + return RetVal; } #include "clinic/zlibmodule.c.h" -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:13:45 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 23 Jul 2016 04:13:45 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327591=3A_Merge_from_3=2E5?= Message-ID: <20160723041345.20010.75136.04E72000@psf.io> https://hg.python.org/cpython/rev/d5f796da4013 changeset: 102423:d5f796da4013 parent: 102421:bd556f748cf8 parent: 102422:da955567d7c7 user: Berker Peksag date: Sat Jul 23 07:13:41 2016 +0300 summary: Issue #27591: Merge from 3.5 files: Modules/_multiprocessing/semaphore.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c --- a/Modules/_multiprocessing/semaphore.c +++ b/Modules/_multiprocessing/semaphore.c @@ -114,6 +114,9 @@ assert(sigint_event != NULL); handles[nhandles++] = sigint_event; } + else { + sigint_event = NULL; + } /* do the wait */ Py_BEGIN_ALLOW_THREADS -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:13:45 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 23 Jul 2016 04:13:45 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NTkx?= =?utf-8?q?=3A_Set_sigint=5Fevent_to_NULL_if_=5FPyOS=5FIsMainThread=28=29_?= =?utf-8?q?returns_false?= Message-ID: <20160723041345.58916.87036.A4BDFF5A@psf.io> https://hg.python.org/cpython/rev/da955567d7c7 changeset: 102422:da955567d7c7 branch: 3.5 parent: 102420:bd61bcd9bee8 user: Berker Peksag date: Sat Jul 23 07:13:14 2016 +0300 summary: Issue #27591: Set sigint_event to NULL if _PyOS_IsMainThread() returns false Patch by Chris Angelico. files: Modules/_multiprocessing/semaphore.c | 3 +++ 1 files changed, 3 insertions(+), 0 deletions(-) diff --git a/Modules/_multiprocessing/semaphore.c b/Modules/_multiprocessing/semaphore.c --- a/Modules/_multiprocessing/semaphore.c +++ b/Modules/_multiprocessing/semaphore.c @@ -114,6 +114,9 @@ assert(sigint_event != NULL); handles[nhandles++] = sigint_event; } + else { + sigint_event = NULL; + } /* do the wait */ Py_BEGIN_ALLOW_THREADS -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:15:15 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 23 Jul 2016 04:15:15 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327493=3A_Fix_test?= =?utf-8?q?=5Fpath=5Fobjects_under_Windows?= Message-ID: <20160723041515.10833.70603.A18E6388@psf.io> https://hg.python.org/cpython/rev/5424252ce174 changeset: 102424:5424252ce174 user: Berker Peksag date: Sat Jul 23 07:15:12 2016 +0300 summary: Issue #27493: Fix test_path_objects under Windows files: Lib/test/test_logging.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -596,8 +596,8 @@ for cls, args in cases: h = cls(*args) self.assertTrue(os.path.exists(fn)) + h.close() os.unlink(fn) - h.close() @unittest.skipIf(os.name == 'nt', 'WatchedFileHandler not appropriate for Windows.') @unittest.skipUnless(threading, 'Threading required for this test.') -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:30:09 2016 From: python-checkins at python.org (martin.panter) Date: Sat, 23 Jul 2016 04:30:09 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3MTMw?= =?utf-8?q?=3A_Fix_handling_of_buffers_exceeding_=28U=29INT=5FMAX_in_?= =?utf-8?b?4oCcemxpYuKAnSBtb2R1bGU=?= Message-ID: <20160723043009.19859.88454.A8FC6AAF@psf.io> https://hg.python.org/cpython/rev/2192edcfea02 changeset: 102425:2192edcfea02 branch: 2.7 parent: 102409:434fc614c506 user: Martin Panter date: Sat Jul 23 04:22:09 2016 +0000 summary: Issue #27130: Fix handling of buffers exceeding (U)INT_MAX in ?zlib? module Ported from patches by Xiang Zhang, Nadeem Vawda, and myself. files: Lib/test/test_zlib.py | 120 +++++ Misc/NEWS | 5 + Modules/zlibmodule.c | 642 ++++++++++++++++------------- 3 files changed, 484 insertions(+), 283 deletions(-) diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -1,4 +1,5 @@ import unittest +from test import test_support as support from test.test_support import TESTFN, run_unittest, import_module, unlink, requires import binascii import pickle @@ -80,6 +81,16 @@ zlib.crc32('spam', (2**31))) +# Issue #10276 - check that inputs >=4GB are handled correctly. +class ChecksumBigBufferTestCase(unittest.TestCase): + + @precisionbigmemtest(size=_4G + 4, memuse=1, dry_run=False) + def test_big_buffer(self, size): + data = b"nyan" * (_1G + 1) + self.assertEqual(zlib.crc32(data) & 0xFFFFFFFF, 1044521549) + self.assertEqual(zlib.adler32(data) & 0xFFFFFFFF, 2256789997) + + class ExceptionTestCase(unittest.TestCase): # make sure we generate some expected errors def test_badlevel(self): @@ -104,6 +115,15 @@ self.assertRaises(ValueError, zlib.decompressobj().flush, 0) self.assertRaises(ValueError, zlib.decompressobj().flush, -1) + @support.cpython_only + def test_overflow(self): + with self.assertRaisesRegexp(OverflowError, 'int too large'): + zlib.decompress(b'', 15, sys.maxsize + 1) + with self.assertRaisesRegexp(OverflowError, 'int too large'): + zlib.decompressobj().decompress(b'', sys.maxsize + 1) + with self.assertRaisesRegexp(OverflowError, 'int too large'): + zlib.decompressobj().flush(sys.maxsize + 1) + class BaseCompressTestCase(object): def check_big_compress_buffer(self, size, compress_func): @@ -167,6 +187,28 @@ def test_big_decompress_buffer(self, size): self.check_big_decompress_buffer(size, zlib.decompress) + @precisionbigmemtest(size=_4G, memuse=1) + def test_large_bufsize(self, size): + # Test decompress(bufsize) parameter greater than the internal limit + data = HAMLET_SCENE * 10 + compressed = zlib.compress(data, 1) + self.assertEqual(zlib.decompress(compressed, 15, size), data) + + def test_custom_bufsize(self): + data = HAMLET_SCENE * 10 + compressed = zlib.compress(data, 1) + self.assertEqual(zlib.decompress(compressed, 15, CustomInt()), data) + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @precisionbigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): + data = b'x' * size + try: + comp = zlib.compress(data, 0) + self.assertEqual(zlib.decompress(comp), data) + finally: + comp = data = None + class CompressObjectTestCase(BaseCompressTestCase, unittest.TestCase): # Test compression object @@ -318,6 +360,22 @@ self.assertRaises(ValueError, dco.decompress, "", -1) self.assertEqual('', dco.unconsumed_tail) + def test_maxlen_large(self): + # Sizes up to sys.maxsize should be accepted, although zlib is + # internally limited to expressing sizes with unsigned int + data = HAMLET_SCENE * 10 + DEFAULTALLOC = 16 * 1024 + self.assertGreater(len(data), DEFAULTALLOC) + compressed = zlib.compress(data, 1) + dco = zlib.decompressobj() + self.assertEqual(dco.decompress(compressed, sys.maxsize), data) + + def test_maxlen_custom(self): + data = HAMLET_SCENE * 10 + compressed = zlib.compress(data, 1) + dco = zlib.decompressobj() + self.assertEqual(dco.decompress(compressed, CustomInt()), data[:100]) + def test_clear_unconsumed_tail(self): # Issue #12050: calling decompress() without providing max_length # should clear the unconsumed_tail attribute. @@ -416,6 +474,22 @@ data = zlib.compress(input2) self.assertEqual(dco.flush(), input1[1:]) + @precisionbigmemtest(size=_4G, memuse=1) + def test_flush_large_length(self, size): + # Test flush(length) parameter greater than internal limit UINT_MAX + input = HAMLET_SCENE * 10 + data = zlib.compress(input, 1) + dco = zlib.decompressobj() + dco.decompress(data, 1) + self.assertEqual(dco.flush(size), input[1:]) + + def test_flush_custom_length(self): + input = HAMLET_SCENE * 10 + data = zlib.compress(input, 1) + dco = zlib.decompressobj() + dco.decompress(data, 1) + self.assertEqual(dco.flush(CustomInt()), input[1:]) + @requires_Compress_copy def test_compresscopy(self): # Test copying a compression object @@ -527,6 +601,46 @@ decompress = lambda s: d.decompress(s) + d.flush() self.check_big_decompress_buffer(size, decompress) + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @precisionbigmemtest(size=_4G + 100, memuse=4) + def test_64bit_compress(self, size): + data = b'x' * size + co = zlib.compressobj(0) + do = zlib.decompressobj() + try: + comp = co.compress(data) + co.flush() + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(uncomp, data) + finally: + comp = uncomp = data = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @precisionbigmemtest(size=_4G + 100, memuse=3) + def test_large_unused_data(self, size): + data = b'abcdefghijklmnop' + unused = b'x' * size + comp = zlib.compress(data) + unused + do = zlib.decompressobj() + try: + uncomp = do.decompress(comp) + do.flush() + self.assertEqual(unused, do.unused_data) + self.assertEqual(uncomp, data) + finally: + unused = comp = do = None + + @unittest.skipUnless(sys.maxsize > 2**32, 'requires 64bit platform') + @precisionbigmemtest(size=_4G + 100, memuse=5) + def test_large_unconsumed_tail(self, size): + data = b'x' * size + do = zlib.decompressobj() + try: + comp = zlib.compress(data, 0) + uncomp = do.decompress(comp, 1) + do.flush() + self.assertEqual(uncomp, data) + self.assertEqual(do.unconsumed_tail, b'') + finally: + comp = uncomp = data = None + def test_wbits(self): co = zlib.compressobj(1, zlib.DEFLATED, 15) zlib15 = co.compress(HAMLET_SCENE) + co.flush() @@ -658,9 +772,15 @@ """ +class CustomInt: + def __int__(self): + return 100 + + def test_main(): run_unittest( ChecksumTestCase, + ChecksumBigBufferTestCase, ExceptionTestCase, CompressTestCase, CompressObjectTestCase diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,11 @@ Library ------- +- Issue #27130: In the "zlib" module, fix handling of large buffers + (typically 2 or 4 GiB). Previously, inputs were limited to 2 GiB, and + compression and decompression operations did not properly handle results of + 2 or 4 GiB. + - Issue #23804: Fix SSL zero-length recv() calls to not block and not raise an error about unclean EOF. diff --git a/Modules/zlibmodule.c b/Modules/zlibmodule.c --- a/Modules/zlibmodule.c +++ b/Modules/zlibmodule.c @@ -1,8 +1,9 @@ /* zlibmodule.c -- gzip-compatible data compression */ -/* See http://www.gzip.org/zlib/ */ +/* See http://zlib.net/ */ /* Windows users: read Python's PCbuild\readme.txt */ +#define PY_SSIZE_T_CLEAN #include "Python.h" #include "zlib.h" @@ -129,6 +130,71 @@ return self; } +static void +arrange_input_buffer(z_stream *zst, Py_ssize_t *remains) +{ + if ((size_t)*remains > UINT_MAX) { + zst->avail_in = UINT_MAX; + } else { + zst->avail_in = *remains; + } + *remains -= zst->avail_in; +} + +static Py_ssize_t +arrange_output_buffer_with_maximum(z_stream *zst, PyObject **buffer, + Py_ssize_t length, + Py_ssize_t max_length) +{ + Py_ssize_t occupied; + + if (*buffer == NULL) { + if (!(*buffer = PyBytes_FromStringAndSize(NULL, length))) + return -1; + occupied = 0; + } + else { + occupied = zst->next_out - (Byte *)PyBytes_AS_STRING(*buffer); + + if (length == occupied) { + Py_ssize_t new_length; + assert(length <= max_length); + /* can not scale the buffer over max_length */ + if (length == max_length) + return -2; + if (length <= (max_length >> 1)) + new_length = length << 1; + else + new_length = max_length; + if (_PyBytes_Resize(buffer, new_length) < 0) + return -1; + length = new_length; + } + } + + if ((size_t)(length - occupied) > UINT_MAX) { + zst->avail_out = UINT_MAX; + } else { + zst->avail_out = length - occupied; + } + zst->next_out = (Byte *)PyBytes_AS_STRING(*buffer) + occupied; + + return length; +} + +static Py_ssize_t +arrange_output_buffer(z_stream *zst, PyObject **buffer, Py_ssize_t length) +{ + Py_ssize_t ret; + + ret = arrange_output_buffer_with_maximum(zst, buffer, length, + PY_SSIZE_T_MAX); + if (ret == -2) + PyErr_NoMemory(); + + return ret; +} + PyDoc_STRVAR(compress__doc__, "compress(string[, level]) -- Returned compressed string.\n" "\n" @@ -137,44 +203,31 @@ static PyObject * PyZlib_compress(PyObject *self, PyObject *args) { - PyObject *ReturnVal = NULL; - Byte *input, *output; - int length, level=Z_DEFAULT_COMPRESSION, err; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen, obuflen = DEFAULTALLOC; + int level=Z_DEFAULT_COMPRESSION; + int err, flush; z_stream zst; /* require Python string object, optional 'level' arg */ - if (!PyArg_ParseTuple(args, "s#|i:compress", &input, &length, &level)) + if (!PyArg_ParseTuple(args, "s#|i:compress", &ibuf, &ibuflen, &level)) return NULL; - zst.avail_out = length + length/1000 + 12 + 1; - - output = (Byte*)malloc(zst.avail_out); - if (output == NULL) { - PyErr_SetString(PyExc_MemoryError, - "Can't allocate memory to compress data"); - return NULL; - } - - /* Past the point of no return. From here on out, we need to make sure - we clean up mallocs & INCREFs. */ - zst.zalloc = (alloc_func)NULL; zst.zfree = (free_func)Z_NULL; - zst.next_out = (Byte *)output; - zst.next_in = (Byte *)input; - zst.avail_in = length; + zst.next_in = ibuf; err = deflateInit(&zst, level); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while compressing data"); goto error; - case(Z_STREAM_ERROR): - PyErr_SetString(ZlibError, - "Bad compression level"); + case Z_STREAM_ERROR: + PyErr_SetString(ZlibError, "Bad compression level"); goto error; default: deflateEnd(&zst); @@ -182,27 +235,45 @@ goto error; } - Py_BEGIN_ALLOW_THREADS; - err = deflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS; + do { + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - if (err != Z_STREAM_END) { - zlib_error(zst, err, "while compressing data"); - deflateEnd(&zst); - goto error; + do { + obuflen = arrange_output_buffer(&zst, &RetVal, obuflen); + if (obuflen < 0) { + deflateEnd(&zst); + goto error; + } + + Py_BEGIN_ALLOW_THREADS + err = deflate(&zst, flush); + Py_END_ALLOW_THREADS + + if (err == Z_STREAM_ERROR) { + deflateEnd(&zst); + zlib_error(zst, err, "while compressing data"); + goto error; + } + + } while (zst.avail_out == 0); + assert(zst.avail_in == 0); + + } while (flush != Z_FINISH); + assert(err == Z_STREAM_END); + + err = deflateEnd(&zst); + if (err == Z_OK) { + if (_PyBytes_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)) < 0) + goto error; + return RetVal; } - - err=deflateEnd(&zst); - if (err == Z_OK) - ReturnVal = PyString_FromStringAndSize((char *)output, - zst.total_out); else zlib_error(zst, err, "while finishing compression"); - error: - free(output); - - return ReturnVal; + Py_XDECREF(RetVal); + return NULL; } PyDoc_STRVAR(decompress__doc__, @@ -214,36 +285,32 @@ static PyObject * PyZlib_decompress(PyObject *self, PyObject *args) { - PyObject *result_str; - Byte *input; - int length, err; + PyObject *RetVal = NULL; + Byte *ibuf; + Py_ssize_t ibuflen; + int err, flush; int wsize=DEF_WBITS; Py_ssize_t r_strlen=DEFAULTALLOC; z_stream zst; if (!PyArg_ParseTuple(args, "s#|in:decompress", - &input, &length, &wsize, &r_strlen)) + &ibuf, &ibuflen, &wsize, &r_strlen)) return NULL; - if (r_strlen <= 0) + if (r_strlen <= 0) { r_strlen = 1; - - zst.avail_in = length; - zst.avail_out = r_strlen; - - if (!(result_str = PyString_FromStringAndSize(NULL, r_strlen))) - return NULL; + } zst.zalloc = (alloc_func)NULL; zst.zfree = (free_func)Z_NULL; - zst.next_out = (Byte *)PyString_AS_STRING(result_str); - zst.next_in = (Byte *)input; + zst.avail_in = 0; + zst.next_in = ibuf; err = inflateInit2(&zst, wsize); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Out of memory while decompressing data"); goto error; @@ -254,42 +321,46 @@ } do { - Py_BEGIN_ALLOW_THREADS - err=inflate(&zst, Z_FINISH); - Py_END_ALLOW_THREADS + arrange_input_buffer(&zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - switch(err) { - case(Z_STREAM_END): - break; - case(Z_BUF_ERROR): - /* - * If there is at least 1 byte of room according to zst.avail_out - * and we get this error, assume that it means zlib cannot - * process the inflate call() due to an error in the data. - */ - if (zst.avail_out > 0) { - zlib_error(zst, err, "while decompressing data"); + do { + r_strlen = arrange_output_buffer(&zst, &RetVal, r_strlen); + if (r_strlen < 0) { inflateEnd(&zst); goto error; } - /* fall through */ - case(Z_OK): - /* need more memory */ - if (_PyString_Resize(&result_str, r_strlen << 1) < 0) { + + Py_BEGIN_ALLOW_THREADS + err = inflate(&zst, flush); + Py_END_ALLOW_THREADS + + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + case Z_MEM_ERROR: inflateEnd(&zst); + PyErr_SetString(PyExc_MemoryError, + "Out of memory while decompressing data"); + goto error; + default: + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); goto error; } - zst.next_out = (unsigned char *)PyString_AS_STRING(result_str) \ - + r_strlen; - zst.avail_out = r_strlen; - r_strlen = r_strlen << 1; - break; - default: - inflateEnd(&zst); - zlib_error(zst, err, "while decompressing data"); - goto error; - } - } while (err != Z_STREAM_END); + + } while (zst.avail_out == 0); + + } while (err != Z_STREAM_END && ibuflen != 0); + + + if (err != Z_STREAM_END) { + inflateEnd(&zst); + zlib_error(zst, err, "while decompressing data"); + goto error; + } err = inflateEnd(&zst); if (err != Z_OK) { @@ -297,11 +368,12 @@ goto error; } - _PyString_Resize(&result_str, zst.total_out); - return result_str; + _PyString_Resize(&RetVal, zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)); + return RetVal; error: - Py_XDECREF(result_str); + Py_XDECREF(RetVal); return NULL; } @@ -317,23 +389,23 @@ return NULL; self = newcompobject(&Comptype); - if (self==NULL) + if (self == NULL) return(NULL); self->zst.zalloc = (alloc_func)NULL; self->zst.zfree = (free_func)Z_NULL; self->zst.next_in = NULL; self->zst.avail_in = 0; err = deflateInit2(&self->zst, level, method, wbits, memLevel, strategy); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; - return (PyObject*)self; - case (Z_MEM_ERROR): + return (PyObject *)self; + case Z_MEM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); return NULL; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); return NULL; @@ -354,21 +426,21 @@ self = newcompobject(&Decomptype); if (self == NULL) - return(NULL); + return NULL; self->zst.zalloc = (alloc_func)NULL; self->zst.zfree = (free_func)Z_NULL; self->zst.next_in = NULL; self->zst.avail_in = 0; err = inflateInit2(&self->zst, wbits); - switch(err) { - case (Z_OK): + switch (err) { + case Z_OK: self->is_initialised = 1; - return (PyObject*)self; - case(Z_STREAM_ERROR): + return (PyObject *)self; + case Z_STREAM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_ValueError, "Invalid initialization option"); return NULL; - case (Z_MEM_ERROR): + case Z_MEM_ERROR: Py_DECREF(self); PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); @@ -411,58 +483,44 @@ static PyObject * PyZlib_objcompress(compobject *self, PyObject *args) { - int err, inplen; - Py_ssize_t length = DEFAULTALLOC; - PyObject *RetVal; - Byte *input; - unsigned long start_total_out; + PyObject *RetVal = NULL; + Py_ssize_t ibuflen, obuflen = DEFAULTALLOC; + int err; - if (!PyArg_ParseTuple(args, "s#:compress", &input, &inplen)) - return NULL; - - if (!(RetVal = PyString_FromStringAndSize(NULL, length))) + if (!PyArg_ParseTuple(args, "s#:compress", &self->zst.next_in, &ibuflen)) return NULL; ENTER_ZLIB - start_total_out = self->zst.total_out; - self->zst.avail_in = inplen; - self->zst.next_in = input; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal); + do { + arrange_input_buffer(&self->zst, &ibuflen); - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS + do { + obuflen = arrange_output_buffer(&self->zst, &RetVal, obuflen); + if (obuflen < 0) + goto error; - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (_PyString_Resize(&RetVal, length << 1) < 0) - goto error; - self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \ - + length; - self->zst.avail_out = length; - length = length << 1; + Py_BEGIN_ALLOW_THREADS + err = deflate(&self->zst, Z_NO_FLUSH); + Py_END_ALLOW_THREADS - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), Z_NO_FLUSH); - Py_END_ALLOW_THREADS - } - /* We will only get Z_BUF_ERROR if the output buffer was full but - there wasn't more output when we tried again, so it is not an error - condition. - */ + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while compressing data"); + goto error; + } - if (err != Z_OK && err != Z_BUF_ERROR) { - zlib_error(self->zst, err, "while compressing"); - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } - _PyString_Resize(&RetVal, self->zst.total_out - start_total_out); + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); + + } while (ibuflen != 0); + + _PyString_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)); + goto success; error: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB return RetVal; } @@ -470,41 +528,46 @@ /* Helper for objdecompress() and unflush(). Saves any unconsumed input data in self->unused_data or self->unconsumed_tail, as appropriate. */ static int -save_unconsumed_input(compobject *self, int err) +save_unconsumed_input(compobject *self, Byte *input, Py_ssize_t inplen, + int err) { if (err == Z_STREAM_END) { /* The end of the compressed data has been reached. Store the leftover input data in self->unused_data. */ if (self->zst.avail_in > 0) { Py_ssize_t old_size = PyString_GET_SIZE(self->unused_data); - Py_ssize_t new_size; + Py_ssize_t new_size, left_size; PyObject *new_data; - if (self->zst.avail_in > PY_SSIZE_T_MAX - old_size) { + left_size = input + inplen - self->zst.next_in; + if (left_size > (PY_SSIZE_T_MAX - old_size)) { PyErr_NoMemory(); return -1; } - new_size = old_size + self->zst.avail_in; + new_size = old_size + left_size; new_data = PyString_FromStringAndSize(NULL, new_size); if (new_data == NULL) return -1; Py_MEMCPY(PyString_AS_STRING(new_data), PyString_AS_STRING(self->unused_data), old_size); Py_MEMCPY(PyString_AS_STRING(new_data) + old_size, - self->zst.next_in, self->zst.avail_in); + self->zst.next_in, left_size); Py_SETREF(self->unused_data, new_data); self->zst.avail_in = 0; } } + if (self->zst.avail_in > 0 || PyString_GET_SIZE(self->unconsumed_tail)) { /* This code handles two distinct cases: 1. Output limit was reached. Save leftover input in unconsumed_tail. 2. All input data was consumed. Clear unconsumed_tail. */ + Py_ssize_t left_size = input + inplen - self->zst.next_in; PyObject *new_data = PyString_FromStringAndSize( - (char *)self->zst.next_in, self->zst.avail_in); + (char *)self->zst.next_in, left_size); if (new_data == NULL) return -1; Py_SETREF(self->unconsumed_tail, new_data); } + return 0; } @@ -522,71 +585,69 @@ static PyObject * PyZlib_objdecompress(compobject *self, PyObject *args) { - int err, inplen, max_length = 0; - Py_ssize_t old_length, length = DEFAULTALLOC; - PyObject *RetVal; + int err = Z_OK; + Py_ssize_t inplen, max_length = 0; + Py_ssize_t ibuflen, obuflen = DEFAULTALLOC, hard_limit; + PyObject *RetVal = NULL; Byte *input; - unsigned long start_total_out; - if (!PyArg_ParseTuple(args, "s#|i:decompress", &input, + if (!PyArg_ParseTuple(args, "s#|n:decompress", &input, &inplen, &max_length)) return NULL; if (max_length < 0) { PyErr_SetString(PyExc_ValueError, "max_length must be greater than zero"); return NULL; - } + } else if (max_length == 0) + hard_limit = PY_SSIZE_T_MAX; + else + hard_limit = max_length; + + self->zst.next_in = input; + ibuflen = inplen; /* limit amount of data allocated to max_length */ - if (max_length && length > max_length) - length = max_length; - if (!(RetVal = PyString_FromStringAndSize(NULL, length))) - return NULL; + if (max_length && obuflen > max_length) + obuflen = max_length; ENTER_ZLIB - start_total_out = self->zst.total_out; - self->zst.avail_in = inplen; - self->zst.next_in = input; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal); + do { + arrange_input_buffer(&self->zst, &ibuflen); - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS + do { + obuflen = arrange_output_buffer_with_maximum(&self->zst, &RetVal, + obuflen, hard_limit); + if (obuflen == -2) { + if (max_length > 0) { + goto save; + } + PyErr_NoMemory(); + } + if (obuflen < 0) { + goto abort; + } - /* While Z_OK and the output buffer is full, there might be more output. - So extend the output buffer and try again. - */ - while (err == Z_OK && self->zst.avail_out == 0) { - /* If max_length set, don't continue decompressing if we've already - reached the limit. - */ - if (max_length && length >= max_length) - break; + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, Z_SYNC_FLUSH); + Py_END_ALLOW_THREADS - /* otherwise, ... */ - old_length = length; - length = length << 1; - if (max_length && length > max_length) - length = max_length; + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + goto save; + } - if (_PyString_Resize(&RetVal, length) < 0) - goto error; - self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \ - + old_length; - self->zst.avail_out = length - old_length; + } while (self->zst.avail_out == 0); - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_SYNC_FLUSH); - Py_END_ALLOW_THREADS - } + } while (err != Z_STREAM_END && ibuflen != 0); - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(RetVal); - RetVal = NULL; - goto error; - } + save: + if (save_unconsumed_input(self, input, inplen, err) < 0) + goto abort; /* This is the logical place to call inflateEnd, but the old behaviour of only calling it on flush() is preserved. */ @@ -597,14 +658,16 @@ not an error condition. */ zlib_error(self->zst, err, "while decompressing"); - Py_DECREF(RetVal); - RetVal = NULL; - goto error; + goto abort; } - _PyString_Resize(&RetVal, self->zst.total_out - start_total_out); + _PyString_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)); + goto success; - error: + abort: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB return RetVal; @@ -621,10 +684,10 @@ static PyObject * PyZlib_flush(compobject *self, PyObject *args) { - int err, length = DEFAULTALLOC; - PyObject *RetVal; + int err; + Py_ssize_t length = DEFAULTALLOC; + PyObject *RetVal = NULL; int flushmode = Z_FINISH; - unsigned long start_total_out; if (!PyArg_ParseTuple(args, "|i:flush", &flushmode)) return NULL; @@ -635,44 +698,37 @@ return PyString_FromStringAndSize(NULL, 0); } - if (!(RetVal = PyString_FromStringAndSize(NULL, length))) - return NULL; - ENTER_ZLIB - start_total_out = self->zst.total_out; self->zst.avail_in = 0; - self->zst.avail_out = length; - self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal); - Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), flushmode); - Py_END_ALLOW_THREADS - - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while (err == Z_OK && self->zst.avail_out == 0) { - if (_PyString_Resize(&RetVal, length << 1) < 0) + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) { + Py_CLEAR(RetVal); goto error; - self->zst.next_out = (unsigned char *)PyString_AS_STRING(RetVal) \ - + length; - self->zst.avail_out = length; - length = length << 1; + } Py_BEGIN_ALLOW_THREADS - err = deflate(&(self->zst), flushmode); + err = deflate(&self->zst, flushmode); Py_END_ALLOW_THREADS - } + + if (err == Z_STREAM_ERROR) { + zlib_error(self->zst, err, "while flushing"); + Py_CLEAR(RetVal); + goto error; + } + } while (self->zst.avail_out == 0); + assert(self->zst.avail_in == 0); /* If flushmode is Z_FINISH, we also have to call deflateEnd() to free various data structures. Note we should only get Z_STREAM_END when flushmode is Z_FINISH, but checking both for safety*/ if (err == Z_STREAM_END && flushmode == Z_FINISH) { - err = deflateEnd(&(self->zst)); + err = deflateEnd(&self->zst); if (err != Z_OK) { zlib_error(self->zst, err, "from deflateEnd()"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } else @@ -682,18 +738,17 @@ but there wasn't more output when we tried again, so it is not an error condition. */ - } else if (err!=Z_OK && err!=Z_BUF_ERROR) { + } else if (err != Z_OK && err != Z_BUF_ERROR) { zlib_error(self->zst, err, "while flushing"); - Py_DECREF(RetVal); - RetVal = NULL; + Py_CLEAR(RetVal); goto error; } - _PyString_Resize(&RetVal, self->zst.total_out - start_total_out); + _PyString_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)); error: LEAVE_ZLIB - return RetVal; } @@ -715,13 +770,13 @@ */ ENTER_ZLIB err = deflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for compression object"); goto error; @@ -764,13 +819,13 @@ */ ENTER_ZLIB err = inflateCopy(&retval->zst, &self->zst); - switch(err) { - case(Z_OK): + switch (err) { + case Z_OK: break; - case(Z_STREAM_ERROR): + case Z_STREAM_ERROR: PyErr_SetString(PyExc_ValueError, "Inconsistent stream state"); goto error; - case(Z_MEM_ERROR): + case Z_MEM_ERROR: PyErr_SetString(PyExc_MemoryError, "Can't allocate memory for decompression object"); goto error; @@ -807,73 +862,76 @@ static PyObject * PyZlib_unflush(compobject *self, PyObject *args) { - int err, length = DEFAULTALLOC; - PyObject * retval = NULL; - unsigned long start_total_out; + Py_ssize_t length = DEFAULTALLOC; + int err, flush; + PyObject *RetVal = NULL; + Py_ssize_t ibuflen; - if (!PyArg_ParseTuple(args, "|i:flush", &length)) + if (!PyArg_ParseTuple(args, "|n:flush", &length)) return NULL; if (length <= 0) { PyErr_SetString(PyExc_ValueError, "length must be greater than zero"); return NULL; } - if (!(retval = PyString_FromStringAndSize(NULL, length))) - return NULL; - ENTER_ZLIB - start_total_out = self->zst.total_out; - self->zst.avail_in = PyString_GET_SIZE(self->unconsumed_tail); self->zst.next_in = (Byte *)PyString_AS_STRING(self->unconsumed_tail); - self->zst.avail_out = length; - self->zst.next_out = (Byte *)PyString_AS_STRING(retval); + ibuflen = PyString_GET_SIZE(self->unconsumed_tail); - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS + do { + arrange_input_buffer(&self->zst, &ibuflen); + flush = ibuflen == 0 ? Z_FINISH : Z_NO_FLUSH; - /* while Z_OK and the output buffer is full, there might be more output, - so extend the output buffer and try again */ - while ((err == Z_OK || err == Z_BUF_ERROR) && self->zst.avail_out == 0) { - if (_PyString_Resize(&retval, length << 1) < 0) - goto error; - self->zst.next_out = (Byte *)PyString_AS_STRING(retval) + length; - self->zst.avail_out = length; - length = length << 1; + do { + length = arrange_output_buffer(&self->zst, &RetVal, length); + if (length < 0) + goto abort; - Py_BEGIN_ALLOW_THREADS - err = inflate(&(self->zst), Z_FINISH); - Py_END_ALLOW_THREADS - } + Py_BEGIN_ALLOW_THREADS + err = inflate(&self->zst, flush); + Py_END_ALLOW_THREADS - if (save_unconsumed_input(self, err) < 0) { - Py_DECREF(retval); - retval = NULL; - goto error; - } + switch (err) { + case Z_OK: /* fall through */ + case Z_BUF_ERROR: /* fall through */ + case Z_STREAM_END: + break; + default: + goto save; + } + + } while (self->zst.avail_out == 0); + + } while (err != Z_STREAM_END && ibuflen != 0); + + save: + if (save_unconsumed_input(self, + (Byte *)PyString_AS_STRING(self->unconsumed_tail), + PyString_GET_SIZE(self->unconsumed_tail), err) < 0) + goto abort; /* If flushmode is Z_FINISH, we also have to call deflateEnd() to free various data structures. Note we should only get Z_STREAM_END when flushmode is Z_FINISH */ if (err == Z_STREAM_END) { - err = inflateEnd(&(self->zst)); + err = inflateEnd(&self->zst); self->is_initialised = 0; if (err != Z_OK) { zlib_error(self->zst, err, "from inflateEnd()"); - Py_DECREF(retval); - retval = NULL; - goto error; + goto abort; } } - _PyString_Resize(&retval, self->zst.total_out - start_total_out); + _PyString_Resize(&RetVal, self->zst.next_out - + (Byte *)PyBytes_AS_STRING(RetVal)); + goto success; -error: - + abort: + Py_CLEAR(RetVal); + success: LEAVE_ZLIB - - return retval; + return RetVal; } static PyMethodDef comp_methods[] = @@ -943,15 +1001,24 @@ { unsigned int adler32val = 1; /* adler32(0L, Z_NULL, 0) */ Byte *buf; - int len, signed_val; + Py_ssize_t len; + int signed_val; if (!PyArg_ParseTuple(args, "s#|I:adler32", &buf, &len, &adler32val)) return NULL; + + /* Avoid truncation of length for very large buffers. adler32() takes + length as an unsigned int, which may be narrower than Py_ssize_t. */ + while ((size_t)len > UINT_MAX) { + adler32val = adler32(adler32val, buf, UINT_MAX); + buf += (size_t) UINT_MAX; + len -= (size_t) UINT_MAX; + } /* In Python 2.x we return a signed integer regardless of native platform * long size (the 32bit unsigned long is treated as 32-bit signed and sign * extended into a 64-bit long inside the integer object). 3.0 does the * right thing and returns unsigned. http://bugs.python.org/issue1202 */ - signed_val = adler32(adler32val, buf, len); + signed_val = adler32(adler32val, buf, (unsigned int)len); return PyInt_FromLong(signed_val); } @@ -966,15 +1033,24 @@ { unsigned int crc32val = 0; /* crc32(0L, Z_NULL, 0) */ Byte *buf; - int len, signed_val; + Py_ssize_t len; + int signed_val; if (!PyArg_ParseTuple(args, "s#|I:crc32", &buf, &len, &crc32val)) return NULL; + + /* Avoid truncation of length for very large buffers. crc32() takes + length as an unsigned int, which may be narrower than Py_ssize_t. */ + while ((size_t)len > UINT_MAX) { + crc32val = crc32(crc32val, buf, UINT_MAX); + buf += (size_t) UINT_MAX; + len -= (size_t) UINT_MAX; + } /* In Python 2.x we return a signed integer regardless of native platform * long size (the 32bit unsigned long is treated as 32-bit signed and sign * extended into a 64-bit long inside the integer object). 3.0 does the * right thing and returns unsigned. http://bugs.python.org/issue1202 */ - signed_val = crc32(crc32val, buf, len); + signed_val = crc32(crc32val, buf, (unsigned int)len); return PyInt_FromLong(signed_val); } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:32:16 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 23 Jul 2016 04:32:16 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2313849=3A_Merge_from_3=2E5?= Message-ID: <20160723043216.10853.47959.D5D8FD29@psf.io> https://hg.python.org/cpython/rev/9498736fbd8f changeset: 102427:9498736fbd8f parent: 102424:5424252ce174 parent: 102426:899f06eb390c user: Berker Peksag date: Sat Jul 23 07:32:14 2016 +0300 summary: Issue #13849: Merge from 3.5 files: Lib/test/test_genericpath.py | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -272,6 +272,15 @@ # and is only meant to be inherited by others. pathmodule = genericpath + def test_null_bytes(self): + for attr in GenericTest.common_attributes: + # os.path.commonprefix doesn't raise ValueError + if attr == 'commonprefix': + continue + with self.subTest(attr=attr): + with self.assertRaises(ValueError) as cm: + getattr(self.pathmodule, attr)('/tmp\x00abcds') + self.assertEqual(str(cm.exception), 'embedded null byte') # Following TestCase is not supposed to be run from test_genericpath. # It is inherited by other test modules (macpath, ntpath, posixpath). -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 00:32:16 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 23 Jul 2016 04:32:16 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzEzODQ5?= =?utf-8?q?=3A_Add_tests_for_null_byte_checking_in_test=5Fgenericpath?= Message-ID: <20160723043216.40385.27675.2E8B5D90@psf.io> https://hg.python.org/cpython/rev/899f06eb390c changeset: 102426:899f06eb390c branch: 3.5 parent: 102422:da955567d7c7 user: Berker Peksag date: Sat Jul 23 07:31:47 2016 +0300 summary: Issue #13849: Add tests for null byte checking in test_genericpath files: Lib/test/test_genericpath.py | 9 +++++++++ 1 files changed, 9 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -274,6 +274,15 @@ # and is only meant to be inherited by others. pathmodule = genericpath + def test_null_bytes(self): + for attr in GenericTest.common_attributes: + # os.path.commonprefix doesn't raise ValueError + if attr == 'commonprefix': + continue + with self.subTest(attr=attr): + with self.assertRaises(ValueError) as cm: + getattr(self.pathmodule, attr)('/tmp\x00abcds') + self.assertEqual(str(cm.exception), 'embedded null byte') # Following TestCase is not supposed to be run from test_genericpath. # It is inherited by other test modules (macpath, ntpath, posixpath). -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 01:43:07 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 23 Jul 2016 05:43:07 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2313849=3A_Merge_from_3=2E5?= Message-ID: <20160723054307.40461.96545.942F50A6@psf.io> https://hg.python.org/cpython/rev/a28abe83cf5c changeset: 102429:a28abe83cf5c parent: 102427:9498736fbd8f parent: 102428:9e997c8f4876 user: Berker Peksag date: Sat Jul 23 08:43:04 2016 +0300 summary: Issue #13849: Merge from 3.5 files: Lib/test/test_genericpath.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -280,7 +280,7 @@ with self.subTest(attr=attr): with self.assertRaises(ValueError) as cm: getattr(self.pathmodule, attr)('/tmp\x00abcds') - self.assertEqual(str(cm.exception), 'embedded null byte') + self.assertIn('embedded null', str(cm.exception)) # Following TestCase is not supposed to be run from test_genericpath. # It is inherited by other test modules (macpath, ntpath, posixpath). -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 01:43:07 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 23 Jul 2016 05:43:07 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzEzODQ5?= =?utf-8?q?=3A_Fix_test=5Fnull=5Fbytes_under_Windows?= Message-ID: <20160723054306.49155.14765.06D03DDB@psf.io> https://hg.python.org/cpython/rev/9e997c8f4876 changeset: 102428:9e997c8f4876 branch: 3.5 parent: 102426:899f06eb390c user: Berker Peksag date: Sat Jul 23 08:42:41 2016 +0300 summary: Issue #13849: Fix test_null_bytes under Windows files: Lib/test/test_genericpath.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/test_genericpath.py b/Lib/test/test_genericpath.py --- a/Lib/test/test_genericpath.py +++ b/Lib/test/test_genericpath.py @@ -282,7 +282,7 @@ with self.subTest(attr=attr): with self.assertRaises(ValueError) as cm: getattr(self.pathmodule, attr)('/tmp\x00abcds') - self.assertEqual(str(cm.exception), 'embedded null byte') + self.assertIn('embedded null', str(cm.exception)) # Following TestCase is not supposed to be run from test_genericpath. # It is inherited by other test modules (macpath, ntpath, posixpath). -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 11:02:23 2016 From: python-checkins at python.org (steve.dower) Date: Sat, 23 Jul 2016 15:02:23 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327469=3A_Adds_a_shell_extension_to_the_launcher?= =?utf-8?q?_so_that_drag_and_drop?= Message-ID: <20160723150223.78922.20533.E2B12166@psf.io> https://hg.python.org/cpython/rev/f56adb9800fa changeset: 102431:f56adb9800fa parent: 102429:a28abe83cf5c parent: 102430:3005fc6cff8a user: Steve Dower date: Sat Jul 23 08:02:02 2016 -0700 summary: Issue #27469: Adds a shell extension to the launcher so that drag and drop works correctly. files: Misc/NEWS | 6 + PC/pyshellext.cpp | 605 ++++++++++++++ PC/pyshellext.def | 6 + PC/pyshellext.idl | 12 + PC/pyshellext.rc | 46 + PC/pyshellext_d.def | 6 + PCbuild/pcbuild.proj | 2 + PCbuild/pcbuild.sln | 26 +- PCbuild/pyproject.props | 5 +- PCbuild/pyshellext.vcxproj | 87 ++ PCbuild/pyshellext.vcxproj.filters | 40 + Tools/msi/launcher/launcher.wixproj | 14 + Tools/msi/launcher/launcher.wxs | 2 +- Tools/msi/launcher/launcher_files.wxs | 13 + Tools/msi/launcher/launcher_reg.wxs | 10 +- 15 files changed, 871 insertions(+), 9 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -244,6 +244,12 @@ - Don't use largefile support for GNU/Hurd. +Windows +------- + +- Issue #27469: Adds a shell extension to the launcher so that drag and drop + works correctly. + Tools/Demos ----------- diff --git a/PC/pyshellext.cpp b/PC/pyshellext.cpp new file mode 100644 --- /dev/null +++ b/PC/pyshellext.cpp @@ -0,0 +1,605 @@ +// Support back to Vista +#define _WIN32_WINNT _WIN32_WINNT_VISTA +#include + +// Use WRL to define a classic COM class +#define __WRL_CLASSIC_COM__ +#include + +#include +#include +#include +#include +#include + +#include "pyshellext_h.h" + +#define DDWM_UPDATEWINDOW (WM_USER+3) + +static HINSTANCE hModule; +static CLIPFORMAT cfDropDescription; +static CLIPFORMAT cfDragWindow; + +static const LPCWSTR CLASS_SUBKEY = L"Software\\Classes\\CLSID\\{BEA218D2-6950-497B-9434-61683EC065FE}"; +static const LPCWSTR DRAG_MESSAGE = L"Open with %1"; + +using namespace Microsoft::WRL; + +HRESULT FilenameListCchLengthA(LPCSTR pszSource, size_t cchMax, size_t *pcchLength, size_t *pcchCount) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource && pszSource[0]) { + size_t oneLength; + hr = StringCchLengthA(pszSource, cchMax - length, &oneLength); + if (FAILED(hr)) { + return hr; + } + count += 1; + length += oneLength + (strchr(pszSource, ' ') ? 3 : 1); + pszSource = &pszSource[oneLength + 1]; + } + + *pcchCount = count; + *pcchLength = length; + return hr; +} + +HRESULT FilenameListCchLengthW(LPCWSTR pszSource, size_t cchMax, size_t *pcchLength, size_t *pcchCount) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource && pszSource[0]) { + size_t oneLength; + hr = StringCchLengthW(pszSource, cchMax - length, &oneLength); + if (FAILED(hr)) { + return hr; + } + count += 1; + length += oneLength + (wcschr(pszSource, ' ') ? 3 : 1); + pszSource = &pszSource[oneLength + 1]; + } + + *pcchCount = count; + *pcchLength = length; + return hr; +} + +HRESULT FilenameListCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, LPCSTR pszSource, LPCSTR pszSeparator) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource[0]) { + STRSAFE_LPSTR newDest; + + hr = StringCchCopyExA(pszDest, cchDest, pszSource, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszSource += (newDest - pszDest) + 1; + pszDest = PathQuoteSpacesA(pszDest) ? newDest + 2 : newDest; + + if (pszSource[0]) { + hr = StringCchCopyExA(pszDest, cchDest, pszSeparator, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszDest = newDest; + } + } + + return hr; +} + +HRESULT FilenameListCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, LPCWSTR pszSource, LPCWSTR pszSeparator) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource[0]) { + STRSAFE_LPWSTR newDest; + + hr = StringCchCopyExW(pszDest, cchDest, pszSource, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszSource += (newDest - pszDest) + 1; + pszDest = PathQuoteSpacesW(pszDest) ? newDest + 2 : newDest; + + if (pszSource[0]) { + hr = StringCchCopyExW(pszDest, cchDest, pszSeparator, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszDest = newDest; + } + } + + return hr; +} + + +class PyShellExt : public RuntimeClass< + RuntimeClassFlags, + IDropTarget, + IPersistFile +> +{ + LPOLESTR target, target_dir; + DWORD target_mode; + + IDataObject *data_obj; + +public: + PyShellExt() : target(NULL), target_dir(NULL), target_mode(0), data_obj(NULL) { + OutputDebugString(L"PyShellExt::PyShellExt"); + } + + ~PyShellExt() { + if (target) { + CoTaskMemFree(target); + } + if (target_dir) { + CoTaskMemFree(target_dir); + } + if (data_obj) { + data_obj->Release(); + } + } + +private: + HRESULT UpdateDropDescription(IDataObject *pDataObj) { + STGMEDIUM medium; + FORMATETC fmt = { + cfDropDescription, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + auto hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::UpdateDropDescription - failed to get DROPDESCRIPTION format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::UpdateDropDescription - DROPDESCRIPTION format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + auto dd = (DROPDESCRIPTION*)GlobalLock(medium.hGlobal); + StringCchCopy(dd->szMessage, sizeof(dd->szMessage) / sizeof(dd->szMessage[0]), DRAG_MESSAGE); + StringCchCopy(dd->szInsert, sizeof(dd->szInsert) / sizeof(dd->szInsert[0]), PathFindFileNameW(target)); + dd->type = DROPIMAGE_MOVE; + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return S_OK; + } + + HRESULT GetDragWindow(IDataObject *pDataObj, HWND *phWnd) { + HRESULT hr; + HWND *pMem; + STGMEDIUM medium; + FORMATETC fmt = { + cfDragWindow, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::GetDragWindow - failed to get DragWindow format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::GetDragWindow - DragWindow format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + pMem = (HWND*)GlobalLock(medium.hGlobal); + if (!pMem) { + OutputDebugString(L"PyShellExt::GetDragWindow - failed to lock DragWindow hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + *phWnd = *pMem; + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return S_OK; + } + + HRESULT GetArguments(IDataObject *pDataObj, LPCWSTR *pArguments) { + HRESULT hr; + DROPFILES *pdropfiles; + + STGMEDIUM medium; + FORMATETC fmt = { + CF_HDROP, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::GetArguments - failed to get CF_HDROP format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::GetArguments - CF_HDROP format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + pdropfiles = (DROPFILES*)GlobalLock(medium.hGlobal); + if (!pdropfiles) { + OutputDebugString(L"PyShellExt::GetArguments - failed to lock CF_HDROP hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + if (pdropfiles->fWide) { + LPCWSTR files = (LPCWSTR)((char*)pdropfiles + pdropfiles->pFiles); + size_t len, count; + hr = FilenameListCchLengthW(files, 32767, &len, &count); + if (SUCCEEDED(hr)) { + LPWSTR args = (LPWSTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (args) { + hr = FilenameListCchCopyW(args, 32767, files, L" "); + if (SUCCEEDED(hr)) { + *pArguments = args; + } else { + CoTaskMemFree(args); + } + } else { + hr = E_OUTOFMEMORY; + } + } + } else { + LPCSTR files = (LPCSTR)((char*)pdropfiles + pdropfiles->pFiles); + size_t len, count; + hr = FilenameListCchLengthA(files, 32767, &len, &count); + if (SUCCEEDED(hr)) { + LPSTR temp = (LPSTR)CoTaskMemAlloc(sizeof(CHAR) * (len + 1)); + if (temp) { + hr = FilenameListCchCopyA(temp, 32767, files, " "); + if (SUCCEEDED(hr)) { + int wlen = MultiByteToWideChar(CP_ACP, 0, temp, (int)len, NULL, 0); + if (wlen) { + LPWSTR args = (LPWSTR)CoTaskMemAlloc(sizeof(WCHAR) * (wlen + 1)); + if (MultiByteToWideChar(CP_ACP, 0, temp, (int)len, args, wlen + 1)) { + *pArguments = args; + } else { + OutputDebugString(L"PyShellExt::GetArguments - failed to convert multi-byte to wide-char path"); + CoTaskMemFree(args); + hr = E_FAIL; + } + } else { + OutputDebugString(L"PyShellExt::GetArguments - failed to get length of wide-char path"); + hr = E_FAIL; + } + } + CoTaskMemFree(temp); + } else { + hr = E_OUTOFMEMORY; + } + } + } + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return hr; + } + + HRESULT NotifyDragWindow(HWND hwnd) { + LRESULT res; + + if (!hwnd) { + return S_FALSE; + } + + res = SendMessage(hwnd, DDWM_UPDATEWINDOW, 0, NULL); + + if (res) { + OutputDebugString(L"PyShellExt::NotifyDragWindow - failed to post DDWM_UPDATEWINDOW"); + return E_FAIL; + } + + return S_OK; + } + +public: + // IDropTarget implementation + + STDMETHODIMP DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + HWND hwnd; + + OutputDebugString(L"PyShellExt::DragEnter"); + + pDataObj->AddRef(); + data_obj = pDataObj; + + *pdwEffect = DROPEFFECT_MOVE; + + if (FAILED(UpdateDropDescription(data_obj))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to update drop description"); + } + if (FAILED(GetDragWindow(data_obj, &hwnd))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to get drag window"); + } + if (FAILED(NotifyDragWindow(hwnd))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to notify drag window"); + } + + return S_OK; + } + + STDMETHODIMP DragLeave() { + return S_OK; + } + + STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + return S_OK; + } + + STDMETHODIMP Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + LPCWSTR args; + + OutputDebugString(L"PyShellExt::Drop"); + *pdwEffect = DROPEFFECT_NONE; + + if (pDataObj != data_obj) { + OutputDebugString(L"PyShellExt::Drop - unexpected data object"); + return E_FAIL; + } + + data_obj->Release(); + data_obj = NULL; + + if (SUCCEEDED(GetArguments(pDataObj, &args))) { + OutputDebugString(args); + ShellExecute(NULL, NULL, target, args, target_dir, SW_NORMAL); + + CoTaskMemFree((LPVOID)args); + } else { + OutputDebugString(L"PyShellExt::Drop - failed to get launch arguments"); + } + + return S_OK; + } + + // IPersistFile implementation + + STDMETHODIMP GetCurFile(LPOLESTR *ppszFileName) { + HRESULT hr; + size_t len; + + if (!ppszFileName) { + return E_POINTER; + } + + hr = StringCchLength(target, STRSAFE_MAX_CCH - 1, &len); + if (FAILED(hr)) { + return E_FAIL; + } + + *ppszFileName = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!*ppszFileName) { + return E_OUTOFMEMORY; + } + + hr = StringCchCopy(*ppszFileName, len + 1, target); + if (FAILED(hr)) { + CoTaskMemFree(*ppszFileName); + *ppszFileName = NULL; + return E_FAIL; + } + + return S_OK; + } + + STDMETHODIMP IsDirty() { + return S_FALSE; + } + + STDMETHODIMP Load(LPCOLESTR pszFileName, DWORD dwMode) { + HRESULT hr; + size_t len; + + OutputDebugString(L"PyShellExt::Load"); + OutputDebugString(pszFileName); + + hr = StringCchLength(pszFileName, STRSAFE_MAX_CCH - 1, &len); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to get string length"); + return hr; + } + + if (target) { + CoTaskMemFree(target); + } + if (target_dir) { + CoTaskMemFree(target_dir); + } + + target = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!target) { + OutputDebugString(L"PyShellExt::Load - E_OUTOFMEMORY"); + return E_OUTOFMEMORY; + } + target_dir = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!target_dir) { + OutputDebugString(L"PyShellExt::Load - E_OUTOFMEMORY"); + return E_OUTOFMEMORY; + } + + hr = StringCchCopy(target, len + 1, pszFileName); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to copy string"); + return hr; + } + + hr = StringCchCopy(target_dir, len + 1, pszFileName); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to copy string"); + return hr; + } + if (!PathRemoveFileSpecW(target_dir)) { + OutputDebugStringW(L"PyShellExt::Load - failed to remove filespec from target"); + return E_FAIL; + } + + OutputDebugString(target); + target_mode = dwMode; + OutputDebugString(L"PyShellExt::Load - S_OK"); + return S_OK; + } + + STDMETHODIMP Save(LPCOLESTR pszFileName, BOOL fRemember) { + return E_NOTIMPL; + } + + STDMETHODIMP SaveCompleted(LPCOLESTR pszFileName) { + return E_NOTIMPL; + } + + STDMETHODIMP GetClassID(CLSID *pClassID) { + *pClassID = CLSID_PyShellExt; + return S_OK; + } +}; + +CoCreatableClass(PyShellExt); + +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, _COM_Outptr_ void** ppv) { + return Module::GetModule().GetClassObject(rclsid, riid, ppv); +} + +STDAPI DllCanUnloadNow() { + return Module::GetModule().Terminate() ? S_OK : S_FALSE; +} + +STDAPI DllRegisterServer() { + LONG res; + SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; + LPSECURITY_ATTRIBUTES psecattr = NULL; + HKEY key, ipsKey; + WCHAR modname[MAX_PATH]; + DWORD modname_len; + + OutputDebugString(L"PyShellExt::DllRegisterServer"); + if (!hModule) { + OutputDebugString(L"PyShellExt::DllRegisterServer - module handle was not set"); + return SELFREG_E_CLASS; + } + modname_len = GetModuleFileName(hModule, modname, MAX_PATH); + if (modname_len == 0 || + (modname_len == MAX_PATH && GetLastError() == ERROR_INSUFFICIENT_BUFFER)) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to get module file name"); + return SELFREG_E_CLASS; + } + + DWORD disp; + res = RegCreateKeyEx(HKEY_LOCAL_MACHINE, CLASS_SUBKEY, 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &key, &disp); + if (res == ERROR_ACCESS_DENIED) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to write per-machine registration. Attempting per-user instead."); + res = RegCreateKeyEx(HKEY_CURRENT_USER, CLASS_SUBKEY, 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &key, &disp); + } + if (res != ERROR_SUCCESS) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to create class key"); + return SELFREG_E_CLASS; + } + + res = RegCreateKeyEx(key, L"InProcServer32", 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &ipsKey, NULL); + if (res != ERROR_SUCCESS) { + RegCloseKey(key); + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to create InProcServer32 key"); + return SELFREG_E_CLASS; + } + + res = RegSetValueEx(ipsKey, NULL, 0, + REG_SZ, (LPBYTE)modname, modname_len * sizeof(modname[0])); + + if (res != ERROR_SUCCESS) { + RegCloseKey(ipsKey); + RegCloseKey(key); + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to set server path"); + return SELFREG_E_CLASS; + } + + res = RegSetValueEx(ipsKey, L"ThreadingModel", 0, + REG_SZ, (LPBYTE)(L"Apartment"), sizeof(L"Apartment")); + + RegCloseKey(ipsKey); + RegCloseKey(key); + if (res != ERROR_SUCCESS) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to set threading model"); + return SELFREG_E_CLASS; + } + + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); + + OutputDebugString(L"PyShellExt::DllRegisterServer - S_OK"); + return S_OK; +} + +STDAPI DllUnregisterServer() { + LONG res_lm, res_cu; + + res_lm = RegDeleteTree(HKEY_LOCAL_MACHINE, CLASS_SUBKEY); + if (res_lm != ERROR_SUCCESS && res_lm != ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - failed to delete per-machine registration"); + return SELFREG_E_CLASS; + } + + res_cu = RegDeleteTree(HKEY_CURRENT_USER, CLASS_SUBKEY); + if (res_cu != ERROR_SUCCESS && res_cu != ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - failed to delete per-user registration"); + return SELFREG_E_CLASS; + } + + if (res_lm == ERROR_FILE_NOT_FOUND && res_cu == ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - extension was not registered"); + return SELFREG_E_CLASS; + } + + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); + + OutputDebugString(L"PyShellExt::DllUnregisterServer - S_OK"); + return S_OK; +} + +STDAPI_(BOOL) DllMain(_In_opt_ HINSTANCE hinst, DWORD reason, _In_opt_ void*) { + if (reason == DLL_PROCESS_ATTACH) { + hModule = hinst; + + cfDropDescription = RegisterClipboardFormat(CFSTR_DROPDESCRIPTION); + if (!cfDropDescription) { + OutputDebugString(L"PyShellExt::DllMain - failed to get CFSTR_DROPDESCRIPTION format"); + } + cfDragWindow = RegisterClipboardFormat(L"DragWindow"); + if (!cfDragWindow) { + OutputDebugString(L"PyShellExt::DllMain - failed to get DragWindow format"); + } + + DisableThreadLibraryCalls(hinst); + } + return TRUE; +} \ No newline at end of file diff --git a/PC/pyshellext.def b/PC/pyshellext.def new file mode 100644 --- /dev/null +++ b/PC/pyshellext.def @@ -0,0 +1,6 @@ +LIBRARY "pyshellext" +EXPORTS + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/PC/pyshellext.idl b/PC/pyshellext.idl new file mode 100644 --- /dev/null +++ b/PC/pyshellext.idl @@ -0,0 +1,12 @@ +import "ocidl.idl"; + +[uuid(44039A76-3BDD-41C1-A31B-71C00202CE81), version(1.0)] +library PyShellExtLib +{ + [uuid(BEA218D2-6950-497B-9434-61683EC065FE), version(1.0)] + coclass PyShellExt + { + [default] interface IDropTarget; + interface IPersistFile; + } +}; \ No newline at end of file diff --git a/PC/pyshellext.rc b/PC/pyshellext.rc new file mode 100644 --- /dev/null +++ b/PC/pyshellext.rc @@ -0,0 +1,46 @@ +#include + +#include "python_ver_rc.h" + +// Include the manifest file that indicates we support all +// current versions of Windows. +#include +1 RT_MANIFEST "python.manifest" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION PYVERSION64 + PRODUCTVERSION PYVERSION64 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", PYTHON_COMPANY "\0" + VALUE "FileDescription", "Python\0" + VALUE "FileVersion", PYTHON_VERSION + VALUE "InternalName", "Python Launcher Shell Extension\0" + VALUE "LegalCopyright", PYTHON_COPYRIGHT "\0" + VALUE "OriginalFilename", "pyshellext" PYTHON_DEBUG_EXT ".dll\0" + VALUE "ProductName", "Python\0" + VALUE "ProductVersion", PYTHON_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END \ No newline at end of file diff --git a/PC/pyshellext_d.def b/PC/pyshellext_d.def new file mode 100644 --- /dev/null +++ b/PC/pyshellext_d.def @@ -0,0 +1,6 @@ +LIBRARY "pyshellext_d" +EXPORTS + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -46,6 +46,8 @@ + + diff --git a/PCbuild/pcbuild.sln b/PCbuild/pcbuild.sln --- a/PCbuild/pcbuild.sln +++ b/PCbuild/pcbuild.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.22823.1 +VisualStudioVersion = 14.0.25123.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}" ProjectSection(SolutionItems) = preProject @@ -63,8 +63,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testbuffer", "_testbuffer.vcxproj", "{A2697BD3-28C1-4AEC-9106-8B748639FD16}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pylauncher", "pylauncher.vcxproj", "{7B2727B5-5A3F-40EE-A866-43A13CD31446}" + ProjectSection(ProjectDependencies) = postProject + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782} = {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pywlauncher", "pywlauncher.vcxproj", "{1D4B18D3-7C12-4ECB-9179-8531FF876CE6}" + ProjectSection(ProjectDependencies) = postProject + {7B2727B5-5A3F-40EE-A866-43A13CD31446} = {7B2727B5-5A3F-40EE-A866-43A13CD31446} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_freeze_importlib", "_freeze_importlib.vcxproj", "{19C0C13F-47CA-4432-AFF3-799A296A4DDC}" EndProject @@ -84,6 +90,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ssleay", "ssleay.vcxproj", "{10615B24-73BF-4EFA-93AA-236916321317}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyshellext", "pyshellext.vcxproj", "{0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -684,6 +692,22 @@ {10615B24-73BF-4EFA-93AA-236916321317}.Release|Win32.Build.0 = Release|Win32 {10615B24-73BF-4EFA-93AA-236916321317}.Release|x64.ActiveCfg = Release|x64 {10615B24-73BF-4EFA-93AA-236916321317}.Release|x64.Build.0 = Release|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|Win32.Build.0 = Debug|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|x64.ActiveCfg = Debug|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|x64.Build.0 = Debug|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|Win32.ActiveCfg = Release|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|Win32.Build.0 = Release|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|x64.ActiveCfg = Release|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props --- a/PCbuild/pyproject.props +++ b/PCbuild/pyproject.props @@ -83,8 +83,9 @@ true Win32 X64 - $(OutDir)%(Filename).tlb - $(IntDir)%(Filename)_h.h + $(IntDir) + $(MSBuildProjectName)_i.c + $(MSBuildProjectName)_p.c diff --git a/PCbuild/pyshellext.vcxproj b/PCbuild/pyshellext.vcxproj new file mode 100644 --- /dev/null +++ b/PCbuild/pyshellext.vcxproj @@ -0,0 +1,87 @@ +? + + + + Debug + Win32 + + + Debug + x64 + + + PGInstrument + Win32 + + + PGInstrument + x64 + + + PGUpdate + Win32 + + + PGUpdate + x64 + + + Release + Win32 + + + Release + x64 + + + + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782} + pyshellext + pyshellext + false + + + + + DynamicLibrary + Unicode + + + + + + ClCompile + + + + + + + + + _CONSOLE;%(PreprocessorDefinitions) + + + version.lib;shlwapi.lib;%(AdditionalDependencies) + Console + ..\PC\pyshellext$(PyDebugExt).def + + + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PCbuild/pyshellext.vcxproj.filters b/PCbuild/pyshellext.vcxproj.filters new file mode 100644 --- /dev/null +++ b/PCbuild/pyshellext.vcxproj.filters @@ -0,0 +1,40 @@ +? + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Source Files + + + + + Resource Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Tools/msi/launcher/launcher.wixproj b/Tools/msi/launcher/launcher.wixproj --- a/Tools/msi/launcher/launcher.wixproj +++ b/Tools/msi/launcher/launcher.wixproj @@ -7,6 +7,7 @@ Package UpgradeCode=1B68A0EC-4DD3-5134-840E-73854B0863F1;$(DefineConstants) true + ICE80 @@ -18,5 +19,18 @@ + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/Tools/msi/launcher/launcher.wxs b/Tools/msi/launcher/launcher.wxs --- a/Tools/msi/launcher/launcher.wxs +++ b/Tools/msi/launcher/launcher.wxs @@ -28,7 +28,7 @@ UPGRADE or REMOVE_350_LAUNCHER - + diff --git a/Tools/msi/launcher/launcher_files.wxs b/Tools/msi/launcher/launcher_files.wxs --- a/Tools/msi/launcher/launcher_files.wxs +++ b/Tools/msi/launcher/launcher_files.wxs @@ -20,6 +20,19 @@ ALLUSERS=1 + + + VersionNT64 + + + + + + NOT VersionNT64 + + + + diff --git a/Tools/msi/launcher/launcher_reg.wxs b/Tools/msi/launcher/launcher_reg.wxs --- a/Tools/msi/launcher/launcher_reg.wxs +++ b/Tools/msi/launcher/launcher_reg.wxs @@ -10,14 +10,14 @@ - + - + @@ -25,21 +25,21 @@ - + - + - + -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 11:02:23 2016 From: python-checkins at python.org (steve.dower) Date: Sat, 23 Jul 2016 15:02:23 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDY5?= =?utf-8?q?=3A_Adds_a_shell_extension_to_the_launcher_so_that_drag_and_dro?= =?utf-8?q?p?= Message-ID: <20160723150223.59810.99950.962C605B@psf.io> https://hg.python.org/cpython/rev/3005fc6cff8a changeset: 102430:3005fc6cff8a branch: 3.5 parent: 102428:9e997c8f4876 user: Steve Dower date: Sat Jul 16 16:17:33 2016 -0700 summary: Issue #27469: Adds a shell extension to the launcher so that drag and drop works correctly. files: Misc/NEWS | 4 +- PC/pyshellext.cpp | 605 ++++++++++++++ PC/pyshellext.def | 6 + PC/pyshellext.idl | 12 + PC/pyshellext.rc | 46 + PC/pyshellext_d.def | 6 + PCbuild/pcbuild.proj | 2 + PCbuild/pcbuild.sln | 26 +- PCbuild/pyproject.props | 5 +- PCbuild/pyshellext.vcxproj | 87 ++ PCbuild/pyshellext.vcxproj.filters | 40 + Tools/msi/launcher/launcher.wixproj | 14 + Tools/msi/launcher/launcher.wxs | 2 +- Tools/msi/launcher/launcher_files.wxs | 13 + Tools/msi/launcher/launcher_reg.wxs | 10 +- 15 files changed, 868 insertions(+), 10 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -134,9 +134,11 @@ Windows ------- +- Issue #27469: Adds a shell extension to the launcher so that drag and drop + works correctly. + - Issue #27309: Enabled proper Windows styles in python[w].exe manifest. - What's New in Python 3.5.2? =========================== diff --git a/PC/pyshellext.cpp b/PC/pyshellext.cpp new file mode 100644 --- /dev/null +++ b/PC/pyshellext.cpp @@ -0,0 +1,605 @@ +// Support back to Vista +#define _WIN32_WINNT _WIN32_WINNT_VISTA +#include + +// Use WRL to define a classic COM class +#define __WRL_CLASSIC_COM__ +#include + +#include +#include +#include +#include +#include + +#include "pyshellext_h.h" + +#define DDWM_UPDATEWINDOW (WM_USER+3) + +static HINSTANCE hModule; +static CLIPFORMAT cfDropDescription; +static CLIPFORMAT cfDragWindow; + +static const LPCWSTR CLASS_SUBKEY = L"Software\\Classes\\CLSID\\{BEA218D2-6950-497B-9434-61683EC065FE}"; +static const LPCWSTR DRAG_MESSAGE = L"Open with %1"; + +using namespace Microsoft::WRL; + +HRESULT FilenameListCchLengthA(LPCSTR pszSource, size_t cchMax, size_t *pcchLength, size_t *pcchCount) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource && pszSource[0]) { + size_t oneLength; + hr = StringCchLengthA(pszSource, cchMax - length, &oneLength); + if (FAILED(hr)) { + return hr; + } + count += 1; + length += oneLength + (strchr(pszSource, ' ') ? 3 : 1); + pszSource = &pszSource[oneLength + 1]; + } + + *pcchCount = count; + *pcchLength = length; + return hr; +} + +HRESULT FilenameListCchLengthW(LPCWSTR pszSource, size_t cchMax, size_t *pcchLength, size_t *pcchCount) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource && pszSource[0]) { + size_t oneLength; + hr = StringCchLengthW(pszSource, cchMax - length, &oneLength); + if (FAILED(hr)) { + return hr; + } + count += 1; + length += oneLength + (wcschr(pszSource, ' ') ? 3 : 1); + pszSource = &pszSource[oneLength + 1]; + } + + *pcchCount = count; + *pcchLength = length; + return hr; +} + +HRESULT FilenameListCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, LPCSTR pszSource, LPCSTR pszSeparator) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource[0]) { + STRSAFE_LPSTR newDest; + + hr = StringCchCopyExA(pszDest, cchDest, pszSource, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszSource += (newDest - pszDest) + 1; + pszDest = PathQuoteSpacesA(pszDest) ? newDest + 2 : newDest; + + if (pszSource[0]) { + hr = StringCchCopyExA(pszDest, cchDest, pszSeparator, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszDest = newDest; + } + } + + return hr; +} + +HRESULT FilenameListCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, LPCWSTR pszSource, LPCWSTR pszSeparator) { + HRESULT hr = S_OK; + size_t count = 0; + size_t length = 0; + + while (pszSource[0]) { + STRSAFE_LPWSTR newDest; + + hr = StringCchCopyExW(pszDest, cchDest, pszSource, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszSource += (newDest - pszDest) + 1; + pszDest = PathQuoteSpacesW(pszDest) ? newDest + 2 : newDest; + + if (pszSource[0]) { + hr = StringCchCopyExW(pszDest, cchDest, pszSeparator, &newDest, &cchDest, 0); + if (FAILED(hr)) { + return hr; + } + pszDest = newDest; + } + } + + return hr; +} + + +class PyShellExt : public RuntimeClass< + RuntimeClassFlags, + IDropTarget, + IPersistFile +> +{ + LPOLESTR target, target_dir; + DWORD target_mode; + + IDataObject *data_obj; + +public: + PyShellExt() : target(NULL), target_dir(NULL), target_mode(0), data_obj(NULL) { + OutputDebugString(L"PyShellExt::PyShellExt"); + } + + ~PyShellExt() { + if (target) { + CoTaskMemFree(target); + } + if (target_dir) { + CoTaskMemFree(target_dir); + } + if (data_obj) { + data_obj->Release(); + } + } + +private: + HRESULT UpdateDropDescription(IDataObject *pDataObj) { + STGMEDIUM medium; + FORMATETC fmt = { + cfDropDescription, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + auto hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::UpdateDropDescription - failed to get DROPDESCRIPTION format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::UpdateDropDescription - DROPDESCRIPTION format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + auto dd = (DROPDESCRIPTION*)GlobalLock(medium.hGlobal); + StringCchCopy(dd->szMessage, sizeof(dd->szMessage) / sizeof(dd->szMessage[0]), DRAG_MESSAGE); + StringCchCopy(dd->szInsert, sizeof(dd->szInsert) / sizeof(dd->szInsert[0]), PathFindFileNameW(target)); + dd->type = DROPIMAGE_MOVE; + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return S_OK; + } + + HRESULT GetDragWindow(IDataObject *pDataObj, HWND *phWnd) { + HRESULT hr; + HWND *pMem; + STGMEDIUM medium; + FORMATETC fmt = { + cfDragWindow, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::GetDragWindow - failed to get DragWindow format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::GetDragWindow - DragWindow format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + pMem = (HWND*)GlobalLock(medium.hGlobal); + if (!pMem) { + OutputDebugString(L"PyShellExt::GetDragWindow - failed to lock DragWindow hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + *phWnd = *pMem; + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return S_OK; + } + + HRESULT GetArguments(IDataObject *pDataObj, LPCWSTR *pArguments) { + HRESULT hr; + DROPFILES *pdropfiles; + + STGMEDIUM medium; + FORMATETC fmt = { + CF_HDROP, + NULL, + DVASPECT_CONTENT, + -1, + TYMED_HGLOBAL + }; + + hr = pDataObj->GetData(&fmt, &medium); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::GetArguments - failed to get CF_HDROP format"); + return hr; + } + if (!medium.hGlobal) { + OutputDebugString(L"PyShellExt::GetArguments - CF_HDROP format had NULL hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + pdropfiles = (DROPFILES*)GlobalLock(medium.hGlobal); + if (!pdropfiles) { + OutputDebugString(L"PyShellExt::GetArguments - failed to lock CF_HDROP hGlobal"); + ReleaseStgMedium(&medium); + return E_FAIL; + } + + if (pdropfiles->fWide) { + LPCWSTR files = (LPCWSTR)((char*)pdropfiles + pdropfiles->pFiles); + size_t len, count; + hr = FilenameListCchLengthW(files, 32767, &len, &count); + if (SUCCEEDED(hr)) { + LPWSTR args = (LPWSTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (args) { + hr = FilenameListCchCopyW(args, 32767, files, L" "); + if (SUCCEEDED(hr)) { + *pArguments = args; + } else { + CoTaskMemFree(args); + } + } else { + hr = E_OUTOFMEMORY; + } + } + } else { + LPCSTR files = (LPCSTR)((char*)pdropfiles + pdropfiles->pFiles); + size_t len, count; + hr = FilenameListCchLengthA(files, 32767, &len, &count); + if (SUCCEEDED(hr)) { + LPSTR temp = (LPSTR)CoTaskMemAlloc(sizeof(CHAR) * (len + 1)); + if (temp) { + hr = FilenameListCchCopyA(temp, 32767, files, " "); + if (SUCCEEDED(hr)) { + int wlen = MultiByteToWideChar(CP_ACP, 0, temp, (int)len, NULL, 0); + if (wlen) { + LPWSTR args = (LPWSTR)CoTaskMemAlloc(sizeof(WCHAR) * (wlen + 1)); + if (MultiByteToWideChar(CP_ACP, 0, temp, (int)len, args, wlen + 1)) { + *pArguments = args; + } else { + OutputDebugString(L"PyShellExt::GetArguments - failed to convert multi-byte to wide-char path"); + CoTaskMemFree(args); + hr = E_FAIL; + } + } else { + OutputDebugString(L"PyShellExt::GetArguments - failed to get length of wide-char path"); + hr = E_FAIL; + } + } + CoTaskMemFree(temp); + } else { + hr = E_OUTOFMEMORY; + } + } + } + + GlobalUnlock(medium.hGlobal); + ReleaseStgMedium(&medium); + + return hr; + } + + HRESULT NotifyDragWindow(HWND hwnd) { + LRESULT res; + + if (!hwnd) { + return S_FALSE; + } + + res = SendMessage(hwnd, DDWM_UPDATEWINDOW, 0, NULL); + + if (res) { + OutputDebugString(L"PyShellExt::NotifyDragWindow - failed to post DDWM_UPDATEWINDOW"); + return E_FAIL; + } + + return S_OK; + } + +public: + // IDropTarget implementation + + STDMETHODIMP DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + HWND hwnd; + + OutputDebugString(L"PyShellExt::DragEnter"); + + pDataObj->AddRef(); + data_obj = pDataObj; + + *pdwEffect = DROPEFFECT_MOVE; + + if (FAILED(UpdateDropDescription(data_obj))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to update drop description"); + } + if (FAILED(GetDragWindow(data_obj, &hwnd))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to get drag window"); + } + if (FAILED(NotifyDragWindow(hwnd))) { + OutputDebugString(L"PyShellExt::DragEnter - failed to notify drag window"); + } + + return S_OK; + } + + STDMETHODIMP DragLeave() { + return S_OK; + } + + STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + return S_OK; + } + + STDMETHODIMP Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect) { + LPCWSTR args; + + OutputDebugString(L"PyShellExt::Drop"); + *pdwEffect = DROPEFFECT_NONE; + + if (pDataObj != data_obj) { + OutputDebugString(L"PyShellExt::Drop - unexpected data object"); + return E_FAIL; + } + + data_obj->Release(); + data_obj = NULL; + + if (SUCCEEDED(GetArguments(pDataObj, &args))) { + OutputDebugString(args); + ShellExecute(NULL, NULL, target, args, target_dir, SW_NORMAL); + + CoTaskMemFree((LPVOID)args); + } else { + OutputDebugString(L"PyShellExt::Drop - failed to get launch arguments"); + } + + return S_OK; + } + + // IPersistFile implementation + + STDMETHODIMP GetCurFile(LPOLESTR *ppszFileName) { + HRESULT hr; + size_t len; + + if (!ppszFileName) { + return E_POINTER; + } + + hr = StringCchLength(target, STRSAFE_MAX_CCH - 1, &len); + if (FAILED(hr)) { + return E_FAIL; + } + + *ppszFileName = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!*ppszFileName) { + return E_OUTOFMEMORY; + } + + hr = StringCchCopy(*ppszFileName, len + 1, target); + if (FAILED(hr)) { + CoTaskMemFree(*ppszFileName); + *ppszFileName = NULL; + return E_FAIL; + } + + return S_OK; + } + + STDMETHODIMP IsDirty() { + return S_FALSE; + } + + STDMETHODIMP Load(LPCOLESTR pszFileName, DWORD dwMode) { + HRESULT hr; + size_t len; + + OutputDebugString(L"PyShellExt::Load"); + OutputDebugString(pszFileName); + + hr = StringCchLength(pszFileName, STRSAFE_MAX_CCH - 1, &len); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to get string length"); + return hr; + } + + if (target) { + CoTaskMemFree(target); + } + if (target_dir) { + CoTaskMemFree(target_dir); + } + + target = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!target) { + OutputDebugString(L"PyShellExt::Load - E_OUTOFMEMORY"); + return E_OUTOFMEMORY; + } + target_dir = (LPOLESTR)CoTaskMemAlloc(sizeof(WCHAR) * (len + 1)); + if (!target_dir) { + OutputDebugString(L"PyShellExt::Load - E_OUTOFMEMORY"); + return E_OUTOFMEMORY; + } + + hr = StringCchCopy(target, len + 1, pszFileName); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to copy string"); + return hr; + } + + hr = StringCchCopy(target_dir, len + 1, pszFileName); + if (FAILED(hr)) { + OutputDebugString(L"PyShellExt::Load - failed to copy string"); + return hr; + } + if (!PathRemoveFileSpecW(target_dir)) { + OutputDebugStringW(L"PyShellExt::Load - failed to remove filespec from target"); + return E_FAIL; + } + + OutputDebugString(target); + target_mode = dwMode; + OutputDebugString(L"PyShellExt::Load - S_OK"); + return S_OK; + } + + STDMETHODIMP Save(LPCOLESTR pszFileName, BOOL fRemember) { + return E_NOTIMPL; + } + + STDMETHODIMP SaveCompleted(LPCOLESTR pszFileName) { + return E_NOTIMPL; + } + + STDMETHODIMP GetClassID(CLSID *pClassID) { + *pClassID = CLSID_PyShellExt; + return S_OK; + } +}; + +CoCreatableClass(PyShellExt); + +STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, _COM_Outptr_ void** ppv) { + return Module::GetModule().GetClassObject(rclsid, riid, ppv); +} + +STDAPI DllCanUnloadNow() { + return Module::GetModule().Terminate() ? S_OK : S_FALSE; +} + +STDAPI DllRegisterServer() { + LONG res; + SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; + LPSECURITY_ATTRIBUTES psecattr = NULL; + HKEY key, ipsKey; + WCHAR modname[MAX_PATH]; + DWORD modname_len; + + OutputDebugString(L"PyShellExt::DllRegisterServer"); + if (!hModule) { + OutputDebugString(L"PyShellExt::DllRegisterServer - module handle was not set"); + return SELFREG_E_CLASS; + } + modname_len = GetModuleFileName(hModule, modname, MAX_PATH); + if (modname_len == 0 || + (modname_len == MAX_PATH && GetLastError() == ERROR_INSUFFICIENT_BUFFER)) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to get module file name"); + return SELFREG_E_CLASS; + } + + DWORD disp; + res = RegCreateKeyEx(HKEY_LOCAL_MACHINE, CLASS_SUBKEY, 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &key, &disp); + if (res == ERROR_ACCESS_DENIED) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to write per-machine registration. Attempting per-user instead."); + res = RegCreateKeyEx(HKEY_CURRENT_USER, CLASS_SUBKEY, 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &key, &disp); + } + if (res != ERROR_SUCCESS) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to create class key"); + return SELFREG_E_CLASS; + } + + res = RegCreateKeyEx(key, L"InProcServer32", 0, NULL, 0, + KEY_ALL_ACCESS, psecattr, &ipsKey, NULL); + if (res != ERROR_SUCCESS) { + RegCloseKey(key); + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to create InProcServer32 key"); + return SELFREG_E_CLASS; + } + + res = RegSetValueEx(ipsKey, NULL, 0, + REG_SZ, (LPBYTE)modname, modname_len * sizeof(modname[0])); + + if (res != ERROR_SUCCESS) { + RegCloseKey(ipsKey); + RegCloseKey(key); + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to set server path"); + return SELFREG_E_CLASS; + } + + res = RegSetValueEx(ipsKey, L"ThreadingModel", 0, + REG_SZ, (LPBYTE)(L"Apartment"), sizeof(L"Apartment")); + + RegCloseKey(ipsKey); + RegCloseKey(key); + if (res != ERROR_SUCCESS) { + OutputDebugString(L"PyShellExt::DllRegisterServer - failed to set threading model"); + return SELFREG_E_CLASS; + } + + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); + + OutputDebugString(L"PyShellExt::DllRegisterServer - S_OK"); + return S_OK; +} + +STDAPI DllUnregisterServer() { + LONG res_lm, res_cu; + + res_lm = RegDeleteTree(HKEY_LOCAL_MACHINE, CLASS_SUBKEY); + if (res_lm != ERROR_SUCCESS && res_lm != ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - failed to delete per-machine registration"); + return SELFREG_E_CLASS; + } + + res_cu = RegDeleteTree(HKEY_CURRENT_USER, CLASS_SUBKEY); + if (res_cu != ERROR_SUCCESS && res_cu != ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - failed to delete per-user registration"); + return SELFREG_E_CLASS; + } + + if (res_lm == ERROR_FILE_NOT_FOUND && res_cu == ERROR_FILE_NOT_FOUND) { + OutputDebugString(L"PyShellExt::DllUnregisterServer - extension was not registered"); + return SELFREG_E_CLASS; + } + + SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL); + + OutputDebugString(L"PyShellExt::DllUnregisterServer - S_OK"); + return S_OK; +} + +STDAPI_(BOOL) DllMain(_In_opt_ HINSTANCE hinst, DWORD reason, _In_opt_ void*) { + if (reason == DLL_PROCESS_ATTACH) { + hModule = hinst; + + cfDropDescription = RegisterClipboardFormat(CFSTR_DROPDESCRIPTION); + if (!cfDropDescription) { + OutputDebugString(L"PyShellExt::DllMain - failed to get CFSTR_DROPDESCRIPTION format"); + } + cfDragWindow = RegisterClipboardFormat(L"DragWindow"); + if (!cfDragWindow) { + OutputDebugString(L"PyShellExt::DllMain - failed to get DragWindow format"); + } + + DisableThreadLibraryCalls(hinst); + } + return TRUE; +} \ No newline at end of file diff --git a/PC/pyshellext.def b/PC/pyshellext.def new file mode 100644 --- /dev/null +++ b/PC/pyshellext.def @@ -0,0 +1,6 @@ +LIBRARY "pyshellext" +EXPORTS + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/PC/pyshellext.idl b/PC/pyshellext.idl new file mode 100644 --- /dev/null +++ b/PC/pyshellext.idl @@ -0,0 +1,12 @@ +import "ocidl.idl"; + +[uuid(44039A76-3BDD-41C1-A31B-71C00202CE81), version(1.0)] +library PyShellExtLib +{ + [uuid(BEA218D2-6950-497B-9434-61683EC065FE), version(1.0)] + coclass PyShellExt + { + [default] interface IDropTarget; + interface IPersistFile; + } +}; \ No newline at end of file diff --git a/PC/pyshellext.rc b/PC/pyshellext.rc new file mode 100644 --- /dev/null +++ b/PC/pyshellext.rc @@ -0,0 +1,46 @@ +#include + +#include "python_ver_rc.h" + +// Include the manifest file that indicates we support all +// current versions of Windows. +#include +1 RT_MANIFEST "python.manifest" + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION PYVERSION64 + PRODUCTVERSION PYVERSION64 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "000004b0" + BEGIN + VALUE "CompanyName", PYTHON_COMPANY "\0" + VALUE "FileDescription", "Python\0" + VALUE "FileVersion", PYTHON_VERSION + VALUE "InternalName", "Python Launcher Shell Extension\0" + VALUE "LegalCopyright", PYTHON_COPYRIGHT "\0" + VALUE "OriginalFilename", "pyshellext" PYTHON_DEBUG_EXT ".dll\0" + VALUE "ProductName", "Python\0" + VALUE "ProductVersion", PYTHON_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0, 1200 + END +END \ No newline at end of file diff --git a/PC/pyshellext_d.def b/PC/pyshellext_d.def new file mode 100644 --- /dev/null +++ b/PC/pyshellext_d.def @@ -0,0 +1,6 @@ +LIBRARY "pyshellext_d" +EXPORTS + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE + DllGetClassObject PRIVATE + DllCanUnloadNow PRIVATE diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj --- a/PCbuild/pcbuild.proj +++ b/PCbuild/pcbuild.proj @@ -46,6 +46,8 @@ + + diff --git a/PCbuild/pcbuild.sln b/PCbuild/pcbuild.sln --- a/PCbuild/pcbuild.sln +++ b/PCbuild/pcbuild.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 -VisualStudioVersion = 14.0.22823.1 +VisualStudioVersion = 14.0.25123.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{553EC33E-9816-4996-A660-5D6186A0B0B3}" ProjectSection(SolutionItems) = preProject @@ -63,8 +63,14 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_testbuffer", "_testbuffer.vcxproj", "{A2697BD3-28C1-4AEC-9106-8B748639FD16}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pylauncher", "pylauncher.vcxproj", "{7B2727B5-5A3F-40EE-A866-43A13CD31446}" + ProjectSection(ProjectDependencies) = postProject + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782} = {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pywlauncher", "pywlauncher.vcxproj", "{1D4B18D3-7C12-4ECB-9179-8531FF876CE6}" + ProjectSection(ProjectDependencies) = postProject + {7B2727B5-5A3F-40EE-A866-43A13CD31446} = {7B2727B5-5A3F-40EE-A866-43A13CD31446} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_freeze_importlib", "_freeze_importlib.vcxproj", "{19C0C13F-47CA-4432-AFF3-799A296A4DDC}" EndProject @@ -84,6 +90,8 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ssleay", "ssleay.vcxproj", "{10615B24-73BF-4EFA-93AA-236916321317}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pyshellext", "pyshellext.vcxproj", "{0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 @@ -684,6 +692,22 @@ {10615B24-73BF-4EFA-93AA-236916321317}.Release|Win32.Build.0 = Release|Win32 {10615B24-73BF-4EFA-93AA-236916321317}.Release|x64.ActiveCfg = Release|x64 {10615B24-73BF-4EFA-93AA-236916321317}.Release|x64.Build.0 = Release|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|Win32.ActiveCfg = Debug|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|Win32.Build.0 = Debug|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|x64.ActiveCfg = Debug|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Debug|x64.Build.0 = Debug|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|Win32.ActiveCfg = PGInstrument|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|Win32.Build.0 = PGInstrument|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|x64.ActiveCfg = PGInstrument|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGInstrument|x64.Build.0 = PGInstrument|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|Win32.ActiveCfg = PGUpdate|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|Win32.Build.0 = PGUpdate|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|x64.ActiveCfg = PGUpdate|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.PGUpdate|x64.Build.0 = PGUpdate|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|Win32.ActiveCfg = Release|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|Win32.Build.0 = Release|Win32 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|x64.ActiveCfg = Release|x64 + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props --- a/PCbuild/pyproject.props +++ b/PCbuild/pyproject.props @@ -83,8 +83,9 @@ true Win32 X64 - $(OutDir)%(Filename).tlb - $(IntDir)%(Filename)_h.h + $(IntDir) + $(MSBuildProjectName)_i.c + $(MSBuildProjectName)_p.c diff --git a/PCbuild/pyshellext.vcxproj b/PCbuild/pyshellext.vcxproj new file mode 100644 --- /dev/null +++ b/PCbuild/pyshellext.vcxproj @@ -0,0 +1,87 @@ +? + + + + Debug + Win32 + + + Debug + x64 + + + PGInstrument + Win32 + + + PGInstrument + x64 + + + PGUpdate + Win32 + + + PGUpdate + x64 + + + Release + Win32 + + + Release + x64 + + + + {0F6EE4A4-C75F-4578-B4B3-2D64F4B9B782} + pyshellext + pyshellext + false + + + + + DynamicLibrary + Unicode + + + + + + ClCompile + + + + + + + + + _CONSOLE;%(PreprocessorDefinitions) + + + version.lib;shlwapi.lib;%(AdditionalDependencies) + Console + ..\PC\pyshellext$(PyDebugExt).def + + + true + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/PCbuild/pyshellext.vcxproj.filters b/PCbuild/pyshellext.vcxproj.filters new file mode 100644 --- /dev/null +++ b/PCbuild/pyshellext.vcxproj.filters @@ -0,0 +1,40 @@ +? + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + + + Source Files + + + + + Resource Files + + + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/Tools/msi/launcher/launcher.wixproj b/Tools/msi/launcher/launcher.wixproj --- a/Tools/msi/launcher/launcher.wixproj +++ b/Tools/msi/launcher/launcher.wixproj @@ -7,6 +7,7 @@ Package UpgradeCode=1B68A0EC-4DD3-5134-840E-73854B0863F1;$(DefineConstants) true + ICE80 @@ -18,5 +19,18 @@ + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/Tools/msi/launcher/launcher.wxs b/Tools/msi/launcher/launcher.wxs --- a/Tools/msi/launcher/launcher.wxs +++ b/Tools/msi/launcher/launcher.wxs @@ -28,7 +28,7 @@ UPGRADE or REMOVE_350_LAUNCHER - + diff --git a/Tools/msi/launcher/launcher_files.wxs b/Tools/msi/launcher/launcher_files.wxs --- a/Tools/msi/launcher/launcher_files.wxs +++ b/Tools/msi/launcher/launcher_files.wxs @@ -20,6 +20,19 @@ ALLUSERS=1 + + + VersionNT64 + + + + + + NOT VersionNT64 + + + + diff --git a/Tools/msi/launcher/launcher_reg.wxs b/Tools/msi/launcher/launcher_reg.wxs --- a/Tools/msi/launcher/launcher_reg.wxs +++ b/Tools/msi/launcher/launcher_reg.wxs @@ -10,14 +10,14 @@ - + - + @@ -25,21 +25,21 @@ - + - + - + -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 11:04:39 2016 From: python-checkins at python.org (steve.dower) Date: Sat, 23 Jul 2016 15:04:39 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Fixes_bad_Misc/NEWS_merge?= Message-ID: <20160723150438.58665.7646.698A0E2F@psf.io> https://hg.python.org/cpython/rev/58b2d8fd83c2 changeset: 102432:58b2d8fd83c2 user: Steve Dower date: Sat Jul 23 08:04:11 2016 -0700 summary: Fixes bad Misc/NEWS merge files: Misc/NEWS | 9 +++------ 1 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -61,6 +61,9 @@ Windows ------- +- Issue #27469: Adds a shell extension to the launcher so that drag and drop + works correctly. + - Issue #27309: Enables proper Windows styles in python[w].exe manifest. What's New in Python 3.6.0 alpha 3 @@ -244,12 +247,6 @@ - Don't use largefile support for GNU/Hurd. -Windows -------- - -- Issue #27469: Adds a shell extension to the launcher so that drag and drop - works correctly. - Tools/Demos ----------- -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 23 11:16:58 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Sat, 23 Jul 2016 15:16:58 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_24773=3A_Make_zonein?= =?utf-8?q?fo_tests_more_robust=2E?= Message-ID: <20160723151658.49155.60832.D9A6C1BB@psf.io> https://hg.python.org/cpython/rev/e72aab080165 changeset: 102433:e72aab080165 user: Alexander Belopolsky date: Sat Jul 23 11:16:56 2016 -0400 summary: Issue 24773: Make zoneinfo tests more robust. files: Lib/test/datetimetester.py | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -4677,7 +4677,10 @@ def setUp(self): if sys.platform == "win32": self.skipTest("Skipping zoneinfo tests on Windows") - self.tz = ZoneInfo.fromname(self.zonename) + try: + self.tz = ZoneInfo.fromname(self.zonename) + except FileNotFoundError as err: + self.skipTest("Skipping %s: %s" % (self.zonename, err)) def assertEquivDatetimes(self, a, b): self.assertEqual((a.replace(tzinfo=None), a.fold, id(a.tzinfo)), @@ -4738,7 +4741,7 @@ # civil time was generally not solar time in those years. self.zonename.startswith('right/')): self.skipTest("Skipping %s" % self.zonename) - tz = ZoneInfo.fromname(self.zonename) + tz = self.tz TZ = os.environ.get('TZ') os.environ['TZ'] = self.zonename try: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 14:41:17 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Sun, 24 Jul 2016 18:41:17 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Reindented_Lib/test/dateti?= =?utf-8?q?metester=2Epy=2E?= Message-ID: <20160724184117.40772.94281.4CCEEEF5@psf.io> https://hg.python.org/cpython/rev/fbf0e8dfe85e changeset: 102435:fbf0e8dfe85e user: Alexander Belopolsky date: Sun Jul 24 14:41:08 2016 -0400 summary: Reindented Lib/test/datetimetester.py. files: Lib/test/datetimetester.py | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -1726,7 +1726,7 @@ # Positional fold: self.assertRaises(TypeError, self.theclass, 2000, 1, 31, 23, 59, 59, 0, None, 1) - + def test_hash_equality(self): d = self.theclass(2000, 12, 31, 23, 30, 17) e = self.theclass(2000, 12, 31, 23, 30, 17) @@ -4254,7 +4254,7 @@ t.replace(1, 1, 1, None, 1) with self.assertRaises(TypeError): dt.replace(1, 1, 1, 1, 1, 1, 1, None, 1) - + def test_comparison(self): t = time(0) dt = datetime(1, 1, 1) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 14:41:17 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Sun, 24 Jul 2016 18:41:17 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2324773=3A_Made_Zon?= =?utf-8?q?eInfoCompleteTest_a_TestSuit=2E?= Message-ID: <20160724184117.10766.63326.21CE5855@psf.io> https://hg.python.org/cpython/rev/ae19ea7c36e6 changeset: 102434:ae19ea7c36e6 user: Alexander Belopolsky date: Sun Jul 24 14:39:28 2016 -0400 summary: Issue #24773: Made ZoneInfoCompleteTest a TestSuit. This should improve the diagnostic and progress reports. files: Lib/test/datetimetester.py | 39 ++++++++++++++------------ Lib/test/test_datetime.py | 10 +++++- 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -2,7 +2,7 @@ See http://www.zope.org/Members/fdrake/DateTimeWiki/TestCases """ -from test.support import requires +from test.support import is_resource_enabled import itertools import bisect @@ -1726,7 +1726,7 @@ # Positional fold: self.assertRaises(TypeError, self.theclass, 2000, 1, 31, 23, 59, 59, 0, None, 1) - + def test_hash_equality(self): d = self.theclass(2000, 12, 31, 23, 30, 17) e = self.theclass(2000, 12, 31, 23, 30, 17) @@ -4254,7 +4254,7 @@ t.replace(1, 1, 1, None, 1) with self.assertRaises(TypeError): dt.replace(1, 1, 1, 1, 1, 1, 1, None, 1) - + def test_comparison(self): t = time(0) dt = datetime(1, 1, 1) @@ -4677,10 +4677,7 @@ def setUp(self): if sys.platform == "win32": self.skipTest("Skipping zoneinfo tests on Windows") - try: - self.tz = ZoneInfo.fromname(self.zonename) - except FileNotFoundError as err: - self.skipTest("Skipping %s: %s" % (self.zonename, err)) + self.tz = ZoneInfo.fromname(self.zonename) def assertEquivDatetimes(self, a, b): self.assertEqual((a.replace(tzinfo=None), a.fold, id(a.tzinfo)), @@ -4741,7 +4738,7 @@ # civil time was generally not solar time in those years. self.zonename.startswith('right/')): self.skipTest("Skipping %s" % self.zonename) - tz = self.tz + tz = ZoneInfo.fromname(self.zonename) TZ = os.environ.get('TZ') os.environ['TZ'] = self.zonename try: @@ -4775,20 +4772,26 @@ _time.tzset() -class ZoneInfoCompleteTest(unittest.TestCase): - def test_all(self): - requires('tzdata', 'test requires tzdata and a long time to run') - for name in ZoneInfo.zonenames(): - class Test(ZoneInfoTest): - zonename = name - for suffix in ['folds', 'gaps', 'system_transitions']: - test = Test('test_' + suffix) - result = test.run() - self.assertTrue(result.wasSuccessful(), name + ' ' + suffix) +class ZoneInfoCompleteTest(unittest.TestSuite): + def __init__(self): + tests = [] + if is_resource_enabled('tzdata'): + for name in ZoneInfo.zonenames(): + Test = type('ZoneInfoTest[%s]' % name, (ZoneInfoTest,), {}) + Test.zonename = name + for method in dir(Test): + if method.startswith('test_'): + tests.append(Test(method)) + super().__init__(tests) # Iran had a sub-minute UTC offset before 1946. class IranTest(ZoneInfoTest): zonename = 'Iran' +def load_tests(loader, standard_tests, pattern): + standard_tests.addTest(ZoneInfoCompleteTest()) + return standard_tests + + if __name__ == "__main__": unittest.main() diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py --- a/Lib/test/test_datetime.py +++ b/Lib/test/test_datetime.py @@ -23,9 +23,16 @@ test_classes = [] for module, suffix in zip(test_modules, test_suffixes): + test_classes = [] for name, cls in module.__dict__.items(): - if not (isinstance(cls, type) and issubclass(cls, unittest.TestCase)): + if not isinstance(cls, type): continue + if issubclass(cls, unittest.TestCase): + test_classes.append(cls) + elif issubclass(cls, unittest.TestSuite): + suit = cls() + test_classes.extend(type(test) for test in suit) + for cls in test_classes: cls.__name__ = name + suffix @classmethod def setUpClass(cls_, module=module): @@ -39,7 +46,6 @@ sys.modules.update(cls_._save_sys_modules) cls.setUpClass = setUpClass cls.tearDownClass = tearDownClass - test_classes.append(cls) def test_main(): run_unittest(*test_classes) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 20:35:55 2016 From: python-checkins at python.org (terry.reedy) Date: Mon, 25 Jul 2016 00:35:55 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327609=3A_Explicit?= =?utf-8?q?ly_return_None_when_there_are_other_returns=2E?= Message-ID: <20160725003555.11288.15099.E6E2E98C@psf.io> https://hg.python.org/cpython/rev/1ec47de72538 changeset: 102436:1ec47de72538 user: Terry Jan Reedy date: Sun Jul 24 20:35:43 2016 -0400 summary: Issue #27609: Explicitly return None when there are other returns. In a few cases, reverse a condition and eliminate a return. files: Lib/idlelib/autocomplete.py | 33 ++++++++++------------ Lib/idlelib/autocomplete_w.py | 24 ++++++++-------- 2 files changed, 27 insertions(+), 30 deletions(-) diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py --- a/Lib/idlelib/autocomplete.py +++ b/Lib/idlelib/autocomplete.py @@ -37,16 +37,14 @@ def __init__(self, editwin=None): self.editwin = editwin - if editwin is None: # subprocess and test - return - self.text = editwin.text - self.autocompletewindow = None - - # id of delayed call, and the index of the text insert when the delayed - # call was issued. If _delayed_completion_id is None, there is no - # delayed call. - self._delayed_completion_id = None - self._delayed_completion_index = None + if editwin is not None: # not in subprocess or test + self.text = editwin.text + self.autocompletewindow = None + # id of delayed call, and the index of the text insert when + # the delayed call was issued. If _delayed_completion_id is + # None, there is no delayed call. + self._delayed_completion_id = None + self._delayed_completion_index = None def _make_autocomplete_window(self): return autocomplete_w.AutoCompleteWindow(self.text) @@ -82,7 +80,7 @@ """ if hasattr(event, "mc_state") and event.mc_state: # A modifier was pressed along with the tab, continue as usual. - return + return None if self.autocompletewindow and self.autocompletewindow.is_active(): self.autocompletewindow.complete() return "break" @@ -101,9 +99,8 @@ def _delayed_open_completions(self, *args): self._delayed_completion_id = None - if self.text.index("insert") != self._delayed_completion_index: - return - self.open_completions(*args) + if self.text.index("insert") == self._delayed_completion_index: + self.open_completions(*args) def open_completions(self, evalfuncs, complete, userWantsWin, mode=None): """Find the completions and create the AutoCompleteWindow. @@ -148,17 +145,17 @@ comp_what = hp.get_expression() if not comp_what or \ (not evalfuncs and comp_what.find('(') != -1): - return + return None else: comp_what = "" else: - return + return None if complete and not comp_what and not comp_start: - return + return None comp_lists = self.fetch_completions(comp_what, mode) if not comp_lists[0]: - return + return None self.autocompletewindow = self._make_autocomplete_window() return not self.autocompletewindow.show_window( comp_lists, "insert-%dc" % len(comp_start), diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -216,6 +216,7 @@ self.winconfigid = acw.bind(WINCONFIG_SEQUENCE, self.winconfig_event) self.doubleclickid = listbox.bind(DOUBLECLICK_SEQUENCE, self.doubleclick_event) + return None def winconfig_event(self, event): if not self.is_active(): @@ -244,11 +245,10 @@ self.hide_window() def listselect_event(self, event): - if not self.is_active(): - return - self.userwantswindow = True - cursel = int(self.listbox.curselection()[0]) - self._change_start(self.completions[cursel]) + if self.is_active(): + self.userwantswindow = True + cursel = int(self.listbox.curselection()[0]) + self._change_start(self.completions[cursel]) def doubleclick_event(self, event): # Put the selected completion in the text, and close the list @@ -258,7 +258,7 @@ def keypress_event(self, event): if not self.is_active(): - return + return None keysym = event.keysym if hasattr(event, "mc_state"): state = event.mc_state @@ -283,7 +283,7 @@ # keysym == "BackSpace" if len(self.start) == 0: self.hide_window() - return + return None self._change_start(self.start[:-1]) self.lasttypedstart = self.start self.listbox.select_clear(0, int(self.listbox.curselection()[0])) @@ -293,7 +293,7 @@ elif keysym == "Return": self.hide_window() - return + return None elif (self.mode == COMPLETE_ATTRIBUTES and keysym in ("period", "space", "parenleft", "parenright", "bracketleft", @@ -309,7 +309,7 @@ and (self.mode == COMPLETE_ATTRIBUTES or self.start): self._change_start(self.completions[cursel]) self.hide_window() - return + return None elif keysym in ("Home", "End", "Prior", "Next", "Up", "Down") and \ not state: @@ -350,12 +350,12 @@ # first tab; let AutoComplete handle the completion self.userwantswindow = True self.lastkey_was_tab = True - return + return None elif any(s in keysym for s in ("Shift", "Control", "Alt", "Meta", "Command", "Option")): # A modifier key, so ignore - return + return None elif event.char and event.char >= ' ': # Regular character with a non-length-1 keycode @@ -369,7 +369,7 @@ else: # Unknown event, close the window and let it through. self.hide_window() - return + return None def keyrelease_event(self, event): if not self.is_active(): -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 20:36:58 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Mon, 25 Jul 2016 00:36:58 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_24773=3A_Make_zonein?= =?utf-8?q?fo_tests_more_robust=2E_=28reapply=29?= Message-ID: <20160725003658.7280.10897.7D5BC704@psf.io> https://hg.python.org/cpython/rev/dca143512f6e changeset: 102437:dca143512f6e user: Alexander Belopolsky date: Sun Jul 24 20:36:55 2016 -0400 summary: Issue 24773: Make zoneinfo tests more robust. (reapply) files: Lib/test/datetimetester.py | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -4677,7 +4677,10 @@ def setUp(self): if sys.platform == "win32": self.skipTest("Skipping zoneinfo tests on Windows") - self.tz = ZoneInfo.fromname(self.zonename) + try: + self.tz = ZoneInfo.fromname(self.zonename) + except FileNotFoundError as err: + self.skipTest("Skipping %s: %s" % (self.zonename, err)) def assertEquivDatetimes(self, a, b): self.assertEqual((a.replace(tzinfo=None), a.fold, id(a.tzinfo)), @@ -4738,7 +4741,7 @@ # civil time was generally not solar time in those years. self.zonename.startswith('right/')): self.skipTest("Skipping %s" % self.zonename) - tz = ZoneInfo.fromname(self.zonename) + tz = self.tz TZ = os.environ.get('TZ') os.environ['TZ'] = self.zonename try: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 21:07:14 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 25 Jul 2016 01:07:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Fixes_default_?= =?utf-8?q?intermediate_directory_when_building_on_Windows=2E?= Message-ID: <20160725010714.58916.56044.6A4123CE@psf.io> https://hg.python.org/cpython/rev/d8ab156b84be changeset: 102438:d8ab156b84be branch: 3.5 parent: 102430:3005fc6cff8a user: Steve Dower date: Sun Jul 24 18:03:22 2016 -0700 summary: Fixes default intermediate directory when building on Windows. files: PCbuild/pyproject.props | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props --- a/PCbuild/pyproject.props +++ b/PCbuild/pyproject.props @@ -5,7 +5,7 @@ 10.0 $(BuildPath) $(OutDir)\ - $(SolutionDir)obj\ + $(MSBuildThisFileDirectory)obj\ $(Py_IntDir)\$(ArchName)_$(Configuration)\$(ProjectName)\ $(Py_IntDir)\$(ArchName)_PGO\$(ProjectName)\ $(ProjectName) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 21:07:14 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 25 Jul 2016 01:07:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_from_3=2E5?= Message-ID: <20160725010714.20074.86713.FCC1A161@psf.io> https://hg.python.org/cpython/rev/68e5d8fb29f1 changeset: 102440:68e5d8fb29f1 parent: 102439:c6ce1958cebb parent: 102438:d8ab156b84be user: Steve Dower date: Sun Jul 24 18:06:51 2016 -0700 summary: Merge from 3.5 files: PCbuild/pyproject.props | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/PCbuild/pyproject.props b/PCbuild/pyproject.props --- a/PCbuild/pyproject.props +++ b/PCbuild/pyproject.props @@ -5,7 +5,7 @@ 10.0 $(BuildPath) $(OutDir)\ - $(SolutionDir)obj\ + $(MSBuildThisFileDirectory)obj\ $(Py_IntDir)\$(ArchName)_$(Configuration)\$(ProjectName)\ $(Py_IntDir)\$(ArchName)_PGO\$(ProjectName)\ $(ProjectName) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 21:07:14 2016 From: python-checkins at python.org (steve.dower) Date: Mon, 25 Jul 2016 01:07:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327610=3A_Adds_PEP?= =?utf-8?q?_514_metadata_to_Windows_installer?= Message-ID: <20160725010714.40385.90919.566BCAEE@psf.io> https://hg.python.org/cpython/rev/c6ce1958cebb changeset: 102439:c6ce1958cebb parent: 102437:dca143512f6e user: Steve Dower date: Sun Jul 24 18:04:29 2016 -0700 summary: Issue #27610: Adds PEP 514 metadata to Windows installer files: Misc/NEWS | 2 ++ Tools/msi/common.wxs | 4 ++++ Tools/msi/common_en-US.wxl_template | 1 + Tools/msi/exe/exe.wixproj | 1 + Tools/msi/exe/exe.wxs | 2 +- Tools/msi/exe/exe_d.wixproj | 1 + Tools/msi/exe/exe_en-US.wxl_template | 1 + Tools/msi/exe/exe_files.wxs | 3 +++ Tools/msi/exe/exe_pdb.wixproj | 1 + Tools/msi/msi.props | 9 +++++++++ 10 files changed, 24 insertions(+), 1 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -61,6 +61,8 @@ Windows ------- +- Issue #27610: Adds PEP 514 metadata to Windows installer + - Issue #27469: Adds a shell extension to the launcher so that drag and drop works correctly. diff --git a/Tools/msi/common.wxs b/Tools/msi/common.wxs --- a/Tools/msi/common.wxs +++ b/Tools/msi/common.wxs @@ -1,6 +1,10 @@ + + + + diff --git a/Tools/msi/common_en-US.wxl_template b/Tools/msi/common_en-US.wxl_template --- a/Tools/msi/common_en-US.wxl_template +++ b/Tools/msi/common_en-US.wxl_template @@ -14,4 +14,5 @@ A newer version of !(loc.ProductName) is already installed. An incorrect version of a prerequisite package is installed. Please uninstall any other versions of !(loc.ProductName) and try installing this again. The TARGETDIR variable must be provided when invoking this installer. + http://www.python.org/ diff --git a/Tools/msi/exe/exe.wixproj b/Tools/msi/exe/exe.wixproj --- a/Tools/msi/exe/exe.wixproj +++ b/Tools/msi/exe/exe.wixproj @@ -14,6 +14,7 @@ + diff --git a/Tools/msi/exe/exe.wxs b/Tools/msi/exe/exe.wxs --- a/Tools/msi/exe/exe.wxs +++ b/Tools/msi/exe/exe.wxs @@ -9,6 +9,7 @@ + @@ -24,7 +25,6 @@ WorkingDirectory="InstallDirectory" /> - diff --git a/Tools/msi/exe/exe_d.wixproj b/Tools/msi/exe/exe_d.wixproj --- a/Tools/msi/exe/exe_d.wixproj +++ b/Tools/msi/exe/exe_d.wixproj @@ -10,6 +10,7 @@ + diff --git a/Tools/msi/exe/exe_en-US.wxl_template b/Tools/msi/exe/exe_en-US.wxl_template --- a/Tools/msi/exe/exe_en-US.wxl_template +++ b/Tools/msi/exe/exe_en-US.wxl_template @@ -4,4 +4,5 @@ executable Python {{ShortVersion}} ({{Bitness}}) Launches the !(loc.ProductName) interpreter. + http://www.python.org/ diff --git a/Tools/msi/exe/exe_files.wxs b/Tools/msi/exe/exe_files.wxs --- a/Tools/msi/exe/exe_files.wxs +++ b/Tools/msi/exe/exe_files.wxs @@ -28,6 +28,9 @@ + + + diff --git a/Tools/msi/exe/exe_pdb.wixproj b/Tools/msi/exe/exe_pdb.wixproj --- a/Tools/msi/exe/exe_pdb.wixproj +++ b/Tools/msi/exe/exe_pdb.wixproj @@ -10,6 +10,7 @@ + diff --git a/Tools/msi/msi.props b/Tools/msi/msi.props --- a/Tools/msi/msi.props +++ b/Tools/msi/msi.props @@ -69,6 +69,8 @@ 32-bit 64-bit + 32bit + 64bit $(DefineConstants); Version=$(InstallerVersion); @@ -79,6 +81,7 @@ UpgradeMinimumVersion=$(MajorVersionNumber).$(MinorVersionNumber).0.0; NextMajorVersionNumber=$(MajorVersionNumber).$([msbuild]::Add($(MinorVersionNumber), 1)).0.0; Bitness=$(Bitness); + PlatformArchitecture=$(PlatformArchitecture); PyDebugExt=$(PyDebugExt); PyArchExt=$(PyArchExt); PyTestExt=$(PyTestExt); @@ -155,6 +158,12 @@ <_Uuid Include="RemoveLib2to3PickleComponentGuid"> lib2to3/pickles + <_Uuid Include="CommonPythonRegComponentGuid"> + registry + + <_Uuid Include="PythonRegComponentGuid"> + registry/$(OutputName) + -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 21:40:32 2016 From: python-checkins at python.org (berker.peksag) Date: Mon, 25 Jul 2016 01:40:32 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327454=3A_Use_PyDi?= =?utf-8?q?ct=5FSetDefault_in_PyUnicode=5FInternInPlace?= Message-ID: <20160725014032.21116.34091.6A17044F@psf.io> https://hg.python.org/cpython/rev/f3187a157204 changeset: 102441:f3187a157204 user: Berker Peksag date: Mon Jul 25 04:40:39 2016 +0300 summary: Issue #27454: Use PyDict_SetDefault in PyUnicode_InternInPlace Patch by INADA Naoki. files: Objects/unicodeobject.c | 20 ++++++-------------- 1 files changed, 6 insertions(+), 14 deletions(-) diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -15039,26 +15039,18 @@ return; } } - /* It might be that the GetItem call fails even - though the key is present in the dictionary, - namely when this happens during a stack overflow. */ Py_ALLOW_RECURSION - t = PyDict_GetItem(interned, s); + t = PyDict_SetDefault(interned, s, s); Py_END_ALLOW_RECURSION - - if (t) { + if (t == NULL) { + PyErr_Clear(); + return; + } + if (t != s) { Py_INCREF(t); Py_SETREF(*p, t); return; } - - PyThreadState_GET()->recursion_critical = 1; - if (PyDict_SetItem(interned, s, s) < 0) { - PyErr_Clear(); - PyThreadState_GET()->recursion_critical = 0; - return; - } - PyThreadState_GET()->recursion_critical = 0; /* The two references in interned are not counted by refcnt. The deallocator will take care of this */ Py_REFCNT(s) -= 2; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 21:56:15 2016 From: python-checkins at python.org (berker.peksag) Date: Mon, 25 Jul 2016 01:56:15 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327601=3A_Merge_from_3=2E5?= Message-ID: <20160725015615.21137.21250.85083F43@psf.io> https://hg.python.org/cpython/rev/06bbcbaeeb18 changeset: 102443:06bbcbaeeb18 parent: 102441:f3187a157204 parent: 102442:a6be689eacf8 user: Berker Peksag date: Mon Jul 25 04:56:19 2016 +0300 summary: Issue #27601: Merge from 3.5 files: Doc/library/stdtypes.rst | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -692,16 +692,16 @@ m, n = m // P, n // P if n % P == 0: - hash_ = sys.hash_info.inf + hash_value = sys.hash_info.inf else: # Fermat's Little Theorem: pow(n, P-1, P) is 1, so # pow(n, P-2, P) gives the inverse of n modulo P. - hash_ = (abs(m) % P) * pow(n, P - 2, P) % P + hash_value = (abs(m) % P) * pow(n, P - 2, P) % P if m < 0: - hash_ = -hash_ - if hash_ == -1: - hash_ = -2 - return hash_ + hash_value = -hash_value + if hash_value == -1: + hash_value = -2 + return hash_value def hash_float(x): """Compute the hash of a float x.""" @@ -716,13 +716,13 @@ def hash_complex(z): """Compute the hash of a complex number z.""" - hash_ = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag) + hash_value = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag) # do a signed reduction modulo 2**sys.hash_info.width M = 2**(sys.hash_info.width - 1) - hash_ = (hash_ & (M - 1)) - (hash & M) - if hash_ == -1: - hash_ == -2 - return hash_ + hash_value = (hash_value & (M - 1)) - (hash_value & M) + if hash_value == -1: + hash_value = -2 + return hash_value .. _typeiter: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 21:56:15 2016 From: python-checkins at python.org (berker.peksag) Date: Mon, 25 Jul 2016 01:56:15 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NjAx?= =?utf-8?q?=3A_Improve_example_in_the_=22Hashing_of_numeric_types=22_secti?= =?utf-8?q?on?= Message-ID: <20160725015614.58665.10355.AF872B57@psf.io> https://hg.python.org/cpython/rev/a6be689eacf8 changeset: 102442:a6be689eacf8 branch: 3.5 parent: 102438:d8ab156b84be user: Berker Peksag date: Mon Jul 25 04:55:51 2016 +0300 summary: Issue #27601: Improve example in the "Hashing of numeric types" section * Fix return value of hash_compute() implementation * Rename variable names to hash_value to improve readability Patch by Emanuel Barry. files: Doc/library/stdtypes.rst | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -692,16 +692,16 @@ m, n = m // P, n // P if n % P == 0: - hash_ = sys.hash_info.inf + hash_value = sys.hash_info.inf else: # Fermat's Little Theorem: pow(n, P-1, P) is 1, so # pow(n, P-2, P) gives the inverse of n modulo P. - hash_ = (abs(m) % P) * pow(n, P - 2, P) % P + hash_value = (abs(m) % P) * pow(n, P - 2, P) % P if m < 0: - hash_ = -hash_ - if hash_ == -1: - hash_ = -2 - return hash_ + hash_value = -hash_value + if hash_value == -1: + hash_value = -2 + return hash_value def hash_float(x): """Compute the hash of a float x.""" @@ -716,13 +716,13 @@ def hash_complex(z): """Compute the hash of a complex number z.""" - hash_ = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag) + hash_value = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag) # do a signed reduction modulo 2**sys.hash_info.width M = 2**(sys.hash_info.width - 1) - hash_ = (hash_ & (M - 1)) - (hash & M) - if hash_ == -1: - hash_ == -2 - return hash_ + hash_value = (hash_value & (M - 1)) - (hash_value & M) + if hash_value == -1: + hash_value = -2 + return hash_value .. _typeiter: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 22:22:31 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 25 Jul 2016 02:22:31 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=237063=3A_Remove_de?= =?utf-8?q?ad_code_from_array_slice_handling?= Message-ID: <20160725022226.19898.91924.262BDEEE@psf.io> https://hg.python.org/cpython/rev/ab28676df655 changeset: 102444:ab28676df655 user: Martin Panter date: Mon Jul 25 02:21:14 2016 +0000 summary: Issue #7063: Remove dead code from array slice handling Patch by Chuck. files: Misc/NEWS | 3 + Modules/arraymodule.c | 55 ++++-------------------------- 2 files changed, 11 insertions(+), 47 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -26,6 +26,9 @@ Library ------- +- Issue #7063: Remove dead code from the "array" module's slice handling. + Patch by Chuck. + - Issue #27130: In the "zlib" module, fix handling of large buffers (typically 4 GiB) when compressing and decompressing. Previously, inputs were limited to 4 GiB, and compression and decompression operations did not diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -846,37 +846,10 @@ } static int -array_ass_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh, PyObject *v) +array_del_slice(arrayobject *a, Py_ssize_t ilow, Py_ssize_t ihigh) { char *item; - Py_ssize_t n; /* Size of replacement array */ Py_ssize_t d; /* Change in size */ -#define b ((arrayobject *)v) - if (v == NULL) - n = 0; - else if (array_Check(v)) { - n = Py_SIZE(b); - if (a == b) { - /* Special case "a[i:j] = a" -- copy b first */ - int ret; - v = array_slice(b, 0, n); - if (!v) - return -1; - ret = array_ass_slice(a, ilow, ihigh, v); - Py_DECREF(v); - return ret; - } - if (b->ob_descr != a->ob_descr) { - PyErr_BadArgument(); - return -1; - } - } - else { - PyErr_Format(PyExc_TypeError, - "can only assign array (not \"%.200s\") to array slice", - Py_TYPE(v)->tp_name); - return -1; - } if (ilow < 0) ilow = 0; else if (ilow > Py_SIZE(a)) @@ -888,7 +861,7 @@ else if (ihigh > Py_SIZE(a)) ihigh = Py_SIZE(a); item = a->ob_item; - d = n - (ihigh-ilow); + d = ihigh-ilow; /* Issue #4509: If the array has exported buffers and the slice assignment would change the size of the array, fail early to make sure we don't modify it. */ @@ -897,25 +870,14 @@ "cannot resize an array that is exporting buffers"); return -1; } - if (d < 0) { /* Delete -d items */ - memmove(item + (ihigh+d)*a->ob_descr->itemsize, + if (d > 0) { /* Delete d items */ + memmove(item + (ihigh-d)*a->ob_descr->itemsize, item + ihigh*a->ob_descr->itemsize, (Py_SIZE(a)-ihigh)*a->ob_descr->itemsize); - if (array_resize(a, Py_SIZE(a) + d) == -1) + if (array_resize(a, Py_SIZE(a) - d) == -1) return -1; } - else if (d > 0) { /* Insert d items */ - if (array_resize(a, Py_SIZE(a) + d)) - return -1; - memmove(item + (ihigh+d)*a->ob_descr->itemsize, - item + ihigh*a->ob_descr->itemsize, - (Py_SIZE(a)-ihigh)*a->ob_descr->itemsize); - } - if (n > 0) - memcpy(item + ilow*a->ob_descr->itemsize, b->ob_item, - n*b->ob_descr->itemsize); return 0; -#undef b } static int @@ -927,7 +889,7 @@ return -1; } if (v == NULL) - return array_ass_slice(a, i, i+1, v); + return array_del_slice(a, i, i+1); return (*a->ob_descr->setitem)(a, i, v); } @@ -1155,8 +1117,7 @@ cmp = PyObject_RichCompareBool(selfi, v, Py_EQ); Py_DECREF(selfi); if (cmp > 0) { - if (array_ass_slice(self, i, i+1, - (PyObject *)NULL) != 0) + if (array_del_slice(self, i, i+1) != 0) return NULL; Py_INCREF(Py_None); return Py_None; @@ -1199,7 +1160,7 @@ v = getarrayitem((PyObject *)self, i); if (v == NULL) return NULL; - if (array_ass_slice(self, i, i+1, (PyObject *)NULL) != 0) { + if (array_del_slice(self, i, i+1) != 0) { Py_DECREF(v); return NULL; } -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 23:01:48 2016 From: python-checkins at python.org (terry.reedy) Date: Mon, 25 Jul 2016 03:01:48 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2319198=3A_IDLE=3A_?= =?utf-8?q?tab_after_initial_whitespace_should_tab=2C_not_autocomplete=2E?= Message-ID: <20160725030148.58579.43130.0015E8AA@psf.io> https://hg.python.org/cpython/rev/128ad410c776 changeset: 102445:128ad410c776 user: Terry Jan Reedy date: Sun Jul 24 23:01:28 2016 -0400 summary: Issue #19198: IDLE: tab after initial whitespace should tab, not autocomplete. Fixes problem with writing docstrings at lease twice indented. files: Lib/idlelib/autocomplete.py | 9 +++++---- Lib/idlelib/autocomplete_w.py | 5 ++--- Lib/idlelib/idle_test/test_autocomplete.py | 5 +++++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py --- a/Lib/idlelib/autocomplete.py +++ b/Lib/idlelib/autocomplete.py @@ -78,16 +78,17 @@ open a completion list after that (if there is more than one completion) """ - if hasattr(event, "mc_state") and event.mc_state: - # A modifier was pressed along with the tab, continue as usual. + if hasattr(event, "mc_state") and event.mc_state or\ + not self.text.get("insert linestart", "insert").strip(): + # A modifier was pressed along with the tab or + # there is only previous whitespace on this line, so tab. return None if self.autocompletewindow and self.autocompletewindow.is_active(): self.autocompletewindow.complete() return "break" else: opened = self.open_completions(False, True, True) - if opened: - return "break" + return "break" if opened else None def _open_completions_later(self, *args): self._delayed_completion_index = self.text.index("insert") diff --git a/Lib/idlelib/autocomplete_w.py b/Lib/idlelib/autocomplete_w.py --- a/Lib/idlelib/autocomplete_w.py +++ b/Lib/idlelib/autocomplete_w.py @@ -240,9 +240,8 @@ acw.wm_geometry("+%d+%d" % (new_x, new_y)) def hide_event(self, event): - if not self.is_active(): - return - self.hide_window() + if self.is_active(): + self.hide_window() def listselect_event(self, event): if self.is_active(): diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -97,6 +97,11 @@ self.assertIsNone(autocomplete.autocomplete_event(ev)) del ev.mc_state + # Test that tab after whitespace is ignored. + self.text.insert('1.0', ' """Docstring.\n ') + self.assertIsNone(autocomplete.autocomplete_event(ev)) + self.text.delete('1.0', 'end') + # If autocomplete window is open, complete() method is called self.text.insert('1.0', 're.') # This must call autocomplete._make_autocomplete_window() -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 23:44:25 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 25 Jul 2016 03:44:25 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327581=3A_Merge_overflow_fix_from_3=2E5?= Message-ID: <20160725034425.19947.18721.BE3A84D1@psf.io> https://hg.python.org/cpython/rev/8f84942a0e40 changeset: 102447:8f84942a0e40 parent: 102445:128ad410c776 parent: 102446:ad3762227655 user: Martin Panter date: Mon Jul 25 03:31:29 2016 +0000 summary: Issue #27581: Merge overflow fix from 3.5 files: Misc/NEWS | 3 +++ Objects/abstract.c | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,9 @@ - Issue #27507: Add integer overflow check in bytearray.extend(). Patch by Xiang Zhang. +- Issue #27581: Don't rely on wrapping for overflow check in + PySequence_Tuple(). Patch by Xiang Zhang. + - Issue #27419: Standard __import__() no longer look up "__import__" in globals or builtins for importing submodules or "from import". Fixed a crash if raise a warning about unabling to resolve package from __spec__ or diff --git a/Objects/abstract.c b/Objects/abstract.c --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1747,21 +1747,22 @@ break; } if (j >= n) { - Py_ssize_t oldn = n; + size_t newn = (size_t)n; /* The over-allocation strategy can grow a bit faster than for lists because unlike lists the over-allocation isn't permanent -- we reclaim the excess before the end of this routine. So, grow by ten and then add 25%. */ - n += 10; - n += n >> 2; - if (n < oldn) { + newn += 10u; + newn += newn >> 2; + if (newn > PY_SSIZE_T_MAX) { /* Check for overflow */ PyErr_NoMemory(); Py_DECREF(item); goto Fail; } + n = (Py_ssize_t)newn; if (_PyTuple_Resize(&result, n) != 0) { Py_DECREF(item); goto Fail; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 23:44:25 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 25 Jul 2016 03:44:25 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NTgx?= =?utf-8?q?=3A_Don=E2=80=99t_rely_on_overflow_wrapping_in_PySequence=5FTup?= =?utf-8?q?le=28=29?= Message-ID: <20160725034425.49323.31586.B3380925@psf.io> https://hg.python.org/cpython/rev/ad3762227655 changeset: 102446:ad3762227655 branch: 3.5 parent: 102442:a6be689eacf8 user: Martin Panter date: Mon Jul 25 02:30:05 2016 +0000 summary: Issue #27581: Don?t rely on overflow wrapping in PySequence_Tuple() Patch by Xiang Zhang. files: Misc/NEWS | 3 +++ Objects/abstract.c | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -25,6 +25,9 @@ - Issue #27507: Add integer overflow check in bytearray.extend(). Patch by Xiang Zhang. +- Issue #27581: Don't rely on wrapping for overflow check in + PySequence_Tuple(). Patch by Xiang Zhang. + - Issue #27443: __length_hint__() of bytearray iterators no longer return a negative integer for a resized bytearray. diff --git a/Objects/abstract.c b/Objects/abstract.c --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -1724,21 +1724,22 @@ break; } if (j >= n) { - Py_ssize_t oldn = n; + size_t newn = (size_t)n; /* The over-allocation strategy can grow a bit faster than for lists because unlike lists the over-allocation isn't permanent -- we reclaim the excess before the end of this routine. So, grow by ten and then add 25%. */ - n += 10; - n += n >> 2; - if (n < oldn) { + newn += 10u; + newn += newn >> 2; + if (newn > PY_SSIZE_T_MAX) { /* Check for overflow */ PyErr_NoMemory(); Py_DECREF(item); goto Fail; } + n = (Py_ssize_t)newn; if (_PyTuple_Resize(&result, n) != 0) { Py_DECREF(item); goto Fail; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 23:44:25 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 25 Jul 2016 03:44:25 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=231621=3A_Avoid_sig?= =?utf-8?q?ned_overflow_in_list_and_tuple_operations?= Message-ID: <20160725034425.40359.75537.F8FF68B8@psf.io> https://hg.python.org/cpython/rev/db93af6080e7 changeset: 102448:db93af6080e7 user: Martin Panter date: Mon Jul 25 02:39:20 2016 +0000 summary: Issue #1621: Avoid signed overflow in list and tuple operations Patch by Xiang Zhang. files: Lib/test/list_tests.py | 14 +++++++++++++- Misc/NEWS | 3 +++ Objects/listobject.c | 18 ++++++++++-------- Objects/tupleobject.c | 4 ++-- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/Lib/test/list_tests.py b/Lib/test/list_tests.py --- a/Lib/test/list_tests.py +++ b/Lib/test/list_tests.py @@ -266,8 +266,20 @@ self.assertEqual(a, list("spameggs")) self.assertRaises(TypeError, a.extend, None) + self.assertRaises(TypeError, a.extend) - self.assertRaises(TypeError, a.extend) + # overflow test. issue1621 + class CustomIter: + def __iter__(self): + return self + def __next__(self): + raise StopIteration + def __length_hint__(self): + return sys.maxsize + a = self.type2test([1,2,3,4]) + a.extend(CustomIter()) + self.assertEqual(a, [1,2,3,4]) + def test_insert(self): a = self.type2test([0, 1, 2]) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -16,6 +16,9 @@ - Issue #27581: Don't rely on wrapping for overflow check in PySequence_Tuple(). Patch by Xiang Zhang. +- Issue #1621: Avoid signed integer overflow in list and tuple operations. + Patch by Xiang Zhang. + - Issue #27419: Standard __import__() no longer look up "__import__" in globals or builtins for importing submodules or "from import". Fixed a crash if raise a warning about unabling to resolve package from __spec__ or diff --git a/Objects/listobject.c b/Objects/listobject.c --- a/Objects/listobject.c +++ b/Objects/listobject.c @@ -488,9 +488,9 @@ return NULL; } #define b ((PyListObject *)bb) + if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b)) + return PyErr_NoMemory(); size = Py_SIZE(a) + Py_SIZE(b); - if (size < 0) - return PyErr_NoMemory(); np = (PyListObject *) PyList_New(size); if (np == NULL) { return NULL; @@ -841,18 +841,20 @@ return NULL; } m = Py_SIZE(self); - mn = m + n; - if (mn >= m) { + if (m > PY_SSIZE_T_MAX - n) { + /* m + n overflowed; on the chance that n lied, and there really + * is enough room, ignore it. If n was telling the truth, we'll + * eventually run out of memory during the loop. + */ + } + else { + mn = m + n; /* Make room. */ if (list_resize(self, mn) < 0) goto error; /* Make the list sane again. */ Py_SIZE(self) = m; } - /* Else m + n overflowed; on the chance that n lied, and there really - * is enough room, ignore it. If n was telling the truth, we'll - * eventually run out of memory during the loop. - */ /* Run iterator to exhaustion. */ for (;;) { diff --git a/Objects/tupleobject.c b/Objects/tupleobject.c --- a/Objects/tupleobject.c +++ b/Objects/tupleobject.c @@ -453,9 +453,9 @@ return NULL; } #define b ((PyTupleObject *)bb) + if (Py_SIZE(a) > PY_SSIZE_T_MAX - Py_SIZE(b)) + return PyErr_NoMemory(); size = Py_SIZE(a) + Py_SIZE(b); - if (size < 0) - return PyErr_NoMemory(); np = (PyTupleObject *) PyTuple_New(size); if (np == NULL) { return NULL; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 24 23:44:26 2016 From: python-checkins at python.org (martin.panter) Date: Mon, 25 Jul 2016 03:44:26 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3NTgx?= =?utf-8?q?=3A_Don=E2=80=99t_rely_on_overflow_wrapping_in_PySequence=5FTup?= =?utf-8?q?le=28=29?= Message-ID: <20160725034426.20055.47351.D6A57D5C@psf.io> https://hg.python.org/cpython/rev/55b6e51b878b changeset: 102449:55b6e51b878b branch: 2.7 parent: 102425:2192edcfea02 user: Martin Panter date: Mon Jul 25 02:30:05 2016 +0000 summary: Issue #27581: Don?t rely on overflow wrapping in PySequence_Tuple() Patch by Xiang Zhang. files: Misc/NEWS | 3 +++ Objects/abstract.c | 9 +++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -16,6 +16,9 @@ - Issue #27507: Add integer overflow check in bytearray.extend(). Patch by Xiang Zhang. +- Issue #27581: Don't rely on wrapping for overflow check in + PySequence_Tuple(). Patch by Xiang Zhang. + - Issue #23908: os functions, open() and the io.FileIO constructor now reject unicode paths with embedded null character on Windows instead of silently truncating them. diff --git a/Objects/abstract.c b/Objects/abstract.c --- a/Objects/abstract.c +++ b/Objects/abstract.c @@ -2211,21 +2211,22 @@ break; } if (j >= n) { - Py_ssize_t oldn = n; + size_t newn = (size_t)n; /* The over-allocation strategy can grow a bit faster than for lists because unlike lists the over-allocation isn't permanent -- we reclaim the excess before the end of this routine. So, grow by ten and then add 25%. */ - n += 10; - n += n >> 2; - if (n < oldn) { + newn += 10u; + newn += newn >> 2; + if (newn > PY_SSIZE_T_MAX) { /* Check for overflow */ PyErr_NoMemory(); Py_DECREF(item); goto Fail; } + n = (Py_ssize_t)newn; if (_PyTuple_Resize(&result, n) != 0) { Py_DECREF(item); goto Fail; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 25 00:32:07 2016 From: python-checkins at python.org (terry.reedy) Date: Mon, 25 Jul 2016 04:32:07 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2324137=2C_issue_?= =?utf-8?q?=2327611=3A_Restore_tkinter_after_test=5Fidle=2E?= Message-ID: <20160725043207.49258.17305.E5DC8C8A@psf.io> https://hg.python.org/cpython/rev/5c76f787e695 changeset: 102450:5c76f787e695 parent: 102448:db93af6080e7 user: Terry Jan Reedy date: Mon Jul 25 00:31:54 2016 -0400 summary: Issue #24137, issue #27611: Restore tkinter after test_idle. files: Lib/test/test_idle.py | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/Lib/test/test_idle.py b/Lib/test/test_idle.py --- a/Lib/test/test_idle.py +++ b/Lib/test/test_idle.py @@ -19,3 +19,5 @@ if __name__ == '__main__': unittest.main(verbosity=2, exit=False) + tk._support_default_root = 1 + tk._default_root = None -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Mon Jul 25 06:58:11 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 25 Jul 2016 11:58:11 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python Default 2016-07-25 Message-ID: <0e4219d7-f0ef-4d62-8dea-06ceaf3f1416@irsmsx101.ger.corp.intel.com> Results for project Python default, build date 2016-07-25 02:03:26 +0000 commit: 06bbcbaeeb18 previous commit: 829117ae2e55 revision date: 2016-07-25 01:56:19 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.62% -2.17% 10.13% 16.51% :-| pybench 0.18% 0.11% 1.77% 8.36% :-( regex_v8 2.60% 0.87% -3.12% 4.26% :-| nbody 0.11% -0.39% -1.45% 11.67% :-( json_dump_v2 0.29% -0.42% -2.19% 11.75% :-| normal_startup 0.74% 0.53% 0.22% 5.69% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-default-2016-07-25/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Mon Jul 25 06:58:48 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Mon, 25 Jul 2016 11:58:48 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-25 Message-ID: <4b279143-1c94-478b-ae45-77e8a5c20b69@irsmsx101.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-25 02:50:49 +0000 commit: 2192edcfea02 previous commit: 434fc614c506 revision date: 2016-07-23 04:22:09 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.16% -0.63% 4.28% 6.41% :-) pybench 0.24% 0.02% 5.82% 5.24% :-( regex_v8 0.58% 0.11% -2.18% 10.78% :-) nbody 0.05% 0.05% 8.28% 1.93% :-| json_dump_v2 0.35% 0.00% 1.14% 11.59% :-( normal_startup 1.97% 0.09% -5.72% 2.54% :-) ssbench 0.16% 0.22% 2.63% 1.50% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-25/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Mon Jul 25 13:54:53 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Mon, 25 Jul 2016 17:54:53 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_24773=3A_Added_a_tim?= =?utf-8?q?e=5Ft_overflow_check=2E?= Message-ID: <20160725175453.18040.41726.59CD989E@psf.io> https://hg.python.org/cpython/rev/8cc06070e98b changeset: 102451:8cc06070e98b user: Alexander Belopolsky date: Mon Jul 25 13:54:51 2016 -0400 summary: Issue 24773: Added a time_t overflow check. files: Modules/_datetimemodule.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -4207,7 +4207,14 @@ local(PY_LONG_LONG u) { struct tm local_time; - time_t t = u - epoch; + time_t t; + u -= epoch; + t = u; + if (t != u) { + PyErr_SetString(PyExc_OverflowError, + "timestamp out of range for platform time_t"); + return -1; + } /* XXX: add bounds checking */ if (localtime_r(&t, &local_time) == NULL) { PyErr_SetFromErrno(PyExc_OSError); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Mon Jul 25 20:58:55 2016 From: python-checkins at python.org (terry.reedy) Date: Tue, 26 Jul 2016 00:58:55 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327620=3A_Escape_k?= =?utf-8?q?ey_closes_Query_box_as_cancelled=2E?= Message-ID: <20160726005855.6924.26186.E0A1EEBA@psf.io> https://hg.python.org/cpython/rev/352fc11b9fd2 changeset: 102452:352fc11b9fd2 user: Terry Jan Reedy date: Mon Jul 25 20:58:43 2016 -0400 summary: Issue #27620: Escape key closes Query box as cancelled. files: Lib/idlelib/idle_test/htest.py | 6 +++--- Lib/idlelib/query.py | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py --- a/Lib/idlelib/idle_test/htest.py +++ b/Lib/idlelib/idle_test/htest.py @@ -175,8 +175,8 @@ "'' and file does not exist are invalid path items.\n" "Any url ('www...', 'http...') is accepted.\n" "Test Browse with and without path, as cannot unittest.\n" - "A valid entry will be printed to shell with [0k]\n" - "or . [Cancel] will print None to shell" + "[Ok] or prints valid entry to shell\n" + "[Cancel] or prints None to shell" } _io_binding_spec = { @@ -245,7 +245,7 @@ '_htest': True}, 'msg': "Enter with or [Ok]. Print valid entry to Shell\n" "Blank line, after stripping, is ignored\n" - "Close dialog with valid entry, [Cancel] or [X]" + "Close dialog with valid entry, , [Cancel], [X]" } diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py --- a/Lib/idlelib/query.py +++ b/Lib/idlelib/query.py @@ -53,6 +53,7 @@ self.transient(parent) self.grab_set() self.bind('', self.ok) + self.bind('', self.cancel) self.protocol("WM_DELETE_WINDOW", self.cancel) self.parent = parent self.message = message -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 26 02:52:58 2016 From: python-checkins at python.org (martin.panter) Date: Tue, 26 Jul 2016 06:52:58 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2326638=3A_Merge_CLI_link_fix_from_3=2E5?= Message-ID: <20160726065258.106966.57182.34A104DD@psf.io> https://hg.python.org/cpython/rev/d7cbaaba59e8 changeset: 102454:d7cbaaba59e8 parent: 102452:352fc11b9fd2 parent: 102453:3996dd17ca21 user: Martin Panter date: Tue Jul 26 06:47:09 2016 +0000 summary: Issue #26638: Merge CLI link fix from 3.5 files: Doc/library/2to3.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst --- a/Doc/library/2to3.rst +++ b/Doc/library/2to3.rst @@ -55,7 +55,7 @@ Comments and exact indentation are preserved throughout the translation process. By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`. The -:option:`-l` flag lists all available fixers. An explicit set of fixers to run +:option:`!-l` flag lists all available fixers. An explicit set of fixers to run can be given with :option:`-f`. Likewise the :option:`!-x` explicitly disables a fixer. The following example runs only the ``imports`` and ``has_key`` fixers:: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 26 02:52:58 2016 From: python-checkins at python.org (martin.panter) Date: Tue, 26 Jul 2016 06:52:58 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI2NjM4?= =?utf-8?q?=3A_Don=E2=80=99t_link_2to3_-l_option_to_the_tarfile_-l_option?= Message-ID: <20160726065258.19971.12417.102CFCEE@psf.io> https://hg.python.org/cpython/rev/3996dd17ca21 changeset: 102453:3996dd17ca21 branch: 3.5 parent: 102446:ad3762227655 user: Martin Panter date: Tue Jul 26 06:46:06 2016 +0000 summary: Issue #26638: Don?t link 2to3 -l option to the tarfile -l option files: Doc/library/2to3.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst --- a/Doc/library/2to3.rst +++ b/Doc/library/2to3.rst @@ -55,7 +55,7 @@ Comments and exact indentation are preserved throughout the translation process. By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`. The -:option:`-l` flag lists all available fixers. An explicit set of fixers to run +:option:`!-l` flag lists all available fixers. An explicit set of fixers to run can be given with :option:`-f`. Likewise the :option:`!-x` explicitly disables a fixer. The following example runs only the ``imports`` and ``has_key`` fixers:: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 26 06:56:32 2016 From: python-checkins at python.org (xavier.degaye) Date: Tue, 26 Jul 2016 10:56:32 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI2NjYy?= =?utf-8?q?=3A_Set_PYTHON=5FFOR=5FGEN_in_configure?= Message-ID: <20160726105631.24822.28545.9351ED0A@psf.io> https://hg.python.org/cpython/rev/5aff28f33b2a changeset: 102455:5aff28f33b2a branch: 3.5 parent: 102453:3996dd17ca21 user: Xavier de Gaye date: Tue Jul 26 12:48:08 2016 +0200 summary: Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be used for file generation during the build. files: Makefile.pre.in | 9 +- Misc/NEWS | 6 + Objects/typeslots.py | 63 ++++++---- configure | 169 +++++++++--------------------- configure.ac | 25 +--- 5 files changed, 108 insertions(+), 164 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -222,6 +222,7 @@ BUILDPYTHON= python$(BUILDEXE) cross_compiling=@cross_compiling@ +PYTHON_FOR_GEN=@PYTHON_FOR_GEN@ PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@ _PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@ BUILD_GNU_TYPE= @build@ @@ -339,7 +340,7 @@ OPCODE_H_DIR= $(srcdir)/Include OPCODE_H_SCRIPT= $(srcdir)/Tools/scripts/generate_opcode_h.py OPCODE_H= $(OPCODE_H_DIR)/opcode.h -OPCODE_H_GEN= @OPCODEHGEN@ $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H) +OPCODE_H_GEN= $(PYTHON_FOR_GEN) $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H) # ########################################################################## # AST @@ -352,7 +353,7 @@ ASDLGEN_FILES= $(srcdir)/Parser/asdl.py $(srcdir)/Parser/asdl_c.py # Note that a build now requires Python to exist before the build starts. # Use "hg touch" to fix up screwed up file mtimes in a checkout. -ASDLGEN= @ASDLGEN@ $(srcdir)/Parser/asdl_c.py +ASDLGEN= $(PYTHON_FOR_GEN) $(srcdir)/Parser/asdl_c.py ########################################################################## # Python @@ -880,7 +881,7 @@ Objects/setobject.o: $(srcdir)/Objects/stringlib/eq.h $(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES) - $(OPCODETARGETGEN) $(OPCODETARGETS_H) + $(PYTHON_FOR_GEN) $(OPCODETARGETGEN) $(OPCODETARGETS_H) Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h @@ -888,7 +889,7 @@ Objects/typeobject.o: Objects/typeslots.inc Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py - $(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h > Objects/typeslots.inc + $(PYTHON_FOR_GEN) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h Objects/typeslots.inc ############################################################################ # Header files diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -142,6 +142,12 @@ - Issue #27309: Enabled proper Windows styles in python[w].exe manifest. +Build +----- + +- Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be + used for file generation during the build. + What's New in Python 3.5.2? =========================== diff --git a/Objects/typeslots.py b/Objects/typeslots.py --- a/Objects/typeslots.py +++ b/Objects/typeslots.py @@ -1,32 +1,43 @@ #!/usr/bin/python -# Usage: typeslots.py < Include/typeslots.h > typeslots.inc +# Usage: typeslots.py < Include/typeslots.h typeslots.inc import sys, re -print("/* Generated by typeslots.py */") -res = {} -for line in sys.stdin: - m = re.match("#define Py_([a-z_]+) ([0-9]+)", line) - if not m: - continue - member = m.group(1) - if member.startswith("tp_"): - member = "ht_type."+member - elif member.startswith("am_"): - member = "as_async."+member - elif member.startswith("nb_"): - member = "as_number."+member - elif member.startswith("mp_"): - member = "as_mapping."+member - elif member.startswith("sq_"): - member = "as_sequence."+member - elif member.startswith("bf_"): - member = "as_buffer."+member - res[int(m.group(2))] = member +def generate_typeslots(out=sys.stdout): + out.write("/* Generated by typeslots.py */\n") + res = {} + for line in sys.stdin: + m = re.match("#define Py_([a-z_]+) ([0-9]+)", line) + if not m: + continue + member = m.group(1) + if member.startswith("tp_"): + member = "ht_type."+member + elif member.startswith("am_"): + member = "as_async."+member + elif member.startswith("nb_"): + member = "as_number."+member + elif member.startswith("mp_"): + member = "as_mapping."+member + elif member.startswith("sq_"): + member = "as_sequence."+member + elif member.startswith("bf_"): + member = "as_buffer."+member + res[int(m.group(2))] = member -M = max(res.keys())+1 -for i in range(1,M): - if i in res: - print("offsetof(PyHeapTypeObject, %s)," % res[i]) + M = max(res.keys())+1 + for i in range(1,M): + if i in res: + out.write("offsetof(PyHeapTypeObject, %s),\n" % res[i]) + else: + out.write("0,\n") + +def main(): + if len(sys.argv) == 2: + with open(sys.argv[1], "w") as f: + generate_typeslots(f) else: - print("0,") + generate_typeslots() + +if __name__ == "__main__": + main() diff --git a/configure b/configure --- a/configure +++ b/configure @@ -680,9 +680,6 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM -OPCODEHGEN -PYTHON -ASDLGEN ac_ct_READELF READELF ARFLAGS @@ -743,6 +740,7 @@ SOVERSION VERSION PYTHON_FOR_BUILD +PYTHON_FOR_GEN host_os host_vendor host_cpu @@ -776,7 +774,6 @@ docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -887,7 +884,6 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1140,15 +1136,6 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1286,7 +1273,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1439,7 +1426,6 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -2995,6 +2981,56 @@ # pybuilddir.txt will be created by --generate-posix-vars in the Makefile rm -f pybuilddir.txt +for ac_prog in python$PACKAGE_VERSION python3 python +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PYTHON_FOR_GEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_FOR_GEN"; then + ac_cv_prog_PYTHON_FOR_GEN="$PYTHON_FOR_GEN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PYTHON_FOR_GEN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON_FOR_GEN=$ac_cv_prog_PYTHON_FOR_GEN +if test -n "$PYTHON_FOR_GEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_GEN" >&5 +$as_echo "$PYTHON_FOR_GEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON_FOR_GEN" && break +done +test -n "$PYTHON_FOR_GEN" || PYTHON_FOR_GEN="not-found" + +if test "$PYTHON_FOR_GEN" = not-found; then + PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \ + echo "To skip re-generation of $@ run or ." && \ + echo "Otherwise, set python in PATH and run configure or run ." && false &&' +fi + + if test "$cross_compiling" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5 $as_echo_n "checking for python interpreter for cross build... " >&6; } @@ -6295,107 +6331,6 @@ -for ac_prog in python$PACKAGE_VERSION python3 python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PYTHON"; then - ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PYTHON=$ac_cv_prog_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PYTHON" && break -done -test -n "$PYTHON" || PYTHON="not-found" - -if test "$PYTHON" = not-found; then - ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #" -else - ASDLGEN="$PYTHON" -fi - - -for ac_prog in python$PACKAGE_VERSION python3 python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PYTHON"; then - ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PYTHON=$ac_cv_prog_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PYTHON" && break -done -test -n "$PYTHON" || PYTHON="not-found" - -if test "$PYTHON" = not-found; then - OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py" -else - OPCODEHGEN="$PYTHON" -fi - - - case $MACHDEP in bsdos*|hp*|HP*) # install -d does not work on BSDI or HP-UX diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -57,6 +57,14 @@ # pybuilddir.txt will be created by --generate-posix-vars in the Makefile rm -f pybuilddir.txt +AC_CHECK_PROGS(PYTHON_FOR_GEN, python$PACKAGE_VERSION python3 python, not-found) +if test "$PYTHON_FOR_GEN" = not-found; then + PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \ + echo "To skip re-generation of $@ run or ." && \ + echo "Otherwise, set python in PATH and run configure or run ." && false &&' +fi +AC_SUBST(PYTHON_FOR_GEN) + if test "$cross_compiling" = yes; then AC_MSG_CHECKING([for python interpreter for cross build]) if test -z "$PYTHON_FOR_BUILD"; then @@ -1178,23 +1186,6 @@ fi AC_SUBST(READELF) -AC_SUBST(ASDLGEN) -AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found) -if test "$PYTHON" = not-found; then - ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #" -else - ASDLGEN="$PYTHON" -fi - -AC_SUBST(OPCODEHGEN) -AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found) -if test "$PYTHON" = not-found; then - OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py" -else - OPCODEHGEN="$PYTHON" -fi - - case $MACHDEP in bsdos*|hp*|HP*) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Tue Jul 26 06:56:32 2016 From: python-checkins at python.org (xavier.degaye) Date: Tue, 26 Jul 2016 10:56:32 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_=28merge_from_3=2E5=29_Issue_=2326662=3A_Set_PYTHON=5FFO?= =?utf-8?q?R=5FGEN_in_configure?= Message-ID: <20160726105631.24547.46867.E747207E@psf.io> https://hg.python.org/cpython/rev/a290f992e69a changeset: 102456:a290f992e69a parent: 102454:d7cbaaba59e8 parent: 102455:5aff28f33b2a user: Xavier de Gaye date: Tue Jul 26 12:55:20 2016 +0200 summary: (merge from 3.5) Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be used for file generation during the build. files: Makefile.pre.in | 9 +- Misc/NEWS | 6 + Objects/typeslots.py | 63 ++++++---- configure | 169 +++++++++--------------------- configure.ac | 25 +--- 5 files changed, 108 insertions(+), 164 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -223,6 +223,7 @@ BUILDPYTHON= python$(BUILDEXE) cross_compiling=@cross_compiling@ +PYTHON_FOR_GEN=@PYTHON_FOR_GEN@ PYTHON_FOR_BUILD=@PYTHON_FOR_BUILD@ _PYTHON_HOST_PLATFORM=@_PYTHON_HOST_PLATFORM@ BUILD_GNU_TYPE= @build@ @@ -340,7 +341,7 @@ OPCODE_H_DIR= $(srcdir)/Include OPCODE_H_SCRIPT= $(srcdir)/Tools/scripts/generate_opcode_h.py OPCODE_H= $(OPCODE_H_DIR)/opcode.h -OPCODE_H_GEN= @OPCODEHGEN@ $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H) +OPCODE_H_GEN= $(PYTHON_FOR_GEN) $(OPCODE_H_SCRIPT) $(srcdir)/Lib/opcode.py $(OPCODE_H) # ########################################################################## # AST @@ -353,7 +354,7 @@ ASDLGEN_FILES= $(srcdir)/Parser/asdl.py $(srcdir)/Parser/asdl_c.py # Note that a build now requires Python to exist before the build starts. # Use "hg touch" to fix up screwed up file mtimes in a checkout. -ASDLGEN= @ASDLGEN@ $(srcdir)/Parser/asdl_c.py +ASDLGEN= $(PYTHON_FOR_GEN) $(srcdir)/Parser/asdl_c.py ########################################################################## # Python @@ -882,7 +883,7 @@ Objects/setobject.o: $(srcdir)/Objects/stringlib/eq.h $(OPCODETARGETS_H): $(OPCODETARGETGEN_FILES) - $(OPCODETARGETGEN) $(OPCODETARGETS_H) + $(PYTHON_FOR_GEN) $(OPCODETARGETGEN) $(OPCODETARGETS_H) Python/ceval.o: $(OPCODETARGETS_H) $(srcdir)/Python/ceval_gil.h @@ -890,7 +891,7 @@ Objects/typeobject.o: Objects/typeslots.inc Objects/typeslots.inc: $(srcdir)/Include/typeslots.h $(srcdir)/Objects/typeslots.py - $(PYTHON) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h > Objects/typeslots.inc + $(PYTHON_FOR_GEN) $(srcdir)/Objects/typeslots.py < $(srcdir)/Include/typeslots.h Objects/typeslots.inc ############################################################################ # Header files diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -77,6 +77,12 @@ - Issue #27309: Enables proper Windows styles in python[w].exe manifest. +Build +----- + +- Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be + used for file generation during the build. + What's New in Python 3.6.0 alpha 3 ================================== diff --git a/Objects/typeslots.py b/Objects/typeslots.py --- a/Objects/typeslots.py +++ b/Objects/typeslots.py @@ -1,32 +1,43 @@ #!/usr/bin/python -# Usage: typeslots.py < Include/typeslots.h > typeslots.inc +# Usage: typeslots.py < Include/typeslots.h typeslots.inc import sys, re -print("/* Generated by typeslots.py */") -res = {} -for line in sys.stdin: - m = re.match("#define Py_([a-z_]+) ([0-9]+)", line) - if not m: - continue - member = m.group(1) - if member.startswith("tp_"): - member = "ht_type."+member - elif member.startswith("am_"): - member = "as_async."+member - elif member.startswith("nb_"): - member = "as_number."+member - elif member.startswith("mp_"): - member = "as_mapping."+member - elif member.startswith("sq_"): - member = "as_sequence."+member - elif member.startswith("bf_"): - member = "as_buffer."+member - res[int(m.group(2))] = member +def generate_typeslots(out=sys.stdout): + out.write("/* Generated by typeslots.py */\n") + res = {} + for line in sys.stdin: + m = re.match("#define Py_([a-z_]+) ([0-9]+)", line) + if not m: + continue + member = m.group(1) + if member.startswith("tp_"): + member = "ht_type."+member + elif member.startswith("am_"): + member = "as_async."+member + elif member.startswith("nb_"): + member = "as_number."+member + elif member.startswith("mp_"): + member = "as_mapping."+member + elif member.startswith("sq_"): + member = "as_sequence."+member + elif member.startswith("bf_"): + member = "as_buffer."+member + res[int(m.group(2))] = member -M = max(res.keys())+1 -for i in range(1,M): - if i in res: - print("offsetof(PyHeapTypeObject, %s)," % res[i]) + M = max(res.keys())+1 + for i in range(1,M): + if i in res: + out.write("offsetof(PyHeapTypeObject, %s),\n" % res[i]) + else: + out.write("0,\n") + +def main(): + if len(sys.argv) == 2: + with open(sys.argv[1], "w") as f: + generate_typeslots(f) else: - print("0,") + generate_typeslots() + +if __name__ == "__main__": + main() diff --git a/configure b/configure --- a/configure +++ b/configure @@ -680,9 +680,6 @@ INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM -OPCODEHGEN -PYTHON -ASDLGEN ac_ct_READELF READELF ARFLAGS @@ -744,6 +741,7 @@ SOVERSION VERSION PYTHON_FOR_BUILD +PYTHON_FOR_GEN host_os host_vendor host_cpu @@ -777,7 +775,6 @@ docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -888,7 +885,6 @@ sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1141,15 +1137,6 @@ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1287,7 +1274,7 @@ for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1440,7 +1427,6 @@ --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -2996,6 +2982,56 @@ # pybuilddir.txt will be created by --generate-posix-vars in the Makefile rm -f pybuilddir.txt +for ac_prog in python$PACKAGE_VERSION python3 python +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_PYTHON_FOR_GEN+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_FOR_GEN"; then + ac_cv_prog_PYTHON_FOR_GEN="$PYTHON_FOR_GEN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_PYTHON_FOR_GEN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON_FOR_GEN=$ac_cv_prog_PYTHON_FOR_GEN +if test -n "$PYTHON_FOR_GEN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_FOR_GEN" >&5 +$as_echo "$PYTHON_FOR_GEN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON_FOR_GEN" && break +done +test -n "$PYTHON_FOR_GEN" || PYTHON_FOR_GEN="not-found" + +if test "$PYTHON_FOR_GEN" = not-found; then + PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \ + echo "To skip re-generation of $@ run or ." && \ + echo "Otherwise, set python in PATH and run configure or run ." && false &&' +fi + + if test "$cross_compiling" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for python interpreter for cross build" >&5 $as_echo_n "checking for python interpreter for cross build... " >&6; } @@ -6329,107 +6365,6 @@ -for ac_prog in python$PACKAGE_VERSION python3 python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PYTHON"; then - ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PYTHON=$ac_cv_prog_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PYTHON" && break -done -test -n "$PYTHON" || PYTHON="not-found" - -if test "$PYTHON" = not-found; then - ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #" -else - ASDLGEN="$PYTHON" -fi - - -for ac_prog in python$PACKAGE_VERSION python3 python -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_PYTHON+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PYTHON"; then - ac_cv_prog_PYTHON="$PYTHON" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_PYTHON="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PYTHON=$ac_cv_prog_PYTHON -if test -n "$PYTHON"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 -$as_echo "$PYTHON" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PYTHON" && break -done -test -n "$PYTHON" || PYTHON="not-found" - -if test "$PYTHON" = not-found; then - OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py" -else - OPCODEHGEN="$PYTHON" -fi - - - case $MACHDEP in bsdos*|hp*|HP*) # install -d does not work on BSDI or HP-UX diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -57,6 +57,14 @@ # pybuilddir.txt will be created by --generate-posix-vars in the Makefile rm -f pybuilddir.txt +AC_CHECK_PROGS(PYTHON_FOR_GEN, python$PACKAGE_VERSION python3 python, not-found) +if test "$PYTHON_FOR_GEN" = not-found; then + PYTHON_FOR_GEN='@echo "Cannot generate $@, python not found !" && \ + echo "To skip re-generation of $@ run or ." && \ + echo "Otherwise, set python in PATH and run configure or run ." && false &&' +fi +AC_SUBST(PYTHON_FOR_GEN) + if test "$cross_compiling" = yes; then AC_MSG_CHECKING([for python interpreter for cross build]) if test -z "$PYTHON_FOR_BUILD"; then @@ -1204,23 +1212,6 @@ fi AC_SUBST(READELF) -AC_SUBST(ASDLGEN) -AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found) -if test "$PYTHON" = not-found; then - ASDLGEN="@echo python: $PYTHON! cannot run \$(srcdir)/Parser/asdl_c.py #" -else - ASDLGEN="$PYTHON" -fi - -AC_SUBST(OPCODEHGEN) -AC_CHECK_PROGS(PYTHON, python$PACKAGE_VERSION python3 python, not-found) -if test "$PYTHON" = not-found; then - OPCODEHGEN="@echo python: $PYTHON! cannot run Tools/scripts/generate_opcode_h.py" -else - OPCODEHGEN="$PYTHON" -fi - - case $MACHDEP in bsdos*|hp*|HP*) -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Tue Jul 26 09:08:41 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 26 Jul 2016 14:08:41 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-26 Message-ID: <60540251-526e-4c85-83d9-355637a87291@irsmsx105.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-26 02:49:00 +0000 commit: 55b6e51b878b previous commit: 2192edcfea02 revision date: 2016-07-25 02:30:05 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.16% 0.71% 4.96% 2.75% :-) pybench 0.20% -0.10% 5.73% 4.33% :-( regex_v8 0.63% -0.20% -2.39% 10.16% :-) nbody 0.29% 0.36% 8.61% 3.92% :-| json_dump_v2 0.29% 0.40% 1.54% 12.22% :-( normal_startup 1.91% -0.06% -5.78% 1.27% :-) ssbench 0.17% -0.18% 2.44% 1.42% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-26/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Tue Jul 26 09:08:06 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Tue, 26 Jul 2016 14:08:06 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python Default 2016-07-26 Message-ID: <78f937f8-ed8d-4730-8e1a-4c9bed655f97@irsmsx105.ger.corp.intel.com> Results for project Python default, build date 2016-07-26 02:03:08 +0000 commit: 352fc11b9fd2 previous commit: 06bbcbaeeb18 revision date: 2016-07-26 00:58:43 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 1.01% -2.00% 8.33% 18.58% :-| pybench 0.09% 0.08% 1.85% 7.95% :-( regex_v8 2.62% -0.11% -3.24% 4.45% :-| nbody 0.24% -0.30% -1.76% 10.68% :-| json_dump_v2 0.34% 0.26% -1.93% 12.14% :-| normal_startup 0.85% 0.14% 0.36% 5.52% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-default-2016-07-26/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Tue Jul 26 12:23:20 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Tue, 26 Jul 2016 16:23:20 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2324773=3A_Fixed_te?= =?utf-8?q?sts_failures_on_systems_with_32-bit_time=5Ft=2E?= Message-ID: <20160726162318.41628.46227.F8AE3B67@psf.io> https://hg.python.org/cpython/rev/95df96aa2f5a changeset: 102457:95df96aa2f5a user: Alexander Belopolsky date: Tue Jul 26 12:23:16 2016 -0400 summary: Issue #24773: Fixed tests failures on systems with 32-bit time_t. Several 32-bit systems have issues with transitions in the year 2037. This is a bug in the system C library since time_t does not overflow until 2038, but let's skip tests starting from 2037 to work around those bugs. files: Lib/test/datetimetester.py | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -15,6 +15,7 @@ import random import struct import unittest +import sysconfig from array import array @@ -4675,6 +4676,7 @@ zonename = 'America/New_York' def setUp(self): + self.sizeof_time_t = sysconfig.get_config_var('SIZEOF_TIME_T') if sys.platform == "win32": self.skipTest("Skipping zoneinfo tests on Windows") try: @@ -4750,6 +4752,9 @@ if self.zonename == 'Europe/Tallinn' and udt.date() == date(1999, 10, 31): print("Skip %s %s transition" % (self.zonename, udt)) continue + if self.sizeof_time_t == 4 and udt.year >= 2037: + print("Skip %s %s transition for 32-bit time_t" % (self.zonename, udt)) + continue s0 = (udt - datetime(1970, 1, 1)) // SEC ss = shift // SEC # shift seconds for x in [-40 * 3600, -20*3600, -1, 0, -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 00:47:21 2016 From: python-checkins at python.org (senthil.kumaran) Date: Wed, 27 Jul 2016 04:47:21 +0000 Subject: [Python-checkins] =?utf-8?q?test=3A_Test_Push?= Message-ID: <20160727044721.18174.63233.A536E409@psf.io> https://hg.python.org/test/rev/551659412af9 changeset: 234:551659412af9 user: Senthil Kumaran date: Tue Jul 26 21:47:18 2016 -0700 summary: Test Push files: README.txt | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/README.txt b/README.txt --- a/README.txt +++ b/README.txt @@ -2,5 +2,5 @@ https://docs.python.org/devguide/coredev.html - Update and Test. +Test Update. -- Repository URL: https://hg.python.org/test From python-checkins at python.org Wed Jul 27 06:33:11 2016 From: python-checkins at python.org (berker.peksag) Date: Wed, 27 Jul 2016 10:33:11 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327633=3A_Merge_from_3=2E5?= Message-ID: <20160727103308.41540.42194.4D8C2214@psf.io> https://hg.python.org/cpython/rev/8224ad99842e changeset: 102459:8224ad99842e parent: 102457:95df96aa2f5a parent: 102458:3f2e37e705d3 user: Berker Peksag date: Wed Jul 27 13:33:28 2016 +0300 summary: Issue #27633: Merge from 3.5 files: Doc/library/email.parser.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/email.parser.rst b/Doc/library/email.parser.rst --- a/Doc/library/email.parser.rst +++ b/Doc/library/email.parser.rst @@ -250,7 +250,7 @@ and *policy* are interpreted as with the :class:`~email.parser.Parser` class constructor. - .. versionchanged:: + .. versionchanged:: 3.3 Removed the *strict* argument. Added the *policy* keyword. .. function:: message_from_binary_file(fp, _class=email.message.Message, *, \ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 06:33:27 2016 From: python-checkins at python.org (berker.peksag) Date: Wed, 27 Jul 2016 10:33:27 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NjMz?= =?utf-8?q?=3A_Fix_usage_of_versionchanged_directive_in_email=2Eparser=2Er?= =?utf-8?q?st?= Message-ID: <20160727103308.21229.97708.588CFFD0@psf.io> https://hg.python.org/cpython/rev/3f2e37e705d3 changeset: 102458:3f2e37e705d3 branch: 3.5 parent: 102455:5aff28f33b2a user: Berker Peksag date: Wed Jul 27 13:32:54 2016 +0300 summary: Issue #27633: Fix usage of versionchanged directive in email.parser.rst Patch by Florian Preinstorfer. files: Doc/library/email.parser.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/email.parser.rst b/Doc/library/email.parser.rst --- a/Doc/library/email.parser.rst +++ b/Doc/library/email.parser.rst @@ -250,7 +250,7 @@ and *policy* are interpreted as with the :class:`~email.parser.Parser` class constructor. - .. versionchanged:: + .. versionchanged:: 3.3 Removed the *strict* argument. Added the *policy* keyword. .. function:: message_from_binary_file(fp, _class=email.message.Message, *, \ -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Wed Jul 27 09:19:32 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 27 Jul 2016 14:19:32 +0100 Subject: [Python-checkins] GOOD Benchmark Results for Python Default 2016-07-27 Message-ID: Results for project Python default, build date 2016-07-27 02:01:42 +0000 commit: 95df96aa2f5a previous commit: 352fc11b9fd2 revision date: 2016-07-26 16:23:16 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.74% 2.17% 10.32% 14.77% :-| pybench 0.14% 0.02% 1.86% 6.97% :-( regex_v8 2.60% 0.36% -2.87% 3.78% :-| nbody 0.22% -0.22% -1.98% 6.79% :-| json_dump_v2 0.32% 0.32% -1.61% 10.63% :-| normal_startup 0.74% 0.07% 0.15% 5.36% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/good-benchmark-results-for-python-default-2016-07-27/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Wed Jul 27 09:20:51 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Wed, 27 Jul 2016 14:20:51 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python 2.7 2016-07-27 Message-ID: No new revisions. Here are the previous results: Results for project Python 2.7, build date 2016-07-27 02:47:42 +0000 commit: 55b6e51b878b previous commit: 2192edcfea02 revision date: 2016-07-25 02:30:05 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.16% 0.71% 4.96% 2.75% :-) pybench 0.20% -0.10% 5.73% 4.33% :-( regex_v8 0.63% -0.20% -2.39% 10.16% :-) nbody 0.29% 0.36% 8.61% 3.92% :-| json_dump_v2 0.29% 0.40% 1.54% 12.22% :-( normal_startup 1.91% -0.06% -5.78% 1.27% :-) ssbench 0.17% -0.18% 2.44% 1.42% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-2-7-2016-07-27/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Wed Jul 27 11:00:40 2016 From: python-checkins at python.org (victor.stinner) Date: Wed, 27 Jul 2016 15:00:40 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogTWVyZ2UgMy41IChpc3N1ZSAjMTEwNDgp?= Message-ID: <20160727150039.24839.32224.BB13280C@psf.io> https://hg.python.org/cpython/rev/da9898e7e90d changeset: 102461:da9898e7e90d parent: 102459:8224ad99842e parent: 102460:ab4975520c7d user: Victor Stinner date: Wed Jul 27 16:59:22 2016 +0200 summary: Merge 3.5 (issue #11048) files: Modules/_ctypes/callbacks.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -305,7 +305,7 @@ static CThunkObject* CThunkObject_new(Py_ssize_t nArgs) { CThunkObject *p; - int i; + Py_ssize_t i; p = PyObject_GC_NewVar(CThunkObject, &PyCThunk_Type, nArgs); if (p == NULL) { @@ -313,11 +313,13 @@ return NULL; } + p->pcl_write = NULL; p->pcl_exec = NULL; - p->pcl_write = NULL; memset(&p->cif, 0, sizeof(p->cif)); + p->flags = 0; p->converters = NULL; p->callable = NULL; + p->restype = NULL; p->setfunc = NULL; p->ffi_restype = NULL; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 11:00:40 2016 From: python-checkins at python.org (victor.stinner) Date: Wed, 27 Jul 2016 15:00:40 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogY3R5cGVzOiBmaXgg?= =?utf-8?q?CThunkObject=5Fnew=28=29?= Message-ID: <20160727150039.24233.78906.37ED0D21@psf.io> https://hg.python.org/cpython/rev/7d692840c152 changeset: 102462:7d692840c152 branch: 2.7 parent: 102449:55b6e51b878b user: Victor Stinner date: Wed Jul 27 16:58:47 2016 +0200 summary: ctypes: fix CThunkObject_new() * Initialize restype and flags fields to fix a crash when Python runs on a read-only file system * Use Py_ssize_t type rather than int for the "i" iterator variable * Reorder assignements to be able to more easily check if all fields are initialized Issue #11048. Initial patch written by Marcin Bachry. files: Modules/_ctypes/callbacks.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -385,7 +385,7 @@ static CThunkObject* CThunkObject_new(Py_ssize_t nArgs) { CThunkObject *p; - int i; + Py_ssize_t i; p = PyObject_GC_NewVar(CThunkObject, &PyCThunk_Type, nArgs); if (p == NULL) { @@ -393,11 +393,13 @@ return NULL; } + p->pcl_write = NULL; p->pcl_exec = NULL; - p->pcl_write = NULL; memset(&p->cif, 0, sizeof(p->cif)); + p->flags = 0; p->converters = NULL; p->callable = NULL; + p->restype = NULL; p->setfunc = NULL; p->ffi_restype = NULL; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 11:00:41 2016 From: python-checkins at python.org (victor.stinner) Date: Wed, 27 Jul 2016 15:00:41 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogY3R5cGVzOiBmaXgg?= =?utf-8?q?CThunkObject=5Fnew=28=29?= Message-ID: <20160727150039.17902.51328.37C4455D@psf.io> https://hg.python.org/cpython/rev/ab4975520c7d changeset: 102460:ab4975520c7d branch: 3.5 parent: 102458:3f2e37e705d3 user: Victor Stinner date: Wed Jul 27 16:58:47 2016 +0200 summary: ctypes: fix CThunkObject_new() * Initialize restype and flags fields to fix a crash when Python runs on a read-only file system * Use Py_ssize_t type rather than int for the "i" iterator variable * Reorder assignements to be able to more easily check if all fields are initialized Issue #11048. Initial patch written by Marcin Bachry. files: Modules/_ctypes/callbacks.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/Modules/_ctypes/callbacks.c b/Modules/_ctypes/callbacks.c --- a/Modules/_ctypes/callbacks.c +++ b/Modules/_ctypes/callbacks.c @@ -305,7 +305,7 @@ static CThunkObject* CThunkObject_new(Py_ssize_t nArgs) { CThunkObject *p; - int i; + Py_ssize_t i; p = PyObject_GC_NewVar(CThunkObject, &PyCThunk_Type, nArgs); if (p == NULL) { @@ -313,11 +313,13 @@ return NULL; } + p->pcl_write = NULL; p->pcl_exec = NULL; - p->pcl_write = NULL; memset(&p->cif, 0, sizeof(p->cif)); + p->flags = 0; p->converters = NULL; p->callable = NULL; + p->restype = NULL; p->setfunc = NULL; p->ffi_restype = NULL; -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 21:33:47 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 01:33:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327490=3A_Merge_pgen_cross-compile_logic_from_3?= =?utf-8?q?=2E5?= Message-ID: <20160728013347.10888.57947.2B29ED09@psf.io> https://hg.python.org/cpython/rev/98df00834c58 changeset: 102465:98df00834c58 parent: 102461:da9898e7e90d parent: 102463:c6476003e67f user: Martin Panter date: Thu Jul 28 01:30:06 2016 +0000 summary: Issue #27490: Merge pgen cross-compile logic from 3.5 files: Makefile.pre.in | 2 +- Misc/ACKS | 1 + Misc/NEWS | 3 +++ configure | 6 +++++- configure.ac | 3 +++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -791,7 +791,7 @@ $(IO_OBJS): $(IO_H) -$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN) +$(GRAMMAR_H): $(GRAMMAR_INPUT) @PGEN_DEPENDENCY@ @$(MKDIR_P) Include # Avoid copying the file onto itself for an in-tree build if test "$(cross_compiling)" != "yes"; then \ diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1131,6 +1131,7 @@ Bo Peng Santiago Peres?n George Peristerakis +Thomas Perl Mathieu Perreault Mark Perrego Trevor Perrin diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -80,6 +80,9 @@ Build ----- +- Issue #27490: Do not build pgen when cross-compiling. Patch by Thomas + Perl. + - Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be used for file generation during the build. diff --git a/configure b/configure --- a/configure +++ b/configure @@ -740,6 +740,7 @@ CONFIG_ARGS SOVERSION VERSION +PGEN_DEPENDENCY PYTHON_FOR_BUILD PYTHON_FOR_GEN host_os @@ -3050,11 +3051,14 @@ $as_echo "$interp" >&6; } PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + PGEN_DEPENDENCY='' elif test "$cross_compiling" = maybe; then as_fn_error $? "Cross compiling required --host=HOST-TUPLE and --build=ARCH" "$LINENO" 5 else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' -fi + PGEN_DEPENDENCY='$(PGEN)' +fi + diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -81,12 +81,15 @@ AC_MSG_RESULT($interp) PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + PGEN_DEPENDENCY='' elif test "$cross_compiling" = maybe; then AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH]) else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' + PGEN_DEPENDENCY='$(PGEN)' fi AC_SUBST(PYTHON_FOR_BUILD) +AC_SUBST(PGEN_DEPENDENCY) dnl Ensure that if prefix is specified, it does not end in a slash. If dnl it does, we get path names containing '//' which is both ugly and -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 21:33:46 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 01:33:46 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDkw?= =?utf-8?q?=3A_Do_not_build_pgen_when_cross-compiling?= Message-ID: <20160728013346.21198.72903.EA0FA9B5@psf.io> https://hg.python.org/cpython/rev/c6476003e67f changeset: 102463:c6476003e67f branch: 3.5 parent: 102460:ab4975520c7d user: Martin Panter date: Thu Jul 28 01:28:27 2016 +0000 summary: Issue #27490: Do not build pgen when cross-compiling The dependendency on the $(PGEN) variable must only be set when not cross-compiling. When cross-compiling, $(PGEN) will not be used, so no need to build it. Patch by Thomas Perl. files: Makefile.pre.in | 2 +- Misc/ACKS | 1 + Misc/NEWS | 3 +++ configure | 6 +++++- configure.ac | 3 +++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -789,7 +789,7 @@ $(IO_OBJS): $(IO_H) -$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN) +$(GRAMMAR_H): $(GRAMMAR_INPUT) @PGEN_DEPENDENCY@ @$(MKDIR_P) Include # Avoid copying the file onto itself for an in-tree build if test "$(cross_compiling)" != "yes"; then \ diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1120,6 +1120,7 @@ Bo Peng Santiago Peres?n George Peristerakis +Thomas Perl Mathieu Perreault Mark Perrego Trevor Perrin diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -145,6 +145,9 @@ Build ----- +- Issue #27490: Do not build pgen when cross-compiling. Patch by Thomas + Perl. + - Issue #26662: Set PYTHON_FOR_GEN in configure as the Python program to be used for file generation during the build. diff --git a/configure b/configure --- a/configure +++ b/configure @@ -739,6 +739,7 @@ CONFIG_ARGS SOVERSION VERSION +PGEN_DEPENDENCY PYTHON_FOR_BUILD PYTHON_FOR_GEN host_os @@ -3049,11 +3050,14 @@ $as_echo "$interp" >&6; } PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + PGEN_DEPENDENCY='' elif test "$cross_compiling" = maybe; then as_fn_error $? "Cross compiling required --host=HOST-TUPLE and --build=ARCH" "$LINENO" 5 else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' -fi + PGEN_DEPENDENCY='$(PGEN)' +fi + diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -81,12 +81,15 @@ AC_MSG_RESULT($interp) PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + PGEN_DEPENDENCY='' elif test "$cross_compiling" = maybe; then AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH]) else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' + PGEN_DEPENDENCY='$(PGEN)' fi AC_SUBST(PYTHON_FOR_BUILD) +AC_SUBST(PGEN_DEPENDENCY) dnl Ensure that if prefix is specified, it does not end in a slash. If dnl it does, we get path names containing '//' which is both ugly and -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 21:33:47 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 01:33:47 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NjI2?= =?utf-8?q?=3A_Spelling_fixes_in_docs=2C_comments_and_internal_names?= Message-ID: <20160728013347.21144.57631.C27735C8@psf.io> https://hg.python.org/cpython/rev/6080d720cbf5 changeset: 102464:6080d720cbf5 branch: 3.5 user: Martin Panter date: Thu Jul 28 01:11:04 2016 +0000 summary: Issue #27626: Spelling fixes in docs, comments and internal names Based on patch by Ville Skytt?. files: Doc/howto/clinic.rst | 2 +- Doc/howto/sockets.rst | 2 +- Doc/library/configparser.rst | 2 +- Doc/library/importlib.rst | 2 +- Doc/library/os.rst | 2 +- Doc/library/socket.rst | 2 +- Include/longobject.h | 2 +- Lib/ctypes/test/test_numbers.py | 2 +- Lib/ctypes/test/test_structures.py | 2 +- Lib/datetime.py | 2 +- Lib/idlelib/CallTipWindow.py | 2 +- Lib/idlelib/ParenMatch.py | 2 +- Lib/platform.py | 2 +- Lib/shutil.py | 2 +- Lib/test/eintrdata/eintr_tester.py | 2 +- Lib/test/test_collections.py | 2 +- Lib/test/test_deque.py | 2 +- Lib/test/test_enum.py | 20 +++++++++--------- Lib/test/test_http_cookiejar.py | 2 +- Lib/test/test_math.py | 4 +- Lib/test/test_nntplib.py | 4 +- Lib/test/test_shutil.py | 2 +- Lib/test/test_structseq.py | 2 +- Lib/test/test_subprocess.py | 2 +- Lib/unittest/case.py | 4 +- Misc/NEWS | 2 +- Modules/_ctypes/_ctypes.c | 2 +- Modules/itertoolsmodule.c | 2 +- Objects/exceptions.c | 6 ++-- Objects/longobject.c | 4 +- Tools/clinic/clinic_test.py | 2 +- Tools/demo/redemo.py | 2 +- Tools/freeze/freeze.py | 2 +- 33 files changed, 48 insertions(+), 48 deletions(-) diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst --- a/Doc/howto/clinic.rst +++ b/Doc/howto/clinic.rst @@ -1583,7 +1583,7 @@ preserve -This tells Clinic that the current contents of the output should be kept, unmodifed. +This tells Clinic that the current contents of the output should be kept, unmodified. This is used internally by Clinic when dumping output into ``file`` files; wrapping it in a Clinic block lets Clinic use its existing checksum functionality to ensure the file was not modified by hand before it gets overwritten. diff --git a/Doc/howto/sockets.rst b/Doc/howto/sockets.rst --- a/Doc/howto/sockets.rst +++ b/Doc/howto/sockets.rst @@ -106,7 +106,7 @@ There's actually 3 general ways in which this loop could work - dispatching a thread to handle ``clientsocket``, create a new process to handle ``clientsocket``, or restructure this app to use non-blocking sockets, and -mulitplex between our "server" socket and any active ``clientsocket``\ s using +multiplex between our "server" socket and any active ``clientsocket``\ s using ``select``. More about that later. The important thing to understand now is this: this is *all* a "server" socket does. It doesn't send any data. It doesn't receive any data. It just produces "client" sockets. Each ``clientsocket`` is diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -66,7 +66,7 @@ <#supported-ini-file-structure>`_. Essentially, the file consists of sections, each of which contains keys with values. :mod:`configparser` classes can read and write such files. Let's start by -creating the above configuration file programatically. +creating the above configuration file programmatically. .. doctest:: diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -629,7 +629,7 @@ .. method:: path_stats(path) Optional abstract method which returns a :class:`dict` containing - metadata about the specifed path. Supported dictionary keys are: + metadata about the specified path. Supported dictionary keys are: - ``'mtime'`` (mandatory): an integer or floating-point number representing the modification time of the source code; diff --git a/Doc/library/os.rst b/Doc/library/os.rst --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -1900,7 +1900,7 @@ On Unix, *path* can be of type :class:`str` or :class:`bytes` (use :func:`~os.fsencode` and :func:`~os.fsdecode` to encode and decode :class:`bytes` paths). On Windows, *path* must be of type :class:`str`. - On both sytems, the type of the :attr:`~DirEntry.name` and + On both systems, the type of the :attr:`~DirEntry.name` and :attr:`~DirEntry.path` attributes of each :class:`DirEntry` will be of the same type as *path*. diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -1211,7 +1211,7 @@ much data, if any, was successfully sent. .. versionchanged:: 3.5 - The socket timeout is no more reset each time data is sent successfuly. + The socket timeout is no more reset each time data is sent successfully. The socket timeout is now the maximum total duration to send all data. .. versionchanged:: 3.5 diff --git a/Include/longobject.h b/Include/longobject.h --- a/Include/longobject.h +++ b/Include/longobject.h @@ -159,7 +159,7 @@ example, if is_signed is 0 and there are more digits in the v than fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of being large enough to hold a sign bit. OverflowError is set in this - case, but bytes holds the least-signficant n bytes of the true value. + case, but bytes holds the least-significant n bytes of the true value. */ PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, unsigned char* bytes, size_t n, diff --git a/Lib/ctypes/test/test_numbers.py b/Lib/ctypes/test/test_numbers.py --- a/Lib/ctypes/test/test_numbers.py +++ b/Lib/ctypes/test/test_numbers.py @@ -76,7 +76,7 @@ self.assertEqual(t(v).value, truth(v)) def test_typeerror(self): - # Only numbers are allowed in the contructor, + # Only numbers are allowed in the constructor, # otherwise TypeError is raised for t in signed_types + unsigned_types + float_types: self.assertRaises(TypeError, t, "") diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -106,7 +106,7 @@ self.assertEqual(alignment(XX), alignment(X)) self.assertEqual(sizeof(XX), calcsize("3s 3s 0s")) - def test_emtpy(self): + def test_empty(self): # I had problems with these # # Although these are pathological cases: Empty Structures! diff --git a/Lib/datetime.py b/Lib/datetime.py --- a/Lib/datetime.py +++ b/Lib/datetime.py @@ -706,7 +706,7 @@ @classmethod def fromordinal(cls, n): - """Contruct a date from a proleptic Gregorian ordinal. + """Construct a date from a proleptic Gregorian ordinal. January 1 of year 1 is day 1. Only the year, month and day are non-zero in the result. diff --git a/Lib/idlelib/CallTipWindow.py b/Lib/idlelib/CallTipWindow.py --- a/Lib/idlelib/CallTipWindow.py +++ b/Lib/idlelib/CallTipWindow.py @@ -9,7 +9,7 @@ HIDE_SEQUENCES = ("", "") CHECKHIDE_VIRTUAL_EVENT_NAME = "<>" CHECKHIDE_SEQUENCES = ("", "") -CHECKHIDE_TIME = 100 # miliseconds +CHECKHIDE_TIME = 100 # milliseconds MARK_RIGHT = "calltipwindowregion_right" diff --git a/Lib/idlelib/ParenMatch.py b/Lib/idlelib/ParenMatch.py --- a/Lib/idlelib/ParenMatch.py +++ b/Lib/idlelib/ParenMatch.py @@ -9,7 +9,7 @@ from idlelib.configHandler import idleConf _openers = {')':'(',']':'[','}':'{'} -CHECK_DELAY = 100 # miliseconds +CHECK_DELAY = 100 # milliseconds class ParenMatch: """Highlight matching parentheses diff --git a/Lib/platform.py b/Lib/platform.py --- a/Lib/platform.py +++ b/Lib/platform.py @@ -61,7 +61,7 @@ # though # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all # return values (the system uname command tends to return -# 'unknown' instead of just leaving the field emtpy) +# 'unknown' instead of just leaving the field empty) # 0.5.1 - included code for slackware dist; added exception handlers # to cover up situations where platforms don't have os.popen # (e.g. Mac) or fail on socket.gethostname(); fixed libc diff --git a/Lib/shutil.py b/Lib/shutil.py --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -853,7 +853,7 @@ _UNPACK_FORMATS[name] = extensions, function, extra_args, description def unregister_unpack_format(name): - """Removes the pack format from the registery.""" + """Removes the pack format from the registry.""" del _UNPACK_FORMATS[name] def _ensure_directory(path): diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py --- a/Lib/test/eintrdata/eintr_tester.py +++ b/Lib/test/eintrdata/eintr_tester.py @@ -372,7 +372,7 @@ @unittest.skipUnless(hasattr(signal, 'sigwaitinfo'), 'need signal.sigwaitinfo()') def test_sigwaitinfo(self): - # Issue #25277, #25868: give a few miliseconds to the parent process + # Issue #25277, #25868: give a few milliseconds to the parent process # between os.write() and signal.sigwaitinfo() to works around a race # condition self.sleep_time = 0.100 diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -114,7 +114,7 @@ self.assertEqual(f['b'], 5) # find first in chain self.assertEqual(f.parents['b'], 2) # look beyond maps[0] - def test_contructor(self): + def test_constructor(self): self.assertEqual(ChainMap().maps, [{}]) # no-args --> one new dict self.assertEqual(ChainMap({1:2}).maps, [{1:2}]) # 1 arg --> list diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -494,7 +494,7 @@ d.clear() self.assertEqual(len(d), 0) self.assertEqual(list(d), []) - d.clear() # clear an emtpy deque + d.clear() # clear an empty deque self.assertEqual(list(d), []) def test_remove(self): diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -654,7 +654,7 @@ self.Season.SPRING] ) - def test_programatic_function_string(self): + def test_programmatic_function_string(self): SummerMonth = Enum('SummerMonth', 'june july august') lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -671,7 +671,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_with_start(self): + def test_programmatic_function_string_with_start(self): SummerMonth = Enum('SummerMonth', 'june july august', start=10) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -688,7 +688,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_list(self): + def test_programmatic_function_string_list(self): SummerMonth = Enum('SummerMonth', ['june', 'july', 'august']) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -705,7 +705,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_list_with_start(self): + def test_programmatic_function_string_list_with_start(self): SummerMonth = Enum('SummerMonth', ['june', 'july', 'august'], start=20) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -722,7 +722,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_iterable(self): + def test_programmatic_function_iterable(self): SummerMonth = Enum( 'SummerMonth', (('june', 1), ('july', 2), ('august', 3)) @@ -742,7 +742,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_from_dict(self): + def test_programmatic_function_from_dict(self): SummerMonth = Enum( 'SummerMonth', OrderedDict((('june', 1), ('july', 2), ('august', 3))) @@ -762,7 +762,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type(self): + def test_programmatic_function_type(self): SummerMonth = Enum('SummerMonth', 'june july august', type=int) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -778,7 +778,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_with_start(self): + def test_programmatic_function_type_with_start(self): SummerMonth = Enum('SummerMonth', 'june july august', type=int, start=30) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -794,7 +794,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_from_subclass(self): + def test_programmatic_function_type_from_subclass(self): SummerMonth = IntEnum('SummerMonth', 'june july august') lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -810,7 +810,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_from_subclass_with_start(self): + def test_programmatic_function_type_from_subclass_with_start(self): SummerMonth = IntEnum('SummerMonth', 'june july august', start=40) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -396,7 +396,7 @@ ## comma-separated list, it'll be a headache to parse (at least my head ## starts hurting every time I think of that code). ## - Expires: You'll get all sorts of date formats in the expires, -## including emtpy expires attributes ("expires="). Be as flexible as you +## including empty expires attributes ("expires="). Be as flexible as you ## can, and certainly don't expect the weekday to be there; if you can't ## parse it, just ignore it and pretend it's a session cookie. ## - Domain-matching: Netscape uses the 2-dot rule for _all_ domains, not diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1254,8 +1254,8 @@ (1.0e200, .999999999999999e200)] self.assertAllNotClose(zero_tolerance_not_close_examples, rel_tol=0.0) - def test_assymetry(self): - # test the assymetry example from PEP 485 + def test_asymmetry(self): + # test the asymmetry example from PEP 485 self.assertAllClose([(9, 10), (10, 9)], rel_tol=0.1) def test_integers(self): diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py --- a/Lib/test/test_nntplib.py +++ b/Lib/test/test_nntplib.py @@ -1465,14 +1465,14 @@ def test_service_temporarily_unavailable(self): #Test service temporarily unavailable class Handler(NNTPv1Handler): - welcome = '400 Service temporarily unavilable' + welcome = '400 Service temporarily unavailable' self.check_constructor_error_conditions( Handler, nntplib.NNTPTemporaryError, Handler.welcome) def test_service_permanently_unavailable(self): #Test service permanently unavailable class Handler(NNTPv1Handler): - welcome = '502 Service permanently unavilable' + welcome = '502 Service permanently unavailable' self.check_constructor_error_conditions( Handler, nntplib.NNTPPermanentError, Handler.welcome) diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -1257,7 +1257,7 @@ self.assertRaises(shutil.ReadError, unpack_archive, TESTFN) self.assertRaises(ValueError, unpack_archive, TESTFN, format='xxx') - def test_unpack_registery(self): + def test_unpack_registry(self): formats = get_unpack_formats() diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py --- a/Lib/test/test_structseq.py +++ b/Lib/test/test_structseq.py @@ -97,7 +97,7 @@ class Exc(Exception): pass - # Devious code could crash structseqs' contructors + # Devious code could crash structseqs' constructors class C: def __getitem__(self, i): raise Exc diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -1354,7 +1354,7 @@ desired_exception = e desired_exception.strerror += ': ' + repr(self._nonexistent_dir) else: - self.fail("chdir to nonexistant directory %s succeeded." % + self.fail("chdir to nonexistent directory %s succeeded." % self._nonexistent_dir) return desired_exception diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -836,7 +836,7 @@ between the two objects is more than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). If the two objects compare equal then they will automatically compare almost equal. @@ -875,7 +875,7 @@ between the two objects is less than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). Objects that are equal automatically fail. """ diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -2210,7 +2210,7 @@ the FTP connection failed to fix a ResourceWarning. - Issue #23853: :meth:`socket.socket.sendall` does no more reset the socket - timeout each time data is sent successfuly. The socket timeout is now the + timeout each time data is sent successfully. The socket timeout is now the maximum total duration to send all data. - Issue #22721: An order of multiline pprint output of set or dict containing diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -332,7 +332,7 @@ /* PyCStructType_Type - a meta type/class. Creating a new class using this one as - __metaclass__ will call the contructor StructUnionType_new. It replaces the + __metaclass__ will call the constructor StructUnionType_new. It replaces the tp_dict member with a new instance of StgDict, and initializes the C accessible fields somehow. */ diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1911,7 +1911,7 @@ PyDoc_STRVAR(chain_from_iterable_doc, "chain.from_iterable(iterable) --> chain object\n\ \n\ -Alternate chain() contructor taking a single iterable argument\n\ +Alternate chain() constructor taking a single iterable argument\n\ that evaluates lazily."); static PyMethodDef chain_methods[] = { diff --git a/Objects/exceptions.c b/Objects/exceptions.c --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1855,7 +1855,7 @@ return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -1980,7 +1980,7 @@ return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -2078,7 +2078,7 @@ return PyUnicode_FromString(""); /* Get reason as a string, which it might not be if it's been - modified after we were contructed. */ + modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; diff --git a/Objects/longobject.c b/Objects/longobject.c --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -775,10 +775,10 @@ size_t i; const unsigned char* p = pendbyte; const int pincr = -incr; /* search MSB to LSB */ - const unsigned char insignficant = is_signed ? 0xff : 0x00; + const unsigned char insignificant = is_signed ? 0xff : 0x00; for (i = 0; i < n; ++i, p += pincr) { - if (*p != insignficant) + if (*p != insignificant) break; } numsignificantbytes = n - i; diff --git a/Tools/clinic/clinic_test.py b/Tools/clinic/clinic_test.py --- a/Tools/clinic/clinic_test.py +++ b/Tools/clinic/clinic_test.py @@ -90,7 +90,7 @@ # the "end line" for the block if it # didn't end in "\n" (as in, the last) # byte of the file was '/'. - # so it woudl spit out an end line for you. + # so it would spit out an end line for you. # and since you really already had one, # the last line of the block got corrupted. c = clinic.Clinic(clinic.CLanguage(None)) diff --git a/Tools/demo/redemo.py b/Tools/demo/redemo.py --- a/Tools/demo/redemo.py +++ b/Tools/demo/redemo.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -"""Basic regular expression demostration facility (Perl style syntax).""" +"""Basic regular expression demonstration facility (Perl style syntax).""" from tkinter import * import re diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py --- a/Tools/freeze/freeze.py +++ b/Tools/freeze/freeze.py @@ -159,7 +159,7 @@ except getopt.error as msg: usage('getopt error: ' + str(msg)) - # proces option arguments + # process option arguments for o, a in opts: if o == '-h': print(__doc__) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 21:33:47 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 01:33:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327626=3A_Further_?= =?utf-8?q?spelling_fixes_for_3=2E6?= Message-ID: <20160728013347.95119.55039.E9993FFC@psf.io> https://hg.python.org/cpython/rev/e12dee34deae changeset: 102467:e12dee34deae user: Martin Panter date: Thu Jul 28 01:25:31 2016 +0000 summary: Issue #27626: Further spelling fixes for 3.6 files: Lib/idlelib/idle_test/test_query.py | 2 +- Lib/test/test_fstring.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Lib/idlelib/idle_test/test_query.py b/Lib/idlelib/idle_test/test_query.py --- a/Lib/idlelib/idle_test/test_query.py +++ b/Lib/idlelib/idle_test/test_query.py @@ -146,7 +146,7 @@ "Test ModuleName subclass of Query." class Dummy_ModuleName: - entry_ok = query.ModuleName.entry_ok # Funtion being tested. + entry_ok = query.ModuleName.entry_ok # Function being tested. text0 = '' entry = Var() diff --git a/Lib/test/test_fstring.py b/Lib/test/test_fstring.py --- a/Lib/test/test_fstring.py +++ b/Lib/test/test_fstring.py @@ -250,7 +250,7 @@ ]) self.assertAllRaise(SyntaxError, "invalid syntax", - [# Invalid sytax inside a nested spec. + [# Invalid syntax inside a nested spec. "f'{4:{/5}}'", ]) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 21:33:47 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 01:33:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2327626=3A_Merge_spelling_fixes_from_3=2E5?= Message-ID: <20160728013347.20463.98047.454BA622@psf.io> https://hg.python.org/cpython/rev/3f337cce758c changeset: 102466:3f337cce758c parent: 102465:98df00834c58 parent: 102464:6080d720cbf5 user: Martin Panter date: Thu Jul 28 01:30:58 2016 +0000 summary: Issue #27626: Merge spelling fixes from 3.5 files: Doc/howto/clinic.rst | 2 +- Doc/howto/sockets.rst | 2 +- Doc/library/configparser.rst | 2 +- Doc/library/importlib.rst | 2 +- Doc/library/os.rst | 2 +- Doc/library/socket.rst | 2 +- Include/longobject.h | 2 +- Lib/ctypes/test/test_numbers.py | 2 +- Lib/ctypes/test/test_structures.py | 2 +- Lib/datetime.py | 2 +- Lib/idlelib/calltip_w.py | 2 +- Lib/idlelib/parenmatch.py | 2 +- Lib/platform.py | 2 +- Lib/shutil.py | 2 +- Lib/test/eintrdata/eintr_tester.py | 2 +- Lib/test/test_collections.py | 2 +- Lib/test/test_deque.py | 2 +- Lib/test/test_enum.py | 20 +++++++++--------- Lib/test/test_http_cookiejar.py | 2 +- Lib/test/test_math.py | 4 +- Lib/test/test_nntplib.py | 4 +- Lib/test/test_shutil.py | 2 +- Lib/test/test_structseq.py | 2 +- Lib/test/test_subprocess.py | 2 +- Lib/unittest/case.py | 4 +- Misc/NEWS | 2 +- Modules/_ctypes/_ctypes.c | 2 +- Modules/itertoolsmodule.c | 2 +- Objects/exceptions.c | 6 ++-- Objects/longobject.c | 4 +- Tools/clinic/clinic_test.py | 2 +- Tools/demo/redemo.py | 2 +- Tools/freeze/freeze.py | 2 +- 33 files changed, 48 insertions(+), 48 deletions(-) diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst --- a/Doc/howto/clinic.rst +++ b/Doc/howto/clinic.rst @@ -1583,7 +1583,7 @@ preserve -This tells Clinic that the current contents of the output should be kept, unmodifed. +This tells Clinic that the current contents of the output should be kept, unmodified. This is used internally by Clinic when dumping output into ``file`` files; wrapping it in a Clinic block lets Clinic use its existing checksum functionality to ensure the file was not modified by hand before it gets overwritten. diff --git a/Doc/howto/sockets.rst b/Doc/howto/sockets.rst --- a/Doc/howto/sockets.rst +++ b/Doc/howto/sockets.rst @@ -106,7 +106,7 @@ There's actually 3 general ways in which this loop could work - dispatching a thread to handle ``clientsocket``, create a new process to handle ``clientsocket``, or restructure this app to use non-blocking sockets, and -mulitplex between our "server" socket and any active ``clientsocket``\ s using +multiplex between our "server" socket and any active ``clientsocket``\ s using ``select``. More about that later. The important thing to understand now is this: this is *all* a "server" socket does. It doesn't send any data. It doesn't receive any data. It just produces "client" sockets. Each ``clientsocket`` is diff --git a/Doc/library/configparser.rst b/Doc/library/configparser.rst --- a/Doc/library/configparser.rst +++ b/Doc/library/configparser.rst @@ -66,7 +66,7 @@ <#supported-ini-file-structure>`_. Essentially, the file consists of sections, each of which contains keys with values. :mod:`configparser` classes can read and write such files. Let's start by -creating the above configuration file programatically. +creating the above configuration file programmatically. .. doctest:: diff --git a/Doc/library/importlib.rst b/Doc/library/importlib.rst --- a/Doc/library/importlib.rst +++ b/Doc/library/importlib.rst @@ -633,7 +633,7 @@ .. method:: path_stats(path) Optional abstract method which returns a :class:`dict` containing - metadata about the specifed path. Supported dictionary keys are: + metadata about the specified path. Supported dictionary keys are: - ``'mtime'`` (mandatory): an integer or floating-point number representing the modification time of the source code; diff --git a/Doc/library/os.rst b/Doc/library/os.rst --- a/Doc/library/os.rst +++ b/Doc/library/os.rst @@ -1938,7 +1938,7 @@ On Unix, *path* can be of type :class:`str` or :class:`bytes` (use :func:`~os.fsencode` and :func:`~os.fsdecode` to encode and decode :class:`bytes` paths). On Windows, *path* must be of type :class:`str`. - On both sytems, the type of the :attr:`~os.DirEntry.name` and + On both systems, the type of the :attr:`~os.DirEntry.name` and :attr:`~os.DirEntry.path` attributes of each :class:`os.DirEntry` will be of the same type as *path*. diff --git a/Doc/library/socket.rst b/Doc/library/socket.rst --- a/Doc/library/socket.rst +++ b/Doc/library/socket.rst @@ -1226,7 +1226,7 @@ much data, if any, was successfully sent. .. versionchanged:: 3.5 - The socket timeout is no more reset each time data is sent successfuly. + The socket timeout is no more reset each time data is sent successfully. The socket timeout is now the maximum total duration to send all data. .. versionchanged:: 3.5 diff --git a/Include/longobject.h b/Include/longobject.h --- a/Include/longobject.h +++ b/Include/longobject.h @@ -160,7 +160,7 @@ example, if is_signed is 0 and there are more digits in the v than fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of being large enough to hold a sign bit. OverflowError is set in this - case, but bytes holds the least-signficant n bytes of the true value. + case, but bytes holds the least-significant n bytes of the true value. */ PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, unsigned char* bytes, size_t n, diff --git a/Lib/ctypes/test/test_numbers.py b/Lib/ctypes/test/test_numbers.py --- a/Lib/ctypes/test/test_numbers.py +++ b/Lib/ctypes/test/test_numbers.py @@ -76,7 +76,7 @@ self.assertEqual(t(v).value, truth(v)) def test_typeerror(self): - # Only numbers are allowed in the contructor, + # Only numbers are allowed in the constructor, # otherwise TypeError is raised for t in signed_types + unsigned_types + float_types: self.assertRaises(TypeError, t, "") diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -106,7 +106,7 @@ self.assertEqual(alignment(XX), alignment(X)) self.assertEqual(sizeof(XX), calcsize("3s 3s 0s")) - def test_emtpy(self): + def test_empty(self): # I had problems with these # # Although these are pathological cases: Empty Structures! diff --git a/Lib/datetime.py b/Lib/datetime.py --- a/Lib/datetime.py +++ b/Lib/datetime.py @@ -721,7 +721,7 @@ @classmethod def fromordinal(cls, n): - """Contruct a date from a proleptic Gregorian ordinal. + """Construct a date from a proleptic Gregorian ordinal. January 1 of year 1 is day 1. Only the year, month and day are non-zero in the result. diff --git a/Lib/idlelib/calltip_w.py b/Lib/idlelib/calltip_w.py --- a/Lib/idlelib/calltip_w.py +++ b/Lib/idlelib/calltip_w.py @@ -9,7 +9,7 @@ HIDE_SEQUENCES = ("", "") CHECKHIDE_VIRTUAL_EVENT_NAME = "<>" CHECKHIDE_SEQUENCES = ("", "") -CHECKHIDE_TIME = 100 # miliseconds +CHECKHIDE_TIME = 100 # milliseconds MARK_RIGHT = "calltipwindowregion_right" diff --git a/Lib/idlelib/parenmatch.py b/Lib/idlelib/parenmatch.py --- a/Lib/idlelib/parenmatch.py +++ b/Lib/idlelib/parenmatch.py @@ -9,7 +9,7 @@ from idlelib.config import idleConf _openers = {')':'(',']':'[','}':'{'} -CHECK_DELAY = 100 # miliseconds +CHECK_DELAY = 100 # milliseconds class ParenMatch: """Highlight matching parentheses diff --git a/Lib/platform.py b/Lib/platform.py --- a/Lib/platform.py +++ b/Lib/platform.py @@ -61,7 +61,7 @@ # though # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all # return values (the system uname command tends to return -# 'unknown' instead of just leaving the field emtpy) +# 'unknown' instead of just leaving the field empty) # 0.5.1 - included code for slackware dist; added exception handlers # to cover up situations where platforms don't have os.popen # (e.g. Mac) or fail on socket.gethostname(); fixed libc diff --git a/Lib/shutil.py b/Lib/shutil.py --- a/Lib/shutil.py +++ b/Lib/shutil.py @@ -853,7 +853,7 @@ _UNPACK_FORMATS[name] = extensions, function, extra_args, description def unregister_unpack_format(name): - """Removes the pack format from the registery.""" + """Removes the pack format from the registry.""" del _UNPACK_FORMATS[name] def _ensure_directory(path): diff --git a/Lib/test/eintrdata/eintr_tester.py b/Lib/test/eintrdata/eintr_tester.py --- a/Lib/test/eintrdata/eintr_tester.py +++ b/Lib/test/eintrdata/eintr_tester.py @@ -378,7 +378,7 @@ @unittest.skipUnless(hasattr(signal, 'sigwaitinfo'), 'need signal.sigwaitinfo()') def test_sigwaitinfo(self): - # Issue #25277, #25868: give a few miliseconds to the parent process + # Issue #25277, #25868: give a few milliseconds to the parent process # between os.write() and signal.sigwaitinfo() to works around a race # condition self.sleep_time = 0.100 diff --git a/Lib/test/test_collections.py b/Lib/test/test_collections.py --- a/Lib/test/test_collections.py +++ b/Lib/test/test_collections.py @@ -114,7 +114,7 @@ self.assertEqual(f['b'], 5) # find first in chain self.assertEqual(f.parents['b'], 2) # look beyond maps[0] - def test_contructor(self): + def test_constructor(self): self.assertEqual(ChainMap().maps, [{}]) # no-args --> one new dict self.assertEqual(ChainMap({1:2}).maps, [{1:2}]) # 1 arg --> list diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -494,7 +494,7 @@ d.clear() self.assertEqual(len(d), 0) self.assertEqual(list(d), []) - d.clear() # clear an emtpy deque + d.clear() # clear an empty deque self.assertEqual(list(d), []) def test_remove(self): diff --git a/Lib/test/test_enum.py b/Lib/test/test_enum.py --- a/Lib/test/test_enum.py +++ b/Lib/test/test_enum.py @@ -677,7 +677,7 @@ self.Season.SPRING] ) - def test_programatic_function_string(self): + def test_programmatic_function_string(self): SummerMonth = Enum('SummerMonth', 'june july august') lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -694,7 +694,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_with_start(self): + def test_programmatic_function_string_with_start(self): SummerMonth = Enum('SummerMonth', 'june july august', start=10) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -711,7 +711,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_list(self): + def test_programmatic_function_string_list(self): SummerMonth = Enum('SummerMonth', ['june', 'july', 'august']) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -728,7 +728,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_string_list_with_start(self): + def test_programmatic_function_string_list_with_start(self): SummerMonth = Enum('SummerMonth', ['june', 'july', 'august'], start=20) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -745,7 +745,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_iterable(self): + def test_programmatic_function_iterable(self): SummerMonth = Enum( 'SummerMonth', (('june', 1), ('july', 2), ('august', 3)) @@ -765,7 +765,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_from_dict(self): + def test_programmatic_function_from_dict(self): SummerMonth = Enum( 'SummerMonth', OrderedDict((('june', 1), ('july', 2), ('august', 3))) @@ -785,7 +785,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type(self): + def test_programmatic_function_type(self): SummerMonth = Enum('SummerMonth', 'june july august', type=int) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -801,7 +801,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_with_start(self): + def test_programmatic_function_type_with_start(self): SummerMonth = Enum('SummerMonth', 'june july august', type=int, start=30) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -817,7 +817,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_from_subclass(self): + def test_programmatic_function_type_from_subclass(self): SummerMonth = IntEnum('SummerMonth', 'june july august') lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) @@ -833,7 +833,7 @@ self.assertIn(e, SummerMonth) self.assertIs(type(e), SummerMonth) - def test_programatic_function_type_from_subclass_with_start(self): + def test_programmatic_function_type_from_subclass_with_start(self): SummerMonth = IntEnum('SummerMonth', 'june july august', start=40) lst = list(SummerMonth) self.assertEqual(len(lst), len(SummerMonth)) diff --git a/Lib/test/test_http_cookiejar.py b/Lib/test/test_http_cookiejar.py --- a/Lib/test/test_http_cookiejar.py +++ b/Lib/test/test_http_cookiejar.py @@ -396,7 +396,7 @@ ## comma-separated list, it'll be a headache to parse (at least my head ## starts hurting every time I think of that code). ## - Expires: You'll get all sorts of date formats in the expires, -## including emtpy expires attributes ("expires="). Be as flexible as you +## including empty expires attributes ("expires="). Be as flexible as you ## can, and certainly don't expect the weekday to be there; if you can't ## parse it, just ignore it and pretend it's a session cookie. ## - Domain-matching: Netscape uses the 2-dot rule for _all_ domains, not diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -1253,8 +1253,8 @@ (1.0e200, .999999999999999e200)] self.assertAllNotClose(zero_tolerance_not_close_examples, rel_tol=0.0) - def test_assymetry(self): - # test the assymetry example from PEP 485 + def test_asymmetry(self): + # test the asymmetry example from PEP 485 self.assertAllClose([(9, 10), (10, 9)], rel_tol=0.1) def test_integers(self): diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py --- a/Lib/test/test_nntplib.py +++ b/Lib/test/test_nntplib.py @@ -1465,14 +1465,14 @@ def test_service_temporarily_unavailable(self): #Test service temporarily unavailable class Handler(NNTPv1Handler): - welcome = '400 Service temporarily unavilable' + welcome = '400 Service temporarily unavailable' self.check_constructor_error_conditions( Handler, nntplib.NNTPTemporaryError, Handler.welcome) def test_service_permanently_unavailable(self): #Test service permanently unavailable class Handler(NNTPv1Handler): - welcome = '502 Service permanently unavilable' + welcome = '502 Service permanently unavailable' self.check_constructor_error_conditions( Handler, nntplib.NNTPPermanentError, Handler.welcome) diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py --- a/Lib/test/test_shutil.py +++ b/Lib/test/test_shutil.py @@ -1257,7 +1257,7 @@ self.assertRaises(shutil.ReadError, unpack_archive, TESTFN) self.assertRaises(ValueError, unpack_archive, TESTFN, format='xxx') - def test_unpack_registery(self): + def test_unpack_registry(self): formats = get_unpack_formats() diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py --- a/Lib/test/test_structseq.py +++ b/Lib/test/test_structseq.py @@ -97,7 +97,7 @@ class Exc(Exception): pass - # Devious code could crash structseqs' contructors + # Devious code could crash structseqs' constructors class C: def __getitem__(self, i): raise Exc diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -1351,7 +1351,7 @@ desired_exception = e desired_exception.strerror += ': ' + repr(self._nonexistent_dir) else: - self.fail("chdir to nonexistant directory %s succeeded." % + self.fail("chdir to nonexistent directory %s succeeded." % self._nonexistent_dir) return desired_exception diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -836,7 +836,7 @@ between the two objects is more than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). If the two objects compare equal then they will automatically compare almost equal. @@ -875,7 +875,7 @@ between the two objects is less than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). Objects that are equal automatically fail. """ diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -3169,7 +3169,7 @@ the FTP connection failed to fix a ResourceWarning. - Issue #23853: :meth:`socket.socket.sendall` does no more reset the socket - timeout each time data is sent successfuly. The socket timeout is now the + timeout each time data is sent successfully. The socket timeout is now the maximum total duration to send all data. - Issue #22721: An order of multiline pprint output of set or dict containing diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -332,7 +332,7 @@ /* PyCStructType_Type - a meta type/class. Creating a new class using this one as - __metaclass__ will call the contructor StructUnionType_new. It replaces the + __metaclass__ will call the constructor StructUnionType_new. It replaces the tp_dict member with a new instance of StgDict, and initializes the C accessible fields somehow. */ diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1923,7 +1923,7 @@ PyDoc_STRVAR(chain_from_iterable_doc, "chain.from_iterable(iterable) --> chain object\n\ \n\ -Alternate chain() contructor taking a single iterable argument\n\ +Alternate chain() constructor taking a single iterable argument\n\ that evaluates lazily."); static PyMethodDef chain_methods[] = { diff --git a/Objects/exceptions.c b/Objects/exceptions.c --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1849,7 +1849,7 @@ return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -1974,7 +1974,7 @@ return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -2072,7 +2072,7 @@ return PyUnicode_FromString(""); /* Get reason as a string, which it might not be if it's been - modified after we were contructed. */ + modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; diff --git a/Objects/longobject.c b/Objects/longobject.c --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -775,10 +775,10 @@ size_t i; const unsigned char* p = pendbyte; const int pincr = -incr; /* search MSB to LSB */ - const unsigned char insignficant = is_signed ? 0xff : 0x00; + const unsigned char insignificant = is_signed ? 0xff : 0x00; for (i = 0; i < n; ++i, p += pincr) { - if (*p != insignficant) + if (*p != insignificant) break; } numsignificantbytes = n - i; diff --git a/Tools/clinic/clinic_test.py b/Tools/clinic/clinic_test.py --- a/Tools/clinic/clinic_test.py +++ b/Tools/clinic/clinic_test.py @@ -90,7 +90,7 @@ # the "end line" for the block if it # didn't end in "\n" (as in, the last) # byte of the file was '/'. - # so it woudl spit out an end line for you. + # so it would spit out an end line for you. # and since you really already had one, # the last line of the block got corrupted. c = clinic.Clinic(clinic.CLanguage(None)) diff --git a/Tools/demo/redemo.py b/Tools/demo/redemo.py --- a/Tools/demo/redemo.py +++ b/Tools/demo/redemo.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -"""Basic regular expression demostration facility (Perl style syntax).""" +"""Basic regular expression demonstration facility (Perl style syntax).""" from tkinter import * import re diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py --- a/Tools/freeze/freeze.py +++ b/Tools/freeze/freeze.py @@ -159,7 +159,7 @@ except getopt.error as msg: usage('getopt error: ' + str(msg)) - # proces option arguments + # process option arguments for o, a in opts: if o == '-h': print(__doc__) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 21:43:15 2016 From: python-checkins at python.org (terry.reedy) Date: Thu, 28 Jul 2016 01:43:15 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327620=3A_Mark_the?= =?utf-8?q?_default_action_button_as_the_default=2E?= Message-ID: <20160728014315.24822.66787.A4410D81@psf.io> https://hg.python.org/cpython/rev/2468581846da changeset: 102468:2468581846da user: Terry Jan Reedy date: Wed Jul 27 21:42:54 2016 -0400 summary: Issue #27620: Mark the default action button as the default. files: Lib/idlelib/query.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/idlelib/query.py b/Lib/idlelib/query.py --- a/Lib/idlelib/query.py +++ b/Lib/idlelib/query.py @@ -83,7 +83,7 @@ self.entry.focus_set() buttons = Frame(self) - self.button_ok = Button(buttons, text='Ok', + self.button_ok = Button(buttons, text='Ok', default='active', width=8, command=self.ok) self.button_cancel = Button(buttons, text='Cancel', width=8, command=self.cancel) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Wed Jul 27 22:17:28 2016 From: python-checkins at python.org (terry.reedy) Date: Thu, 28 Jul 2016 02:17:28 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327620=3A_Make_hte?= =?utf-8?q?st_box_respond_to_=3CReturn=3E_and_=3CEscape=3E=2E?= Message-ID: <20160728021727.18224.97765.46CDAD2C@psf.io> https://hg.python.org/cpython/rev/e4a2d78aa6cc changeset: 102469:e4a2d78aa6cc user: Terry Jan Reedy date: Wed Jul 27 22:17:05 2016 -0400 summary: Issue #27620: Make htest box respond to and . files: Lib/idlelib/idle_test/htest.py | 18 ++++++++++++------ 1 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Lib/idlelib/idle_test/htest.py b/Lib/idlelib/idle_test/htest.py --- a/Lib/idlelib/idle_test/htest.py +++ b/Lib/idlelib/idle_test/htest.py @@ -380,7 +380,7 @@ callable_object = None test_kwds = None - def next(): + def next_test(): nonlocal test_name, callable_object, test_kwds if len(test_list) == 1: @@ -395,20 +395,26 @@ text.insert("1.0",test_spec['msg']) text.configure(state='disabled') # preserve read-only property - def run_test(): + def run_test(_=None): widget = callable_object(**test_kwds) try: print(widget.result) except AttributeError: pass - button = tk.Button(root, textvariable=test_name, command=run_test) + def close(_=None): + root.destroy() + + button = tk.Button(root, textvariable=test_name, + default='active', command=run_test) + next_button = tk.Button(root, text="Next", command=next_test) button.pack() - next_button = tk.Button(root, text="Next", command=next) next_button.pack() + next_button.focus_set() + root.bind('', run_test) + root.bind('', close) - next() - + next_test() root.mainloop() if __name__ == '__main__': -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 00:20:02 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 04:20:02 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3NDkw?= =?utf-8?q?=3A_Do_not_build_pgen_when_cross-compiling?= Message-ID: <20160728042002.41671.63700.D2643954@psf.io> https://hg.python.org/cpython/rev/ec27886f675f changeset: 102470:ec27886f675f branch: 2.7 parent: 102462:7d692840c152 user: Martin Panter date: Thu Jul 28 01:28:27 2016 +0000 summary: Issue #27490: Do not build pgen when cross-compiling The dependendency on the $(PGEN) variable must only be set when not cross-compiling. When cross-compiling, $(PGEN) will not be used, so no need to build it. Patch by Thomas Perl. files: Makefile.pre.in | 2 +- Misc/ACKS | 1 + Misc/NEWS | 3 +++ configure | 6 +++++- configure.ac | 3 +++ 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Makefile.pre.in b/Makefile.pre.in --- a/Makefile.pre.in +++ b/Makefile.pre.in @@ -680,7 +680,7 @@ Modules/pwdmodule.o: $(srcdir)/Modules/pwdmodule.c $(srcdir)/Modules/posixmodule.h -$(GRAMMAR_H): $(GRAMMAR_INPUT) $(PGEN) +$(GRAMMAR_H): $(GRAMMAR_INPUT) @PGEN_DEPENDENCY@ @$(MKDIR_P) Include # Avoid copying the file onto itself for an in-tree build if test "$(cross_compiling)" != "yes"; then \ diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1056,6 +1056,7 @@ Bo Peng Santiago Peres?n George Peristerakis +Thomas Perl Mathieu Perreault Mark Perrego Trevor Perrin diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -90,6 +90,9 @@ Build ----- +- Issue #27490: Do not build pgen when cross-compiling. Patch by Thomas + Perl. + - Issue #26930: Update Windows builds to use OpenSSL 1.0.2h. IDLE diff --git a/configure b/configure --- a/configure +++ b/configure @@ -735,6 +735,7 @@ CONFIG_ARGS SOVERSION VERSION +PGEN_DEPENDENCY PYTHON_FOR_BUILD host_os host_vendor @@ -2924,11 +2925,14 @@ $as_echo "$interp" >&6; } PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + PGEN_DEPENDENCY='' elif test "$cross_compiling" = maybe; then as_fn_error $? "Cross compiling required --host=HOST-TUPLE and --build=ARCH" "$LINENO" 5 else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' -fi + PGEN_DEPENDENCY='$(PGEN)' +fi + diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -36,12 +36,15 @@ AC_MSG_RESULT($interp) PYTHON_FOR_BUILD='_PYTHON_PROJECT_BASE=$(abs_builddir) _PYTHON_HOST_PLATFORM=$(_PYTHON_HOST_PLATFORM) PYTHONPATH=$(shell test -f pybuilddir.txt && echo $(abs_builddir)/`cat pybuilddir.txt`:)$(srcdir)/Lib:$(srcdir)/Lib/$(PLATDIR) '$interp fi + PGEN_DEPENDENCY='' elif test "$cross_compiling" = maybe; then AC_MSG_ERROR([Cross compiling required --host=HOST-TUPLE and --build=ARCH]) else PYTHON_FOR_BUILD='./$(BUILDPYTHON) -E' + PGEN_DEPENDENCY='$(PGEN)' fi AC_SUBST(PYTHON_FOR_BUILD) +AC_SUBST(PGEN_DEPENDENCY) dnl Ensure that if prefix is specified, it does not end in a slash. If dnl it does, we get path names containing '//' which is both ugly and -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 00:20:02 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 04:20:02 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzIzOTQz?= =?utf-8?q?=3A_Fix_typos=2E_Patch_by_Piotr_Kasprzyk=2E?= Message-ID: <20160728042002.17967.43342.51B5F014@psf.io> https://hg.python.org/cpython/rev/b0addbbc7671 changeset: 102471:b0addbbc7671 branch: 2.7 user: Martin Panter date: Thu Jul 28 03:04:04 2016 +0000 summary: Issue #23943: Fix typos. Patch by Piotr Kasprzyk. files: Doc/library/wsgiref.rst | 2 +- Include/object.h | 2 +- Include/pyport.h | 2 +- Lib/idlelib/SearchEngine.py | 2 +- Lib/idlelib/idle_test/mock_tk.py | 2 +- Lib/test/decimaltestdata/exp.decTest | 1 + Lib/test/test_doctest.py | 4 ++-- Lib/test/test_socket.py | 2 +- Lib/test/test_threading.py | 2 +- Misc/HISTORY | 6 +++--- Misc/NEWS | 2 +- Misc/cheatsheet | 4 ++-- Modules/_ctypes/_ctypes.c | 2 +- Modules/_ctypes/ctypes.h | 2 +- Modules/_ctypes/libffi/ltmain.sh | 2 +- 15 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Doc/library/wsgiref.rst b/Doc/library/wsgiref.rst --- a/Doc/library/wsgiref.rst +++ b/Doc/library/wsgiref.rst @@ -711,7 +711,7 @@ # object that accepts two arguments. For that purpose, we're going to # use a function (note that you're not limited to a function, you can # use a class for example). The first argument passed to the function - # is a dictionary containing CGI-style envrironment variables and the + # is a dictionary containing CGI-style environment variables and the # second variable is the callable object (see PEP 333). def hello_world_app(environ, start_response): status = '200 OK' # HTTP Status diff --git a/Include/object.h b/Include/object.h --- a/Include/object.h +++ b/Include/object.h @@ -778,7 +778,7 @@ } while (0) /* Safely decref `op` and set `op` to NULL, especially useful in tp_clear - * and tp_dealloc implementatons. + * and tp_dealloc implementations. * * Note that "the obvious" code can be deadly: * diff --git a/Include/pyport.h b/Include/pyport.h --- a/Include/pyport.h +++ b/Include/pyport.h @@ -265,7 +265,7 @@ * for platforms that support that. * * If PY_LOCAL_AGGRESSIVE is defined before python.h is included, more - * "aggressive" inlining/optimizaion is enabled for the entire module. This + * "aggressive" inlining/optimization is enabled for the entire module. This * may lead to code bloat, and may slow things down for those reasons. It may * also lead to errors, if the code relies on pointer aliasing. Use with * care. diff --git a/Lib/idlelib/SearchEngine.py b/Lib/idlelib/SearchEngine.py --- a/Lib/idlelib/SearchEngine.py +++ b/Lib/idlelib/SearchEngine.py @@ -107,7 +107,7 @@ It directly return the result of that call. Text is a text widget. Prog is a precompiled pattern. - The ok parameteris a bit complicated as it has two effects. + The ok parameter is a bit complicated as it has two effects. If there is a selection, the search begin at either end, depending on the direction setting and ok, with ok meaning that diff --git a/Lib/idlelib/idle_test/mock_tk.py b/Lib/idlelib/idle_test/mock_tk.py --- a/Lib/idlelib/idle_test/mock_tk.py +++ b/Lib/idlelib/idle_test/mock_tk.py @@ -1,6 +1,6 @@ """Classes that replace tkinter gui objects used by an object being tested. -A gui object is anything with a master or parent paramenter, which is +A gui object is anything with a master or parent parameter, which is typically required in spite of what the doc strings say. """ diff --git a/Lib/test/decimaltestdata/exp.decTest b/Lib/test/decimaltestdata/exp.decTest --- a/Lib/test/decimaltestdata/exp.decTest +++ b/Lib/test/decimaltestdata/exp.decTest @@ -19,7 +19,7 @@ ------------------------------------------------------------------------ version: 2.59 --- Tests of the exponential funtion. Currently all testcases here +-- Tests of the exponential function. Currently all testcases here -- show results which are correctly rounded (within <= 0.5 ulp). extended: 1 diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -2113,7 +2113,7 @@ ... AttributeError: 'module' object has no attribute 'sillySetup' - The setUp and tearDown funtions are passed test objects. Here + The setUp and tearDown functions are passed test objects. Here we'll use the setUp function to supply the missing variable y: >>> def setUp(test): @@ -2259,7 +2259,7 @@ ... AttributeError: 'module' object has no attribute 'sillySetup' - The setUp and tearDown funtions are passed test objects. + The setUp and tearDown functions are passed test objects. Here, we'll use a setUp function to set the favorite color in test_doctest.txt: diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -299,7 +299,7 @@ "Error raising socket exception.") def testSendtoErrors(self): - # Testing that sendto doens't masks failures. See #10169. + # Testing that sendto doesn't masks failures. See #10169. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.addCleanup(s.close) s.bind(('', 0)) diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -739,7 +739,7 @@ def generator(): while 1: - yield "genereator" + yield "generator" def callback(): if callback.gen is None: diff --git a/Misc/HISTORY b/Misc/HISTORY --- a/Misc/HISTORY +++ b/Misc/HISTORY @@ -10633,7 +10633,7 @@ Bow to font-lock at the end of the docstring, since it throws stuff off. - Make sure the path paramter to readmodule() is a list before adding it + Make sure the path parameter to readmodule() is a list before adding it with sys.path, or the addition could fail. @@ -12685,7 +12685,7 @@ - The warning about a thread still having a frame now only happens in verbose mode. -- Change the signal finialization so that it also resets the signal +- Change the signal finalization so that it also resets the signal handlers. After this has been called, our signal handlers are no longer active! @@ -14537,7 +14537,7 @@ fixed. - The test of negative number to the float power has been moved from the -built-in pow() functin to floatobject.c (so complex numbers can yield the +built-in pow() function to floatobject.c (so complex numbers can yield the correct result). - The bug introduced in beta2 where shared libraries loaded (using diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -1338,7 +1338,7 @@ (including empty directories) in ZIP file. - Issue #22449: In the ssl.SSLContext.load_default_certs, consult the - enviromental variables SSL_CERT_DIR and SSL_CERT_FILE on Windows. + environmental variables SSL_CERT_DIR and SSL_CERT_FILE on Windows. - Issue #8473: doctest.testfile now uses universal newline mode to read the test file. diff --git a/Misc/cheatsheet b/Misc/cheatsheet --- a/Misc/cheatsheet +++ b/Misc/cheatsheet @@ -975,7 +975,7 @@ id(object) Returns a unique 'identity' integer for an object. input([prompt]) Prints prompt if given. Reads input and evaluates it. Converts a number or a string to a plain integer. Optional -int(x[, base]) base paramenter specifies base from which to convert string +int(x[, base]) base parameter specifies base from which to convert string values. intern(aString) Enters aString in the table of "interned strings" andreturns the string. Interned strings are 'immortals'. @@ -991,7 +991,7 @@ copy of it. locals() Returns a dictionary containing current local variables. Converts a number or a string to a long integer. Optional -long(x[, base]) base paramenter specifies base from which to convert string +long(x[, base]) base parameter specifies base from which to convert string values. Applies function to every item of list and returns a listof map(function, list, the results. If additional arguments are passed,function diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -3985,7 +3985,7 @@ self, callargs, NULL); - /* If the errcheck funtion failed, return NULL. + /* If the errcheck function failed, return NULL. If the errcheck function returned callargs unchanged, continue normal processing. If the errcheck function returned something else, diff --git a/Modules/_ctypes/ctypes.h b/Modules/_ctypes/ctypes.h --- a/Modules/_ctypes/ctypes.h +++ b/Modules/_ctypes/ctypes.h @@ -229,7 +229,7 @@ remember is that in PyCArrayType_new the ffi_type fields must be filled in - so far it was unneeded because libffi doesn't support arrays at all (because they are passed as pointers to function calls anyway). But it's - too much risk to change that now, and there are other fields which doen't + too much risk to change that now, and there are other fields which doesn't belong into this structure anyway. Maybe in ctypes 2.0... (ctypes 2000?) */ Py_ssize_t size; /* number of bytes */ diff --git a/Modules/_ctypes/libffi/ltmain.sh b/Modules/_ctypes/libffi/ltmain.sh --- a/Modules/_ctypes/libffi/ltmain.sh +++ b/Modules/_ctypes/libffi/ltmain.sh @@ -1438,7 +1438,7 @@ case " $hookable_fns " in *" $1 "*) ;; - *) func_fatal_error "'$1' does not support hook funcions.n" ;; + *) func_fatal_error "'$1' does not support hook functions." ;; esac eval _G_hook_fns=\$$1_hooks; shift -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 00:20:03 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 04:20:03 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMi43KTogSXNzdWUgIzI3NjI2?= =?utf-8?q?=3A_Spelling_fixes_in_docs=2C_comments_and_internal_names?= Message-ID: <20160728042003.10785.18068.F7575643@psf.io> https://hg.python.org/cpython/rev/c8c1ea94379a changeset: 102472:c8c1ea94379a branch: 2.7 user: Martin Panter date: Thu Jul 28 01:11:04 2016 +0000 summary: Issue #27626: Spelling fixes in docs, comments and internal names Based on patch by Ville Skytt?. files: Demo/tix/samples/Balloon.py | 2 +- Demo/tix/samples/BtnBox.py | 2 +- Demo/tix/samples/CmpImg.py | 2 +- Demo/tix/samples/ComboBox.py | 2 +- Demo/tix/samples/Control.py | 2 +- Demo/tix/samples/DirList.py | 2 +- Demo/tix/samples/DirTree.py | 2 +- Demo/tix/samples/NoteBook.py | 2 +- Demo/tix/samples/OptMenu.py | 2 +- Demo/tix/samples/PanedWin.py | 2 +- Demo/tix/samples/PopMenu.py | 2 +- Demo/tix/samples/SHList1.py | 2 +- Demo/tix/samples/SHList2.py | 2 +- Demo/tix/samples/Tree.py | 2 +- Demo/turtle/tdemo_I_dontlike_tiltdemo.py | 2 +- Doc/howto/sockets.rst | 2 +- Include/longobject.h | 2 +- Lib/ctypes/test/test_numbers.py | 2 +- Lib/ctypes/test/test_structures.py | 2 +- Lib/idlelib/CallTipWindow.py | 2 +- Lib/idlelib/ParenMatch.py | 2 +- Lib/platform.py | 2 +- Lib/test/test_cookielib.py | 2 +- Lib/test/test_deque.py | 2 +- Lib/test/test_structseq.py | 2 +- Lib/unittest/case.py | 4 ++-- Misc/NEWS | 4 ++-- Misc/cheatsheet | 2 +- Modules/_ctypes/_ctypes.c | 2 +- Modules/itertoolsmodule.c | 2 +- Objects/exceptions.c | 6 +++--- Objects/longobject.c | 4 ++-- Tools/freeze/freeze.py | 2 +- Tools/scripts/redemo.py | 2 +- 34 files changed, 39 insertions(+), 39 deletions(-) diff --git a/Demo/tix/samples/Balloon.py b/Demo/tix/samples/Balloon.py --- a/Demo/tix/samples/Balloon.py +++ b/Demo/tix/samples/Balloon.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/BtnBox.py b/Demo/tix/samples/BtnBox.py --- a/Demo/tix/samples/BtnBox.py +++ b/Demo/tix/samples/BtnBox.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/CmpImg.py b/Demo/tix/samples/CmpImg.py --- a/Demo/tix/samples/CmpImg.py +++ b/Demo/tix/samples/CmpImg.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/ComboBox.py b/Demo/tix/samples/ComboBox.py --- a/Demo/tix/samples/ComboBox.py +++ b/Demo/tix/samples/ComboBox.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/Control.py b/Demo/tix/samples/Control.py --- a/Demo/tix/samples/Control.py +++ b/Demo/tix/samples/Control.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/DirList.py b/Demo/tix/samples/DirList.py --- a/Demo/tix/samples/DirList.py +++ b/Demo/tix/samples/DirList.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/DirTree.py b/Demo/tix/samples/DirTree.py --- a/Demo/tix/samples/DirTree.py +++ b/Demo/tix/samples/DirTree.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/NoteBook.py b/Demo/tix/samples/NoteBook.py --- a/Demo/tix/samples/NoteBook.py +++ b/Demo/tix/samples/NoteBook.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/OptMenu.py b/Demo/tix/samples/OptMenu.py --- a/Demo/tix/samples/OptMenu.py +++ b/Demo/tix/samples/OptMenu.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/PanedWin.py b/Demo/tix/samples/PanedWin.py --- a/Demo/tix/samples/PanedWin.py +++ b/Demo/tix/samples/PanedWin.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/PopMenu.py b/Demo/tix/samples/PopMenu.py --- a/Demo/tix/samples/PopMenu.py +++ b/Demo/tix/samples/PopMenu.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/SHList1.py b/Demo/tix/samples/SHList1.py --- a/Demo/tix/samples/SHList1.py +++ b/Demo/tix/samples/SHList1.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/tix/samples/SHList2.py b/Demo/tix/samples/SHList2.py --- a/Demo/tix/samples/SHList2.py +++ b/Demo/tix/samples/SHList2.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidget": it must have a diff --git a/Demo/tix/samples/Tree.py b/Demo/tix/samples/Tree.py --- a/Demo/tix/samples/Tree.py +++ b/Demo/tix/samples/Tree.py @@ -2,7 +2,7 @@ # # $Id$ # -# Tix Demostration Program +# Tix Demonstration Program # # This sample program is structured in such a way so that it can be # executed from the Tix demo program "tixwidgets.py": it must have a diff --git a/Demo/turtle/tdemo_I_dontlike_tiltdemo.py b/Demo/turtle/tdemo_I_dontlike_tiltdemo.py --- a/Demo/turtle/tdemo_I_dontlike_tiltdemo.py +++ b/Demo/turtle/tdemo_I_dontlike_tiltdemo.py @@ -3,7 +3,7 @@ tdemo-I_dont_like_tiltdemo.py -Demostrates +Demonstrates (a) use of a tilted ellipse as turtle shape (b) stamping that shape diff --git a/Doc/howto/sockets.rst b/Doc/howto/sockets.rst --- a/Doc/howto/sockets.rst +++ b/Doc/howto/sockets.rst @@ -110,7 +110,7 @@ There's actually 3 general ways in which this loop could work - dispatching a thread to handle ``clientsocket``, create a new process to handle ``clientsocket``, or restructure this app to use non-blocking sockets, and -mulitplex between our "server" socket and any active ``clientsocket``\ s using +multiplex between our "server" socket and any active ``clientsocket``\ s using ``select``. More about that later. The important thing to understand now is this: this is *all* a "server" socket does. It doesn't send any data. It doesn't receive any data. It just produces "client" sockets. Each ``clientsocket`` is diff --git a/Include/longobject.h b/Include/longobject.h --- a/Include/longobject.h +++ b/Include/longobject.h @@ -110,7 +110,7 @@ example, if is_signed is 0 and there are more digits in the v than fit in n; or if is_signed is 1, v < 0, and n is just 1 bit shy of being large enough to hold a sign bit. OverflowError is set in this - case, but bytes holds the least-signficant n bytes of the true value. + case, but bytes holds the least-significant n bytes of the true value. */ PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v, unsigned char* bytes, size_t n, diff --git a/Lib/ctypes/test/test_numbers.py b/Lib/ctypes/test/test_numbers.py --- a/Lib/ctypes/test/test_numbers.py +++ b/Lib/ctypes/test/test_numbers.py @@ -76,7 +76,7 @@ self.assertEqual(t(v).value, truth(v)) def test_typeerror(self): - # Only numbers are allowed in the contructor, + # Only numbers are allowed in the constructor, # otherwise TypeError is raised for t in signed_types + unsigned_types + float_types: self.assertRaises(TypeError, t, "") diff --git a/Lib/ctypes/test/test_structures.py b/Lib/ctypes/test/test_structures.py --- a/Lib/ctypes/test/test_structures.py +++ b/Lib/ctypes/test/test_structures.py @@ -106,7 +106,7 @@ self.assertEqual(alignment(XX), alignment(X)) self.assertEqual(sizeof(XX), calcsize("3s 3s 0s")) - def test_emtpy(self): + def test_empty(self): # I had problems with these # # Although these are pathological cases: Empty Structures! diff --git a/Lib/idlelib/CallTipWindow.py b/Lib/idlelib/CallTipWindow.py --- a/Lib/idlelib/CallTipWindow.py +++ b/Lib/idlelib/CallTipWindow.py @@ -9,7 +9,7 @@ HIDE_SEQUENCES = ("", "") CHECKHIDE_VIRTUAL_EVENT_NAME = "<>" CHECKHIDE_SEQUENCES = ("", "") -CHECKHIDE_TIME = 100 # miliseconds +CHECKHIDE_TIME = 100 # milliseconds MARK_RIGHT = "calltipwindowregion_right" diff --git a/Lib/idlelib/ParenMatch.py b/Lib/idlelib/ParenMatch.py --- a/Lib/idlelib/ParenMatch.py +++ b/Lib/idlelib/ParenMatch.py @@ -9,7 +9,7 @@ from idlelib.configHandler import idleConf _openers = {')':'(',']':'[','}':'{'} -CHECK_DELAY = 100 # miliseconds +CHECK_DELAY = 100 # milliseconds class ParenMatch: """Highlight matching parentheses diff --git a/Lib/platform.py b/Lib/platform.py --- a/Lib/platform.py +++ b/Lib/platform.py @@ -63,7 +63,7 @@ # though # 0.5.2 - fixed uname() to return '' instead of 'unknown' in all # return values (the system uname command tends to return -# 'unknown' instead of just leaving the field emtpy) +# 'unknown' instead of just leaving the field empty) # 0.5.1 - included code for slackware dist; added exception handlers # to cover up situations where platforms don't have os.popen # (e.g. Mac) or fail on socket.gethostname(); fixed libc diff --git a/Lib/test/test_cookielib.py b/Lib/test/test_cookielib.py --- a/Lib/test/test_cookielib.py +++ b/Lib/test/test_cookielib.py @@ -346,7 +346,7 @@ ## comma-separated list, it'll be a headache to parse (at least my head ## starts hurting every time I think of that code). ## - Expires: You'll get all sorts of date formats in the expires, -## including emtpy expires attributes ("expires="). Be as flexible as you +## including empty expires attributes ("expires="). Be as flexible as you ## can, and certainly don't expect the weekday to be there; if you can't ## parse it, just ignore it and pretend it's a session cookie. ## - Domain-matching: Netscape uses the 2-dot rule for _all_ domains, not diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py --- a/Lib/test/test_deque.py +++ b/Lib/test/test_deque.py @@ -329,7 +329,7 @@ d.clear() self.assertEqual(len(d), 0) self.assertEqual(list(d), []) - d.clear() # clear an emtpy deque + d.clear() # clear an empty deque self.assertEqual(list(d), []) def test_remove(self): diff --git a/Lib/test/test_structseq.py b/Lib/test/test_structseq.py --- a/Lib/test/test_structseq.py +++ b/Lib/test/test_structseq.py @@ -88,7 +88,7 @@ class Exc(Exception): pass - # Devious code could crash structseqs' contructors + # Devious code could crash structseqs' constructors class C: def __getitem__(self, i): raise Exc diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py --- a/Lib/unittest/case.py +++ b/Lib/unittest/case.py @@ -529,7 +529,7 @@ between the two objects is more than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). If the two objects compare equal then they will automatically compare almost equal. @@ -567,7 +567,7 @@ between the two objects is less than the given delta. Note that decimal places (from zero) are usually not the same - as significant digits (measured from the most signficant digit). + as significant digits (measured from the most significant digit). Objects that are equal automatically fail. """ diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -7975,7 +7975,7 @@ mailbox.MH.get_message(). - Issue #5585: Add the ability to call an initializer to - mulitiprocessing.manager so that users can install custom handlers/etc. + multiprocessing.manager so that users can install custom handlers/etc. - Issue #3551: Patch multiprocessing to raise a proper exception if the size of the object when writefile is called causes an ERROR_NO_SYSTEM_RESOURCES. Added @@ -10173,7 +10173,7 @@ module is: from future_builtins import hex, oct -- Issue #1600: Modifed PyOS_ascii_formatd to use at most 2 digit +- Issue #1600: Modified PyOS_ascii_formatd to use at most 2 digit exponents for exponents with absolute value < 100. Follows C99 standard. This is a change on Windows, which would use 3 digits. Also, added 'n' to the formats that PyOS_ascii_formatd understands, diff --git a/Misc/cheatsheet b/Misc/cheatsheet --- a/Misc/cheatsheet +++ b/Misc/cheatsheet @@ -434,7 +434,7 @@ defaultVal, and adds k to map with value defaultVal. defaultVal is optional. When not provided and k is not in the map, None is returned and added to map. - (6) Raises a KeyError if the dictionary is emtpy. + (6) Raises a KeyError if the dictionary is empty. (7) While iterating over a dictionary, the values may be updated but the keys cannot be changed. diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -366,7 +366,7 @@ /* PyCStructType_Type - a meta type/class. Creating a new class using this one as - __metaclass__ will call the contructor StructUnionType_new. It replaces the + __metaclass__ will call the constructor StructUnionType_new. It replaces the tp_dict member with a new instance of StgDict, and initializes the C accessible fields somehow. */ diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -1747,7 +1747,7 @@ PyDoc_STRVAR(chain_from_iterable_doc, "chain.from_iterable(iterable) --> chain object\n\ \n\ -Alternate chain() contructor taking a single iterable argument\n\ +Alternate chain() constructor taking a single iterable argument\n\ that evaluates lazily."); static PyMethodDef chain_methods[] = { diff --git a/Objects/exceptions.c b/Objects/exceptions.c --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -1640,7 +1640,7 @@ return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -1729,7 +1729,7 @@ return PyUnicode_FromString(""); /* Get reason and encoding as strings, which they might not be if - they've been modified after we were contructed. */ + they've been modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; @@ -1830,7 +1830,7 @@ return PyUnicode_FromString(""); /* Get reason as a string, which it might not be if it's been - modified after we were contructed. */ + modified after we were constructed. */ reason_str = PyObject_Str(uself->reason); if (reason_str == NULL) goto done; diff --git a/Objects/longobject.c b/Objects/longobject.c --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -556,10 +556,10 @@ size_t i; const unsigned char* p = pendbyte; const int pincr = -incr; /* search MSB to LSB */ - const unsigned char insignficant = is_signed ? 0xff : 0x00; + const unsigned char insignificant = is_signed ? 0xff : 0x00; for (i = 0; i < n; ++i, p += pincr) { - if (*p != insignficant) + if (*p != insignificant) break; } numsignificantbytes = n - i; diff --git a/Tools/freeze/freeze.py b/Tools/freeze/freeze.py --- a/Tools/freeze/freeze.py +++ b/Tools/freeze/freeze.py @@ -159,7 +159,7 @@ except getopt.error, msg: usage('getopt error: ' + str(msg)) - # proces option arguments + # process option arguments for o, a in opts: if o == '-h': print __doc__ diff --git a/Tools/scripts/redemo.py b/Tools/scripts/redemo.py --- a/Tools/scripts/redemo.py +++ b/Tools/scripts/redemo.py @@ -1,5 +1,5 @@ #!/usr/bin/env python -"""Basic regular expression demostration facility (Perl style syntax).""" +"""Basic regular expression demonstration facility (Perl style syntax).""" from Tkinter import * import re -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 00:20:03 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 04:20:03 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzIzOTQz?= =?utf-8?q?=3A_Restore_extra_fixes_lost_in_merge_4fb2075952a4?= Message-ID: <20160728042003.21198.3569.664DCC40@psf.io> https://hg.python.org/cpython/rev/48f074e2afcf changeset: 102473:48f074e2afcf branch: 3.5 parent: 102464:6080d720cbf5 user: Martin Panter date: Thu Jul 28 03:48:29 2016 +0000 summary: Issue #23943: Restore extra fixes lost in merge 4fb2075952a4 files: Misc/HISTORY | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Misc/HISTORY b/Misc/HISTORY --- a/Misc/HISTORY +++ b/Misc/HISTORY @@ -21545,7 +21545,7 @@ Bow to font-lock at the end of the docstring, since it throws stuff off. - Make sure the path paramter to readmodule() is a list before adding it + Make sure the path parameter to readmodule() is a list before adding it with sys.path, or the addition could fail. @@ -23597,7 +23597,7 @@ - The warning about a thread still having a frame now only happens in verbose mode. -- Change the signal finialization so that it also resets the signal +- Change the signal finalization so that it also resets the signal handlers. After this has been called, our signal handlers are no longer active! -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 00:20:03 2016 From: python-checkins at python.org (martin.panter) Date: Thu, 28 Jul 2016 04:20:03 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2323943=3A_Merge_spelling_fixes_from_3=2E5?= Message-ID: <20160728042003.7050.85391.36A7175E@psf.io> https://hg.python.org/cpython/rev/0026d94d45e6 changeset: 102474:0026d94d45e6 parent: 102469:e4a2d78aa6cc parent: 102473:48f074e2afcf user: Martin Panter date: Thu Jul 28 03:53:59 2016 +0000 summary: Issue #23943: Merge spelling fixes from 3.5 files: Misc/HISTORY | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Misc/HISTORY b/Misc/HISTORY --- a/Misc/HISTORY +++ b/Misc/HISTORY @@ -21545,7 +21545,7 @@ Bow to font-lock at the end of the docstring, since it throws stuff off. - Make sure the path paramter to readmodule() is a list before adding it + Make sure the path parameter to readmodule() is a list before adding it with sys.path, or the addition could fail. @@ -23597,7 +23597,7 @@ - The warning about a thread still having a frame now only happens in verbose mode. -- Change the signal finialization so that it also resets the signal +- Change the signal finalization so that it also resets the signal handlers. After this has been called, our signal handlers are no longer active! -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Thu Jul 28 10:37:43 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Thu, 28 Jul 2016 15:37:43 +0100 Subject: [Python-checkins] BAD Benchmark Results for Python 2.7 2016-07-28 Message-ID: <0138a10c-0d0d-4dfb-8c51-148a1c1022a1@irsmsx151.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-28 02:47:53 +0000 commit: 7d692840c152 previous commit: 55b6e51b878b revision date: 2016-07-27 14:58:47 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.17% -1.73% 3.32% 9.19% :-) pybench 0.24% 0.05% 5.77% 5.48% :-( regex_v8 0.64% 0.11% -2.27% 10.99% :-) nbody 0.28% -0.01% 8.60% 3.56% :-| json_dump_v2 0.32% 0.22% 1.76% 11.96% :-( normal_startup 1.67% 0.20% -5.57% 2.01% :-) ssbench 0.21% 0.22% 2.67% 1.60% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/bad-benchmark-results-for-python-2-7-2016-07-28/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Thu Jul 28 10:41:45 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Thu, 28 Jul 2016 15:41:45 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-28 Message-ID: Results for project Python default, build date 2016-07-28 02:02:03 +0000 commit: 2468581846da previous commit: 95df96aa2f5a revision date: 2016-07-28 01:42:54 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.51% -0.84% 9.57% 14.69% :-| pybench 0.06% -0.03% 1.83% 7.24% :-( regex_v8 2.76% -0.16% -3.03% 3.82% :-( nbody 0.27% -0.27% -2.26% 12.05% :-| json_dump_v2 0.38% 0.03% -1.57% 11.93% :-| normal_startup 0.90% -0.35% -0.00% 5.06% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-28/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Thu Jul 28 11:09:14 2016 From: python-checkins at python.org (victor.stinner) Date: Thu, 28 Jul 2016 15:09:14 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogTWVyZ2UgMy41IChpc3N1ZSAjMjc0MDQp?= Message-ID: <20160728150911.10853.25890.7D4E2A9E@psf.io> https://hg.python.org/cpython/rev/6a2de662eeb7 changeset: 102476:6a2de662eeb7 parent: 102474:0026d94d45e6 parent: 102475:a576a34f5386 user: Victor Stinner date: Thu Jul 28 17:08:52 2016 +0200 summary: Merge 3.5 (issue #27404) files: Misc/NEWS | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -183,7 +183,7 @@ when exiting, let the new chained one through. This avoids the PEP 479 bug described in issue25782. -- Issue #27278: Fix os.urandom() implementation using getrandom() on Linux. +- [Security] Issue #27278: Fix os.urandom() implementation using getrandom() on Linux. Truncate size to INT_MAX and loop until we collected enough random bytes, instead of casting a directly Py_ssize_t to int. @@ -196,7 +196,7 @@ - Issue #8637: Honor a pager set by the env var MANPAGER (in preference to one set by the env var PAGER). -- Issue #22636: Avoid shell injection problems with +- [Security] Issue #22636: Avoid shell injection problems with ctypes.util.find_library(). - Issue #16182: Fix various functions in the "readline" module to use the @@ -348,9 +348,9 @@ - Issue #20508: Improve exception message of IPv{4,6}Network.__getitem__. Patch by Gareth Rees. -- Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. - -- Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team +- [Security] Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. + +- [Security] Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team Oststrom - Issue #21386: Implement missing IPv4Address.is_global property. It was @@ -393,7 +393,7 @@ - Issue #21313: Fix the "platform" module to tolerate when sys.version contains truncated build information. -- Issue #26839: On Linux, :func:`os.urandom` now calls ``getrandom()`` with +- [Security] Issue #26839: On Linux, :func:`os.urandom` now calls ``getrandom()`` with ``GRND_NONBLOCK`` to fall back on reading ``/dev/urandom`` if the urandom entropy pool is not initialized yet. Patch written by Colm Buckley. @@ -988,7 +988,7 @@ - Issue #24838: tarfile's ustar and gnu formats now correctly calculate name and link field limits for multibyte character encodings like utf-8. -- Issue #26657: Fix directory traversal vulnerability with http.server on +- [Security] Issue #26657: Fix directory traversal vulnerability with http.server on Windows. This fixes a regression that was introduced in 3.3.4rc1 and 3.4.0rc1. Based on patch by Philipp Hagemeister. @@ -1094,7 +1094,7 @@ :class:`warnings.WarningMessage`. Add warnings._showwarnmsg() which uses tracemalloc to get the traceback where source object was allocated. -- Issue #26313: ssl.py _load_windows_store_certs fails if windows cert store +- [Security] Issue #26313: ssl.py _load_windows_store_certs fails if windows cert store is empty. Patch by Baji. - Issue #26569: Fix :func:`pyclbr.readmodule` and :func:`pyclbr.readmodule_ex` @@ -1177,7 +1177,7 @@ trigger the handle_error() method, and will now to stop a single-threaded server. -- Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates. +- [Security] Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates. - Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 11:09:14 2016 From: python-checkins at python.org (victor.stinner) Date: Thu, 28 Jul 2016 15:09:14 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogTkVXUzogdGFnIHNl?= =?utf-8?q?curity_related_changes_with_=5BSecurity=5D_prefix?= Message-ID: <20160728150910.6816.29236.B4ABD1FE@psf.io> https://hg.python.org/cpython/rev/a576a34f5386 changeset: 102475:a576a34f5386 branch: 3.5 parent: 102473:48f074e2afcf user: Victor Stinner date: Thu Jul 28 17:06:25 2016 +0200 summary: NEWS: tag security related changes with [Security] prefix Issue #27404. files: Misc/NEWS | 20 ++++++++++---------- 1 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -86,14 +86,14 @@ when exiting, let the new chained one through. This avoids the PEP 479 bug described in issue25782. -- Issue #27278: Fix os.urandom() implementation using getrandom() on Linux. +- [Security] Issue #27278: Fix os.urandom() implementation using getrandom() on Linux. Truncate size to INT_MAX and loop until we collected enough random bytes, instead of casting a directly Py_ssize_t to int. - Issue #26386: Fixed ttk.TreeView selection operations with item id's containing spaces. -- Issue #22636: Avoid shell injection problems with +- [Security] Issue #22636: Avoid shell injection problems with ctypes.util.find_library(). - Issue #16182: Fix various functions in the "readline" module to use the @@ -309,10 +309,10 @@ Library ------- -- Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. - -- Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. Reported by Team - Oststrom +- [Security] Issue #26556: Update expat to 2.1.1, fixes CVE-2015-1283. + +- [Security] Fix TLS stripping vulnerability in smtplib, CVE-2016-0772. + Reported by Team Oststrom - Issue #21386: Implement missing IPv4Address.is_global property. It was documented since 07a5610bae9d. Initial patch by Roger Luethi. @@ -336,7 +336,7 @@ - Issue #21313: Fix the "platform" module to tolerate when sys.version contains truncated build information. -- Issue #26839: On Linux, :func:`os.urandom` now calls ``getrandom()`` with +- [Security] Issue #26839: On Linux, :func:`os.urandom` now calls ``getrandom()`` with ``GRND_NONBLOCK`` to fall back on reading ``/dev/urandom`` if the urandom entropy pool is not initialized yet. Patch written by Colm Buckley. @@ -444,7 +444,7 @@ - Issue #24838: tarfile's ustar and gnu formats now correctly calculate name and link field limits for multibyte character encodings like utf-8. -- Issue #26657: Fix directory traversal vulnerability with http.server on +- [Security] Issue #26657: Fix directory traversal vulnerability with http.server on Windows. This fixes a regression that was introduced in 3.3.4rc1 and 3.4.0rc1. Based on patch by Philipp Hagemeister. @@ -493,7 +493,7 @@ - Issue #26560: Avoid potential ValueError in BaseHandler.start_response. Initial patch by Peter Inglesby. -- Issue #26313: ssl.py _load_windows_store_certs fails if windows cert store +- [Security] Issue #26313: ssl.py _load_windows_store_certs fails if windows cert store is empty. Patch by Baji. - Issue #26569: Fix :func:`pyclbr.readmodule` and :func:`pyclbr.readmodule_ex` @@ -555,7 +555,7 @@ the connected socket) when verify_request() returns false. Patch by Aviv Palivoda. -- Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates. +- [Security] Issue #25939: On Windows open the cert store readonly in ssl.enum_certificates. - Issue #25995: os.walk() no longer uses FDs proportional to the tree depth. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 19:57:53 2016 From: python-checkins at python.org (zach.ware) Date: Thu, 28 Jul 2016 23:57:53 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327647=3A_Update_W?= =?utf-8?q?indows_build_to_Tcl/Tk_8=2E6=2E6?= Message-ID: <20160728235753.26491.34545.F129FD49@psf.io> https://hg.python.org/cpython/rev/abfda075eb37 changeset: 102477:abfda075eb37 user: Zachary Ware date: Thu Jul 28 18:39:11 2016 -0500 summary: Issue #27647: Update Windows build to Tcl/Tk 8.6.6 files: Misc/NEWS | 2 ++ PCbuild/get_externals.bat | 4 ++-- PCbuild/readme.txt | 2 +- PCbuild/tcltk.props | 6 +++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -70,6 +70,8 @@ Windows ------- +- Issue #27647: Update bundled Tcl/Tk to 8.6.6. + - Issue #27610: Adds PEP 514 metadata to Windows installer - Issue #27469: Adds a shell extension to the launcher so that drag and drop diff --git a/PCbuild/get_externals.bat b/PCbuild/get_externals.bat --- a/PCbuild/get_externals.bat +++ b/PCbuild/get_externals.bat @@ -56,8 +56,8 @@ if NOT "%IncludeSSL%"=="false" set libraries=%libraries% nasm-2.11.06 if NOT "%IncludeSSL%"=="false" set libraries=%libraries% openssl-1.0.2h set libraries=%libraries% sqlite-3.8.11.0 -if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-core-8.6.4.2 -if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tk-8.6.4.2 +if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tcl-core-8.6.6.0 +if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tk-8.6.6.0 if NOT "%IncludeTkinter%"=="false" set libraries=%libraries% tix-8.4.3.6 set libraries=%libraries% xz-5.0.5 diff --git a/PCbuild/readme.txt b/PCbuild/readme.txt --- a/PCbuild/readme.txt +++ b/PCbuild/readme.txt @@ -208,7 +208,7 @@ Homepage: http://www.sqlite.org/ _tkinter - Wraps version 8.6.4 of the Tk windowing system. + Wraps version 8.6.6 of the Tk windowing system. Homepage: http://www.tcl.tk/ diff --git a/PCbuild/tcltk.props b/PCbuild/tcltk.props --- a/PCbuild/tcltk.props +++ b/PCbuild/tcltk.props @@ -4,8 +4,8 @@ 8 6 - 4 - 2 + 6 + 0 $(TclMajorVersion) $(TclMinorVersion) $(TclPatchLevel) @@ -42,4 +42,4 @@ $(BuildDirTop)_VC11 $(BuildDirTop)_VC10 -
    \ No newline at end of file + -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 20:01:18 2016 From: python-checkins at python.org (zach.ware) Date: Fri, 29 Jul 2016 00:01:18 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Correct_typo_i?= =?utf-8?q?n_Windows_docs=2E?= Message-ID: <20160729000118.129017.52913.CB21F8AB@psf.io> https://hg.python.org/cpython/rev/7edabbbaffa4 changeset: 102478:7edabbbaffa4 branch: 3.5 parent: 102475:a576a34f5386 user: Zachary Ware date: Thu Jul 28 19:00:53 2016 -0500 summary: Correct typo in Windows docs. Found by Jack Copper on docs@ files: Doc/using/windows.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -54,7 +54,7 @@ users) * Python will be installed into your user directory * The :ref:`launcher` will be installed according to the option at the bottom - of the first pace + of the first page * The standard library, test suite, launcher and pip will be installed * If selected, the install directory will be added to your :envvar:`PATH` * Shortcuts will only be visible for the current user -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 20:01:18 2016 From: python-checkins at python.org (zach.ware) Date: Fri, 29 Jul 2016 00:01:18 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_with_3=2E5?= Message-ID: <20160729000118.23913.62977.24B07974@psf.io> https://hg.python.org/cpython/rev/9b135b8d3166 changeset: 102479:9b135b8d3166 parent: 102477:abfda075eb37 parent: 102478:7edabbbaffa4 user: Zachary Ware date: Thu Jul 28 19:01:09 2016 -0500 summary: Merge with 3.5 files: Doc/using/windows.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/using/windows.rst b/Doc/using/windows.rst --- a/Doc/using/windows.rst +++ b/Doc/using/windows.rst @@ -54,7 +54,7 @@ users) * Python will be installed into your user directory * The :ref:`launcher` will be installed according to the option at the bottom - of the first pace + of the first page * The standard library, test suite, launcher and pip will be installed * If selected, the install directory will be added to your :envvar:`PATH` * Shortcuts will only be visible for the current user -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 22:34:39 2016 From: python-checkins at python.org (martin.panter) Date: Fri, 29 Jul 2016 02:34:39 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI2NDYy?= =?utf-8?q?=3A_Doc=3A_reduce_literal=5Fblock_warnings=2C_fix_syntax_highli?= =?utf-8?q?ghting=2E?= Message-ID: <20160729023439.1556.16337.DA0CDECA@psf.io> https://hg.python.org/cpython/rev/8ba0000c90be changeset: 102480:8ba0000c90be branch: 3.5 parent: 102478:7edabbbaffa4 user: Martin Panter date: Tue Jul 26 11:18:21 2016 +0200 summary: Issue #26462: Doc: reduce literal_block warnings, fix syntax highlighting. Patch by Julien Palard. files: Doc/distutils/examples.rst | 12 ++++- Doc/distutils/packageindex.rst | 4 +- Doc/distutils/sourcedist.rst | 4 +- Doc/extending/building.rst | 9 ++- Doc/extending/embedding.rst | 20 ++++++--- Doc/extending/extending.rst | 5 +- Doc/extending/newtypes.rst | 5 +- Doc/faq/extending.rst | 16 +++++- Doc/howto/clinic.rst | 4 +- Doc/howto/logging-cookbook.rst | 20 +++++++-- Doc/howto/logging.rst | 17 +++++-- Doc/howto/regex.rst | 4 +- Doc/howto/unicode.rst | 4 +- Doc/library/2to3.rst | 28 ++++++++++--- Doc/library/argparse.rst | 20 +++++++-- Doc/library/ast.rst | 1 + Doc/library/asyncio-dev.rst | 16 +++++- Doc/library/cgi.rst | 5 +- Doc/library/cmd.rst | 5 +- Doc/library/decimal.rst | 2 +- Doc/library/doctest.rst | 16 +++++- Doc/library/email-examples.rst | 4 +- Doc/library/html.parser.rst | 4 +- Doc/library/idle.rst | 2 +- Doc/library/logging.config.rst | 37 ++++++++++++----- Doc/library/optparse.rst | 12 ++++- Doc/library/pickletools.rst | 5 +- Doc/library/pyexpat.rst | 4 +- Doc/library/shutil.rst | 4 +- Doc/library/socketserver.rst | 12 ++++- Doc/library/subprocess.rst | 21 ++++++--- Doc/library/sys.rst | 4 +- Doc/library/sysconfig.rst | 4 +- Doc/library/tarfile.rst | 20 +++++++-- Doc/library/zipimport.rst | 4 +- Doc/reference/expressions.rst | 4 +- Doc/reference/lexical_analysis.rst | 17 ++++++- Doc/tutorial/controlflow.rst | 4 +- Doc/tutorial/interpreter.rst | 4 +- Doc/tutorial/modules.rst | 4 +- Doc/whatsnew/2.3.rst | 13 ++++- Doc/whatsnew/2.4.rst | 4 +- Doc/whatsnew/2.7.rst | 5 +- Doc/whatsnew/3.0.rst | 4 +- Doc/whatsnew/3.2.rst | 35 ++++++++++++---- Doc/whatsnew/3.3.rst | 5 +- Doc/whatsnew/3.5.rst | 4 +- 47 files changed, 329 insertions(+), 128 deletions(-) diff --git a/Doc/distutils/examples.rst b/Doc/distutils/examples.rst --- a/Doc/distutils/examples.rst +++ b/Doc/distutils/examples.rst @@ -245,7 +245,9 @@ setup(name='foobar') -Running the ``check`` command will display some warnings:: +Running the ``check`` command will display some warnings: + +.. code-block:: shell-session $ python setup.py check running check @@ -274,7 +276,9 @@ url='http://example.com', long_description=desc) Where the long description is broken, ``check`` will be able to detect it -by using the :mod:`docutils` parser:: +by using the :mod:`docutils` parser: + +.. code-block:: shell-session $ python setup.py check --restructuredtext running check @@ -286,7 +290,9 @@ The :func:`distutils.core.setup` function provides a command-line interface that allows you to query the metadata fields of a project through the -``setup.py`` script of a given project:: +``setup.py`` script of a given project: + +.. code-block:: shell-session $ python setup.py --name distribute diff --git a/Doc/distutils/packageindex.rst b/Doc/distutils/packageindex.rst --- a/Doc/distutils/packageindex.rst +++ b/Doc/distutils/packageindex.rst @@ -233,7 +233,9 @@ To prevent registering broken reStructuredText content, you can use the :program:`rst2html` program that is provided by the :mod:`docutils` package and -check the ``long_description`` from the command line:: +check the ``long_description`` from the command line: + +.. code-block:: shell-session $ python setup.py --long-description | rst2html.py > output.html diff --git a/Doc/distutils/sourcedist.rst b/Doc/distutils/sourcedist.rst --- a/Doc/distutils/sourcedist.rst +++ b/Doc/distutils/sourcedist.rst @@ -133,7 +133,9 @@ The manifest template has one command per line, where each command specifies a set of files to include or exclude from the source distribution. For an -example, again we turn to the Distutils' own manifest template:: +example, again we turn to the Distutils' own manifest template: + +.. code-block:: none include *.txt recursive-include examples *.txt *.py diff --git a/Doc/extending/building.rst b/Doc/extending/building.rst --- a/Doc/extending/building.rst +++ b/Doc/extending/building.rst @@ -55,7 +55,9 @@ necessarily need a compiler and distutils to install the extension. A distutils package contains a driver script, :file:`setup.py`. This is a plain -Python file, which, in the most simple case, could look like this:: +Python file, which, in the most simple case, could look like this: + +.. code-block:: python3 from distutils.core import setup, Extension @@ -96,7 +98,9 @@ In many cases, building an extension is more complex, since additional preprocessor defines and libraries may be needed. This is demonstrated in the -example below. :: +example below. + +.. code-block:: python3 from distutils.core import setup, Extension @@ -161,4 +165,3 @@ python setup.py bdist_wininst python setup.py bdist_rpm python setup.py bdist_dumb - diff --git a/Doc/extending/embedding.rst b/Doc/extending/embedding.rst --- a/Doc/extending/embedding.rst +++ b/Doc/extending/embedding.rst @@ -155,7 +155,9 @@ c = c + b return c -then the result should be:: +then the result should be: + +.. code-block:: shell-session $ call multiply multiply 3 2 Will compute 3 times 2 @@ -289,16 +291,20 @@ be directly useful to you: * ``pythonX.Y-config --cflags`` will give you the recommended flags when - compiling:: + compiling: - $ /opt/bin/python3.4-config --cflags - -I/opt/include/python3.4m -I/opt/include/python3.4m -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes + .. code-block:: shell-session + + $ /opt/bin/python3.4-config --cflags + -I/opt/include/python3.4m -I/opt/include/python3.4m -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes * ``pythonX.Y-config --ldflags`` will give you the recommended flags when - linking:: + linking: - $ /opt/bin/python3.4-config --ldflags - -L/opt/lib/python3.4/config-3.4m -lpthread -ldl -lutil -lm -lpython3.4m -Xlinker -export-dynamic + .. code-block:: shell-session + + $ /opt/bin/python3.4-config --ldflags + -L/opt/lib/python3.4/config-3.4m -lpthread -ldl -lutil -lm -lpython3.4m -Xlinker -export-dynamic .. note:: To avoid confusion between several Python installations (and especially diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -792,7 +792,9 @@ format unit, it returns whatever object is described by that format unit. To force it to return a tuple of size 0 or one, parenthesize the format string. -Examples (to the left the call, to the right the resulting Python value):: +Examples (to the left the call, to the right the resulting Python value): + +.. code-block:: none Py_BuildValue("") None Py_BuildValue("i", 123) 123 @@ -1348,4 +1350,3 @@ .. [#] These guarantees don't hold when you use the "old" style calling convention --- this is still found in much existing code. - diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst --- a/Doc/extending/newtypes.rst +++ b/Doc/extending/newtypes.rst @@ -209,7 +209,9 @@ setup(name="noddy", version="1.0", ext_modules=[Extension("noddy", ["noddy.c"])]) -in a file called :file:`setup.py`; then typing :: +in a file called :file:`setup.py`; then typing + +.. code-block:: shell-session $ python setup.py build @@ -1513,4 +1515,3 @@ .. [#] Even in the third version, we aren't guaranteed to avoid cycles. Instances of string subclasses are allowed and string subclasses could allow cycles even if normal strings don't. - diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst --- a/Doc/faq/extending.rst +++ b/Doc/faq/extending.rst @@ -146,7 +146,9 @@ just allow the standard traceback mechanism to work. Then, the output will go wherever your ``write()`` method sends it. -The easiest way to do this is to use the :class:`io.StringIO` class:: +The easiest way to do this is to use the :class:`io.StringIO` class: + +.. code-block:: pycon >>> import io, sys >>> sys.stdout = io.StringIO() @@ -156,7 +158,9 @@ foo hello world! -A custom object to do the same would look like this:: +A custom object to do the same would look like this: + +.. code-block:: pycon >>> import io, sys >>> class StdoutCatcher(io.TextIOBase): @@ -222,11 +226,15 @@ When using GDB with dynamically loaded extensions, you can't set a breakpoint in your extension until your extension is loaded. -In your ``.gdbinit`` file (or interactively), add the command:: +In your ``.gdbinit`` file (or interactively), add the command: + +.. code-block:: none br _PyImport_LoadDynamicModule -Then, when you run GDB:: +Then, when you run GDB: + +.. code-block:: shell-session $ gdb /local/bin/python gdb) run myscript.py diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst --- a/Doc/howto/clinic.rst +++ b/Doc/howto/clinic.rst @@ -152,7 +152,9 @@ For my example I'm using ``_pickle.Pickler.dump()``. 2. If the call to the ``PyArg_Parse`` function uses any of the - following format units:: + following format units: + + .. code-block:: none O& O! diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -377,7 +377,9 @@ root.warning('Look out!') listener.stop() -which, when run, will produce:: +which, when run, will produce: + +.. code-block:: none MainThread: Look out! @@ -1860,7 +1862,9 @@ logger = logging.getLogger('mylogger') logger.debug('A debug message') -To run this, you will probably need to run as ``root``:: +To run this, you will probably need to run as ``root``: + +.. code-block:: shell-session $ sudo python3.3 chowntest.py $ cat chowntest.log @@ -2485,7 +2489,9 @@ completion, the status is as it was before so message #6 appears (like message #1) whereas message #7 doesn't (just like message #2). -If we run the resulting script, the result is as follows:: +If we run the resulting script, the result is as follows: + +.. code-block:: shell-session $ python logctx.py 1. This should appear just once on stderr. @@ -2495,12 +2501,16 @@ 6. This should appear just once on stderr. If we run it again, but pipe ``stderr`` to ``/dev/null``, we see the following, -which is the only message written to ``stdout``:: +which is the only message written to ``stdout``: + +.. code-block:: shell-session $ python logctx.py 2>/dev/null 5. This should appear twice - once on stderr and once on stdout. -Once again, but piping ``stdout`` to ``/dev/null``, we get:: +Once again, but piping ``stdout`` to ``/dev/null``, we get: + +.. code-block:: shell-session $ python logctx.py >/dev/null 1. This should appear just once on stderr. diff --git a/Doc/howto/logging.rst b/Doc/howto/logging.rst --- a/Doc/howto/logging.rst +++ b/Doc/howto/logging.rst @@ -106,7 +106,9 @@ logging.warning('Watch out!') # will print a message to the console logging.info('I told you so') # will not print anything -If you type these lines into a script and run it, you'll see:: +If you type these lines into a script and run it, you'll see: + +.. code-block:: none WARNING:root:Watch out! @@ -230,7 +232,9 @@ import logging logging.warning('%s before you %s', 'Look', 'leap!') -will display:: +will display: + +.. code-block:: none WARNING:root:Look before you leap! @@ -594,7 +598,9 @@ logger.error('error message') logger.critical('critical message') -Running this module from the command line produces the following output:: +Running this module from the command line produces the following output: + +.. code-block:: shell-session $ python simple_logging_module.py 2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message @@ -653,7 +659,9 @@ format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt= -The output is nearly identical to that of the non-config-file-based example:: +The output is nearly identical to that of the non-config-file-based example: + +.. code-block:: shell-session $ python simple_logging_config.py 2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message @@ -1073,4 +1081,3 @@ Useful handlers included with the logging module. :ref:`A logging cookbook ` - diff --git a/Doc/howto/regex.rst b/Doc/howto/regex.rst --- a/Doc/howto/regex.rst +++ b/Doc/howto/regex.rst @@ -74,7 +74,9 @@ devoted to discussing various metacharacters and what they do. Here's a complete list of the metacharacters; their meanings will be discussed -in the rest of this HOWTO. :: +in the rest of this HOWTO. + +.. code-block:: none . ^ $ * + ? { } [ ] \ | ( ) diff --git a/Doc/howto/unicode.rst b/Doc/howto/unicode.rst --- a/Doc/howto/unicode.rst +++ b/Doc/howto/unicode.rst @@ -613,7 +613,9 @@ print(os.listdir(b'.')) print(os.listdir('.')) -will produce the following output:: +will produce the following output: + +.. code-block:: shell-session amk:~$ python t.py [b'filename\xe4\x94\x80abc', ...] diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst --- a/Doc/library/2to3.rst +++ b/Doc/library/2to3.rst @@ -33,14 +33,18 @@ name = raw_input() greet(name) -It can be converted to Python 3.x code via 2to3 on the command line:: +It can be converted to Python 3.x code via 2to3 on the command line: + +.. code-block:: shell-session $ 2to3 example.py A diff against the original source file is printed. 2to3 can also write the needed modifications right back to the source file. (A backup of the original file is made unless :option:`-n` is also given.) Writing the changes back is -enabled with the :option:`-w` flag:: +enabled with the :option:`-w` flag: + +.. code-block:: shell-session $ 2to3 -w example.py @@ -57,17 +61,23 @@ By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`. The :option:`!-l` flag lists all available fixers. An explicit set of fixers to run can be given with :option:`-f`. Likewise the :option:`!-x` explicitly disables a -fixer. The following example runs only the ``imports`` and ``has_key`` fixers:: +fixer. The following example runs only the ``imports`` and ``has_key`` fixers: + +.. code-block:: shell-session $ 2to3 -f imports -f has_key example.py -This command runs every fixer except the ``apply`` fixer:: +This command runs every fixer except the ``apply`` fixer: + +.. code-block:: shell-session $ 2to3 -x apply example.py Some fixers are *explicit*, meaning they aren't run by default and must be listed on the command line to be run. Here, in addition to the default fixers, -the ``idioms`` fixer is run:: +the ``idioms`` fixer is run: + +.. code-block:: shell-session $ 2to3 -f all -f idioms example.py @@ -113,7 +123,9 @@ The :option:`--add-suffix` option specifies a string to append to all output filenames. The :option:`-n` flag is required when specifying this as backups -are not necessary when writing to different filenames. Example:: +are not necessary when writing to different filenames. Example: + +.. code-block:: shell-session $ 2to3 -n -W --add-suffix=3 example.py @@ -122,7 +134,9 @@ .. versionadded:: 3.2.3 The :option:`--add-suffix` option was added. -To translate an entire project from one directory tree to another use:: +To translate an entire project from one directory tree to another use: + +.. code-block:: shell-session $ 2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -45,7 +45,9 @@ print(args.accumulate(args.integers)) Assuming the Python code above is saved into a file called ``prog.py``, it can -be run at the command line and provides useful help messages:: +be run at the command line and provides useful help messages: + +.. code-block:: shell-session $ python prog.py -h usage: prog.py [-h] [--sum] N [N ...] @@ -60,7 +62,9 @@ --sum sum the integers (default: find the max) When run with the appropriate arguments, it prints either the sum or the max of -the command-line integers:: +the command-line integers: + +.. code-block:: shell-session $ python prog.py 1 2 3 4 4 @@ -68,7 +72,9 @@ $ python prog.py 1 2 3 4 --sum 10 -If invalid arguments are passed in, it will issue an error:: +If invalid arguments are passed in, it will issue an error: + +.. code-block:: shell-session $ python prog.py a b c usage: prog.py [-h] [--sum] N [N ...] @@ -194,7 +200,9 @@ args = parser.parse_args() The help for this program will display ``myprogram.py`` as the program name -(regardless of where the program was invoked from):: +(regardless of where the program was invoked from): + +.. code-block:: shell-session $ python myprogram.py --help usage: myprogram.py [-h] [--foo FOO] @@ -596,7 +604,9 @@ args = parser.parse_args() If ``-h`` or ``--help`` is supplied at the command line, the ArgumentParser -help will be printed:: +help will be printed: + +.. code-block:: shell-session $ python myprogram.py --help usage: myprogram.py [-h] [--foo FOO] diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -99,6 +99,7 @@ The abstract grammar is currently defined as follows: .. literalinclude:: ../../Parser/Python.asdl + :language: none :mod:`ast` Helpers diff --git a/Doc/library/asyncio-dev.rst b/Doc/library/asyncio-dev.rst --- a/Doc/library/asyncio-dev.rst +++ b/Doc/library/asyncio-dev.rst @@ -321,14 +321,18 @@ print("Pending tasks at exit: %s" % asyncio.Task.all_tasks(loop)) loop.close() -Expected output:: +Expected output: + +.. code-block:: none (1) create file (2) write into file (3) close file Pending tasks at exit: set() -Actual output:: +Actual output: + +.. code-block:: none (3) close file (2) write into file @@ -369,13 +373,17 @@ If a pending task is destroyed, the execution of its wrapped :ref:`coroutine ` did not complete. It is probably a bug and so a warning is logged. -Example of log:: +Example of log: + +.. code-block:: none Task was destroyed but it is pending! task: wait_for=> :ref:`Enable the debug mode of asyncio ` to get the -traceback where the task was created. Example of log in debug mode:: +traceback where the task was created. Example of log in debug mode: + +.. code-block:: none Task was destroyed but it is pending! source_traceback: Object created at (most recent call last): diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -442,7 +442,9 @@ invoked as a script, the file will dump its environment and the contents of the form in HTML form. Give it the right mode etc, and send it a request. If it's installed in the standard :file:`cgi-bin` directory, it should be possible to -send it a request by entering a URL into your browser of the form:: +send it a request by entering a URL into your browser of the form: + +.. code-block:: none http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home @@ -534,4 +536,3 @@ order the field values should be supplied in, but knowing whether a request was received from a conforming browser, or even from a browser at all, is tedious and error-prone. - diff --git a/Doc/library/cmd.rst b/Doc/library/cmd.rst --- a/Doc/library/cmd.rst +++ b/Doc/library/cmd.rst @@ -314,7 +314,9 @@ Here is a sample session with the turtle shell showing the help functions, using -blank lines to repeat commands, and the simple record and playback facility:: +blank lines to repeat commands, and the simple record and playback facility: + +.. code-block:: none Welcome to the turtle shell. Type help or ? to list commands. @@ -373,4 +375,3 @@ (turtle) bye Thank you for using Turtle - diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -163,7 +163,7 @@ >>> c.traps[FloatOperation] = True >>> Decimal(3.14) Traceback (most recent call last): - File "", line 1, in + File "", line 1, in decimal.FloatOperation: [] >>> Decimal('3.5') < 3.7 Traceback (most recent call last): diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst --- a/Doc/library/doctest.rst +++ b/Doc/library/doctest.rst @@ -88,14 +88,18 @@ doctest.testmod() If you run :file:`example.py` directly from the command line, :mod:`doctest` -works its magic:: +works its magic: + +.. code-block:: shell-session $ python example.py $ There's no output! That's normal, and it means all the examples worked. Pass ``-v`` to the script, and :mod:`doctest` prints a detailed log of what -it's trying, and prints a summary at the end:: +it's trying, and prints a summary at the end: + +.. code-block:: shell-session $ python example.py -v Trying: @@ -109,7 +113,9 @@ [1, 1, 2, 6, 24, 120] ok -And so on, eventually ending with:: +And so on, eventually ending with: + +.. code-block:: none Trying: factorial(1e100) @@ -196,7 +202,9 @@ That short script executes and verifies any interactive Python examples contained in the file :file:`example.txt`. The file content is treated as if it were a single giant docstring; the file doesn't need to contain a Python -program! For example, perhaps :file:`example.txt` contains this:: +program! For example, perhaps :file:`example.txt` contains this: + +.. code-block:: none The ``example`` module ====================== diff --git a/Doc/library/email-examples.rst b/Doc/library/email-examples.rst --- a/Doc/library/email-examples.rst +++ b/Doc/library/email-examples.rst @@ -59,7 +59,9 @@ .. literalinclude:: ../includes/email-read-alternative-new-api.py -Up to the prompt, the output from the above is:: +Up to the prompt, the output from the above is: + +.. code-block:: none To: Penelope Pussycat , Fabrette Pussycat From: Pep? Le Pew diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst --- a/Doc/library/html.parser.rst +++ b/Doc/library/html.parser.rst @@ -61,7 +61,9 @@ parser.feed('Test' '

    Parse me!

    ') -The output will then be:: +The output will then be: + +.. code-block:: none Encountered a start tag: html Encountered a start tag: head diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -524,7 +524,7 @@ Command line usage ^^^^^^^^^^^^^^^^^^ -:: +.. code-block:: none idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ... diff --git a/Doc/library/logging.config.rst b/Doc/library/logging.config.rst --- a/Doc/library/logging.config.rst +++ b/Doc/library/logging.config.rst @@ -243,7 +243,9 @@ handler. All *other* keys are passed through as keyword arguments to the - handler's constructor. For example, given the snippet:: + handler's constructor. For example, given the snippet: + + .. code-block:: yaml handlers: console: @@ -352,7 +354,9 @@ configuration to indicate that a connection exists between the source and the destination object with that id. -So, for example, consider the following YAML snippet:: +So, for example, consider the following YAML snippet: + +.. code-block:: yaml formatters: brief: @@ -409,7 +413,9 @@ configuration dictionary and which returns the instantiated object. This is signalled by an absolute import path to the factory being made available under the special key ``'()'``. Here's a concrete -example:: +example: + +.. code-block:: yaml formatters: brief: @@ -626,7 +632,9 @@ :func:`dictConfig`, so it's worth considering transitioning to this newer API when it's convenient to do so. -Examples of these sections in the file are given below. :: +Examples of these sections in the file are given below. + +.. code-block:: ini [loggers] keys=root,log02,log03,log04,log05,log06,log07 @@ -638,7 +646,9 @@ keys=form01,form02,form03,form04,form05,form06,form07,form08,form09 The root logger must specify a level and a list of handlers. An example of a -root logger section is given below. :: +root logger section is given below. + +.. code-block:: ini [logger_root] level=NOTSET @@ -655,7 +665,9 @@ file. For loggers other than the root logger, some additional information is required. -This is illustrated by the following example. :: +This is illustrated by the following example. + +.. code-block:: ini [logger_parser] level=DEBUG @@ -673,7 +685,8 @@ say the name used by the application to get the logger. Sections which specify handler configuration are exemplified by the following. -:: + +.. code-block:: ini [handler_hand01] class=StreamHandler @@ -693,7 +706,9 @@ The ``args`` entry, when :func:`eval`\ uated in the context of the ``logging`` package's namespace, is the list of arguments to the constructor for the handler class. Refer to the constructors for the relevant handlers, or to the examples -below, to see how typical entries are constructed. :: +below, to see how typical entries are constructed. + +.. code-block:: ini [handler_hand02] class=FileHandler @@ -744,7 +759,9 @@ formatter=form09 args=('localhost:9022', '/log', 'GET') -Sections which specify formatter configuration are typified by the following. :: +Sections which specify formatter configuration are typified by the following. + +.. code-block:: ini [formatter_form01] format=F1 %(asctime)s %(levelname)s %(message)s @@ -780,5 +797,3 @@ Module :mod:`logging.handlers` Useful handlers included with the logging module. - - diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst --- a/Doc/library/optparse.rst +++ b/Doc/library/optparse.rst @@ -678,7 +678,9 @@ this option on the command line, it expands your ``version`` string (by replacing ``%prog``), prints it to stdout, and exits. -For example, if your script is called ``/usr/bin/foo``:: +For example, if your script is called ``/usr/bin/foo``: + +.. code-block:: shell-session $ /usr/bin/foo --version foo 1.0 @@ -728,14 +730,18 @@ error status 2. Consider the first example above, where the user passes ``4x`` to an option -that takes an integer:: +that takes an integer: + +.. code-block:: shell-session $ /usr/bin/foo -n 4x Usage: foo [options] foo: error: option -n: invalid integer value: '4x' -Or, where the user fails to pass a value at all:: +Or, where the user fails to pass a value at all: + +.. code-block:: shell-session $ /usr/bin/foo -n Usage: foo [options] diff --git a/Doc/library/pickletools.rst b/Doc/library/pickletools.rst --- a/Doc/library/pickletools.rst +++ b/Doc/library/pickletools.rst @@ -30,7 +30,9 @@ untrusted source, ``-m pickletools`` is a safer option because it does not execute pickle bytecode. -For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``:: +For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``: + +.. code-block:: shell-session $ python -m pickle x.pickle (1, 2) @@ -106,4 +108,3 @@ Returns a new equivalent pickle string after eliminating unused ``PUT`` opcodes. The optimized pickle is shorter, takes less transmission time, requires less storage space, and unpickles more efficiently. - diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -86,7 +86,9 @@ separator. For example, if *namespace_separator* is set to a space character (``' '``) and - the following document is parsed:: + the following document is parsed: + + .. code-block:: xml >> make_archive(archive_name, 'gztar', root_dir) '/Users/tarek/myarchive.tar.gz' -The resulting archive contains:: +The resulting archive contains: + +.. code-block:: shell-session $ tar -tzvf /Users/tarek/myarchive.tar.gz drwx------ tarek/staff 0 2010-02-01 16:23:40 ./ diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst --- a/Doc/library/socketserver.rst +++ b/Doc/library/socketserver.rst @@ -479,7 +479,9 @@ The output of the example should look something like this: -Server:: +Server: + +.. code-block:: shell-session $ python TCPServer.py 127.0.0.1 wrote: @@ -487,7 +489,9 @@ 127.0.0.1 wrote: b'python is nice' -Client:: +Client: + +.. code-block:: shell-session $ python TCPClient.py hello world with TCP Sent: hello world with TCP @@ -599,7 +603,9 @@ server.server_close() -The output of the example should look something like this:: +The output of the example should look something like this: + +.. code-block:: shell-session $ python ThreadedTCPServer.py Server loop running in thread: Thread-1 diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -950,20 +950,23 @@ Replacing /bin/sh shell backquote ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -:: +.. code-block:: bash output=`mycmd myarg` - # becomes + +becomes:: + output = check_output(["mycmd", "myarg"]) - Replacing shell pipeline ^^^^^^^^^^^^^^^^^^^^^^^^ -:: +.. code-block:: bash output=`dmesg | grep hda` - # becomes + +becomes:: + p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits. @@ -973,10 +976,14 @@ to receive a SIGPIPE if p2 exits before p1. Alternatively, for trusted input, the shell's own pipeline support may still -be used directly:: +be used directly: + +.. code-block:: bash output=`dmesg | grep hda` - # becomes + +becomes:: + output=check_output("dmesg | grep hda", shell=True) diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -1282,7 +1282,9 @@ A dictionary of the various implementation-specific flags passed through the :option:`-X` command-line option. Option names are either mapped to - their values, if given explicitly, or to :const:`True`. Example:: + their values, if given explicitly, or to :const:`True`. Example: + + .. code-block:: shell-session $ ./python -Xa=b -Xc Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50) diff --git a/Doc/library/sysconfig.rst b/Doc/library/sysconfig.rst --- a/Doc/library/sysconfig.rst +++ b/Doc/library/sysconfig.rst @@ -229,7 +229,9 @@ Using :mod:`sysconfig` as a script ---------------------------------- -You can use :mod:`sysconfig` as a script with Python's *-m* option:: +You can use :mod:`sysconfig` as a script with Python's *-m* option: + +.. code-block:: shell-session $ python -m sysconfig Platform: "macosx-10.4-i386" diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst --- a/Doc/library/tarfile.rst +++ b/Doc/library/tarfile.rst @@ -654,25 +654,35 @@ with tar archives. If you want to create a new tar archive, specify its name after the :option:`-c` -option and then list the filename(s) that should be included:: +option and then list the filename(s) that should be included: + +.. code-block:: shell-session $ python -m tarfile -c monty.tar spam.txt eggs.txt -Passing a directory is also acceptable:: +Passing a directory is also acceptable: + +.. code-block:: shell-session $ python -m tarfile -c monty.tar life-of-brian_1979/ If you want to extract a tar archive into the current directory, use -the :option:`-e` option:: +the :option:`-e` option: + +.. code-block:: shell-session $ python -m tarfile -e monty.tar You can also extract a tar archive into a different directory by passing the -directory's name:: +directory's name: + +.. code-block:: shell-session $ python -m tarfile -e monty.tar other-dir/ -For a list of the files in a tar archive, use the :option:`-l` option:: +For a list of the files in a tar archive, use the :option:`-l` option: + +.. code-block:: shell-session $ python -m tarfile -l monty.tar diff --git a/Doc/library/zipimport.rst b/Doc/library/zipimport.rst --- a/Doc/library/zipimport.rst +++ b/Doc/library/zipimport.rst @@ -147,7 +147,9 @@ -------- Here is an example that imports a module from a ZIP archive - note that the -:mod:`zipimport` module is not explicitly used. :: +:mod:`zipimport` module is not explicitly used. + +.. code-block:: shell-session $ unzip -l example.zip Archive: example.zip diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1406,7 +1406,9 @@ Lambda expressions (sometimes called lambda forms) are used to create anonymous functions. The expression ``lambda arguments: expression`` yields a function -object. The unnamed object behaves like a function object defined with :: +object. The unnamed object behaves like a function object defined with: + +.. code-block:: none def (arguments): return expression diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst --- a/Doc/reference/lexical_analysis.rst +++ b/Doc/reference/lexical_analysis.rst @@ -689,7 +689,10 @@ .. index:: single: operators -The following tokens are operators:: +The following tokens are operators: + +.. code-block:: none + + - * ** / // % @ << >> & | ^ ~ @@ -703,7 +706,9 @@ .. index:: single: delimiters -The following tokens serve as delimiters in the grammar:: +The following tokens serve as delimiters in the grammar: + +.. code-block:: none ( ) [ ] { } , : . ; @ = -> @@ -716,12 +721,16 @@ but also perform an operation. The following printing ASCII characters have special meaning as part of other -tokens or are otherwise significant to the lexical analyzer:: +tokens or are otherwise significant to the lexical analyzer: + +.. code-block:: none ' " # \ The following printing ASCII characters are not used in Python. Their -occurrence outside string literals and comments is an unconditional error:: +occurrence outside string literals and comments is an unconditional error: + +.. code-block:: none $ ? ` diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst --- a/Doc/tutorial/controlflow.rst +++ b/Doc/tutorial/controlflow.rst @@ -501,7 +501,9 @@ client="John Cleese", sketch="Cheese Shop Sketch") -and of course it would print:: +and of course it would print: + +.. code-block:: none -- Do you have any Limburger ? -- I'm sorry, we're all out of Limburger diff --git a/Doc/tutorial/interpreter.rst b/Doc/tutorial/interpreter.rst --- a/Doc/tutorial/interpreter.rst +++ b/Doc/tutorial/interpreter.rst @@ -94,7 +94,9 @@ usually three greater-than signs (``>>>``); for continuation lines it prompts with the *secondary prompt*, by default three dots (``...``). The interpreter prints a welcome message stating its version number and a copyright notice -before printing the first prompt:: +before printing the first prompt: + +.. code-block:: shell-session $ python3.5 Python 3.5 (default, Sep 16 2015, 09:25:04) diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst --- a/Doc/tutorial/modules.rst +++ b/Doc/tutorial/modules.rst @@ -140,7 +140,9 @@ you can make the file usable as a script as well as an importable module, because the code that parses the command line only runs if the module is -executed as the "main" file:: +executed as the "main" file: + +.. code-block:: shell-session $ python fibo.py 50 1 1 2 3 5 8 13 21 34 diff --git a/Doc/whatsnew/2.3.rst b/Doc/whatsnew/2.3.rst --- a/Doc/whatsnew/2.3.rst +++ b/Doc/whatsnew/2.3.rst @@ -291,7 +291,9 @@ The new :mod:`zipimport` module adds support for importing modules from a ZIP- format archive. You don't need to import the module explicitly; it will be automatically imported if a ZIP archive's filename is added to ``sys.path``. -For example:: +For example: + +.. code-block:: shell-session amk at nyman:~/src/python$ unzip -l /tmp/example.zip Archive: /tmp/example.zip @@ -1761,7 +1763,9 @@ strings containing the remaining arguments. Invoking the script with the various arguments now works as you'd expect it to. -Note that the length argument is automatically converted to an integer. :: +Note that the length argument is automatically converted to an integer. + +.. code-block:: shell-session $ ./python opt.py -i data arg1 @@ -1771,7 +1775,9 @@ [] $ -The help message is automatically generated for you:: +The help message is automatically generated for you: + +.. code-block:: shell-session $ ./python opt.py --help usage: opt.py [options] @@ -2078,4 +2084,3 @@ MacIntyre, Lalo Martins, Chad Netzer, Gustavo Niemeyer, Neal Norwitz, Hans Nowak, Chris Reedy, Francesco Ricciardi, Vinay Sajip, Neil Schemenauer, Roman Suzi, Jason Tishler, Just van Rossum. - diff --git a/Doc/whatsnew/2.4.rst b/Doc/whatsnew/2.4.rst --- a/Doc/whatsnew/2.4.rst +++ b/Doc/whatsnew/2.4.rst @@ -1425,7 +1425,9 @@ print word Running the above function's tests with :const:`doctest.REPORT_UDIFF` specified, -you get the following output:: +you get the following output: + +.. code-block:: none ********************************************************************** File "t.py", line 15, in g diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -2290,7 +2290,9 @@ written in pure Python could cause a segmentation fault by taking a :c:type:`PyCObject` from module A and somehow substituting it for the :c:type:`PyCObject` in module B. Capsules know their own name, -and getting the pointer requires providing the name:: +and getting the pointer requires providing the name: + +.. code-block:: c void *vtable; @@ -2616,4 +2618,3 @@ suggestions, corrections and assistance with various drafts of this article: Nick Coghlan, Philip Jenvey, Ryan Lovett, R. David Murray, Hugh Secker-Walker. - diff --git a/Doc/whatsnew/3.0.rst b/Doc/whatsnew/3.0.rst --- a/Doc/whatsnew/3.0.rst +++ b/Doc/whatsnew/3.0.rst @@ -117,7 +117,9 @@ print("There are <", 2**32, "> possibilities!", sep="") -which produces:: +which produces: + +.. code-block:: none There are <4294967296> possibilities! diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst --- a/Doc/whatsnew/3.2.rst +++ b/Doc/whatsnew/3.2.rst @@ -160,6 +160,8 @@ parser_m.add_argument('-c', '--course', type=int, required=True) parser_m.add_argument('-s', '--speed', type=int, default=0) +.. code-block:: shell-session + $ ./helm.py --help # top level help (launch and move) $ ./helm.py launch --help # help for launch options $ ./helm.py launch --missiles # set missiles=True and torpedos=False @@ -478,7 +480,9 @@ * The interpreter can now be started with a quiet option, ``-q``, to prevent the copyright and version information from being displayed in the interactive - mode. The option can be introspected using the :attr:`sys.flags` attribute:: + mode. The option can be introspected using the :attr:`sys.flags` attribute: + + .. code-block:: shell-session $ python -q >>> sys.flags @@ -573,7 +577,9 @@ by Benjamin Peterson in :issue:`8413`.) * Warnings are now easier to control using the :envvar:`PYTHONWARNINGS` - environment variable as an alternative to using ``-W`` at the command line:: + environment variable as an alternative to using ``-W`` at the command line: + + .. code-block:: shell-session $ export PYTHONWARNINGS='ignore::RuntimeWarning::,once::UnicodeWarning::' @@ -595,7 +601,9 @@ object ensures it closes the underlying operating system resource (usually, a file descriptor), the delay in deallocating the object could produce various issues, especially under Windows. Here is an example - of enabling the warning from the command line:: + of enabling the warning from the command line: + + .. code-block:: shell-session $ python -q -Wdefault >>> f = open("foo", "wb") @@ -1720,7 +1728,9 @@ test discovery can find tests within packages, locating any test importable from the top-level directory. The top-level directory can be specified with the `-t` option, a pattern for matching files with ``-p``, and a directory to - start discovery with ``-s``:: + start discovery with ``-s``: + + .. code-block:: shell-session $ python -m unittest discover -s my_proj_dir -p _test.py @@ -1895,7 +1905,9 @@ The :mod:`pydoc` module now provides a much-improved Web server interface, as well as a new command-line option ``-b`` to automatically open a browser window -to display that server:: +to display that server: + +.. code-block:: shell-session $ pydoc3.2 -b @@ -1998,7 +2010,9 @@ '/Users/raymondhettinger/Library/Python/3.2/lib/python/site-packages' Conveniently, some of site's functionality is accessible directly from the -command-line:: +command-line: + +.. code-block:: shell-session $ python -m site --user-base /Users/raymondhettinger/.local @@ -2031,7 +2045,9 @@ * :func:`~sysconfig.get_config_vars` returns a dictionary of platform specific variables. -There is also a convenient command-line interface:: +There is also a convenient command-line interface: + +.. code-block:: doscon C:\Python32>python -m sysconfig Platform: "win32" @@ -2265,7 +2281,9 @@ The demonstration code for the :mod:`turtle` module was moved from the *Demo* directory to main library. It includes over a dozen sample scripts with lively displays. Being on :attr:`sys.path`, it can now be run directly -from the command-line:: +from the command-line: + +.. code-block:: shell-session $ python -m turtledemo @@ -2701,4 +2719,3 @@ * Due to the new :term:`GIL` implementation, :c:func:`PyEval_InitThreads()` cannot be called before :c:func:`Py_Initialize()` anymore. - diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst --- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -871,7 +871,9 @@ :envvar:`PYTHONFAULTHANDLER` environment variable or by using :option:`-X` ``faulthandler`` command line option. -Example of a segmentation fault on Linux: :: +Example of a segmentation fault on Linux: + +.. code-block:: shell-session $ python -q -X faulthandler >>> import ctypes @@ -999,7 +1001,6 @@ Incremental CJK codec encoders are no longer reset at each call to their encode() methods. For example:: - $ ./python -q >>> import codecs >>> encoder = codecs.getincrementalencoder('hz')('strict') >>> b''.join(encoder.encode(x) for x in '\u52ff\u65bd\u65bc\u4eba\u3002 Bye.') diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst --- a/Doc/whatsnew/3.5.rst +++ b/Doc/whatsnew/3.5.rst @@ -742,7 +742,9 @@ With the new module, bundling your application is as simple as putting all the files, including a ``__main__.py`` file, into a directory ``myapp`` -and running:: +and running: + +.. code-block:: shell-session $ python -m zipapp myapp $ python myapp.pyz -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Thu Jul 28 22:34:39 2016 From: python-checkins at python.org (martin.panter) Date: Fri, 29 Jul 2016 02:34:39 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Issue_=2326462=3A_Merge_code_block_fixes_from_3=2E5?= Message-ID: <20160729023439.32689.27864.5A43A460@psf.io> https://hg.python.org/cpython/rev/6fbb7c9d77c6 changeset: 102481:6fbb7c9d77c6 parent: 102479:9b135b8d3166 parent: 102480:8ba0000c90be user: Martin Panter date: Fri Jul 29 01:49:37 2016 +0000 summary: Issue #26462: Merge code block fixes from 3.5 files: Doc/distutils/examples.rst | 12 ++++- Doc/distutils/packageindex.rst | 4 +- Doc/distutils/sourcedist.rst | 4 +- Doc/extending/building.rst | 9 ++- Doc/extending/embedding.rst | 20 ++++++--- Doc/extending/extending.rst | 5 +- Doc/extending/newtypes.rst | 5 +- Doc/faq/extending.rst | 16 +++++- Doc/howto/clinic.rst | 4 +- Doc/howto/logging-cookbook.rst | 20 +++++++-- Doc/howto/logging.rst | 17 +++++-- Doc/howto/regex.rst | 4 +- Doc/howto/unicode.rst | 4 +- Doc/library/2to3.rst | 28 ++++++++++--- Doc/library/argparse.rst | 20 +++++++-- Doc/library/ast.rst | 1 + Doc/library/asyncio-dev.rst | 16 +++++- Doc/library/cgi.rst | 5 +- Doc/library/cmd.rst | 5 +- Doc/library/decimal.rst | 2 +- Doc/library/doctest.rst | 16 +++++- Doc/library/email-examples.rst | 4 +- Doc/library/html.parser.rst | 4 +- Doc/library/idle.rst | 2 +- Doc/library/logging.config.rst | 37 ++++++++++++----- Doc/library/optparse.rst | 12 ++++- Doc/library/pickletools.rst | 5 +- Doc/library/pyexpat.rst | 4 +- Doc/library/shutil.rst | 4 +- Doc/library/socketserver.rst | 12 ++++- Doc/library/subprocess.rst | 21 ++++++--- Doc/library/sys.rst | 4 +- Doc/library/sysconfig.rst | 4 +- Doc/library/tarfile.rst | 20 +++++++-- Doc/library/zipimport.rst | 4 +- Doc/reference/expressions.rst | 4 +- Doc/reference/lexical_analysis.rst | 17 ++++++- Doc/tutorial/controlflow.rst | 4 +- Doc/tutorial/interpreter.rst | 4 +- Doc/tutorial/modules.rst | 4 +- Doc/whatsnew/2.3.rst | 13 ++++- Doc/whatsnew/2.4.rst | 4 +- Doc/whatsnew/2.7.rst | 5 +- Doc/whatsnew/3.0.rst | 4 +- Doc/whatsnew/3.2.rst | 35 ++++++++++++---- Doc/whatsnew/3.3.rst | 5 +- Doc/whatsnew/3.5.rst | 4 +- 47 files changed, 329 insertions(+), 128 deletions(-) diff --git a/Doc/distutils/examples.rst b/Doc/distutils/examples.rst --- a/Doc/distutils/examples.rst +++ b/Doc/distutils/examples.rst @@ -245,7 +245,9 @@ setup(name='foobar') -Running the ``check`` command will display some warnings:: +Running the ``check`` command will display some warnings: + +.. code-block:: shell-session $ python setup.py check running check @@ -274,7 +276,9 @@ url='http://example.com', long_description=desc) Where the long description is broken, ``check`` will be able to detect it -by using the :mod:`docutils` parser:: +by using the :mod:`docutils` parser: + +.. code-block:: shell-session $ python setup.py check --restructuredtext running check @@ -286,7 +290,9 @@ The :func:`distutils.core.setup` function provides a command-line interface that allows you to query the metadata fields of a project through the -``setup.py`` script of a given project:: +``setup.py`` script of a given project: + +.. code-block:: shell-session $ python setup.py --name distribute diff --git a/Doc/distutils/packageindex.rst b/Doc/distutils/packageindex.rst --- a/Doc/distutils/packageindex.rst +++ b/Doc/distutils/packageindex.rst @@ -233,7 +233,9 @@ To prevent registering broken reStructuredText content, you can use the :program:`rst2html` program that is provided by the :mod:`docutils` package and -check the ``long_description`` from the command line:: +check the ``long_description`` from the command line: + +.. code-block:: shell-session $ python setup.py --long-description | rst2html.py > output.html diff --git a/Doc/distutils/sourcedist.rst b/Doc/distutils/sourcedist.rst --- a/Doc/distutils/sourcedist.rst +++ b/Doc/distutils/sourcedist.rst @@ -133,7 +133,9 @@ The manifest template has one command per line, where each command specifies a set of files to include or exclude from the source distribution. For an -example, again we turn to the Distutils' own manifest template:: +example, again we turn to the Distutils' own manifest template: + +.. code-block:: none include *.txt recursive-include examples *.txt *.py diff --git a/Doc/extending/building.rst b/Doc/extending/building.rst --- a/Doc/extending/building.rst +++ b/Doc/extending/building.rst @@ -55,7 +55,9 @@ necessarily need a compiler and distutils to install the extension. A distutils package contains a driver script, :file:`setup.py`. This is a plain -Python file, which, in the most simple case, could look like this:: +Python file, which, in the most simple case, could look like this: + +.. code-block:: python3 from distutils.core import setup, Extension @@ -96,7 +98,9 @@ In many cases, building an extension is more complex, since additional preprocessor defines and libraries may be needed. This is demonstrated in the -example below. :: +example below. + +.. code-block:: python3 from distutils.core import setup, Extension @@ -161,4 +165,3 @@ python setup.py bdist_wininst python setup.py bdist_rpm python setup.py bdist_dumb - diff --git a/Doc/extending/embedding.rst b/Doc/extending/embedding.rst --- a/Doc/extending/embedding.rst +++ b/Doc/extending/embedding.rst @@ -157,7 +157,9 @@ c = c + b return c -then the result should be:: +then the result should be: + +.. code-block:: shell-session $ call multiply multiply 3 2 Will compute 3 times 2 @@ -291,16 +293,20 @@ be directly useful to you: * ``pythonX.Y-config --cflags`` will give you the recommended flags when - compiling:: + compiling: - $ /opt/bin/python3.4-config --cflags - -I/opt/include/python3.4m -I/opt/include/python3.4m -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes + .. code-block:: shell-session + + $ /opt/bin/python3.4-config --cflags + -I/opt/include/python3.4m -I/opt/include/python3.4m -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes * ``pythonX.Y-config --ldflags`` will give you the recommended flags when - linking:: + linking: - $ /opt/bin/python3.4-config --ldflags - -L/opt/lib/python3.4/config-3.4m -lpthread -ldl -lutil -lm -lpython3.4m -Xlinker -export-dynamic + .. code-block:: shell-session + + $ /opt/bin/python3.4-config --ldflags + -L/opt/lib/python3.4/config-3.4m -lpthread -ldl -lutil -lm -lpython3.4m -Xlinker -export-dynamic .. note:: To avoid confusion between several Python installations (and especially diff --git a/Doc/extending/extending.rst b/Doc/extending/extending.rst --- a/Doc/extending/extending.rst +++ b/Doc/extending/extending.rst @@ -792,7 +792,9 @@ format unit, it returns whatever object is described by that format unit. To force it to return a tuple of size 0 or one, parenthesize the format string. -Examples (to the left the call, to the right the resulting Python value):: +Examples (to the left the call, to the right the resulting Python value): + +.. code-block:: none Py_BuildValue("") None Py_BuildValue("i", 123) 123 @@ -1348,4 +1350,3 @@ .. [#] These guarantees don't hold when you use the "old" style calling convention --- this is still found in much existing code. - diff --git a/Doc/extending/newtypes.rst b/Doc/extending/newtypes.rst --- a/Doc/extending/newtypes.rst +++ b/Doc/extending/newtypes.rst @@ -209,7 +209,9 @@ setup(name="noddy", version="1.0", ext_modules=[Extension("noddy", ["noddy.c"])]) -in a file called :file:`setup.py`; then typing :: +in a file called :file:`setup.py`; then typing + +.. code-block:: shell-session $ python setup.py build @@ -1513,4 +1515,3 @@ .. [#] Even in the third version, we aren't guaranteed to avoid cycles. Instances of string subclasses are allowed and string subclasses could allow cycles even if normal strings don't. - diff --git a/Doc/faq/extending.rst b/Doc/faq/extending.rst --- a/Doc/faq/extending.rst +++ b/Doc/faq/extending.rst @@ -146,7 +146,9 @@ just allow the standard traceback mechanism to work. Then, the output will go wherever your ``write()`` method sends it. -The easiest way to do this is to use the :class:`io.StringIO` class:: +The easiest way to do this is to use the :class:`io.StringIO` class: + +.. code-block:: pycon >>> import io, sys >>> sys.stdout = io.StringIO() @@ -156,7 +158,9 @@ foo hello world! -A custom object to do the same would look like this:: +A custom object to do the same would look like this: + +.. code-block:: pycon >>> import io, sys >>> class StdoutCatcher(io.TextIOBase): @@ -222,11 +226,15 @@ When using GDB with dynamically loaded extensions, you can't set a breakpoint in your extension until your extension is loaded. -In your ``.gdbinit`` file (or interactively), add the command:: +In your ``.gdbinit`` file (or interactively), add the command: + +.. code-block:: none br _PyImport_LoadDynamicModule -Then, when you run GDB:: +Then, when you run GDB: + +.. code-block:: shell-session $ gdb /local/bin/python gdb) run myscript.py diff --git a/Doc/howto/clinic.rst b/Doc/howto/clinic.rst --- a/Doc/howto/clinic.rst +++ b/Doc/howto/clinic.rst @@ -152,7 +152,9 @@ For my example I'm using ``_pickle.Pickler.dump()``. 2. If the call to the ``PyArg_Parse`` function uses any of the - following format units:: + following format units: + + .. code-block:: none O& O! diff --git a/Doc/howto/logging-cookbook.rst b/Doc/howto/logging-cookbook.rst --- a/Doc/howto/logging-cookbook.rst +++ b/Doc/howto/logging-cookbook.rst @@ -377,7 +377,9 @@ root.warning('Look out!') listener.stop() -which, when run, will produce:: +which, when run, will produce: + +.. code-block:: none MainThread: Look out! @@ -1860,7 +1862,9 @@ logger = logging.getLogger('mylogger') logger.debug('A debug message') -To run this, you will probably need to run as ``root``:: +To run this, you will probably need to run as ``root``: + +.. code-block:: shell-session $ sudo python3.3 chowntest.py $ cat chowntest.log @@ -2485,7 +2489,9 @@ completion, the status is as it was before so message #6 appears (like message #1) whereas message #7 doesn't (just like message #2). -If we run the resulting script, the result is as follows:: +If we run the resulting script, the result is as follows: + +.. code-block:: shell-session $ python logctx.py 1. This should appear just once on stderr. @@ -2495,12 +2501,16 @@ 6. This should appear just once on stderr. If we run it again, but pipe ``stderr`` to ``/dev/null``, we see the following, -which is the only message written to ``stdout``:: +which is the only message written to ``stdout``: + +.. code-block:: shell-session $ python logctx.py 2>/dev/null 5. This should appear twice - once on stderr and once on stdout. -Once again, but piping ``stdout`` to ``/dev/null``, we get:: +Once again, but piping ``stdout`` to ``/dev/null``, we get: + +.. code-block:: shell-session $ python logctx.py >/dev/null 1. This should appear just once on stderr. diff --git a/Doc/howto/logging.rst b/Doc/howto/logging.rst --- a/Doc/howto/logging.rst +++ b/Doc/howto/logging.rst @@ -106,7 +106,9 @@ logging.warning('Watch out!') # will print a message to the console logging.info('I told you so') # will not print anything -If you type these lines into a script and run it, you'll see:: +If you type these lines into a script and run it, you'll see: + +.. code-block:: none WARNING:root:Watch out! @@ -230,7 +232,9 @@ import logging logging.warning('%s before you %s', 'Look', 'leap!') -will display:: +will display: + +.. code-block:: none WARNING:root:Look before you leap! @@ -594,7 +598,9 @@ logger.error('error message') logger.critical('critical message') -Running this module from the command line produces the following output:: +Running this module from the command line produces the following output: + +.. code-block:: shell-session $ python simple_logging_module.py 2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message @@ -653,7 +659,9 @@ format=%(asctime)s - %(name)s - %(levelname)s - %(message)s datefmt= -The output is nearly identical to that of the non-config-file-based example:: +The output is nearly identical to that of the non-config-file-based example: + +.. code-block:: shell-session $ python simple_logging_config.py 2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message @@ -1073,4 +1081,3 @@ Useful handlers included with the logging module. :ref:`A logging cookbook ` - diff --git a/Doc/howto/regex.rst b/Doc/howto/regex.rst --- a/Doc/howto/regex.rst +++ b/Doc/howto/regex.rst @@ -74,7 +74,9 @@ devoted to discussing various metacharacters and what they do. Here's a complete list of the metacharacters; their meanings will be discussed -in the rest of this HOWTO. :: +in the rest of this HOWTO. + +.. code-block:: none . ^ $ * + ? { } [ ] \ | ( ) diff --git a/Doc/howto/unicode.rst b/Doc/howto/unicode.rst --- a/Doc/howto/unicode.rst +++ b/Doc/howto/unicode.rst @@ -613,7 +613,9 @@ print(os.listdir(b'.')) print(os.listdir('.')) -will produce the following output:: +will produce the following output: + +.. code-block:: shell-session amk:~$ python t.py [b'filename\xe4\x94\x80abc', ...] diff --git a/Doc/library/2to3.rst b/Doc/library/2to3.rst --- a/Doc/library/2to3.rst +++ b/Doc/library/2to3.rst @@ -33,14 +33,18 @@ name = raw_input() greet(name) -It can be converted to Python 3.x code via 2to3 on the command line:: +It can be converted to Python 3.x code via 2to3 on the command line: + +.. code-block:: shell-session $ 2to3 example.py A diff against the original source file is printed. 2to3 can also write the needed modifications right back to the source file. (A backup of the original file is made unless :option:`-n` is also given.) Writing the changes back is -enabled with the :option:`-w` flag:: +enabled with the :option:`-w` flag: + +.. code-block:: shell-session $ 2to3 -w example.py @@ -57,17 +61,23 @@ By default, 2to3 runs a set of :ref:`predefined fixers <2to3-fixers>`. The :option:`!-l` flag lists all available fixers. An explicit set of fixers to run can be given with :option:`-f`. Likewise the :option:`!-x` explicitly disables a -fixer. The following example runs only the ``imports`` and ``has_key`` fixers:: +fixer. The following example runs only the ``imports`` and ``has_key`` fixers: + +.. code-block:: shell-session $ 2to3 -f imports -f has_key example.py -This command runs every fixer except the ``apply`` fixer:: +This command runs every fixer except the ``apply`` fixer: + +.. code-block:: shell-session $ 2to3 -x apply example.py Some fixers are *explicit*, meaning they aren't run by default and must be listed on the command line to be run. Here, in addition to the default fixers, -the ``idioms`` fixer is run:: +the ``idioms`` fixer is run: + +.. code-block:: shell-session $ 2to3 -f all -f idioms example.py @@ -113,7 +123,9 @@ The :option:`--add-suffix` option specifies a string to append to all output filenames. The :option:`-n` flag is required when specifying this as backups -are not necessary when writing to different filenames. Example:: +are not necessary when writing to different filenames. Example: + +.. code-block:: shell-session $ 2to3 -n -W --add-suffix=3 example.py @@ -122,7 +134,9 @@ .. versionadded:: 3.2.3 The :option:`--add-suffix` option was added. -To translate an entire project from one directory tree to another use:: +To translate an entire project from one directory tree to another use: + +.. code-block:: shell-session $ 2to3 --output-dir=python3-version/mycode -W -n python2-version/mycode diff --git a/Doc/library/argparse.rst b/Doc/library/argparse.rst --- a/Doc/library/argparse.rst +++ b/Doc/library/argparse.rst @@ -45,7 +45,9 @@ print(args.accumulate(args.integers)) Assuming the Python code above is saved into a file called ``prog.py``, it can -be run at the command line and provides useful help messages:: +be run at the command line and provides useful help messages: + +.. code-block:: shell-session $ python prog.py -h usage: prog.py [-h] [--sum] N [N ...] @@ -60,7 +62,9 @@ --sum sum the integers (default: find the max) When run with the appropriate arguments, it prints either the sum or the max of -the command-line integers:: +the command-line integers: + +.. code-block:: shell-session $ python prog.py 1 2 3 4 4 @@ -68,7 +72,9 @@ $ python prog.py 1 2 3 4 --sum 10 -If invalid arguments are passed in, it will issue an error:: +If invalid arguments are passed in, it will issue an error: + +.. code-block:: shell-session $ python prog.py a b c usage: prog.py [-h] [--sum] N [N ...] @@ -194,7 +200,9 @@ args = parser.parse_args() The help for this program will display ``myprogram.py`` as the program name -(regardless of where the program was invoked from):: +(regardless of where the program was invoked from): + +.. code-block:: shell-session $ python myprogram.py --help usage: myprogram.py [-h] [--foo FOO] @@ -596,7 +604,9 @@ args = parser.parse_args() If ``-h`` or ``--help`` is supplied at the command line, the ArgumentParser -help will be printed:: +help will be printed: + +.. code-block:: shell-session $ python myprogram.py --help usage: myprogram.py [-h] [--foo FOO] diff --git a/Doc/library/ast.rst b/Doc/library/ast.rst --- a/Doc/library/ast.rst +++ b/Doc/library/ast.rst @@ -99,6 +99,7 @@ The abstract grammar is currently defined as follows: .. literalinclude:: ../../Parser/Python.asdl + :language: none :mod:`ast` Helpers diff --git a/Doc/library/asyncio-dev.rst b/Doc/library/asyncio-dev.rst --- a/Doc/library/asyncio-dev.rst +++ b/Doc/library/asyncio-dev.rst @@ -321,14 +321,18 @@ print("Pending tasks at exit: %s" % asyncio.Task.all_tasks(loop)) loop.close() -Expected output:: +Expected output: + +.. code-block:: none (1) create file (2) write into file (3) close file Pending tasks at exit: set() -Actual output:: +Actual output: + +.. code-block:: none (3) close file (2) write into file @@ -369,13 +373,17 @@ If a pending task is destroyed, the execution of its wrapped :ref:`coroutine ` did not complete. It is probably a bug and so a warning is logged. -Example of log:: +Example of log: + +.. code-block:: none Task was destroyed but it is pending! task: wait_for=> :ref:`Enable the debug mode of asyncio ` to get the -traceback where the task was created. Example of log in debug mode:: +traceback where the task was created. Example of log in debug mode: + +.. code-block:: none Task was destroyed but it is pending! source_traceback: Object created at (most recent call last): diff --git a/Doc/library/cgi.rst b/Doc/library/cgi.rst --- a/Doc/library/cgi.rst +++ b/Doc/library/cgi.rst @@ -442,7 +442,9 @@ invoked as a script, the file will dump its environment and the contents of the form in HTML form. Give it the right mode etc, and send it a request. If it's installed in the standard :file:`cgi-bin` directory, it should be possible to -send it a request by entering a URL into your browser of the form:: +send it a request by entering a URL into your browser of the form: + +.. code-block:: none http://yourhostname/cgi-bin/cgi.py?name=Joe+Blow&addr=At+Home @@ -534,4 +536,3 @@ order the field values should be supplied in, but knowing whether a request was received from a conforming browser, or even from a browser at all, is tedious and error-prone. - diff --git a/Doc/library/cmd.rst b/Doc/library/cmd.rst --- a/Doc/library/cmd.rst +++ b/Doc/library/cmd.rst @@ -314,7 +314,9 @@ Here is a sample session with the turtle shell showing the help functions, using -blank lines to repeat commands, and the simple record and playback facility:: +blank lines to repeat commands, and the simple record and playback facility: + +.. code-block:: none Welcome to the turtle shell. Type help or ? to list commands. @@ -373,4 +375,3 @@ (turtle) bye Thank you for using Turtle - diff --git a/Doc/library/decimal.rst b/Doc/library/decimal.rst --- a/Doc/library/decimal.rst +++ b/Doc/library/decimal.rst @@ -163,7 +163,7 @@ >>> c.traps[FloatOperation] = True >>> Decimal(3.14) Traceback (most recent call last): - File "", line 1, in + File "", line 1, in decimal.FloatOperation: [] >>> Decimal('3.5') < 3.7 Traceback (most recent call last): diff --git a/Doc/library/doctest.rst b/Doc/library/doctest.rst --- a/Doc/library/doctest.rst +++ b/Doc/library/doctest.rst @@ -88,14 +88,18 @@ doctest.testmod() If you run :file:`example.py` directly from the command line, :mod:`doctest` -works its magic:: +works its magic: + +.. code-block:: shell-session $ python example.py $ There's no output! That's normal, and it means all the examples worked. Pass ``-v`` to the script, and :mod:`doctest` prints a detailed log of what -it's trying, and prints a summary at the end:: +it's trying, and prints a summary at the end: + +.. code-block:: shell-session $ python example.py -v Trying: @@ -109,7 +113,9 @@ [1, 1, 2, 6, 24, 120] ok -And so on, eventually ending with:: +And so on, eventually ending with: + +.. code-block:: none Trying: factorial(1e100) @@ -196,7 +202,9 @@ That short script executes and verifies any interactive Python examples contained in the file :file:`example.txt`. The file content is treated as if it were a single giant docstring; the file doesn't need to contain a Python -program! For example, perhaps :file:`example.txt` contains this:: +program! For example, perhaps :file:`example.txt` contains this: + +.. code-block:: none The ``example`` module ====================== diff --git a/Doc/library/email-examples.rst b/Doc/library/email-examples.rst --- a/Doc/library/email-examples.rst +++ b/Doc/library/email-examples.rst @@ -59,7 +59,9 @@ .. literalinclude:: ../includes/email-read-alternative-new-api.py -Up to the prompt, the output from the above is:: +Up to the prompt, the output from the above is: + +.. code-block:: none To: Penelope Pussycat , Fabrette Pussycat From: Pep? Le Pew diff --git a/Doc/library/html.parser.rst b/Doc/library/html.parser.rst --- a/Doc/library/html.parser.rst +++ b/Doc/library/html.parser.rst @@ -61,7 +61,9 @@ parser.feed('Test' '

    Parse me!

    ') -The output will then be:: +The output will then be: + +.. code-block:: none Encountered a start tag: html Encountered a start tag: head diff --git a/Doc/library/idle.rst b/Doc/library/idle.rst --- a/Doc/library/idle.rst +++ b/Doc/library/idle.rst @@ -524,7 +524,7 @@ Command line usage ^^^^^^^^^^^^^^^^^^ -:: +.. code-block:: none idle.py [-c command] [-d] [-e] [-h] [-i] [-r file] [-s] [-t title] [-] [arg] ... diff --git a/Doc/library/logging.config.rst b/Doc/library/logging.config.rst --- a/Doc/library/logging.config.rst +++ b/Doc/library/logging.config.rst @@ -243,7 +243,9 @@ handler. All *other* keys are passed through as keyword arguments to the - handler's constructor. For example, given the snippet:: + handler's constructor. For example, given the snippet: + + .. code-block:: yaml handlers: console: @@ -352,7 +354,9 @@ configuration to indicate that a connection exists between the source and the destination object with that id. -So, for example, consider the following YAML snippet:: +So, for example, consider the following YAML snippet: + +.. code-block:: yaml formatters: brief: @@ -409,7 +413,9 @@ configuration dictionary and which returns the instantiated object. This is signalled by an absolute import path to the factory being made available under the special key ``'()'``. Here's a concrete -example:: +example: + +.. code-block:: yaml formatters: brief: @@ -626,7 +632,9 @@ :func:`dictConfig`, so it's worth considering transitioning to this newer API when it's convenient to do so. -Examples of these sections in the file are given below. :: +Examples of these sections in the file are given below. + +.. code-block:: ini [loggers] keys=root,log02,log03,log04,log05,log06,log07 @@ -638,7 +646,9 @@ keys=form01,form02,form03,form04,form05,form06,form07,form08,form09 The root logger must specify a level and a list of handlers. An example of a -root logger section is given below. :: +root logger section is given below. + +.. code-block:: ini [logger_root] level=NOTSET @@ -655,7 +665,9 @@ file. For loggers other than the root logger, some additional information is required. -This is illustrated by the following example. :: +This is illustrated by the following example. + +.. code-block:: ini [logger_parser] level=DEBUG @@ -673,7 +685,8 @@ say the name used by the application to get the logger. Sections which specify handler configuration are exemplified by the following. -:: + +.. code-block:: ini [handler_hand01] class=StreamHandler @@ -693,7 +706,9 @@ The ``args`` entry, when :func:`eval`\ uated in the context of the ``logging`` package's namespace, is the list of arguments to the constructor for the handler class. Refer to the constructors for the relevant handlers, or to the examples -below, to see how typical entries are constructed. :: +below, to see how typical entries are constructed. + +.. code-block:: ini [handler_hand02] class=FileHandler @@ -744,7 +759,9 @@ formatter=form09 args=('localhost:9022', '/log', 'GET') -Sections which specify formatter configuration are typified by the following. :: +Sections which specify formatter configuration are typified by the following. + +.. code-block:: ini [formatter_form01] format=F1 %(asctime)s %(levelname)s %(message)s @@ -780,5 +797,3 @@ Module :mod:`logging.handlers` Useful handlers included with the logging module. - - diff --git a/Doc/library/optparse.rst b/Doc/library/optparse.rst --- a/Doc/library/optparse.rst +++ b/Doc/library/optparse.rst @@ -678,7 +678,9 @@ this option on the command line, it expands your ``version`` string (by replacing ``%prog``), prints it to stdout, and exits. -For example, if your script is called ``/usr/bin/foo``:: +For example, if your script is called ``/usr/bin/foo``: + +.. code-block:: shell-session $ /usr/bin/foo --version foo 1.0 @@ -728,14 +730,18 @@ error status 2. Consider the first example above, where the user passes ``4x`` to an option -that takes an integer:: +that takes an integer: + +.. code-block:: shell-session $ /usr/bin/foo -n 4x Usage: foo [options] foo: error: option -n: invalid integer value: '4x' -Or, where the user fails to pass a value at all:: +Or, where the user fails to pass a value at all: + +.. code-block:: shell-session $ /usr/bin/foo -n Usage: foo [options] diff --git a/Doc/library/pickletools.rst b/Doc/library/pickletools.rst --- a/Doc/library/pickletools.rst +++ b/Doc/library/pickletools.rst @@ -30,7 +30,9 @@ untrusted source, ``-m pickletools`` is a safer option because it does not execute pickle bytecode. -For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``:: +For example, with a tuple ``(1, 2)`` pickled in file ``x.pickle``: + +.. code-block:: shell-session $ python -m pickle x.pickle (1, 2) @@ -106,4 +108,3 @@ Returns a new equivalent pickle string after eliminating unused ``PUT`` opcodes. The optimized pickle is shorter, takes less transmission time, requires less storage space, and unpickles more efficiently. - diff --git a/Doc/library/pyexpat.rst b/Doc/library/pyexpat.rst --- a/Doc/library/pyexpat.rst +++ b/Doc/library/pyexpat.rst @@ -86,7 +86,9 @@ separator. For example, if *namespace_separator* is set to a space character (``' '``) and - the following document is parsed:: + the following document is parsed: + + .. code-block:: xml >> make_archive(archive_name, 'gztar', root_dir) '/Users/tarek/myarchive.tar.gz' -The resulting archive contains:: +The resulting archive contains: + +.. code-block:: shell-session $ tar -tzvf /Users/tarek/myarchive.tar.gz drwx------ tarek/staff 0 2010-02-01 16:23:40 ./ diff --git a/Doc/library/socketserver.rst b/Doc/library/socketserver.rst --- a/Doc/library/socketserver.rst +++ b/Doc/library/socketserver.rst @@ -499,7 +499,9 @@ The output of the example should look something like this: -Server:: +Server: + +.. code-block:: shell-session $ python TCPServer.py 127.0.0.1 wrote: @@ -507,7 +509,9 @@ 127.0.0.1 wrote: b'python is nice' -Client:: +Client: + +.. code-block:: shell-session $ python TCPClient.py hello world with TCP Sent: hello world with TCP @@ -619,7 +623,9 @@ server.shutdown() -The output of the example should look something like this:: +The output of the example should look something like this: + +.. code-block:: shell-session $ python ThreadedTCPServer.py Server loop running in thread: Thread-1 diff --git a/Doc/library/subprocess.rst b/Doc/library/subprocess.rst --- a/Doc/library/subprocess.rst +++ b/Doc/library/subprocess.rst @@ -954,20 +954,23 @@ Replacing /bin/sh shell backquote ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -:: +.. code-block:: bash output=`mycmd myarg` - # becomes + +becomes:: + output = check_output(["mycmd", "myarg"]) - Replacing shell pipeline ^^^^^^^^^^^^^^^^^^^^^^^^ -:: +.. code-block:: bash output=`dmesg | grep hda` - # becomes + +becomes:: + p1 = Popen(["dmesg"], stdout=PIPE) p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE) p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits. @@ -977,10 +980,14 @@ to receive a SIGPIPE if p2 exits before p1. Alternatively, for trusted input, the shell's own pipeline support may still -be used directly:: +be used directly: + +.. code-block:: bash output=`dmesg | grep hda` - # becomes + +becomes:: + output=check_output("dmesg | grep hda", shell=True) diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst --- a/Doc/library/sys.rst +++ b/Doc/library/sys.rst @@ -1287,7 +1287,9 @@ A dictionary of the various implementation-specific flags passed through the :option:`-X` command-line option. Option names are either mapped to - their values, if given explicitly, or to :const:`True`. Example:: + their values, if given explicitly, or to :const:`True`. Example: + + .. code-block:: shell-session $ ./python -Xa=b -Xc Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50) diff --git a/Doc/library/sysconfig.rst b/Doc/library/sysconfig.rst --- a/Doc/library/sysconfig.rst +++ b/Doc/library/sysconfig.rst @@ -229,7 +229,9 @@ Using :mod:`sysconfig` as a script ---------------------------------- -You can use :mod:`sysconfig` as a script with Python's *-m* option:: +You can use :mod:`sysconfig` as a script with Python's *-m* option: + +.. code-block:: shell-session $ python -m sysconfig Platform: "macosx-10.4-i386" diff --git a/Doc/library/tarfile.rst b/Doc/library/tarfile.rst --- a/Doc/library/tarfile.rst +++ b/Doc/library/tarfile.rst @@ -654,25 +654,35 @@ with tar archives. If you want to create a new tar archive, specify its name after the :option:`-c` -option and then list the filename(s) that should be included:: +option and then list the filename(s) that should be included: + +.. code-block:: shell-session $ python -m tarfile -c monty.tar spam.txt eggs.txt -Passing a directory is also acceptable:: +Passing a directory is also acceptable: + +.. code-block:: shell-session $ python -m tarfile -c monty.tar life-of-brian_1979/ If you want to extract a tar archive into the current directory, use -the :option:`-e` option:: +the :option:`-e` option: + +.. code-block:: shell-session $ python -m tarfile -e monty.tar You can also extract a tar archive into a different directory by passing the -directory's name:: +directory's name: + +.. code-block:: shell-session $ python -m tarfile -e monty.tar other-dir/ -For a list of the files in a tar archive, use the :option:`-l` option:: +For a list of the files in a tar archive, use the :option:`-l` option: + +.. code-block:: shell-session $ python -m tarfile -l monty.tar diff --git a/Doc/library/zipimport.rst b/Doc/library/zipimport.rst --- a/Doc/library/zipimport.rst +++ b/Doc/library/zipimport.rst @@ -147,7 +147,9 @@ -------- Here is an example that imports a module from a ZIP archive - note that the -:mod:`zipimport` module is not explicitly used. :: +:mod:`zipimport` module is not explicitly used. + +.. code-block:: shell-session $ unzip -l example.zip Archive: example.zip diff --git a/Doc/reference/expressions.rst b/Doc/reference/expressions.rst --- a/Doc/reference/expressions.rst +++ b/Doc/reference/expressions.rst @@ -1406,7 +1406,9 @@ Lambda expressions (sometimes called lambda forms) are used to create anonymous functions. The expression ``lambda arguments: expression`` yields a function -object. The unnamed object behaves like a function object defined with :: +object. The unnamed object behaves like a function object defined with: + +.. code-block:: none def (arguments): return expression diff --git a/Doc/reference/lexical_analysis.rst b/Doc/reference/lexical_analysis.rst --- a/Doc/reference/lexical_analysis.rst +++ b/Doc/reference/lexical_analysis.rst @@ -794,7 +794,10 @@ .. index:: single: operators -The following tokens are operators:: +The following tokens are operators: + +.. code-block:: none + + - * ** / // % @ << >> & | ^ ~ @@ -808,7 +811,9 @@ .. index:: single: delimiters -The following tokens serve as delimiters in the grammar:: +The following tokens serve as delimiters in the grammar: + +.. code-block:: none ( ) [ ] { } , : . ; @ = -> @@ -821,12 +826,16 @@ but also perform an operation. The following printing ASCII characters have special meaning as part of other -tokens or are otherwise significant to the lexical analyzer:: +tokens or are otherwise significant to the lexical analyzer: + +.. code-block:: none ' " # \ The following printing ASCII characters are not used in Python. Their -occurrence outside string literals and comments is an unconditional error:: +occurrence outside string literals and comments is an unconditional error: + +.. code-block:: none $ ? ` diff --git a/Doc/tutorial/controlflow.rst b/Doc/tutorial/controlflow.rst --- a/Doc/tutorial/controlflow.rst +++ b/Doc/tutorial/controlflow.rst @@ -504,7 +504,9 @@ client="John Cleese", sketch="Cheese Shop Sketch") -and of course it would print:: +and of course it would print: + +.. code-block:: none -- Do you have any Limburger ? -- I'm sorry, we're all out of Limburger diff --git a/Doc/tutorial/interpreter.rst b/Doc/tutorial/interpreter.rst --- a/Doc/tutorial/interpreter.rst +++ b/Doc/tutorial/interpreter.rst @@ -94,7 +94,9 @@ usually three greater-than signs (``>>>``); for continuation lines it prompts with the *secondary prompt*, by default three dots (``...``). The interpreter prints a welcome message stating its version number and a copyright notice -before printing the first prompt:: +before printing the first prompt: + +.. code-block:: shell-session $ python3.6 Python 3.6 (default, Sep 16 2015, 09:25:04) diff --git a/Doc/tutorial/modules.rst b/Doc/tutorial/modules.rst --- a/Doc/tutorial/modules.rst +++ b/Doc/tutorial/modules.rst @@ -140,7 +140,9 @@ you can make the file usable as a script as well as an importable module, because the code that parses the command line only runs if the module is -executed as the "main" file:: +executed as the "main" file: + +.. code-block:: shell-session $ python fibo.py 50 1 1 2 3 5 8 13 21 34 diff --git a/Doc/whatsnew/2.3.rst b/Doc/whatsnew/2.3.rst --- a/Doc/whatsnew/2.3.rst +++ b/Doc/whatsnew/2.3.rst @@ -291,7 +291,9 @@ The new :mod:`zipimport` module adds support for importing modules from a ZIP- format archive. You don't need to import the module explicitly; it will be automatically imported if a ZIP archive's filename is added to ``sys.path``. -For example:: +For example: + +.. code-block:: shell-session amk at nyman:~/src/python$ unzip -l /tmp/example.zip Archive: /tmp/example.zip @@ -1761,7 +1763,9 @@ strings containing the remaining arguments. Invoking the script with the various arguments now works as you'd expect it to. -Note that the length argument is automatically converted to an integer. :: +Note that the length argument is automatically converted to an integer. + +.. code-block:: shell-session $ ./python opt.py -i data arg1 @@ -1771,7 +1775,9 @@ [] $ -The help message is automatically generated for you:: +The help message is automatically generated for you: + +.. code-block:: shell-session $ ./python opt.py --help usage: opt.py [options] @@ -2078,4 +2084,3 @@ MacIntyre, Lalo Martins, Chad Netzer, Gustavo Niemeyer, Neal Norwitz, Hans Nowak, Chris Reedy, Francesco Ricciardi, Vinay Sajip, Neil Schemenauer, Roman Suzi, Jason Tishler, Just van Rossum. - diff --git a/Doc/whatsnew/2.4.rst b/Doc/whatsnew/2.4.rst --- a/Doc/whatsnew/2.4.rst +++ b/Doc/whatsnew/2.4.rst @@ -1425,7 +1425,9 @@ print word Running the above function's tests with :const:`doctest.REPORT_UDIFF` specified, -you get the following output:: +you get the following output: + +.. code-block:: none ********************************************************************** File "t.py", line 15, in g diff --git a/Doc/whatsnew/2.7.rst b/Doc/whatsnew/2.7.rst --- a/Doc/whatsnew/2.7.rst +++ b/Doc/whatsnew/2.7.rst @@ -2290,7 +2290,9 @@ written in pure Python could cause a segmentation fault by taking a :c:type:`PyCObject` from module A and somehow substituting it for the :c:type:`PyCObject` in module B. Capsules know their own name, -and getting the pointer requires providing the name:: +and getting the pointer requires providing the name: + +.. code-block:: c void *vtable; @@ -2616,4 +2618,3 @@ suggestions, corrections and assistance with various drafts of this article: Nick Coghlan, Philip Jenvey, Ryan Lovett, R. David Murray, Hugh Secker-Walker. - diff --git a/Doc/whatsnew/3.0.rst b/Doc/whatsnew/3.0.rst --- a/Doc/whatsnew/3.0.rst +++ b/Doc/whatsnew/3.0.rst @@ -117,7 +117,9 @@ print("There are <", 2**32, "> possibilities!", sep="") -which produces:: +which produces: + +.. code-block:: none There are <4294967296> possibilities! diff --git a/Doc/whatsnew/3.2.rst b/Doc/whatsnew/3.2.rst --- a/Doc/whatsnew/3.2.rst +++ b/Doc/whatsnew/3.2.rst @@ -160,6 +160,8 @@ parser_m.add_argument('-c', '--course', type=int, required=True) parser_m.add_argument('-s', '--speed', type=int, default=0) +.. code-block:: shell-session + $ ./helm.py --help # top level help (launch and move) $ ./helm.py launch --help # help for launch options $ ./helm.py launch --missiles # set missiles=True and torpedos=False @@ -478,7 +480,9 @@ * The interpreter can now be started with a quiet option, ``-q``, to prevent the copyright and version information from being displayed in the interactive - mode. The option can be introspected using the :attr:`sys.flags` attribute:: + mode. The option can be introspected using the :attr:`sys.flags` attribute: + + .. code-block:: shell-session $ python -q >>> sys.flags @@ -573,7 +577,9 @@ by Benjamin Peterson in :issue:`8413`.) * Warnings are now easier to control using the :envvar:`PYTHONWARNINGS` - environment variable as an alternative to using ``-W`` at the command line:: + environment variable as an alternative to using ``-W`` at the command line: + + .. code-block:: shell-session $ export PYTHONWARNINGS='ignore::RuntimeWarning::,once::UnicodeWarning::' @@ -595,7 +601,9 @@ object ensures it closes the underlying operating system resource (usually, a file descriptor), the delay in deallocating the object could produce various issues, especially under Windows. Here is an example - of enabling the warning from the command line:: + of enabling the warning from the command line: + + .. code-block:: shell-session $ python -q -Wdefault >>> f = open("foo", "wb") @@ -1720,7 +1728,9 @@ test discovery can find tests within packages, locating any test importable from the top-level directory. The top-level directory can be specified with the `-t` option, a pattern for matching files with ``-p``, and a directory to - start discovery with ``-s``:: + start discovery with ``-s``: + + .. code-block:: shell-session $ python -m unittest discover -s my_proj_dir -p _test.py @@ -1895,7 +1905,9 @@ The :mod:`pydoc` module now provides a much-improved Web server interface, as well as a new command-line option ``-b`` to automatically open a browser window -to display that server:: +to display that server: + +.. code-block:: shell-session $ pydoc3.2 -b @@ -1998,7 +2010,9 @@ '/Users/raymondhettinger/Library/Python/3.2/lib/python/site-packages' Conveniently, some of site's functionality is accessible directly from the -command-line:: +command-line: + +.. code-block:: shell-session $ python -m site --user-base /Users/raymondhettinger/.local @@ -2031,7 +2045,9 @@ * :func:`~sysconfig.get_config_vars` returns a dictionary of platform specific variables. -There is also a convenient command-line interface:: +There is also a convenient command-line interface: + +.. code-block:: doscon C:\Python32>python -m sysconfig Platform: "win32" @@ -2265,7 +2281,9 @@ The demonstration code for the :mod:`turtle` module was moved from the *Demo* directory to main library. It includes over a dozen sample scripts with lively displays. Being on :attr:`sys.path`, it can now be run directly -from the command-line:: +from the command-line: + +.. code-block:: shell-session $ python -m turtledemo @@ -2701,4 +2719,3 @@ * Due to the new :term:`GIL` implementation, :c:func:`PyEval_InitThreads()` cannot be called before :c:func:`Py_Initialize()` anymore. - diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst --- a/Doc/whatsnew/3.3.rst +++ b/Doc/whatsnew/3.3.rst @@ -871,7 +871,9 @@ :envvar:`PYTHONFAULTHANDLER` environment variable or by using :option:`-X` ``faulthandler`` command line option. -Example of a segmentation fault on Linux: :: +Example of a segmentation fault on Linux: + +.. code-block:: shell-session $ python -q -X faulthandler >>> import ctypes @@ -999,7 +1001,6 @@ Incremental CJK codec encoders are no longer reset at each call to their encode() methods. For example:: - $ ./python -q >>> import codecs >>> encoder = codecs.getincrementalencoder('hz')('strict') >>> b''.join(encoder.encode(x) for x in '\u52ff\u65bd\u65bc\u4eba\u3002 Bye.') diff --git a/Doc/whatsnew/3.5.rst b/Doc/whatsnew/3.5.rst --- a/Doc/whatsnew/3.5.rst +++ b/Doc/whatsnew/3.5.rst @@ -742,7 +742,9 @@ With the new module, bundling your application is as simple as putting all the files, including a ``__main__.py`` file, into a directory ``myapp`` -and running:: +and running: + +.. code-block:: shell-session $ python -m zipapp myapp $ python myapp.pyz -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 00:05:05 2016 From: python-checkins at python.org (martin.panter) Date: Fri, 29 Jul 2016 04:05:05 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2317596=3A_MINGW=3A?= =?utf-8?q?_add_wincrypt=2Eh_in_Python/random=2Ec?= Message-ID: <20160729040504.31296.9982.01298718@psf.io> https://hg.python.org/cpython/rev/11ed7c49f5df changeset: 102482:11ed7c49f5df user: Martin Panter date: Fri Jul 29 04:00:44 2016 +0000 summary: Issue #17596: MINGW: add wincrypt.h in Python/random.c Based on patch by Roumen Petrov. files: Misc/NEWS | 2 ++ Python/random.c | 3 +++ 2 files changed, 5 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -10,6 +10,8 @@ Core and Builtins ----------------- +- Issue #17596: Include to help with Min GW building. + - Issue #27507: Add integer overflow check in bytearray.extend(). Patch by Xiang Zhang. diff --git a/Python/random.c b/Python/random.c --- a/Python/random.c +++ b/Python/random.c @@ -1,6 +1,9 @@ #include "Python.h" #ifdef MS_WINDOWS # include +/* All sample MSDN wincrypt programs include the header below. It is at least + * required with Min GW. */ +# include #else # include # ifdef HAVE_SYS_STAT_H -- Repository URL: https://hg.python.org/cpython From lp_benchmark_robot at intel.com Fri Jul 29 08:26:40 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 29 Jul 2016 13:26:40 +0100 Subject: [Python-checkins] GOOD Benchmark Results for Python 2.7 2016-07-29 Message-ID: <628123b6-0972-4886-9746-1781b00c73a5@irsmsx103.ger.corp.intel.com> Results for project Python 2.7, build date 2016-07-29 02:48:25 +0000 commit: c8c1ea94379a previous commit: 7d692840c152 revision date: 2016-07-28 01:11:04 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v2.7.10, with hash 15c95b7d81dc from 2015-05-23 16:02:14+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.44% 1.79% 5.06% 5.94% :-) pybench 0.18% 0.09% 5.86% 5.03% :-( regex_v8 0.63% -0.13% -2.40% 10.81% :-) nbody 0.26% 0.04% 8.64% 4.19% :-| json_dump_v2 0.39% -0.76% 1.01% 13.72% :-( normal_startup 1.92% -0.40% -5.99% 1.81% :-| ssbench 0.16% -0.74% 1.90% 2.51% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/good-benchmark-results-for-python-2-7-2016-07-29/ Note: Benchmark results for ssbench are measured in requests/second while all other are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From lp_benchmark_robot at intel.com Fri Jul 29 08:27:41 2016 From: lp_benchmark_robot at intel.com (lp_benchmark_robot at intel.com) Date: Fri, 29 Jul 2016 13:27:41 +0100 Subject: [Python-checkins] NEUTRAL Benchmark Results for Python Default 2016-07-29 Message-ID: <6f307a3e-0bd6-4ccd-8de1-61e1a6d4a068@irsmsx103.ger.corp.intel.com> Results for project Python default, build date 2016-07-29 02:02:09 +0000 commit: 9b135b8d3166 previous commit: 2468581846da revision date: 2016-07-29 00:01:09 +0000 environment: Haswell-EP cpu: Intel(R) Xeon(R) CPU E5-2699 v3 @ 2.30GHz 2x18 cores, stepping 2, LLC 45 MB mem: 128 GB os: CentOS 7.1 kernel: Linux 3.10.0-229.4.2.el7.x86_64 Baseline results were generated using release v3.4.3, with hash b4cbecbc0781 from 2015-02-25 12:15:33+00:00 ---------------------------------------------------------------------------------- benchmark relative change since change since current rev run std_dev* last run baseline with PGO ---------------------------------------------------------------------------------- :-) django_v2 0.41% 0.29% 9.83% 17.20% :-| pybench 0.19% 0.05% 1.87% 6.57% :-( regex_v8 2.73% -0.27% -3.31% 3.34% :-| nbody 0.19% 0.30% -1.95% 11.62% :-| json_dump_v2 0.34% 0.09% -1.48% 12.10% :-| normal_startup 0.90% 0.11% 0.22% 5.53% ---------------------------------------------------------------------------------- * Relative Standard Deviation (Standard Deviation/Average) If this is not displayed properly please visit our results page here: http://languagesperformance.intel.com/neutral-benchmark-results-for-python-default-2016-07-29/ Note: Benchmark results are measured in seconds. Subject Label Legend: Attributes are determined based on the performance evolution of the workloads compared to the previous measurement iteration. NEUTRAL: performance did not change by more than 1% for any workload GOOD: performance improved by more than 1% for at least one workload and there is no regression greater than 1% BAD: performance dropped by more than 1% for at least one workload and there is no improvement greater than 1% UGLY: performance improved by more than 1% for at least one workload and also dropped by more than 1% for at least one workload Our lab does a nightly source pull and build of the Python project and measures performance changes against the previous stable version and the previous nightly measurement. This is provided as a service to the community so that quality issues with current hardware can be identified quickly. Intel technologies' features and benefits depend on system configuration and may require enabled hardware, software or service activation. Performance varies depending on system configuration. From python-checkins at python.org Fri Jul 29 17:35:48 2016 From: python-checkins at python.org (vinay.sajip) Date: Fri, 29 Jul 2016 21:35:48 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Closes_=231521950=3A_Made_?= =?utf-8?q?shlex_parsing_more_shell-like=2E?= Message-ID: <20160729213548.32675.53149.FAA8B446@psf.io> https://hg.python.org/cpython/rev/ea99e2f0b829 changeset: 102483:ea99e2f0b829 user: Vinay Sajip date: Fri Jul 29 22:35:03 2016 +0100 summary: Closes #1521950: Made shlex parsing more shell-like. files: Doc/library/shlex.rst | 109 +++++++++++++++++++++++++-- Lib/shlex.py | 74 +++++++++++++----- Lib/test/test_shlex.py | 112 +++++++++++++++++++++++++++++ 3 files changed, 264 insertions(+), 31 deletions(-) diff --git a/Doc/library/shlex.rst b/Doc/library/shlex.rst --- a/Doc/library/shlex.rst +++ b/Doc/library/shlex.rst @@ -73,11 +73,11 @@ The :mod:`shlex` module defines the following class: -.. class:: shlex(instream=None, infile=None, posix=False) +.. class:: shlex(instream=None, infile=None, posix=False, punctuation_chars=False) A :class:`~shlex.shlex` instance or subclass instance is a lexical analyzer object. The initialization argument, if present, specifies where to read - characters from. It must be a file-/stream-like object with + characters from. It must be a file-/stream-like object with :meth:`~io.TextIOBase.read` and :meth:`~io.TextIOBase.readline` methods, or a string. If no argument is given, input will be taken from ``sys.stdin``. The second optional argument is a filename string, which sets the initial @@ -87,8 +87,19 @@ when *posix* is not true (default), the :class:`~shlex.shlex` instance will operate in compatibility mode. When operating in POSIX mode, :class:`~shlex.shlex` will try to be as close as possible to the POSIX shell - parsing rules. + parsing rules. The *punctuation_chars* argument provides a way to make the + behaviour even closer to how real shells parse. This can take a number of + values: the default value, ``False``, preserves the behaviour seen under + Python 3.5 and earlier. If set to ``True``, then parsing of the characters + ``();<>|&`` is changed: any run of these characters (considered punctuation + characters) is returned as a single token. If set to a non-empty string of + characters, those characters will be used as the punctuation characters. Any + characters in the :attr:`wordchars` attribute that appear in + *punctuation_chars* will be removed from :attr:`wordchars`. See + :ref:`improved-shell-compatibility` for more information. + .. versionchanged:: 3.6 + The `punctuation_chars` parameter was added. .. seealso:: @@ -191,7 +202,13 @@ .. attribute:: shlex.wordchars The string of characters that will accumulate into multi-character tokens. By - default, includes all ASCII alphanumerics and underscore. + default, includes all ASCII alphanumerics and underscore. In POSIX mode, the + accented characters in the Latin-1 set are also included. If + :attr:`punctuation_chars` is not empty, the characters ``~-./*?=``, which can + appear in filename specifications and command line parameters, will also be + included in this attribute, and any characters which appear in + ``punctuation_chars`` will be removed from ``wordchars`` if they are present + there. .. attribute:: shlex.whitespace @@ -222,9 +239,13 @@ .. attribute:: shlex.whitespace_split - If ``True``, tokens will only be split in whitespaces. This is useful, for + If ``True``, tokens will only be split in whitespaces. This is useful, for example, for parsing command lines with :class:`~shlex.shlex`, getting - tokens in a similar way to shell arguments. + tokens in a similar way to shell arguments. If this attribute is ``True``, + :attr:`punctuation_chars` will have no effect, and splitting will happen + only on whitespaces. When using :attr:`punctuation_chars`, which is + intended to provide parsing closer to that implemented by shells, it is + advisable to leave ``whitespace_split`` as ``False`` (the default value). .. attribute:: shlex.infile @@ -245,10 +266,9 @@ This attribute is ``None`` by default. If you assign a string to it, that string will be recognized as a lexical-level inclusion request similar to the ``source`` keyword in various shells. That is, the immediately following token - will be opened as a filename and input will - be taken from that stream until EOF, at which - point the :meth:`~io.IOBase.close` method of that stream will be called and - the input source will again become the original input stream. Source + will be opened as a filename and input will be taken from that stream until + EOF, at which point the :meth:`~io.IOBase.close` method of that stream will be + called and the input source will again become the original input stream. Source requests may be stacked any number of levels deep. @@ -275,6 +295,16 @@ (``''``), in non-POSIX mode, and to ``None`` in POSIX mode. +.. attribute:: shlex.punctuation_chars + + Characters that will be considered punctuation. Runs of punctuation + characters will be returned as a single token. However, note that no + semantic validity checking will be performed: for example, '>>>' could be + returned as a token, even though it may not be recognised as such by shells. + + .. versionadded:: 3.6 + + .. _shlex-parsing-rules: Parsing Rules @@ -327,3 +357,62 @@ * EOF is signaled with a :const:`None` value; * Quoted empty strings (``''``) are allowed. + +.. _improved-shell-compatibility: + +Improved Compatibility with Shells +---------------------------------- + +.. versionadded:: 3.6 + +The :class:`shlex` class provides compatibility with the parsing performed by +common Unix shells like ``bash``, ``dash``, and ``sh``. To take advantage of +this compatibility, specify the ``punctuation_chars`` argument in the +constructor. This defaults to ``False``, which preserves pre-3.6 behaviour. +However, if it is set to ``True``, then parsing of the characters ``();<>|&`` +is changed: any run of these characters is returned as a single token. While +this is short of a full parser for shells (which would be out of scope for the +standard library, given the multiplicity of shells out there), it does allow +you to perform processing of command lines more easily than you could +otherwise. To illustrate, you can see the difference in the following snippet:: + + import shlex + + for punct in (False, True): + if punct: + message = 'Old' + else: + message = 'New' + text = "a && b; c && d || e; f >'abc'; (def \"ghi\")" + s = shlex.shlex(text, punctuation_chars=punct) + print('%s: %s' % (message, list(s))) + +which prints out:: + + Old: ['a', '&', '&', 'b', ';', 'c', '&', '&', 'd', '|', '|', 'e', ';', 'f', '>', "'abc'", ';', '(', 'def', '"ghi"', ')'] + New: ['a', '&&', 'b', ';', 'c', '&&', 'd', '||', 'e', ';', 'f', '>', "'abc'", ';', '(', 'def', '"ghi"', ')'] + +Of course, tokens will be returned which are not valid for shells, and you'll +need to implement your own error checks on the returned tokens. + +Instead of passing ``True`` as the value for the punctuation_chars parameter, +you can pass a string with specific characters, which will be used to determine +which characters constitute punctuation. For example:: + + >>> import shlex + >>> s = shlex.shlex("a && b || c", punctuation_chars="|") + >>> list(s) + ['a', '&', '&', 'b', '||', 'c'] + +.. note:: When ``punctuation_chars`` is specified, the :attr:`~shlex.wordchars` + attribute is augmented with the characters ``~-./*?=``. That is because these + characters can appear in file names (including wildcards) and command-line + arguments (e.g. ``--color=auto``). Hence:: + + >>> import shlex + >>> s = shlex.shlex('~/a && b-c --color=auto || d *.py?', + ... punctuation_chars=True) + >>> list(s) + ['~/a', '&&', 'b-c', '--color=auto', '||', 'd', '*.py?'] + + diff --git a/Lib/shlex.py b/Lib/shlex.py --- a/Lib/shlex.py +++ b/Lib/shlex.py @@ -5,6 +5,7 @@ # push_source() and pop_source() made explicit by ESR, January 2001. # Posix compliance, split(), string arguments, and # iterator interface by Gustavo Niemeyer, April 2003. +# changes to tokenize more like Posix shells by Vinay Sajip, July 2016. import os import re @@ -17,7 +18,8 @@ class shlex: "A lexical analyzer class for simple shell-like syntaxes." - def __init__(self, instream=None, infile=None, posix=False): + def __init__(self, instream=None, infile=None, posix=False, + punctuation_chars=False): if isinstance(instream, str): instream = StringIO(instream) if instream is not None: @@ -49,6 +51,19 @@ self.token = '' self.filestack = deque() self.source = None + if not punctuation_chars: + punctuation_chars = '' + elif punctuation_chars is True: + punctuation_chars = '();<>|&' + self.punctuation_chars = punctuation_chars + if punctuation_chars: + # _pushback_chars is a push back queue used by lookahead logic + self._pushback_chars = deque() + # these chars added because allowed in file names, args, wildcards + self.wordchars += '~-./*?=' + #remove any punctuation chars from wordchars + t = self.wordchars.maketrans(dict.fromkeys(punctuation_chars)) + self.wordchars = self.wordchars.translate(t) def push_token(self, tok): "Push a token onto the stack popped by the get_token method" @@ -115,12 +130,15 @@ quoted = False escapedstate = ' ' while True: - nextchar = self.instream.read(1) + if self.punctuation_chars and self._pushback_chars: + nextchar = self._pushback_chars.pop() + else: + nextchar = self.instream.read(1) if nextchar == '\n': - self.lineno = self.lineno + 1 + self.lineno += 1 if self.debug >= 3: - print("shlex: in state", repr(self.state), \ - "I see character:", repr(nextchar)) + print("shlex: in state %r I see character: %r" % (self.state, + nextchar)) if self.state is None: self.token = '' # past end of file break @@ -137,13 +155,16 @@ continue elif nextchar in self.commenters: self.instream.readline() - self.lineno = self.lineno + 1 + self.lineno += 1 elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar elif nextchar in self.wordchars: self.token = nextchar self.state = 'a' + elif nextchar in self.punctuation_chars: + self.token = nextchar + self.state = 'c' elif nextchar in self.quotes: if not self.posix: self.token = nextchar @@ -166,17 +187,17 @@ raise ValueError("No closing quotation") if nextchar == self.state: if not self.posix: - self.token = self.token + nextchar + self.token += nextchar self.state = ' ' break else: self.state = 'a' - elif self.posix and nextchar in self.escape and \ - self.state in self.escapedquotes: + elif (self.posix and nextchar in self.escape and self.state + in self.escapedquotes): escapedstate = self.state self.state = nextchar else: - self.token = self.token + nextchar + self.token += nextchar elif self.state in self.escape: if not nextchar: # end of file if self.debug >= 2: @@ -185,12 +206,12 @@ raise ValueError("No escaped character") # In posix shells, only the quote itself or the escape # character may be escaped within quotes. - if escapedstate in self.quotes and \ - nextchar != self.state and nextchar != escapedstate: - self.token = self.token + self.state - self.token = self.token + nextchar + if (escapedstate in self.quotes and + nextchar != self.state and nextchar != escapedstate): + self.token += self.state + self.token += nextchar self.state = escapedstate - elif self.state == 'a': + elif self.state in ('a', 'c'): if not nextchar: self.state = None # end of file break @@ -204,7 +225,7 @@ continue elif nextchar in self.commenters: self.instream.readline() - self.lineno = self.lineno + 1 + self.lineno += 1 if self.posix: self.state = ' ' if self.token or (self.posix and quoted): @@ -216,15 +237,26 @@ elif self.posix and nextchar in self.escape: escapedstate = 'a' self.state = nextchar - elif nextchar in self.wordchars or nextchar in self.quotes \ - or self.whitespace_split: - self.token = self.token + nextchar + elif self.state == 'c': + if nextchar in self.punctuation_chars: + self.token += nextchar + else: + if nextchar not in self.whitespace: + self._pushback_chars.append(nextchar) + self.state = ' ' + break + elif (nextchar in self.wordchars or nextchar in self.quotes + or self.whitespace_split): + self.token += nextchar else: - self.pushback.appendleft(nextchar) + if self.punctuation_chars: + self._pushback_chars.append(nextchar) + else: + self.pushback.appendleft(nextchar) if self.debug >= 2: print("shlex: I see punctuation in word state") self.state = ' ' - if self.token: + if self.token or (self.posix and quoted): break # emit current token else: continue diff --git a/Lib/test/test_shlex.py b/Lib/test/test_shlex.py --- a/Lib/test/test_shlex.py +++ b/Lib/test/test_shlex.py @@ -173,6 +173,118 @@ "%s: %s != %s" % (self.data[i][0], l, self.data[i][1:])) + def testSyntaxSplitAmpersandAndPipe(self): + """Test handling of syntax splitting of &, |""" + # Could take these forms: &&, &, |&, ;&, ;;& + # of course, the same applies to | and || + # these should all parse to the same output + for delimiter in ('&&', '&', '|&', ';&', ';;&', + '||', '|', '&|', ';|', ';;|'): + src = ['echo hi %s echo bye' % delimiter, + 'echo hi%secho bye' % delimiter] + ref = ['echo', 'hi', delimiter, 'echo', 'bye'] + for ss in src: + s = shlex.shlex(ss, punctuation_chars=True) + result = list(s) + self.assertEqual(ref, result, "While splitting '%s'" % ss) + + def testSyntaxSplitSemicolon(self): + """Test handling of syntax splitting of ;""" + # Could take these forms: ;, ;;, ;&, ;;& + # these should all parse to the same output + for delimiter in (';', ';;', ';&', ';;&'): + src = ['echo hi %s echo bye' % delimiter, + 'echo hi%s echo bye' % delimiter, + 'echo hi%secho bye' % delimiter] + ref = ['echo', 'hi', delimiter, 'echo', 'bye'] + for ss in src: + s = shlex.shlex(ss, punctuation_chars=True) + result = list(s) + self.assertEqual(ref, result, "While splitting '%s'" % ss) + + def testSyntaxSplitRedirect(self): + """Test handling of syntax splitting of >""" + # of course, the same applies to <, | + # these should all parse to the same output + for delimiter in ('<', '|'): + src = ['echo hi %s out' % delimiter, + 'echo hi%s out' % delimiter, + 'echo hi%sout' % delimiter] + ref = ['echo', 'hi', delimiter, 'out'] + for ss in src: + s = shlex.shlex(ss, punctuation_chars=True) + result = list(s) + self.assertEqual(ref, result, "While splitting '%s'" % ss) + + def testSyntaxSplitParen(self): + """Test handling of syntax splitting of ()""" + # these should all parse to the same output + src = ['( echo hi )', + '(echo hi)'] + ref = ['(', 'echo', 'hi', ')'] + for ss in src: + s = shlex.shlex(ss, punctuation_chars=True) + result = list(s) + self.assertEqual(ref, result, "While splitting '%s'" % ss) + + def testSyntaxSplitCustom(self): + """Test handling of syntax splitting with custom chars""" + ref = ['~/a', '&', '&', 'b-c', '--color=auto', '||', 'd', '*.py?'] + ss = "~/a && b-c --color=auto || d *.py?" + s = shlex.shlex(ss, punctuation_chars="|") + result = list(s) + self.assertEqual(ref, result, "While splitting '%s'" % ss) + + def testTokenTypes(self): + """Test that tokens are split with types as expected.""" + for source, expected in ( + ('a && b || c', + [('a', 'a'), ('&&', 'c'), ('b', 'a'), + ('||', 'c'), ('c', 'a')]), + ): + s = shlex.shlex(source, punctuation_chars=True) + observed = [] + while True: + t = s.get_token() + if t == s.eof: + break + if t[0] in s.punctuation_chars: + tt = 'c' + else: + tt = 'a' + observed.append((t, tt)) + self.assertEqual(observed, expected) + + def testPunctuationInWordChars(self): + """Test that any punctuation chars are removed from wordchars""" + s = shlex.shlex('a_b__c', punctuation_chars='_') + self.assertNotIn('_', s.wordchars) + self.assertEqual(list(s), ['a', '_', 'b', '__', 'c']) + + def testPunctuationWithWhitespaceSplit(self): + """Test that with whitespace_split, behaviour is as expected""" + s = shlex.shlex('a && b || c', punctuation_chars='&') + # whitespace_split is False, so splitting will be based on + # punctuation_chars + self.assertEqual(list(s), ['a', '&&', 'b', '|', '|', 'c']) + s = shlex.shlex('a && b || c', punctuation_chars='&') + s.whitespace_split = True + # whitespace_split is True, so splitting will be based on + # white space + self.assertEqual(list(s), ['a', '&&', 'b', '||', 'c']) + + def testEmptyStringHandling(self): + """Test that parsing of empty strings is correctly handled.""" + # see Issue #21999 + expected = ['', ')', 'abc'] + for punct in (False, True): + s = shlex.shlex("'')abc", posix=True, punctuation_chars=punct) + slist = list(s) + self.assertEqual(slist, expected) + expected = ["''", ')', 'abc'] + s = shlex.shlex("'')abc", punctuation_chars=True) + self.assertEqual(list(s), expected) + def testQuote(self): safeunquoted = string.ascii_letters + string.digits + '@%_-+=:,./' unicode_sample = '\xe9\xe0\xdf' # e + acute accent, a + grave, sharp s -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 18:41:47 2016 From: python-checkins at python.org (guido.van.rossum) Date: Fri, 29 Jul 2016 22:41:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Fix_whitespace?= =?utf-8?q?=2E?= Message-ID: <20160729224147.19472.90700.5E3C3167@psf.io> https://hg.python.org/cpython/rev/4ecea1ea11bf changeset: 102486:4ecea1ea11bf branch: 3.5 parent: 102484:fd0dce6d33e7 user: Guido van Rossum date: Fri Jul 29 15:41:17 2016 -0700 summary: Fix whitespace. files: Doc/library/typing.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -68,7 +68,7 @@ UserId = NewType('UserId', int) some_id = UserId(524313) - + The static type checker will treat the new type as if it were a subclass of the original type. This is useful in helping catch logical errors:: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 18:41:47 2016 From: python-checkins at python.org (guido.van.rossum) Date: Fri, 29 Jul 2016 22:41:47 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Expand_documentation_about_type_aliases_and_NewType_in_t?= =?utf-8?q?he_typing_module_=28merge?= Message-ID: <20160729224146.32689.5828.28055341@psf.io> https://hg.python.org/cpython/rev/15a35a8da24b changeset: 102485:15a35a8da24b parent: 102483:ea99e2f0b829 parent: 102484:fd0dce6d33e7 user: Guido van Rossum date: Fri Jul 29 15:39:36 2016 -0700 summary: Expand documentation about type aliases and NewType in the typing module (merge 3.5 -> 3.6). By Michael Lee. files: Doc/library/typing.rst | 97 +++++++++++++++++++++++++++++- 1 files changed, 96 insertions(+), 1 deletions(-) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -29,10 +29,105 @@ Type aliases ------------ -A type alias is defined by assigning the type to the alias:: +A type alias is defined by assigning the type to the alias. In this example, +``Vector`` and ``List[float]`` will be treated as interchangeable synonyms:: + from typing import List Vector = List[float] + def scale(scalar: float, vector: Vector) -> Vector: + return [scalar * num for num in vector] + + # typechecks; a list of floats qualifies as a Vector. + new_vector = scale(2.0, [1.0, -4.2, 5.4]) + +Type aliases are useful for simplifying complex type signatures. For example:: + + from typing import Dict, Tuple, List + + ConnectionOptions = Dict[str, str] + Address = Tuple[str, int] + Server = Tuple[Address, ConnectionOptions] + + def broadcast_message(message: str, servers: List[Server]) -> None: + ... + + # The static type checker will treat the previous type signature as + # being exactly equivalent to this one. + def broadcast_message( + message: str, + servers: List[Tuple[Tuple[str, int], Dict[str, str]]]) -> None: + ... + +NewType +------- + +Use the ``NewType`` helper function to create distinct types:: + + from typing import NewType + + UserId = NewType('UserId', int) + some_id = UserId(524313) + +The static type checker will treat the new type as if it were a subclass +of the original type. This is useful in helping catch logical errors:: + + def get_user_name(user_id: UserId) -> str: + ... + + # typechecks + user_a = get_user_name(UserId(42351)) + + # does not typecheck; an int is not a UserId + user_b = get_user_name(-1) + +You may still perform all ``int`` operations on a variable of type ``UserId``, +but the result will always be of type ``int``. This lets you pass in a +``UserId`` wherever an ``int`` might be expected, but will prevent you from +accidentally creating a ``UserId`` in an invalid way:: + + # `output` is of type `int`, not `UserId` + output = UserId(23413) + UserId(54341) + +Note that these checks are enforced only by the static type checker. At runtime +the statement ``Derived = NewType('Derived', Base)`` will make ``Derived`` a +function that immediately returns whatever parameter you pass it. That means +the expression ``Derived(some_value)`` does not create a new class or introduce +any overhead beyond that of a regular function call. + +More precisely, the expression ``some_value is Derived(some_value)`` is always +true at runtime. + +This also means that it is not possible to create a subtype of ``Derived`` +since it is an identity function at runtime, not an actual type. Similarly, it +is not possible to create another ``NewType`` based on a ``Derived`` type:: + + from typing import NewType + + UserId = NewType('UserId', int) + + # Fails at runtime and does not typecheck + class AdminUserId(UserId): pass + + # Also does not typecheck + ProUserId = NewType('ProUserId', UserId) + +See :pep:`484` for more details. + +.. note:: + + Recall that the use of a type alias declares two types to be *equivalent* to + one another. Doing ``Alias = Original`` will make the static type checker + treat ``Alias`` as being *exactly equivalent* to ``Original`` in all cases. + This is useful when you want to simplify complex type signatures. + + In contrast, ``NewType`` declares one type to be a *subtype* of another. + Doing ``Derived = NewType('Derived', Original)`` will make the static type + checker treat ``Derived`` as a *subclass* of ``Original``, which means a + value of type ``Original`` cannot be used in places where a value of type + ``Derived`` is expected. This is useful when you want to prevent logic + errors with minimal runtime cost. + Callable -------- -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 18:41:50 2016 From: python-checkins at python.org (guido.van.rossum) Date: Fri, 29 Jul 2016 22:41:50 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Expand_documen?= =?utf-8?q?tation_about_type_aliases_and_NewType_in_the_typing_module=2E?= Message-ID: <20160729224146.128917.78419.253E13AE@psf.io> https://hg.python.org/cpython/rev/fd0dce6d33e7 changeset: 102484:fd0dce6d33e7 branch: 3.5 parent: 102480:8ba0000c90be user: Guido van Rossum date: Fri Jul 29 15:38:14 2016 -0700 summary: Expand documentation about type aliases and NewType in the typing module. By Michael Lee. files: Doc/library/typing.rst | 97 +++++++++++++++++++++++++++++- 1 files changed, 96 insertions(+), 1 deletions(-) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -29,10 +29,105 @@ Type aliases ------------ -A type alias is defined by assigning the type to the alias:: +A type alias is defined by assigning the type to the alias. In this example, +``Vector`` and ``List[float]`` will be treated as interchangeable synonyms:: + from typing import List Vector = List[float] + def scale(scalar: float, vector: Vector) -> Vector: + return [scalar * num for num in vector] + + # typechecks; a list of floats qualifies as a Vector. + new_vector = scale(2.0, [1.0, -4.2, 5.4]) + +Type aliases are useful for simplifying complex type signatures. For example:: + + from typing import Dict, Tuple, List + + ConnectionOptions = Dict[str, str] + Address = Tuple[str, int] + Server = Tuple[Address, ConnectionOptions] + + def broadcast_message(message: str, servers: List[Server]) -> None: + ... + + # The static type checker will treat the previous type signature as + # being exactly equivalent to this one. + def broadcast_message( + message: str, + servers: List[Tuple[Tuple[str, int], Dict[str, str]]]) -> None: + ... + +NewType +------- + +Use the ``NewType`` helper function to create distinct types:: + + from typing import NewType + + UserId = NewType('UserId', int) + some_id = UserId(524313) + +The static type checker will treat the new type as if it were a subclass +of the original type. This is useful in helping catch logical errors:: + + def get_user_name(user_id: UserId) -> str: + ... + + # typechecks + user_a = get_user_name(UserId(42351)) + + # does not typecheck; an int is not a UserId + user_b = get_user_name(-1) + +You may still perform all ``int`` operations on a variable of type ``UserId``, +but the result will always be of type ``int``. This lets you pass in a +``UserId`` wherever an ``int`` might be expected, but will prevent you from +accidentally creating a ``UserId`` in an invalid way:: + + # `output` is of type `int`, not `UserId` + output = UserId(23413) + UserId(54341) + +Note that these checks are enforced only by the static type checker. At runtime +the statement ``Derived = NewType('Derived', Base)`` will make ``Derived`` a +function that immediately returns whatever parameter you pass it. That means +the expression ``Derived(some_value)`` does not create a new class or introduce +any overhead beyond that of a regular function call. + +More precisely, the expression ``some_value is Derived(some_value)`` is always +true at runtime. + +This also means that it is not possible to create a subtype of ``Derived`` +since it is an identity function at runtime, not an actual type. Similarly, it +is not possible to create another ``NewType`` based on a ``Derived`` type:: + + from typing import NewType + + UserId = NewType('UserId', int) + + # Fails at runtime and does not typecheck + class AdminUserId(UserId): pass + + # Also does not typecheck + ProUserId = NewType('ProUserId', UserId) + +See :pep:`484` for more details. + +.. note:: + + Recall that the use of a type alias declares two types to be *equivalent* to + one another. Doing ``Alias = Original`` will make the static type checker + treat ``Alias`` as being *exactly equivalent* to ``Original`` in all cases. + This is useful when you want to simplify complex type signatures. + + In contrast, ``NewType`` declares one type to be a *subtype* of another. + Doing ``Derived = NewType('Derived', Original)`` will make the static type + checker treat ``Derived`` as a *subclass* of ``Original``, which means a + value of type ``Original`` cannot be used in places where a value of type + ``Derived`` is expected. This is useful when you want to prevent logic + errors with minimal runtime cost. + Callable -------- -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 18:41:50 2016 From: python-checkins at python.org (guido.van.rossum) Date: Fri, 29 Jul 2016 22:41:50 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Fix_whitespace=2E?= Message-ID: <20160729224147.26447.75683.2F846583@psf.io> https://hg.python.org/cpython/rev/5b624984e77a changeset: 102487:5b624984e77a parent: 102485:15a35a8da24b parent: 102486:4ecea1ea11bf user: Guido van Rossum date: Fri Jul 29 15:41:35 2016 -0700 summary: Fix whitespace. files: Doc/library/typing.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -68,7 +68,7 @@ UserId = NewType('UserId', int) some_id = UserId(524313) - + The static type checker will treat the new type as if it were a subclass of the original type. This is useful in helping catch logical errors:: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 20:40:02 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 30 Jul 2016 00:40:02 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Fix_=22default_role_used?= =?utf-8?q?=22_warning_in_shlex=2Erst?= Message-ID: <20160730004002.43430.91085.FEA98BBB@psf.io> https://hg.python.org/cpython/rev/cd7520756215 changeset: 102488:cd7520756215 user: Berker Peksag date: Sat Jul 30 03:40:38 2016 +0300 summary: Fix "default role used" warning in shlex.rst files: Doc/library/shlex.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/shlex.rst b/Doc/library/shlex.rst --- a/Doc/library/shlex.rst +++ b/Doc/library/shlex.rst @@ -99,7 +99,7 @@ :ref:`improved-shell-compatibility` for more information. .. versionchanged:: 3.6 - The `punctuation_chars` parameter was added. + The *punctuation_chars* parameter was added. .. seealso:: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 20:47:37 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 30 Jul 2016 00:47:37 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_Merge_from_3=2E5?= Message-ID: <20160730004737.24914.4118.08CE50FE@psf.io> https://hg.python.org/cpython/rev/520c0d391f00 changeset: 102490:520c0d391f00 parent: 102488:cd7520756215 parent: 102489:57066dbf3d94 user: Berker Peksag date: Sat Jul 30 03:48:12 2016 +0300 summary: Merge from 3.5 files: Doc/library/typing.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -86,7 +86,7 @@ ``UserId`` wherever an ``int`` might be expected, but will prevent you from accidentally creating a ``UserId`` in an invalid way:: - # `output` is of type `int`, not `UserId` + # 'output' is of type 'int', not 'UserId' output = UserId(23413) + UserId(54341) Note that these checks are enforced only by the static type checker. At runtime -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Fri Jul 29 20:47:37 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 30 Jul 2016 00:47:37 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E5=29=3A_Silence_anothe?= =?utf-8?q?r_=22default_role_used=22_warning_in_typing=2Erst?= Message-ID: <20160730004737.1613.28673.F32CEC9C@psf.io> https://hg.python.org/cpython/rev/57066dbf3d94 changeset: 102489:57066dbf3d94 branch: 3.5 parent: 102486:4ecea1ea11bf user: Berker Peksag date: Sat Jul 30 03:47:52 2016 +0300 summary: Silence another "default role used" warning in typing.rst This should make ware-docs green again. files: Doc/library/typing.rst | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Doc/library/typing.rst b/Doc/library/typing.rst --- a/Doc/library/typing.rst +++ b/Doc/library/typing.rst @@ -86,7 +86,7 @@ ``UserId`` wherever an ``int`` might be expected, but will prevent you from accidentally creating a ``UserId`` in an invalid way:: - # `output` is of type `int`, not `UserId` + # 'output' is of type 'int', not 'UserId' output = UserId(23413) + UserId(54341) Note that these checks are enforced only by the static type checker. At runtime -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 02:26:23 2016 From: python-checkins at python.org (nick.coghlan) Date: Sat, 30 Jul 2016 06:26:23 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327366=3A_Implemen?= =?utf-8?q?t_PEP_487?= Message-ID: <20160730062622.1517.40997.0208C407@psf.io> https://hg.python.org/cpython/rev/ecc7bff738e0 changeset: 102491:ecc7bff738e0 user: Nick Coghlan date: Sat Jul 30 16:26:03 2016 +1000 summary: Issue #27366: Implement PEP 487 - __init_subclass__ called when new subclasses defined - __set_name__ called when descriptors are part of a class definition files: Doc/reference/datamodel.rst | 43 +++- Doc/whatsnew/3.6.rst | 20 + Lib/test/test_builtin.py | 20 +- Lib/test/test_descrtut.py | 1 + Lib/test/test_pydoc.py | 3 +- Lib/test/test_subclassinit.py | 244 ++++++++++++++++++++++ Misc/ACKS | 1 + Misc/NEWS | 4 + Objects/typeobject.c | 99 ++++++++- 9 files changed, 411 insertions(+), 24 deletions(-) diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1492,6 +1492,12 @@ Called to delete the attribute on an instance *instance* of the owner class. +.. method:: object.__set_name__(self, owner, name) + + Called at the time the owning class *owner* is created. The + descriptor has been assigned to *name*. + + The attribute :attr:`__objclass__` is interpreted by the :mod:`inspect` module as specifying the class where this object was defined (setting this appropriately can assist in runtime introspection of dynamic class attributes). @@ -1629,11 +1635,46 @@ * *__class__* assignment works only if both classes have the same *__slots__*. -.. _metaclasses: +.. _class-customization: Customizing class creation -------------------------- +Whenever a class inherits from another class, *__init_subclass__* is +called on that class. This way, it is possible to write classes which +change the behavior of subclasses. This is closely related to class +decorators, but where class decorators only affect the specific class they're +applied to, ``__init_subclass__`` solely applies to future subclasses of the +class defining the method. + +.. classmethod:: object.__init_subclass__(cls) + This method is called whenever the containing class is subclassed. + *cls* is then the new subclass. If defined as a normal instance method, + this method is implicitly converted to a class method. + + Keyword arguments which are given to a new class are passed to + the parent's class ``__init_subclass__``. For compatibility with + other classes using ``__init_subclass__``, one should take out the + needed keyword arguments and pass the others over to the base + class, as in:: + + class Philosopher: + def __init_subclass__(cls, default_name, **kwargs): + super().__init_subclass__(**kwargs) + cls.default_name = default_name + + class AustralianPhilosopher(Philosopher, default_name="Bruce"): + pass + + The default implementation ``object.__init_subclass__`` does + nothing, but raises an error if it is called with any arguments. + + +.. _metaclasses: + +Metaclasses +^^^^^^^^^^^ + By default, classes are constructed using :func:`type`. The class body is executed in a new namespace and the class name is bound locally to the result of ``type(name, bases, namespace)``. diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -110,6 +110,26 @@ See :pep:`498` and the main documentation at :ref:`f-strings`. +PEP 487: Simpler customization of class creation +------------------------------------------------ + +Upon subclassing a class, the ``__init_subclass__`` classmethod (if defined) is +called on the base class. This makes it straightforward to write classes that +customize initialization of future subclasses without introducing the +complexity of a full custom metaclass. + +The descriptor protocol has also been expanded to include a new optional method, +``__set_name__``. Whenever a new class is defined, the new method will be called +on all descriptors included in the definition, providing them with a reference +to the class being defined and the name given to the descriptor within the +class namespace. + +Also see :pep:`487` and the updated class customization documentation at +:ref:`class-customization` and :ref:`descriptors`. + +(Contributed by Martin Teichmann in :issue:`27366`) + + PYTHONMALLOC environment variable --------------------------------- diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -1699,21 +1699,11 @@ self.assertEqual(x.spam(), 'spam42') self.assertEqual(x.to_bytes(2, 'little'), b'\x2a\x00') - def test_type_new_keywords(self): - class B: - def ham(self): - return 'ham%d' % self - C = type.__new__(type, - name='C', - bases=(B, int), - dict={'spam': lambda self: 'spam%s' % self}) - self.assertEqual(C.__name__, 'C') - self.assertEqual(C.__qualname__, 'C') - self.assertEqual(C.__module__, __name__) - self.assertEqual(C.__bases__, (B, int)) - self.assertIs(C.__base__, int) - self.assertIn('spam', C.__dict__) - self.assertNotIn('ham', C.__dict__) + def test_type_nokwargs(self): + with self.assertRaises(TypeError): + type('a', (), {}, x=5) + with self.assertRaises(TypeError): + type('a', (), dict={}) def test_type_name(self): for name in 'A', '\xc4', '\U0001f40d', 'B.A', '42', '': diff --git a/Lib/test/test_descrtut.py b/Lib/test/test_descrtut.py --- a/Lib/test/test_descrtut.py +++ b/Lib/test/test_descrtut.py @@ -182,6 +182,7 @@ '__iadd__', '__imul__', '__init__', + '__init_subclass__', '__iter__', '__le__', '__len__', diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py --- a/Lib/test/test_pydoc.py +++ b/Lib/test/test_pydoc.py @@ -638,8 +638,9 @@ del expected['__doc__'] del expected['__class__'] # inspect resolves descriptors on type into methods, but vars doesn't, - # so we need to update __subclasshook__. + # so we need to update __subclasshook__ and __init_subclass__. expected['__subclasshook__'] = TestClass.__subclasshook__ + expected['__init_subclass__'] = TestClass.__init_subclass__ methods = pydoc.allmethods(TestClass) self.assertDictEqual(methods, expected) diff --git a/Lib/test/test_subclassinit.py b/Lib/test/test_subclassinit.py new file mode 100644 --- /dev/null +++ b/Lib/test/test_subclassinit.py @@ -0,0 +1,244 @@ +from unittest import TestCase, main +import sys +import types + + +class Test(TestCase): + def test_init_subclass(self): + class A(object): + initialized = False + + def __init_subclass__(cls): + super().__init_subclass__() + cls.initialized = True + + class B(A): + pass + + self.assertFalse(A.initialized) + self.assertTrue(B.initialized) + + def test_init_subclass_dict(self): + class A(dict, object): + initialized = False + + def __init_subclass__(cls): + super().__init_subclass__() + cls.initialized = True + + class B(A): + pass + + self.assertFalse(A.initialized) + self.assertTrue(B.initialized) + + def test_init_subclass_kwargs(self): + class A(object): + def __init_subclass__(cls, **kwargs): + cls.kwargs = kwargs + + class B(A, x=3): + pass + + self.assertEqual(B.kwargs, dict(x=3)) + + def test_init_subclass_error(self): + class A(object): + def __init_subclass__(cls): + raise RuntimeError + + with self.assertRaises(RuntimeError): + class B(A): + pass + + def test_init_subclass_wrong(self): + class A(object): + def __init_subclass__(cls, whatever): + pass + + with self.assertRaises(TypeError): + class B(A): + pass + + def test_init_subclass_skipped(self): + class BaseWithInit(object): + def __init_subclass__(cls, **kwargs): + super().__init_subclass__(**kwargs) + cls.initialized = cls + + class BaseWithoutInit(BaseWithInit): + pass + + class A(BaseWithoutInit): + pass + + self.assertIs(A.initialized, A) + self.assertIs(BaseWithoutInit.initialized, BaseWithoutInit) + + def test_init_subclass_diamond(self): + class Base(object): + def __init_subclass__(cls, **kwargs): + super().__init_subclass__(**kwargs) + cls.calls = [] + + class Left(Base): + pass + + class Middle(object): + def __init_subclass__(cls, middle, **kwargs): + super().__init_subclass__(**kwargs) + cls.calls += [middle] + + class Right(Base): + def __init_subclass__(cls, right="right", **kwargs): + super().__init_subclass__(**kwargs) + cls.calls += [right] + + class A(Left, Middle, Right, middle="middle"): + pass + + self.assertEqual(A.calls, ["right", "middle"]) + self.assertEqual(Left.calls, []) + self.assertEqual(Right.calls, []) + + def test_set_name(self): + class Descriptor: + def __set_name__(self, owner, name): + self.owner = owner + self.name = name + + class A(object): + d = Descriptor() + + self.assertEqual(A.d.name, "d") + self.assertIs(A.d.owner, A) + + def test_set_name_metaclass(self): + class Meta(type): + def __new__(cls, name, bases, ns): + ret = super().__new__(cls, name, bases, ns) + self.assertEqual(ret.d.name, "d") + self.assertIs(ret.d.owner, ret) + return 0 + + class Descriptor(object): + def __set_name__(self, owner, name): + self.owner = owner + self.name = name + + class A(object, metaclass=Meta): + d = Descriptor() + self.assertEqual(A, 0) + + def test_set_name_error(self): + class Descriptor: + def __set_name__(self, owner, name): + raise RuntimeError + + with self.assertRaises(RuntimeError): + class A(object): + d = Descriptor() + + def test_set_name_wrong(self): + class Descriptor: + def __set_name__(self): + pass + + with self.assertRaises(TypeError): + class A(object): + d = Descriptor() + + def test_set_name_init_subclass(self): + class Descriptor: + def __set_name__(self, owner, name): + self.owner = owner + self.name = name + + class Meta(type): + def __new__(cls, name, bases, ns): + self = super().__new__(cls, name, bases, ns) + self.meta_owner = self.owner + self.meta_name = self.name + return self + + class A(object): + def __init_subclass__(cls): + cls.owner = cls.d.owner + cls.name = cls.d.name + + class B(A, metaclass=Meta): + d = Descriptor() + + self.assertIs(B.owner, B) + self.assertEqual(B.name, 'd') + self.assertIs(B.meta_owner, B) + self.assertEqual(B.name, 'd') + + def test_errors(self): + class MyMeta(type): + pass + + with self.assertRaises(TypeError): + class MyClass(object, metaclass=MyMeta, otherarg=1): + pass + + with self.assertRaises(TypeError): + types.new_class("MyClass", (object,), + dict(metaclass=MyMeta, otherarg=1)) + types.prepare_class("MyClass", (object,), + dict(metaclass=MyMeta, otherarg=1)) + + class MyMeta(type): + def __init__(self, name, bases, namespace, otherarg): + super().__init__(name, bases, namespace) + + with self.assertRaises(TypeError): + class MyClass(object, metaclass=MyMeta, otherarg=1): + pass + + class MyMeta(type): + def __new__(cls, name, bases, namespace, otherarg): + return super().__new__(cls, name, bases, namespace) + + def __init__(self, name, bases, namespace, otherarg): + super().__init__(name, bases, namespace) + self.otherarg = otherarg + + class MyClass(object, metaclass=MyMeta, otherarg=1): + pass + + self.assertEqual(MyClass.otherarg, 1) + + def test_errors_changed_pep487(self): + # These tests failed before Python 3.6, PEP 487 + class MyMeta(type): + def __new__(cls, name, bases, namespace): + return super().__new__(cls, name=name, bases=bases, + dict=namespace) + + with self.assertRaises(TypeError): + class MyClass(object, metaclass=MyMeta): + pass + + class MyMeta(type): + def __new__(cls, name, bases, namespace, otherarg): + self = super().__new__(cls, name, bases, namespace) + self.otherarg = otherarg + return self + + class MyClass(object, metaclass=MyMeta, otherarg=1): + pass + + self.assertEqual(MyClass.otherarg, 1) + + def test_type(self): + t = type('NewClass', (object,), {}) + self.assertIsInstance(t, type) + self.assertEqual(t.__name__, 'NewClass') + + with self.assertRaises(TypeError): + type(name='NewClass', bases=(object,), dict={}) + + +if __name__ == "__main__": + main() diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1475,6 +1475,7 @@ Julian Taylor Monty Taylor Anatoly Techtonik +Martin Teichmann Gustavo Temple Mikhail Terekhov Victor Terr?n diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -31,6 +31,10 @@ - Issue #27514: Make having too many statically nested blocks a SyntaxError instead of SystemError. +- Issue #27366: Implemented PEP 487 (Simpler customization of class creation). + Upon subclassing, the __init_subclass__ classmethod is called on the base + class. Descriptors are initialized with __set_name__ after class creation. + Library ------- diff --git a/Objects/typeobject.c b/Objects/typeobject.c --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -53,10 +53,12 @@ _Py_IDENTIFIER(__getattribute__); _Py_IDENTIFIER(__getitem__); _Py_IDENTIFIER(__hash__); +_Py_IDENTIFIER(__init_subclass__); _Py_IDENTIFIER(__len__); _Py_IDENTIFIER(__module__); _Py_IDENTIFIER(__name__); _Py_IDENTIFIER(__new__); +_Py_IDENTIFIER(__set_name__); _Py_IDENTIFIER(__setitem__); _Py_IDENTIFIER(builtins); @@ -2027,6 +2029,8 @@ static int object_init(PyObject *, PyObject *, PyObject *); static int update_slot(PyTypeObject *, PyObject *); static void fixup_slot_dispatchers(PyTypeObject *); +static int set_names(PyTypeObject *); +static int init_subclass(PyTypeObject *, PyObject *); /* * Helpers for __dict__ descriptor. We don't want to expose the dicts @@ -2202,7 +2206,8 @@ assert(args != NULL && PyTuple_Check(args)); assert(kwds == NULL || PyDict_Check(kwds)); - if (kwds != NULL && PyDict_Check(kwds) && PyDict_Size(kwds) != 0) { + if (kwds != NULL && PyTuple_Check(args) && PyTuple_GET_SIZE(args) == 1 && + PyDict_Check(kwds) && PyDict_Size(kwds) != 0) { PyErr_SetString(PyExc_TypeError, "type.__init__() takes no keyword arguments"); return -1; @@ -2269,7 +2274,6 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds) { PyObject *name, *bases = NULL, *orig_dict, *dict = NULL; - static char *kwlist[] = {"name", "bases", "dict", 0}; PyObject *qualname, *slots = NULL, *tmp, *newslots; PyTypeObject *type = NULL, *base, *tmptype, *winner; PyHeapTypeObject *et; @@ -2296,7 +2300,7 @@ /* SF bug 475327 -- if that didn't trigger, we need 3 arguments. but PyArg_ParseTupleAndKeywords below may give a msg saying type() needs exactly 3. */ - if (nargs + nkwds != 3) { + if (nargs != 3) { PyErr_SetString(PyExc_TypeError, "type() takes 1 or 3 arguments"); return NULL; @@ -2304,10 +2308,8 @@ } /* Check arguments: (name, bases, dict) */ - if (!PyArg_ParseTupleAndKeywords(args, kwds, "UO!O!:type", kwlist, - &name, - &PyTuple_Type, &bases, - &PyDict_Type, &orig_dict)) + if (!PyArg_ParseTuple(args, "UO!O!:type", &name, &PyTuple_Type, &bases, + &PyDict_Type, &orig_dict)) return NULL; /* Determine the proper metatype to deal with this: */ @@ -2587,6 +2589,20 @@ Py_DECREF(tmp); } + /* Special-case __init_subclass__: if it's a plain function, + make it a classmethod */ + tmp = _PyDict_GetItemId(dict, &PyId___init_subclass__); + if (tmp != NULL && PyFunction_Check(tmp)) { + tmp = PyClassMethod_New(tmp); + if (tmp == NULL) + goto error; + if (_PyDict_SetItemId(dict, &PyId___init_subclass__, tmp) < 0) { + Py_DECREF(tmp); + goto error; + } + Py_DECREF(tmp); + } + /* Add descriptors for custom slots from __slots__, or for __dict__ */ mp = PyHeapType_GET_MEMBERS(et); slotoffset = base->tp_basicsize; @@ -2667,6 +2683,12 @@ et->ht_cached_keys = _PyDict_NewKeysForClass(); } + if (set_names(type) < 0) + goto error; + + if (init_subclass(type, kwds) < 0) + goto error; + Py_DECREF(dict); return (PyObject *)type; @@ -4312,6 +4334,19 @@ "NotImplemented, the normal algorithm is used. Otherwise, it\n" "overrides the normal algorithm (and the outcome is cached).\n"); +static PyObject * +object_init_subclass(PyObject *cls, PyObject *arg) +{ + Py_RETURN_NONE; +} + +PyDoc_STRVAR(object_init_subclass_doc, +"This method is called when a class is subclassed\n" +"\n" +"Whenever a class is subclassed, this method is called. The default\n" +"implementation does nothing. It may be overridden to extend\n" +"subclasses.\n"); + /* from PEP 3101, this code implements: @@ -4416,6 +4451,8 @@ PyDoc_STR("helper for pickle")}, {"__subclasshook__", object_subclasshook, METH_CLASS | METH_VARARGS, object_subclasshook_doc}, + {"__init_subclass__", object_init_subclass, METH_CLASS | METH_NOARGS, + object_init_subclass_doc}, {"__format__", object_format, METH_VARARGS, PyDoc_STR("default object formatter")}, {"__sizeof__", object_sizeof, METH_NOARGS, @@ -6925,6 +6962,54 @@ } } +/* Call __set_name__ on all descriptors in a newly generated type */ +static int +set_names(PyTypeObject *type) +{ + PyObject *key, *value, *tmp; + Py_ssize_t i = 0; + + while (PyDict_Next(type->tp_dict, &i, &key, &value)) { + if (PyObject_HasAttr(value, _PyUnicode_FromId(&PyId___set_name__))) { + tmp = PyObject_CallMethodObjArgs( + value, _PyUnicode_FromId(&PyId___set_name__), + type, key, NULL); + if (tmp == NULL) + return -1; + else + Py_DECREF(tmp); + } + } + + return 0; +} + +/* Call __init_subclass__ on the parent of a newly generated type */ +static int +init_subclass(PyTypeObject *type, PyObject *kwds) +{ + PyObject *super, *func, *tmp, *tuple; + + super = PyObject_CallFunctionObjArgs((PyObject *) &PySuper_Type, + type, type, NULL); + func = _PyObject_GetAttrId(super, &PyId___init_subclass__); + Py_DECREF(super); + + if (func == NULL) + return -1; + + tuple = PyTuple_New(0); + tmp = PyObject_Call(func, tuple, kwds); + Py_DECREF(tuple); + Py_DECREF(func); + + if (tmp == NULL) + return -1; + + Py_DECREF(tmp); + return 0; +} + /* recurse_down_subclasses() and update_subclasses() are mutually recursive functions to call a callback for all subclasses, but refraining from recursing into subclasses that define 'name'. */ -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 05:40:02 2016 From: python-checkins at python.org (xavier.degaye) Date: Sat, 30 Jul 2016 09:40:02 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogSXNzdWUgIzI3NDUz?= =?utf-8?q?=3A_CPP_invocation_in_configure_must_use_CPPFLAGS=2E?= Message-ID: <20160730094002.26491.13564.19EF0B1B@psf.io> https://hg.python.org/cpython/rev/4cb94e561e2d changeset: 102492:4cb94e561e2d branch: 3.5 parent: 102489:57066dbf3d94 user: Xavier de Gaye date: Sat Jul 30 11:28:35 2016 +0200 summary: Issue #27453: CPP invocation in configure must use CPPFLAGS. Patch by Chi Hsuan Yen. files: Misc/ACKS | 1 + Misc/NEWS | 3 +++ configure | 2 +- configure.ac | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1663,3 +1663,4 @@ Doug Zongker Peter ?strand evilzero +Chi Hsuan Yen diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -145,6 +145,9 @@ Build ----- +- Issue #27453: CPP invocation in configure must use CPPFLAGS. Patch by + Chi Hsuan Yen. + - Issue #27490: Do not build pgen when cross-compiling. Patch by Thomas Perl. diff --git a/configure b/configure --- a/configure +++ b/configure @@ -5369,7 +5369,7 @@ EOF -if $CPP conftest.c >conftest.out 2>/dev/null; then +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 $as_echo "$PLATFORM_TRIPLET" >&6; } diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -870,7 +870,7 @@ EOF -if $CPP conftest.c >conftest.out 2>/dev/null; then +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` AC_MSG_RESULT([$PLATFORM_TRIPLET]) else -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 05:40:02 2016 From: python-checkins at python.org (xavier.degaye) Date: Sat, 30 Jul 2016 09:40:02 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_=28merge_from_3=2E5=29_Issue_=2327453=3A_CPP_invocation_?= =?utf-8?q?in_configure_must_use_CPPFLAGS=2E?= Message-ID: <20160730094002.19522.42132.5D230330@psf.io> https://hg.python.org/cpython/rev/92b3ce7ca95c changeset: 102493:92b3ce7ca95c parent: 102491:ecc7bff738e0 parent: 102492:4cb94e561e2d user: Xavier de Gaye date: Sat Jul 30 11:36:32 2016 +0200 summary: (merge from 3.5) Issue #27453: CPP invocation in configure must use CPPFLAGS. Patch by Chi Hsuan Yen. files: Misc/NEWS | 3 +++ configure | 2 +- configure.ac | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -88,6 +88,9 @@ Build ----- +- Issue #27453: CPP invocation in configure must use CPPFLAGS. Patch by + Chi Hsuan Yen. + - Issue #27490: Do not build pgen when cross-compiling. Patch by Thomas Perl. diff --git a/configure b/configure --- a/configure +++ b/configure @@ -5370,7 +5370,7 @@ EOF -if $CPP conftest.c >conftest.out 2>/dev/null; then +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PLATFORM_TRIPLET" >&5 $as_echo "$PLATFORM_TRIPLET" >&6; } diff --git a/configure.ac b/configure.ac --- a/configure.ac +++ b/configure.ac @@ -870,7 +870,7 @@ EOF -if $CPP conftest.c >conftest.out 2>/dev/null; then +if $CPP $CPPFLAGS conftest.c >conftest.out 2>/dev/null; then PLATFORM_TRIPLET=`grep -v '^#' conftest.out | grep -v '^ *$' | tr -d ' '` AC_MSG_RESULT([$PLATFORM_TRIPLET]) else -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 07:05:37 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 30 Jul 2016 11:05:37 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327366=3A_Tweak_PE?= =?utf-8?q?P_487_documentation?= Message-ID: <20160730110537.19413.62803.8C335A05@psf.io> https://hg.python.org/cpython/rev/8747e3455ecb changeset: 102494:8747e3455ecb user: Berker Peksag date: Sat Jul 30 14:06:15 2016 +0300 summary: Issue #27366: Tweak PEP 487 documentation * Added versionadded directives * Deleted duplicate sentence from __init_subclass__ docstring * Modernized tests files: Doc/reference/datamodel.rst | 5 ++ Lib/test/test_subclassinit.py | 44 +++++++++++----------- Objects/typeobject.c | 7 +-- 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1497,6 +1497,8 @@ Called at the time the owning class *owner* is created. The descriptor has been assigned to *name*. + .. versionadded:: 3.6 + The attribute :attr:`__objclass__` is interpreted by the :mod:`inspect` module as specifying the class where this object was defined (setting this @@ -1648,6 +1650,7 @@ class defining the method. .. classmethod:: object.__init_subclass__(cls) + This method is called whenever the containing class is subclassed. *cls* is then the new subclass. If defined as a normal instance method, this method is implicitly converted to a class method. @@ -1669,6 +1672,8 @@ The default implementation ``object.__init_subclass__`` does nothing, but raises an error if it is called with any arguments. + .. versionadded:: 3.6 + .. _metaclasses: diff --git a/Lib/test/test_subclassinit.py b/Lib/test/test_subclassinit.py --- a/Lib/test/test_subclassinit.py +++ b/Lib/test/test_subclassinit.py @@ -1,11 +1,11 @@ -from unittest import TestCase, main import sys import types +import unittest -class Test(TestCase): +class Test(unittest.TestCase): def test_init_subclass(self): - class A(object): + class A: initialized = False def __init_subclass__(cls): @@ -19,7 +19,7 @@ self.assertTrue(B.initialized) def test_init_subclass_dict(self): - class A(dict, object): + class A(dict): initialized = False def __init_subclass__(cls): @@ -33,7 +33,7 @@ self.assertTrue(B.initialized) def test_init_subclass_kwargs(self): - class A(object): + class A: def __init_subclass__(cls, **kwargs): cls.kwargs = kwargs @@ -43,7 +43,7 @@ self.assertEqual(B.kwargs, dict(x=3)) def test_init_subclass_error(self): - class A(object): + class A: def __init_subclass__(cls): raise RuntimeError @@ -52,7 +52,7 @@ pass def test_init_subclass_wrong(self): - class A(object): + class A: def __init_subclass__(cls, whatever): pass @@ -61,7 +61,7 @@ pass def test_init_subclass_skipped(self): - class BaseWithInit(object): + class BaseWithInit: def __init_subclass__(cls, **kwargs): super().__init_subclass__(**kwargs) cls.initialized = cls @@ -76,7 +76,7 @@ self.assertIs(BaseWithoutInit.initialized, BaseWithoutInit) def test_init_subclass_diamond(self): - class Base(object): + class Base: def __init_subclass__(cls, **kwargs): super().__init_subclass__(**kwargs) cls.calls = [] @@ -84,7 +84,7 @@ class Left(Base): pass - class Middle(object): + class Middle: def __init_subclass__(cls, middle, **kwargs): super().__init_subclass__(**kwargs) cls.calls += [middle] @@ -107,7 +107,7 @@ self.owner = owner self.name = name - class A(object): + class A: d = Descriptor() self.assertEqual(A.d.name, "d") @@ -121,12 +121,12 @@ self.assertIs(ret.d.owner, ret) return 0 - class Descriptor(object): + class Descriptor: def __set_name__(self, owner, name): self.owner = owner self.name = name - class A(object, metaclass=Meta): + class A(metaclass=Meta): d = Descriptor() self.assertEqual(A, 0) @@ -136,7 +136,7 @@ raise RuntimeError with self.assertRaises(RuntimeError): - class A(object): + class A: d = Descriptor() def test_set_name_wrong(self): @@ -145,7 +145,7 @@ pass with self.assertRaises(TypeError): - class A(object): + class A: d = Descriptor() def test_set_name_init_subclass(self): @@ -161,7 +161,7 @@ self.meta_name = self.name return self - class A(object): + class A: def __init_subclass__(cls): cls.owner = cls.d.owner cls.name = cls.d.name @@ -179,7 +179,7 @@ pass with self.assertRaises(TypeError): - class MyClass(object, metaclass=MyMeta, otherarg=1): + class MyClass(metaclass=MyMeta, otherarg=1): pass with self.assertRaises(TypeError): @@ -193,7 +193,7 @@ super().__init__(name, bases, namespace) with self.assertRaises(TypeError): - class MyClass(object, metaclass=MyMeta, otherarg=1): + class MyClass(metaclass=MyMeta, otherarg=1): pass class MyMeta(type): @@ -204,7 +204,7 @@ super().__init__(name, bases, namespace) self.otherarg = otherarg - class MyClass(object, metaclass=MyMeta, otherarg=1): + class MyClass(metaclass=MyMeta, otherarg=1): pass self.assertEqual(MyClass.otherarg, 1) @@ -217,7 +217,7 @@ dict=namespace) with self.assertRaises(TypeError): - class MyClass(object, metaclass=MyMeta): + class MyClass(metaclass=MyMeta): pass class MyMeta(type): @@ -226,7 +226,7 @@ self.otherarg = otherarg return self - class MyClass(object, metaclass=MyMeta, otherarg=1): + class MyClass(metaclass=MyMeta, otherarg=1): pass self.assertEqual(MyClass.otherarg, 1) @@ -241,4 +241,4 @@ if __name__ == "__main__": - main() + unittest.main() diff --git a/Objects/typeobject.c b/Objects/typeobject.c --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -4341,11 +4341,10 @@ } PyDoc_STRVAR(object_init_subclass_doc, -"This method is called when a class is subclassed\n" +"This method is called when a class is subclassed.\n" "\n" -"Whenever a class is subclassed, this method is called. The default\n" -"implementation does nothing. It may be overridden to extend\n" -"subclasses.\n"); +"The default implementation does nothing. It may be\n" +"overridden to extend subclasses.\n"); /* from PEP 3101, this code implements: -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 07:13:35 2016 From: python-checkins at python.org (berker.peksag) Date: Sat, 30 Jul 2016 11:13:35 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_=2327652=3A_Expose_E?= =?utf-8?q?SHUTDOWN_conditionally?= Message-ID: <20160730111335.1454.61971.F35A8DCA@psf.io> https://hg.python.org/cpython/rev/77d16a5dc779 changeset: 102495:77d16a5dc779 user: Berker Peksag date: Sat Jul 30 14:14:12 2016 +0300 summary: Issue #27652: Expose ESHUTDOWN conditionally ESHUTDOWN is also exposed conditionally in Modules/errnomodule.c. Patch by Ed Schouten. files: Objects/exceptions.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/Objects/exceptions.c b/Objects/exceptions.c --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -2604,7 +2604,9 @@ ADD_ERRNO(BlockingIOError, EWOULDBLOCK); POST_INIT(BrokenPipeError); ADD_ERRNO(BrokenPipeError, EPIPE); +#ifdef ESHUTDOWN ADD_ERRNO(BrokenPipeError, ESHUTDOWN); +#endif POST_INIT(ChildProcessError); ADD_ERRNO(ChildProcessError, ECHILD); POST_INIT(ConnectionAbortedError); -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 08:49:59 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sat, 30 Jul 2016 12:49:59 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=282=2E7=29=3A_Prevent_HTTPox?= =?utf-8?q?y_attack_=28CVE-2016-1000110=29?= Message-ID: <20160730124959.128885.90299.ECB1B0A7@psf.io> https://hg.python.org/cpython/rev/ba915d561667 changeset: 102496:ba915d561667 branch: 2.7 parent: 102472:c8c1ea94379a user: Senthil Kumaran date: Sat Jul 30 05:49:53 2016 -0700 summary: Prevent HTTPoxy attack (CVE-2016-1000110) Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode. Issue reported and patch contributed by R?mi Rampin. files: Doc/howto/urllib2.rst | 5 +++++ Doc/library/urllib.rst | 10 ++++++++++ Doc/library/urllib2.rst | 5 +++++ Lib/test/test_urllib.py | 12 ++++++++++++ Lib/urllib.py | 9 +++++++++ Misc/ACKS | 1 + Misc/NEWS | 4 ++++ 7 files changed, 46 insertions(+), 0 deletions(-) diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -525,6 +525,11 @@ through a proxy. However, this can be enabled by extending urllib2 as shown in the recipe [#]_. +.. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see + the documentation on :func:`~urllib.getproxies`. + Sockets and Layers ================== diff --git a/Doc/library/urllib.rst b/Doc/library/urllib.rst --- a/Doc/library/urllib.rst +++ b/Doc/library/urllib.rst @@ -295,6 +295,16 @@ If both lowercase and uppercase environment variables exist (and disagree), lowercase is preferred. + .. note:: + + If the environment variable ``REQUEST_METHOD`` is set, which usually + indicates your script is running in a CGI environment, the environment + variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is + because that variable can be injected by a client using the "Proxy:" + HTTP header. If you need to use an HTTP proxy in a CGI environment, + either use ``ProxyHandler`` explicitly, or make sure the variable name + is in lowercase (or at least the ``_proxy`` suffix). + .. note:: urllib also exposes certain utility functions like splittype, splithost and others parsing URL into various components. But it is recommended to use diff --git a/Doc/library/urllib2.rst b/Doc/library/urllib2.rst --- a/Doc/library/urllib2.rst +++ b/Doc/library/urllib2.rst @@ -229,6 +229,11 @@ To disable autodetected proxy pass an empty dictionary. + .. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; + see the documentation on :func:`~urllib.getproxies`. + .. class:: HTTPPasswordMgr() diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -170,6 +170,18 @@ self.assertTrue(urllib.proxy_bypass_environment('anotherdomain.com:8888')) self.assertTrue(urllib.proxy_bypass_environment('newdomain.com:1234')) + def test_proxy_cgi_ignore(self): + try: + self.env.set('HTTP_PROXY', 'http://somewhere:3128') + proxies = urllib.getproxies_environment() + self.assertEqual('http://somewhere:3128', proxies['http']) + self.env.set('REQUEST_METHOD', 'GET') + proxies = urllib.getproxies_environment() + self.assertNotIn('http', proxies) + finally: + self.env.unset('REQUEST_METHOD') + self.env.unset('HTTP_PROXY') + def test_proxy_bypass_environment_host_match(self): bypass = urllib.proxy_bypass_environment self.env.set('NO_PROXY', diff --git a/Lib/urllib.py b/Lib/urllib.py --- a/Lib/urllib.py +++ b/Lib/urllib.py @@ -1380,12 +1380,21 @@ If you need a different way, you can pass a proxies dictionary to the [Fancy]URLopener constructor. """ + # Get all variables proxies = {} for name, value in os.environ.items(): name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + # If "proxy" is lowercase, it will still be used thanks to the next block + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) + + # Get lowercase variables for name, value in os.environ.items(): if name[-6:] == '_proxy': name = name.lower() diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1123,6 +1123,7 @@ Jeff Ramnani Varpu Rantala Brodie Rao +R?mi Rampin Senko Rasic Antti Rasinen Nikolaus Rath diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -29,6 +29,10 @@ Library ------- +- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the + HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates + that the script is in CGI mode. + - Issue #27130: In the "zlib" module, fix handling of large buffers (typically 2 or 4 GiB). Previously, inputs were limited to 2 GiB, and compression and decompression operations did not properly handle results of -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 11:41:05 2016 From: python-checkins at python.org (alexander.belopolsky) Date: Sat, 30 Jul 2016 15:41:05 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_24773=3A_Use_the_sta?= =?utf-8?q?ndard_Asia/Tehran_name_in_the_Iran_test=2E?= Message-ID: <20160730154104.26491.3265.3F3318F2@psf.io> https://hg.python.org/cpython/rev/eed3a5b9239f changeset: 102497:eed3a5b9239f parent: 102495:77d16a5dc779 user: Alexander Belopolsky date: Sat Jul 30 11:41:02 2016 -0400 summary: Issue 24773: Use the standard Asia/Tehran name in the Iran test. files: Lib/test/datetimetester.py | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/Lib/test/datetimetester.py b/Lib/test/datetimetester.py --- a/Lib/test/datetimetester.py +++ b/Lib/test/datetimetester.py @@ -4794,7 +4794,7 @@ # Iran had a sub-minute UTC offset before 1946. class IranTest(ZoneInfoTest): - zonename = 'Iran' + zonename = 'Asia/Tehran' def load_tests(loader, standard_tests, pattern): standard_tests.addTest(ZoneInfoCompleteTest()) -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sat Jul 30 22:43:03 2016 From: python-checkins at python.org (nick.coghlan) Date: Sun, 31 Jul 2016 02:43:03 +0000 Subject: [Python-checkins] =?utf-8?q?cpython=3A_Issue_27366=3A_PEP_487_doc?= =?utf-8?q?s_updates?= Message-ID: <20160731024303.128768.79931.F8E1DFA0@psf.io> https://hg.python.org/cpython/rev/313e8fdb0d0c changeset: 102498:313e8fdb0d0c user: Nick Coghlan date: Sun Jul 31 12:42:49 2016 +1000 summary: Issue 27366: PEP 487 docs updates - Porting note for type keyword arg handling - __init_subclass__ note regarding metaclass hint files: Doc/reference/datamodel.rst | 7 +++++++ Doc/whatsnew/3.6.rst | 9 +++++++++ 2 files changed, 16 insertions(+), 0 deletions(-) diff --git a/Doc/reference/datamodel.rst b/Doc/reference/datamodel.rst --- a/Doc/reference/datamodel.rst +++ b/Doc/reference/datamodel.rst @@ -1672,6 +1672,13 @@ The default implementation ``object.__init_subclass__`` does nothing, but raises an error if it is called with any arguments. + .. note:: + + The metaclass hint ``metaclass`` is consumed by the rest of the type + machinery, and is never passed to ``__init_subclass__`` implementations. + The actual metaclass (rather than the explicit hint) can be accessed as + ``type(cls)``. + .. versionadded:: 3.6 diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst --- a/Doc/whatsnew/3.6.rst +++ b/Doc/whatsnew/3.6.rst @@ -759,6 +759,15 @@ `. (Contributed by Serhiy Storchaka in :issue:`18726`.) +* As part of :pep:`487`, the handling of keyword arguments passed to + :class:`type` (other than the metaclass hint, ``metaclass``) is now + consistently delegated to :meth:`object.__init_subclass__`. This means that + :meth:`type.__new__` and :meth:`type.__init__` both now accept arbitrary + keyword arguments, but :meth:`object.__init_subclass__` (which is called from + :meth:`type.__new__`) will reject them by default. Custom metaclasses + accepting additional keyword arguments will need to adjust their calls to + :meth:`type.__new__` (whether direct or via :class:`super`) accordingly. + Changes in the C API -------------------- -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 31 02:22:34 2016 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 31 Jul 2016 06:22:34 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?b?KTogbWVyZ2UgMy41ICgjMjc2NTYp?= Message-ID: <20160731062234.23770.98739.79786084@psf.io> https://hg.python.org/cpython/rev/64b763290da9 changeset: 102500:64b763290da9 parent: 102498:313e8fdb0d0c parent: 102499:095b424127e7 user: Benjamin Peterson date: Sat Jul 30 23:22:24 2016 -0700 summary: merge 3.5 (#27656) files: Misc/NEWS | 2 ++ Modules/posixmodule.c | 6 ++++++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -41,6 +41,8 @@ - Issue #7063: Remove dead code from the "array" module's slice handling. Patch by Chuck. +- Issue #27656: Do not assume sched.h defines any SCHED_* constants. + - Issue #27130: In the "zlib" module, fix handling of large buffers (typically 4 GiB) when compressing and decompressing. Previously, inputs were limited to 4 GiB, and compression and decompression operations did not diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12938,9 +12938,15 @@ #endif #ifdef HAVE_SCHED_H +#ifdef SCHED_OTHER if (PyModule_AddIntMacro(m, SCHED_OTHER)) return -1; +#endif +#ifdef SCHED_FIFO if (PyModule_AddIntMacro(m, SCHED_FIFO)) return -1; +#endif +#ifdef SCHED_RR if (PyModule_AddIntMacro(m, SCHED_RR)) return -1; +#endif #ifdef SCHED_SPORADIC if (PyModule_AddIntMacro(m, SCHED_SPORADIC) return -1; #endif -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 31 02:22:34 2016 From: python-checkins at python.org (benjamin.peterson) Date: Sun, 31 Jul 2016 06:22:34 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAoMy41KTogYWxsIFNDSEVEXyBj?= =?utf-8?q?onstants_are_optional_=28closes_=2327656=29?= Message-ID: <20160731062234.32647.10372.6137B96F@psf.io> https://hg.python.org/cpython/rev/095b424127e7 changeset: 102499:095b424127e7 branch: 3.5 parent: 102492:4cb94e561e2d user: Benjamin Peterson date: Sat Jul 30 23:21:50 2016 -0700 summary: all SCHED_ constants are optional (closes #27656) files: Misc/NEWS | 2 ++ Modules/posixmodule.c | 6 ++++++ 2 files changed, 8 insertions(+), 0 deletions(-) diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,8 @@ Library ------- +- Issue #27656: Do not assume sched.h defines any SCHED_* constants. + - Issue #27130: In the "zlib" module, fix handling of large buffers (typically 4 GiB) when compressing and decompressing. Previously, inputs were limited to 4 GiB, and compression and decompression operations did not diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -12750,9 +12750,15 @@ #endif #ifdef HAVE_SCHED_H +#ifdef SCHED_OTHER if (PyModule_AddIntMacro(m, SCHED_OTHER)) return -1; +#endif +#ifdef SCHED_FIFO if (PyModule_AddIntMacro(m, SCHED_FIFO)) return -1; +#endif +#ifdef SCHED_RR if (PyModule_AddIntMacro(m, SCHED_RR)) return -1; +#endif #ifdef SCHED_SPORADIC if (PyModule_AddIntMacro(m, SCHED_SPORADIC) return -1; #endif -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 31 02:51:49 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 31 Jul 2016 06:51:49 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=283=2E3=29=3A_Prevent_HTTPox?= =?utf-8?q?y_attack_=28CVE-2016-1000110=29?= Message-ID: <20160731065149.43155.68669.A1E60308@psf.io> https://hg.python.org/cpython/rev/95b09ccc8a3e changeset: 102501:95b09ccc8a3e branch: 3.3 parent: 102340:1c06e02b968a user: Senthil Kumaran date: Sat Jul 30 23:24:16 2016 -0700 summary: Prevent HTTPoxy attack (CVE-2016-1000110) Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode. Issue #27568 Reported and patch contributed by R?mi Rampin. files: Doc/howto/urllib2.rst | 5 +++++ Doc/library/urllib.request.rst | 13 +++++++++++++ Lib/test/test_urllib.py | 13 +++++++++++++ Lib/urllib/request.py | 7 +++++++ Misc/NEWS | 4 ++++ 5 files changed, 42 insertions(+), 0 deletions(-) diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -538,6 +538,11 @@ through a proxy. However, this can be enabled by extending urllib.request as shown in the recipe [#]_. +.. note:: + + `HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see + the documentation on :func:`~urllib.request.getproxies`. + Sockets and Layers ================== diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -161,6 +161,14 @@ cannot find it, looks for proxy information from Mac OSX System Configuration for Mac OS X and Windows Systems Registry for Windows. + .. note:: + + If the environment variable ``REQUEST_METHOD`` is set, which usually + indicates your script is running in a CGI environment, the environment + variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is + because that variable can be injected by a client using the "Proxy:" HTTP + header. If you need to use an HTTP proxy in a CGI environment use + ``ProxyHandler`` explicitly. The following classes are provided: @@ -265,6 +273,11 @@ To disable autodetected proxy pass an empty dictionary. + .. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; + see the documentation on :func:`~urllib.request.getproxies`. + .. class:: HTTPPasswordMgr() diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -194,6 +194,19 @@ self.env.set('NO_PROXY', 'localhost, anotherdomain.com, newdomain.com') self.assertTrue(urllib.request.proxy_bypass_environment('anotherdomain.com')) + def test_proxy_cgi_ignore(self): + try: + self.env.set('HTTP_PROXY', 'http://somewhere:3128') + proxies = urllib.request.getproxies_environment() + self.assertEqual('http://somewhere:3128', proxies['http']) + self.env.set('REQUEST_METHOD', 'GET') + proxies = urllib.request.getproxies_environment() + self.assertNotIn('http', proxies) + finally: + self.env.unset('REQUEST_METHOD') + self.env.unset('HTTP_PROXY') + + class urlopen_HttpTests(unittest.TestCase, FakeHTTPMixin): """Test urlopen() opening a fake http connection.""" diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -2366,6 +2366,13 @@ name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) + return proxies def proxy_bypass_environment(host): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -29,6 +29,10 @@ Library ------- +- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the + HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates + that the script is in CGI mode. + - Issue #24521: Fix possible integer overflows in the pickle module. - Issue #22931: Allow '[' and ']' in cookie values. -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 31 02:51:49 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 31 Jul 2016 06:51:49 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy4zIC0+IDMuNCk6?= =?utf-8?q?_=5Bmerge_from_3=2E3=5D_Prevent_HTTPoxy_attack_=28CVE-2016-1000?= =?utf-8?q?110=29?= Message-ID: <20160731065149.26748.54615.4172B2C7@psf.io> https://hg.python.org/cpython/rev/3c19023c9fec changeset: 102502:3c19023c9fec branch: 3.4 parent: 102341:17ec4d58c046 parent: 102501:95b09ccc8a3e user: Senthil Kumaran date: Sat Jul 30 23:34:34 2016 -0700 summary: [merge from 3.3] Prevent HTTPoxy attack (CVE-2016-1000110) Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode. Issue #27568 Reported and patch contributed by R?mi Rampin. files: Doc/howto/urllib2.rst | 5 +++++ Doc/library/urllib.request.rst | 13 +++++++++++++ Lib/test/test_urllib.py | 13 +++++++++++++ Lib/urllib/request.py | 7 +++++++ Misc/NEWS | 4 ++++ 5 files changed, 42 insertions(+), 0 deletions(-) diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -538,6 +538,11 @@ through a proxy. However, this can be enabled by extending urllib.request as shown in the recipe [#]_. +.. note:: + + `HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see + the documentation on :func:`~urllib.request.getproxies`. + Sockets and Layers ================== diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -166,6 +166,14 @@ cannot find it, looks for proxy information from Mac OSX System Configuration for Mac OS X and Windows Systems Registry for Windows. + .. note:: + + If the environment variable ``REQUEST_METHOD`` is set, which usually + indicates your script is running in a CGI environment, the environment + variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is + because that variable can be injected by a client using the "Proxy:" HTTP + header. If you need to use an HTTP proxy in a CGI environment use + ``ProxyHandler`` explicitly. The following classes are provided: @@ -268,6 +276,11 @@ To disable autodetected proxy pass an empty dictionary. + .. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; + see the documentation on :func:`~urllib.request.getproxies`. + .. class:: HTTPPasswordMgr() diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -222,6 +222,19 @@ self.env.set('NO_PROXY', 'localhost, anotherdomain.com, newdomain.com') self.assertTrue(urllib.request.proxy_bypass_environment('anotherdomain.com')) + def test_proxy_cgi_ignore(self): + try: + self.env.set('HTTP_PROXY', 'http://somewhere:3128') + proxies = urllib.request.getproxies_environment() + self.assertEqual('http://somewhere:3128', proxies['http']) + self.env.set('REQUEST_METHOD', 'GET') + proxies = urllib.request.getproxies_environment() + self.assertNotIn('http', proxies) + finally: + self.env.unset('REQUEST_METHOD') + self.env.unset('HTTP_PROXY') + + class urlopen_HttpTests(unittest.TestCase, FakeHTTPMixin, FakeFTPMixin): """Test urlopen() opening a fake http connection.""" diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -2337,6 +2337,13 @@ name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) + return proxies def proxy_bypass_environment(host): diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -13,6 +13,10 @@ Library ------- +- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the + HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates + that the script is in CGI mode. + Tests ----- -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 31 02:51:50 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 31 Jul 2016 06:51:50 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy40IC0+IDMuNSk6?= =?utf-8?q?_=5Bmerge_from_3=2E4=5D_-_Prevent_HTTPoxy_attack_=28CVE-2016-10?= =?utf-8?q?00110=29?= Message-ID: <20160731065149.23770.2632.EFC001EF@psf.io> https://hg.python.org/cpython/rev/a0ac52ed8f79 changeset: 102503:a0ac52ed8f79 branch: 3.5 parent: 102492:4cb94e561e2d parent: 102502:3c19023c9fec user: Senthil Kumaran date: Sat Jul 30 23:39:06 2016 -0700 summary: [merge from 3.4] - Prevent HTTPoxy attack (CVE-2016-1000110) Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode. Issue #27568 Reported and patch contributed by R?mi Rampin. files: Doc/howto/urllib2.rst | 5 +++++ Doc/library/urllib.request.rst | 15 +++++++++++++++ Lib/test/test_urllib.py | 12 ++++++++++++ Lib/urllib/request.py | 6 ++++++ Misc/NEWS | 4 ++++ 5 files changed, 42 insertions(+), 0 deletions(-) diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -538,6 +538,11 @@ through a proxy. However, this can be enabled by extending urllib.request as shown in the recipe [#]_. +.. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see + the documentation on :func:`~urllib.request.getproxies`. + Sockets and Layers ================== diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -173,6 +173,16 @@ If both lowercase and uppercase environment variables exist (and disagree), lowercase is preferred. + .. note:: + + If the environment variable ``REQUEST_METHOD`` is set, which usually + indicates your script is running in a CGI environment, the environment + variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is + because that variable can be injected by a client using the "Proxy:" HTTP + header. If you need to use an HTTP proxy in a CGI environment, either use + ``ProxyHandler`` explicitly, or make sure the variable name is in + lowercase (or at least the ``_proxy`` suffix). + The following classes are provided: @@ -280,6 +290,11 @@ list of hostname suffixes, optionally with ``:port`` appended, for example ``cern.ch,ncsa.uiuc.edu,some.host:8080``. + .. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; + see the documentation on :func:`~urllib.request.getproxies`. + .. class:: HTTPPasswordMgr() diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -232,6 +232,18 @@ self.assertTrue(urllib.request.proxy_bypass_environment('anotherdomain.com:8888')) self.assertTrue(urllib.request.proxy_bypass_environment('newdomain.com:1234')) + def test_proxy_cgi_ignore(self): + try: + self.env.set('HTTP_PROXY', 'http://somewhere:3128') + proxies = urllib.request.getproxies_environment() + self.assertEqual('http://somewhere:3128', proxies['http']) + self.env.set('REQUEST_METHOD', 'GET') + proxies = urllib.request.getproxies_environment() + self.assertNotIn('http', proxies) + finally: + self.env.unset('REQUEST_METHOD') + self.env.unset('HTTP_PROXY') + def test_proxy_bypass_environment_host_match(self): bypass = urllib.request.proxy_bypass_environment self.env.set('NO_PROXY', diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -2412,6 +2412,12 @@ name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + # If "proxy" is lowercase, it will still be used thanks to the next block + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) for name, value in os.environ.items(): if name[-6:] == '_proxy': name = name.lower() diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,10 @@ Library ------- +- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the + HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates + that the script is in CGI mode. + - Issue #27130: In the "zlib" module, fix handling of large buffers (typically 4 GiB) when compressing and decompressing. Previously, inputs were limited to 4 GiB, and compression and decompression operations did not -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 31 02:51:50 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 31 Jul 2016 06:51:50 +0000 Subject: [Python-checkins] =?utf-8?b?Y3B5dGhvbiAobWVyZ2UgMy41IC0+IDMuNSk6?= =?utf-8?q?_merge_heads?= Message-ID: <20160731065150.31450.87260.D21784CB@psf.io> https://hg.python.org/cpython/rev/7062eaee3adf changeset: 102504:7062eaee3adf branch: 3.5 parent: 102499:095b424127e7 parent: 102503:a0ac52ed8f79 user: Senthil Kumaran date: Sat Jul 30 23:48:19 2016 -0700 summary: merge heads files: Doc/howto/urllib2.rst | 5 +++++ Doc/library/urllib.request.rst | 15 +++++++++++++++ Lib/test/test_urllib.py | 12 ++++++++++++ Lib/urllib/request.py | 6 ++++++ Misc/NEWS | 4 ++++ 5 files changed, 42 insertions(+), 0 deletions(-) diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -538,6 +538,11 @@ through a proxy. However, this can be enabled by extending urllib.request as shown in the recipe [#]_. +.. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see + the documentation on :func:`~urllib.request.getproxies`. + Sockets and Layers ================== diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -173,6 +173,16 @@ If both lowercase and uppercase environment variables exist (and disagree), lowercase is preferred. + .. note:: + + If the environment variable ``REQUEST_METHOD`` is set, which usually + indicates your script is running in a CGI environment, the environment + variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is + because that variable can be injected by a client using the "Proxy:" HTTP + header. If you need to use an HTTP proxy in a CGI environment, either use + ``ProxyHandler`` explicitly, or make sure the variable name is in + lowercase (or at least the ``_proxy`` suffix). + The following classes are provided: @@ -280,6 +290,11 @@ list of hostname suffixes, optionally with ``:port`` appended, for example ``cern.ch,ncsa.uiuc.edu,some.host:8080``. + .. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; + see the documentation on :func:`~urllib.request.getproxies`. + .. class:: HTTPPasswordMgr() diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -232,6 +232,18 @@ self.assertTrue(urllib.request.proxy_bypass_environment('anotherdomain.com:8888')) self.assertTrue(urllib.request.proxy_bypass_environment('newdomain.com:1234')) + def test_proxy_cgi_ignore(self): + try: + self.env.set('HTTP_PROXY', 'http://somewhere:3128') + proxies = urllib.request.getproxies_environment() + self.assertEqual('http://somewhere:3128', proxies['http']) + self.env.set('REQUEST_METHOD', 'GET') + proxies = urllib.request.getproxies_environment() + self.assertNotIn('http', proxies) + finally: + self.env.unset('REQUEST_METHOD') + self.env.unset('HTTP_PROXY') + def test_proxy_bypass_environment_host_match(self): bypass = urllib.request.proxy_bypass_environment self.env.set('NO_PROXY', diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -2412,6 +2412,12 @@ name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + # If "proxy" is lowercase, it will still be used thanks to the next block + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) for name, value in os.environ.items(): if name[-6:] == '_proxy': name = name.lower() diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -34,6 +34,10 @@ Library ------- +- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the + HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates + that the script is in CGI mode. + - Issue #27656: Do not assume sched.h defines any SCHED_* constants. - Issue #27130: In the "zlib" module, fix handling of large buffers -- Repository URL: https://hg.python.org/cpython From python-checkins at python.org Sun Jul 31 02:51:50 2016 From: python-checkins at python.org (senthil.kumaran) Date: Sun, 31 Jul 2016 06:51:50 +0000 Subject: [Python-checkins] =?utf-8?q?cpython_=28merge_3=2E5_-=3E_default?= =?utf-8?q?=29=3A_=5Bmerge_from_3=2E5=5D_-_Prevent_HTTPoxy_attack_=28CVE-2?= =?utf-8?q?016-1000110=29?= Message-ID: <20160731065150.19538.7704.4A99DF61@psf.io> https://hg.python.org/cpython/rev/6c2e2de5ab8e changeset: 102505:6c2e2de5ab8e parent: 102500:64b763290da9 parent: 102504:7062eaee3adf user: Senthil Kumaran date: Sat Jul 30 23:51:13 2016 -0700 summary: [merge from 3.5] - Prevent HTTPoxy attack (CVE-2016-1000110) Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates that the script is in CGI mode. Issue #27568 Reported and patch contributed by R?mi Rampin. files: Doc/howto/urllib2.rst | 5 +++++ Doc/library/urllib.request.rst | 15 +++++++++++++++ Lib/test/test_urllib.py | 12 ++++++++++++ Lib/urllib/request.py | 6 ++++++ Misc/ACKS | 1 + Misc/NEWS | 4 ++++ 6 files changed, 43 insertions(+), 0 deletions(-) diff --git a/Doc/howto/urllib2.rst b/Doc/howto/urllib2.rst --- a/Doc/howto/urllib2.rst +++ b/Doc/howto/urllib2.rst @@ -538,6 +538,11 @@ through a proxy. However, this can be enabled by extending urllib.request as shown in the recipe [#]_. +.. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; see + the documentation on :func:`~urllib.request.getproxies`. + Sockets and Layers ================== diff --git a/Doc/library/urllib.request.rst b/Doc/library/urllib.request.rst --- a/Doc/library/urllib.request.rst +++ b/Doc/library/urllib.request.rst @@ -173,6 +173,16 @@ If both lowercase and uppercase environment variables exist (and disagree), lowercase is preferred. + .. note:: + + If the environment variable ``REQUEST_METHOD`` is set, which usually + indicates your script is running in a CGI environment, the environment + variable ``HTTP_PROXY`` (uppercase ``_PROXY``) will be ignored. This is + because that variable can be injected by a client using the "Proxy:" HTTP + header. If you need to use an HTTP proxy in a CGI environment, either use + ``ProxyHandler`` explicitly, or make sure the variable name is in + lowercase (or at least the ``_proxy`` suffix). + The following classes are provided: @@ -280,6 +290,11 @@ list of hostname suffixes, optionally with ``:port`` appended, for example ``cern.ch,ncsa.uiuc.edu,some.host:8080``. + .. note:: + + ``HTTP_PROXY`` will be ignored if a variable ``REQUEST_METHOD`` is set; + see the documentation on :func:`~urllib.request.getproxies`. + .. class:: HTTPPasswordMgr() diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py --- a/Lib/test/test_urllib.py +++ b/Lib/test/test_urllib.py @@ -232,6 +232,18 @@ self.assertTrue(urllib.request.proxy_bypass_environment('anotherdomain.com:8888')) self.assertTrue(urllib.request.proxy_bypass_environment('newdomain.com:1234')) + def test_proxy_cgi_ignore(self): + try: + self.env.set('HTTP_PROXY', 'http://somewhere:3128') + proxies = urllib.request.getproxies_environment() + self.assertEqual('http://somewhere:3128', proxies['http']) + self.env.set('REQUEST_METHOD', 'GET') + proxies = urllib.request.getproxies_environment() + self.assertNotIn('http', proxies) + finally: + self.env.unset('REQUEST_METHOD') + self.env.unset('HTTP_PROXY') + def test_proxy_bypass_environment_host_match(self): bypass = urllib.request.proxy_bypass_environment self.env.set('NO_PROXY', diff --git a/Lib/urllib/request.py b/Lib/urllib/request.py --- a/Lib/urllib/request.py +++ b/Lib/urllib/request.py @@ -2477,6 +2477,12 @@ name = name.lower() if value and name[-6:] == '_proxy': proxies[name[:-6]] = value + # CVE-2016-1000110 - If we are running as CGI script, forget HTTP_PROXY + # (non-all-lowercase) as it may be set from the web server by a "Proxy:" + # header from the client + # If "proxy" is lowercase, it will still be used thanks to the next block + if 'REQUEST_METHOD' in os.environ: + proxies.pop('http', None) for name, value in os.environ.items(): if name[-6:] == '_proxy': name = name.lower() diff --git a/Misc/ACKS b/Misc/ACKS --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1204,6 +1204,7 @@ Jeff Ramnani Varpu Rantala Brodie Rao +R?mi Rampin Senko Rasic Antti Rasinen Nikolaus Rath diff --git a/Misc/NEWS b/Misc/NEWS --- a/Misc/NEWS +++ b/Misc/NEWS @@ -38,6 +38,10 @@ Library ------- +- Issue #27568: Prevent HTTPoxy attack (CVE-2016-1000110). Ignore the + HTTP_PROXY variable when REQUEST_METHOD environment is set, which indicates + that the script is in CGI mode. + - Issue #7063: Remove dead code from the "array" module's slice handling. Patch by Chuck. -- Repository URL: https://hg.python.org/cpython